[nfft] 01/02: Imported Upstream version 3.2.3

Ghislain Vaillant ghisvail-guest at alioth.debian.org
Mon Oct 21 13:42:52 UTC 2013


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

ghisvail-guest pushed a commit to branch master
in repository nfft.

commit 946606bbd72a299c20d5b2159a03c1fe6b052913
Author: Ghislain Vaillant <ghisvail at gmail.com>
Date:   Mon Oct 21 14:30:00 2013 +0100

    Imported Upstream version 3.2.3
---
 3rdparty/Makefile.am                               |    9 +
 3rdparty/Makefile.in                               |  679 +
 3rdparty/README                                    |    9 +
 3rdparty/cstripack/Makefile.am                     |    7 +
 3rdparty/cstripack/Makefile.in                     |  556 +
 3rdparty/cstripack/cstripack.c                     | 6262 +++
 3rdparty/cstripack/cstripack.h                     |  124 +
 AUTHORS                                            |   46 +
 COPYING                                            |  340 +
 ChangeLog                                          |   81 +
 INSTALL                                            |  370 +
 Makefile.am                                        |   97 +
 Makefile.in                                        | 1050 +
 README                                             |  110 +
 aclocal.m4                                         | 1081 +
 applications/Makefile.am                           |   23 +
 applications/Makefile.in                           |  650 +
 applications/doxygen.c                             |   23 +
 applications/fastgauss/Makefile.am                 |   10 +
 applications/fastgauss/Makefile.in                 |  555 +
 applications/fastgauss/README                      |   22 +
 applications/fastgauss/fastgauss.c                 |  610 +
 applications/fastgauss/levelplots.m                |   35 +
 applications/fastgauss/show_results.m              |   51 +
 applications/fastsum/Makefile.am                   |   73 +
 applications/fastsum/Makefile.in                   |  776 +
 applications/fastsum/README                        |   41 +
 applications/fastsum/fastsum.c                     | 1018 +
 applications/fastsum/fastsum.h                     |  177 +
 applications/fastsum/fastsum.m                     |   57 +
 applications/fastsum/fastsum_benchomp.c            |  651 +
 .../fastsum/fastsum_benchomp_createdataset.c       |  129 +
 applications/fastsum/fastsum_benchomp_detail.c     |  190 +
 applications/fastsum/fastsum_matlab.c              |  224 +
 applications/fastsum/fastsum_test.c                |  272 +
 applications/fastsum/fastsum_test.m                |   57 +
 applications/fastsum/kernels.c                     |  405 +
 applications/fastsum/kernels.h                     |   63 +
 applications/fastsumS2/Makefile.am                 |   10 +
 applications/fastsumS2/Makefile.in                 |  555 +
 applications/fastsumS2/README                      |  191 +
 applications/fastsumS2/doxygen.h                   |   24 +
 applications/fastsumS2/example.in                  |  240 +
 applications/fastsumS2/example.out                 | 1584 +
 applications/fastsumS2/fastsumS2.c                 |  912 +
 applications/fastsumS2/fastsumS2.m                 |  299 +
 applications/fastsumS2/readTestcase.m              |  203 +
 applications/fastsumS2/writeTestcase.m             |  118 +
 applications/iterS2/Makefile.am                    |   11 +
 applications/iterS2/Makefile.in                    |  556 +
 applications/iterS2/README                         |   50 +
 applications/iterS2/doxygen.h                      |   24 +
 applications/iterS2/iterS2.c                       |  440 +
 applications/iterS2/writeImageTestcase.m           |  111 +
 applications/iterS2/writeTestcase.m                |   77 +
 applications/mri/Makefile.am                       |    2 +
 applications/mri/Makefile.in                       |  638 +
 applications/mri/doxygen.c                         |   24 +
 applications/mri/mri2d/Makefile.am                 |   51 +
 applications/mri/mri2d/Makefile.in                 |  661 +
 applications/mri/mri2d/README                      |   24 +
 applications/mri/mri2d/construct_data_2d.c         |   98 +
 applications/mri/mri2d/construct_data_inh_2d1d.c   |  157 +
 applications/mri/mri2d/construct_data_inh_3d.c     |  156 +
 applications/mri/mri2d/construct_inh.m             |   27 +
 applications/mri/mri2d/construct_knots_linogram.m  |   31 +
 applications/mri/mri2d/construct_knots_radial.m    |   39 +
 applications/mri/mri2d/construct_knots_rose.m      |   41 +
 applications/mri/mri2d/construct_knots_spiral.m    |   42 +
 applications/mri/mri2d/construct_readout_time.m    |   29 +
 applications/mri/mri2d/doxygen.h                   |   24 +
 applications/mri/mri2d/mri.m                       |   69 +
 applications/mri/mri2d/mri_inh.m                   |   69 +
 applications/mri/mri2d/phantom.m                   |   46 +
 applications/mri/mri2d/precompute_weights.m        |   69 +
 applications/mri/mri2d/reconstruct_data_2d.c       |  175 +
 applications/mri/mri2d/reconstruct_data_gridding.c |  112 +
 applications/mri/mri2d/reconstruct_data_inh_2d1d.c |  228 +
 applications/mri/mri2d/reconstruct_data_inh_3d.c   |  222 +
 .../mri/mri2d/reconstruct_data_inh_nnfft.c         |  241 +
 applications/mri/mri2d/rms.m                       |   32 +
 applications/mri/mri2d/visualize_data.m            |   49 +
 applications/mri/mri3d/Makefile.am                 |   37 +
 applications/mri/mri3d/Makefile.in                 |  612 +
 applications/mri/mri3d/README                      |   18 +
 applications/mri/mri3d/construct_data_2d1d.c       |  143 +
 applications/mri/mri3d/construct_data_3d.c         |  108 +
 applications/mri/mri3d/construct_knots_linogram.m  |   38 +
 applications/mri/mri3d/construct_knots_radial.m    |   44 +
 applications/mri/mri3d/construct_knots_radial_3d.m |   49 +
 applications/mri/mri3d/construct_knots_rose.m      |   43 +
 applications/mri/mri3d/construct_knots_spiral.m    |   41 +
 applications/mri/mri3d/construct_phantom.m         |   88 +
 applications/mri/mri3d/doxygen.h                   |   24 +
 applications/mri/mri3d/mri.m                       |   91 +
 applications/mri/mri3d/precompute_weights_2d.m     |   77 +
 applications/mri/mri3d/reconstruct_data_2d1d.c     |  218 +
 applications/mri/mri3d/reconstruct_data_3d.c       |  173 +
 applications/mri/mri3d/reconstruct_data_gridding.c |  167 +
 applications/mri/mri3d/rms.m                       |   32 +
 applications/mri/mri3d/visualize_data.m            |   54 +
 applications/polarFFT/Makefile.am                  |   16 +
 applications/polarFFT/Makefile.in                  |  576 +
 applications/polarFFT/README                       |   20 +
 applications/polarFFT/doxygen.h                    |   24 +
 applications/polarFFT/fft_test.m                   |  124 +
 applications/polarFFT/linogram_fft_test.c          |  489 +
 applications/polarFFT/mpolar_fft_test.c            |  517 +
 applications/polarFFT/phantom.m                    |   46 +
 applications/polarFFT/polar_fft_test.c             |  423 +
 applications/quadratureS2/Makefile.am              |   10 +
 applications/quadratureS2/Makefile.in              |  555 +
 applications/quadratureS2/doxygen.h                |   24 +
 applications/quadratureS2/example.in               |  354 +
 applications/quadratureS2/example.out              |   42 +
 applications/quadratureS2/lgwt.m                   |   77 +
 applications/quadratureS2/plotGrid.m               |  123 +
 applications/quadratureS2/quadratureS2.c           | 1146 +
 applications/quadratureS2/quadratureS2.m           |  177 +
 applications/quadratureS2/readTestcase.m           |  176 +
 applications/quadratureS2/writeTestcase.m          |   77 +
 applications/quadratureS2/writeWeights.m           |   35 +
 applications/radon/Makefile.am                     |   13 +
 applications/radon/Makefile.in                     |  564 +
 applications/radon/README                          |   27 +
 applications/radon/inverse_radon.c                 |  293 +
 applications/radon/phantom.m                       |   46 +
 applications/radon/radon.c                         |  261 +
 applications/radon/radon.m                         |   77 +
 applications/radon/ridgelet.m                      |  111 +
 bootstrap.sh                                       |   46 +
 config/compile                                     |  342 +
 config/config.guess                                | 1540 +
 config/config.sub                                  | 1779 +
 config/depcomp                                     |  707 +
 config/install-sh                                  |  527 +
 config/ltmain.sh                                   | 9655 +++++
 config/missing                                     |  330 +
 configure                                          |22488 +++++++++++
 configure.ac                                       |  514 +
 doc/api/html/accuracy_8c_source.html               |  148 +
 doc/api/html/annotated.html                        |  109 +
 doc/api/html/applications_2doxygen_8c_source.html  |   70 +
 ...applications_2fastsumS2_2doxygen_8h_source.html |   70 +
 .../applications_2iterS2_2doxygen_8h_source.html   |   70 +
 .../html/applications_2mri_2doxygen_8c_source.html |   70 +
 ...pplications_2mri_2mri2d_2doxygen_8h_source.html |   70 +
 ...pplications_2mri_2mri3d_2doxygen_8h_source.html |   70 +
 .../applications_2polarFFT_2doxygen_8h_source.html |   70 +
 ...lications_2quadratureS2_2doxygen_8h_source.html |   70 +
 doc/api/html/bc_s.png                              |  Bin 0 -> 680 bytes
 doc/api/html/bdwn.png                              |  Bin 0 -> 147 bytes
 doc/api/html/bessel__i0_8c_source.html             |  368 +
 doc/api/html/classes.html                          |   74 +
 doc/api/html/closed.png                            |  Bin 0 -> 132 bytes
 doc/api/html/config_8h_source.html                 | 2118 ++
 doc/api/html/construct__data__2d1d_8c_source.html  |  176 +
 doc/api/html/construct__data__2d_8c_source.html    |  139 +
 doc/api/html/construct__data__3d_8c_source.html    |  152 +
 .../html/construct__data__inh__2d1d_8c_source.html |  198 +
 .../html/construct__data__inh__3d_8c_source.html   |  197 +
 doc/api/html/cycle_8h_source.html                  |  568 +
 .../html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html |   52 +
 .../html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html |   50 +
 .../html/dir_224fe669cf662e4d4573ba584877a9b9.html |   50 +
 .../html/dir_23ec12649285f9fabf3a6b7380226c28.html |   49 +
 .../html/dir_25564cacf5a7ef2ec915d9f7b609853e.html |   53 +
 .../html/dir_390363ac6c75087990c53a11ba2c3b15.html |   50 +
 .../html/dir_58759e03702cf5d3134868f6de633189.html |   50 +
 .../html/dir_6409bbb6ca4d9fdb6de069951c273365.html |   49 +
 .../html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html |   55 +
 .../html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html |   55 +
 .../html/dir_7af51a00587982c04b08a156fa91c254.html |   51 +
 .../html/dir_7bc5b4c2d8fedbf49abc178849c07704.html |   49 +
 .../html/dir_7eb6ea3471917cbff788e1046aaeac44.html |   49 +
 .../html/dir_899180af8ae9527aed19a2e763253fcc.html |   57 +
 .../html/dir_8c2550e038f78045c202418cbfa07f80.html |   60 +
 .../html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html |   49 +
 .../html/dir_8d554148c8057b12dc5cb11ef005c62c.html |   49 +
 .../html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html |   52 +
 .../html/dir_a42734e8bce3bbae48210591d0fac63c.html |   49 +
 .../html/dir_a6d8c0f9045568178601abc26c60f91f.html |   49 +
 .../html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html |   60 +
 .../html/dir_ac1c8221356786b534ab925d360822d4.html |   63 +
 .../html/dir_d28a4824dc47e487b107a5db32ef43c4.html |   61 +
 .../html/dir_d44c64559bbebec7f509842c48db8b23.html |   59 +
 .../html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html |   49 +
 .../html/dir_d47b87128a15c0ce57cf8f363265bec1.html |   51 +
 .../html/dir_dc43877d82dd332f9fb2071fcca799d6.html |   59 +
 .../html/dir_deedd863ca11d55d683e9872da0f56e1.html |   50 +
 .../html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html |   50 +
 .../html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html |   53 +
 .../html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html |   49 +
 .../html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html |   49 +
 .../html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html |   49 +
 .../html/dir_fb8678d426210fc305fe5dfd30a163a5.html |   54 +
 .../html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html |   54 +
 doc/api/html/doxygen.css                           |  360 +
 doc/api/html/doxygen.png                           |  Bin 0 -> 3779 bytes
 doc/api/html/dynsections.js                        |   78 +
 doc/api/html/error_8c_source.html                  |  213 +
 doc/api/html/examples_2doxygen_8c_source.html      |   70 +
 .../html/examples_2solver_2doxygen_8h_source.html  |   70 +
 doc/api/html/fastgauss_8c_source.html              |  518 +
 doc/api/html/fastsumS2_8c_source.html              |  884 +
 doc/api/html/fastsum_8c.html                       |  138 +
 doc/api/html/fastsum_8c_source.html                | 1021 +
 doc/api/html/fastsum_8h.html                       |  113 +
 doc/api/html/fastsum_8h_source.html                |  154 +
 doc/api/html/fastsum__benchomp_8c_source.html      |  701 +
 ...fastsum__benchomp__createdataset_8c_source.html |  177 +
 .../html/fastsum__benchomp__detail_8c_source.html  |  236 +
 doc/api/html/fastsum__matlab_8c.html               |   77 +
 doc/api/html/fastsum__matlab_8c_source.html        |  252 +
 doc/api/html/fastsum__test_8c.html                 |   77 +
 doc/api/html/fastsum__test_8c_source.html          |  300 +
 doc/api/html/files.html                            |  148 +
 doc/api/html/flags_8c.html                         |   93 +
 doc/api/html/flags_8c_source.html                  |  377 +
 doc/api/html/float_8c_source.html                  |  140 +
 doc/api/html/form_0.png                            |  Bin 0 -> 344 bytes
 doc/api/html/form_1.png                            |  Bin 0 -> 278 bytes
 doc/api/html/form_10.png                           |  Bin 0 -> 374 bytes
 doc/api/html/form_100.png                          |  Bin 0 -> 412 bytes
 doc/api/html/form_101.png                          |  Bin 0 -> 400 bytes
 doc/api/html/form_102.png                          |  Bin 0 -> 900 bytes
 doc/api/html/form_103.png                          |  Bin 0 -> 471 bytes
 doc/api/html/form_104.png                          |  Bin 0 -> 345 bytes
 doc/api/html/form_105.png                          |  Bin 0 -> 387 bytes
 doc/api/html/form_106.png                          |  Bin 0 -> 356 bytes
 doc/api/html/form_107.png                          |  Bin 0 -> 460 bytes
 doc/api/html/form_108.png                          |  Bin 0 -> 335 bytes
 doc/api/html/form_109.png                          |  Bin 0 -> 471 bytes
 doc/api/html/form_11.png                           |  Bin 0 -> 433 bytes
 doc/api/html/form_110.png                          |  Bin 0 -> 325 bytes
 doc/api/html/form_111.png                          |  Bin 0 -> 374 bytes
 doc/api/html/form_112.png                          |  Bin 0 -> 454 bytes
 doc/api/html/form_113.png                          |  Bin 0 -> 322 bytes
 doc/api/html/form_114.png                          |  Bin 0 -> 343 bytes
 doc/api/html/form_115.png                          |  Bin 0 -> 260 bytes
 doc/api/html/form_116.png                          |  Bin 0 -> 267 bytes
 doc/api/html/form_117.png                          |  Bin 0 -> 220 bytes
 doc/api/html/form_118.png                          |  Bin 0 -> 229 bytes
 doc/api/html/form_119.png                          |  Bin 0 -> 1182 bytes
 doc/api/html/form_12.png                           |  Bin 0 -> 664 bytes
 doc/api/html/form_120.png                          |  Bin 0 -> 225 bytes
 doc/api/html/form_121.png                          |  Bin 0 -> 233 bytes
 doc/api/html/form_122.png                          |  Bin 0 -> 720 bytes
 doc/api/html/form_123.png                          |  Bin 0 -> 523 bytes
 doc/api/html/form_124.png                          |  Bin 0 -> 556 bytes
 doc/api/html/form_125.png                          |  Bin 0 -> 576 bytes
 doc/api/html/form_126.png                          |  Bin 0 -> 717 bytes
 doc/api/html/form_127.png                          |  Bin 0 -> 357 bytes
 doc/api/html/form_128.png                          |  Bin 0 -> 306 bytes
 doc/api/html/form_129.png                          |  Bin 0 -> 1806 bytes
 doc/api/html/form_13.png                           |  Bin 0 -> 280 bytes
 doc/api/html/form_130.png                          |  Bin 0 -> 267 bytes
 doc/api/html/form_131.png                          |  Bin 0 -> 284 bytes
 doc/api/html/form_132.png                          |  Bin 0 -> 437 bytes
 doc/api/html/form_133.png                          |  Bin 0 -> 419 bytes
 doc/api/html/form_134.png                          |  Bin 0 -> 1988 bytes
 doc/api/html/form_135.png                          |  Bin 0 -> 295 bytes
 doc/api/html/form_136.png                          |  Bin 0 -> 230 bytes
 doc/api/html/form_137.png                          |  Bin 0 -> 245 bytes
 doc/api/html/form_138.png                          |  Bin 0 -> 357 bytes
 doc/api/html/form_139.png                          |  Bin 0 -> 281 bytes
 doc/api/html/form_14.png                           |  Bin 0 -> 413 bytes
 doc/api/html/form_15.png                           |  Bin 0 -> 654 bytes
 doc/api/html/form_16.png                           |  Bin 0 -> 565 bytes
 doc/api/html/form_17.png                           |  Bin 0 -> 281 bytes
 doc/api/html/form_18.png                           |  Bin 0 -> 308 bytes
 doc/api/html/form_19.png                           |  Bin 0 -> 357 bytes
 doc/api/html/form_2.png                            |  Bin 0 -> 223 bytes
 doc/api/html/form_20.png                           |  Bin 0 -> 356 bytes
 doc/api/html/form_21.png                           |  Bin 0 -> 355 bytes
 doc/api/html/form_22.png                           |  Bin 0 -> 382 bytes
 doc/api/html/form_23.png                           |  Bin 0 -> 427 bytes
 doc/api/html/form_24.png                           |  Bin 0 -> 430 bytes
 doc/api/html/form_25.png                           |  Bin 0 -> 412 bytes
 doc/api/html/form_26.png                           |  Bin 0 -> 357 bytes
 doc/api/html/form_27.png                           |  Bin 0 -> 235 bytes
 doc/api/html/form_28.png                           |  Bin 0 -> 616 bytes
 doc/api/html/form_29.png                           |  Bin 0 -> 392 bytes
 doc/api/html/form_3.png                            |  Bin 0 -> 431 bytes
 doc/api/html/form_30.png                           |  Bin 0 -> 1030 bytes
 doc/api/html/form_31.png                           |  Bin 0 -> 1936 bytes
 doc/api/html/form_32.png                           |  Bin 0 -> 421 bytes
 doc/api/html/form_33.png                           |  Bin 0 -> 421 bytes
 doc/api/html/form_34.png                           |  Bin 0 -> 597 bytes
 doc/api/html/form_35.png                           |  Bin 0 -> 582 bytes
 doc/api/html/form_36.png                           |  Bin 0 -> 360 bytes
 doc/api/html/form_37.png                           |  Bin 0 -> 322 bytes
 doc/api/html/form_38.png                           |  Bin 0 -> 321 bytes
 doc/api/html/form_39.png                           |  Bin 0 -> 290 bytes
 doc/api/html/form_4.png                            |  Bin 0 -> 223 bytes
 doc/api/html/form_40.png                           |  Bin 0 -> 449 bytes
 doc/api/html/form_41.png                           |  Bin 0 -> 377 bytes
 doc/api/html/form_42.png                           |  Bin 0 -> 302 bytes
 doc/api/html/form_43.png                           |  Bin 0 -> 279 bytes
 doc/api/html/form_44.png                           |  Bin 0 -> 411 bytes
 doc/api/html/form_45.png                           |  Bin 0 -> 215 bytes
 doc/api/html/form_46.png                           |  Bin 0 -> 420 bytes
 doc/api/html/form_47.png                           |  Bin 0 -> 416 bytes
 doc/api/html/form_48.png                           |  Bin 0 -> 396 bytes
 doc/api/html/form_49.png                           |  Bin 0 -> 347 bytes
 doc/api/html/form_5.png                            |  Bin 0 -> 225 bytes
 doc/api/html/form_50.png                           |  Bin 0 -> 433 bytes
 doc/api/html/form_51.png                           |  Bin 0 -> 423 bytes
 doc/api/html/form_52.png                           |  Bin 0 -> 1283 bytes
 doc/api/html/form_53.png                           |  Bin 0 -> 427 bytes
 doc/api/html/form_54.png                           |  Bin 0 -> 872 bytes
 doc/api/html/form_55.png                           |  Bin 0 -> 382 bytes
 doc/api/html/form_56.png                           |  Bin 0 -> 616 bytes
 doc/api/html/form_57.png                           |  Bin 0 -> 614 bytes
 doc/api/html/form_58.png                           |  Bin 0 -> 296 bytes
 doc/api/html/form_59.png                           |  Bin 0 -> 226 bytes
 doc/api/html/form_6.png                            |  Bin 0 -> 920 bytes
 doc/api/html/form_60.png                           |  Bin 0 -> 200 bytes
 doc/api/html/form_61.png                           |  Bin 0 -> 302 bytes
 doc/api/html/form_62.png                           |  Bin 0 -> 295 bytes
 doc/api/html/form_63.png                           |  Bin 0 -> 296 bytes
 doc/api/html/form_64.png                           |  Bin 0 -> 371 bytes
 doc/api/html/form_65.png                           |  Bin 0 -> 550 bytes
 doc/api/html/form_66.png                           |  Bin 0 -> 302 bytes
 doc/api/html/form_67.png                           |  Bin 0 -> 295 bytes
 doc/api/html/form_68.png                           |  Bin 0 -> 387 bytes
 doc/api/html/form_69.png                           |  Bin 0 -> 296 bytes
 doc/api/html/form_7.png                            |  Bin 0 -> 437 bytes
 doc/api/html/form_70.png                           |  Bin 0 -> 440 bytes
 doc/api/html/form_71.png                           |  Bin 0 -> 302 bytes
 doc/api/html/form_72.png                           |  Bin 0 -> 295 bytes
 doc/api/html/form_73.png                           |  Bin 0 -> 438 bytes
 doc/api/html/form_74.png                           |  Bin 0 -> 424 bytes
 doc/api/html/form_75.png                           |  Bin 0 -> 501 bytes
 doc/api/html/form_76.png                           |  Bin 0 -> 418 bytes
 doc/api/html/form_77.png                           |  Bin 0 -> 624 bytes
 doc/api/html/form_78.png                           |  Bin 0 -> 376 bytes
 doc/api/html/form_79.png                           |  Bin 0 -> 355 bytes
 doc/api/html/form_8.png                            |  Bin 0 -> 361 bytes
 doc/api/html/form_80.png                           |  Bin 0 -> 366 bytes
 doc/api/html/form_81.png                           |  Bin 0 -> 645 bytes
 doc/api/html/form_82.png                           |  Bin 0 -> 363 bytes
 doc/api/html/form_83.png                           |  Bin 0 -> 235 bytes
 doc/api/html/form_84.png                           |  Bin 0 -> 370 bytes
 doc/api/html/form_85.png                           |  Bin 0 -> 345 bytes
 doc/api/html/form_86.png                           |  Bin 0 -> 449 bytes
 doc/api/html/form_87.png                           |  Bin 0 -> 460 bytes
 doc/api/html/form_88.png                           |  Bin 0 -> 484 bytes
 doc/api/html/form_89.png                           |  Bin 0 -> 459 bytes
 doc/api/html/form_9.png                            |  Bin 0 -> 396 bytes
 doc/api/html/form_90.png                           |  Bin 0 -> 314 bytes
 doc/api/html/form_91.png                           |  Bin 0 -> 311 bytes
 doc/api/html/form_92.png                           |  Bin 0 -> 210 bytes
 doc/api/html/form_93.png                           |  Bin 0 -> 206 bytes
 doc/api/html/form_94.png                           |  Bin 0 -> 1304 bytes
 doc/api/html/form_95.png                           |  Bin 0 -> 353 bytes
 doc/api/html/form_96.png                           |  Bin 0 -> 254 bytes
 doc/api/html/form_97.png                           |  Bin 0 -> 247 bytes
 doc/api/html/form_98.png                           |  Bin 0 -> 405 bytes
 doc/api/html/form_99.png                           |  Bin 0 -> 391 bytes
 doc/api/html/formula.repository                    |  140 +
 doc/api/html/fpt_2simple__test_8c_source.html      |  213 +
 doc/api/html/fpt_8c.html                           |  463 +
 doc/api/html/fpt_8c_source.html                    | 1875 +
 doc/api/html/fpt_8h_source.html                    |  123 +
 doc/api/html/ftv2blank.png                         |  Bin 0 -> 86 bytes
 doc/api/html/ftv2cl.png                            |  Bin 0 -> 453 bytes
 doc/api/html/ftv2doc.png                           |  Bin 0 -> 746 bytes
 doc/api/html/ftv2folderclosed.png                  |  Bin 0 -> 616 bytes
 doc/api/html/ftv2folderopen.png                    |  Bin 0 -> 597 bytes
 doc/api/html/ftv2lastnode.png                      |  Bin 0 -> 86 bytes
 doc/api/html/ftv2link.png                          |  Bin 0 -> 746 bytes
 doc/api/html/ftv2mlastnode.png                     |  Bin 0 -> 246 bytes
 doc/api/html/ftv2mnode.png                         |  Bin 0 -> 246 bytes
 doc/api/html/ftv2mo.png                            |  Bin 0 -> 403 bytes
 doc/api/html/ftv2node.png                          |  Bin 0 -> 86 bytes
 doc/api/html/ftv2ns.png                            |  Bin 0 -> 388 bytes
 doc/api/html/ftv2plastnode.png                     |  Bin 0 -> 229 bytes
 doc/api/html/ftv2pnode.png                         |  Bin 0 -> 229 bytes
 doc/api/html/ftv2splitbar.png                      |  Bin 0 -> 314 bytes
 doc/api/html/ftv2vertline.png                      |  Bin 0 -> 86 bytes
 doc/api/html/functions.html                        |   90 +
 doc/api/html/functions_0x61.html                   |  142 +
 doc/api/html/functions_0x62.html                   |  122 +
 doc/api/html/functions_0x63.html                   |  105 +
 doc/api/html/functions_0x64.html                   |  212 +
 doc/api/html/functions_0x65.html                   |   87 +
 doc/api/html/functions_0x66.html                   |  241 +
 doc/api/html/functions_0x67.html                   |  124 +
 doc/api/html/functions_0x69.html                   |  102 +
 doc/api/html/functions_0x6a.html                   |   86 +
 doc/api/html/functions_0x6b.html                   |  104 +
 doc/api/html/functions_0x6c.html                   |   84 +
 doc/api/html/functions_0x6d.html                   |  245 +
 doc/api/html/functions_0x6e.html                   |  228 +
 doc/api/html/functions_0x70.html                   |  167 +
 doc/api/html/functions_0x72.html                   |  103 +
 doc/api/html/functions_0x73.html                   |  144 +
 doc/api/html/functions_0x74.html                   |   99 +
 doc/api/html/functions_0x76.html                   |  103 +
 doc/api/html/functions_0x77.html                   |  116 +
 doc/api/html/functions_0x78.html                   |  119 +
 doc/api/html/functions_0x79.html                   |  100 +
 doc/api/html/functions_0x7a.html                   |   98 +
 doc/api/html/functions_func.html                   |   77 +
 doc/api/html/functions_vars.html                   |   90 +
 doc/api/html/functions_vars_0x61.html              |  142 +
 doc/api/html/functions_vars_0x62.html              |  122 +
 doc/api/html/functions_vars_0x63.html              |  105 +
 doc/api/html/functions_vars_0x64.html              |  212 +
 doc/api/html/functions_vars_0x65.html              |   87 +
 doc/api/html/functions_vars_0x66.html              |  214 +
 doc/api/html/functions_vars_0x67.html              |  124 +
 doc/api/html/functions_vars_0x69.html              |  102 +
 doc/api/html/functions_vars_0x6a.html              |   86 +
 doc/api/html/functions_vars_0x6b.html              |  104 +
 doc/api/html/functions_vars_0x6c.html              |   84 +
 doc/api/html/functions_vars_0x6d.html              |  245 +
 doc/api/html/functions_vars_0x6e.html              |  228 +
 doc/api/html/functions_vars_0x70.html              |  167 +
 doc/api/html/functions_vars_0x72.html              |  103 +
 doc/api/html/functions_vars_0x73.html              |  144 +
 doc/api/html/functions_vars_0x74.html              |   99 +
 doc/api/html/functions_vars_0x76.html              |  103 +
 doc/api/html/functions_vars_0x77.html              |  116 +
 doc/api/html/functions_vars_0x78.html              |  119 +
 doc/api/html/functions_vars_0x79.html              |  100 +
 doc/api/html/functions_vars_0x7a.html              |   98 +
 doc/api/html/glacier_8c_source.html                |  280 +
 doc/api/html/globals.html                          |   86 +
 doc/api/html/globals_0x63.html                     |   87 +
 doc/api/html/globals_0x65.html                     |   86 +
 doc/api/html/globals_0x66.html                     |  116 +
 doc/api/html/globals_0x69.html                     |  191 +
 doc/api/html/globals_0x6b.html                     |   91 +
 doc/api/html/globals_0x6c.html                     |   91 +
 doc/api/html/globals_0x6d.html                     |   99 +
 doc/api/html/globals_0x6e.html                     |  272 +
 doc/api/html/globals_0x70.html                     |   88 +
 doc/api/html/globals_0x71.html                     |   77 +
 doc/api/html/globals_0x72.html                     |   90 +
 doc/api/html/globals_0x73.html                     |  158 +
 doc/api/html/globals_0x74.html                     |   89 +
 doc/api/html/globals_0x77.html                     |   80 +
 doc/api/html/globals_defs.html                     |  105 +
 doc/api/html/globals_func.html                     |  633 +
 doc/api/html/globals_type.html                     |   80 +
 doc/api/html/globals_vars.html                     |   62 +
 doc/api/html/group__applications.html              |   55 +
 doc/api/html/group__applications__fastgauss.html   |  638 +
 doc/api/html/group__applications__fastsum.html     |  417 +
 doc/api/html/group__applications__fastsumS2.html   |   48 +
 .../html/group__applications__fastsumS2__test.html |  381 +
 .../html/group__applications__fastsum__matlab.html |   49 +
 .../html/group__applications__fastsum__test.html   |   49 +
 doc/api/html/group__applications__iterS2.html      |   48 +
 .../html/group__applications__iterS2__matlab.html  |  101 +
 doc/api/html/group__applications__mri.html         |   49 +
 doc/api/html/group__applications__mri2d.html       |   55 +
 ...__applications__mri2d__construct__data__2d.html |   52 +
 ...ications__mri2d__construct__data__gridding.html |   52 +
 ...cations__mri2d__construct__data__inh__2d1d.html |   52 +
 ...lications__mri2d__construct__data__inh__3d.html |   52 +
 ...ations__mri2d__construct__data__inh__nnfft.html |   52 +
 ...applications__mri2d__reconstruct__data__2d.html |   52 +
 ...tions__mri2d__reconstruct__data__inh__2d1d.html |   51 +
 ...cations__mri2d__reconstruct__data__inh__3d.html |   51 +
 doc/api/html/group__applications__mri3d.html       |   52 +
 ...applications__mri3d__construct__data__1d2d.html |   58 +
 ...__applications__mri3d__construct__data__3d.html |   51 +
 ...plications__mri3d__reconstruct__data__1d2d.html |   55 +
 ...applications__mri3d__reconstruct__data__3d.html |   52 +
 ...ations__mri3d__reconstruct__data__gridding.html |   55 +
 doc/api/html/group__applications__polarFFT.html    |   50 +
 .../group__applications__polarFFT__linogramm.html  |   71 +
 .../group__applications__polarFFT__mpolar.html     |  130 +
 .../html/group__applications__polarFFT__polar.html |  126 +
 .../html/group__applications__quadratureS2.html    |   48 +
 .../group__applications__quadratureS2__test.html   |  130 +
 doc/api/html/group__examples.html                  |   48 +
 doc/api/html/group__examples__solver.html          |   48 +
 doc/api/html/group__examples__solver__glacier.html |   59 +
 doc/api/html/group__nfftutil.html                  |  478 +
 doc/api/html/group__nfsft.html                     |  563 +
 doc/api/html/images/logo.png                       |  Bin 0 -> 2965 bytes
 doc/api/html/images/sphere.png                     |  Bin 0 -> 10243 bytes
 doc/api/html/include_2api_8h_source.html           |   77 +
 doc/api/html/index.html                            |   40 +
 doc/api/html/infft_8h_source.html                  | 1430 +
 doc/api/html/int_8c_source.html                    |  157 +
 doc/api/html/inverse__radon_8c.html                |   98 +
 doc/api/html/inverse__radon_8c_source.html         |  295 +
 doc/api/html/iterS2_8c_source.html                 |  474 +
 doc/api/html/jquery.js                             |    8 +
 doc/api/html/kernel_2nfsft_2api_8h_source.html     |  122 +
 doc/api/html/kernels_8c.html                       |   96 +
 doc/api/html/kernels_8c_source.html                |  447 +
 doc/api/html/kernels_8h.html                       |   92 +
 doc/api/html/kernels_8h_source.html                |  105 +
 doc/api/html/lambda_8c_source.html                 |  297 +
 doc/api/html/legendre_8c_source.html               |  261 +
 doc/api/html/legendre_8h_source.html               |   92 +
 doc/api/html/linogram__fft__test_8c.html           |   98 +
 doc/api/html/linogram__fft__test_8c_source.html    |  472 +
 doc/api/html/malloc_8c_source.html                 |  116 +
 doc/api/html/modules.html                          |   80 +
 doc/api/html/mpolar__fft__test_8c.html             |   97 +
 doc/api/html/mpolar__fft__test_8c_source.html      |  487 +
 ...i2d_2reconstruct__data__gridding_8c_source.html |  153 +
 ...i3d_2reconstruct__data__gridding_8c_source.html |  204 +
 doc/api/html/mri_8c_source.html                    |  316 +
 doc/api/html/nav_f.png                             |  Bin 0 -> 153 bytes
 doc/api/html/nav_g.png                             |  Bin 0 -> 95 bytes
 doc/api/html/nav_h.png                             |  Bin 0 -> 98 bytes
 doc/api/html/ndft__fast_8c.html                    |   84 +
 doc/api/html/ndft__fast_8c_source.html             |  260 +
 doc/api/html/nfct_2simple__test_8c_source.html     |  123 +
 doc/api/html/nfct_8c_source.html                   |  944 +
 doc/api/html/nfft3_8h.html                         | 1543 +
 doc/api/html/nfft3_8h_source.html                  |  853 +
 doc/api/html/nfft3conf_8h_source.html              |   95 +
 doc/api/html/nfft3util_8h.html                     |  221 +
 doc/api/html/nfft3util_8h_source.html              |  214 +
 doc/api/html/nfft_2simple__test_8c_source.html     |  196 +
 .../nfft_2simple__test__threads_8c_source.html     |  128 +
 doc/api/html/nfft_8c_source.html                   | 5727 +++
 doc/api/html/nfft__benchomp_8c_source.html         |  640 +
 .../nfft__benchomp__createdataset_8c_source.html   |  193 +
 doc/api/html/nfft__benchomp__detail_8c_source.html |  201 +
 doc/api/html/nfft__times_8c_source.html            | 1070 +
 doc/api/html/nfsft_2simple__test_8c_source.html    |  178 +
 .../nfsft_2simple__test__threads_8c_source.html    |  183 +
 doc/api/html/nfsft_8c.html                         |  125 +
 doc/api/html/nfsft_8c_source.html                  | 1248 +
 doc/api/html/nfsft__benchomp_8c_source.html        |  567 +
 .../nfsft__benchomp__createdataset_8c_source.html  |  165 +
 .../html/nfsft__benchomp__detail_8c_source.html    |  267 +
 doc/api/html/nfsoft_2simple__test_8c_source.html   |  225 +
 doc/api/html/nfsoft_8c_source.html                 |  747 +
 doc/api/html/nfst_2simple__test_8c_source.html     |  123 +
 doc/api/html/nfst_8c_source.html                   | 1031 +
 doc/api/html/nnfft_2simple__test_8c_source.html    |  352 +
 doc/api/html/nnfft_8c_source.html                  |  704 +
 doc/api/html/nsfft_2simple__test_8c_source.html    |  130 +
 doc/api/html/nsfft_8c_source.html                  | 1944 +
 doc/api/html/nsfft__test_8c_source.html            |  260 +
 doc/api/html/open.png                              |  Bin 0 -> 123 bytes
 doc/api/html/polar__fft__test_8c.html              |   88 +
 doc/api/html/polar__fft__test_8c_source.html       |  380 +
 doc/api/html/quadratureS2_8c_source.html           | 1160 +
 doc/api/html/radon_8c.html                         |   98 +
 doc/api/html/radon_8c_source.html                  |  266 +
 .../html/reconstruct__data__2d1d_8c_source.html    |  255 +
 doc/api/html/reconstruct__data__2d_8c_source.html  |  216 +
 doc/api/html/reconstruct__data__3d_8c_source.html  |  214 +
 .../reconstruct__data__inh__2d1d_8c_source.html    |  272 +
 .../html/reconstruct__data__inh__3d_8c_source.html |  266 +
 .../reconstruct__data__inh__nnfft_8c_source.html   |  282 +
 doc/api/html/sinc_8c_source.html                   |   97 +
 doc/api/html/solver_2simple__test_8c_source.html   |  196 +
 doc/api/html/solver_8c.html                        |  118 +
 doc/api/html/solver_8c_source.html                 |  760 +
 doc/api/html/solver__adjoint_8h.html               | 1052 +
 doc/api/html/solver__adjoint_8h_source.html        |  133 +
 doc/api/html/structfastsum__plan__.html            |  229 +
 doc/api/html/structfgt__plan.html                  |  105 +
 doc/api/html/structfpt__data__.html                |  306 +
 doc/api/html/structfpt__set__s__.html              |  151 +
 doc/api/html/structfpt__step__.html                |  133 +
 .../html/structimri__inh__2d1d__adjoint__plan.html |  119 +
 .../html/structimri__inh__3d__adjoint__plan.html   |  119 +
 doc/api/html/structinfct__adjoint__plan.html       |  119 +
 doc/api/html/structinfft__adjoint__plan.html       |  119 +
 doc/api/html/structinfsft__adjoint__plan.html      |  120 +
 doc/api/html/structinfst__adjoint__plan.html       |  119 +
 doc/api/html/structinnfft__adjoint__plan.html      |  119 +
 doc/api/html/structmri__inh__2d1d__plan.html       |   87 +
 doc/api/html/structmri__inh__3d__plan.html         |   87 +
 doc/api/html/structmrif__inh__2d1d__plan.html      |   87 +
 doc/api/html/structmrif__inh__3d__plan.html        |   87 +
 doc/api/html/structmril__inh__2d1d__plan.html      |   87 +
 doc/api/html/structmril__inh__3d__plan.html        |   87 +
 doc/api/html/structnfct__plan.html                 |  147 +
 doc/api/html/structnfctf__plan.html                |  147 +
 doc/api/html/structnfctl__plan.html                |  147 +
 doc/api/html/structnfft__mv__plan__complex.html    |   77 +
 doc/api/html/structnfft__mv__plan__double.html     |   77 +
 doc/api/html/structnfft__plan.html                 |  153 +
 doc/api/html/structnfftf__mv__plan__complex.html   |   77 +
 doc/api/html/structnfftf__mv__plan__double.html    |   77 +
 doc/api/html/structnfftf__plan.html                |  153 +
 doc/api/html/structnfftl__mv__plan__complex.html   |   77 +
 doc/api/html/structnfftl__mv__plan__double.html    |   77 +
 doc/api/html/structnfftl__plan.html                |  153 +
 doc/api/html/structnfsft__plan.html                |   98 +
 doc/api/html/structnfsft__wisdom.html              |  123 +
 doc/api/html/structnfsftf__plan.html               |   98 +
 doc/api/html/structnfsftl__plan.html               |   98 +
 doc/api/html/structnfsoft__plan__.html             |  103 +
 doc/api/html/structnfsoftf__plan__.html            |  103 +
 doc/api/html/structnfsoftl__plan__.html            |  103 +
 doc/api/html/structnfst__plan.html                 |  147 +
 doc/api/html/structnfstf__plan.html                |  147 +
 doc/api/html/structnfstl__plan.html                |  147 +
 doc/api/html/structnnfft__plan.html                |  177 +
 doc/api/html/structnnfftf__plan.html               |  175 +
 doc/api/html/structnnfftl__plan.html               |  175 +
 doc/api/html/structnsfft__plan.html                |  129 +
 doc/api/html/structnsfftf__plan.html               |  129 +
 doc/api/html/structnsfftl__plan.html               |  129 +
 doc/api/html/structs__param.html                   |   93 +
 doc/api/html/structs__result.html                  |   65 +
 doc/api/html/structs__resval.html                  |   67 +
 doc/api/html/structs__testset.html                 |   67 +
 doc/api/html/structsolver__plan__complex.html      |  113 +
 doc/api/html/structsolver__plan__double.html       |  113 +
 doc/api/html/structsolverf__plan__complex.html     |  113 +
 doc/api/html/structsolverf__plan__double.html      |  113 +
 doc/api/html/structsolverl__plan__complex.html     |  113 +
 doc/api/html/structsolverl__plan__double.html      |  113 +
 doc/api/html/structtaylor__plan.html               |   68 +
 doc/api/html/structwindow__funct__plan__.html      |   76 +
 doc/api/html/tab_a.png                             |  Bin 0 -> 142 bytes
 doc/api/html/tab_b.png                             |  Bin 0 -> 167 bytes
 doc/api/html/tab_h.png                             |  Bin 0 -> 192 bytes
 doc/api/html/tab_s.png                             |  Bin 0 -> 184 bytes
 doc/api/html/tabs.css                              |   59 +
 doc/api/html/taylor__nfft_8c.html                  |  349 +
 doc/api/html/taylor__nfft_8c_source.html           |  321 +
 doc/api/html/ticks_8h_source.html                  |   84 +
 doc/api/html/util_8c_source.html                   | 1387 +
 doc/api/html/wigner_8c_source.html                 |  432 +
 doc/api/html/wigner_8h.html                        |  890 +
 doc/api/html/wigner_8h_source.html                 |   95 +
 doc/api/latex/images/sphere.eps                    |   99 +
 doc/api/latex/images/sphere.pdf                    |  Bin 0 -> 55197 bytes
 doc/logo/nfft_logo.tif                             |  Bin 0 -> 56256 bytes
 doc/tutorial/README                                |    9 +
 doc/tutorial/acmtrans.bst                          | 1770 +
 doc/tutorial/acmtrans2m.cls                        | 1460 +
 doc/tutorial/answer.tex                            |  102 +
 doc/tutorial/comments1.tex                         |  107 +
 doc/tutorial/comments2.tex                         |  156 +
 doc/tutorial/comments3.tex                         |  253 +
 doc/tutorial/images/accuracy1.eps                  |  503 +
 doc/tutorial/images/accuracy1.pdf                  |  Bin 0 -> 4369 bytes
 doc/tutorial/images/accuracy2.eps                  |  497 +
 doc/tutorial/images/accuracy2.pdf                  |  Bin 0 -> 4312 bytes
 doc/tutorial/images/accuracy3.eps                  |  497 +
 doc/tutorial/images/accuracy3.pdf                  |  Bin 0 -> 4342 bytes
 doc/tutorial/images/accuracy4.eps                  |  497 +
 doc/tutorial/images/accuracy4.pdf                  |  Bin 0 -> 4337 bytes
 doc/tutorial/images/accuracy5.eps                  |  497 +
 doc/tutorial/images/accuracy5.pdf                  |  Bin 0 -> 4330 bytes
 doc/tutorial/images/accuracy6.eps                  |  497 +
 doc/tutorial/images/accuracy6.pdf                  |  Bin 0 -> 4317 bytes
 doc/tutorial/images/front_pic1.eps                 |  240 +
 doc/tutorial/images/front_pic1.pdf                 |  Bin 0 -> 2821 bytes
 doc/tutorial/images/front_pic2.eps                 |  257 +
 doc/tutorial/images/front_pic2.pdf                 |  Bin 0 -> 3453 bytes
 doc/tutorial/images/glacier1.eps                   |27242 +++++++++++++
 doc/tutorial/images/glacier1.pdf                   |  Bin 0 -> 38015 bytes
 doc/tutorial/images/glacier2.eps                   |39895 ++++++++++++++++++++
 doc/tutorial/images/glacier2.pdf                   |  Bin 0 -> 511712 bytes
 doc/tutorial/images/interpolation_1d_0.eps         |  359 +
 doc/tutorial/images/interpolation_1d_0.pdf         |  Bin 0 -> 5566 bytes
 doc/tutorial/images/interpolation_1d_1.eps         |  359 +
 doc/tutorial/images/interpolation_1d_1.pdf         |  Bin 0 -> 5339 bytes
 doc/tutorial/images/interpolation_1d_2.eps         |  357 +
 doc/tutorial/images/interpolation_1d_2.pdf         |  Bin 0 -> 5326 bytes
 doc/tutorial/images/interpolation_1d_3.eps         |  357 +
 doc/tutorial/images/interpolation_1d_3.pdf         |  Bin 0 -> 5341 bytes
 doc/tutorial/images/interpolation_1d_4.eps         |  356 +
 doc/tutorial/images/interpolation_1d_4.pdf         |  Bin 0 -> 5378 bytes
 doc/tutorial/images/interpolation_1d_5.eps         |  357 +
 doc/tutorial/images/interpolation_1d_5.pdf         |  Bin 0 -> 5375 bytes
 doc/tutorial/images/linogram_grid.eps              |   87 +
 doc/tutorial/images/linogram_grid.pdf              |  Bin 0 -> 153334 bytes
 doc/tutorial/images/modified_polar_grid.eps        |   87 +
 doc/tutorial/images/modified_polar_grid.pdf        |  Bin 0 -> 153334 bytes
 doc/tutorial/images/nfft_times_flops.eps           |  511 +
 doc/tutorial/images/nfft_times_flops.pdf           |  Bin 0 -> 5365 bytes
 doc/tutorial/images/nfft_times_frodo.txt           |   39 +
 doc/tutorial/images/nfft_times_frodo_flops.m       |   36 +
 doc/tutorial/images/nfft_times_frodo_m_2.txt       |   39 +
 doc/tutorial/images/nfft_times_frodo_m_2_flops.m   |   36 +
 doc/tutorial/images/nfft_times_frodo_show.m        |   47 +
 doc/tutorial/images/polar_grid.eps                 |   87 +
 doc/tutorial/images/polar_grid.pdf                 |  Bin 0 -> 153333 bytes
 doc/tutorial/images/sparse2D_0.eps                 |  111 +
 doc/tutorial/images/sparse2D_0.pdf                 |  Bin 0 -> 1788 bytes
 doc/tutorial/images/sparse2D_1.eps                 |  123 +
 doc/tutorial/images/sparse2D_1.pdf                 |  Bin 0 -> 1839 bytes
 doc/tutorial/images/sparse2D_2.eps                 |  123 +
 doc/tutorial/images/sparse2D_2.pdf                 |  Bin 0 -> 1851 bytes
 doc/tutorial/images/sparse2D_3.eps                 |  135 +
 doc/tutorial/images/sparse2D_3.pdf                 |  Bin 0 -> 1912 bytes
 doc/tutorial/images/sphere.eps                     |   48 +
 doc/tutorial/images/sphere.pdf                     |  Bin 0 -> 55197 bytes
 doc/tutorial/images/temperaturemap_filled.pdf      |  Bin 0 -> 43392 bytes
 doc/tutorial/images/temperaturemap_gaps.pdf        |  Bin 0 -> 43632 bytes
 doc/tutorial/images/window_fct1.eps                |  501 +
 doc/tutorial/images/window_fct1.pdf                |  Bin 0 -> 7593 bytes
 doc/tutorial/images/window_fct2.eps                |  501 +
 doc/tutorial/images/window_fct2.pdf                |  Bin 0 -> 7582 bytes
 doc/tutorial/images/window_fct3.eps                |  484 +
 doc/tutorial/images/window_fct3.pdf                |  Bin 0 -> 5542 bytes
 doc/tutorial/paper.tex                             | 2229 ++
 doc/tutorial/paper_brief.tex                       | 2001 +
 doc/tutorial/struct.tex                            |   59 +
 doc/tutorial/summary.tex                           |  227 +
 doc/tutorial/tree.tex                              |  225 +
 doxygen.dox                                        |  110 +
 doxygen/Makefile.am                                |    3 +
 doxygen/Makefile.in                                |  426 +
 doxygen/doxygen.Doxyfile                           | 1143 +
 doxygen/doxygen.Doxyfile.in                        | 1143 +
 doxygen/doxygen.css                                |  360 +
 doxygen/footer.html                                |    4 +
 doxygen/header.html                                |   20 +
 examples/Makefile.am                               |   52 +
 examples/Makefile.in                               |  656 +
 examples/doxygen.c                                 |   23 +
 examples/fpt/Makefile.am                           |   10 +
 examples/fpt/Makefile.in                           |  556 +
 examples/fpt/simple_test.c                         |  163 +
 examples/mri/Makefile.am                           |    2 +
 examples/mri/Makefile.in                           |  422 +
 examples/nfct/Makefile.am                          |   10 +
 examples/nfct/Makefile.in                          |  555 +
 examples/nfct/README                               |   17 +
 examples/nfct/simple_test.c                        |   82 +
 examples/nfft/Makefile.am                          |   61 +
 examples/nfft/Makefile.in                          |  710 +
 examples/nfft/README                               |   30 +
 examples/nfft/flags.c                              |  349 +
 examples/nfft/flags.m                              |  152 +
 examples/nfft/ndft_fast.c                          |  221 +
 examples/nfft/ndft_fast.m                          |   61 +
 examples/nfft/nfft_benchomp.c                      |  590 +
 examples/nfft/nfft_benchomp_createdataset.c        |  144 +
 examples/nfft/nfft_benchomp_detail.c               |  154 +
 examples/nfft/nfft_times.c                         | 1065 +
 examples/nfft/simple_test.c                        |  164 +
 examples/nfft/simple_test_threads.c                |   78 +
 examples/nfft/taylor_nfft.c                        |  340 +
 examples/nfft/taylor_nfft.m                        |  140 +
 examples/nfsft/Makefile.am                         |   53 +
 examples/nfsft/Makefile.in                         |  686 +
 examples/nfsft/nfsft_benchomp.c                    |  517 +
 examples/nfsft/nfsft_benchomp_createdataset.c      |  115 +
 examples/nfsft/nfsft_benchomp_detail.c             |  218 +
 examples/nfsft/simple_test.c                       |  128 +
 examples/nfsft/simple_test_threads.c               |  133 +
 examples/nfsoft/Makefile.am                        |   12 +
 examples/nfsoft/Makefile.in                        |  555 +
 examples/nfsoft/README                             |   12 +
 examples/nfsoft/simple_test.c                      |  215 +
 examples/nfst/Makefile.am                          |   10 +
 examples/nfst/Makefile.in                          |  555 +
 examples/nfst/README                               |   17 +
 examples/nfst/simple_test.c                        |   82 +
 examples/nnfft/Makefile.am                         |   13 +
 examples/nnfft/Makefile.in                         |  564 +
 examples/nnfft/README                              |   12 +
 examples/nnfft/accuracy.c                          |  106 +
 examples/nnfft/accuracy.m                          |   64 +
 examples/nnfft/simple_test.c                       |  342 +
 examples/nsfft/Makefile.am                         |   13 +
 examples/nsfft/Makefile.in                         |  564 +
 examples/nsfft/README                              |    8 +
 examples/nsfft/nsfft_test.c                        |  217 +
 examples/nsfft/simple_test.c                       |   85 +
 examples/solver/Makefile.am                        |   13 +
 examples/solver/Makefile.in                        |  564 +
 examples/solver/README                             |   21 +
 examples/solver/doxygen.h                          |   24 +
 examples/solver/glacier.c                          |  241 +
 examples/solver/glacier.m                          |   63 +
 examples/solver/glacier_cv.m                       |   42 +
 examples/solver/simple_test.c                      |  155 +
 examples/solver/vol87.dat                          | 8346 ++++
 include/Makefile.am                                |    3 +
 include/Makefile.in                                |  560 +
 include/api.h                                      |   27 +
 include/config.h.in                                | 2067 +
 include/cycle.h                                    |  518 +
 include/infft.h                                    | 1389 +
 include/nfft3.h                                    |  826 +
 include/nfft3conf.h                                |   45 +
 include/nfft3conf.h.in                             |   45 +
 include/nfft3util.h                                |  279 +
 include/ticks.h.in                                 |   34 +
 kernel/Makefile.am                                 |  104 +
 kernel/Makefile.in                                 |  762 +
 kernel/fpt/Makefile.am                             |   23 +
 kernel/fpt/Makefile.in                             |  583 +
 kernel/fpt/fpt.c                                   | 1923 +
 kernel/fpt/fpt.h                                   |   93 +
 kernel/mri/Makefile.am                             |    5 +
 kernel/mri/Makefile.in                             |  553 +
 kernel/mri/mri.c                                   |  275 +
 kernel/nfct/Makefile.am                            |    6 +
 kernel/nfct/Makefile.in                            |  553 +
 kernel/nfct/nfct.c                                 |  926 +
 kernel/nfft/Makefile.am                            |   17 +
 kernel/nfft/Makefile.in                            |  578 +
 kernel/nfft/nfft.c                                 | 5878 +++
 kernel/nfsft/Makefile.am                           |   20 +
 kernel/nfsft/Makefile.in                           |  591 +
 kernel/nfsft/api.h                                 |  104 +
 kernel/nfsft/legendre.c                            |  211 +
 kernel/nfsft/legendre.h                            |  112 +
 kernel/nfsft/nfsft.c                               | 1268 +
 kernel/nfsoft/Makefile.am                          |    6 +
 kernel/nfsoft/Makefile.in                          |  556 +
 kernel/nfsoft/nfsoft.c                             |  730 +
 kernel/nfsoft/wigner.c                             |  382 +
 kernel/nfsoft/wigner.h                             |  197 +
 kernel/nfst/Makefile.am                            |    6 +
 kernel/nfst/Makefile.in                            |  553 +
 kernel/nfst/nfst.c                                 | 1078 +
 kernel/nnfft/Makefile.am                           |    6 +
 kernel/nnfft/Makefile.in                           |  553 +
 kernel/nnfft/nnfft.c                               |  673 +
 kernel/nsfft/Makefile.am                           |    6 +
 kernel/nsfft/Makefile.in                           |  553 +
 kernel/nsfft/nsfft.c                               | 1894 +
 kernel/solver/Makefile.am                          |    4 +
 kernel/solver/Makefile.in                          |  553 +
 kernel/solver/solver.c                             |  728 +
 kernel/util/Makefile.am                            |    4 +
 kernel/util/Makefile.in                            |  560 +
 kernel/util/bessel_i0.c                            |  318 +
 kernel/util/error.c                                |  175 +
 kernel/util/float.c                                |   90 +
 kernel/util/int.c                                  |  111 +
 kernel/util/lambda.c                               |  247 +
 kernel/util/malloc.c                               |   66 +
 kernel/util/sinc.c                                 |   47 +
 m4/ax_apple_gcc_archflag.m4                        |   93 +
 m4/ax_cc_maxopt.m4                                 |  177 +
 m4/ax_check_compiler_flags.m4                      |   40 +
 m4/ax_check_dir.m4                                 |   23 +
 m4/ax_compiler_vendor.m4                           |   30 +
 m4/ax_gcc_archflag.m4                              |  184 +
 m4/ax_gcc_x86_cpuid.m4                             |   51 +
 m4/ax_lib_fftw3.m4                                 |  125 +
 m4/ax_nfft_module.m4                               |   14 +
 m4/ax_openmp.m4                                    |   99 +
 m4/ax_prog_matlab.m4                               |  318 +
 m4/libtool.m4                                      | 7982 ++++
 m4/ltoptions.m4                                    |  384 +
 m4/ltsugar.m4                                      |  123 +
 m4/ltversion.m4                                    |   23 +
 m4/lt~obsolete.m4                                  |   98 +
 matlab/Makefile.am                                 |   23 +
 matlab/Makefile.in                                 |  733 +
 matlab/README                                      |    1 +
 matlab/args.c                                      |   36 +
 matlab/imex.h                                      |   84 +
 matlab/malloc.c                                    |   59 +
 matlab/nfft/Contents.m                             |   30 +
 matlab/nfft/FFTW_ESTIMATE.m                        |   25 +
 matlab/nfft/FFTW_MEASURE.m                         |   25 +
 matlab/nfft/FFT_OUT_OF_PLACE.m                     |   25 +
 matlab/nfft/FG_PSI.m                               |   27 +
 matlab/nfft/Makefile.am                            |   44 +
 matlab/nfft/Makefile.in                            |  679 +
 matlab/nfft/PRE_FG_PSI.m                           |   28 +
 matlab/nfft/PRE_FULL_PSI.m                         |   27 +
 matlab/nfft/PRE_LIN_PSI.m                          |   27 +
 matlab/nfft/PRE_PHI_HUT.m                          |   27 +
 matlab/nfft/PRE_PSI.m                              |   25 +
 matlab/nfft/ndft_adjoint.m                         |   23 +
 matlab/nfft/ndft_trafo.m                           |   23 +
 matlab/nfft/nfft.m                                 |  387 +
 matlab/nfft/nfft_adjoint.m                         |   23 +
 matlab/nfft/nfft_finalize.m                        |   23 +
 matlab/nfft/nfft_get_f.m                           |   23 +
 matlab/nfft/nfft_get_f_hat.m                       |   23 +
 matlab/nfft/nfft_get_num_threads.m                 |   23 +
 matlab/nfft/nfft_get_x.m                           |   23 +
 matlab/nfft/nfft_init_1d.m                         |   23 +
 matlab/nfft/nfft_init_2d.m                         |   23 +
 matlab/nfft/nfft_init_3d.m                         |   23 +
 matlab/nfft/nfft_init_guru.m                       |   36 +
 matlab/nfft/nfft_precompute_psi.m                  |   23 +
 matlab/nfft/nfft_set_f.m                           |   23 +
 matlab/nfft/nfft_set_f_hat.m                       |   23 +
 matlab/nfft/nfft_set_x.m                           |   23 +
 matlab/nfft/nfft_trafo.m                           |   23 +
 matlab/nfft/nfftmex.c                              |  479 +
 matlab/nfft/simple_test.m                          |  128 +
 matlab/nfft/test_nfft1d.m                          |   70 +
 matlab/nfft/test_nfft2d.m                          |   78 +
 matlab/nfft/test_nfft3d.m                          |   83 +
 matlab/nfsft/@f_hat/Makefile.am                    |    5 +
 matlab/nfsft/@f_hat/Makefile.in                    |  480 +
 matlab/nfsft/@f_hat/char.m                         |   27 +
 matlab/nfsft/@f_hat/display.m                      |   34 +
 matlab/nfsft/@f_hat/double.m                       |   28 +
 matlab/nfsft/@f_hat/f_hat.m                        |   49 +
 matlab/nfsft/@f_hat/minus.m                        |   28 +
 matlab/nfsft/@f_hat/mtimes.m                       |   28 +
 matlab/nfsft/@f_hat/mtimesr.m                      |   33 +
 matlab/nfsft/@f_hat/norm.m                         |   24 +
 matlab/nfsft/@f_hat/plus.m                         |   27 +
 matlab/nfsft/@f_hat/subsasgn.m                     |   57 +
 matlab/nfsft/@f_hat/subsref.m                      |   56 +
 matlab/nfsft/Contents.m                            |   33 +
 matlab/nfsft/Makefile.am                           |   48 +
 matlab/nfsft/Makefile.in                           |  840 +
 matlab/nfsft/NFSFT_NORMALIZED.m                    |   22 +
 matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m           |   22 +
 matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m             |   22 +
 matlab/nfsft/NFSFT_PRESERVE_F_HAT.m                |   22 +
 matlab/nfsft/NFSFT_USE_DPT.m                       |   23 +
 matlab/nfsft/NFSFT_USE_NDFT.m                      |   22 +
 matlab/nfsft/cc.m                                  |   95 +
 matlab/nfsft/f_hat_index.m                         |   38 +
 matlab/nfsft/gl.m                                  |  106 +
 matlab/nfsft/ndsft_adjoint.m                       |   22 +
 matlab/nfsft/ndsft_trafo.m                         |   22 +
 matlab/nfsft/nfsft_adjoint.m                       |   22 +
 matlab/nfsft/nfsft_finalize.m                      |   22 +
 matlab/nfsft/nfsft_forget.m                        |   22 +
 matlab/nfsft/nfsft_get_f.m                         |   22 +
 matlab/nfsft/nfsft_get_f_hat.m                     |   22 +
 matlab/nfsft/nfsft_get_f_hat_linear.m              |   22 +
 matlab/nfsft/nfsft_get_num_threads.m               |   23 +
 matlab/nfsft/nfsft_get_x.m                         |   22 +
 matlab/nfsft/nfsft_init.m                          |   22 +
 matlab/nfsft/nfsft_init_advanced.m                 |   22 +
 matlab/nfsft/nfsft_init_guru.m                     |   22 +
 matlab/nfsft/nfsft_precompute.m                    |   30 +
 matlab/nfsft/nfsft_precompute_x.m                  |   22 +
 matlab/nfsft/nfsft_set_f.m                         |   22 +
 matlab/nfsft/nfsft_set_f_hat.m                     |   22 +
 matlab/nfsft/nfsft_set_f_hat_linear.m              |   22 +
 matlab/nfsft/nfsft_set_x.m                         |   22 +
 matlab/nfsft/nfsft_trafo.m                         |   22 +
 matlab/nfsft/nfsftmex.c                            |  482 +
 matlab/nfsft/projection.m                          |   78 +
 matlab/nfsft/simple_test.m                         |   69 +
 nfft3.pc.in                                        |   11 +
 support/Makefile.am                                |    3 +
 support/Makefile.in                                |  423 +
 support/rem.sed                                    |    3 +
 support/toc.sed                                    |    5 +
 tests/Makefile.am                                  |   31 +
 tests/Makefile.in                                  |  685 +
 tests/check_nfft.c                                 |  283 +
 tests/check_nfft.h                                 |   92 +
 tests/check_nfft_1d.c                              |  203 +
 util/Makefile.am                                   |   21 +
 util/Makefile.in                                   |  580 +
 util/util.c                                        | 1488 +
 958 files changed, 304357 insertions(+)

diff --git a/3rdparty/Makefile.am b/3rdparty/Makefile.am
new file mode 100644
index 0000000..c47c071
--- /dev/null
+++ b/3rdparty/Makefile.am
@@ -0,0 +1,9 @@
+SUBDIRS = cstripack .
+
+noinst_LTLIBRARIES = lib3rdparty.la
+
+lib3rdparty_la_SOURCES =
+
+lib3rdparty_la_LIBADD = cstripack/libcstripack.la
+
+EXTRA_DIST = README
\ No newline at end of file
diff --git a/3rdparty/Makefile.in b/3rdparty/Makefile.in
new file mode 100644
index 0000000..52c2a8e
--- /dev/null
+++ b/3rdparty/Makefile.in
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = 3rdparty
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+lib3rdparty_la_DEPENDENCIES = cstripack/libcstripack.la
+am_lib3rdparty_la_OBJECTS =
+lib3rdparty_la_OBJECTS = $(am_lib3rdparty_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(lib3rdparty_la_SOURCES)
+DIST_SOURCES = $(lib3rdparty_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = cstripack .
+noinst_LTLIBRARIES = lib3rdparty.la
+lib3rdparty_la_SOURCES = 
+lib3rdparty_la_LIBADD = cstripack/libcstripack.la
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 3rdparty/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu 3rdparty/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+lib3rdparty.la: $(lib3rdparty_la_OBJECTS) $(lib3rdparty_la_DEPENDENCIES) $(EXTRA_lib3rdparty_la_DEPENDENCIES) 
+	$(LINK)  $(lib3rdparty_la_OBJECTS) $(lib3rdparty_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
+	ctags-recursive distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/3rdparty/README b/3rdparty/README
new file mode 100644
index 0000000..be043b7
--- /dev/null
+++ b/3rdparty/README
@@ -0,0 +1,9 @@
+This directory contains third party code that is needed to build NFFT3. This 
+directory does, however, not contain the FFTW3 library which is also needed to 
+build NFFT3. It is available from http://www.fftw.org as a free download. All 
+code in subpackages is copyright of the respective authors as stated in each
+package. Currently, the following packages are included:
+
+CSTRIPACK - A C-version of Robert J. Renka's the STRIPACK Fortran package to 
+  compute Delaunay triangulations and Voronoi partitions on the unit sphere.
+
diff --git a/3rdparty/cstripack/Makefile.am b/3rdparty/cstripack/Makefile.am
new file mode 100644
index 0000000..d99c270
--- /dev/null
+++ b/3rdparty/cstripack/Makefile.am
@@ -0,0 +1,7 @@
+noinst_LTLIBRARIES = libcstripack.la
+
+libcstripack_la_SOURCES = cstripack.c
+
+libcstripack_la_LIBADD = 
+
+noinst_HEADERS = cstripack.h
diff --git a/3rdparty/cstripack/Makefile.in b/3rdparty/cstripack/Makefile.in
new file mode 100644
index 0000000..30e9115
--- /dev/null
+++ b/3rdparty/cstripack/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = 3rdparty/cstripack
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcstripack_la_DEPENDENCIES =
+am_libcstripack_la_OBJECTS = cstripack.lo
+libcstripack_la_OBJECTS = $(am_libcstripack_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libcstripack_la_SOURCES)
+DIST_SOURCES = $(libcstripack_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libcstripack.la
+libcstripack_la_SOURCES = cstripack.c
+libcstripack_la_LIBADD = 
+noinst_HEADERS = cstripack.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 3rdparty/cstripack/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu 3rdparty/cstripack/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libcstripack.la: $(libcstripack_la_OBJECTS) $(libcstripack_la_DEPENDENCIES) $(EXTRA_libcstripack_la_DEPENDENCIES) 
+	$(LINK)  $(libcstripack_la_OBJECTS) $(libcstripack_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cstripack.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/3rdparty/cstripack/cstripack.c b/3rdparty/cstripack/cstripack.c
new file mode 100644
index 0000000..d0c5baa
--- /dev/null
+++ b/3rdparty/cstripack/cstripack.c
@@ -0,0 +1,6262 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+/* src.f -- translated by f2c (version 20060506).
+   You must link the resulting object file with libf2c:
+	on Microsoft Windows system, link with libf2c.lib;
+	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+	or, if you install libf2c.a in a standard place, with -lf2c -lm
+	-- in that order, at the end of the command line, as in
+		cc *.o -lf2c -lm
+	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+		http://www.netlib.org/f2c/libf2c.zip
+*/
+
+#include <math.h>
+#include "cstripack.h"
+
+/* Declarations from f2c.h */
+#define abs(x) ((x) >= 0 ? (x) : -(x))
+#define TRUE_ (1)
+#define FALSE_ (0)
+
+/* Common Block Declarations */
+
+static struct {
+    double y;
+} stcom;
+
+/* Subroutine */ int addnod_(int *nst, int *k, double *x,
+	double *y, double *z__, int *list, int *lptr, int
+	*lend, int *lnew, int *ier)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int l;
+    static double p[3], b1, b2, b3;
+    static int i1, i2, i3, kk, lp, in1, io1, io2, km1, lpf, ist, lpo1;
+    static int lpo1s;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/08/99 */
+
+/*   This subroutine adds node K to a triangulation of the */
+/* convex hull of nodes 1,...,K-1, producing a triangulation */
+/* of the convex hull of nodes 1,...,K. */
+
+/*   The algorithm consists of the following steps:  node K */
+/* is located relative to the triangulation (TRFIND), its */
+/* index is added to the data structure (INTADD or BDYADD), */
+/* and a sequence of swaps (SWPTST and SWAP) are applied to */
+/* the arcs opposite K so that all arcs incident on node K */
+/* and opposite node K are locally optimal (satisfy the cir- */
+/* cumcircle test).  Thus, if a Delaunay triangulation is */
+/* input, a Delaunay triangulation will result. */
+
+
+/* On input: */
+
+/*       NST = Index of a node at which TRFIND begins its */
+/*             search.  Search time depends on the proximity */
+/*             of this node to K.  If NST < 1, the search is */
+/*             begun at node K-1. */
+
+/*       K = Nodal index (index for X, Y, Z, and LEND) of the */
+/*           new node to be added.  K .GE. 4. */
+
+/*       X,Y,Z = Arrays of length .GE. K containing Car- */
+/*               tesian coordinates of the nodes. */
+/*               (X(I),Y(I),Z(I)) defines node I for */
+/*               I = 1,...,K. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure associated with */
+/*                             the triangulation of nodes 1 */
+/*                             to K-1.  The array lengths are */
+/*                             assumed to be large enough to */
+/*                             add node K.  Refer to Subrou- */
+/*                             tine TRMESH. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure updated with */
+/*                             the addition of node K as the */
+/*                             last entry unless IER .NE. 0 */
+/*                             and IER .NE. -3, in which case */
+/*                             the arrays are not altered. */
+
+/*       IER = Error indicator: */
+/*             IER =  0 if no errors were encountered. */
+/*             IER = -1 if K is outside its valid range */
+/*                      on input. */
+/*             IER = -2 if all nodes (including K) are col- */
+/*                      linear (lie on a common geodesic). */
+/*             IER =  L if nodes L and K coincide for some */
+/*                      L < K. */
+
+/* Modules required by ADDNOD:  BDYADD, COVSPH, INSERT, */
+/*                                INTADD, JRAND, LSTPTR, */
+/*                                STORE, SWAP, SWPTST, */
+/*                                TRFIND */
+
+/* Intrinsic function called by ADDNOD:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* B1,B2,B3 = Unnormalized barycentric coordinates returned */
+/*              by TRFIND. */
+/* I1,I2,I3 = Vertex indexes of a triangle containing K */
+/* IN1 =      Vertex opposite K:  first neighbor of IO2 */
+/*              that precedes IO1.  IN1,IO1,IO2 are in */
+/*              counterclockwise order. */
+/* IO1,IO2 =  Adjacent neighbors of K defining an arc to */
+/*              be tested for a swap */
+/* IST =      Index of node at which TRFIND begins its search */
+/* KK =       Local copy of K */
+/* KM1 =      K-1 */
+/* L =        Vertex index (I1, I2, or I3) returned in IER */
+/*              if node K coincides with a vertex */
+/* LP =       LIST pointer */
+/* LPF =      LIST pointer to the first neighbor of K */
+/* LPO1 =     LIST pointer to IO1 */
+/* LPO1S =    Saved value of LPO1 */
+/* P =        Cartesian coordinates of node K */
+
+    /* Parameter adjustments */
+    --lend;
+    --z__;
+    --y;
+    --x;
+    --list;
+    --lptr;
+
+    /* Function Body */
+    kk = *k;
+    if (kk < 4) {
+	goto L3;
+    }
+
+/* Initialization: */
+
+    km1 = kk - 1;
+    ist = *nst;
+    if (ist < 1) {
+	ist = km1;
+    }
+    p[0] = x[kk];
+    p[1] = y[kk];
+    p[2] = z__[kk];
+
+/* Find a triangle (I1,I2,I3) containing K or the rightmost */
+/*   (I1) and leftmost (I2) visible boundary nodes as viewed */
+/*   from node K. */
+
+    trfind_(&ist, p, &km1, &x[1], &y[1], &z__[1], &list[1], &lptr[1], &lend[1]
+	    , &b1, &b2, &b3, &i1, &i2, &i3);
+
+/*   Test for collinear or duplicate nodes. */
+
+    if (i1 == 0) {
+	goto L4;
+    }
+    if (i3 != 0) {
+	l = i1;
+	if (p[0] == x[l] && p[1] == y[l] && p[2] == z__[l]) {
+	    goto L5;
+	}
+	l = i2;
+	if (p[0] == x[l] && p[1] == y[l] && p[2] == z__[l]) {
+	    goto L5;
+	}
+	l = i3;
+	if (p[0] == x[l] && p[1] == y[l] && p[2] == z__[l]) {
+	    goto L5;
+	}
+	intadd_(&kk, &i1, &i2, &i3, &list[1], &lptr[1], &lend[1], lnew);
+    } else {
+	if (i1 != i2) {
+	    bdyadd_(&kk, &i1, &i2, &list[1], &lptr[1], &lend[1], lnew);
+	} else {
+	    covsph_(&kk, &i1, &list[1], &lptr[1], &lend[1], lnew);
+	}
+    }
+    *ier = 0;
+
+/* Initialize variables for optimization of the */
+/*   triangulation. */
+
+    lp = lend[kk];
+    lpf = lptr[lp];
+    io2 = list[lpf];
+    lpo1 = lptr[lpf];
+    io1 = (i__1 = list[lpo1], abs(i__1));
+
+/* Begin loop:  find the node opposite K. */
+
+L1:
+    lp = lstptr_(&lend[io1], &io2, &list[1], &lptr[1]);
+    if (list[lp] < 0) {
+	goto L2;
+    }
+    lp = lptr[lp];
+    in1 = (i__1 = list[lp], abs(i__1));
+
+/* Swap test:  if a swap occurs, two new arcs are */
+/*             opposite K and must be tested. */
+
+    lpo1s = lpo1;
+    if (! swptst_(&in1, &kk, &io1, &io2, &x[1], &y[1], &z__[1])) {
+	goto L2;
+    }
+    swap_(&in1, &kk, &io1, &io2, &list[1], &lptr[1], &lend[1], &lpo1);
+    if (lpo1 == 0) {
+
+/*   A swap is not possible because KK and IN1 are already */
+/*     adjacent.  This error in SWPTST only occurs in the */
+/*     neutral case and when there are nearly duplicate */
+/*     nodes. */
+
+	lpo1 = lpo1s;
+	goto L2;
+    }
+    io1 = in1;
+    goto L1;
+
+/* No swap occurred.  Test for termination and reset */
+/*   IO2 and IO1. */
+
+L2:
+    if (lpo1 == lpf || list[lpo1] < 0) {
+	return 0;
+    }
+    io2 = io1;
+    lpo1 = lptr[lpo1];
+    io1 = (i__1 = list[lpo1], abs(i__1));
+    goto L1;
+
+/* KK < 4. */
+
+L3:
+    *ier = -1;
+    return 0;
+
+/* All nodes are collinear. */
+
+L4:
+    *ier = -2;
+    return 0;
+
+/* Nodes L and K coincide. */
+
+L5:
+    *ier = l;
+    return 0;
+} /* addnod_ */
+
+double areas_(double *v1, double *v2, double *v3)
+{
+    /* System generated locals */
+    double ret_val;
+
+    /* Local variables */
+    static int i__;
+    static double a1, a2, a3, s12, s31, s23, u12[3], u23[3], u31[3], ca1,
+	    ca2, ca3, dv1[3], dv2[3], dv3[3];
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   09/18/90 */
+
+/*   This function returns the area of a spherical triangle */
+/* on the unit sphere. */
+
+
+/* On input: */
+
+/*       V1,V2,V3 = Arrays of length 3 containing the Carte- */
+/*                  sian coordinates of unit vectors (the */
+/*                  three triangle vertices in any order). */
+/*                  These vectors, if nonzero, are implicitly */
+/*                  scaled to have length 1. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/*       AREAS = Area of the spherical triangle defined by */
+/*               V1, V2, and V3 in the range 0 to 2*PI (the */
+/*               area of a hemisphere).  AREAS = 0 (or 2*PI) */
+/*               if and only if V1, V2, and V3 lie in (or */
+/*               close to) a plane containing the origin. */
+
+/* Modules required by AREAS:  None */
+
+/* Intrinsic functions called by AREAS:  ACOS, DBLE, REAL, */
+/*                                         SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* A1,A2,A3 =    Interior angles of the spherical triangle */
+/* CA1,CA2,CA3 = cos(A1), cos(A2), and cos(A3), respectively */
+/* DV1,DV2,DV3 = Double Precision copies of V1, V2, and V3 */
+/* I =           DO-loop index and index for Uij */
+/* S12,S23,S31 = Sum of squared components of U12, U23, U31 */
+/* U12,U23,U31 = Unit normal vectors to the planes defined by */
+/*                 pairs of triangle vertices */
+
+    /* Parameter adjustments */
+    --v3;
+    --v2;
+    --v1;
+
+    /* Function Body */
+    for (i__ = 1; i__ <= 3; ++i__) {
+	dv1[i__ - 1] = v1[i__];
+	dv2[i__ - 1] = v2[i__];
+	dv3[i__ - 1] = v3[i__];
+/* L1: */
+    }
+
+/* Compute cross products Uij = Vi X Vj. */
+
+    u12[0] = dv1[1] * dv2[2] - dv1[2] * dv2[1];
+    u12[1] = dv1[2] * dv2[0] - dv1[0] * dv2[2];
+    u12[2] = dv1[0] * dv2[1] - dv1[1] * dv2[0];
+
+    u23[0] = dv2[1] * dv3[2] - dv2[2] * dv3[1];
+    u23[1] = dv2[2] * dv3[0] - dv2[0] * dv3[2];
+    u23[2] = dv2[0] * dv3[1] - dv2[1] * dv3[0];
+
+    u31[0] = dv3[1] * dv1[2] - dv3[2] * dv1[1];
+    u31[1] = dv3[2] * dv1[0] - dv3[0] * dv1[2];
+    u31[2] = dv3[0] * dv1[1] - dv3[1] * dv1[0];
+
+/* Normalize Uij to unit vectors. */
+
+    s12 = 0.;
+    s23 = 0.;
+    s31 = 0.;
+    for (i__ = 1; i__ <= 3; ++i__) {
+	s12 += u12[i__ - 1] * u12[i__ - 1];
+	s23 += u23[i__ - 1] * u23[i__ - 1];
+	s31 += u31[i__ - 1] * u31[i__ - 1];
+/* L2: */
+    }
+
+/* Test for a degenerate triangle associated with collinear */
+/*   vertices. */
+
+    if (s12 == 0. || s23 == 0. || s31 == 0.) {
+	ret_val = 0.;
+	return ret_val;
+    }
+    s12 = sqrt(s12);
+    s23 = sqrt(s23);
+    s31 = sqrt(s31);
+    for (i__ = 1; i__ <= 3; ++i__) {
+	u12[i__ - 1] /= s12;
+	u23[i__ - 1] /= s23;
+	u31[i__ - 1] /= s31;
+/* L3: */
+    }
+
+/* Compute interior angles Ai as the dihedral angles between */
+/*   planes: */
+/*           CA1 = cos(A1) = -<U12,U31> */
+/*           CA2 = cos(A2) = -<U23,U12> */
+/*           CA3 = cos(A3) = -<U31,U23> */
+
+    ca1 = -u12[0] * u31[0] - u12[1] * u31[1] - u12[2] * u31[2];
+    ca2 = -u23[0] * u12[0] - u23[1] * u12[1] - u23[2] * u12[2];
+    ca3 = -u31[0] * u23[0] - u31[1] * u23[1] - u31[2] * u23[2];
+    if (ca1 < -1.) {
+	ca1 = -1.;
+    }
+    if (ca1 > 1.) {
+	ca1 = 1.;
+    }
+    if (ca2 < -1.) {
+	ca2 = -1.;
+    }
+    if (ca2 > 1.) {
+	ca2 = 1.;
+    }
+    if (ca3 < -1.) {
+	ca3 = -1.;
+    }
+    if (ca3 > 1.) {
+	ca3 = 1.;
+    }
+    a1 = acos(ca1);
+    a2 = acos(ca2);
+    a3 = acos(ca3);
+
+/* Compute AREAS = A1 + A2 + A3 - PI. */
+
+    ret_val = a1 + a2 + a3 - acos(-1.);
+    if (ret_val < 0.) {
+	ret_val = 0.;
+    }
+    return ret_val;
+} /* areas_ */
+
+/* Subroutine */ int bdyadd_(int *kk, int *i1, int *i2, int *
+	list, int *lptr, int *lend, int *lnew)
+{
+    static int k, n1, n2, lp, lsav, nsav, next;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/11/96 */
+
+/*   This subroutine adds a boundary node to a triangulation */
+/* of a set of KK-1 points on the unit sphere.  The data */
+/* structure is updated with the insertion of node KK, but no */
+/* optimization is performed. */
+
+/*   This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/*       KK = Index of a node to be connected to the sequence */
+/*            of all visible boundary nodes.  KK .GE. 1 and */
+/*            KK must not be equal to I1 or I2. */
+
+/*       I1 = First (rightmost as viewed from KK) boundary */
+/*            node in the triangulation that is visible from */
+/*            node KK (the line segment KK-I1 intersects no */
+/*            arcs. */
+
+/*       I2 = Last (leftmost) boundary node that is visible */
+/*            from node KK.  I1 and I2 may be determined by */
+/*            Subroutine TRFIND. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND,LNEW = Triangulation data structure */
+/*                             created by Subroutine TRMESH. */
+/*                             Nodes I1 and I2 must be in- */
+/*                             cluded in the triangulation. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure updated with */
+/*                             the addition of node KK.  Node */
+/*                             KK is connected to I1, I2, and */
+/*                             all boundary nodes in between. */
+
+/* Module required by BDYADD:  INSERT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K =     Local copy of KK */
+/* LP =    LIST pointer */
+/* LSAV =  LIST pointer */
+/* N1,N2 = Local copies of I1 and I2, respectively */
+/* NEXT =  Boundary node visible from K */
+/* NSAV =  Boundary node visible from K */
+
+    /* Parameter adjustments */
+    --lend;
+    --lptr;
+    --list;
+
+    /* Function Body */
+    k = *kk;
+    n1 = *i1;
+    n2 = *i2;
+
+/* Add K as the last neighbor of N1. */
+
+    lp = lend[n1];
+    lsav = lptr[lp];
+    lptr[lp] = *lnew;
+    list[*lnew] = -k;
+    lptr[*lnew] = lsav;
+    lend[n1] = *lnew;
+    ++(*lnew);
+    next = -list[lp];
+    list[lp] = next;
+    nsav = next;
+
+/* Loop on the remaining boundary nodes between N1 and N2, */
+/*   adding K as the first neighbor. */
+
+L1:
+    lp = lend[next];
+    insert_(&k, &lp, &list[1], &lptr[1], lnew);
+    if (next == n2) {
+	goto L2;
+    }
+    next = -list[lp];
+    list[lp] = next;
+    goto L1;
+
+/* Add the boundary nodes between N1 and N2 as neighbors */
+/*   of node K. */
+
+L2:
+    lsav = *lnew;
+    list[*lnew] = n1;
+    lptr[*lnew] = *lnew + 1;
+    ++(*lnew);
+    next = nsav;
+
+L3:
+    if (next == n2) {
+	goto L4;
+    }
+    list[*lnew] = next;
+    lptr[*lnew] = *lnew + 1;
+    ++(*lnew);
+    lp = lend[next];
+    next = list[lp];
+    goto L3;
+
+L4:
+    list[*lnew] = -n2;
+    lptr[*lnew] = lsav;
+    lend[k] = *lnew;
+    ++(*lnew);
+    return 0;
+} /* bdyadd_ */
+
+/* Subroutine */ int bnodes_(int *n, int *list, int *lptr,
+	int *lend, int *nodes, int *nb, int *na, int *nt)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int k, n0, lp, nn, nst;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   06/26/96 */
+
+/*   Given a triangulation of N nodes on the unit sphere */
+/* created by Subroutine TRMESH, this subroutine returns an */
+/* array containing the indexes (if any) of the counterclock- */
+/* wise-ordered sequence of boundary nodes -- the nodes on */
+/* the boundary of the convex hull of the set of nodes.  (The */
+/* boundary is empty if the nodes do not lie in a single */
+/* hemisphere.)  The numbers of boundary nodes, arcs, and */
+/* triangles are also returned. */
+
+
+/* On input: */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+
+/*       LIST,LPTR,LEND = Data structure defining the trian- */
+/*                        gulation.  Refer to Subroutine */
+/*                        TRMESH. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       NODES = int array of length at least NB */
+/*               (NB .LE. N). */
+
+/* On output: */
+
+/*       NODES = Ordered sequence of boundary node indexes */
+/*               in the range 1 to N (in the first NB loca- */
+/*               tions). */
+
+/*       NB = Number of boundary nodes. */
+
+/*       NA,NT = Number of arcs and triangles, respectively, */
+/*               in the triangulation. */
+
+/* Modules required by BNODES:  None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K =   NODES index */
+/* LP =  LIST pointer */
+/* N0 =  Boundary node to be added to NODES */
+/* NN =  Local copy of N */
+/* NST = First element of nodes (arbitrarily chosen to be */
+/*         the one with smallest index) */
+
+    /* Parameter adjustments */
+    --lend;
+    --list;
+    --lptr;
+    --nodes;
+
+    /* Function Body */
+    nn = *n;
+
+/* Search for a boundary node. */
+
+    i__1 = nn;
+    for (nst = 1; nst <= i__1; ++nst) {
+	lp = lend[nst];
+	if (list[lp] < 0) {
+	    goto L2;
+	}
+/* L1: */
+    }
+
+/* The triangulation contains no boundary nodes. */
+
+    *nb = 0;
+    *na = (nn - 2) * 3;
+    *nt = (nn - 2) << 1;
+    return 0;
+
+/* NST is the first boundary node encountered.  Initialize */
+/*   for traversal of the boundary. */
+
+L2:
+    nodes[1] = nst;
+    k = 1;
+    n0 = nst;
+
+/* Traverse the boundary in counterclockwise order. */
+
+L3:
+    lp = lend[n0];
+    lp = lptr[lp];
+    n0 = list[lp];
+    if (n0 == nst) {
+	goto L4;
+    }
+    ++k;
+    nodes[k] = n0;
+    goto L3;
+
+/* Store the counts. */
+
+L4:
+    *nb = k;
+    *nt = (*n << 1) - *nb - 2;
+    *na = *nt + *n - 1;
+    return 0;
+} /* bnodes_ */
+
+/* Subroutine */ int circum_(double *v1, double *v2, double *v3,
+	double *c__, int *ier)
+{
+    /* Local variables */
+    static int i__;
+    static double e1[3], e2[3], cu[3], cnorm;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   06/29/95 */
+
+/*   This subroutine returns the circumcenter of a spherical */
+/* triangle on the unit sphere:  the point on the sphere sur- */
+/* face that is equally distant from the three triangle */
+/* vertices and lies in the same hemisphere, where distance */
+/* is taken to be arc-length on the sphere surface. */
+
+
+/* On input: */
+
+/*       V1,V2,V3 = Arrays of length 3 containing the Carte- */
+/*                  sian coordinates of the three triangle */
+/*                  vertices (unit vectors) in CCW order. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       C = Array of length 3. */
+
+/* On output: */
+
+/*       C = Cartesian coordinates of the circumcenter unless */
+/*           IER > 0, in which case C is not defined.  C = */
+/*           (V2-V1) X (V3-V1) normalized to a unit vector. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if V1, V2, and V3 lie on a common */
+/*                     line:  (V2-V1) X (V3-V1) = 0. */
+/*             (The vertices are not tested for validity.) */
+
+/* Modules required by CIRCUM:  None */
+
+/* Intrinsic function called by CIRCUM:  SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* CNORM = Norm of CU:  used to compute C */
+/* CU =    Scalar multiple of C:  E1 X E2 */
+/* E1,E2 = Edges of the underlying planar triangle: */
+/*           V2-V1 and V3-V1, respectively */
+/* I =     DO-loop index */
+
+    /* Parameter adjustments */
+    --c__;
+    --v3;
+    --v2;
+    --v1;
+
+    /* Function Body */
+    for (i__ = 1; i__ <= 3; ++i__) {
+	e1[i__ - 1] = v2[i__] - v1[i__];
+	e2[i__ - 1] = v3[i__] - v1[i__];
+/* L1: */
+    }
+
+/* Compute CU = E1 X E2 and CNORM**2. */
+
+    cu[0] = e1[1] * e2[2] - e1[2] * e2[1];
+    cu[1] = e1[2] * e2[0] - e1[0] * e2[2];
+    cu[2] = e1[0] * e2[1] - e1[1] * e2[0];
+    cnorm = cu[0] * cu[0] + cu[1] * cu[1] + cu[2] * cu[2];
+
+/* The vertices lie on a common line if and only if CU is */
+/*   the zero vector. */
+
+    if (cnorm != 0.) {
+
+/*   No error:  compute C. */
+
+	cnorm = sqrt(cnorm);
+	for (i__ = 1; i__ <= 3; ++i__) {
+	    c__[i__] = cu[i__ - 1] / cnorm;
+/* L2: */
+	}
+	*ier = 0;
+    } else {
+
+/*   CU = 0. */
+
+	*ier = 1;
+    }
+    return 0;
+} /* circum_ */
+
+/* Subroutine */ int covsph_(int *kk, int *n0, int *list, int
+	*lptr, int *lend, int *lnew)
+{
+    static int k, lp, nst, lsav, next;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/17/96 */
+
+/*   This subroutine connects an exterior node KK to all */
+/* boundary nodes of a triangulation of KK-1 points on the */
+/* unit sphere, producing a triangulation that covers the */
+/* sphere.  The data structure is updated with the addition */
+/* of node KK, but no optimization is performed.  All boun- */
+/* dary nodes must be visible from node KK. */
+
+
+/* On input: */
+
+/*       KK = Index of the node to be connected to the set of */
+/*            all boundary nodes.  KK .GE. 4. */
+
+/*       N0 = Index of a boundary node (in the range 1 to */
+/*            KK-1).  N0 may be determined by Subroutine */
+/*            TRFIND. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND,LNEW = Triangulation data structure */
+/*                             created by Subroutine TRMESH. */
+/*                             Node N0 must be included in */
+/*                             the triangulation. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure updated with */
+/*                             the addition of node KK as the */
+/*                             last entry.  The updated */
+/*                             triangulation contains no */
+/*                             boundary nodes. */
+
+/* Module required by COVSPH:  INSERT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K =     Local copy of KK */
+/* LP =    LIST pointer */
+/* LSAV =  LIST pointer */
+/* NEXT =  Boundary node visible from K */
+/* NST =   Local copy of N0 */
+
+    /* Parameter adjustments */
+    --lend;
+    --lptr;
+    --list;
+
+    /* Function Body */
+    k = *kk;
+    nst = *n0;
+
+/* Traverse the boundary in clockwise order, inserting K as */
+/*   the first neighbor of each boundary node, and converting */
+/*   the boundary node to an interior node. */
+
+    next = nst;
+L1:
+    lp = lend[next];
+    insert_(&k, &lp, &list[1], &lptr[1], lnew);
+    next = -list[lp];
+    list[lp] = next;
+    if (next != nst) {
+	goto L1;
+    }
+
+/* Traverse the boundary again, adding each node to K's */
+/*   adjacency list. */
+
+    lsav = *lnew;
+L2:
+    lp = lend[next];
+    list[*lnew] = next;
+    lptr[*lnew] = *lnew + 1;
+    ++(*lnew);
+    next = list[lp];
+    if (next != nst) {
+	goto L2;
+    }
+
+    lptr[*lnew - 1] = lsav;
+    lend[k] = *lnew - 1;
+    return 0;
+} /* covsph_ */
+
+/* Subroutine */ int crlist_(int *n, int *ncol, double *x,
+	double *y, double *z__, int *list, int *lend, int
+	*lptr, int *lnew, int *ltri, int *listc, int *nb,
+	double *xc, double *yc, double *zc, double *rc,
+	int *ier)
+{
+    /* System generated locals */
+    int i__1, i__2;
+
+    /* Local variables */
+    static double c__[3], t;
+    static int i1, i2, i3, i4, n0, n1, n2, n3, n4;
+    static double v1[3], v2[3], v3[3];
+    static int lp, kt, nn, nt, nm2, kt1, kt2, kt11, kt12, kt21, kt22, lpl,
+	     lpn;
+    static int swp;
+    static int ierr;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/05/98 */
+
+/*   Given a Delaunay triangulation of nodes on the surface */
+/* of the unit sphere, this subroutine returns the set of */
+/* triangle circumcenters corresponding to Voronoi vertices, */
+/* along with the circumradii and a list of triangle indexes */
+/* LISTC stored in one-to-one correspondence with LIST/LPTR */
+/* entries. */
+
+/*   A triangle circumcenter is the point (unit vector) lying */
+/* at the same angular distance from the three vertices and */
+/* contained in the same hemisphere as the vertices.  (Note */
+/* that the negative of a circumcenter is also equidistant */
+/* from the vertices.)  If the triangulation covers the sur- */
+/* face, the Voronoi vertices are the circumcenters of the */
+/* triangles in the Delaunay triangulation.  LPTR, LEND, and */
+/* LNEW are not altered in this case. */
+
+/*   On the other hand, if the nodes are contained in a sin- */
+/* gle hemisphere, the triangulation is implicitly extended */
+/* to the entire surface by adding pseudo-arcs (of length */
+/* greater than 180 degrees) between boundary nodes forming */
+/* pseudo-triangles whose 'circumcenters' are included in the */
+/* list.  This extension to the triangulation actually con- */
+/* sists of a triangulation of the set of boundary nodes in */
+/* which the swap test is reversed (a non-empty circumcircle */
+/* test).  The negative circumcenters are stored as the */
+/* pseudo-triangle 'circumcenters'.  LISTC, LPTR, LEND, and */
+/* LNEW contain a data structure corresponding to the ex- */
+/* tended triangulation (Voronoi diagram), but LIST is not */
+/* altered in this case.  Thus, if it is necessary to retain */
+/* the original (unextended) triangulation data structure, */
+/* copies of LPTR and LNEW must be saved before calling this */
+/* routine. */
+
+
+/* On input: */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+/*           Note that, if N = 3, there are only two Voronoi */
+/*           vertices separated by 180 degrees, and the */
+/*           Voronoi regions are not well defined. */
+
+/*       NCOL = Number of columns reserved for LTRI.  This */
+/*              must be at least NB-2, where NB is the number */
+/*              of boundary nodes. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the nodes (unit vectors). */
+
+/*       LIST = int array containing the set of adjacency */
+/*              lists.  Refer to Subroutine TRMESH. */
+
+/*       LEND = Set of pointers to ends of adjacency lists. */
+/*              Refer to Subroutine TRMESH. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LPTR = Array of pointers associated with LIST.  Re- */
+/*              fer to Subroutine TRMESH. */
+
+/*       LNEW = Pointer to the first empty location in LIST */
+/*              and LPTR (list length plus one). */
+
+/*       LTRI = int work space array dimensioned 6 by */
+/*              NCOL, or unused dummy parameter if NB = 0. */
+
+/*       LISTC = int array of length at least 3*NT, where */
+/*               NT = 2*N-4 is the number of triangles in the */
+/*               triangulation (after extending it to cover */
+/*               the entire surface if necessary). */
+
+/*       XC,YC,ZC,RC = Arrays of length NT = 2*N-4. */
+
+/* On output: */
+
+/*       LPTR = Array of pointers associated with LISTC: */
+/*              updated for the addition of pseudo-triangles */
+/*              if the original triangulation contains */
+/*              boundary nodes (NB > 0). */
+
+/*       LNEW = Pointer to the first empty location in LISTC */
+/*              and LPTR (list length plus one).  LNEW is not */
+/*              altered if NB = 0. */
+
+/*       LTRI = Triangle list whose first NB-2 columns con- */
+/*              tain the indexes of a clockwise-ordered */
+/*              sequence of vertices (first three rows) */
+/*              followed by the LTRI column indexes of the */
+/*              triangles opposite the vertices (or 0 */
+/*              denoting the exterior region) in the last */
+/*              three rows.  This array is not generally of */
+/*              any use. */
+
+/*       LISTC = Array containing triangle indexes (indexes */
+/*               to XC, YC, ZC, and RC) stored in 1-1 corres- */
+/*               pondence with LIST/LPTR entries (or entries */
+/*               that would be stored in LIST for the */
+/*               extended triangulation):  the index of tri- */
+/*               angle (N1,N2,N3) is stored in LISTC(K), */
+/*               LISTC(L), and LISTC(M), where LIST(K), */
+/*               LIST(L), and LIST(M) are the indexes of N2 */
+/*               as a neighbor of N1, N3 as a neighbor of N2, */
+/*               and N1 as a neighbor of N3.  The Voronoi */
+/*               region associated with a node is defined by */
+/*               the CCW-ordered sequence of circumcenters in */
+/*               one-to-one correspondence with its adjacency */
+/*               list (in the extended triangulation). */
+
+/*       NB = Number of boundary nodes unless IER = 1. */
+
+/*       XC,YC,ZC = Arrays containing the Cartesian coordi- */
+/*                  nates of the triangle circumcenters */
+/*                  (Voronoi vertices).  XC(I)**2 + YC(I)**2 */
+/*                  + ZC(I)**2 = 1.  The first NB-2 entries */
+/*                  correspond to pseudo-triangles if NB > 0. */
+
+/*       RC = Array containing circumradii (the arc lengths */
+/*            or angles between the circumcenters and associ- */
+/*            ated triangle vertices) in 1-1 correspondence */
+/*            with circumcenters. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if N < 3. */
+/*             IER = 2 if NCOL < NB-2. */
+/*             IER = 3 if a triangle is degenerate (has ver- */
+/*                     tices lying on a common geodesic). */
+
+/* Modules required by CRLIST:  CIRCUM, LSTPTR, SWPTST */
+
+/* Intrinsic functions called by CRLIST:  ABS, ACOS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* C =         Circumcenter returned by Subroutine CIRCUM */
+/* I1,I2,I3 =  Permutation of (1,2,3):  LTRI row indexes */
+/* I4 =        LTRI row index in the range 1 to 3 */
+/* IERR =      Error flag for calls to CIRCUM */
+/* KT =        Triangle index */
+/* KT1,KT2 =   Indexes of a pair of adjacent pseudo-triangles */
+/* KT11,KT12 = Indexes of the pseudo-triangles opposite N1 */
+/*               and N2 as vertices of KT1 */
+/* KT21,KT22 = Indexes of the pseudo-triangles opposite N1 */
+/*               and N2 as vertices of KT2 */
+/* LP,LPN =    LIST pointers */
+/* LPL =       LIST pointer of the last neighbor of N1 */
+/* N0 =        Index of the first boundary node (initial */
+/*               value of N1) in the loop on boundary nodes */
+/*               used to store the pseudo-triangle indexes */
+/*               in LISTC */
+/* N1,N2,N3 =  Nodal indexes defining a triangle (CCW order) */
+/*               or pseudo-triangle (clockwise order) */
+/* N4 =        Index of the node opposite N2 -> N1 */
+/* NM2 =       N-2 */
+/* NN =        Local copy of N */
+/* NT =        Number of pseudo-triangles:  NB-2 */
+/* SWP =       Logical variable set to TRUE in each optimiza- */
+/*               tion loop (loop on pseudo-arcs) iff a swap */
+/*               is performed */
+/* V1,V2,V3 =  Vertices of triangle KT = (N1,N2,N3) sent to */
+/*               Subroutine CIRCUM */
+
+    /* Parameter adjustments */
+    --lend;
+    --z__;
+    --y;
+    --x;
+    ltri -= 7;
+    --list;
+    --lptr;
+    --listc;
+    --xc;
+    --yc;
+    --zc;
+    --rc;
+
+    /* Function Body */
+    nn = *n;
+    *nb = 0;
+    nt = 0;
+    if (nn < 3) {
+	goto L21;
+    }
+
+/* Search for a boundary node N1. */
+
+    i__1 = nn;
+    for (n1 = 1; n1 <= i__1; ++n1) {
+	lp = lend[n1];
+	if (list[lp] < 0) {
+	    goto L2;
+	}
+/* L1: */
+    }
+
+/* The triangulation already covers the sphere. */
+
+    goto L9;
+
+/* There are NB .GE. 3 boundary nodes.  Add NB-2 pseudo- */
+/*   triangles (N1,N2,N3) by connecting N3 to the NB-3 */
+/*   boundary nodes to which it is not already adjacent. */
+
+/*   Set N3 and N2 to the first and last neighbors, */
+/*     respectively, of N1. */
+
+L2:
+    n2 = -list[lp];
+    lp = lptr[lp];
+    n3 = list[lp];
+
+/*   Loop on boundary arcs N1 -> N2 in clockwise order, */
+/*     storing triangles (N1,N2,N3) in column NT of LTRI */
+/*     along with the indexes of the triangles opposite */
+/*     the vertices. */
+
+L3:
+    ++nt;
+    if (nt <= *ncol) {
+	ltri[nt * 6 + 1] = n1;
+	ltri[nt * 6 + 2] = n2;
+	ltri[nt * 6 + 3] = n3;
+	ltri[nt * 6 + 4] = nt + 1;
+	ltri[nt * 6 + 5] = nt - 1;
+	ltri[nt * 6 + 6] = 0;
+    }
+    n1 = n2;
+    lp = lend[n1];
+    n2 = -list[lp];
+    if (n2 != n3) {
+	goto L3;
+    }
+
+    *nb = nt + 2;
+    if (*ncol < nt) {
+	goto L22;
+    }
+    ltri[nt * 6 + 4] = 0;
+    if (nt == 1) {
+	goto L7;
+    }
+
+/* Optimize the exterior triangulation (set of pseudo- */
+/*   triangles) by applying swaps to the pseudo-arcs N1-N2 */
+/*   (pairs of adjacent pseudo-triangles KT1 and KT2 > KT1). */
+/*   The loop on pseudo-arcs is repeated until no swaps are */
+/*   performed. */
+
+L4:
+    swp = FALSE_;
+    i__1 = nt - 1;
+    for (kt1 = 1; kt1 <= i__1; ++kt1) {
+	for (i3 = 1; i3 <= 3; ++i3) {
+	    kt2 = ltri[i3 + 3 + kt1 * 6];
+	    if (kt2 <= kt1) {
+		goto L5;
+	    }
+
+/*   The LTRI row indexes (I1,I2,I3) of triangle KT1 = */
+/*     (N1,N2,N3) are a cyclical permutation of (1,2,3). */
+
+	    if (i3 == 1) {
+		i1 = 2;
+		i2 = 3;
+	    } else if (i3 == 2) {
+		i1 = 3;
+		i2 = 1;
+	    } else {
+		i1 = 1;
+		i2 = 2;
+	    }
+	    n1 = ltri[i1 + kt1 * 6];
+	    n2 = ltri[i2 + kt1 * 6];
+	    n3 = ltri[i3 + kt1 * 6];
+
+/*   KT2 = (N2,N1,N4) for N4 = LTRI(I,KT2), where */
+/*     LTRI(I+3,KT2) = KT1. */
+
+	    if (ltri[kt2 * 6 + 4] == kt1) {
+		i4 = 1;
+	    } else if (ltri[kt2 * 6 + 5] == kt1) {
+		i4 = 2;
+	    } else {
+		i4 = 3;
+	    }
+	    n4 = ltri[i4 + kt2 * 6];
+
+/*   The empty circumcircle test is reversed for the pseudo- */
+/*     triangles.  The reversal is implicit in the clockwise */
+/*     ordering of the vertices. */
+
+	    if (! swptst_(&n1, &n2, &n3, &n4, &x[1], &y[1], &z__[1])) {
+		goto L5;
+	    }
+
+/*   Swap arc N1-N2 for N3-N4.  KTij is the triangle opposite */
+/*     Nj as a vertex of KTi. */
+
+	    swp = TRUE_;
+	    kt11 = ltri[i1 + 3 + kt1 * 6];
+	    kt12 = ltri[i2 + 3 + kt1 * 6];
+	    if (i4 == 1) {
+		i2 = 2;
+		i1 = 3;
+	    } else if (i4 == 2) {
+		i2 = 3;
+		i1 = 1;
+	    } else {
+		i2 = 1;
+		i1 = 2;
+	    }
+	    kt21 = ltri[i1 + 3 + kt2 * 6];
+	    kt22 = ltri[i2 + 3 + kt2 * 6];
+	    ltri[kt1 * 6 + 1] = n4;
+	    ltri[kt1 * 6 + 2] = n3;
+	    ltri[kt1 * 6 + 3] = n1;
+	    ltri[kt1 * 6 + 4] = kt12;
+	    ltri[kt1 * 6 + 5] = kt22;
+	    ltri[kt1 * 6 + 6] = kt2;
+	    ltri[kt2 * 6 + 1] = n3;
+	    ltri[kt2 * 6 + 2] = n4;
+	    ltri[kt2 * 6 + 3] = n2;
+	    ltri[kt2 * 6 + 4] = kt21;
+	    ltri[kt2 * 6 + 5] = kt11;
+	    ltri[kt2 * 6 + 6] = kt1;
+
+/*   Correct the KT11 and KT22 entries that changed. */
+
+	    if (kt11 != 0) {
+		i4 = 4;
+		if (ltri[kt11 * 6 + 4] != kt1) {
+		    i4 = 5;
+		    if (ltri[kt11 * 6 + 5] != kt1) {
+			i4 = 6;
+		    }
+		}
+		ltri[i4 + kt11 * 6] = kt2;
+	    }
+	    if (kt22 != 0) {
+		i4 = 4;
+		if (ltri[kt22 * 6 + 4] != kt2) {
+		    i4 = 5;
+		    if (ltri[kt22 * 6 + 5] != kt2) {
+			i4 = 6;
+		    }
+		}
+		ltri[i4 + kt22 * 6] = kt1;
+	    }
+L5:
+	    ;
+	}
+/* L6: */
+    }
+    if (swp) {
+	goto L4;
+    }
+
+/* Compute and store the negative circumcenters and radii of */
+/*   the pseudo-triangles in the first NT positions. */
+
+L7:
+    i__1 = nt;
+    for (kt = 1; kt <= i__1; ++kt) {
+	n1 = ltri[kt * 6 + 1];
+	n2 = ltri[kt * 6 + 2];
+	n3 = ltri[kt * 6 + 3];
+	v1[0] = x[n1];
+	v1[1] = y[n1];
+	v1[2] = z__[n1];
+	v2[0] = x[n2];
+	v2[1] = y[n2];
+	v2[2] = z__[n2];
+	v3[0] = x[n3];
+	v3[1] = y[n3];
+	v3[2] = z__[n3];
+	circum_(v1, v2, v3, c__, &ierr);
+	if (ierr != 0) {
+	    goto L23;
+	}
+
+/*   Store the negative circumcenter and radius (computed */
+/*     from <V1,C>). */
+
+	xc[kt] = c__[0];
+	yc[kt] = c__[1];
+	zc[kt] = c__[2];
+	t = v1[0] * c__[0] + v1[1] * c__[1] + v1[2] * c__[2];
+	if (t < -1.) {
+	    t = -1.;
+	}
+	if (t > 1.) {
+	    t = 1.;
+	}
+	rc[kt] = acos(t);
+/* L8: */
+    }
+
+/* Compute and store the circumcenters and radii of the */
+/*   actual triangles in positions KT = NT+1, NT+2, ... */
+/*   Also, store the triangle indexes KT in the appropriate */
+/*   LISTC positions. */
+
+L9:
+    kt = nt;
+
+/*   Loop on nodes N1. */
+
+    nm2 = nn - 2;
+    i__1 = nm2;
+    for (n1 = 1; n1 <= i__1; ++n1) {
+	lpl = lend[n1];
+	lp = lpl;
+	n3 = list[lp];
+
+/*   Loop on adjacent neighbors N2,N3 of N1 for which N2 > N1 */
+/*     and N3 > N1. */
+
+L10:
+	lp = lptr[lp];
+	n2 = n3;
+	n3 = (i__2 = list[lp], abs(i__2));
+	if (n2 <= n1 || n3 <= n1) {
+	    goto L11;
+	}
+	++kt;
+
+/*   Compute the circumcenter C of triangle KT = (N1,N2,N3). */
+
+	v1[0] = x[n1];
+	v1[1] = y[n1];
+	v1[2] = z__[n1];
+	v2[0] = x[n2];
+	v2[1] = y[n2];
+	v2[2] = z__[n2];
+	v3[0] = x[n3];
+	v3[1] = y[n3];
+	v3[2] = z__[n3];
+	circum_(v1, v2, v3, c__, &ierr);
+	if (ierr != 0) {
+	    goto L23;
+	}
+
+/*   Store the circumcenter, radius and triangle index. */
+
+	xc[kt] = c__[0];
+	yc[kt] = c__[1];
+	zc[kt] = c__[2];
+	t = v1[0] * c__[0] + v1[1] * c__[1] + v1[2] * c__[2];
+	if (t < -1.) {
+	    t = -1.;
+	}
+	if (t > 1.) {
+	    t = 1.;
+	}
+	rc[kt] = acos(t);
+
+/*   Store KT in LISTC(LPN), where Abs(LIST(LPN)) is the */
+/*     index of N2 as a neighbor of N1, N3 as a neighbor */
+/*     of N2, and N1 as a neighbor of N3. */
+
+	lpn = lstptr_(&lpl, &n2, &list[1], &lptr[1]);
+	listc[lpn] = kt;
+	lpn = lstptr_(&lend[n2], &n3, &list[1], &lptr[1]);
+	listc[lpn] = kt;
+	lpn = lstptr_(&lend[n3], &n1, &list[1], &lptr[1]);
+	listc[lpn] = kt;
+L11:
+	if (lp != lpl) {
+	    goto L10;
+	}
+/* L12: */
+    }
+    if (nt == 0) {
+	goto L20;
+    }
+
+/* Store the first NT triangle indexes in LISTC. */
+
+/*   Find a boundary triangle KT1 = (N1,N2,N3) with a */
+/*     boundary arc opposite N3. */
+
+    kt1 = 0;
+L13:
+    ++kt1;
+    if (ltri[kt1 * 6 + 4] == 0) {
+	i1 = 2;
+	i2 = 3;
+	i3 = 1;
+	goto L14;
+    } else if (ltri[kt1 * 6 + 5] == 0) {
+	i1 = 3;
+	i2 = 1;
+	i3 = 2;
+	goto L14;
+    } else if (ltri[kt1 * 6 + 6] == 0) {
+	i1 = 1;
+	i2 = 2;
+	i3 = 3;
+	goto L14;
+    }
+    goto L13;
+L14:
+    n1 = ltri[i1 + kt1 * 6];
+    n0 = n1;
+
+/*   Loop on boundary nodes N1 in CCW order, storing the */
+/*     indexes of the clockwise-ordered sequence of triangles */
+/*     that contain N1.  The first triangle overwrites the */
+/*     last neighbor position, and the remaining triangles, */
+/*     if any, are appended to N1's adjacency list. */
+
+/*   A pointer to the first neighbor of N1 is saved in LPN. */
+
+L15:
+    lp = lend[n1];
+    lpn = lptr[lp];
+    listc[lp] = kt1;
+
+/*   Loop on triangles KT2 containing N1. */
+
+L16:
+    kt2 = ltri[i2 + 3 + kt1 * 6];
+    if (kt2 != 0) {
+
+/*   Append KT2 to N1's triangle list. */
+
+	lptr[lp] = *lnew;
+	lp = *lnew;
+	listc[lp] = kt2;
+	++(*lnew);
+
+/*   Set KT1 to KT2 and update (I1,I2,I3) such that */
+/*     LTRI(I1,KT1) = N1. */
+
+	kt1 = kt2;
+	if (ltri[kt1 * 6 + 1] == n1) {
+	    i1 = 1;
+	    i2 = 2;
+	    i3 = 3;
+	} else if (ltri[kt1 * 6 + 2] == n1) {
+	    i1 = 2;
+	    i2 = 3;
+	    i3 = 1;
+	} else {
+	    i1 = 3;
+	    i2 = 1;
+	    i3 = 2;
+	}
+	goto L16;
+    }
+
+/*   Store the saved first-triangle pointer in LPTR(LP), set */
+/*     N1 to the next boundary node, test for termination, */
+/*     and permute the indexes:  the last triangle containing */
+/*     a boundary node is the first triangle containing the */
+/*     next boundary node. */
+
+    lptr[lp] = lpn;
+    n1 = ltri[i3 + kt1 * 6];
+    if (n1 != n0) {
+	i4 = i3;
+	i3 = i2;
+	i2 = i1;
+	i1 = i4;
+	goto L15;
+    }
+
+/* No errors encountered. */
+
+L20:
+    *ier = 0;
+    return 0;
+
+/* N < 3. */
+
+L21:
+    *ier = 1;
+    return 0;
+
+/* Insufficient space reserved for LTRI. */
+
+L22:
+    *ier = 2;
+    return 0;
+
+/* Error flag returned by CIRCUM: KT indexes a null triangle. */
+
+L23:
+    *ier = 3;
+    return 0;
+} /* crlist_ */
+
+/* Subroutine */ int delarc_(int *n, int *io1, int *io2, int *
+	list, int *lptr, int *lend, int *lnew, int *ier)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int n1, n2, n3, lp, lph, lpl;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/17/96 */
+
+/*   This subroutine deletes a boundary arc from a triangula- */
+/* tion.  It may be used to remove a null triangle from the */
+/* convex hull boundary.  Note, however, that if the union of */
+/* triangles is rendered nonconvex, Subroutines DELNOD, EDGE, */
+/* and TRFIND (and hence ADDNOD) may fail.  Also, Function */
+/* NEARND should not be called following an arc deletion. */
+
+/*   This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 4. */
+
+/*       IO1,IO2 = Indexes (in the range 1 to N) of a pair of */
+/*                 adjacent boundary nodes defining the arc */
+/*                 to be removed. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND,LNEW = Triangulation data structure */
+/*                             created by Subroutine TRMESH. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure updated with */
+/*                             the removal of arc IO1-IO2 */
+/*                             unless IER > 0. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if N, IO1, or IO2 is outside its valid */
+/*                     range, or IO1 = IO2. */
+/*             IER = 2 if IO1-IO2 is not a boundary arc. */
+/*             IER = 3 if the node opposite IO1-IO2 is al- */
+/*                     ready a boundary node, and thus IO1 */
+/*                     or IO2 has only two neighbors or a */
+/*                     deletion would result in two triangu- */
+/*                     lations sharing a single node. */
+/*             IER = 4 if one of the nodes is a neighbor of */
+/*                     the other, but not vice versa, imply- */
+/*                     ing an invalid triangulation data */
+/*                     structure. */
+
+/* Module required by DELARC:  DELNB, LSTPTR */
+
+/* Intrinsic function called by DELARC:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* LP =       LIST pointer */
+/* LPH =      LIST pointer or flag returned by DELNB */
+/* LPL =      Pointer to the last neighbor of N1, N2, or N3 */
+/* N1,N2,N3 = Nodal indexes of a triangle such that N1->N2 */
+/*              is the directed boundary edge associated */
+/*              with IO1-IO2 */
+
+    /* Parameter adjustments */
+    --lend;
+    --list;
+    --lptr;
+
+    /* Function Body */
+    n1 = *io1;
+    n2 = *io2;
+
+/* Test for errors, and set N1->N2 to the directed boundary */
+/*   edge associated with IO1-IO2:  (N1,N2,N3) is a triangle */
+/*   for some N3. */
+
+    if (*n < 4 || n1 < 1 || n1 > *n || n2 < 1 || n2 > *n || n1 == n2) {
+	*ier = 1;
+	return 0;
+    }
+
+    lpl = lend[n2];
+    if (-list[lpl] != n1) {
+	n1 = n2;
+	n2 = *io1;
+	lpl = lend[n2];
+	if (-list[lpl] != n1) {
+	    *ier = 2;
+	    return 0;
+	}
+    }
+
+/* Set N3 to the node opposite N1->N2 (the second neighbor */
+/*   of N1), and test for error 3 (N3 already a boundary */
+/*   node). */
+
+    lpl = lend[n1];
+    lp = lptr[lpl];
+    lp = lptr[lp];
+    n3 = (i__1 = list[lp], abs(i__1));
+    lpl = lend[n3];
+    if (list[lpl] <= 0) {
+	*ier = 3;
+	return 0;
+    }
+
+/* Delete N2 as a neighbor of N1, making N3 the first */
+/*   neighbor, and test for error 4 (N2 not a neighbor */
+/*   of N1).  Note that previously computed pointers may */
+/*   no longer be valid following the call to DELNB. */
+
+    delnb_(&n1, &n2, n, &list[1], &lptr[1], &lend[1], lnew, &lph);
+    if (lph < 0) {
+	*ier = 4;
+	return 0;
+    }
+
+/* Delete N1 as a neighbor of N2, making N3 the new last */
+/*   neighbor. */
+
+    delnb_(&n2, &n1, n, &list[1], &lptr[1], &lend[1], lnew, &lph);
+
+/* Make N3 a boundary node with first neighbor N2 and last */
+/*   neighbor N1. */
+
+    lp = lstptr_(&lend[n3], &n1, &list[1], &lptr[1]);
+    lend[n3] = lp;
+    list[lp] = -n1;
+
+/* No errors encountered. */
+
+    *ier = 0;
+    return 0;
+} /* delarc_ */
+
+/* Subroutine */ int delnb_(int *n0, int *nb, int *n, int *
+	list, int *lptr, int *lend, int *lnew, int *lph)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int i__, lp, nn, lpb, lpl, lpp, lnw;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/29/98 */
+
+/*   This subroutine deletes a neighbor NB from the adjacency */
+/* list of node N0 (but N0 is not deleted from the adjacency */
+/* list of NB) and, if NB is a boundary node, makes N0 a */
+/* boundary node.  For pointer (LIST index) LPH to NB as a */
+/* neighbor of N0, the empty LIST,LPTR location LPH is filled */
+/* in with the values at LNEW-1, pointer LNEW-1 (in LPTR and */
+/* possibly in LEND) is changed to LPH, and LNEW is decremen- */
+/* ted.  This requires a search of LEND and LPTR entailing an */
+/* expected operation count of O(N). */
+
+/*   This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/*       N0,NB = Indexes, in the range 1 to N, of a pair of */
+/*               nodes such that NB is a neighbor of N0. */
+/*               (N0 need not be a neighbor of NB.) */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure defining the */
+/*                             triangulation. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure updated with */
+/*                             the removal of NB from the ad- */
+/*                             jacency list of N0 unless */
+/*                             LPH < 0. */
+
+/*       LPH = List pointer to the hole (NB as a neighbor of */
+/*             N0) filled in by the values at LNEW-1 or error */
+/*             indicator: */
+/*             LPH > 0 if no errors were encountered. */
+/*             LPH = -1 if N0, NB, or N is outside its valid */
+/*                      range. */
+/*             LPH = -2 if NB is not a neighbor of N0. */
+
+/* Modules required by DELNB:  None */
+
+/* Intrinsic function called by DELNB:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* I =   DO-loop index */
+/* LNW = LNEW-1 (output value of LNEW) */
+/* LP =  LIST pointer of the last neighbor of NB */
+/* LPB = Pointer to NB as a neighbor of N0 */
+/* LPL = Pointer to the last neighbor of N0 */
+/* LPP = Pointer to the neighbor of N0 that precedes NB */
+/* NN =  Local copy of N */
+
+    /* Parameter adjustments */
+    --lend;
+    --list;
+    --lptr;
+
+    /* Function Body */
+    nn = *n;
+
+/* Test for error 1. */
+
+    if (*n0 < 1 || *n0 > nn || *nb < 1 || *nb > nn || nn < 3) {
+	*lph = -1;
+	return 0;
+    }
+
+/*   Find pointers to neighbors of N0: */
+
+/*     LPL points to the last neighbor, */
+/*     LPP points to the neighbor NP preceding NB, and */
+/*     LPB points to NB. */
+
+    lpl = lend[*n0];
+    lpp = lpl;
+    lpb = lptr[lpp];
+L1:
+    if (list[lpb] == *nb) {
+	goto L2;
+    }
+    lpp = lpb;
+    lpb = lptr[lpp];
+    if (lpb != lpl) {
+	goto L1;
+    }
+
+/*   Test for error 2 (NB not found). */
+
+    if ((i__1 = list[lpb], abs(i__1)) != *nb) {
+	*lph = -2;
+	return 0;
+    }
+
+/*   NB is the last neighbor of N0.  Make NP the new last */
+/*     neighbor and, if NB is a boundary node, then make N0 */
+/*     a boundary node. */
+
+    lend[*n0] = lpp;
+    lp = lend[*nb];
+    if (list[lp] < 0) {
+	list[lpp] = -list[lpp];
+    }
+    goto L3;
+
+/*   NB is not the last neighbor of N0.  If NB is a boundary */
+/*     node and N0 is not, then make N0 a boundary node with */
+/*     last neighbor NP. */
+
+L2:
+    lp = lend[*nb];
+    if (list[lp] < 0 && list[lpl] > 0) {
+	lend[*n0] = lpp;
+	list[lpp] = -list[lpp];
+    }
+
+/*   Update LPTR so that the neighbor following NB now fol- */
+/*     lows NP, and fill in the hole at location LPB. */
+
+L3:
+    lptr[lpp] = lptr[lpb];
+    lnw = *lnew - 1;
+    list[lpb] = list[lnw];
+    lptr[lpb] = lptr[lnw];
+    for (i__ = nn; i__ >= 1; --i__) {
+	if (lend[i__] == lnw) {
+	    lend[i__] = lpb;
+	    goto L5;
+	}
+/* L4: */
+    }
+
+L5:
+    i__1 = lnw - 1;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	if (lptr[i__] == lnw) {
+	    lptr[i__] = lpb;
+	}
+/* L6: */
+    }
+
+/* No errors encountered. */
+
+    *lnew = lnw;
+    *lph = lpb;
+    return 0;
+} /* delnb_ */
+
+/* Subroutine */ int delnod_(int *k, int *n, double *x,
+	double *y, double *z__, int *list, int *lptr, int
+	*lend, int *lnew, int *lwk, int *iwk, int *ier)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int i__, j, n1, n2;
+    static double x1, x2, y11, y2, z1, z2;
+    static int nl, lp, nn, nr;
+    static double xl, yl, zl, xr, yr, zr;
+    static int nnb, lp21, lpf, lph, lpl, lpn, iwl, nit, lnw, lpl2;
+    static int bdry;
+    static int ierr, lwkl;
+    static int nfrst;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   11/30/99 */
+
+/*   This subroutine deletes node K (along with all arcs */
+/* incident on node K) from a triangulation of N nodes on the */
+/* unit sphere, and inserts arcs as necessary to produce a */
+/* triangulation of the remaining N-1 nodes.  If a Delaunay */
+/* triangulation is input, a Delaunay triangulation will */
+/* result, and thus, DELNOD reverses the effect of a call to */
+/* Subroutine ADDNOD. */
+
+
+/* On input: */
+
+/*       K = Index (for X, Y, and Z) of the node to be */
+/*           deleted.  1 .LE. K .LE. N. */
+
+/* K is not altered by this routine. */
+
+/*       N = Number of nodes in the triangulation on input. */
+/*           N .GE. 4.  Note that N will be decremented */
+/*           following the deletion. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the nodes in the triangula- */
+/*               tion. */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure defining the */
+/*                             triangulation.  Refer to Sub- */
+/*                             routine TRMESH. */
+
+/*       LWK = Number of columns reserved for IWK.  LWK must */
+/*             be at least NNB-3, where NNB is the number of */
+/*             neighbors of node K, including an extra */
+/*             pseudo-node if K is a boundary node. */
+
+/*       IWK = int work array dimensioned 2 by LWK (or */
+/*             array of length .GE. 2*LWK). */
+
+/* On output: */
+
+/*       N = Number of nodes in the triangulation on output. */
+/*           The input value is decremented unless 1 .LE. IER */
+/*           .LE. 4. */
+
+/*       X,Y,Z = Updated arrays containing nodal coordinates */
+/*               (with elements K+1,...,N+1 shifted up one */
+/*               position, thus overwriting element K) unless */
+/*               1 .LE. IER .LE. 4. */
+
+/*       LIST,LPTR,LEND,LNEW = Updated triangulation data */
+/*                             structure reflecting the dele- */
+/*                             tion unless 1 .LE. IER .LE. 4. */
+/*                             Note that the data structure */
+/*                             may have been altered if IER > */
+/*                             3. */
+
+/*       LWK = Number of IWK columns required unless IER = 1 */
+/*             or IER = 3. */
+
+/*       IWK = Indexes of the endpoints of the new arcs added */
+/*             unless LWK = 0 or 1 .LE. IER .LE. 4.  (Arcs */
+/*             are associated with columns, or pairs of */
+/*             adjacent elements if IWK is declared as a */
+/*             singly-subscripted array.) */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if K or N is outside its valid range */
+/*                     or LWK < 0 on input. */
+/*             IER = 2 if more space is required in IWK. */
+/*                     Refer to LWK. */
+/*             IER = 3 if the triangulation data structure is */
+/*                     invalid on input. */
+/*             IER = 4 if K indexes an interior node with */
+/*                     four or more neighbors, none of which */
+/*                     can be swapped out due to collineari- */
+/*                     ty, and K cannot therefore be deleted. */
+/*             IER = 5 if an error flag (other than IER = 1) */
+/*                     was returned by OPTIM.  An error */
+/*                     message is written to the standard */
+/*                     output unit in this case. */
+/*             IER = 6 if error flag 1 was returned by OPTIM. */
+/*                     This is not necessarily an error, but */
+/*                     the arcs may not be optimal. */
+
+/*   Note that the deletion may result in all remaining nodes */
+/* being collinear.  This situation is not flagged. */
+
+/* Modules required by DELNOD:  DELNB, LEFT, LSTPTR, NBCNT, */
+/*                                OPTIM, SWAP, SWPTST */
+
+/* Intrinsic function called by DELNOD:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* BDRY =    Logical variable with value TRUE iff N1 is a */
+/*             boundary node */
+/* I,J =     DO-loop indexes */
+/* IERR =    Error flag returned by OPTIM */
+/* IWL =     Number of IWK columns containing arcs */
+/* LNW =     Local copy of LNEW */
+/* LP =      LIST pointer */
+/* LP21 =    LIST pointer returned by SWAP */
+/* LPF,LPL = Pointers to the first and last neighbors of N1 */
+/* LPH =     Pointer (or flag) returned by DELNB */
+/* LPL2 =    Pointer to the last neighbor of N2 */
+/* LPN =     Pointer to a neighbor of N1 */
+/* LWKL =    Input value of LWK */
+/* N1 =      Local copy of K */
+/* N2 =      Neighbor of N1 */
+/* NFRST =   First neighbor of N1:  LIST(LPF) */
+/* NIT =     Number of iterations in OPTIM */
+/* NR,NL =   Neighbors of N1 preceding (to the right of) and */
+/*             following (to the left of) N2, respectively */
+/* NN =      Number of nodes in the triangulation */
+/* NNB =     Number of neighbors of N1 (including a pseudo- */
+/*             node representing the boundary if N1 is a */
+/*             boundary node) */
+/* X1,Y1,Z1 = Coordinates of N1 */
+/* X2,Y2,Z2 = Coordinates of N2 */
+/* XL,YL,ZL = Coordinates of NL */
+/* XR,YR,ZR = Coordinates of NR */
+
+
+/* Set N1 to K and NNB to the number of neighbors of N1 (plus */
+/*   one if N1 is a boundary node), and test for errors.  LPF */
+/*   and LPL are LIST indexes of the first and last neighbors */
+/*   of N1, IWL is the number of IWK columns containing arcs, */
+/*   and BDRY is TRUE iff N1 is a boundary node. */
+
+    /* Parameter adjustments */
+    iwk -= 3;
+    --lend;
+    --lptr;
+    --list;
+    --z__;
+    --y;
+    --x;
+
+    /* Function Body */
+    n1 = *k;
+    nn = *n;
+    if (n1 < 1 || n1 > nn || nn < 4 || *lwk < 0) {
+	goto L21;
+    }
+    lpl = lend[n1];
+    lpf = lptr[lpl];
+    nnb = nbcnt_(&lpl, &lptr[1]);
+    bdry = list[lpl] < 0;
+    if (bdry) {
+	++nnb;
+    }
+    if (nnb < 3) {
+	goto L23;
+    }
+    lwkl = *lwk;
+    *lwk = nnb - 3;
+    if (lwkl < *lwk) {
+	goto L22;
+    }
+    iwl = 0;
+    if (nnb == 3) {
+	goto L3;
+    }
+
+/* Initialize for loop on arcs N1-N2 for neighbors N2 of N1, */
+/*   beginning with the second neighbor.  NR and NL are the */
+/*   neighbors preceding and following N2, respectively, and */
+/*   LP indexes NL.  The loop is exited when all possible */
+/*   swaps have been applied to arcs incident on N1. */
+
+    x1 = x[n1];
+    y11 = y[n1];
+    z1 = z__[n1];
+    nfrst = list[lpf];
+    nr = nfrst;
+    xr = x[nr];
+    yr = y[nr];
+    zr = z__[nr];
+    lp = lptr[lpf];
+    n2 = list[lp];
+    x2 = x[n2];
+    y2 = y[n2];
+    z2 = z__[n2];
+    lp = lptr[lp];
+
+/* Top of loop:  set NL to the neighbor following N2. */
+
+L1:
+    nl = (i__1 = list[lp], abs(i__1));
+    if (nl == nfrst && bdry) {
+	goto L3;
+    }
+    xl = x[nl];
+    yl = y[nl];
+    zl = z__[nl];
+
+/*   Test for a convex quadrilateral.  To avoid an incorrect */
+/*     test caused by collinearity, use the fact that if N1 */
+/*     is a boundary node, then N1 LEFT NR->NL and if N2 is */
+/*     a boundary node, then N2 LEFT NL->NR. */
+
+    lpl2 = lend[n2];
+    if (! ((bdry || left_(&xr, &yr, &zr, &xl, &yl, &zl, &x1, &y11, &z1)) && (
+	    list[lpl2] < 0 || left_(&xl, &yl, &zl, &xr, &yr, &zr, &x2, &y2, &
+	    z2)))) {
+
+/*   Nonconvex quadrilateral -- no swap is possible. */
+
+	nr = n2;
+	xr = x2;
+	yr = y2;
+	zr = z2;
+	goto L2;
+    }
+
+/*   The quadrilateral defined by adjacent triangles */
+/*     (N1,N2,NL) and (N2,N1,NR) is convex.  Swap in */
+/*     NL-NR and store it in IWK unless NL and NR are */
+/*     already adjacent, in which case the swap is not */
+/*     possible.  Indexes larger than N1 must be decremented */
+/*     since N1 will be deleted from X, Y, and Z. */
+
+    swap_(&nl, &nr, &n1, &n2, &list[1], &lptr[1], &lend[1], &lp21);
+    if (lp21 == 0) {
+	nr = n2;
+	xr = x2;
+	yr = y2;
+	zr = z2;
+	goto L2;
+    }
+    ++iwl;
+    if (nl <= n1) {
+	iwk[(iwl << 1) + 1] = nl;
+    } else {
+	iwk[(iwl << 1) + 1] = nl - 1;
+    }
+    if (nr <= n1) {
+	iwk[(iwl << 1) + 2] = nr;
+    } else {
+	iwk[(iwl << 1) + 2] = nr - 1;
+    }
+
+/*   Recompute the LIST indexes and NFRST, and decrement NNB. */
+
+    lpl = lend[n1];
+    --nnb;
+    if (nnb == 3) {
+	goto L3;
+    }
+    lpf = lptr[lpl];
+    nfrst = list[lpf];
+    lp = lstptr_(&lpl, &nl, &list[1], &lptr[1]);
+    if (nr == nfrst) {
+	goto L2;
+    }
+
+/*   NR is not the first neighbor of N1. */
+/*     Back up and test N1-NR for a swap again:  Set N2 to */
+/*     NR and NR to the previous neighbor of N1 -- the */
+/*     neighbor of NR which follows N1.  LP21 points to NL */
+/*     as a neighbor of NR. */
+
+    n2 = nr;
+    x2 = xr;
+    y2 = yr;
+    z2 = zr;
+    lp21 = lptr[lp21];
+    lp21 = lptr[lp21];
+    nr = (i__1 = list[lp21], abs(i__1));
+    xr = x[nr];
+    yr = y[nr];
+    zr = z__[nr];
+    goto L1;
+
+/*   Bottom of loop -- test for termination of loop. */
+
+L2:
+    if (n2 == nfrst) {
+	goto L3;
+    }
+    n2 = nl;
+    x2 = xl;
+    y2 = yl;
+    z2 = zl;
+    lp = lptr[lp];
+    goto L1;
+
+/* Delete N1 and all its incident arcs.  If N1 is an interior */
+/*   node and either NNB > 3 or NNB = 3 and N2 LEFT NR->NL, */
+/*   then N1 must be separated from its neighbors by a plane */
+/*   containing the origin -- its removal reverses the effect */
+/*   of a call to COVSPH, and all its neighbors become */
+/*   boundary nodes.  This is achieved by treating it as if */
+/*   it were a boundary node (setting BDRY to TRUE, changing */
+/*   a sign in LIST, and incrementing NNB). */
+
+L3:
+    if (! bdry) {
+	if (nnb > 3) {
+	    bdry = TRUE_;
+	} else {
+	    lpf = lptr[lpl];
+	    nr = list[lpf];
+	    lp = lptr[lpf];
+	    n2 = list[lp];
+	    nl = list[lpl];
+	    bdry = left_(&x[nr], &y[nr], &z__[nr], &x[nl], &y[nl], &z__[nl], &
+		    x[n2], &y[n2], &z__[n2]);
+	}
+	if (bdry) {
+
+/*   IF a boundary node already exists, then N1 and its */
+/*     neighbors cannot be converted to boundary nodes. */
+/*     (They must be collinear.)  This is a problem if */
+/*     NNB > 3. */
+
+	    i__1 = nn;
+	    for (i__ = 1; i__ <= i__1; ++i__) {
+		if (list[lend[i__]] < 0) {
+		    bdry = FALSE_;
+		    goto L5;
+		}
+/* L4: */
+	    }
+	    list[lpl] = -list[lpl];
+	    ++nnb;
+	}
+    }
+L5:
+    if (! bdry && nnb > 3) {
+	goto L24;
+    }
+
+/* Initialize for loop on neighbors.  LPL points to the last */
+/*   neighbor of N1.  LNEW is stored in local variable LNW. */
+
+    lp = lpl;
+    lnw = *lnew;
+
+/* Loop on neighbors N2 of N1, beginning with the first. */
+
+L6:
+    lp = lptr[lp];
+    n2 = (i__1 = list[lp], abs(i__1));
+    delnb_(&n2, &n1, n, &list[1], &lptr[1], &lend[1], &lnw, &lph);
+    if (lph < 0) {
+	goto L23;
+    }
+
+/*   LP and LPL may require alteration. */
+
+    if (lpl == lnw) {
+	lpl = lph;
+    }
+    if (lp == lnw) {
+	lp = lph;
+    }
+    if (lp != lpl) {
+	goto L6;
+    }
+
+/* Delete N1 from X, Y, Z, and LEND, and remove its adjacency */
+/*   list from LIST and LPTR.  LIST entries (nodal indexes) */
+/*   which are larger than N1 must be decremented. */
+
+    --nn;
+    if (n1 > nn) {
+	goto L9;
+    }
+    i__1 = nn;
+    for (i__ = n1; i__ <= i__1; ++i__) {
+	x[i__] = x[i__ + 1];
+	y[i__] = y[i__ + 1];
+	z__[i__] = z__[i__ + 1];
+	lend[i__] = lend[i__ + 1];
+/* L7: */
+    }
+
+    i__1 = lnw - 1;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	if (list[i__] > n1) {
+	    --list[i__];
+	}
+	if (list[i__] < -n1) {
+	    ++list[i__];
+	}
+/* L8: */
+    }
+
+/*   For LPN = first to last neighbors of N1, delete the */
+/*     preceding neighbor (indexed by LP). */
+
+/*   Each empty LIST,LPTR location LP is filled in with the */
+/*     values at LNW-1, and LNW is decremented.  All pointers */
+/*     (including those in LPTR and LEND) with value LNW-1 */
+/*     must be changed to LP. */
+
+/*  LPL points to the last neighbor of N1. */
+
+L9:
+    if (bdry) {
+	--nnb;
+    }
+    lpn = lpl;
+    i__1 = nnb;
+    for (j = 1; j <= i__1; ++j) {
+	--lnw;
+	lp = lpn;
+	lpn = lptr[lp];
+	list[lp] = list[lnw];
+	lptr[lp] = lptr[lnw];
+	if (lptr[lpn] == lnw) {
+	    lptr[lpn] = lp;
+	}
+	if (lpn == lnw) {
+	    lpn = lp;
+	}
+	for (i__ = nn; i__ >= 1; --i__) {
+	    if (lend[i__] == lnw) {
+		lend[i__] = lp;
+		goto L11;
+	    }
+/* L10: */
+	}
+
+L11:
+	for (i__ = lnw - 1; i__ >= 1; --i__) {
+	    if (lptr[i__] == lnw) {
+		lptr[i__] = lp;
+	    }
+/* L12: */
+	}
+/* L13: */
+    }
+
+/* Update N and LNEW, and optimize the patch of triangles */
+/*   containing K (on input) by applying swaps to the arcs */
+/*   in IWK. */
+
+    *n = nn;
+    *lnew = lnw;
+    if (iwl > 0) {
+	nit = iwl << 2;
+	optim_(&x[1], &y[1], &z__[1], &iwl, &list[1], &lptr[1], &lend[1], &
+		nit, &iwk[3], &ierr);
+	if (ierr != 0 && ierr != 1) {
+	    goto L25;
+	}
+	if (ierr == 1) {
+	    goto L26;
+	}
+    }
+
+/* Successful termination. */
+
+    *ier = 0;
+    return 0;
+
+/* Invalid input parameter. */
+
+L21:
+    *ier = 1;
+    return 0;
+
+/* Insufficient space reserved for IWK. */
+
+L22:
+    *ier = 2;
+    return 0;
+
+/* Invalid triangulation data structure.  NNB < 3 on input or */
+/*   N2 is a neighbor of N1 but N1 is not a neighbor of N2. */
+
+L23:
+    *ier = 3;
+    return 0;
+
+/* N1 is interior but NNB could not be reduced to 3. */
+
+L24:
+    *ier = 4;
+    return 0;
+
+/* Error flag (other than 1) returned by OPTIM. */
+
+L25:
+    *ier = 5;
+    return 0;
+
+/* Error flag 1 returned by OPTIM. */
+
+L26:
+    *ier = 6;
+    return 0;
+} /* delnod_ */
+
+/* Subroutine */ int edge_(int *in1, int *in2, double *x,
+	double *y, double *z__, int *lwk, int *iwk, int *
+	list, int *lptr, int *lend, int *ier)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int i__, n0, n1, n2;
+    static double x0, x1, x2, y00, y11, y2, z0, z1, z2;
+    static int nl, lp, nr;
+    static double dp12;
+    static int lp21, iwc, iwf, lft, lpl, iwl, nit;
+    static double dp1l, dp2l, dp1r, dp2r;
+    static int ierr;
+    static int next, iwcp1, n1lst, iwend;
+    static int n1frst;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/30/98 */
+
+/*   Given a triangulation of N nodes and a pair of nodal */
+/* indexes IN1 and IN2, this routine swaps arcs as necessary */
+/* to force IN1 and IN2 to be adjacent.  Only arcs which */
+/* intersect IN1-IN2 are swapped out.  If a Delaunay triangu- */
+/* lation is input, the resulting triangulation is as close */
+/* as possible to a Delaunay triangulation in the sense that */
+/* all arcs other than IN1-IN2 are locally optimal. */
+
+/*   A sequence of calls to EDGE may be used to force the */
+/* presence of a set of edges defining the boundary of a non- */
+/* convex and/or multiply connected region, or to introduce */
+/* barriers into the triangulation.  Note that Subroutine */
+/* GETNP will not necessarily return closest nodes if the */
+/* triangulation has been constrained by a call to EDGE. */
+/* However, this is appropriate in some applications, such */
+/* as triangle-based interpolation on a nonconvex domain. */
+
+
+/* On input: */
+
+/*       IN1,IN2 = Indexes (of X, Y, and Z) in the range 1 to */
+/*                 N defining a pair of nodes to be connected */
+/*                 by an arc. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the nodes. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LWK = Number of columns reserved for IWK.  This must */
+/*             be at least NI -- the number of arcs that */
+/*             intersect IN1-IN2.  (NI is bounded by N-3.) */
+
+/*       IWK = int work array of length at least 2*LWK. */
+
+/*       LIST,LPTR,LEND = Data structure defining the trian- */
+/*                        gulation.  Refer to Subroutine */
+/*                        TRMESH. */
+
+/* On output: */
+
+/*       LWK = Number of arcs which intersect IN1-IN2 (but */
+/*             not more than the input value of LWK) unless */
+/*             IER = 1 or IER = 3.  LWK = 0 if and only if */
+/*             IN1 and IN2 were adjacent (or LWK=0) on input. */
+
+/*       IWK = Array containing the indexes of the endpoints */
+/*             of the new arcs other than IN1-IN2 unless */
+/*             IER > 0 or LWK = 0.  New arcs to the left of */
+/*             IN1->IN2 are stored in the first K-1 columns */
+/*             (left portion of IWK), column K contains */
+/*             zeros, and new arcs to the right of IN1->IN2 */
+/*             occupy columns K+1,...,LWK.  (K can be deter- */
+/*             mined by searching IWK for the zeros.) */
+
+/*       LIST,LPTR,LEND = Data structure updated if necessary */
+/*                        to reflect the presence of an arc */
+/*                        connecting IN1 and IN2 unless IER > */
+/*                        0.  The data structure has been */
+/*                        altered if IER >= 4. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if IN1 < 1, IN2 < 1, IN1 = IN2, */
+/*                     or LWK < 0 on input. */
+/*             IER = 2 if more space is required in IWK. */
+/*                     Refer to LWK. */
+/*             IER = 3 if IN1 and IN2 could not be connected */
+/*                     due to either an invalid data struc- */
+/*                     ture or collinear nodes (and floating */
+/*                     point error). */
+/*             IER = 4 if an error flag other than IER = 1 */
+/*                     was returned by OPTIM. */
+/*             IER = 5 if error flag 1 was returned by OPTIM. */
+/*                     This is not necessarily an error, but */
+/*                     the arcs other than IN1-IN2 may not */
+/*                     be optimal. */
+
+/*   An error message is written to the standard output unit */
+/* in the case of IER = 3 or IER = 4. */
+
+/* Modules required by EDGE:  LEFT, LSTPTR, OPTIM, SWAP, */
+/*                              SWPTST */
+
+/* Intrinsic function called by EDGE:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* DPij =     Dot product <Ni,Nj> */
+/* I =        DO-loop index and column index for IWK */
+/* IERR =     Error flag returned by Subroutine OPTIM */
+/* IWC =      IWK index between IWF and IWL -- NL->NR is */
+/*              stored in IWK(1,IWC)->IWK(2,IWC) */
+/* IWCP1 =    IWC + 1 */
+/* IWEND =    Input or output value of LWK */
+/* IWF =      IWK (column) index of the first (leftmost) arc */
+/*              which intersects IN1->IN2 */
+/* IWL =      IWK (column) index of the last (rightmost) are */
+/*              which intersects IN1->IN2 */
+/* LFT =      Flag used to determine if a swap results in the */
+/*              new arc intersecting IN1-IN2 -- LFT = 0 iff */
+/*              N0 = IN1, LFT = -1 implies N0 LEFT IN1->IN2, */
+/*              and LFT = 1 implies N0 LEFT IN2->IN1 */
+/* LP =       List pointer (index for LIST and LPTR) */
+/* LP21 =     Unused parameter returned by SWAP */
+/* LPL =      Pointer to the last neighbor of IN1 or NL */
+/* N0 =       Neighbor of N1 or node opposite NR->NL */
+/* N1,N2 =    Local copies of IN1 and IN2 */
+/* N1FRST =   First neighbor of IN1 */
+/* N1LST =    (Signed) last neighbor of IN1 */
+/* NEXT =     Node opposite NL->NR */
+/* NIT =      Flag or number of iterations employed by OPTIM */
+/* NL,NR =    Endpoints of an arc which intersects IN1-IN2 */
+/*              with NL LEFT IN1->IN2 */
+/* X0,Y0,Z0 = Coordinates of N0 */
+/* X1,Y1,Z1 = Coordinates of IN1 */
+/* X2,Y2,Z2 = Coordinates of IN2 */
+
+
+/* Store IN1, IN2, and LWK in local variables and test for */
+/*   errors. */
+
+    /* Parameter adjustments */
+    --lend;
+    --lptr;
+    --list;
+    iwk -= 3;
+    --z__;
+    --y;
+    --x;
+
+    /* Function Body */
+    n1 = *in1;
+    n2 = *in2;
+    iwend = *lwk;
+    if (n1 < 1 || n2 < 1 || n1 == n2 || iwend < 0) {
+	goto L31;
+    }
+
+/* Test for N2 as a neighbor of N1.  LPL points to the last */
+/*   neighbor of N1. */
+
+    lpl = lend[n1];
+    n0 = (i__1 = list[lpl], abs(i__1));
+    lp = lpl;
+L1:
+    if (n0 == n2) {
+	goto L30;
+    }
+    lp = lptr[lp];
+    n0 = list[lp];
+    if (lp != lpl) {
+	goto L1;
+    }
+
+/* Initialize parameters. */
+
+    iwl = 0;
+    nit = 0;
+
+/* Store the coordinates of N1 and N2. */
+
+L2:
+    x1 = x[n1];
+    y11 = y[n1];
+    z1 = z__[n1];
+    x2 = x[n2];
+    y2 = y[n2];
+    z2 = z__[n2];
+
+/* Set NR and NL to adjacent neighbors of N1 such that */
+/*   NR LEFT N2->N1 and NL LEFT N1->N2, */
+/*   (NR Forward N1->N2 or NL Forward N1->N2), and */
+/*   (NR Forward N2->N1 or NL Forward N2->N1). */
+
+/*   Initialization:  Set N1FRST and N1LST to the first and */
+/*     (signed) last neighbors of N1, respectively, and */
+/*     initialize NL to N1FRST. */
+
+    lpl = lend[n1];
+    n1lst = list[lpl];
+    lp = lptr[lpl];
+    n1frst = list[lp];
+    nl = n1frst;
+    if (n1lst < 0) {
+	goto L4;
+    }
+
+/*   N1 is an interior node.  Set NL to the first candidate */
+/*     for NR (NL LEFT N2->N1). */
+
+L3:
+    if (left_(&x2, &y2, &z2, &x1, &y11, &z1, &x[nl], &y[nl], &z__[nl])) {
+	goto L4;
+    }
+    lp = lptr[lp];
+    nl = list[lp];
+    if (nl != n1frst) {
+	goto L3;
+    }
+
+/*   All neighbors of N1 are strictly left of N1->N2. */
+
+    goto L5;
+
+/*   NL = LIST(LP) LEFT N2->N1.  Set NR to NL and NL to the */
+/*     following neighbor of N1. */
+
+L4:
+    nr = nl;
+    lp = lptr[lp];
+    nl = (i__1 = list[lp], abs(i__1));
+    if (left_(&x1, &y11, &z1, &x2, &y2, &z2, &x[nl], &y[nl], &z__[nl])) {
+
+/*   NL LEFT N1->N2 and NR LEFT N2->N1.  The Forward tests */
+/*     are employed to avoid an error associated with */
+/*     collinear nodes. */
+
+	dp12 = x1 * x2 + y11 * y2 + z1 * z2;
+	dp1l = x1 * x[nl] + y11 * y[nl] + z1 * z__[nl];
+	dp2l = x2 * x[nl] + y2 * y[nl] + z2 * z__[nl];
+	dp1r = x1 * x[nr] + y11 * y[nr] + z1 * z__[nr];
+	dp2r = x2 * x[nr] + y2 * y[nr] + z2 * z__[nr];
+	if ((dp2l - dp12 * dp1l >= 0. || dp2r - dp12 * dp1r >= 0.) && (dp1l -
+		dp12 * dp2l >= 0. || dp1r - dp12 * dp2r >= 0.)) {
+	    goto L6;
+	}
+
+/*   NL-NR does not intersect N1-N2.  However, there is */
+/*     another candidate for the first arc if NL lies on */
+/*     the line N1-N2. */
+
+	if (! left_(&x2, &y2, &z2, &x1, &y11, &z1, &x[nl], &y[nl], &z__[nl])) {
+	    goto L5;
+	}
+    }
+
+/*   Bottom of loop. */
+
+    if (nl != n1frst) {
+	goto L4;
+    }
+
+/* Either the triangulation is invalid or N1-N2 lies on the */
+/*   convex hull boundary and an edge NR->NL (opposite N1 and */
+/*   intersecting N1-N2) was not found due to floating point */
+/*   error.  Try interchanging N1 and N2 -- NIT > 0 iff this */
+/*   has already been done. */
+
+L5:
+    if (nit > 0) {
+	goto L33;
+    }
+    nit = 1;
+    n1 = n2;
+    n2 = *in1;
+    goto L2;
+
+/* Store the ordered sequence of intersecting edges NL->NR in */
+/*   IWK(1,IWL)->IWK(2,IWL). */
+
+L6:
+    ++iwl;
+    if (iwl > iwend) {
+	goto L32;
+    }
+    iwk[(iwl << 1) + 1] = nl;
+    iwk[(iwl << 1) + 2] = nr;
+
+/*   Set NEXT to the neighbor of NL which follows NR. */
+
+    lpl = lend[nl];
+    lp = lptr[lpl];
+
+/*   Find NR as a neighbor of NL.  The search begins with */
+/*     the first neighbor. */
+
+L7:
+    if (list[lp] == nr) {
+	goto L8;
+    }
+    lp = lptr[lp];
+    if (lp != lpl) {
+	goto L7;
+    }
+
+/*   NR must be the last neighbor, and NL->NR cannot be a */
+/*     boundary edge. */
+
+    if (list[lp] != nr) {
+	goto L33;
+    }
+
+/*   Set NEXT to the neighbor following NR, and test for */
+/*     termination of the store loop. */
+
+L8:
+    lp = lptr[lp];
+    next = (i__1 = list[lp], abs(i__1));
+    if (next == n2) {
+	goto L9;
+    }
+
+/*   Set NL or NR to NEXT. */
+
+    if (left_(&x1, &y11, &z1, &x2, &y2, &z2, &x[next], &y[next], &z__[next])) {
+	nl = next;
+    } else {
+	nr = next;
+    }
+    goto L6;
+
+/* IWL is the number of arcs which intersect N1-N2. */
+/*   Store LWK. */
+
+L9:
+    *lwk = iwl;
+    iwend = iwl;
+
+/* Initialize for edge swapping loop -- all possible swaps */
+/*   are applied (even if the new arc again intersects */
+/*   N1-N2), arcs to the left of N1->N2 are stored in the */
+/*   left portion of IWK, and arcs to the right are stored in */
+/*   the right portion.  IWF and IWL index the first and last */
+/*   intersecting arcs. */
+
+    iwf = 1;
+
+/* Top of loop -- set N0 to N1 and NL->NR to the first edge. */
+/*   IWC points to the arc currently being processed.  LFT */
+/*   .LE. 0 iff N0 LEFT N1->N2. */
+
+L10:
+    lft = 0;
+    n0 = n1;
+    x0 = x1;
+    y00 = y11;
+    z0 = z1;
+    nl = iwk[(iwf << 1) + 1];
+    nr = iwk[(iwf << 1) + 2];
+    iwc = iwf;
+
+/*   Set NEXT to the node opposite NL->NR unless IWC is the */
+/*     last arc. */
+
+L11:
+    if (iwc == iwl) {
+	goto L21;
+    }
+    iwcp1 = iwc + 1;
+    next = iwk[(iwcp1 << 1) + 1];
+    if (next != nl) {
+	goto L16;
+    }
+    next = iwk[(iwcp1 << 1) + 2];
+
+/*   NEXT RIGHT N1->N2 and IWC .LT. IWL.  Test for a possible */
+/*     swap. */
+
+    if (! left_(&x0, &y00, &z0, &x[nr], &y[nr], &z__[nr], &x[next], &y[next], &
+	    z__[next])) {
+	goto L14;
+    }
+    if (lft >= 0) {
+	goto L12;
+    }
+    if (! left_(&x[nl], &y[nl], &z__[nl], &x0, &y00, &z0, &x[next], &y[next], &
+	    z__[next])) {
+	goto L14;
+    }
+
+/*   Replace NL->NR with N0->NEXT. */
+
+    swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    iwk[(iwc << 1) + 1] = n0;
+    iwk[(iwc << 1) + 2] = next;
+    goto L15;
+
+/*   Swap NL-NR for N0-NEXT, shift columns IWC+1,...,IWL to */
+/*     the left, and store N0-NEXT in the right portion of */
+/*     IWK. */
+
+L12:
+    swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    i__1 = iwl;
+    for (i__ = iwcp1; i__ <= i__1; ++i__) {
+	iwk[((i__ - 1) << 1) + 1] = iwk[(i__ << 1) + 1];
+	iwk[((i__ - 1) << 1) + 2] = iwk[(i__ << 1) + 2];
+/* L13: */
+    }
+    iwk[(iwl << 1) + 1] = n0;
+    iwk[(iwl << 1) + 2] = next;
+    --iwl;
+    nr = next;
+    goto L11;
+
+/*   A swap is not possible.  Set N0 to NR. */
+
+L14:
+    n0 = nr;
+    x0 = x[n0];
+    y00 = y[n0];
+    z0 = z__[n0];
+    lft = 1;
+
+/*   Advance to the next arc. */
+
+L15:
+    nr = next;
+    ++iwc;
+    goto L11;
+
+/*   NEXT LEFT N1->N2, NEXT .NE. N2, and IWC .LT. IWL. */
+/*     Test for a possible swap. */
+
+L16:
+    if (! left_(&x[nl], &y[nl], &z__[nl], &x0, &y00, &z0, &x[next], &y[next], &
+	    z__[next])) {
+	goto L19;
+    }
+    if (lft <= 0) {
+	goto L17;
+    }
+    if (! left_(&x0, &y00, &z0, &x[nr], &y[nr], &z__[nr], &x[next], &y[next], &
+	    z__[next])) {
+	goto L19;
+    }
+
+/*   Replace NL->NR with NEXT->N0. */
+
+    swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    iwk[(iwc << 1) + 1] = next;
+    iwk[(iwc << 1) + 2] = n0;
+    goto L20;
+
+/*   Swap NL-NR for N0-NEXT, shift columns IWF,...,IWC-1 to */
+/*     the right, and store N0-NEXT in the left portion of */
+/*     IWK. */
+
+L17:
+    swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    i__1 = iwf;
+    for (i__ = iwc - 1; i__ >= i__1; --i__) {
+	iwk[((i__ + 1) << 1) + 1] = iwk[(i__ << 1) + 1];
+	iwk[((i__ + 1) << 1) + 2] = iwk[(i__ << 1) + 2];
+/* L18: */
+    }
+    iwk[(iwf << 1) + 1] = n0;
+    iwk[(iwf << 1) + 2] = next;
+    ++iwf;
+    goto L20;
+
+/*   A swap is not possible.  Set N0 to NL. */
+
+L19:
+    n0 = nl;
+    x0 = x[n0];
+    y00 = y[n0];
+    z0 = z__[n0];
+    lft = -1;
+
+/*   Advance to the next arc. */
+
+L20:
+    nl = next;
+    ++iwc;
+    goto L11;
+
+/*   N2 is opposite NL->NR (IWC = IWL). */
+
+L21:
+    if (n0 == n1) {
+	goto L24;
+    }
+    if (lft < 0) {
+	goto L22;
+    }
+
+/*   N0 RIGHT N1->N2.  Test for a possible swap. */
+
+    if (! left_(&x0, &y00, &z0, &x[nr], &y[nr], &z__[nr], &x2, &y2, &z2)) {
+	goto L10;
+    }
+
+/*   Swap NL-NR for N0-N2 and store N0-N2 in the right */
+/*     portion of IWK. */
+
+    swap_(&n2, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    iwk[(iwl << 1) + 1] = n0;
+    iwk[(iwl << 1) + 2] = n2;
+    --iwl;
+    goto L10;
+
+/*   N0 LEFT N1->N2.  Test for a possible swap. */
+
+L22:
+    if (! left_(&x[nl], &y[nl], &z__[nl], &x0, &y00, &z0, &x2, &y2, &z2)) {
+	goto L10;
+    }
+
+/*   Swap NL-NR for N0-N2, shift columns IWF,...,IWL-1 to the */
+/*     right, and store N0-N2 in the left portion of IWK. */
+
+    swap_(&n2, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    i__ = iwl;
+L23:
+    iwk[(i__ << 1) + 1] = iwk[((i__ - 1) << 1) + 1];
+    iwk[(i__ << 1) + 2] = iwk[((i__ - 1) << 1) + 2];
+    --i__;
+    if (i__ > iwf) {
+	goto L23;
+    }
+    iwk[(iwf << 1) + 1] = n0;
+    iwk[(iwf << 1) + 2] = n2;
+    ++iwf;
+    goto L10;
+
+/* IWF = IWC = IWL.  Swap out the last arc for N1-N2 and */
+/*   store zeros in IWK. */
+
+L24:
+    swap_(&n2, &n1, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+    iwk[(iwc << 1) + 1] = 0;
+    iwk[(iwc << 1) + 2] = 0;
+
+/* Optimization procedure -- */
+
+    *ier = 0;
+    if (iwc > 1) {
+
+/*   Optimize the set of new arcs to the left of IN1->IN2. */
+
+	nit = (iwc - 1) << 2;
+	i__1 = iwc - 1;
+	optim_(&x[1], &y[1], &z__[1], &i__1, &list[1], &lptr[1], &lend[1], &
+		nit, &iwk[3], &ierr);
+	if (ierr != 0 && ierr != 1) {
+	    goto L34;
+	}
+	if (ierr == 1) {
+	    *ier = 5;
+	}
+    }
+    if (iwc < iwend) {
+
+/*   Optimize the set of new arcs to the right of IN1->IN2. */
+
+	nit = (iwend - iwc) << 2;
+	i__1 = iwend - iwc;
+	optim_(&x[1], &y[1], &z__[1], &i__1, &list[1], &lptr[1], &lend[1], &
+		nit, &iwk[((iwc + 1) << 1) + 1], &ierr);
+	if (ierr != 0 && ierr != 1) {
+	    goto L34;
+	}
+	if (ierr == 1) {
+	    goto L35;
+	}
+    }
+    if (*ier == 5) {
+	goto L35;
+    }
+
+/* Successful termination (IER = 0). */
+
+    return 0;
+
+/* IN1 and IN2 were adjacent on input. */
+
+L30:
+    *ier = 0;
+    return 0;
+
+/* Invalid input parameter. */
+
+L31:
+    *ier = 1;
+    return 0;
+
+/* Insufficient space reserved for IWK. */
+
+L32:
+    *ier = 2;
+    return 0;
+
+/* Invalid triangulation data structure or collinear nodes */
+/*   on convex hull boundary. */
+
+L33:
+    *ier = 3;
+    return 0;
+
+/* Error flag (other than 1) returned by OPTIM. */
+
+L34:
+    *ier = 4;
+    return 0;
+
+/* Error flag 1 returned by OPTIM. */
+
+L35:
+    *ier = 5;
+    return 0;
+} /* edge_ */
+
+/* Subroutine */ int getnp_(double *x, double *y, double *z__,
+	int *list, int *lptr, int *lend, int *l, int *
+	npts, double *df, int *ier)
+{
+    /* System generated locals */
+    int i__1, i__2;
+
+    /* Local variables */
+    static int i__, n1;
+    static double x1, y11, z1;
+    static int nb, ni, lp, np, lm1;
+    static double dnb, dnp;
+    static int lpl;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/28/98 */
+
+/*   Given a Delaunay triangulation of N nodes on the unit */
+/* sphere and an array NPTS containing the indexes of L-1 */
+/* nodes ordered by angular distance from NPTS(1), this sub- */
+/* routine sets NPTS(L) to the index of the next node in the */
+/* sequence -- the node, other than NPTS(1),...,NPTS(L-1), */
+/* that is closest to NPTS(1).  Thus, the ordered sequence */
+/* of K closest nodes to N1 (including N1) may be determined */
+/* by K-1 calls to GETNP with NPTS(1) = N1 and L = 2,3,...,K */
+/* for K .GE. 2. */
+
+/*   The algorithm uses the property of a Delaunay triangula- */
+/* tion that the K-th closest node to N1 is a neighbor of one */
+/* of the K-1 closest nodes to N1. */
+
+
+/* On input: */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the nodes. */
+
+/*       LIST,LPTR,LEND = Triangulation data structure.  Re- */
+/*                        fer to Subroutine TRMESH. */
+
+/*       L = Number of nodes in the sequence on output.  2 */
+/*           .LE. L .LE. N. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       NPTS = Array of length .GE. L containing the indexes */
+/*              of the L-1 closest nodes to NPTS(1) in the */
+/*              first L-1 locations. */
+
+/* On output: */
+
+/*       NPTS = Array updated with the index of the L-th */
+/*              closest node to NPTS(1) in position L unless */
+/*              IER = 1. */
+
+/*       DF = Value of an increasing function (negative cos- */
+/*            ine) of the angular distance between NPTS(1) */
+/*            and NPTS(L) unless IER = 1. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if L < 2. */
+
+/* Modules required by GETNP:  None */
+
+/* Intrinsic function called by GETNP:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* DNB,DNP =  Negative cosines of the angular distances from */
+/*              N1 to NB and to NP, respectively */
+/* I =        NPTS index and DO-loop index */
+/* LM1 =      L-1 */
+/* LP =       LIST pointer of a neighbor of NI */
+/* LPL =      Pointer to the last neighbor of NI */
+/* N1 =       NPTS(1) */
+/* NB =       Neighbor of NI and candidate for NP */
+/* NI =       NPTS(I) */
+/* NP =       Candidate for NPTS(L) */
+/* X1,Y1,Z1 = Coordinates of N1 */
+
+    /* Parameter adjustments */
+    --x;
+    --y;
+    --z__;
+    --list;
+    --lptr;
+    --lend;
+    --npts;
+
+    /* Function Body */
+    lm1 = *l - 1;
+    if (lm1 < 1) {
+	goto L6;
+    }
+    *ier = 0;
+
+/* Store N1 = NPTS(1) and mark the elements of NPTS. */
+
+    n1 = npts[1];
+    x1 = x[n1];
+    y11 = y[n1];
+    z1 = z__[n1];
+    i__1 = lm1;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	ni = npts[i__];
+	lend[ni] = -lend[ni];
+/* L1: */
+    }
+
+/* Candidates for NP = NPTS(L) are the unmarked neighbors */
+/*   of nodes in NPTS.  DNP is initially greater than -cos(PI) */
+/*   (the maximum distance). */
+
+    dnp = 2.;
+
+/* Loop on nodes NI in NPTS. */
+
+    i__1 = lm1;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	ni = npts[i__];
+	lpl = -lend[ni];
+	lp = lpl;
+
+/* Loop on neighbors NB of NI. */
+
+L2:
+	nb = (i__2 = list[lp], abs(i__2));
+	if (lend[nb] < 0) {
+	    goto L3;
+	}
+
+/* NB is an unmarked neighbor of NI.  Replace NP if NB is */
+/*   closer to N1. */
+
+	dnb = -(x[nb] * x1 + y[nb] * y11 + z__[nb] * z1);
+	if (dnb >= dnp) {
+	    goto L3;
+	}
+	np = nb;
+	dnp = dnb;
+L3:
+	lp = lptr[lp];
+	if (lp != lpl) {
+	    goto L2;
+	}
+/* L4: */
+    }
+    npts[*l] = np;
+    *df = dnp;
+
+/* Unmark the elements of NPTS. */
+
+    i__1 = lm1;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	ni = npts[i__];
+	lend[ni] = -lend[ni];
+/* L5: */
+    }
+    return 0;
+
+/* L is outside its valid range. */
+
+L6:
+    *ier = 1;
+    return 0;
+} /* getnp_ */
+
+/* Subroutine */ int insert_(int *k, int *lp, int *list, int *
+	lptr, int *lnew)
+{
+    static int lsav;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/17/96 */
+
+/*   This subroutine inserts K as a neighbor of N1 following */
+/* N2, where LP is the LIST pointer of N2 as a neighbor of */
+/* N1.  Note that, if N2 is the last neighbor of N1, K will */
+/* become the first neighbor (even if N1 is a boundary node). */
+
+/*   This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/*       K = Index of the node to be inserted. */
+
+/*       LP = LIST pointer of N2 as a neighbor of N1. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LNEW = Data structure defining the trian- */
+/*                        gulation.  Refer to Subroutine */
+/*                        TRMESH. */
+
+/* On output: */
+
+/*       LIST,LPTR,LNEW = Data structure updated with the */
+/*                        addition of node K. */
+
+/* Modules required by INSERT:  None */
+
+/* *********************************************************** */
+
+
+    /* Parameter adjustments */
+    --lptr;
+    --list;
+
+    /* Function Body */
+    lsav = lptr[*lp];
+    lptr[*lp] = *lnew;
+    list[*lnew] = *k;
+    lptr[*lnew] = lsav;
+    ++(*lnew);
+    return 0;
+} /* insert_ */
+
+int inside_(double *p, int *lv, double *xv, double *yv,
+	double *zv, int *nv, int *listv, int *ier)
+{
+    /* Initialized data */
+
+    static double eps = .001;
+
+    /* System generated locals */
+    int i__1;
+    int ret_val = 0;
+
+    /* Local variables */
+    static double b[3], d__;
+    static int k, n;
+    static double q[3];
+    static int i1, i2, k0;
+    static double v1[3], v2[3], cn[3], bp, bq;
+    static int ni;
+    static double pn[3], qn[3], vn[3];
+    static int imx;
+    static int lft1, lft2, even;
+    static int ierr;
+    static int pinr, qinr;
+    static double qnrm, vnrm;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   12/27/93 */
+
+/*   This function locates a point P relative to a polygonal */
+/* region R on the surface of the unit sphere, returning */
+/* INSIDE = TRUE if and only if P is contained in R.  R is */
+/* defined by a cyclically ordered sequence of vertices which */
+/* form a positively-oriented simple closed curve.  Adjacent */
+/* vertices need not be distinct but the curve must not be */
+/* self-intersecting.  Also, while polygon edges are by defi- */
+/* nition restricted to a single hemisphere, R is not so */
+/* restricted.  Its interior is the region to the left as the */
+/* vertices are traversed in order. */
+
+/*   The algorithm consists of selecting a point Q in R and */
+/* then finding all points at which the great circle defined */
+/* by P and Q intersects the boundary of R.  P lies inside R */
+/* if and only if there is an even number of intersection */
+/* points between Q and P.  Q is taken to be a point immedi- */
+/* ately to the left of a directed boundary edge -- the first */
+/* one that results in no consistency-check failures. */
+
+/*   If P is close to the polygon boundary, the problem is */
+/* ill-conditioned and the decision may be incorrect.  Also, */
+/* an incorrect decision may result from a poor choice of Q */
+/* (if, for example, a boundary edge lies on the great cir- */
+/* cle defined by P and Q).  A more reliable result could be */
+/* obtained by a sequence of calls to INSIDE with the ver- */
+/* tices cyclically permuted before each call (to alter the */
+/* choice of Q). */
+
+
+/* On input: */
+
+/*       P = Array of length 3 containing the Cartesian */
+/*           coordinates of the point (unit vector) to be */
+/*           located. */
+
+/*       LV = Length of arrays XV, YV, and ZV. */
+
+/*       XV,YV,ZV = Arrays of length LV containing the Carte- */
+/*                  sian coordinates of unit vectors (points */
+/*                  on the unit sphere).  These values are */
+/*                  not tested for validity. */
+
+/*       NV = Number of vertices in the polygon.  3 .LE. NV */
+/*            .LE. LV. */
+
+/*       LISTV = Array of length NV containing the indexes */
+/*               (for XV, YV, and ZV) of a cyclically-ordered */
+/*               (and CCW-ordered) sequence of vertices that */
+/*               define R.  The last vertex (indexed by */
+/*               LISTV(NV)) is followed by the first (indexed */
+/*               by LISTV(1)).  LISTV entries must be in the */
+/*               range 1 to LV. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/*       INSIDE = TRUE if and only if P lies inside R unless */
+/*                IER .NE. 0, in which case the value is not */
+/*                altered. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if LV or NV is outside its valid */
+/*                     range. */
+/*             IER = 2 if a LISTV entry is outside its valid */
+/*                     range. */
+/*             IER = 3 if the polygon boundary was found to */
+/*                     be self-intersecting.  This error will */
+/*                     not necessarily be detected. */
+/*             IER = 4 if every choice of Q (one for each */
+/*                     boundary edge) led to failure of some */
+/*                     internal consistency check.  The most */
+/*                     likely cause of this error is invalid */
+/*                     input:  P = (0,0,0), a null or self- */
+/*                     intersecting polygon, etc. */
+
+/* Module required by INSIDE:  INTRSC */
+
+/* Intrinsic function called by INSIDE:  SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* B =         Intersection point between the boundary and */
+/*               the great circle defined by P and Q */
+/* BP,BQ =     <B,P> and <B,Q>, respectively, maximized over */
+/*               intersection points B that lie between P and */
+/*               Q (on the shorter arc) -- used to find the */
+/*               closest intersection points to P and Q */
+/* CN =        Q X P = normal to the plane of P and Q */
+/* D =         Dot product <B,P> or <B,Q> */
+/* EPS =       Parameter used to define Q as the point whose */
+/*               orthogonal distance to (the midpoint of) */
+/*               boundary edge V1->V2 is approximately EPS/ */
+/*               (2*Cos(A/2)), where <V1,V2> = Cos(A). */
+/* EVEN =      TRUE iff an even number of intersection points */
+/*               lie between P and Q (on the shorter arc) */
+/* I1,I2 =     Indexes (LISTV elements) of a pair of adjacent */
+/*               boundary vertices (endpoints of a boundary */
+/*               edge) */
+/* IERR =      Error flag for calls to INTRSC (not tested) */
+/* IMX =       Local copy of LV and maximum value of I1 and */
+/*               I2 */
+/* K =         DO-loop index and LISTV index */
+/* K0 =        LISTV index of the first endpoint of the */
+/*               boundary edge used to compute Q */
+/* LFT1,LFT2 = Logical variables associated with I1 and I2 in */
+/*               the boundary traversal:  TRUE iff the vertex */
+/*               is strictly to the left of Q->P (<V,CN> > 0) */
+/* N =         Local copy of NV */
+/* NI =        Number of intersections (between the boundary */
+/*               curve and the great circle P-Q) encountered */
+/* PINR =      TRUE iff P is to the left of the directed */
+/*               boundary edge associated with the closest */
+/*               intersection point to P that lies between P */
+/*               and Q (a left-to-right intersection as */
+/*               viewed from Q), or there is no intersection */
+/*               between P and Q (on the shorter arc) */
+/* PN,QN =     P X CN and CN X Q, respectively:  used to */
+/*               locate intersections B relative to arc Q->P */
+/* Q =         (V1 + V2 + EPS*VN/VNRM)/QNRM, where V1->V2 is */
+/*               the boundary edge indexed by LISTV(K0) -> */
+/*               LISTV(K0+1) */
+/* QINR =      TRUE iff Q is to the left of the directed */
+/*               boundary edge associated with the closest */
+/*               intersection point to Q that lies between P */
+/*               and Q (a right-to-left intersection as */
+/*               viewed from Q), or there is no intersection */
+/*               between P and Q (on the shorter arc) */
+/* QNRM =      Euclidean norm of V1+V2+EPS*VN/VNRM used to */
+/*               compute (normalize) Q */
+/* V1,V2 =     Vertices indexed by I1 and I2 in the boundary */
+/*               traversal */
+/* VN =        V1 X V2, where V1->V2 is the boundary edge */
+/*               indexed by LISTV(K0) -> LISTV(K0+1) */
+/* VNRM =      Euclidean norm of VN */
+
+    /* Parameter adjustments */
+    --p;
+    --zv;
+    --yv;
+    --xv;
+    --listv;
+
+    /* Function Body */
+
+/* Store local parameters, test for error 1, and initialize */
+/*   K0. */
+
+    imx = *lv;
+    n = *nv;
+    if (n < 3 || n > imx) {
+	goto L11;
+    }
+    k0 = 0;
+    i1 = listv[1];
+    if (i1 < 1 || i1 > imx) {
+	goto L12;
+    }
+
+/* Increment K0 and set Q to a point immediately to the left */
+/*   of the midpoint of edge V1->V2 = LISTV(K0)->LISTV(K0+1): */
+/*   Q = (V1 + V2 + EPS*VN/VNRM)/QNRM, where VN = V1 X V2. */
+
+L1:
+    ++k0;
+    if (k0 > n) {
+	goto L14;
+    }
+    i1 = listv[k0];
+    if (k0 < n) {
+	i2 = listv[k0 + 1];
+    } else {
+	i2 = listv[1];
+    }
+    if (i2 < 1 || i2 > imx) {
+	goto L12;
+    }
+    vn[0] = yv[i1] * zv[i2] - zv[i1] * yv[i2];
+    vn[1] = zv[i1] * xv[i2] - xv[i1] * zv[i2];
+    vn[2] = xv[i1] * yv[i2] - yv[i1] * xv[i2];
+    vnrm = sqrt(vn[0] * vn[0] + vn[1] * vn[1] + vn[2] * vn[2]);
+    if (vnrm == 0.) {
+	goto L1;
+    }
+    q[0] = xv[i1] + xv[i2] + eps * vn[0] / vnrm;
+    q[1] = yv[i1] + yv[i2] + eps * vn[1] / vnrm;
+    q[2] = zv[i1] + zv[i2] + eps * vn[2] / vnrm;
+    qnrm = sqrt(q[0] * q[0] + q[1] * q[1] + q[2] * q[2]);
+    q[0] /= qnrm;
+    q[1] /= qnrm;
+    q[2] /= qnrm;
+
+/* Compute CN = Q X P, PN = P X CN, and QN = CN X Q. */
+
+    cn[0] = q[1] * p[3] - q[2] * p[2];
+    cn[1] = q[2] * p[1] - q[0] * p[3];
+    cn[2] = q[0] * p[2] - q[1] * p[1];
+    if (cn[0] == 0. && cn[1] == 0. && cn[2] == 0.) {
+	goto L1;
+    }
+    pn[0] = p[2] * cn[2] - p[3] * cn[1];
+    pn[1] = p[3] * cn[0] - p[1] * cn[2];
+    pn[2] = p[1] * cn[1] - p[2] * cn[0];
+    qn[0] = cn[1] * q[2] - cn[2] * q[1];
+    qn[1] = cn[2] * q[0] - cn[0] * q[2];
+    qn[2] = cn[0] * q[1] - cn[1] * q[0];
+
+/* Initialize parameters for the boundary traversal. */
+
+    ni = 0;
+    even = TRUE_;
+    bp = -2.;
+    bq = -2.;
+    pinr = TRUE_;
+    qinr = TRUE_;
+    i2 = listv[n];
+    if (i2 < 1 || i2 > imx) {
+	goto L12;
+    }
+    lft2 = cn[0] * xv[i2] + cn[1] * yv[i2] + cn[2] * zv[i2] > 0.;
+
+/* Loop on boundary arcs I1->I2. */
+
+    i__1 = n;
+    for (k = 1; k <= i__1; ++k) {
+	i1 = i2;
+	lft1 = lft2;
+	i2 = listv[k];
+	if (i2 < 1 || i2 > imx) {
+	    goto L12;
+	}
+	lft2 = cn[0] * xv[i2] + cn[1] * yv[i2] + cn[2] * zv[i2] > 0.;
+	if (lft1 == lft2) {
+	    goto L2;
+	}
+
+/*   I1 and I2 are on opposite sides of Q->P.  Compute the */
+/*     point of intersection B. */
+
+	++ni;
+	v1[0] = xv[i1];
+	v1[1] = yv[i1];
+	v1[2] = zv[i1];
+	v2[0] = xv[i2];
+	v2[1] = yv[i2];
+	v2[2] = zv[i2];
+	intrsc_(v1, v2, cn, b, &ierr);
+
+/*   B is between Q and P (on the shorter arc) iff */
+/*     B Forward Q->P and B Forward P->Q       iff */
+/*     <B,QN> > 0 and <B,PN> > 0. */
+
+	if (b[0] * qn[0] + b[1] * qn[1] + b[2] * qn[2] > 0. && b[0] * pn[0] +
+		b[1] * pn[1] + b[2] * pn[2] > 0.) {
+
+/*   Update EVEN, BQ, QINR, BP, and PINR. */
+
+	    even = ! even;
+	    d__ = b[0] * q[0] + b[1] * q[1] + b[2] * q[2];
+	    if (d__ > bq) {
+		bq = d__;
+		qinr = lft2;
+	    }
+	    d__ = b[0] * p[1] + b[1] * p[2] + b[2] * p[3];
+	    if (d__ > bp) {
+		bp = d__;
+		pinr = lft1;
+	    }
+	}
+L2:
+	;
+    }
+
+/* Test for consistency:  NI must be even and QINR must be */
+/*   TRUE. */
+
+    if (ni != ni / 2 << 1 || ! qinr) {
+	goto L1;
+    }
+
+/* Test for error 3:  different values of PINR and EVEN. */
+
+    if (pinr != even) {
+	goto L13;
+    }
+
+/* No error encountered. */
+
+    *ier = 0;
+    ret_val = even;
+    return ret_val;
+
+/* LV or NV is outside its valid range. */
+
+L11:
+    *ier = 1;
+    return ret_val;
+
+/* A LISTV entry is outside its valid range. */
+
+L12:
+    *ier = 2;
+    return ret_val;
+
+/* The polygon boundary is self-intersecting. */
+
+L13:
+    *ier = 3;
+    return ret_val;
+
+/* Consistency tests failed for all values of Q. */
+
+L14:
+    *ier = 4;
+    return ret_val;
+} /* inside_ */
+
+/* Subroutine */ int intadd_(int *kk, int *i1, int *i2, int *
+	i3, int *list, int *lptr, int *lend, int *lnew)
+{
+    static int k, n1, n2, n3, lp;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/17/96 */
+
+/*   This subroutine adds an interior node to a triangulation */
+/* of a set of points on the unit sphere.  The data structure */
+/* is updated with the insertion of node KK into the triangle */
+/* whose vertices are I1, I2, and I3.  No optimization of the */
+/* triangulation is performed. */
+
+/*   This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/*       KK = Index of the node to be inserted.  KK .GE. 1 */
+/*            and KK must not be equal to I1, I2, or I3. */
+
+/*       I1,I2,I3 = Indexes of the counterclockwise-ordered */
+/*                  sequence of vertices of a triangle which */
+/*                  contains node KK. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure defining the */
+/*                             triangulation.  Refer to Sub- */
+/*                             routine TRMESH.  Triangle */
+/*                             (I1,I2,I3) must be included */
+/*                             in the triangulation. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND,LNEW = Data structure updated with */
+/*                             the addition of node KK.  KK */
+/*                             will be connected to nodes I1, */
+/*                             I2, and I3. */
+
+/* Modules required by INTADD:  INSERT, LSTPTR */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K =        Local copy of KK */
+/* LP =       LIST pointer */
+/* N1,N2,N3 = Local copies of I1, I2, and I3 */
+
+    /* Parameter adjustments */
+    --lend;
+    --lptr;
+    --list;
+
+    /* Function Body */
+    k = *kk;
+
+/* Initialization. */
+
+    n1 = *i1;
+    n2 = *i2;
+    n3 = *i3;
+
+/* Add K as a neighbor of I1, I2, and I3. */
+
+    lp = lstptr_(&lend[n1], &n2, &list[1], &lptr[1]);
+    insert_(&k, &lp, &list[1], &lptr[1], lnew);
+    lp = lstptr_(&lend[n2], &n3, &list[1], &lptr[1]);
+    insert_(&k, &lp, &list[1], &lptr[1], lnew);
+    lp = lstptr_(&lend[n3], &n1, &list[1], &lptr[1]);
+    insert_(&k, &lp, &list[1], &lptr[1], lnew);
+
+/* Add I1, I2, and I3 as neighbors of K. */
+
+    list[*lnew] = n1;
+    list[*lnew + 1] = n2;
+    list[*lnew + 2] = n3;
+    lptr[*lnew] = *lnew + 1;
+    lptr[*lnew + 1] = *lnew + 2;
+    lptr[*lnew + 2] = *lnew;
+    lend[k] = *lnew + 2;
+    *lnew += 3;
+    return 0;
+} /* intadd_ */
+
+/* Subroutine */ int intrsc_(double *p1, double *p2, double *cn,
+	double *p, int *ier)
+{
+    /* Local variables */
+    static int i__;
+    static double t, d1, d2, pp[3], ppn;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/19/90 */
+
+/*   Given a great circle C and points P1 and P2 defining an */
+/* arc A on the surface of the unit sphere, where A is the */
+/* shorter of the two portions of the great circle C12 assoc- */
+/* iated with P1 and P2, this subroutine returns the point */
+/* of intersection P between C and C12 that is closer to A. */
+/* Thus, if P1 and P2 lie in opposite hemispheres defined by */
+/* C, P is the point of intersection of C with A. */
+
+
+/* On input: */
+
+/*       P1,P2 = Arrays of length 3 containing the Cartesian */
+/*               coordinates of unit vectors. */
+
+/*       CN = Array of length 3 containing the Cartesian */
+/*            coordinates of a nonzero vector which defines C */
+/*            as the intersection of the plane whose normal */
+/*            is CN with the unit sphere.  Thus, if C is to */
+/*            be the great circle defined by P and Q, CN */
+/*            should be P X Q. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       P = Array of length 3. */
+
+/* On output: */
+
+/*       P = Point of intersection defined above unless IER */
+/*           .NE. 0, in which case P is not altered. */
+
+/*       IER = Error indicator. */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if <CN,P1> = <CN,P2>.  This occurs */
+/*                     iff P1 = P2 or CN = 0 or there are */
+/*                     two intersection points at the same */
+/*                     distance from A. */
+/*             IER = 2 if P2 = -P1 and the definition of A is */
+/*                     therefore ambiguous. */
+
+/* Modules required by INTRSC:  None */
+
+/* Intrinsic function called by INTRSC:  SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* D1 =  <CN,P1> */
+/* D2 =  <CN,P2> */
+/* I =   DO-loop index */
+/* PP =  P1 + T*(P2-P1) = Parametric representation of the */
+/*         line defined by P1 and P2 */
+/* PPN = Norm of PP */
+/* T =   D1/(D1-D2) = Parameter value chosen so that PP lies */
+/*         in the plane of C */
+
+    /* Parameter adjustments */
+    --p;
+    --cn;
+    --p2;
+    --p1;
+
+    /* Function Body */
+    d1 = cn[1] * p1[1] + cn[2] * p1[2] + cn[3] * p1[3];
+    d2 = cn[1] * p2[1] + cn[2] * p2[2] + cn[3] * p2[3];
+
+    if (d1 == d2) {
+	*ier = 1;
+	return 0;
+    }
+
+/* Solve for T such that <PP,CN> = 0 and compute PP and PPN. */
+
+    t = d1 / (d1 - d2);
+    ppn = 0.;
+    for (i__ = 1; i__ <= 3; ++i__) {
+	pp[i__ - 1] = p1[i__] + t * (p2[i__] - p1[i__]);
+	ppn += pp[i__ - 1] * pp[i__ - 1];
+/* L1: */
+    }
+
+/* PPN = 0 iff PP = 0 iff P2 = -P1 (and T = .5). */
+
+    if (ppn == 0.) {
+	*ier = 2;
+	return 0;
+    }
+    ppn = sqrt(ppn);
+
+/* Compute P = PP/PPN. */
+
+    for (i__ = 1; i__ <= 3; ++i__) {
+	p[i__] = pp[i__ - 1] / ppn;
+/* L2: */
+    }
+    *ier = 0;
+    return 0;
+} /* intrsc_ */
+
+int jrand_(int *n, int *ix, int *iy, int *iz)
+{
+    /* System generated locals */
+    int ret_val;
+
+    /* Local variables */
+    static double u, x;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/28/98 */
+
+/*   This function returns a uniformly distributed pseudo- */
+/* random int in the range 1 to N. */
+
+
+/* On input: */
+
+/*       N = Maximum value to be returned. */
+
+/* N is not altered by this function. */
+
+/*       IX,IY,IZ = int seeds initialized to values in */
+/*                  the range 1 to 30,000 before the first */
+/*                  call to JRAND, and not altered between */
+/*                  subsequent calls (unless a sequence of */
+/*                  random numbers is to be repeated by */
+/*                  reinitializing the seeds). */
+
+/* On output: */
+
+/*       IX,IY,IZ = Updated int seeds. */
+
+/*       JRAND = Random int in the range 1 to N. */
+
+/* Reference:  B. A. Wichmann and I. D. Hill, "An Efficient */
+/*             and Portable Pseudo-random Number Generator", */
+/*             Applied Statistics, Vol. 31, No. 2, 1982, */
+/*             pp. 188-190. */
+
+/* Modules required by JRAND:  None */
+
+/* Intrinsic functions called by JRAND:  INT, MOD, REAL */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* U = Pseudo-random number uniformly distributed in the */
+/*     interval (0,1). */
+/* X = Pseudo-random number in the range 0 to 3 whose frac- */
+/*       tional part is U. */
+
+    *ix = *ix * 171 % 30269;
+    *iy = *iy * 172 % 30307;
+    *iz = *iz * 170 % 30323;
+    x = (double) (*ix) / 30269. + (double) (*iy) / 30307. + (
+	    double) (*iz) / 30323.;
+    u = x - (int) x;
+    ret_val = (int) ((double) (*n) * u + 1.);
+    return ret_val;
+} /* jrand_ */
+
+int left_(double *x1, double *y11, double *z1, double *x2,
+	double *y2, double *z2, double *x0, double *y00,
+	double *z0)
+{
+    /* System generated locals */
+    int ret_val;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/15/96 */
+
+/*   This function determines whether node N0 is in the */
+/* (closed) left hemisphere defined by the plane containing */
+/* N1, N2, and the origin, where left is defined relative to */
+/* an observer at N1 facing N2. */
+
+
+/* On input: */
+
+/*       X1,Y1,Z1 = Coordinates of N1. */
+
+/*       X2,Y2,Z2 = Coordinates of N2. */
+
+/*       X0,Y0,Z0 = Coordinates of N0. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/*       LEFT = TRUE if and only if N0 is in the closed */
+/*              left hemisphere. */
+
+/* Modules required by LEFT:  None */
+
+/* *********************************************************** */
+
+/* LEFT = TRUE iff <N0,N1 X N2> = det(N0,N1,N2) .GE. 0. */
+
+    ret_val = *x0 * (*y11 * *z2 - *y2 * *z1) - *y00 * (*x1 * *z2 - *x2 * *z1) +
+	    *z0 * (*x1 * *y2 - *x2 * *y11) >= 0.;
+    return ret_val;
+} /* left_ */
+
+int lstptr_(int *lpl, int *nb, int *list, int *lptr)
+{
+    /* System generated locals */
+    int ret_val;
+
+    /* Local variables */
+    static int nd, lp;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/15/96 */
+
+/*   This function returns the index (LIST pointer) of NB in */
+/* the adjacency list for N0, where LPL = LEND(N0). */
+
+/*   This function is identical to the similarly named */
+/* function in TRIPACK. */
+
+
+/* On input: */
+
+/*       LPL = LEND(N0) */
+
+/*       NB = Index of the node whose pointer is to be re- */
+/*            turned.  NB must be connected to N0. */
+
+/*       LIST,LPTR = Data structure defining the triangula- */
+/*                   tion.  Refer to Subroutine TRMESH. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/*       LSTPTR = Pointer such that LIST(LSTPTR) = NB or */
+/*                LIST(LSTPTR) = -NB, unless NB is not a */
+/*                neighbor of N0, in which case LSTPTR = LPL. */
+
+/* Modules required by LSTPTR:  None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* LP = LIST pointer */
+/* ND = Nodal index */
+
+    /* Parameter adjustments */
+    --lptr;
+    --list;
+
+    /* Function Body */
+    lp = lptr[*lpl];
+L1:
+    nd = list[lp];
+    if (nd == *nb) {
+	goto L2;
+    }
+    lp = lptr[lp];
+    if (lp != *lpl) {
+	goto L1;
+    }
+
+L2:
+    ret_val = lp;
+    return ret_val;
+} /* lstptr_ */
+
+int nbcnt_(int *lpl, int *lptr)
+{
+    /* System generated locals */
+    int ret_val;
+
+    /* Local variables */
+    static int k, lp;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/15/96 */
+
+/*   This function returns the number of neighbors of a node */
+/* N0 in a triangulation created by Subroutine TRMESH. */
+
+/*   This function is identical to the similarly named */
+/* function in TRIPACK. */
+
+
+/* On input: */
+
+/*       LPL = LIST pointer to the last neighbor of N0 -- */
+/*             LPL = LEND(N0). */
+
+/*       LPTR = Array of pointers associated with LIST. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/*       NBCNT = Number of neighbors of N0. */
+
+/* Modules required by NBCNT:  None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K =  Counter for computing the number of neighbors */
+/* LP = LIST pointer */
+
+    /* Parameter adjustments */
+    --lptr;
+
+    /* Function Body */
+    lp = *lpl;
+    k = 1;
+
+L1:
+    lp = lptr[lp];
+    if (lp == *lpl) {
+	goto L2;
+    }
+    ++k;
+    goto L1;
+
+L2:
+    ret_val = k;
+    return ret_val;
+} /* nbcnt_ */
+
+int nearnd_(double *p, int *ist, int *n, double *x,
+	double *y, double *z__, int *list, int *lptr, int
+	*lend, double *al)
+{
+    /* System generated locals */
+    int ret_val, i__1;
+
+    /* Local variables */
+    static int l;
+    static double b1, b2, b3;
+    static int i1, i2, i3, n1, n2, n3, lp, nn, nr;
+    static double ds1;
+    static int lp1, lp2;
+    static double dx1, dx2, dx3, dy1, dy2, dy3, dz1, dz2, dz3;
+    static int lpl;
+    static double dsr;
+    static int nst, listp[25], lptrp[25];
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/28/98 */
+
+/*   Given a point P on the surface of the unit sphere and a */
+/* Delaunay triangulation created by Subroutine TRMESH, this */
+/* function returns the index of the nearest triangulation */
+/* node to P. */
+
+/*   The algorithm consists of implicitly adding P to the */
+/* triangulation, finding the nearest neighbor to P, and */
+/* implicitly deleting P from the triangulation.  Thus, it */
+/* is based on the fact that, if P is a node in a Delaunay */
+/* triangulation, the nearest node to P is a neighbor of P. */
+
+
+/* On input: */
+
+/*       P = Array of length 3 containing the Cartesian coor- */
+/*           dinates of the point P to be located relative to */
+/*           the triangulation.  It is assumed without a test */
+/*           that P(1)**2 + P(2)**2 + P(3)**2 = 1. */
+
+/*       IST = Index of a node at which TRFIND begins the */
+/*             search.  Search time depends on the proximity */
+/*             of this node to P. */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the nodes. */
+
+/*       LIST,LPTR,LEND = Data structure defining the trian- */
+/*                        gulation.  Refer to TRMESH. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/*       NEARND = Nodal index of the nearest node to P, or 0 */
+/*                if N < 3 or the triangulation data struc- */
+/*                ture is invalid. */
+
+/*       AL = Arc length (angular distance in radians) be- */
+/*            tween P and NEARND unless NEARND = 0. */
+
+/*       Note that the number of candidates for NEARND */
+/*       (neighbors of P) is limited to LMAX defined in */
+/*       the PARAMETER statement below. */
+
+/* Modules required by NEARND:  JRAND, LSTPTR, TRFIND, STORE */
+
+/* Intrinsic functions called by NEARND:  ABS, ACOS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* B1,B2,B3 =  Unnormalized barycentric coordinates returned */
+/*               by TRFIND */
+/* DS1 =       (Negative cosine of the) distance from P to N1 */
+/* DSR =       (Negative cosine of the) distance from P to NR */
+/* DX1,..DZ3 = Components of vectors used by the swap test */
+/* I1,I2,I3 =  Nodal indexes of a triangle containing P, or */
+/*               the rightmost (I1) and leftmost (I2) visible */
+/*               boundary nodes as viewed from P */
+/* L =         Length of LISTP/LPTRP and number of neighbors */
+/*               of P */
+/* LMAX =      Maximum value of L */
+/* LISTP =     Indexes of the neighbors of P */
+/* LPTRP =     Array of pointers in 1-1 correspondence with */
+/*               LISTP elements */
+/* LP =        LIST pointer to a neighbor of N1 and LISTP */
+/*               pointer */
+/* LP1,LP2 =   LISTP indexes (pointers) */
+/* LPL =       Pointer to the last neighbor of N1 */
+/* N1 =        Index of a node visible from P */
+/* N2 =        Index of an endpoint of an arc opposite P */
+/* N3 =        Index of the node opposite N1->N2 */
+/* NN =        Local copy of N */
+/* NR =        Index of a candidate for the nearest node to P */
+/* NST =       Index of the node at which TRFIND begins the */
+/*               search */
+
+
+/* Store local parameters and test for N invalid. */
+
+    /* Parameter adjustments */
+    --p;
+    --lend;
+    --z__;
+    --y;
+    --x;
+    --list;
+    --lptr;
+
+    /* Function Body */
+    nn = *n;
+    if (nn < 3) {
+	goto L6;
+    }
+    nst = *ist;
+    if (nst < 1 || nst > nn) {
+	nst = 1;
+    }
+
+/* Find a triangle (I1,I2,I3) containing P, or the rightmost */
+/*   (I1) and leftmost (I2) visible boundary nodes as viewed */
+/*   from P. */
+
+    trfind_(&nst, &p[1], n, &x[1], &y[1], &z__[1], &list[1], &lptr[1], &lend[
+	    1], &b1, &b2, &b3, &i1, &i2, &i3);
+
+/* Test for collinear nodes. */
+
+    if (i1 == 0) {
+	goto L6;
+    }
+
+/* Store the linked list of 'neighbors' of P in LISTP and */
+/*   LPTRP.  I1 is the first neighbor, and 0 is stored as */
+/*   the last neighbor if P is not contained in a triangle. */
+/*   L is the length of LISTP and LPTRP, and is limited to */
+/*   LMAX. */
+
+    if (i3 != 0) {
+	listp[0] = i1;
+	lptrp[0] = 2;
+	listp[1] = i2;
+	lptrp[1] = 3;
+	listp[2] = i3;
+	lptrp[2] = 1;
+	l = 3;
+    } else {
+	n1 = i1;
+	l = 1;
+	lp1 = 2;
+	listp[l - 1] = n1;
+	lptrp[l - 1] = lp1;
+
+/*   Loop on the ordered sequence of visible boundary nodes */
+/*     N1 from I1 to I2. */
+
+L1:
+	lpl = lend[n1];
+	n1 = -list[lpl];
+	l = lp1;
+	lp1 = l + 1;
+	listp[l - 1] = n1;
+	lptrp[l - 1] = lp1;
+	if (n1 != i2 && lp1 < 25) {
+	    goto L1;
+	}
+	l = lp1;
+	listp[l - 1] = 0;
+	lptrp[l - 1] = 1;
+    }
+
+/* Initialize variables for a loop on arcs N1-N2 opposite P */
+/*   in which new 'neighbors' are 'swapped' in.  N1 follows */
+/*   N2 as a neighbor of P, and LP1 and LP2 are the LISTP */
+/*   indexes of N1 and N2. */
+
+    lp2 = 1;
+    n2 = i1;
+    lp1 = lptrp[0];
+    n1 = listp[lp1 - 1];
+
+/* Begin loop:  find the node N3 opposite N1->N2. */
+
+L2:
+    lp = lstptr_(&lend[n1], &n2, &list[1], &lptr[1]);
+    if (list[lp] < 0) {
+	goto L3;
+    }
+    lp = lptr[lp];
+    n3 = (i__1 = list[lp], abs(i__1));
+
+/* Swap test:  Exit the loop if L = LMAX. */
+
+    if (l == 25) {
+	goto L4;
+    }
+    dx1 = x[n1] - p[1];
+    dy1 = y[n1] - p[2];
+    dz1 = z__[n1] - p[3];
+
+    dx2 = x[n2] - p[1];
+    dy2 = y[n2] - p[2];
+    dz2 = z__[n2] - p[3];
+
+    dx3 = x[n3] - p[1];
+    dy3 = y[n3] - p[2];
+    dz3 = z__[n3] - p[3];
+    if (dx3 * (dy2 * dz1 - dy1 * dz2) - dy3 * (dx2 * dz1 - dx1 * dz2) + dz3 *
+	    (dx2 * dy1 - dx1 * dy2) <= 0.) {
+	goto L3;
+    }
+
+/* Swap:  Insert N3 following N2 in the adjacency list for P. */
+/*        The two new arcs opposite P must be tested. */
+
+    ++l;
+    lptrp[lp2 - 1] = l;
+    listp[l - 1] = n3;
+    lptrp[l - 1] = lp1;
+    lp1 = l;
+    n1 = n3;
+    goto L2;
+
+/* No swap:  Advance to the next arc and test for termination */
+/*           on N1 = I1 (LP1 = 1) or N1 followed by 0. */
+
+L3:
+    if (lp1 == 1) {
+	goto L4;
+    }
+    lp2 = lp1;
+    n2 = n1;
+    lp1 = lptrp[lp1 - 1];
+    n1 = listp[lp1 - 1];
+    if (n1 == 0) {
+	goto L4;
+    }
+    goto L2;
+
+/* Set NR and DSR to the index of the nearest node to P and */
+/*   an increasing function (negative cosine) of its distance */
+/*   from P, respectively. */
+
+L4:
+    nr = i1;
+    dsr = -(x[nr] * p[1] + y[nr] * p[2] + z__[nr] * p[3]);
+    i__1 = l;
+    for (lp = 2; lp <= i__1; ++lp) {
+	n1 = listp[lp - 1];
+	if (n1 == 0) {
+	    goto L5;
+	}
+	ds1 = -(x[n1] * p[1] + y[n1] * p[2] + z__[n1] * p[3]);
+	if (ds1 < dsr) {
+	    nr = n1;
+	    dsr = ds1;
+	}
+L5:
+	;
+    }
+    dsr = -dsr;
+    if (dsr > 1.) {
+	dsr = 1.;
+    }
+    *al = acos(dsr);
+    ret_val = nr;
+    return ret_val;
+
+/* Invalid input. */
+
+L6:
+    ret_val = 0;
+    return ret_val;
+} /* nearnd_ */
+
+/* Subroutine */ int optim_(double *x, double *y, double *z__,
+	int *na, int *list, int *lptr, int *lend, int *
+	nit, int *iwk, int *ier)
+{
+    /* System generated locals */
+    int i__1, i__2;
+
+    /* Local variables */
+    static int i__, n1, n2, lp, io1, io2, nna, lp21, lpl, lpp;
+    static int swp;
+    static int iter;
+    static int maxit;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/30/98 */
+
+/*   Given a set of NA triangulation arcs, this subroutine */
+/* optimizes the portion of the triangulation consisting of */
+/* the quadrilaterals (pairs of adjacent triangles) which */
+/* have the arcs as diagonals by applying the circumcircle */
+/* test and appropriate swaps to the arcs. */
+
+/*   An iteration consists of applying the swap test and */
+/* swaps to all NA arcs in the order in which they are */
+/* stored.  The iteration is repeated until no swap occurs */
+/* or NIT iterations have been performed.  The bound on the */
+/* number of iterations may be necessary to prevent an */
+/* infinite loop caused by cycling (reversing the effect of a */
+/* previous swap) due to floating point inaccuracy when four */
+/* or more nodes are nearly cocircular. */
+
+
+/* On input: */
+
+/*       X,Y,Z = Arrays containing the nodal coordinates. */
+
+/*       NA = Number of arcs in the set.  NA .GE. 0. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND = Data structure defining the trian- */
+/*                        gulation.  Refer to Subroutine */
+/*                        TRMESH. */
+
+/*       NIT = Maximum number of iterations to be performed. */
+/*             NIT = 4*NA should be sufficient.  NIT .GE. 1. */
+
+/*       IWK = int array dimensioned 2 by NA containing */
+/*             the nodal indexes of the arc endpoints (pairs */
+/*             of endpoints are stored in columns). */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND = Updated triangulation data struc- */
+/*                        ture reflecting the swaps. */
+
+/*       NIT = Number of iterations performed. */
+
+/*       IWK = Endpoint indexes of the new set of arcs */
+/*             reflecting the swaps. */
+
+/*       IER = Error indicator: */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if a swap occurred on the last of */
+/*                     MAXIT iterations, where MAXIT is the */
+/*                     value of NIT on input.  The new set */
+/*                     of arcs is not necessarily optimal */
+/*                     in this case. */
+/*             IER = 2 if NA < 0 or NIT < 1 on input. */
+/*             IER = 3 if IWK(2,I) is not a neighbor of */
+/*                     IWK(1,I) for some I in the range 1 */
+/*                     to NA.  A swap may have occurred in */
+/*                     this case. */
+/*             IER = 4 if a zero pointer was returned by */
+/*                     Subroutine SWAP. */
+
+/* Modules required by OPTIM:  LSTPTR, SWAP, SWPTST */
+
+/* Intrinsic function called by OPTIM:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* I =       Column index for IWK */
+/* IO1,IO2 = Nodal indexes of the endpoints of an arc in IWK */
+/* ITER =    Iteration count */
+/* LP =      LIST pointer */
+/* LP21 =    Parameter returned by SWAP (not used) */
+/* LPL =     Pointer to the last neighbor of IO1 */
+/* LPP =     Pointer to the node preceding IO2 as a neighbor */
+/*             of IO1 */
+/* MAXIT =   Input value of NIT */
+/* N1,N2 =   Nodes opposite IO1->IO2 and IO2->IO1, */
+/*             respectively */
+/* NNA =     Local copy of NA */
+/* SWP =     Flag set to TRUE iff a swap occurs in the */
+/*             optimization loop */
+
+    /* Parameter adjustments */
+    --x;
+    --y;
+    --z__;
+    iwk -= 3;
+    --list;
+    --lptr;
+    --lend;
+
+    /* Function Body */
+    nna = *na;
+    maxit = *nit;
+    if (nna < 0 || maxit < 1) {
+	goto L7;
+    }
+
+/* Initialize iteration count ITER and test for NA = 0. */
+
+    iter = 0;
+    if (nna == 0) {
+	goto L5;
+    }
+
+/* Top of loop -- */
+/*   SWP = TRUE iff a swap occurred in the current iteration. */
+
+L1:
+    if (iter == maxit) {
+	goto L6;
+    }
+    ++iter;
+    swp = FALSE_;
+
+/*   Inner loop on arcs IO1-IO2 -- */
+
+    i__1 = nna;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+	io1 = iwk[(i__ << 1) + 1];
+	io2 = iwk[(i__ << 1) + 2];
+
+/*   Set N1 and N2 to the nodes opposite IO1->IO2 and */
+/*     IO2->IO1, respectively.  Determine the following: */
+
+/*     LPL = pointer to the last neighbor of IO1, */
+/*     LP = pointer to IO2 as a neighbor of IO1, and */
+/*     LPP = pointer to the node N2 preceding IO2. */
+
+	lpl = lend[io1];
+	lpp = lpl;
+	lp = lptr[lpp];
+L2:
+	if (list[lp] == io2) {
+	    goto L3;
+	}
+	lpp = lp;
+	lp = lptr[lpp];
+	if (lp != lpl) {
+	    goto L2;
+	}
+
+/*   IO2 should be the last neighbor of IO1.  Test for no */
+/*     arc and bypass the swap test if IO1 is a boundary */
+/*     node. */
+
+	if ((i__2 = list[lp], abs(i__2)) != io2) {
+	    goto L8;
+	}
+	if (list[lp] < 0) {
+	    goto L4;
+	}
+
+/*   Store N1 and N2, or bypass the swap test if IO1 is a */
+/*     boundary node and IO2 is its first neighbor. */
+
+L3:
+	n2 = list[lpp];
+	if (n2 < 0) {
+	    goto L4;
+	}
+	lp = lptr[lp];
+	n1 = (i__2 = list[lp], abs(i__2));
+
+/*   Test IO1-IO2 for a swap, and update IWK if necessary. */
+
+	if (! swptst_(&n1, &n2, &io1, &io2, &x[1], &y[1], &z__[1])) {
+	    goto L4;
+	}
+	swap_(&n1, &n2, &io1, &io2, &list[1], &lptr[1], &lend[1], &lp21);
+	if (lp21 == 0) {
+	    goto L9;
+	}
+	swp = TRUE_;
+	iwk[(i__ << 1) + 1] = n1;
+	iwk[(i__ << 1) + 2] = n2;
+L4:
+	;
+    }
+    if (swp) {
+	goto L1;
+    }
+
+/* Successful termination. */
+
+L5:
+    *nit = iter;
+    *ier = 0;
+    return 0;
+
+/* MAXIT iterations performed without convergence. */
+
+L6:
+    *nit = maxit;
+    *ier = 1;
+    return 0;
+
+/* Invalid input parameter. */
+
+L7:
+    *nit = 0;
+    *ier = 2;
+    return 0;
+
+/* IO2 is not a neighbor of IO1. */
+
+L8:
+    *nit = iter;
+    *ier = 3;
+    return 0;
+
+/* Zero pointer returned by SWAP. */
+
+L9:
+    *nit = iter;
+    *ier = 4;
+    return 0;
+} /* optim_ */
+
+/* Subroutine */ int scoord_(double *px, double *py, double *pz,
+	double *plat, double *plon, double *pnrm)
+{
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   08/27/90 */
+
+/*   This subroutine converts a point P from Cartesian coor- */
+/* dinates to spherical coordinates. */
+
+
+/* On input: */
+
+/*       PX,PY,PZ = Cartesian coordinates of P. */
+
+/* Input parameters are not altered by this routine. */
+
+/* On output: */
+
+/*       PLAT = Latitude of P in the range -PI/2 to PI/2, or */
+/*              0 if PNRM = 0.  PLAT should be scaled by */
+/*              180/PI to obtain the value in degrees. */
+
+/*       PLON = Longitude of P in the range -PI to PI, or 0 */
+/*              if P lies on the Z-axis.  PLON should be */
+/*              scaled by 180/PI to obtain the value in */
+/*              degrees. */
+
+/*       PNRM = Magnitude (Euclidean norm) of P. */
+
+/* Modules required by SCOORD:  None */
+
+/* Intrinsic functions called by SCOORD:  ASIN, ATAN2, SQRT */
+
+/* *********************************************************** */
+
+    *pnrm = sqrt(*px * *px + *py * *py + *pz * *pz);
+    if (*px != 0. || *py != 0.) {
+	*plon = atan2(*py, *px);
+    } else {
+	*plon = 0.;
+    }
+    if (*pnrm != 0.) {
+	*plat = asin(*pz / *pnrm);
+    } else {
+	*plat = 0.;
+    }
+    return 0;
+} /* scoord_ */
+
+double store_(double *x)
+{
+    /* System generated locals */
+    double ret_val;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   05/09/92 */
+
+/*   This function forces its argument X to be stored in a */
+/* memory location, thus providing a means of determining */
+/* floating point number characteristics (such as the machine */
+/* precision) when it is necessary to avoid computation in */
+/* high precision registers. */
+
+
+/* On input: */
+
+/*       X = Value to be stored. */
+
+/* X is not altered by this function. */
+
+/* On output: */
+
+/*       STORE = Value of X after it has been stored and */
+/*               possibly truncated or rounded to the single */
+/*               precision word length. */
+
+/* Modules required by STORE:  None */
+
+/* *********************************************************** */
+
+    stcom.y = *x;
+    ret_val = stcom.y;
+    return ret_val;
+} /* store_ */
+
+/* Subroutine */ int swap_(int *in1, int *in2, int *io1, int *
+	io2, int *list, int *lptr, int *lend, int *lp21)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int lp, lph, lpsav;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   06/22/98 */
+
+/*   Given a triangulation of a set of points on the unit */
+/* sphere, this subroutine replaces a diagonal arc in a */
+/* strictly convex quadrilateral (defined by a pair of adja- */
+/* cent triangles) with the other diagonal.  Equivalently, a */
+/* pair of adjacent triangles is replaced by another pair */
+/* having the same union. */
+
+
+/* On input: */
+
+/*       IN1,IN2,IO1,IO2 = Nodal indexes of the vertices of */
+/*                         the quadrilateral.  IO1-IO2 is re- */
+/*                         placed by IN1-IN2.  (IO1,IO2,IN1) */
+/*                         and (IO2,IO1,IN2) must be trian- */
+/*                         gles on input. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR,LEND = Data structure defining the trian- */
+/*                        gulation.  Refer to Subroutine */
+/*                        TRMESH. */
+
+/* On output: */
+
+/*       LIST,LPTR,LEND = Data structure updated with the */
+/*                        swap -- triangles (IO1,IO2,IN1) and */
+/*                        (IO2,IO1,IN2) are replaced by */
+/*                        (IN1,IN2,IO2) and (IN2,IN1,IO1) */
+/*                        unless LP21 = 0. */
+
+/*       LP21 = Index of IN1 as a neighbor of IN2 after the */
+/*              swap is performed unless IN1 and IN2 are */
+/*              adjacent on input, in which case LP21 = 0. */
+
+/* Module required by SWAP:  LSTPTR */
+
+/* Intrinsic function called by SWAP:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* LP,LPH,LPSAV = LIST pointers */
+
+
+/* Test for IN1 and IN2 adjacent. */
+
+    /* Parameter adjustments */
+    --lend;
+    --lptr;
+    --list;
+
+    /* Function Body */
+    lp = lstptr_(&lend[*in1], in2, &list[1], &lptr[1]);
+    if ((i__1 = list[lp], abs(i__1)) == *in2) {
+	*lp21 = 0;
+	return 0;
+    }
+
+/* Delete IO2 as a neighbor of IO1. */
+
+    lp = lstptr_(&lend[*io1], in2, &list[1], &lptr[1]);
+    lph = lptr[lp];
+    lptr[lp] = lptr[lph];
+
+/* If IO2 is the last neighbor of IO1, make IN2 the */
+/*   last neighbor. */
+
+    if (lend[*io1] == lph) {
+	lend[*io1] = lp;
+    }
+
+/* Insert IN2 as a neighbor of IN1 following IO1 */
+/*   using the hole created above. */
+
+    lp = lstptr_(&lend[*in1], io1, &list[1], &lptr[1]);
+    lpsav = lptr[lp];
+    lptr[lp] = lph;
+    list[lph] = *in2;
+    lptr[lph] = lpsav;
+
+/* Delete IO1 as a neighbor of IO2. */
+
+    lp = lstptr_(&lend[*io2], in1, &list[1], &lptr[1]);
+    lph = lptr[lp];
+    lptr[lp] = lptr[lph];
+
+/* If IO1 is the last neighbor of IO2, make IN1 the */
+/*   last neighbor. */
+
+    if (lend[*io2] == lph) {
+	lend[*io2] = lp;
+    }
+
+/* Insert IN1 as a neighbor of IN2 following IO2. */
+
+    lp = lstptr_(&lend[*in2], io2, &list[1], &lptr[1]);
+    lpsav = lptr[lp];
+    lptr[lp] = lph;
+    list[lph] = *in1;
+    lptr[lph] = lpsav;
+    *lp21 = lph;
+    return 0;
+} /* swap_ */
+
+int swptst_(int *n1, int *n2, int *n3, int *n4,
+	double *x, double *y, double *z__)
+{
+    /* System generated locals */
+    int ret_val;
+
+    /* Local variables */
+    static double x4, y4, z4, dx1, dx2, dx3, dy1, dy2, dy3, dz1, dz2, dz3;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   03/29/91 */
+
+/*   This function decides whether or not to replace a */
+/* diagonal arc in a quadrilateral with the other diagonal. */
+/* The decision will be to swap (SWPTST = TRUE) if and only */
+/* if N4 lies above the plane (in the half-space not contain- */
+/* ing the origin) defined by (N1,N2,N3), or equivalently, if */
+/* the projection of N4 onto this plane is interior to the */
+/* circumcircle of (N1,N2,N3).  The decision will be for no */
+/* swap if the quadrilateral is not strictly convex. */
+
+
+/* On input: */
+
+/*       N1,N2,N3,N4 = Indexes of the four nodes defining the */
+/*                     quadrilateral with N1 adjacent to N2, */
+/*                     and (N1,N2,N3) in counterclockwise */
+/*                     order.  The arc connecting N1 to N2 */
+/*                     should be replaced by an arc connec- */
+/*                     ting N3 to N4 if SWPTST = TRUE.  Refer */
+/*                     to Subroutine SWAP. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the nodes.  (X(I),Y(I),Z(I)) */
+/*               define node I for I = N1, N2, N3, and N4. */
+
+/* Input parameters are not altered by this routine. */
+
+/* On output: */
+
+/*       SWPTST = TRUE if and only if the arc connecting N1 */
+/*                and N2 should be swapped for an arc con- */
+/*                necting N3 and N4. */
+
+/* Modules required by SWPTST:  None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* DX1,DY1,DZ1 = Coordinates of N4->N1 */
+/* DX2,DY2,DZ2 = Coordinates of N4->N2 */
+/* DX3,DY3,DZ3 = Coordinates of N4->N3 */
+/* X4,Y4,Z4 =    Coordinates of N4 */
+
+    /* Parameter adjustments */
+    --z__;
+    --y;
+    --x;
+
+    /* Function Body */
+    x4 = x[*n4];
+    y4 = y[*n4];
+    z4 = z__[*n4];
+    dx1 = x[*n1] - x4;
+    dx2 = x[*n2] - x4;
+    dx3 = x[*n3] - x4;
+    dy1 = y[*n1] - y4;
+    dy2 = y[*n2] - y4;
+    dy3 = y[*n3] - y4;
+    dz1 = z__[*n1] - z4;
+    dz2 = z__[*n2] - z4;
+    dz3 = z__[*n3] - z4;
+
+/* N4 lies above the plane of (N1,N2,N3) iff N3 lies above */
+/*   the plane of (N2,N1,N4) iff Det(N3-N4,N2-N4,N1-N4) = */
+/*   (N3-N4,N2-N4 X N1-N4) > 0. */
+
+    ret_val = dx3 * (dy2 * dz1 - dy1 * dz2) - dy3 * (dx2 * dz1 - dx1 * dz2) +
+	    dz3 * (dx2 * dy1 - dx1 * dy2) > 0.;
+    return ret_val;
+} /* swptst_ */
+
+/* Subroutine */ int trans_(int *n, double *rlat, double *rlon,
+	double *x, double *y, double *z__)
+{
+    /* System generated locals */
+    int i__1;
+
+    /* Local variables */
+    static int i__, nn;
+    static double phi, theta, cosphi;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   04/08/90 */
+
+/*   This subroutine transforms spherical coordinates into */
+/* Cartesian coordinates on the unit sphere for input to */
+/* Subroutine TRMESH.  Storage for X and Y may coincide with */
+/* storage for RLAT and RLON if the latter need not be saved. */
+
+
+/* On input: */
+
+/*       N = Number of nodes (points on the unit sphere) */
+/*           whose coordinates are to be transformed. */
+
+/*       RLAT = Array of length N containing latitudinal */
+/*              coordinates of the nodes in radians. */
+
+/*       RLON = Array of length N containing longitudinal */
+/*              coordinates of the nodes in radians. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       X,Y,Z = Arrays of length at least N. */
+
+/* On output: */
+
+/*       X,Y,Z = Cartesian coordinates in the range -1 to 1. */
+/*               X(I)**2 + Y(I)**2 + Z(I)**2 = 1 for I = 1 */
+/*               to N. */
+
+/* Modules required by TRANS:  None */
+
+/* Intrinsic functions called by TRANS:  COS, SIN */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* COSPHI = cos(PHI) */
+/* I =      DO-loop index */
+/* NN =     Local copy of N */
+/* PHI =    Latitude */
+/* THETA =  Longitude */
+
+    /* Parameter adjustments */
+    --z__;
+    --y;
+    --x;
+    --rlon;
+    --rlat;
+
+    /* Function Body */
+    nn = *n;
+    i__1 = nn;
+    for (i__ = 1; i__ <= i__1; ++i__)
+    {
+	    phi = rlat[i__];
+	    theta = rlon[i__];
+	    cosphi = cos(phi);
+	    x[i__] = cosphi * cos(theta);
+	    y[i__] = cosphi * sin(theta);
+	    z__[i__] = sin(phi);
+      /* L1: */
+    }
+    return 0;
+} /* trans_ */
+
+/* Subroutine */ int trfind_(int *nst, double *p, int *n,
+	double *x, double *y, double *z__, int *list, int
+	*lptr, int *lend, double *b1, double *b2, double *b3,
+	int *i1, int *i2, int *i3)
+{
+    /* Initialized data */
+
+    static int ix = 1;
+    static int iy = 2;
+    static int iz = 3;
+
+    /* System generated locals */
+    int i__1;
+    double d__1, d__2;
+
+    /* Local variables */
+    static double q[3];
+    static int n0, n1, n2, n3, n4, nf;
+    static double s12;
+    static int nl, lp;
+    static double xp, yp, zp;
+    static int n1s, n2s;
+    static double eps, tol, ptn1, ptn2;
+    static int next;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   11/30/99 */
+
+/*   This subroutine locates a point P relative to a triangu- */
+/* lation created by Subroutine TRMESH.  If P is contained in */
+/* a triangle, the three vertex indexes and barycentric coor- */
+/* dinates are returned.  Otherwise, the indexes of the */
+/* visible boundary nodes are returned. */
+
+
+/* On input: */
+
+/*       NST = Index of a node at which TRFIND begins its */
+/*             search.  Search time depends on the proximity */
+/*             of this node to P. */
+
+/*       P = Array of length 3 containing the x, y, and z */
+/*           coordinates (in that order) of the point P to be */
+/*           located. */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of the triangulation nodes (unit */
+/*               vectors).  (X(I),Y(I),Z(I)) defines node I */
+/*               for I = 1 to N. */
+
+/*       LIST,LPTR,LEND = Data structure defining the trian- */
+/*                        gulation.  Refer to Subroutine */
+/*                        TRMESH. */
+
+/* Input parameters are not altered by this routine. */
+
+/* On output: */
+
+/*       B1,B2,B3 = Unnormalized barycentric coordinates of */
+/*                  the central projection of P onto the un- */
+/*                  derlying planar triangle if P is in the */
+/*                  convex hull of the nodes.  These parame- */
+/*                  ters are not altered if I1 = 0. */
+
+/*       I1,I2,I3 = Counterclockwise-ordered vertex indexes */
+/*                  of a triangle containing P if P is con- */
+/*                  tained in a triangle.  If P is not in the */
+/*                  convex hull of the nodes, I1 and I2 are */
+/*                  the rightmost and leftmost (boundary) */
+/*                  nodes that are visible from P, and */
+/*                  I3 = 0.  (If all boundary nodes are vis- */
+/*                  ible from P, then I1 and I2 coincide.) */
+/*                  I1 = I2 = I3 = 0 if P and all of the */
+/*                  nodes are coplanar (lie on a common great */
+/*                  circle. */
+
+/* Modules required by TRFIND:  JRAND, LSTPTR, STORE */
+
+/* Intrinsic function called by TRFIND:  ABS */
+
+/* *********************************************************** */
+
+
+    /* Parameter adjustments */
+    --p;
+    --lend;
+    --z__;
+    --y;
+    --x;
+    --list;
+    --lptr;
+
+    /* Function Body */
+
+/* Local parameters: */
+
+/* EPS =      Machine precision */
+/* IX,IY,IZ = int seeds for JRAND */
+/* LP =       LIST pointer */
+/* N0,N1,N2 = Nodes in counterclockwise order defining a */
+/*              cone (with vertex N0) containing P, or end- */
+/*              points of a boundary edge such that P Right */
+/*              N1->N2 */
+/* N1S,N2S =  Initially-determined values of N1 and N2 */
+/* N3,N4 =    Nodes opposite N1->N2 and N2->N1, respectively */
+/* NEXT =     Candidate for I1 or I2 when P is exterior */
+/* NF,NL =    First and last neighbors of N0, or first */
+/*              (rightmost) and last (leftmost) nodes */
+/*              visible from P when P is exterior to the */
+/*              triangulation */
+/* PTN1 =     Scalar product <P,N1> */
+/* PTN2 =     Scalar product <P,N2> */
+/* Q =        (N2 X N1) X N2  or  N1 X (N2 X N1) -- used in */
+/*              the boundary traversal when P is exterior */
+/* S12 =      Scalar product <N1,N2> */
+/* TOL =      Tolerance (multiple of EPS) defining an upper */
+/*              bound on the magnitude of a negative bary- */
+/*              centric coordinate (B1 or B2) for P in a */
+/*              triangle -- used to avoid an infinite number */
+/*              of restarts with 0 <= B3 < EPS and B1 < 0 or */
+/*              B2 < 0 but small in magnitude */
+/* XP,YP,ZP = Local variables containing P(1), P(2), and P(3) */
+/* X0,Y0,Z0 = Dummy arguments for DET */
+/* X1,Y1,Z1 = Dummy arguments for DET */
+/* X2,Y2,Z2 = Dummy arguments for DET */
+
+/* Statement function: */
+
+/* DET(X1,...,Z0) .GE. 0 if and only if (X0,Y0,Z0) is in the */
+/*                       (closed) left hemisphere defined by */
+/*                       the plane containing (0,0,0), */
+/*                       (X1,Y1,Z1), and (X2,Y2,Z2), where */
+/*                       left is defined relative to an ob- */
+/*                       server at (X1,Y1,Z1) facing */
+/*                       (X2,Y2,Z2). */
+
+
+/* Initialize variables. */
+
+    xp = p[1];
+    yp = p[2];
+    zp = p[3];
+    n0 = *nst;
+    if (n0 < 1 || n0 > *n) {
+	n0 = jrand_(n, &ix, &iy, &iz);
+    }
+
+/* Compute the relative machine precision EPS and TOL. */
+
+    eps = 1.;
+L1:
+    eps /= 2.;
+    d__1 = eps + 1.;
+    if (store_(&d__1) > 1.) {
+	goto L1;
+    }
+    eps *= 2.;
+    tol = eps * 100.;
+
+/* Set NF and NL to the first and last neighbors of N0, and */
+/*   initialize N1 = NF. */
+
+L2:
+    lp = lend[n0];
+    nl = list[lp];
+    lp = lptr[lp];
+    nf = list[lp];
+    n1 = nf;
+
+/* Find a pair of adjacent neighbors N1,N2 of N0 that define */
+/*   a wedge containing P:  P LEFT N0->N1 and P RIGHT N0->N2. */
+
+    if (nl > 0) {
+
+/*   N0 is an interior node.  Find N1. */
+
+L3:
+	if (xp * (y[n0] * z__[n1] - y[n1] * z__[n0]) - yp * (x[n0] * z__[n1]
+		- x[n1] * z__[n0]) + zp * (x[n0] * y[n1] - x[n1] * y[n0]) <
+		0.) {
+	    lp = lptr[lp];
+	    n1 = list[lp];
+	    if (n1 == nl) {
+		goto L6;
+	    }
+	    goto L3;
+	}
+    } else {
+
+/*   N0 is a boundary node.  Test for P exterior. */
+
+	nl = -nl;
+	if (xp * (y[n0] * z__[nf] - y[nf] * z__[n0]) - yp * (x[n0] * z__[nf]
+		- x[nf] * z__[n0]) + zp * (x[n0] * y[nf] - x[nf] * y[n0]) <
+		0.) {
+
+/*   P is to the right of the boundary edge N0->NF. */
+
+	    n1 = n0;
+	    n2 = nf;
+	    goto L9;
+	}
+	if (xp * (y[nl] * z__[n0] - y[n0] * z__[nl]) - yp * (x[nl] * z__[n0]
+		- x[n0] * z__[nl]) + zp * (x[nl] * y[n0] - x[n0] * y[nl]) <
+		0.) {
+
+/*   P is to the right of the boundary edge NL->N0. */
+
+	    n1 = nl;
+	    n2 = n0;
+	    goto L9;
+	}
+    }
+
+/* P is to the left of arcs N0->N1 and NL->N0.  Set N2 to the */
+/*   next neighbor of N0 (following N1). */
+
+L4:
+    lp = lptr[lp];
+    n2 = (i__1 = list[lp], abs(i__1));
+    if (xp * (y[n0] * z__[n2] - y[n2] * z__[n0]) - yp * (x[n0] * z__[n2] - x[
+	    n2] * z__[n0]) + zp * (x[n0] * y[n2] - x[n2] * y[n0]) < 0.) {
+	goto L7;
+    }
+    n1 = n2;
+    if (n1 != nl) {
+	goto L4;
+    }
+    if (xp * (y[n0] * z__[nf] - y[nf] * z__[n0]) - yp * (x[n0] * z__[nf] - x[
+	    nf] * z__[n0]) + zp * (x[n0] * y[nf] - x[nf] * y[n0]) < 0.) {
+	goto L6;
+    }
+
+/* P is left of or on arcs N0->NB for all neighbors NB */
+/*   of N0.  Test for P = +/-N0. */
+
+    d__2 = (d__1 = x[n0] * xp + y[n0] * yp + z__[n0] * zp, abs(d__1));
+    if (store_(&d__2) < 1. - eps * 4.) {
+
+/*   All points are collinear iff P Left NB->N0 for all */
+/*     neighbors NB of N0.  Search the neighbors of N0. */
+/*     Note:  N1 = NL and LP points to NL. */
+
+L5:
+	if (xp * (y[n1] * z__[n0] - y[n0] * z__[n1]) - yp * (x[n1] * z__[n0]
+		- x[n0] * z__[n1]) + zp * (x[n1] * y[n0] - x[n0] * y[n1]) >=
+		0.) {
+	    lp = lptr[lp];
+	    n1 = (i__1 = list[lp], abs(i__1));
+	    if (n1 == nl) {
+		goto L14;
+	    }
+	    goto L5;
+	}
+    }
+
+/* P is to the right of N1->N0, or P = +/-N0.  Set N0 to N1 */
+/*   and start over. */
+
+    n0 = n1;
+    goto L2;
+
+/* P is between arcs N0->N1 and N0->NF. */
+
+L6:
+    n2 = nf;
+
+/* P is contained in a wedge defined by geodesics N0-N1 and */
+/*   N0-N2, where N1 is adjacent to N2.  Save N1 and N2 to */
+/*   test for cycling. */
+
+L7:
+    n3 = n0;
+    n1s = n1;
+    n2s = n2;
+
+/* Top of edge-hopping loop: */
+
+L8:
+    *b3 = xp * (y[n1] * z__[n2] - y[n2] * z__[n1]) - yp * (x[n1] * z__[n2] -
+	    x[n2] * z__[n1]) + zp * (x[n1] * y[n2] - x[n2] * y[n1]);
+    if (*b3 < 0.) {
+
+/*   Set N4 to the first neighbor of N2 following N1 (the */
+/*     node opposite N2->N1) unless N1->N2 is a boundary arc. */
+
+	lp = lstptr_(&lend[n2], &n1, &list[1], &lptr[1]);
+	if (list[lp] < 0) {
+	    goto L9;
+	}
+	lp = lptr[lp];
+	n4 = (i__1 = list[lp], abs(i__1));
+
+/*   Define a new arc N1->N2 which intersects the geodesic */
+/*     N0-P. */
+
+	if (xp * (y[n0] * z__[n4] - y[n4] * z__[n0]) - yp * (x[n0] * z__[n4]
+		- x[n4] * z__[n0]) + zp * (x[n0] * y[n4] - x[n4] * y[n0]) <
+		0.) {
+	    n3 = n2;
+	    n2 = n4;
+	    n1s = n1;
+	    if (n2 != n2s && n2 != n0) {
+		goto L8;
+	    }
+	} else {
+	    n3 = n1;
+	    n1 = n4;
+	    n2s = n2;
+	    if (n1 != n1s && n1 != n0) {
+		goto L8;
+	    }
+	}
+
+/*   The starting node N0 or edge N1-N2 was encountered */
+/*     again, implying a cycle (infinite loop).  Restart */
+/*     with N0 randomly selected. */
+
+	n0 = jrand_(n, &ix, &iy, &iz);
+	goto L2;
+    }
+
+/* P is in (N1,N2,N3) unless N0, N1, N2, and P are collinear */
+/*   or P is close to -N0. */
+
+    if (*b3 >= eps) {
+
+/*   B3 .NE. 0. */
+
+	*b1 = xp * (y[n2] * z__[n3] - y[n3] * z__[n2]) - yp * (x[n2] * z__[n3]
+		 - x[n3] * z__[n2]) + zp * (x[n2] * y[n3] - x[n3] * y[n2]);
+	*b2 = xp * (y[n3] * z__[n1] - y[n1] * z__[n3]) - yp * (x[n3] * z__[n1]
+		 - x[n1] * z__[n3]) + zp * (x[n3] * y[n1] - x[n1] * y[n3]);
+	if (*b1 < -tol || *b2 < -tol) {
+
+/*   Restart with N0 randomly selected. */
+
+	    n0 = jrand_(n, &ix, &iy, &iz);
+	    goto L2;
+	}
+    } else {
+
+/*   B3 = 0 and thus P lies on N1->N2. Compute */
+/*     B1 = Det(P,N2 X N1,N2) and B2 = Det(P,N1,N2 X N1). */
+
+	*b3 = 0.;
+	s12 = x[n1] * x[n2] + y[n1] * y[n2] + z__[n1] * z__[n2];
+	ptn1 = xp * x[n1] + yp * y[n1] + zp * z__[n1];
+	ptn2 = xp * x[n2] + yp * y[n2] + zp * z__[n2];
+	*b1 = ptn1 - s12 * ptn2;
+	*b2 = ptn2 - s12 * ptn1;
+	if (*b1 < -tol || *b2 < -tol) {
+
+/*   Restart with N0 randomly selected. */
+
+	    n0 = jrand_(n, &ix, &iy, &iz);
+	    goto L2;
+	}
+    }
+
+/* P is in (N1,N2,N3). */
+
+    *i1 = n1;
+    *i2 = n2;
+    *i3 = n3;
+    if (*b1 < 0.) {
+	*b1 = 0.;
+    }
+    if (*b2 < 0.) {
+	*b2 = 0.;
+    }
+    return 0;
+
+/* P Right N1->N2, where N1->N2 is a boundary edge. */
+/*   Save N1 and N2, and set NL = 0 to indicate that */
+/*   NL has not yet been found. */
+
+L9:
+    n1s = n1;
+    n2s = n2;
+    nl = 0;
+
+/*           Counterclockwise Boundary Traversal: */
+
+L10:
+    lp = lend[n2];
+    lp = lptr[lp];
+    next = list[lp];
+    if (xp * (y[n2] * z__[next] - y[next] * z__[n2]) - yp * (x[n2] * z__[next]
+	     - x[next] * z__[n2]) + zp * (x[n2] * y[next] - x[next] * y[n2])
+	    >= 0.) {
+
+/*   N2 is the rightmost visible node if P Forward N2->N1 */
+/*     or NEXT Forward N2->N1.  Set Q to (N2 X N1) X N2. */
+
+	s12 = x[n1] * x[n2] + y[n1] * y[n2] + z__[n1] * z__[n2];
+	q[0] = x[n1] - s12 * x[n2];
+	q[1] = y[n1] - s12 * y[n2];
+	q[2] = z__[n1] - s12 * z__[n2];
+	if (xp * q[0] + yp * q[1] + zp * q[2] >= 0.) {
+	    goto L11;
+	}
+	if (x[next] * q[0] + y[next] * q[1] + z__[next] * q[2] >= 0.) {
+	    goto L11;
+	}
+
+/*   N1, N2, NEXT, and P are nearly collinear, and N2 is */
+/*     the leftmost visible node. */
+
+	nl = n2;
+    }
+
+/* Bottom of counterclockwise loop: */
+
+    n1 = n2;
+    n2 = next;
+    if (n2 != n1s) {
+	goto L10;
+    }
+
+/* All boundary nodes are visible from P. */
+
+    *i1 = n1s;
+    *i2 = n1s;
+    *i3 = 0;
+    return 0;
+
+/* N2 is the rightmost visible node. */
+
+L11:
+    nf = n2;
+    if (nl == 0) {
+
+/* Restore initial values of N1 and N2, and begin the search */
+/*   for the leftmost visible node. */
+
+	n2 = n2s;
+	n1 = n1s;
+
+/*           Clockwise Boundary Traversal: */
+
+L12:
+	lp = lend[n1];
+	next = -list[lp];
+	if (xp * (y[next] * z__[n1] - y[n1] * z__[next]) - yp * (x[next] *
+		z__[n1] - x[n1] * z__[next]) + zp * (x[next] * y[n1] - x[n1] *
+		 y[next]) >= 0.) {
+
+/*   N1 is the leftmost visible node if P or NEXT is */
+/*     forward of N1->N2.  Compute Q = N1 X (N2 X N1). */
+
+	    s12 = x[n1] * x[n2] + y[n1] * y[n2] + z__[n1] * z__[n2];
+	    q[0] = x[n2] - s12 * x[n1];
+	    q[1] = y[n2] - s12 * y[n1];
+	    q[2] = z__[n2] - s12 * z__[n1];
+	    if (xp * q[0] + yp * q[1] + zp * q[2] >= 0.) {
+		goto L13;
+	    }
+	    if (x[next] * q[0] + y[next] * q[1] + z__[next] * q[2] >= 0.) {
+		goto L13;
+	    }
+
+/*   P, NEXT, N1, and N2 are nearly collinear and N1 is the */
+/*     rightmost visible node. */
+
+	    nf = n1;
+	}
+
+/* Bottom of clockwise loop: */
+
+	n2 = n1;
+	n1 = next;
+	if (n1 != n1s) {
+	    goto L12;
+	}
+
+/* All boundary nodes are visible from P. */
+
+	*i1 = n1;
+	*i2 = n1;
+	*i3 = 0;
+	return 0;
+
+/* N1 is the leftmost visible node. */
+
+L13:
+	nl = n1;
+    }
+
+/* NF and NL have been found. */
+
+    *i1 = nf;
+    *i2 = nl;
+    *i3 = 0;
+    return 0;
+
+/* All points are collinear (coplanar). */
+
+L14:
+    *i1 = 0;
+    *i2 = 0;
+    *i3 = 0;
+    return 0;
+} /* trfind_ */
+
+/* Subroutine */ int trlist_(int *n, int *list, int *lptr,
+	int *lend, int *nrow, int *nt, int *ltri, int *
+	ier)
+{
+    /* System generated locals */
+    int ltri_dim1, ltri_offset, i__1, i__2;
+
+    /* Local variables */
+    static int i__, j, i1, i2, i3, n1, n2, n3, ka, kn, lp, kt, nm2, lp2,
+	    lpl, isv;
+    static int arcs;
+    static int lpln1;
+
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/20/96 */
+
+/*   This subroutine converts a triangulation data structure */
+/* from the linked list created by Subroutine TRMESH to a */
+/* triangle list. */
+
+/* On input: */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+
+/*       LIST,LPTR,LEND = Linked list data structure defin- */
+/*                        ing the triangulation.  Refer to */
+/*                        Subroutine TRMESH. */
+
+/*       NROW = Number of rows (entries per triangle) re- */
+/*              served for the triangle list LTRI.  The value */
+/*              must be 6 if only the vertex indexes and */
+/*              neighboring triangle indexes are to be */
+/*              stored, or 9 if arc indexes are also to be */
+/*              assigned and stored.  Refer to LTRI. */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LTRI = int array of length at least NROW*NT, */
+/*              where NT is at most 2N-4.  (A sufficient */
+/*              length is 12N if NROW=6 or 18N if NROW=9.) */
+
+/* On output: */
+
+/*       NT = Number of triangles in the triangulation unless */
+/*            IER .NE. 0, in which case NT = 0.  NT = 2N-NB-2 */
+/*            if NB .GE. 3 or 2N-4 if NB = 0, where NB is the */
+/*            number of boundary nodes. */
+
+/*       LTRI = NROW by NT array whose J-th column contains */
+/*              the vertex nodal indexes (first three rows), */
+/*              neighboring triangle indexes (second three */
+/*              rows), and, if NROW = 9, arc indexes (last */
+/*              three rows) associated with triangle J for */
+/*              J = 1,...,NT.  The vertices are ordered */
+/*              counterclockwise with the first vertex taken */
+/*              to be the one with smallest index.  Thus, */
+/*              LTRI(2,J) and LTRI(3,J) are larger than */
+/*              LTRI(1,J) and index adjacent neighbors of */
+/*              node LTRI(1,J).  For I = 1,2,3, LTRI(I+3,J) */
+/*              and LTRI(I+6,J) index the triangle and arc, */
+/*              respectively, which are opposite (not shared */
+/*              by) node LTRI(I,J), with LTRI(I+3,J) = 0 if */
+/*              LTRI(I+6,J) indexes a boundary arc.  Vertex */
+/*              indexes range from 1 to N, triangle indexes */
+/*              from 0 to NT, and, if included, arc indexes */
+/*              from 1 to NA, where NA = 3N-NB-3 if NB .GE. 3 */
+/*              or 3N-6 if NB = 0.  The triangles are or- */
+/*              dered on first (smallest) vertex indexes. */
+
+/*       IER = Error indicator. */
+/*             IER = 0 if no errors were encountered. */
+/*             IER = 1 if N or NROW is outside its valid */
+/*                     range on input. */
+/*             IER = 2 if the triangulation data structure */
+/*                     (LIST,LPTR,LEND) is invalid.  Note, */
+/*                     however, that these arrays are not */
+/*                     completely tested for validity. */
+
+/* Modules required by TRLIST:  None */
+
+/* Intrinsic function called by TRLIST:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* ARCS =     int variable with value TRUE iff are */
+/*              indexes are to be stored */
+/* I,J =      LTRI row indexes (1 to 3) associated with */
+/*              triangles KT and KN, respectively */
+/* I1,I2,I3 = Nodal indexes of triangle KN */
+/* ISV =      Variable used to permute indexes I1,I2,I3 */
+/* KA =       Arc index and number of currently stored arcs */
+/* KN =       Index of the triangle that shares arc I1-I2 */
+/*              with KT */
+/* KT =       Triangle index and number of currently stored */
+/*              triangles */
+/* LP =       LIST pointer */
+/* LP2 =      Pointer to N2 as a neighbor of N1 */
+/* LPL =      Pointer to the last neighbor of I1 */
+/* LPLN1 =    Pointer to the last neighbor of N1 */
+/* N1,N2,N3 = Nodal indexes of triangle KT */
+/* NM2 =      N-2 */
+
+
+/* Test for invalid input parameters. */
+
+    /* Parameter adjustments */
+    --lend;
+    --list;
+    --lptr;
+    ltri_dim1 = *nrow;
+    ltri_offset = 1 + ltri_dim1;
+    ltri -= ltri_offset;
+
+    /* Function Body */
+    if (*n < 3 || (*nrow != 6 && *nrow != 9)) {
+	goto L11;
+    }
+
+/* Initialize parameters for loop on triangles KT = (N1,N2, */
+/*   N3), where N1 < N2 and N1 < N3. */
+
+/*   ARCS = TRUE iff arc indexes are to be stored. */
+/*   KA,KT = Numbers of currently stored arcs and triangles. */
+/*   NM2 = Upper bound on candidates for N1. */
+
+    arcs = *nrow == 9;
+    ka = 0;
+    kt = 0;
+    nm2 = *n - 2;
+
+/* Loop on nodes N1. */
+
+    i__1 = nm2;
+    for (n1 = 1; n1 <= i__1; ++n1) {
+
+/* Loop on pairs of adjacent neighbors (N2,N3).  LPLN1 points */
+/*   to the last neighbor of N1, and LP2 points to N2. */
+
+	lpln1 = lend[n1];
+	lp2 = lpln1;
+L1:
+	lp2 = lptr[lp2];
+	n2 = list[lp2];
+	lp = lptr[lp2];
+	n3 = (i__2 = list[lp], abs(i__2));
+	if (n2 < n1 || n3 < n1) {
+	    goto L8;
+	}
+
+/* Add a new triangle KT = (N1,N2,N3). */
+
+	++kt;
+	ltri[kt * ltri_dim1 + 1] = n1;
+	ltri[kt * ltri_dim1 + 2] = n2;
+	ltri[kt * ltri_dim1 + 3] = n3;
+
+/* Loop on triangle sides (I2,I1) with neighboring triangles */
+/*   KN = (I1,I2,I3). */
+
+	for (i__ = 1; i__ <= 3; ++i__) {
+	    if (i__ == 1) {
+		i1 = n3;
+		i2 = n2;
+	    } else if (i__ == 2) {
+		i1 = n1;
+		i2 = n3;
+	    } else {
+		i1 = n2;
+		i2 = n1;
+	    }
+
+/* Set I3 to the neighbor of I1 that follows I2 unless */
+/*   I2->I1 is a boundary arc. */
+
+	    lpl = lend[i1];
+	    lp = lptr[lpl];
+L2:
+	    if (list[lp] == i2) {
+		goto L3;
+	    }
+	    lp = lptr[lp];
+	    if (lp != lpl) {
+		goto L2;
+	    }
+
+/*   I2 is the last neighbor of I1 unless the data structure */
+/*     is invalid.  Bypass the search for a neighboring */
+/*     triangle if I2->I1 is a boundary arc. */
+
+	    if ((i__2 = list[lp], abs(i__2)) != i2) {
+		goto L12;
+	    }
+	    kn = 0;
+	    if (list[lp] < 0) {
+		goto L6;
+	    }
+
+/*   I2->I1 is not a boundary arc, and LP points to I2 as */
+/*     a neighbor of I1. */
+
+L3:
+	    lp = lptr[lp];
+	    i3 = (i__2 = list[lp], abs(i__2));
+
+/* Find J such that LTRI(J,KN) = I3 (not used if KN > KT), */
+/*   and permute the vertex indexes of KN so that I1 is */
+/*   smallest. */
+
+	    if (i1 < i2 && i1 < i3) {
+		j = 3;
+	    } else if (i2 < i3) {
+		j = 2;
+		isv = i1;
+		i1 = i2;
+		i2 = i3;
+		i3 = isv;
+	    } else {
+		j = 1;
+		isv = i1;
+		i1 = i3;
+		i3 = i2;
+		i2 = isv;
+	    }
+
+/* Test for KN > KT (triangle index not yet assigned). */
+
+	    if (i1 > n1) {
+		goto L7;
+	    }
+
+/* Find KN, if it exists, by searching the triangle list in */
+/*   reverse order. */
+
+	    for (kn = kt - 1; kn >= 1; --kn) {
+		if (ltri[kn * ltri_dim1 + 1] == i1 && ltri[kn * ltri_dim1 + 2]
+			 == i2 && ltri[kn * ltri_dim1 + 3] == i3) {
+		    goto L5;
+		}
+/* L4: */
+	    }
+	    goto L7;
+
+/* Store KT as a neighbor of KN. */
+
+L5:
+	    ltri[j + 3 + kn * ltri_dim1] = kt;
+
+/* Store KN as a neighbor of KT, and add a new arc KA. */
+
+L6:
+	    ltri[i__ + 3 + kt * ltri_dim1] = kn;
+	    if (arcs) {
+		++ka;
+		ltri[i__ + 6 + kt * ltri_dim1] = ka;
+		if (kn != 0) {
+		    ltri[j + 6 + kn * ltri_dim1] = ka;
+		}
+	    }
+L7:
+	    ;
+	}
+
+/* Bottom of loop on triangles. */
+
+L8:
+	if (lp2 != lpln1) {
+	    goto L1;
+	}
+/* L9: */
+    }
+
+/* No errors encountered. */
+
+    *nt = kt;
+    *ier = 0;
+    return 0;
+
+/* Invalid input parameter. */
+
+L11:
+    *nt = 0;
+    *ier = 1;
+    return 0;
+
+/* Invalid triangulation data structure:  I1 is a neighbor of */
+/*   I2, but I2 is not a neighbor of I1. */
+
+L12:
+    *nt = 0;
+    *ier = 2;
+    return 0;
+} /* trlist_ */
+
+/* Subroutine */ int trmesh_(int *n, double *x, double *y,
+	double *z__, int *list, int *lptr, int *lend, int
+	*lnew, int *near__, int *next, double *dist, int *ier)
+{
+    /* System generated locals */
+    int i__1, i__2;
+
+    /* Local variables */
+    static double d__;
+    static int i__, j, k;
+    static double d1, d2, d3;
+    static int i0, lp, nn, lpl;
+    static int nexti;
+
+/* *********************************************************** */
+
+/*                                              From STRIPACK */
+/*                                            Robert J. Renka */
+/*                                  Dept. of Computer Science */
+/*                                       Univ. of North Texas */
+/*                                           renka at cs.unt.edu */
+/*                                                   07/08/99 */
+
+/*   This subroutine creates a Delaunay triangulation of a */
+/* set of N arbitrarily distributed points, referred to as */
+/* nodes, on the surface of the unit sphere.  The Delaunay */
+/* triangulation is defined as a set of (spherical) triangles */
+/* with the following five properties: */
+
+/*  1)  The triangle vertices are nodes. */
+/*  2)  No triangle contains a node other than its vertices. */
+/*  3)  The interiors of the triangles are pairwise disjoint. */
+/*  4)  The union of triangles is the convex hull of the set */
+/*        of nodes (the smallest convex set that contains */
+/*        the nodes).  If the nodes are not contained in a */
+/*        single hemisphere, their convex hull is the en- */
+/*        tire sphere and there are no boundary nodes. */
+/*        Otherwise, there are at least three boundary nodes. */
+/*  5)  The interior of the circumcircle of each triangle */
+/*        contains no node. */
+
+/* The first four properties define a triangulation, and the */
+/* last property results in a triangulation which is as close */
+/* as possible to equiangular in a certain sense and which is */
+/* uniquely defined unless four or more nodes lie in a common */
+/* plane.  This property makes the triangulation well-suited */
+/* for solving closest-point problems and for triangle-based */
+/* interpolation. */
+
+/*   Provided the nodes are randomly ordered, the algorithm */
+/* has expected time complexity O(N*log(N)) for most nodal */
+/* distributions.  Note, however, that the complexity may be */
+/* as high as O(N**2) if, for example, the nodes are ordered */
+/* on increasing latitude. */
+
+/*   Spherical coordinates (latitude and longitude) may be */
+/* converted to Cartesian coordinates by Subroutine TRANS. */
+
+/*   The following is a list of the software package modules */
+/* which a user may wish to call directly: */
+
+/*  ADDNOD - Updates the triangulation by appending a new */
+/*             node. */
+
+/*  AREAS  - Returns the area of a spherical triangle. */
+
+/*  BNODES - Returns an array containing the indexes of the */
+/*             boundary nodes (if any) in counterclockwise */
+/*             order.  Counts of boundary nodes, triangles, */
+/*             and arcs are also returned. */
+
+/*  CIRCUM - Returns the circumcenter of a spherical trian- */
+/*             gle. */
+
+/*  CRLIST - Returns the set of triangle circumcenters */
+/*             (Voronoi vertices) and circumradii associated */
+/*             with a triangulation. */
+
+/*  DELARC - Deletes a boundary arc from a triangulation. */
+
+/*  DELNOD - Updates the triangulation with a nodal deletion. */
+
+/*  EDGE   - Forces an arbitrary pair of nodes to be connec- */
+/*             ted by an arc in the triangulation. */
+
+/*  GETNP  - Determines the ordered sequence of L closest */
+/*             nodes to a given node, along with the associ- */
+/*             ated distances. */
+
+/*  INSIDE - Locates a point relative to a polygon on the */
+/*             surface of the sphere. */
+
+/*  INTRSC - Returns the point of intersection between a */
+/*             pair of great circle arcs. */
+
+/*  JRAND  - Generates a uniformly distributed pseudo-random */
+/*             int. */
+
+/*  LEFT   - Locates a point relative to a great circle. */
+
+/*  NEARND - Returns the index of the nearest node to an */
+/*             arbitrary point, along with its squared */
+/*             distance. */
+
+/*  SCOORD - Converts a point from Cartesian coordinates to */
+/*             spherical coordinates. */
+
+/*  STORE  - Forces a value to be stored in main memory so */
+/*             that the precision of floating point numbers */
+/*             in memory locations rather than registers is */
+/*             computed. */
+
+/*  TRANS  - Transforms spherical coordinates into Cartesian */
+/*             coordinates on the unit sphere for input to */
+/*             Subroutine TRMESH. */
+
+/*  TRLIST - Converts the triangulation data structure to a */
+/*             triangle list more suitable for use in a fin- */
+/*             ite element code. */
+
+/*  TRLPRT - Prints the triangle list created by Subroutine */
+/*             TRLIST. */
+
+/*  TRMESH - Creates a Delaunay triangulation of a set of */
+/*             nodes. */
+
+/*  TRPLOT - Creates a level-2 Encapsulated Postscript (EPS) */
+/*             file containing a triangulation plot. */
+
+/*  TRPRNT - Prints the triangulation data structure and, */
+/*             optionally, the nodal coordinates. */
+
+/*  VRPLOT - Creates a level-2 Encapsulated Postscript (EPS) */
+/*             file containing a Voronoi diagram plot. */
+
+
+/* On input: */
+
+/*       N = Number of nodes in the triangulation.  N .GE. 3. */
+
+/*       X,Y,Z = Arrays of length N containing the Cartesian */
+/*               coordinates of distinct nodes.  (X(K),Y(K), */
+/*               Z(K)) is referred to as node K, and K is re- */
+/*               ferred to as a nodal index.  It is required */
+/*               that X(K)**2 + Y(K)**2 + Z(K)**2 = 1 for all */
+/*               K.  The first three nodes must not be col- */
+/*               linear (lie on a common great circle). */
+
+/* The above parameters are not altered by this routine. */
+
+/*       LIST,LPTR = Arrays of length at least 6N-12. */
+
+/*       LEND = Array of length at least N. */
+
+/*       NEAR,NEXT,DIST = Work space arrays of length at */
+/*                        least N.  The space is used to */
+/*                        efficiently determine the nearest */
+/*                        triangulation node to each un- */
+/*                        processed node for use by ADDNOD. */
+
+/* On output: */
+
+/*       LIST = Set of nodal indexes which, along with LPTR, */
+/*              LEND, and LNEW, define the triangulation as a */
+/*              set of N adjacency lists -- counterclockwise- */
+/*              ordered sequences of neighboring nodes such */
+/*              that the first and last neighbors of a bound- */
+/*              ary node are boundary nodes (the first neigh- */
+/*              bor of an interior node is arbitrary).  In */
+/*              order to distinguish between interior and */
+/*              boundary nodes, the last neighbor of each */
+/*              boundary node is represented by the negative */
+/*              of its index. */
+
+/*       LPTR = Set of pointers (LIST indexes) in one-to-one */
+/*              correspondence with the elements of LIST. */
+/*              LIST(LPTR(I)) indexes the node which follows */
+/*              LIST(I) in cyclical counterclockwise order */
+/*              (the first neighbor follows the last neigh- */
+/*              bor). */
+
+/*       LEND = Set of pointers to adjacency lists.  LEND(K) */
+/*              points to the last neighbor of node K for */
+/*              K = 1,...,N.  Thus, LIST(LEND(K)) < 0 if and */
+/*              only if K is a boundary node. */
+
+/*       LNEW = Pointer to the first empty location in LIST */
+/*              and LPTR (list length plus one).  LIST, LPTR, */
+/*              LEND, and LNEW are not altered if IER < 0, */
+/*              and are incomplete if IER > 0. */
+
+/*       NEAR,NEXT,DIST = Garbage. */
+
+/*       IER = Error indicator: */
+/*             IER =  0 if no errors were encountered. */
+/*             IER = -1 if N < 3 on input. */
+/*             IER = -2 if the first three nodes are */
+/*                      collinear. */
+/*             IER =  L if nodes L and M coincide for some */
+/*                      M > L.  The data structure represents */
+/*                      a triangulation of nodes 1 to M-1 in */
+/*                      this case. */
+
+/* Modules required by TRMESH:  ADDNOD, BDYADD, COVSPH, */
+/*                                INSERT, INTADD, JRAND, */
+/*                                LEFT, LSTPTR, STORE, SWAP, */
+/*                                SWPTST, TRFIND */
+
+/* Intrinsic function called by TRMESH:  ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* D =        (Negative cosine of) distance from node K to */
+/*              node I */
+/* D1,D2,D3 = Distances from node K to nodes 1, 2, and 3, */
+/*              respectively */
+/* I,J =      Nodal indexes */
+/* I0 =       Index of the node preceding I in a sequence of */
+/*              unprocessed nodes:  I = NEXT(I0) */
+/* K =        Index of node to be added and DO-loop index: */
+/*              K > 3 */
+/* LP =       LIST index (pointer) of a neighbor of K */
+/* LPL =      Pointer to the last neighbor of K */
+/* NEXTI =    NEXT(I) */
+/* NN =       Local copy of N */
+
+    /* Parameter adjustments */
+    --dist;
+    --next;
+    --near__;
+    --lend;
+    --z__;
+    --y;
+    --x;
+    --list;
+    --lptr;
+
+    /* Function Body */
+    nn = *n;
+    if (nn < 3) {
+	*ier = -1;
+	return 0;
+    }
+
+/* Store the first triangle in the linked list. */
+
+    if (! left_(&x[1], &y[1], &z__[1], &x[2], &y[2], &z__[2], &x[3], &y[3], &
+	    z__[3])) {
+
+/*   The first triangle is (3,2,1) = (2,1,3) = (1,3,2). */
+
+	list[1] = 3;
+	lptr[1] = 2;
+	list[2] = -2;
+	lptr[2] = 1;
+	lend[1] = 2;
+
+	list[3] = 1;
+	lptr[3] = 4;
+	list[4] = -3;
+	lptr[4] = 3;
+	lend[2] = 4;
+
+	list[5] = 2;
+	lptr[5] = 6;
+	list[6] = -1;
+	lptr[6] = 5;
+	lend[3] = 6;
+
+    } else if (! left_(&x[2], &y[2], &z__[2], &x[1], &y[1], &z__[1], &x[3], &
+	    y[3], &z__[3])) {
+
+/*   The first triangle is (1,2,3):  3 Strictly Left 1->2, */
+/*     i.e., node 3 lies in the left hemisphere defined by */
+/*     arc 1->2. */
+
+	list[1] = 2;
+	lptr[1] = 2;
+	list[2] = -3;
+	lptr[2] = 1;
+	lend[1] = 2;
+
+	list[3] = 3;
+	lptr[3] = 4;
+	list[4] = -1;
+	lptr[4] = 3;
+	lend[2] = 4;
+
+	list[5] = 1;
+	lptr[5] = 6;
+	list[6] = -2;
+	lptr[6] = 5;
+	lend[3] = 6;
+
+    } else {
+
+/*   The first three nodes are collinear. */
+
+	*ier = -2;
+	return 0;
+    }
+
+/* Initialize LNEW and test for N = 3. */
+
+    *lnew = 7;
+    if (nn == 3) {
+	*ier = 0;
+	return 0;
+    }
+
+/* A nearest-node data structure (NEAR, NEXT, and DIST) is */
+/*   used to obtain an expected-time (N*log(N)) incremental */
+/*   algorithm by enabling constant search time for locating */
+/*   each new node in the triangulation. */
+
+/* For each unprocessed node K, NEAR(K) is the index of the */
+/*   triangulation node closest to K (used as the starting */
+/*   point for the search in Subroutine TRFIND) and DIST(K) */
+/*   is an increasing function of the arc length (angular */
+/*   distance) between nodes K and NEAR(K):  -Cos(a) for arc */
+/*   length a. */
+
+/* Since it is necessary to efficiently find the subset of */
+/*   unprocessed nodes associated with each triangulation */
+/*   node J (those that have J as their NEAR entries), the */
+/*   subsets are stored in NEAR and NEXT as follows:  for */
+/*   each node J in the triangulation, I = NEAR(J) is the */
+/*   first unprocessed node in J's set (with I = 0 if the */
+/*   set is empty), L = NEXT(I) (if I > 0) is the second, */
+/*   NEXT(L) (if L > 0) is the third, etc.  The nodes in each */
+/*   set are initially ordered by increasing indexes (which */
+/*   maximizes efficiency) but that ordering is not main- */
+/*   tained as the data structure is updated. */
+
+/* Initialize the data structure for the single triangle. */
+
+    near__[1] = 0;
+    near__[2] = 0;
+    near__[3] = 0;
+    for (k = nn; k >= 4; --k) {
+	d1 = -(x[k] * x[1] + y[k] * y[1] + z__[k] * z__[1]);
+	d2 = -(x[k] * x[2] + y[k] * y[2] + z__[k] * z__[2]);
+	d3 = -(x[k] * x[3] + y[k] * y[3] + z__[k] * z__[3]);
+	if (d1 <= d2 && d1 <= d3) {
+	    near__[k] = 1;
+	    dist[k] = d1;
+	    next[k] = near__[1];
+	    near__[1] = k;
+	} else if (d2 <= d1 && d2 <= d3) {
+	    near__[k] = 2;
+	    dist[k] = d2;
+	    next[k] = near__[2];
+	    near__[2] = k;
+	} else {
+	    near__[k] = 3;
+	    dist[k] = d3;
+	    next[k] = near__[3];
+	    near__[3] = k;
+	}
+/* L1: */
+    }
+
+/* Add the remaining nodes */
+
+    i__1 = nn;
+    for (k = 4; k <= i__1; ++k) {
+	addnod_(&near__[k], &k, &x[1], &y[1], &z__[1], &list[1], &lptr[1], &
+		lend[1], lnew, ier);
+	if (*ier != 0) {
+	    return 0;
+	}
+
+/* Remove K from the set of unprocessed nodes associated */
+/*   with NEAR(K). */
+
+	i__ = near__[k];
+	if (near__[i__] == k) {
+	    near__[i__] = next[k];
+	} else {
+	    i__ = near__[i__];
+L2:
+	    i0 = i__;
+	    i__ = next[i0];
+	    if (i__ != k) {
+		goto L2;
+	    }
+	    next[i0] = next[k];
+	}
+	near__[k] = 0;
+
+/* Loop on neighbors J of node K. */
+
+	lpl = lend[k];
+	lp = lpl;
+L3:
+	lp = lptr[lp];
+	j = (i__2 = list[lp], abs(i__2));
+
+/* Loop on elements I in the sequence of unprocessed nodes */
+/*   associated with J:  K is a candidate for replacing J */
+/*   as the nearest triangulation node to I.  The next value */
+/*   of I in the sequence, NEXT(I), must be saved before I */
+/*   is moved because it is altered by adding I to K's set. */
+
+	i__ = near__[j];
+L4:
+	if (i__ == 0) {
+	    goto L5;
+	}
+	nexti = next[i__];
+
+/* Test for the distance from I to K less than the distance */
+/*   from I to J. */
+
+	d__ = -(x[i__] * x[k] + y[i__] * y[k] + z__[i__] * z__[k]);
+	if (d__ < dist[i__]) {
+
+/* Replace J by K as the nearest triangulation node to I: */
+/*   update NEAR(I) and DIST(I), and remove I from J's set */
+/*   of unprocessed nodes and add it to K's set. */
+
+	    near__[i__] = k;
+	    dist[i__] = d__;
+	    if (i__ == near__[j]) {
+		near__[j] = nexti;
+	    } else {
+		next[i0] = nexti;
+	    }
+	    next[i__] = near__[k];
+	    near__[k] = i__;
+	} else {
+	    i0 = i__;
+	}
+
+/* Bottom of loop on I. */
+
+	i__ = nexti;
+	goto L4;
+
+/* Bottom of loop on neighbors J. */
+
+L5:
+	if (lp != lpl) {
+	    goto L3;
+	}
+/* L6: */
+    }
+    return 0;
+} /* trmesh_ */
diff --git a/3rdparty/cstripack/cstripack.h b/3rdparty/cstripack/cstripack.h
new file mode 100644
index 0000000..7ef8d1f
--- /dev/null
+++ b/3rdparty/cstripack/cstripack.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#ifndef NFFT3_H
+#define NFFT3_H
+
+/* #include <f2c.h> */
+
+int addnod_(int *nst, int *k, double *x, double *y, double *z__,
+  int *list, int *lptr, int *lend, int *lnew, int *ier);
+
+double areas_(double *v1, double *v2, double *v3);
+
+int bdyadd_(int *kk, int *i1, int *i2, int *list, int *lptr,
+  int *lend, int *lnew);
+
+int bnodes_(int *n, int *list, int *lptr, int *lend,
+  int *nodes, int *nb, int *na, int *nt);
+
+int circum_(double *v1, double *v2, double *v3, double *c__, int *ier);
+
+int covsph_(int *kk, int *n0, int *list, int *lptr,
+  int *lend, int *lnew);
+
+int crlist_(int *n, int *ncol, double *x, double *y, double *z__,
+  int *list, int *lend, int *lptr, int *lnew, int *ltri,
+  int *listc, int *nb, double *xc, double *yc, double *zc, double *rc,
+  int *ier);
+
+int delarc_(int *n, int *io1, int *io2, int * list,
+  int *lptr, int *lend, int *lnew, int *ier);
+
+int delnb_(int *n0, int *nb, int *n, int *list,
+  int *lptr, int *lend, int *lnew, int *lph);
+
+int delnod_(int *k, int *n, double *x, double *y, double *z__, int *list,
+ int *lptr, int *lend, int *lnew, int *lwk, int *iwk,
+ int *ier);
+
+int edge_(int *in1, int *in2, double *x, double *y, double *z__, int *lwk,
+  int *iwk, int *list, int *lptr, int *lend, int *ier);
+
+int getnp_(double *x, double *y, double *z__, int *list, int *lptr,
+  int *lend, int *l, int *npts, double *df, int *ier);
+
+int insert_(int *k, int *lp, int *list, int *lptr,
+  int *lnew);
+
+int inside_(double *p, int *lv, double *xv, double *yv, double *zv, int *
+  nv, int *listv, int *ier);
+
+int intadd_(int *kk, int *i1, int *i2, int *i3, int *list,
+  int *lptr, int *lend, int *lnew);
+
+int intrsc_(double *p1, double *p2, double *cn, double *p, int *ier);
+
+int jrand_(int *n, int *ix, int *iy, int *iz);
+
+int left_(double *x1, double *y1, double *z1, double *x2, double *y2, double *z2,
+  double *x0, double *y0, double *z0);
+
+int lstptr_(int *lpl, int *nb, int *list, int *lptr);
+
+int nbcnt_(int *lpl, int *lptr);
+
+int nearnd_(double *p, int *ist, int *n, double *x, double *y,
+  double *z__, int *list, int *lptr, int *lend, double *al);
+
+int optim_(double *x, double *y, double *z__, int *na, int *list,
+  int *lptr, int *lend, int *nit, int *iwk, int *ier);
+
+int scoord_(double *px, double *py, double *pz, double *plat, double *plon, double *pnrm);
+
+double store_(double *x);
+
+int swap_(int *in1, int *in2, int *io1, int *	io2,
+  int *list, int *lptr, int *lend, int *lp21);
+
+int swptst_(int *n1, int *n2, int *n3, int *n4, double *x,
+  double *y, double *z__);
+
+int trans_(int *n, double *rlat, double *rlon, double *x, double *y, double *z__);
+
+int trfind_(int *nst, double *p, int *n, double *x, double *y, double *z__,
+  int *list, int *lptr, int *lend, double *b1, double *b2,
+  double *b3, int *i1, int *i2, int *i3);
+
+int trlist_(int *n, int *list, int *lptr, int *lend,
+  int *nrow, int *nt, int *ltri, int *ier);
+
+int trlprt_(int *n, double *x, double *y, double *z__, int *iflag,
+  int *nrow, int *nt, int *ltri, int *lout);
+
+int trmesh_(int *n, double *x, double *y, double *z__, int	*list,
+  int *lptr, int *lend, int *lnew, int *near__, int *next,
+  double *dist, int *ier);
+
+int trplot_(int *lun, double *pltsiz, double *elat, double *elon, double *a,
+  int *n, double *x, double *y, double *z__, int *list, int *lptr,
+  int *lend, char *title, int *numbr, int *ier, short title_len);
+
+int trprnt_(int *n, double *x, double *y, double *z__, int *iflag,
+  int *list, int *lptr, int *lend, int *lout);
+
+int vrplot_(int *lun, double *pltsiz, double *elat, double *elon, double *a,
+  int *n, double *x, double *y, double *z__, int *nt, int *listc,
+  int *lptr, int *lend, double *xc, double *yc, double *zc, char *title,
+  int *numbr, int *ier, short title_len);
+
+#endif
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..35d72df
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,46 @@
+The NFFT3 package was developed and is maintained by
+
+Prof. Dr. Daniel Potts <potts at mathematik.tu-chemnitz.de>
+ TU Chemnitz, Fakultaet fuer Mathematik
+ Reichenhainer Str. 39
+ 09107 Chemnitz, GERMANY
+
+Dr. Jens Keiner <jens at nfft.org> 
+ - fast polynomial transform (/kernel/fpt)
+ - nfft on the sphere (/kernel/nfsft)
+ - fast summation on the sphere (/applications/fastsumS2)
+ - autotools, doxygen and friends
+ - Matlab mex interface for nfsft (/matlab/nfsft)
+
+Prof. Dr. Stefan Kunis <stefan.kunis at math.uos.de> 
+ - nfft (/kernel/nfft)
+ - inverse transforms (kernel/solver)
+ - nfft on the hyperbolic cross (/kernel/nsfft)
+ - fast Gauss transform (/applications/fastgauss)
+ - Matlab mex interface for nfft (/matlab/nfft)
+
+Further contributions, in particular applications, are due to
+
+Dr. Markus Fenn 
+ - nfft on the hyperbolic cross (/kernel/nsfft)
+ - polar fft (/applications/polarFFT)
+ - discrete Radon transform and ridgelet transform (/applications/radon)
+ - fast summation (/applications/fastsum)
+
+Steffen Klatt 
+ - nonequispaced cosine transform (/kernel/nfct)
+ - nonequispaced sine transform (/kernel/nfst)
+
+Dr. Tobias Knopp 
+ - transforms in magnetic resonance imaging (/kernel/mri)
+ - nonequispaced in time and frequency fft (/kernel/nnfft)
+ - reconstruction in magnetic resonance imaging (/applications/mri)
+
+Dr. Antje Vollrath <a.vollrath at tu-bs.de>
+ - transforms on the rotation group SO(3) (/kernel/nfsoft)
+
+Toni Volkmer
+ - OpenMP parallelization of nfft (/kernel/nfft)
+ - OpenMP parallelization of nfsft (/kernel/nfsft)
+ - OpenMP parallelization of fast summation (/applications/fastsum)
+
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..623b625
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..d872da4
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,81 @@
+This file contains the version history for NFFT 3.x.x. 
+
+Changes in version 3.2.3
+  - Added a workaround for an internal compiler error occuring with gcc 4.7.1
+    in kernel/mri
+  - Added a workaround for a compilation error in the MATLAB mex interface for
+    gcc 4.7.1 when compiling with C99 support (-std=gnu99)
+
+Changes in version 3.2.2:
+  - Fixed several problems introduced in version 3.2.1
+  - Fixed an issue when the configure script would not run correctly when using
+    the option --with-fftw3.
+
+Changes in version 3.2.1:
+  - Added missing files of new nfft MATLAB (class) interface to release.
+
+Changes in version 3.2.0:
+  - Added support for OpenMP. To activate, use the configure script with the 
+    --enable-openmp option.
+  - Added ticks.h from FFTW to leverage CPU cycle counters. If cycle counters
+    are available, the configure script will try to determine the number of 
+    ticks per second. If successful, example programs measure times in seconds.
+    Otherwise, example programs will output raw cycle counter differences in 
+    arbitrary units. If cycle counters are not available, results of time 
+    measurements are undefined.
+  - Renamed functions of direct (non-fast) algorithms to
+    <function name of fast algorithm>_direct, e.g. the function name for the
+    direct computation of the non-equispaced Fourier transform is
+    nfft_trafo_direct(nfft_plan) instead of ndft_trafo(nfft_plan).
+
+Changes in version 3.1.4:
+  - Added pkg-config file (thanks Gert Wollny)
+  - Headers include/nfft3util.h, applications/fastsum/fastsum.h, and 
+    applications/fastsum/kernels.h can now be included by C++ compilers.
+  - Fixed an error that occured when trying to create symbolic links to Matlab mex
+    files during installation.
+  - All programs from the application and examples subdirectories are no longer
+    installed. The same holds for the Matlab code from the matlab subdirectory. 
+
+Changes in version 3.1.3:
+  - Fixed some issues that can cause C++ compilers to fail. Thanks to Romain Bossart.
+  - Fixed an error that caused linking against FFTW while checking compiler 
+    characteristics in the configure script. This only affected installations where 
+    FFTW had been installed in a custom location.
+  - Doxygen generated documentation is now only deleted if the target 
+    maintainer-clean is used. The documentation is no longer deleted if the user 
+    invokes the usual clean target.
+
+Changes in version 3.1.2:
+  - Fixed a bug in fpt_precompute() that caused excessive stabilization and 
+    incorrect results.
+  - Fixed three bugs in the nfft: window function defines are moved to the
+    internal header infft.h, a larger lookup table is used for PRE_LIN_PSI, and
+    nfft_adjoint for d=2,3 and PRE_FULL_PSI writes its output correctly.
+
+Changes in version 3.1.1:
+  - Added a workaround for an internal compiler error occuring with gcc 4.3.2.
+
+Changes in version 3.1.0:
+  - The FPT example program, that is, examples/fpt/simple_test has been 
+    modified to not require the NFCT module anymore. This solves the problem 
+    that NFFT won't compile when the FPT module has been switched on while the 
+    NFCT module is swithced off.
+
+Changes in version 3.1.0:
+  - A module, called nfsoft, for fast Fourier transforms on the rotation group 
+    SO(3) has been added.
+  - It is now possible to configure the build process so that only specific
+    modules are compiled and installed. Invoke the configure script with option
+    "--help" for details.
+  - The handling of how to link against the fftw3 library has been improved. The
+    new configure script options "--with-fftw3", "--with-fftw-includedir", and
+    "--with-fftw-libdir" allow to specify where fftw3 has been installed.
+  - Improved compliance with GNU standards.
+  - The experimental Matlab interface has been improved and is now officially a
+    part of NFFT3. To compile the Matlab modules, invoke the configure script
+    with the option --with-matlab=<path/to/matlab/directory>. Also, an interface
+    to the plain NFFT has been added.
+
+Changes in version 3.0.2:
+  - Fixed a bug in the fpt module that lead to wrong output.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..6e90e07
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
+
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..47589c7
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,97 @@
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+
+libtool: $(LIBTOOL_DEPS)
+	$(SHELL) ./config.status --recheck
+
+# Subdirectories
+DIST_SUBDIRS=3rdparty include util kernel . tests examples applications matlab support doxygen
+
+if HAVE_MATLAB
+  MATLAB_DIRS=matlab
+  LIBNFFT3_MATLAB_LA=libnfft3_matlab.la
+else
+  MATLAB_DIRS=
+  LIBNFFT3_MATLAB_LA=
+endif
+
+if HAVE_THREADS
+  LIBNFFT3_THREADS_LA = libnfft3_threads.la
+else
+  LIBNFFT3_THREADS_LA =
+endif
+
+SUBDIRS= 3rdparty include util kernel . tests examples applications $(MATLAB_DIRS)
+
+lib_LTLIBRARIES = libnfft3.la $(LIBNFFT3_THREADS_LA)
+noinst_LTLIBRARIES = $(LIBNFFT3_MATLAB_LA)
+
+libnfft3_la_SOURCES =
+libnfft3_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @fftw3_LIBS@ -lm
+libnfft3_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+
+if HAVE_THREADS
+libnfft3_threads_la_SOURCES =
+libnfft3_threads_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
+libnfft3_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+if HAVE_OPENMP
+  libnfft3_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+if HAVE_MATLAB
+  libnfft3_matlab_la_SOURCES =
+if HAVE_MATLAB_THREADS
+    libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
+else
+    libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
+endif
+  libnfft3_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
+endif
+
+EXTRA_DIST = bootstrap.sh doxygen.dox nfft3.pc.in
+
+pkgconfigdir=$(libdir)/pkgconfig
+pkgconfig_DATA = nfft3.pc
+
+#install-data-hook:
+#	$(MKDIR_P) $(docdir)
+#	cp -R $(srcdir)/doc/* $(docdir)/
+#	chmod -R u+rwX,g+rX,g-w,o+rX,o-w $(docdir)
+
+#uninstall-hook:
+#	rm -Rf $(docdir)
+
+maintainer-clean-local:
+	rm -f $(srcdir)/doc/api/html/*.html
+	rm -f $(srcdir)/doc/api/html/*.png
+	rm -f $(srcdir)/doc/api/html/*.gif
+	rm -f $(srcdir)/doc/api/html/doxygen.css
+	rm -f $(srcdir)/doc/api/html/formula.repository
+	rm -f $(srcdir)/doc/api/latex/*.tex
+	rm -f $(srcdir)/doc/api/latex/*.sty
+	rm -f $(srcdir)/doc/api/latex/*.ttf
+	rm -f $(srcdir)/doc/api/latex/*.pdf
+	rm -f $(srcdir)/doc/api/latex/Makefile
+
+dist-hook:
+	echo `pwd`
+	chmod -Rf u+rwX $(srcdir)/doc
+	sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+	sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+	sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+	doxygen $(builddir)/doxygen/doxygen.Doxyfile
+	rm -f $(srcdir)/doc/api/html/toc.txt
+	$(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new
+	mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html
+	cp -R $(srcdir)/doc $(distdir)/
+	rm -Rf `find $(distdir) -name .svn -type d`
+
+# Flags to be passed to aclocal.
+ACLOCAL_AMFLAGS = -I m4
+
+#distclean-local:
+#	rm -Rf `find $(builddir) -type f -name *.Po`
+#	rm -Rf `find $(builddir) -type f -name Makefile`
+	
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..e048ffe
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,1050 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/nfft3.pc.in \
+	$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
+	$(top_srcdir)/config/config.sub \
+	$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
+	$(top_srcdir)/config/missing $(top_srcdir)/configure AUTHORS \
+	COPYING ChangeLog INSTALL NEWS config/compile \
+	config/config.guess config/config.sub config/depcomp \
+	config/install-sh config/ltmain.sh config/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = nfft3.pc
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libnfft3_la_DEPENDENCIES = 3rdparty/lib3rdparty.la util/libutil.la \
+	kernel/libkernel.la
+am_libnfft3_la_OBJECTS =
+libnfft3_la_OBJECTS = $(am_libnfft3_la_OBJECTS)
+libnfft3_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(libnfft3_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_DEPENDENCIES = 3rdparty/lib3rdparty.la \
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE@	util/libutil.la \
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE@	kernel/libkernel.la
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_DEPENDENCIES = 3rdparty/lib3rdparty.la \
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE@	util/libutil_threads.la \
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE@	kernel/libkernel_threads.la
+am_libnfft3_matlab_la_OBJECTS =
+libnfft3_matlab_la_OBJECTS = $(am_libnfft3_matlab_la_OBJECTS)
+libnfft3_matlab_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(libnfft3_matlab_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_MATLAB_TRUE@am_libnfft3_matlab_la_rpath =
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_DEPENDENCIES =  \
+ at HAVE_THREADS_TRUE@	3rdparty/lib3rdparty.la \
+ at HAVE_THREADS_TRUE@	util/libutil_threads.la \
+ at HAVE_THREADS_TRUE@	kernel/libkernel_threads.la
+am_libnfft3_threads_la_OBJECTS =
+libnfft3_threads_la_OBJECTS = $(am_libnfft3_threads_la_OBJECTS)
+libnfft3_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libnfft3_threads_la_CFLAGS) $(CFLAGS) \
+	$(libnfft3_threads_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libnfft3_threads_la_rpath = -rpath $(libdir)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfft3_la_SOURCES) $(libnfft3_matlab_la_SOURCES) \
+	$(libnfft3_threads_la_SOURCES)
+DIST_SOURCES = $(libnfft3_la_SOURCES) $(libnfft3_matlab_la_SOURCES) \
+	$(libnfft3_threads_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	cscope distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Subdirectories
+DIST_SUBDIRS = 3rdparty include util kernel . tests examples applications matlab support doxygen
+ at HAVE_MATLAB_FALSE@MATLAB_DIRS = 
+ at HAVE_MATLAB_TRUE@MATLAB_DIRS = matlab
+ at HAVE_MATLAB_FALSE@LIBNFFT3_MATLAB_LA = 
+ at HAVE_MATLAB_TRUE@LIBNFFT3_MATLAB_LA = libnfft3_matlab.la
+ at HAVE_THREADS_FALSE@LIBNFFT3_THREADS_LA = 
+ at HAVE_THREADS_TRUE@LIBNFFT3_THREADS_LA = libnfft3_threads.la
+SUBDIRS = 3rdparty include util kernel . tests examples applications $(MATLAB_DIRS)
+lib_LTLIBRARIES = libnfft3.la $(LIBNFFT3_THREADS_LA)
+noinst_LTLIBRARIES = $(LIBNFFT3_MATLAB_LA)
+libnfft3_la_SOURCES = 
+libnfft3_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @fftw3_LIBS@ -lm
+libnfft3_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_SOURCES = 
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfft3_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_MATLAB_TRUE@libnfft3_matlab_la_SOURCES = 
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
+ at HAVE_MATLAB_TRUE@libnfft3_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
+EXTRA_DIST = bootstrap.sh doxygen.dox nfft3.pc.in
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = nfft3.pc
+
+# Flags to be passed to aclocal.
+ACLOCAL_AMFLAGS = -I m4
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+nfft3.pc: $(top_builddir)/config.status $(srcdir)/nfft3.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfft3.la: $(libnfft3_la_OBJECTS) $(libnfft3_la_DEPENDENCIES) $(EXTRA_libnfft3_la_DEPENDENCIES) 
+	$(libnfft3_la_LINK) -rpath $(libdir) $(libnfft3_la_OBJECTS) $(libnfft3_la_LIBADD) $(LIBS)
+libnfft3_matlab.la: $(libnfft3_matlab_la_OBJECTS) $(libnfft3_matlab_la_DEPENDENCIES) $(EXTRA_libnfft3_matlab_la_DEPENDENCIES) 
+	$(libnfft3_matlab_la_LINK) $(am_libnfft3_matlab_la_rpath) $(libnfft3_matlab_la_OBJECTS) $(libnfft3_matlab_la_LIBADD) $(LIBS)
+libnfft3_threads.la: $(libnfft3_threads_la_OBJECTS) $(libnfft3_threads_la_DEPENDENCIES) $(EXTRA_libnfft3_threads_la_DEPENDENCIES) 
+	$(libnfft3_threads_la_LINK) $(am_libnfft3_threads_la_rpath) $(libnfft3_threads_la_OBJECTS) $(libnfft3_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+	-rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist-recursive cscopelist
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__post_remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__post_remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__post_remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__post_remove_distdir)
+
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod u+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__post_remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-cscope \
+	clean-generic clean-libLTLIBRARIES clean-libtool \
+	clean-noinstLTLIBRARIES cscope cscopelist cscopelist-recursive \
+	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+	dist-hook dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+	distcheck distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+	install-pkgconfigDATA install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-local mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am \
+	uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+
+
+libtool: $(LIBTOOL_DEPS)
+	$(SHELL) ./config.status --recheck
+
+#install-data-hook:
+#	$(MKDIR_P) $(docdir)
+#	cp -R $(srcdir)/doc/* $(docdir)/
+#	chmod -R u+rwX,g+rX,g-w,o+rX,o-w $(docdir)
+
+#uninstall-hook:
+#	rm -Rf $(docdir)
+
+maintainer-clean-local:
+	rm -f $(srcdir)/doc/api/html/*.html
+	rm -f $(srcdir)/doc/api/html/*.png
+	rm -f $(srcdir)/doc/api/html/*.gif
+	rm -f $(srcdir)/doc/api/html/doxygen.css
+	rm -f $(srcdir)/doc/api/html/formula.repository
+	rm -f $(srcdir)/doc/api/latex/*.tex
+	rm -f $(srcdir)/doc/api/latex/*.sty
+	rm -f $(srcdir)/doc/api/latex/*.ttf
+	rm -f $(srcdir)/doc/api/latex/*.pdf
+	rm -f $(srcdir)/doc/api/latex/Makefile
+
+dist-hook:
+	echo `pwd`
+	chmod -Rf u+rwX $(srcdir)/doc
+	sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+	sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+	sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+	doxygen $(builddir)/doxygen/doxygen.Doxyfile
+	rm -f $(srcdir)/doc/api/html/toc.txt
+	$(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new
+	mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html
+	cp -R $(srcdir)/doc $(distdir)/
+	rm -Rf `find $(distdir) -name .svn -type d`
+
+#distclean-local:
+#	rm -Rf `find $(builddir) -type f -name *.Po`
+#	rm -Rf `find $(builddir) -type f -name Makefile`
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..e69de29
diff --git a/README b/README
new file mode 100644
index 0000000..e1d2d40
--- /dev/null
+++ b/README
@@ -0,0 +1,110 @@
+NFFT3 - Nonequispaced FFT, generalisations, inversion, and applications
+
+Overview
+--------
+NFFT3 is a software library written in C for computing nonequispaced fast Fourier  
+and related transformations. In detail, NFFT3 implements
+
+ 1) The nonequispaced fast Fourier transform (NFFT)
+    - the forward transform (NFFT)
+    - the adjoint transform (adjoint NFFT)
+ 2) Generalisations of the NFFT
+    - to arbitrary knots in time and frequency domain (NNFFT)
+    - to the sphere S^2 (NFSFT)
+    - to the hyperbolic cross (NSFFT)
+    - to real-valued data, i.e. (co)sine transforms, (NFCT, NFST)
+    - to the rotation group (NFSOFT)
+ 3) Generalised inverses based on iterative methods, e.g. CGNR, CGNE 
+ 4) Applications in
+    - medical imaging
+         (i) magnetic resonance imaging
+        (ii) computerised tomography
+    - summation schemes
+          (i) fast Gauss transform (FGT)
+         (ii) singular kernels
+        (iii) zonal kernels
+    - polar FFT, discrete Radon transform, ridgelet transform
+
+For an introduction, please read the "NFFT 3.0 - Tutorial" first. It is 
+available in the subdirectory doc/tutorial/tutorial.pdf. Detailed API 
+documentation can be found in HTML format in /doc/api/html/index.html
+or in LaTeX format for self compilation in /doc/api/latex/refman.tex.
+For installation instructions, you can also refer to the file INSTALL
+in this directory.
+
+The most current general paper, and the one that we recommend if you wish 
+to cite NFFT, is: The paper by Keiner, J., Kunis, S., and Potts, D. 
+''Using NFFT 3 - a software library for various nonequispaced fast Fourier transforms'' 
+ACM Trans. Math. Software,36, Article 19, 1-30,  2009 
+Directory structure
+-------------------
+3rdparty (dir)		Third-party source code
+aclocal.m4		Macros for configure script
+applications (dir)	Application programs (see 4) above)
+AUTHORS			Information about the authors of NFFT3
+bootstrap.sh		Bootstrap shell script that call Autoconf and friends
+ChangeLog		A short version history
+config.guess		Used by configure script
+config.sub		Used by configure script
+configure		Configure script
+configure.in		Autoconf configure script template
+COPYING			Information about redistributing NFFT3
+depcomp			Used by configure script
+doc (dir)		User and developer documentation
+examples (dir)		Simple examples for using NFFT3 routines
+include (dir)		Header files
+INSTALL			Installation instructions
+install-sh		Used by configure script
+kernel (dir)		Source code for core library routines
+ltmain.sh		Used by configure script
+Makefile.am		Automake Makefile template
+Makefile.in		Makefile template generated from Makefile.am,
+                        processed by configure script
+missing			Used by configure script
+NEWS			New and noteworthy
+README			This file
+TODO			Current work to be done
+util (dir)		Source code for auxilliary routines
+
+Feedback
+--------
+Your comments are welcome! This is the third version of the library and may
+not be as robust or well documented as it should be. Please keep track of bugs
+or missing/confusing instructions and report them to
+
+  Prof. Dr. Daniel Potts <potts at mathematik.tu-chemnitz.de>
+  TU Chemnitz, Fakultaet fuer Mathematik
+  Reichenhainer Str. 39
+  09107 Chemnitz, GERMANY
+
+or
+
+  Stefan Kunis           <stefan.kunis at math.uos.de>
+  Jens Keiner            <jens at nfft.org>>
+
+If you find NFFT3 useful, we would be delighted to hear about what application
+you are using NFFT3 for!
+
+Legal Information & Credits
+---------------------------
+Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+This software was written by Jens Keiner, Stefan Kunis and Daniel Potts.
+It was developed at the Mathematical Institute, University of
+Luebeck, and at the Faculty of Mathematics, Chemnitz University of Technology.
+
+NFFT3 is free software. You can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version. If not stated otherwise, this applies to all files contained in this
+package and its sub-directories. 
+
+This program 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
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..df123fe
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1081 @@
+# generated automatically by aclocal 1.12.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.12'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.12.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.12.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Figure out how to run the assembler.                      -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_PROG_AS
+# ----------
+AC_DEFUN([AM_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+AC_ARG_VAR([CCAS],      [assembler compiler command (defaults to CC)])
+AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 17
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 19
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated.  For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES([CC])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+      am_maintainer_other[ make rules and dependencies not useful
+      (and sometimes confusing) to the casual installer])],
+    [USE_MAINTAINER_MODE=$enableval],
+    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of '-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/ax_apple_gcc_archflag.m4])
+m4_include([m4/ax_cc_maxopt.m4])
+m4_include([m4/ax_check_compiler_flags.m4])
+m4_include([m4/ax_check_dir.m4])
+m4_include([m4/ax_compiler_vendor.m4])
+m4_include([m4/ax_gcc_archflag.m4])
+m4_include([m4/ax_gcc_x86_cpuid.m4])
+m4_include([m4/ax_lib_fftw3.m4])
+m4_include([m4/ax_nfft_module.m4])
+m4_include([m4/ax_openmp.m4])
+m4_include([m4/ax_prog_matlab.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
diff --git a/applications/Makefile.am b/applications/Makefile.am
new file mode 100644
index 0000000..ddff97f
--- /dev/null
+++ b/applications/Makefile.am
@@ -0,0 +1,23 @@
+if HAVE_NFSFT
+  DIR_FASTSUMS2=fastsumS2
+  DIR_QUADRATURES2=quadratureS2
+  DIR_ITERS2=iterS2
+else
+  DIR_FASTSUMS2=
+  DIR_QUADRATURES2=
+  DIR_ITERS2=
+endif
+
+if HAVE_MRI
+  DIR_MRI=mri
+else
+  DIR_MRI=
+endif
+
+DIST_SUBDIRS = fastgauss fastsum fastsumS2 mri polarFFT \
+  quadratureS2 radon iterS2
+
+SUBDIRS= fastgauss fastsum $(DIR_FASTSUMS2) $(DIR_MRI) polarFFT \
+  $(DIR_QUADRATURES2) radon $(DIR_ITERS2)
+
+EXTRA_DIST = doxygen.c
diff --git a/applications/Makefile.in b/applications/Makefile.in
new file mode 100644
index 0000000..cc6ff4c
--- /dev/null
+++ b/applications/Makefile.in
@@ -0,0 +1,650 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applications
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFSFT_FALSE@DIR_FASTSUMS2 = 
+ at HAVE_NFSFT_TRUE@DIR_FASTSUMS2 = fastsumS2
+ at HAVE_NFSFT_FALSE@DIR_QUADRATURES2 = 
+ at HAVE_NFSFT_TRUE@DIR_QUADRATURES2 = quadratureS2
+ at HAVE_NFSFT_FALSE@DIR_ITERS2 = 
+ at HAVE_NFSFT_TRUE@DIR_ITERS2 = iterS2
+ at HAVE_MRI_FALSE@DIR_MRI = 
+ at HAVE_MRI_TRUE@DIR_MRI = mri
+DIST_SUBDIRS = fastgauss fastsum fastsumS2 mri polarFFT \
+  quadratureS2 radon iterS2
+
+SUBDIRS = fastgauss fastsum $(DIR_FASTSUMS2) $(DIR_MRI) polarFFT \
+  $(DIR_QUADRATURES2) radon $(DIR_ITERS2)
+
+EXTRA_DIST = doxygen.c
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist cscopelist-recursive ctags ctags-recursive \
+	distclean distclean-generic distclean-libtool distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/doxygen.c b/applications/doxygen.c
new file mode 100644
index 0000000..710c986
--- /dev/null
+++ b/applications/doxygen.c
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \defgroup applications Applications
+ */
diff --git a/applications/fastgauss/Makefile.am b/applications/fastgauss/Makefile.am
new file mode 100644
index 0000000..b8b2f4b
--- /dev/null
+++ b/applications/fastgauss/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = fastgauss
+
+fastgauss_SOURCES = fastgauss.c
+fastgauss_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = levelplots.m  show_results.m README
diff --git a/applications/fastgauss/Makefile.in b/applications/fastgauss/Makefile.in
new file mode 100644
index 0000000..700063c
--- /dev/null
+++ b/applications/fastgauss/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fastgauss$(EXEEXT)
+subdir = applications/fastgauss
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_fastgauss_OBJECTS = fastgauss.$(OBJEXT)
+fastgauss_OBJECTS = $(am_fastgauss_OBJECTS)
+fastgauss_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(fastgauss_SOURCES)
+DIST_SOURCES = $(fastgauss_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+fastgauss_SOURCES = fastgauss.c
+fastgauss_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = levelplots.m  show_results.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastgauss/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/fastgauss/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+fastgauss$(EXEEXT): $(fastgauss_OBJECTS) $(fastgauss_DEPENDENCIES) $(EXTRA_fastgauss_DEPENDENCIES) 
+	@rm -f fastgauss$(EXEEXT)
+	$(LINK) $(fastgauss_OBJECTS) $(fastgauss_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastgauss.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/fastgauss/README b/applications/fastgauss/README
new file mode 100644
index 0000000..f2563b4
--- /dev/null
+++ b/applications/fastgauss/README
@@ -0,0 +1,22 @@
+Examples to the fast Gauss transform with complex parameters
+
+Author
+
+  Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+
+List of files and purpose
+
+  README            this file
+  fastgauss.c       univariate Gauss transform and tests
+  levelplots.m	    visualisation with MATLAB of error estimates
+  show_results.m    visualisation with MATLAB of tested accuracy, relies on
+                    output_error.m and output_error_p.m produced by fastgauss.c
+
+References
+
+  Stefan Kunis, Daniel Potts, and Gabriele Steidl
+  Fast Gauss transforms with complex parameters using NFFTs.
+  J. Numer. Math., to appear. 2006
+
+  Preprint available online
+  http://www.tu-chemnitz.de/~potts/paper/fastgauss.pdf
diff --git a/applications/fastgauss/fastgauss.c b/applications/fastgauss/fastgauss.c
new file mode 100644
index 0000000..26da31f
--- /dev/null
+++ b/applications/fastgauss/fastgauss.c
@@ -0,0 +1,610 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastgauss.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \defgroup applications_fastgauss Fast Gauss transfrom with complex parameter
+ * \ingroup applications
+ * \{
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+  #include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/**
+ * If this flag is set, the whole matrix is precomputed and stored for the
+ * discrete Gauss transfrom.
+ *
+ * \see fgt_init_node_dependent
+ * \see fgt_init
+ * \author Stefan Kunis
+ */
+#define DGT_PRE_CEXP     (1U<< 0)
+
+/**
+ * If this flag is set, the fast Gauss transform uses the discrete instead of
+ * the fast Fourier transform.
+ *
+ * \see fgt_init
+ * \see nfft_trafo_direct
+ * \see nfft_trafo
+ * \author Stefan Kunis
+ */
+#define FGT_NDFT         (1U<< 1)
+
+/**
+ * If this flag is set, the discrete Fourier coefficients of the uniformly
+ * sampled Gaussian are used instead of the sampled continuous Fourier
+ * transform.
+ *
+ * \see fgt_init
+ * \author Stefan Kunis
+ */
+#define FGT_APPROX_B     (1U<< 2)
+
+/** Structure for the Gauss transform */
+typedef struct
+{
+  int N;                                /**< number of source nodes          */
+  int M;                                /**< number of target nodes          */
+
+  double _Complex *alpha;                /**< source coefficients             */
+  double _Complex *f;                    /**< target evaluations              */
+
+  unsigned flags;                       /**< flags for precomputation and
+					     approximation type              */
+
+  double _Complex sigma;                 /**< parameter of the Gaussian       */
+
+  double *x;                            /**< source nodes in \f$[-1/4,1/4]\f$*/
+  double *y;                            /**< target nodes in \f$[-1/4,1/4]\f$*/
+
+  double _Complex *pre_cexp;             /**< precomputed values for dgt      */
+
+  int n;                                /**< expansion degree                */
+  double p;                             /**< period, at least 1              */
+
+  double _Complex *b;                    /**< expansion coefficients          */
+
+  nfft_plan *nplan1;                    /**< source nfft plan                */
+  nfft_plan *nplan2;                    /**< target nfft plan                */
+
+} fgt_plan;
+
+/**
+ * Executes the discrete Gauss transform.
+ *
+ * \arg ths The pointer to a fgt plan
+ *
+ * \author Stefan Kunis
+ */
+void dgt_trafo(fgt_plan *ths)
+{
+  int j,k,l;
+
+  for(j=0; j<ths->M; j++)
+    ths->f[j] = 0;
+
+  if(ths->flags & DGT_PRE_CEXP)
+    for(j=0,l=0; j<ths->M; j++)
+      for(k=0; k<ths->N; k++,l++)
+        ths->f[j] += ths->alpha[k]*ths->pre_cexp[l];
+  else
+    for(j=0; j<ths->M; j++)
+      for(k=0; k<ths->N; k++)
+        ths->f[j] += ths->alpha[k]*cexp(-ths->sigma*(ths->y[j]-ths->x[k])*
+					(ths->y[j]-ths->x[k]));
+}
+
+/**
+ * Executes the fast Gauss transform.
+ *
+ * \arg ths The pointer to a fgt plan
+ *
+ * \author Stefan Kunis
+ */
+void fgt_trafo(fgt_plan *ths)
+{
+  int l;
+
+  if(ths->flags & FGT_NDFT)
+    {
+      nfft_adjoint_direct(ths->nplan1);
+
+      for(l=0; l<ths->n; l++)
+        ths->nplan1->f_hat[l] *= ths->b[l];
+
+      nfft_trafo_direct(ths->nplan2);
+    }
+  else
+    {
+      nfft_adjoint(ths->nplan1);
+
+      for(l=0; l<ths->n; l++)
+        ths->nplan1->f_hat[l] *= ths->b[l];
+
+      nfft_trafo(ths->nplan2);
+    }
+}
+
+/**
+ * Initialisation of a transform plan, guru.
+ *
+ * \arg ths The pointer to a fpt plan
+ * \arg N The number of source nodes
+ * \arg M The number of target nodes
+ * \arg sigma The parameter of the Gaussian
+ * \arg n The polynomial expansion degree
+ * \arg p the periodisation length, at least 1
+ * \arg m The spatial cut-off of the nfft
+ * \arg flags FGT flags to use
+ *
+ * \author Stefan Kunis
+ */
+void fgt_init_guru(fgt_plan *ths, int N, int M, double _Complex sigma, int n,
+		   double p, int m, unsigned flags)
+{
+  int j,n_fftw;
+  fftw_plan fplan;
+
+  ths->M = M;
+  ths->N = N;
+  ths->sigma = sigma;
+  ths->flags = flags;
+
+  ths->x = (double*)nfft_malloc(ths->N*sizeof(double));
+  ths->y = (double*)nfft_malloc(ths->M*sizeof(double));
+  ths->alpha = (double _Complex*)nfft_malloc(ths->N*sizeof(double _Complex));
+  ths->f = (double _Complex*)nfft_malloc(ths->M*sizeof(double _Complex));
+
+  ths->n = n;
+  ths->p = p;
+
+  ths->b = (double _Complex*)nfft_malloc(ths->n*sizeof(double _Complex));
+
+  ths->nplan1 = (nfft_plan*) nfft_malloc(sizeof(nfft_plan));
+  ths->nplan2 = (nfft_plan*) nfft_malloc(sizeof(nfft_plan));
+
+  n_fftw=X(next_power_of_2)(2*ths->n);
+
+  nfft_init_guru(ths->nplan1, 1, &(ths->n), ths->N, &n_fftw, m, PRE_PHI_HUT|
+                 PRE_PSI| MALLOC_X| MALLOC_F_HAT| FFTW_INIT, FFTW_MEASURE);
+  nfft_init_guru(ths->nplan2, 1, &(ths->n), ths->M, &n_fftw, m, PRE_PHI_HUT|
+                 PRE_PSI| MALLOC_X| FFTW_INIT, FFTW_MEASURE);
+
+  ths->nplan1->f = ths->alpha;
+  ths->nplan2->f_hat = ths->nplan1->f_hat;
+  ths->nplan2->f = ths->f;
+
+  if(ths->flags & FGT_APPROX_B)
+    {
+      fplan = fftw_plan_dft_1d(ths->n, ths->b, ths->b, FFTW_FORWARD,
+                               FFTW_MEASURE);
+
+      for(j=0; j<ths->n; j++)
+	ths->b[j] = cexp(-ths->p*ths->p*ths->sigma*(j-ths->n/2)*(j-ths->n/2)/
+                          ((double)ths->n*ths->n)) / ths->n;
+
+      nfft_fftshift_complex(ths->b, 1, &ths->n);
+      fftw_execute(fplan);
+      nfft_fftshift_complex(ths->b, 1, &ths->n);
+
+      fftw_destroy_plan(fplan);
+    }
+  else
+    {
+      for(j=0; j<ths->n; j++)
+	ths->b[j] = 1.0/ths->p * csqrt(PI/ths->sigma)*
+	  cexp(-PI*PI*(j-ths->n/2)*(j-ths->n/2)/
+	       (ths->p*ths->p*ths->sigma));
+    }
+}
+
+/**
+ * Initialisation of a transform plan, simple.
+ *
+ * \arg ths The pointer to a fpt plan
+ * \arg N The number of source nodes
+ * \arg M The number of target nodes
+ * \arg sigma The parameter of the Gaussian
+ * \arg eps The target accuracy
+ *
+ * \author Stefan Kunis
+ */
+void fgt_init(fgt_plan *ths, int N, int M, double _Complex sigma, double eps)
+{
+  double p;
+  int n;
+
+  p=0.5+sqrt(-log(eps)/creal(sigma));
+  if(p<1)
+    p=1;
+
+  n=2*((int)ceil(p*cabs(sigma)/PI * sqrt(-log(eps)/creal(sigma))));
+
+  if(N*M<=((int)(1U<<20)))
+    fgt_init_guru(ths, N, M, sigma, n, p, 7, DGT_PRE_CEXP);
+  else
+    fgt_init_guru(ths, N, M, sigma, n, p, 7, 0);
+}
+
+/**
+ * Initialisation of a transform plan, depends on source and target nodes.
+ *
+ * \arg ths The pointer to a fpt plan
+ * \author Stefan Kunis
+ */
+void fgt_init_node_dependent(fgt_plan *ths)
+{
+  int j,k,l;
+
+  if(ths->flags & DGT_PRE_CEXP)
+   {
+     ths->pre_cexp=(double _Complex*)nfft_malloc(ths->M*ths->N*
+						sizeof(double _Complex));
+
+     for(j=0,l=0; j<ths->M; j++)
+       for(k=0; k<ths->N; k++,l++)
+         ths->pre_cexp[l]=cexp(-ths->sigma*(ths->y[j]-ths->x[k])*
+                                (ths->y[j]-ths->x[k]));
+   }
+
+  for(j=0; j<ths->nplan1->M_total; j++)
+    ths->nplan1->x[j] = ths->x[j]/ths->p;
+  for(j=0; j<ths->nplan2->M_total; j++)
+    ths->nplan2->x[j] = ths->y[j]/ths->p;
+
+  if(ths->nplan1->nfft_flags & PRE_PSI)
+    nfft_precompute_psi(ths->nplan1);
+  if(ths->nplan2->nfft_flags & PRE_PSI)
+    nfft_precompute_psi(ths->nplan2);
+}
+
+/**
+ * Destroys the transform plan.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \author Stefan Kunis
+ */
+void fgt_finalize(fgt_plan *ths)
+{
+  nfft_finalize(ths->nplan2);
+  nfft_finalize(ths->nplan1);
+
+  nfft_free(ths->nplan2);
+  nfft_free(ths->nplan1);
+
+  nfft_free(ths->b);
+
+  nfft_free(ths->f);
+  nfft_free(ths->y);
+
+  nfft_free(ths->alpha);
+  nfft_free(ths->x);
+}
+
+/**
+ * Random initialisation of a fgt plan.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \author Stefan Kunis
+ */
+void fgt_test_init_rand(fgt_plan *ths)
+{
+  int j,k;
+
+  for(k=0; k<ths->N; k++)
+    ths->x[k] = (double)rand()/(2.0*RAND_MAX)-1.0/4.0;
+
+  for(j=0; j<ths->M; j++)
+    ths->y[j] = (double)rand()/(2.0*RAND_MAX)-1.0/4.0;
+
+  for(k=0; k<ths->N; k++)
+    ths->alpha[k] =   (double)rand()/(RAND_MAX)-1.0/2.0
+	          + _Complex_I*(double)rand()/(RAND_MAX)-I/2.0;
+}
+
+/**
+ * Compares execution times for the fast and discrete Gauss transform.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \arg dgt If this parameter is set \ref dgt_trafo is called as well
+ *
+ * \author Stefan Kunis
+ */
+double fgt_test_measure_time(fgt_plan *ths, unsigned dgt)
+{
+  int r;
+  ticks t0, t1;
+  double t_out;
+  double tau=0.01;
+
+  t_out=0;
+  r=0;
+  while(t_out<tau)
+    {
+      r++;
+      t0 = getticks();
+      if (dgt)
+        dgt_trafo(ths);
+      else
+        fgt_trafo(ths);
+      t1 = getticks();
+      t_out += nfft_elapsed_seconds(t1,t0);
+    }
+  t_out/=r;
+
+  return t_out;
+}
+
+/**
+ * Simple example that computes fast and discrete Gauss transforms.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \arg sigma The parameter of the Gaussian
+ * \arg eps The target accuracy
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_simple(int N, int M, double _Complex sigma, double eps)
+{
+  fgt_plan my_plan;
+  double _Complex *swap_dgt;
+
+  fgt_init(&my_plan, N, M, sigma, eps);
+  swap_dgt = (double _Complex*)nfft_malloc(my_plan.M*sizeof(double _Complex));
+
+  fgt_test_init_rand(&my_plan);
+  fgt_init_node_dependent(&my_plan);
+
+  NFFT_SWAP_complex(swap_dgt,my_plan.f);
+  dgt_trafo(&my_plan);
+  nfft_vpr_complex(my_plan.f,my_plan.M,"discrete gauss transform");
+  NFFT_SWAP_complex(swap_dgt,my_plan.f);
+
+  fgt_trafo(&my_plan);
+  nfft_vpr_complex(my_plan.f,my_plan.M,"fast gauss transform");
+
+  printf("\n relative error: %1.3e\n", X(error_l_infty_1_complex)(swap_dgt,
+         my_plan.f, my_plan.M, my_plan.alpha, my_plan.N));
+
+  nfft_free(swap_dgt);
+  fgt_finalize(&my_plan);
+}
+
+/**
+ * Compares accuracy and execution time of the fast Gauss transform with
+ * increasing expansion degree.
+ * Similar to the test in F. Andersson and G. Beylkin.
+ * The fast Gauss transform with double _Complex parameters.
+ * J. Comput. Physics 203 (2005) 274-286
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_andersson(void)
+{
+  fgt_plan my_plan;
+  double _Complex *swap_dgt;
+  int N;
+
+  double _Complex sigma=4*(138+ _Complex_I*100);
+  int n=128;
+  int N_dgt_pre_exp=(int)(1U<<11);
+  int N_dgt=(int)(1U<<19);
+
+  printf("n=%d, sigma=%1.3e+i%1.3e\n",n,creal(sigma),cimag(sigma));
+
+  for(N=((int)(1U<<6)); N<((int)(1U<<22)); N=N<<1)
+    {
+      printf("$%d$\t & ",N);
+
+      if(N<N_dgt_pre_exp)
+        fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, DGT_PRE_CEXP);
+      else
+        fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, 0);
+
+      swap_dgt = (double _Complex*)nfft_malloc(my_plan.M*
+					      sizeof(double _Complex));
+
+      fgt_test_init_rand(&my_plan);
+
+      fgt_init_node_dependent(&my_plan);
+
+      if(N<N_dgt)
+	{
+          NFFT_SWAP_complex(swap_dgt,my_plan.f);
+          if(N<N_dgt_pre_exp)
+            my_plan.flags^=DGT_PRE_CEXP;
+
+	  printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 1));
+          if(N<N_dgt_pre_exp)
+            my_plan.flags^=DGT_PRE_CEXP;
+          NFFT_SWAP_complex(swap_dgt,my_plan.f);
+	}
+      else
+	printf("\t\t & ");
+
+      if(N<N_dgt_pre_exp)
+	printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 1));
+      else
+	printf("\t\t & ");
+
+      my_plan.flags^=FGT_NDFT;
+      printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 0));
+      my_plan.flags^=FGT_NDFT;
+
+      printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 0));
+
+      printf("$%1.1e$\t \\\\ \n",
+	     X(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M,
+					  my_plan.alpha, my_plan.N));
+      fflush(stdout);
+
+      nfft_free(swap_dgt);
+      fgt_finalize(&my_plan);
+      fftw_cleanup();
+    }
+}
+
+/**
+ * Compares accuracy of the fast Gauss transform with increasing expansion
+ * degree.
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_error(void)
+{
+  fgt_plan my_plan;
+  double _Complex *swap_dgt;
+  int n,mi;
+
+  double _Complex sigma=4*(138+ _Complex_I*100);
+  int N=1000;
+  int M=1000;
+  int m[2]={7,3};
+
+  printf("N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n",N,M,creal(sigma),cimag(sigma));
+  printf("error=[\n");
+
+  swap_dgt = (double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+  for(n=8; n<=128; n+=4)
+    {
+      printf("%d\t",n);
+      for(mi=0;mi<2;mi++)
+        {
+          fgt_init_guru(&my_plan, N, M, sigma, n, 1, m[mi], 0);
+          fgt_test_init_rand(&my_plan);
+          fgt_init_node_dependent(&my_plan);
+
+          NFFT_SWAP_complex(swap_dgt,my_plan.f);
+          dgt_trafo(&my_plan);
+          NFFT_SWAP_complex(swap_dgt,my_plan.f);
+
+          fgt_trafo(&my_plan);
+
+          printf("%1.3e\t", X(error_l_infty_1_complex)(swap_dgt, my_plan.f,
+                 my_plan.M, my_plan.alpha, my_plan.N));
+          fflush(stdout);
+
+          fgt_finalize(&my_plan);
+          fftw_cleanup();
+        }
+      printf("\n");
+    }
+  printf("];\n");
+
+  nfft_free(swap_dgt);
+}
+
+/**
+ * Compares accuracy of the fast Gauss transform with increasing expansion
+ * degree and different periodisation lengths.
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_error_p(void)
+{
+  fgt_plan my_plan;
+  double _Complex *swap_dgt;
+  int n,pi;
+
+  double _Complex sigma=20+40*_Complex_I;
+  int N=1000;
+  int M=1000;
+  double p[3]={1,1.5,2};
+
+  printf("N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n",N,M,creal(sigma),cimag(sigma));
+  printf("error=[\n");
+
+  swap_dgt = (double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+  for(n=8; n<=128; n+=4)
+    {
+      printf("%d\t",n);
+      for(pi=0;pi<3;pi++)
+        {
+          fgt_init_guru(&my_plan, N, M, sigma, n, p[pi], 7, 0);
+          fgt_test_init_rand(&my_plan);
+          fgt_init_node_dependent(&my_plan);
+
+          NFFT_SWAP_complex(swap_dgt,my_plan.f);
+          dgt_trafo(&my_plan);
+          NFFT_SWAP_complex(swap_dgt,my_plan.f);
+
+          fgt_trafo(&my_plan);
+
+          printf("%1.3e\t", X(error_l_infty_1_complex)(swap_dgt, my_plan.f,
+                 my_plan.M, my_plan.alpha, my_plan.N));
+          fflush(stdout);
+
+          fgt_finalize(&my_plan);
+          fftw_cleanup();
+        }
+      printf("\n");
+    }
+  printf("];\n");
+}
+
+/**
+ * Different tests of the fast Gauss transform.
+ *
+ * \author Stefan Kunis
+ */
+int main(int argc,char **argv)
+{
+  if(argc!=2)
+    {
+      fprintf(stderr,"fastgauss type\n");
+      fprintf(stderr," type\n");
+      fprintf(stderr,"  0 - Simple test.\n");
+      fprintf(stderr,"  1 - Compares accuracy and execution time.\n");
+      fprintf(stderr,"      Pipe to output_andersson.tex\n");
+      fprintf(stderr,"  2 - Compares accuracy.\n");
+      fprintf(stderr,"      Pipe to output_error.m\n");
+      fprintf(stderr,"  3 - Compares accuracy.\n");
+      fprintf(stderr,"      Pipe to output_error_p.m\n");
+      return -1;
+    }
+
+  if(atoi(argv[1])==0)
+    fgt_test_simple(10, 10, 5+3*_Complex_I, 0.001);
+
+  if(atoi(argv[1])==1)
+    fgt_test_andersson();
+
+  if(atoi(argv[1])==2)
+    fgt_test_error();
+
+  if(atoi(argv[1])==3)
+    fgt_test_error_p();
+
+  return 1;
+}
+/* \} */
diff --git a/applications/fastgauss/levelplots.m b/applications/fastgauss/levelplots.m
new file mode 100644
index 0000000..4fa5084
--- /dev/null
+++ b/applications/fastgauss/levelplots.m
@@ -0,0 +1,35 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: levelplots.m 3776 2012-06-03 13:29:25Z keiner $
+clear;
+n=128;
+p=1;
+a = 1:1500;
+b = -1500:1500;
+[A,B] = meshgrid(a,b);
+S = A.^2 + B.^2;
+Z = exp(-pi^2*A*n^2./(4*p^2*S));
+ZZ = 2*exp(-A*(2*p-1)^2/4).*(1+1./p*(2*p-1)*A) + sqrt(pi./sqrt(S))/p.*exp(-pi^2*A*n^2./(4*p^2*S)).*(1 + 2*S*p^2./(n*pi^2*A));
+
+p =-20:2:2;
+v = 10.^p;
+figure(1);
+[C,h]=contour(A,B,ZZ,v);
+clabel(C,h);
+figure(2);
+[C,h]=contour(A,B,Z,v);
+clabel(C,h);
diff --git a/applications/fastgauss/show_results.m b/applications/fastgauss/show_results.m
new file mode 100644
index 0000000..a67bc80
--- /dev/null
+++ b/applications/fastgauss/show_results.m
@@ -0,0 +1,51 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: show_results.m 3776 2012-06-03 13:29:25Z keiner $
+output_error
+
+a=real(delta);
+C=exp(-a*pi^2/abs(delta)^2);
+
+figure(1);
+h=semilogy( error(:,1), error(:,2),'k-',...
+  	  error(:,1), error(:,3),'k--',...
+	  error(:,1), error(:,4),'k-.',...
+error(:,1), 2*exp(-a/4)*(1+1/a) + sqrt(pi/abs(delta)) * exp(-pi^2*a*error(:,1).^2/(4*abs(delta)^2)).*(1+abs(delta)^2./(error(:,1)*pi^2*a)),'k:');
+set(h,'LineWidth',1.8); set(h,'Markersize',10); set(gca,'FontSize',25);
+axis([min(error(:,1)),max(error(:,1)),10^-18,1]);
+print gauss1.eps -deps
+
+figure(2);
+h=semilogy( error(:,1), error(:,5),'k-',...
+	  error(:,1), error(:,6),'k--',...
+	  error(:,1), error(:,7),'k-.',...
+	  error(:,1), 8*abs(delta)^2./(pi^2*a*error(:,1)).*exp(-a/4).*(1+1./error(:,1)) + sqrt(pi/abs(delta)) * exp(-pi^2*a*error(:,1).^2/(4*abs(delta)^2)).*(1+2*abs(delta)^2./(error(:,1)*pi^2*a)),'k:');
+set(h,'LineWidth',1.8); set(h,'Markersize',10); set(gca,'FontSize',25);
+axis([min(error(:,1)),max(error(:,1)),10^-18,1]);
+print gauss2.eps -deps
+
+
+
+output_error_p
+
+figure(3);
+h=semilogy( error(:,1), error(:,2),'k-',...
+	    error(:,1), error(:,3),'k--',...
+	    error(:,1), error(:,4),'k-.');
+set(h,'LineWidth',1.8); set(h,'Markersize',10); set(gca,'FontSize',25);
+axis([min(error(:,1)),max(error(:,1)),10^-18,1]);
+print gauss6.eps -deps
diff --git a/applications/fastsum/Makefile.am b/applications/fastsum/Makefile.am
new file mode 100644
index 0000000..92a05d1
--- /dev/null
+++ b/applications/fastsum/Makefile.am
@@ -0,0 +1,73 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+  FASTSUM_TEST_THREADS=fastsum_test_threads
+  LIBFASTSUM_THREADS=libfastsum_threads.la
+else
+  FASTSUM_TEST_THREADS=
+  LIBFASTSUM_THREADS=
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  FASTSUM_BENCHOMP_PROGS=fastsum_benchomp fastsum_benchomp_createdataset fastsum_benchomp_detail_single fastsum_benchomp_detail_threads
+else
+  FASTSUM_BENCHOMP_PROGS=
+endif
+else
+  FASTSUM_BENCHOMP_PROGS=
+endif
+
+noinst_LTLIBRARIES = libfastsum.la libkernels.la $(LIBFASTSUM_THREADS)
+noinst_PROGRAMS = fastsum_test fastsum_matlab $(FASTSUM_TEST_THREADS) $(FASTSUM_BENCHOMP_PROGS)
+
+libfastsum_la_SOURCES = fastsum.c fastsum.h kernels.h
+libfastsum_la_LIBADD = @fftw3_LIBS@
+libfastsum_la_LDFLAGS = @fftw3_LDFLAGS@
+
+libkernels_la_SOURCES = kernels.c
+
+if HAVE_THREADS
+  libfastsum_threads_la_SOURCES = fastsum.c fastsum.h kernels.h
+  libfastsum_threads_la_LIBADD = @fftw3_threads_LIBS@
+  libfastsum_threads_la_LDFLAGS = @fftw3_threads_LDFLAGS@
+if HAVE_OPENMP
+  libfastsum_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+fastsum_test_SOURCES = fastsum_test.c
+fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+
+fastsum_matlab_SOURCES = fastsum_matlab.c
+fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+
+if HAVE_THREADS
+  fastsum_test_threads_SOURCES = fastsum_test.c
+  fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la
+if HAVE_OPENMP
+  fastsum_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  fastsum_benchomp_SOURCES = fastsum_benchomp.c
+  fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  fastsum_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+
+  fastsum_benchomp_createdataset_SOURCES = fastsum_benchomp_createdataset.c
+  fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+  fastsum_benchomp_detail_single_SOURCES = fastsum_benchomp_detail.c
+  fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+  fastsum_benchomp_detail_threads_SOURCES = fastsum_benchomp_detail.c
+  fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  fastsum_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+EXTRA_DIST = fastsum.m fastsum_test.m README
diff --git a/applications/fastsum/Makefile.in b/applications/fastsum/Makefile.in
new file mode 100644
index 0000000..9157fa7
--- /dev/null
+++ b/applications/fastsum/Makefile.in
@@ -0,0 +1,776 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fastsum_test$(EXEEXT) fastsum_matlab$(EXEEXT) \
+	$(am__EXEEXT_1) $(am__EXEEXT_2)
+subdir = applications/fastsum
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libfastsum_la_DEPENDENCIES =
+am_libfastsum_la_OBJECTS = fastsum.lo
+libfastsum_la_OBJECTS = $(am_libfastsum_la_OBJECTS)
+libfastsum_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(libfastsum_la_LDFLAGS) $(LDFLAGS) -o $@
+libfastsum_threads_la_DEPENDENCIES =
+am__libfastsum_threads_la_SOURCES_DIST = fastsum.c fastsum.h kernels.h
+ at HAVE_THREADS_TRUE@am_libfastsum_threads_la_OBJECTS =  \
+ at HAVE_THREADS_TRUE@	libfastsum_threads_la-fastsum.lo
+libfastsum_threads_la_OBJECTS = $(am_libfastsum_threads_la_OBJECTS)
+libfastsum_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libfastsum_threads_la_CFLAGS) $(CFLAGS) \
+	$(libfastsum_threads_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libfastsum_threads_la_rpath =
+libkernels_la_LIBADD =
+am_libkernels_la_OBJECTS = kernels.lo
+libkernels_la_OBJECTS = $(am_libkernels_la_OBJECTS)
+ at HAVE_THREADS_TRUE@am__EXEEXT_1 = fastsum_test_threads$(EXEEXT)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 = fastsum_benchomp$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	fastsum_benchomp_createdataset$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	fastsum_benchomp_detail_single$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	fastsum_benchomp_detail_threads$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am__fastsum_benchomp_SOURCES_DIST = fastsum_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_OBJECTS = fastsum_benchomp-fastsum_benchomp.$(OBJEXT)
+fastsum_benchomp_OBJECTS = $(am_fastsum_benchomp_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_DEPENDENCIES =  \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum_threads.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
+fastsum_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(fastsum_benchomp_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__fastsum_benchomp_createdataset_SOURCES_DIST =  \
+	fastsum_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_createdataset_OBJECTS = fastsum_benchomp_createdataset.$(OBJEXT)
+fastsum_benchomp_createdataset_OBJECTS =  \
+	$(am_fastsum_benchomp_createdataset_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_DEPENDENCIES =  \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3.la
+am__fastsum_benchomp_detail_single_SOURCES_DIST =  \
+	fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_detail_single_OBJECTS = fastsum_benchomp_detail.$(OBJEXT)
+fastsum_benchomp_detail_single_OBJECTS =  \
+	$(am_fastsum_benchomp_detail_single_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_DEPENDENCIES =  \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3.la
+am__fastsum_benchomp_detail_threads_SOURCES_DIST =  \
+	fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_detail_threads_OBJECTS = fastsum_benchomp_detail_threads-fastsum_benchomp_detail.$(OBJEXT)
+fastsum_benchomp_detail_threads_OBJECTS =  \
+	$(am_fastsum_benchomp_detail_threads_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_DEPENDENCIES =  \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum_threads.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
+fastsum_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_fastsum_matlab_OBJECTS = fastsum_matlab.$(OBJEXT)
+fastsum_matlab_OBJECTS = $(am_fastsum_matlab_OBJECTS)
+fastsum_matlab_DEPENDENCIES = libfastsum.la libkernels.la \
+	$(top_builddir)/libnfft3.la
+am_fastsum_test_OBJECTS = fastsum_test.$(OBJEXT)
+fastsum_test_OBJECTS = $(am_fastsum_test_OBJECTS)
+fastsum_test_DEPENDENCIES = libfastsum.la libkernels.la \
+	$(top_builddir)/libnfft3.la
+am__fastsum_test_threads_SOURCES_DIST = fastsum_test.c
+ at HAVE_THREADS_TRUE@am_fastsum_test_threads_OBJECTS = fastsum_test_threads-fastsum_test.$(OBJEXT)
+fastsum_test_threads_OBJECTS = $(am_fastsum_test_threads_OBJECTS)
+ at HAVE_THREADS_TRUE@fastsum_test_threads_DEPENDENCIES =  \
+ at HAVE_THREADS_TRUE@	libfastsum_threads.la libkernels.la \
+ at HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
+fastsum_test_threads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(fastsum_test_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libfastsum_la_SOURCES) $(libfastsum_threads_la_SOURCES) \
+	$(libkernels_la_SOURCES) $(fastsum_benchomp_SOURCES) \
+	$(fastsum_benchomp_createdataset_SOURCES) \
+	$(fastsum_benchomp_detail_single_SOURCES) \
+	$(fastsum_benchomp_detail_threads_SOURCES) \
+	$(fastsum_matlab_SOURCES) $(fastsum_test_SOURCES) \
+	$(fastsum_test_threads_SOURCES)
+DIST_SOURCES = $(libfastsum_la_SOURCES) \
+	$(am__libfastsum_threads_la_SOURCES_DIST) \
+	$(libkernels_la_SOURCES) $(am__fastsum_benchomp_SOURCES_DIST) \
+	$(am__fastsum_benchomp_createdataset_SOURCES_DIST) \
+	$(am__fastsum_benchomp_detail_single_SOURCES_DIST) \
+	$(am__fastsum_benchomp_detail_threads_SOURCES_DIST) \
+	$(fastsum_matlab_SOURCES) $(fastsum_test_SOURCES) \
+	$(am__fastsum_test_threads_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@FASTSUM_TEST_THREADS = 
+ at HAVE_THREADS_TRUE@FASTSUM_TEST_THREADS = fastsum_test_threads
+ at HAVE_THREADS_FALSE@LIBFASTSUM_THREADS = 
+ at HAVE_THREADS_TRUE@LIBFASTSUM_THREADS = libfastsum_threads.la
+ at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at FASTSUM_BENCHOMP_PROGS = 
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at FASTSUM_BENCHOMP_PROGS = fastsum_benchomp fastsum_benchomp_createdataset fastsum_benchomp_detail_single fastsum_benchomp_detail_threads
+ at HAVE_THREADS_FALSE@FASTSUM_BENCHOMP_PROGS = 
+noinst_LTLIBRARIES = libfastsum.la libkernels.la $(LIBFASTSUM_THREADS)
+libfastsum_la_SOURCES = fastsum.c fastsum.h kernels.h
+libfastsum_la_LIBADD = @fftw3_LIBS@
+libfastsum_la_LDFLAGS = @fftw3_LDFLAGS@
+libkernels_la_SOURCES = kernels.c
+ at HAVE_THREADS_TRUE@libfastsum_threads_la_SOURCES = fastsum.c fastsum.h kernels.h
+ at HAVE_THREADS_TRUE@libfastsum_threads_la_LIBADD = @fftw3_threads_LIBS@
+ at HAVE_THREADS_TRUE@libfastsum_threads_la_LDFLAGS = @fftw3_threads_LDFLAGS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libfastsum_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+fastsum_test_SOURCES = fastsum_test.c
+fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+fastsum_matlab_SOURCES = fastsum_matlab.c
+fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+ at HAVE_THREADS_TRUE@fastsum_test_threads_SOURCES = fastsum_test.c
+ at HAVE_THREADS_TRUE@fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_SOURCES = fastsum_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_SOURCES = fastsum_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_SOURCES = fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_SOURCES = fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+EXTRA_DIST = fastsum.m fastsum_test.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastsum/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/fastsum/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libfastsum.la: $(libfastsum_la_OBJECTS) $(libfastsum_la_DEPENDENCIES) $(EXTRA_libfastsum_la_DEPENDENCIES) 
+	$(libfastsum_la_LINK)  $(libfastsum_la_OBJECTS) $(libfastsum_la_LIBADD) $(LIBS)
+libfastsum_threads.la: $(libfastsum_threads_la_OBJECTS) $(libfastsum_threads_la_DEPENDENCIES) $(EXTRA_libfastsum_threads_la_DEPENDENCIES) 
+	$(libfastsum_threads_la_LINK) $(am_libfastsum_threads_la_rpath) $(libfastsum_threads_la_OBJECTS) $(libfastsum_threads_la_LIBADD) $(LIBS)
+libkernels.la: $(libkernels_la_OBJECTS) $(libkernels_la_DEPENDENCIES) $(EXTRA_libkernels_la_DEPENDENCIES) 
+	$(LINK)  $(libkernels_la_OBJECTS) $(libkernels_la_LIBADD) $(LIBS)
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+fastsum_benchomp$(EXEEXT): $(fastsum_benchomp_OBJECTS) $(fastsum_benchomp_DEPENDENCIES) $(EXTRA_fastsum_benchomp_DEPENDENCIES) 
+	@rm -f fastsum_benchomp$(EXEEXT)
+	$(fastsum_benchomp_LINK) $(fastsum_benchomp_OBJECTS) $(fastsum_benchomp_LDADD) $(LIBS)
+fastsum_benchomp_createdataset$(EXEEXT): $(fastsum_benchomp_createdataset_OBJECTS) $(fastsum_benchomp_createdataset_DEPENDENCIES) $(EXTRA_fastsum_benchomp_createdataset_DEPENDENCIES) 
+	@rm -f fastsum_benchomp_createdataset$(EXEEXT)
+	$(LINK) $(fastsum_benchomp_createdataset_OBJECTS) $(fastsum_benchomp_createdataset_LDADD) $(LIBS)
+fastsum_benchomp_detail_single$(EXEEXT): $(fastsum_benchomp_detail_single_OBJECTS) $(fastsum_benchomp_detail_single_DEPENDENCIES) $(EXTRA_fastsum_benchomp_detail_single_DEPENDENCIES) 
+	@rm -f fastsum_benchomp_detail_single$(EXEEXT)
+	$(LINK) $(fastsum_benchomp_detail_single_OBJECTS) $(fastsum_benchomp_detail_single_LDADD) $(LIBS)
+fastsum_benchomp_detail_threads$(EXEEXT): $(fastsum_benchomp_detail_threads_OBJECTS) $(fastsum_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_fastsum_benchomp_detail_threads_DEPENDENCIES) 
+	@rm -f fastsum_benchomp_detail_threads$(EXEEXT)
+	$(fastsum_benchomp_detail_threads_LINK) $(fastsum_benchomp_detail_threads_OBJECTS) $(fastsum_benchomp_detail_threads_LDADD) $(LIBS)
+fastsum_matlab$(EXEEXT): $(fastsum_matlab_OBJECTS) $(fastsum_matlab_DEPENDENCIES) $(EXTRA_fastsum_matlab_DEPENDENCIES) 
+	@rm -f fastsum_matlab$(EXEEXT)
+	$(LINK) $(fastsum_matlab_OBJECTS) $(fastsum_matlab_LDADD) $(LIBS)
+fastsum_test$(EXEEXT): $(fastsum_test_OBJECTS) $(fastsum_test_DEPENDENCIES) $(EXTRA_fastsum_test_DEPENDENCIES) 
+	@rm -f fastsum_test$(EXEEXT)
+	$(LINK) $(fastsum_test_OBJECTS) $(fastsum_test_LDADD) $(LIBS)
+fastsum_test_threads$(EXEEXT): $(fastsum_test_threads_OBJECTS) $(fastsum_test_threads_DEPENDENCIES) $(EXTRA_fastsum_test_threads_DEPENDENCIES) 
+	@rm -f fastsum_test_threads$(EXEEXT)
+	$(fastsum_test_threads_LINK) $(fastsum_test_threads_OBJECTS) $(fastsum_test_threads_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_createdataset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_matlab.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_test_threads-fastsum_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/kernels.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libfastsum_threads_la-fastsum.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libfastsum_threads_la-fastsum.lo: fastsum.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfastsum_threads_la_CFLAGS) $(CFLAGS) -MT libfastsum_threads_la-fastsum.lo -MD -MP -MF $(DEPDIR)/libfastsum_threads_la-fastsum.Tpo -c -o libfastsum_threads_la-fastsum.lo `test -f 'fastsum.c' || echo '$(srcdir)/'`fastsum.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfastsum_threads_la-fastsum.Tpo $(DEPDIR)/libfastsum_threads_la-fastsum.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum.c' object='libfastsum_threads_la-fastsum.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfastsum_threads_la_CFLAGS) $(CFLAGS) -c -o libfastsum_threads_la-fastsum.lo `test -f 'fastsum.c' || echo '$(srcdir)/'`fastsum.c
+
+fastsum_benchomp-fastsum_benchomp.o: fastsum_benchomp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -MT fastsum_benchomp-fastsum_benchomp.o -MD -MP -MF $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo -c -o fastsum_benchomp-fastsum_benchomp.o `test -f 'fastsum_benchomp.c' || echo '$(srcdir)/'`fastsum_benchomp.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp.c' object='fastsum_benchomp-fastsum_benchomp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp-fastsum_benchomp.o `test -f 'fastsum_benchomp.c' || echo '$(srcdir)/'`fastsum_benchomp.c
+
+fastsum_benchomp-fastsum_benchomp.obj: fastsum_benchomp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -MT fastsum_benchomp-fastsum_benchomp.obj -MD -MP -MF $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo -c -o fastsum_benchomp-fastsum_benchomp.obj `if test -f 'fastsum_benchomp.c'; then $(CYGPATH_W) 'fastsum_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp.c' object='fastsum_benchomp-fastsum_benchomp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp-fastsum_benchomp.obj `if test -f 'fastsum_benchomp.c'; then $(CYGPATH_W) 'fastsum_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp.c'; fi`
+
+fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o: fastsum_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o -MD -MP -MF $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o `test -f 'fastsum_benchomp_detail.c' || echo '$(srcdir)/'`fastsum_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp_detail.c' object='fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o `test -f 'fastsum_benchomp_detail.c' || echo '$(srcdir)/'`fastsum_benchomp_detail.c
+
+fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj: fastsum_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj `if test -f 'fastsum_benchomp_detail.c'; then $(CYGPATH_W) 'fastsum_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp_ [...]
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp_detail.c' object='fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj `if test -f 'fastsum_benchomp_detail.c'; then $(CYGPATH_W) 'fastsum_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp_detail.c'; fi`
+
+fastsum_test_threads-fastsum_test.o: fastsum_test.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -MT fastsum_test_threads-fastsum_test.o -MD -MP -MF $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo -c -o fastsum_test_threads-fastsum_test.o `test -f 'fastsum_test.c' || echo '$(srcdir)/'`fastsum_test.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo $(DEPDIR)/fastsum_test_threads-fastsum_test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_test.c' object='fastsum_test_threads-fastsum_test.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -c -o fastsum_test_threads-fastsum_test.o `test -f 'fastsum_test.c' || echo '$(srcdir)/'`fastsum_test.c
+
+fastsum_test_threads-fastsum_test.obj: fastsum_test.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -MT fastsum_test_threads-fastsum_test.obj -MD -MP -MF $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo -c -o fastsum_test_threads-fastsum_test.obj `if test -f 'fastsum_test.c'; then $(CYGPATH_W) 'fastsum_test.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_test.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo $(DEPDIR)/fastsum_test_threads-fastsum_test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_test.c' object='fastsum_test_threads-fastsum_test.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -c -o fastsum_test_threads-fastsum_test.obj `if test -f 'fastsum_test.c'; then $(CYGPATH_W) 'fastsum_test.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_test.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
+	cscopelist ctags distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/fastsum/README b/applications/fastsum/README
new file mode 100644
index 0000000..e021533
--- /dev/null
+++ b/applications/fastsum/README
@@ -0,0 +1,41 @@
+fastsum - fast NFFT-based summation
+
+  This library of C functions computes approximations of sums of the form
+
+            N
+            -
+  f(y )  =  >  alpha   K(y - x )       (j=1,...,M)
+     j      -       k     j   k
+           k=1
+
+  where x_k, y_j are arbitrary nodes in [-1/4+eps_B/2, 1/4-eps_B/2]^d, alpha_k
+  are complex coefficients and K: R^d -> C is a kernel function which is C^oo
+  except of the origin. Such kernels include log|x| and 1/|x|^b (b \in N) or
+  the parameter dependent Hardy's multiquadric (x^2+c^2)^(1/2) and generalized
+  multiquadrics (x^2+c^2)^(-b/2) (b \in N).
+
+  It is based on the fast Fourier transform for nonequispaced nodes (NFFT) and
+  therefore depends on the NFFT C-library. New kernels are easily incorporated
+  by defining an appropriate C-function (see kernels.c for some examples).
+
+  fastsum_test.c is an example for the usage of the library. The MATLAB script
+  file fastsum_test.m calls the MATLAB function fastsum.m, which is a simple
+  example for the usage in MATLAB.
+
+
+
+  References:
+
+  [1] D. Potts, and G. Steidl. Fast summation at nonequispaced knots by NFFTs.
+      SIAM J. Sci. Comput., 24:2013-2037, 2003.
+
+  [2] D. Potts, G. Steidl, and A. Nieslony. Fast convolution with radial
+      kernels at nonequispaced knots. Numer. Math., 98:329-351, 2004.
+
+  [3] M. Fenn, and G. Steidl. Fast NFFT-based summation of radial functions.
+      Sampl. Theory Signal Image Process., 3:1-28, 2004.
+
+  [4] M. Fenn, and D. Potts. Fast summation based on fast trigonometric
+      transforms at non-equispaced nodes. Numer. Linear Algebra. Appl.,
+      12:161-169, 2005.
+
diff --git a/applications/fastsum/fastsum.c b/applications/fastsum/fastsum.c
new file mode 100644
index 0000000..8bb53e0
--- /dev/null
+++ b/applications/fastsum/fastsum.c
@@ -0,0 +1,1018 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file fastsum.c
+ *  \brief Fast NFFT-based summation algorithm.
+ *
+ *  \author Markus Fenn
+ *  \date 2003-2006
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "fastsum.h"
+#include "infft.h"
+
+/** Required for test if (ths->k == one_over_x) */
+#include "kernels.h"
+
+/**
+ * \addtogroup applications_fastsum
+ * \{
+ */
+
+/** max */
+int max_i(int a, int b)
+{
+  return a >= b ? a : b;
+}
+
+/** factorial */
+double fak(int n)
+{
+  if (n<=1) return 1.0;
+  else return (double)n*fak(n-1);
+}
+
+/** binomial coefficient */
+double binom(int n, int m)
+{
+  return fak(n)/fak(m)/fak(n-m);
+}
+
+/** basis polynomial for regularized kernel */
+double BasisPoly(int m, int r, double xx)
+{
+  int k;
+  double sum=0.0;
+
+  for (k=0; k<=m-r; k++) {
+    sum+=binom(m+k,k)*pow((xx+1.0)/2.0,(double)k);
+  }
+  return sum*pow((xx+1.0),(double)r)*pow(1.0-xx,(double)(m+1))/(1<<(m+1))/fak(r); /* 1<<(m+1) = 2^(m+1) */
+}
+
+/** regularized kernel with K_I arbitrary and K_B smooth to zero */
+double _Complex regkern(kernel k, double xx, int p, const double *param, double a, double b)
+{
+  int r;
+  double _Complex sum=0.0;
+
+  if (xx<-0.5)
+    xx=-0.5;
+  if (xx>0.5)
+    xx=0.5;
+  if ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b)) {
+    return k(xx,0,param);
+  }
+  else if (xx<-0.5+b) {
+    sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0
+        *BasisPoly(p-1,0,2.0*xx/b+(1.0-b)/b);
+    for (r=0; r<p; r++) {
+      sum+=pow(-b/2.0,(double)r)
+          *k(-0.5+b,r,param)
+          *BasisPoly(p-1,r,-2.0*xx/b+(b-1.0)/b);
+    }
+    return sum;
+  }
+  else if ((xx>-a) && (xx<a)) {
+    for (r=0; r<p; r++) {
+      sum+=pow(a,(double)r)
+          *( k(-a,r,param)*BasisPoly(p-1,r,xx/a)
+              +k( a,r,param)*BasisPoly(p-1,r,-xx/a)*(r & 1 ? -1 : 1));
+    }
+    return sum;
+  }
+  else if (xx>0.5-b) {
+    sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0
+        *BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b);
+    for (r=0; r<p; r++) {
+      sum+=pow(b/2.0,(double)r)
+          *k(0.5-b,r,param)
+          *BasisPoly(p-1,r,2.0*xx/b-(1.0-b)/b);
+    }
+    return sum;
+  }
+  return k(xx,0,param);
+}
+
+/** regularized kernel with K_I arbitrary and K_B periodized
+ *  (used in 1D)
+ */
+double _Complex regkern1(kernel k, double xx, int p, const double *param, double a, double b)
+{
+  int r;
+  double _Complex sum=0.0;
+
+  if (xx<-0.5)
+    xx=-0.5;
+  if (xx>0.5)
+    xx=0.5;
+  if ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b))
+  {
+    return k(xx,0,param);
+  }
+  else if ((xx>-a) && (xx<a))
+  {
+    for (r=0; r<p; r++) {
+      sum+=pow(a,(double)r)
+          *( k(-a,r,param)*BasisPoly(p-1,r,xx/a)
+              +k( a,r,param)*BasisPoly(p-1,r,-xx/a)*(r & 1 ? -1 : 1));
+    }
+    return sum;
+  }
+  else if (xx<-0.5+b)
+  {
+    for (r=0; r<p; r++) {
+      sum+=pow(b,(double)r)
+          *( k(0.5-b,r,param)*BasisPoly(p-1,r,(xx+0.5)/b)
+              +k(-0.5+b,r,param)*BasisPoly(p-1,r,-(xx+0.5)/b)*(r & 1 ? -1 : 1));
+    }
+    return sum;
+  }
+  else if (xx>0.5-b)
+  {
+    for (r=0; r<p; r++) {
+      sum+=pow(b,(double)r)
+          *( k(0.5-b,r,param)*BasisPoly(p-1,r,(xx-0.5)/b)
+              +k(-0.5+b,r,param)*BasisPoly(p-1,r,-(xx-0.5)/b)*(r & 1 ? -1 : 1));
+    }
+    return sum;
+  }
+  return k(xx,0,param);
+}
+
+/** regularized kernel for even kernels with K_I even and K_B mirrored */
+double _Complex regkern2(kernel k, double xx, int p, const double *param, double a, double b)
+{
+  int r;
+  double _Complex sum=0.0;
+
+  xx=fabs(xx);
+
+  if (xx>0.5) {
+    for (r=0; r<p; r++) {
+      sum+=pow(b,(double)r)*k(0.5-b,r,param)
+          *(BasisPoly(p-1,r,0)+BasisPoly(p-1,r,0));
+    }
+    return sum;
+  }
+  else if ((a<=xx) && (xx<=0.5-b)) {
+    return k(xx,0,param);
+  }
+  else if (xx<a) {
+    for (r=0; r<p; r++) {
+      sum+=pow(-a,(double)r)*k(a,r,param)
+          *(BasisPoly(p-1,r,xx/a)+BasisPoly(p-1,r,-xx/a));
+    }
+    return sum;
+  }
+  else if ((0.5-b<xx) && (xx<=0.5)) {
+    for (r=0; r<p; r++) {
+      sum+=pow(b,(double)r)*k(0.5-b,r,param)
+          *(BasisPoly(p-1,r,(xx-0.5)/b)+BasisPoly(p-1,r,-(xx-0.5)/b));
+    }
+    return sum;
+  }
+  return 0.0;
+}
+
+/** regularized kernel for even kernels with K_I even
+ *  and K_B mirrored smooth to K(1/2) (used in dD, d>1)
+ */
+double _Complex regkern3(kernel k, double xx, int p, const double *param, double a, double b)
+{
+  int r;
+  double _Complex sum=0.0;
+
+  xx=fabs(xx);
+
+  if (xx>=0.5) {
+    /*return kern(typ,c,0,0.5);*/
+    xx=0.5;
+  }
+  /* else */
+  if ((a<=xx) && (xx<=0.5-b)) {
+    return k(xx,0,param);
+  }
+  else if (xx<a) {
+    for (r=0; r<p; r++) {
+      sum+=pow(-a,(double)r)*k(a,r,param)
+          *(BasisPoly(p-1,r,xx/a)+BasisPoly(p-1,r,-xx/a));
+    }
+    /*sum=kern(typ,c,0,xx); */
+    return sum;
+  }
+  else if ((0.5-b<xx) && (xx<=0.5)) {
+    sum=k(0.5,0,param)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b);
+    /* sum=regkern2(typ,c,p,a,b, 0.5)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b); */
+    for (r=0; r<p; r++) {
+      sum+=pow(b/2.0,(double)r)
+          *k(0.5-b,r,param)
+          *BasisPoly(p-1,r,2.0*xx/b-(1.0-b)/b);
+    }
+    return sum;
+  }
+  return 0.0;
+}
+
+/** linear spline interpolation in near field with even kernels */
+double _Complex linintkern(const double x, const double _Complex *Add,
+  const int Ad, const double a)
+{
+  double c,c1,c3;
+  int r;
+  double _Complex f1,f2;
+
+  c=x*Ad/a;
+  r=c; r=abs(r);
+  f1=Add[r];f2=Add[r+1];
+  c=fabs(c);
+  c1=c-r;
+  c3=c1-1.0;
+  return (-f1*c3+f2*c1);
+}
+
+double _Complex quadrintkern(const double x, const double _Complex *Add,
+  const int Ad, const double a)
+{
+  double c,c1,c2,c3;
+  int r;
+  double _Complex f0,f1,f2;
+
+  c=x*Ad/a;
+  r=c; r=abs(r);
+  if (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];}
+  else { f0=Add[r-1];f1=Add[r];f2=Add[r+1];}
+  c=fabs(c);
+  c1=c-r;
+  c2=c1+1.0;
+  c3=c1-1.0;
+  return (f0*c1*c3/2.0-f1*c2*c3+f2*c2*c1/2.0);
+}
+
+/** cubic spline interpolation in near field with even kernels */
+double _Complex kubintkern(const double x, const double _Complex *Add,
+  const int Ad, const double a)
+{
+  double c,c1,c2,c3,c4;
+  int r;
+  double _Complex f0,f1,f2,f3;
+  c=x*Ad/a;
+  r=c; r=abs(r);
+  if (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+  else { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+  c=fabs(c);
+  c1=c-r;
+  c2=c1+1.0;
+  c3=c1-1.0;
+  c4=c1-2.0;
+  /* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-
+     f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */
+  return(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);
+}
+
+/** cubic spline interpolation in near field with arbitrary kernels */
+double _Complex kubintkern1(const double x, const double _Complex *Add,
+  const int Ad, const double a)
+{
+  double c,c1,c2,c3,c4;
+  int r;
+  double _Complex f0,f1,f2,f3;
+  Add+=2;
+  c=(x+a)*Ad/2/a;
+  r=c; r=abs(r);
+  /*if (r==0) {f0=Add[r];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+  else */
+  { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+  c=fabs(c);
+  c1=c-r;
+  c2=c1+1.0;
+  c3=c1-1.0;
+  c4=c1-2.0;
+  /* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-
+     f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */
+  return(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);
+}
+
+/** quicksort algorithm for source knots and associated coefficients */
+void quicksort(int d, int t, double *x, double _Complex *alpha, int N)
+{
+  int lpos=0;
+  int rpos=N-1;
+  /*double pivot=x[((N-1)/2)*d+t];*/
+  double pivot=x[(N/2)*d+t];
+
+  int k;
+  double temp1;
+  double _Complex temp2;
+
+  while (lpos<=rpos)
+  {
+    while (x[lpos*d+t]<pivot)
+      lpos++;
+    while (x[rpos*d+t]>pivot)
+      rpos--;
+    if (lpos<=rpos)
+    {
+      for (k=0; k<d; k++)
+      {
+        temp1=x[lpos*d+k];
+        x[lpos*d+k]=x[rpos*d+k];
+        x[rpos*d+k]=temp1;
+      }
+      temp2=alpha[lpos];
+      alpha[lpos]=alpha[rpos];
+      alpha[rpos]=temp2;
+
+      lpos++;
+      rpos--;
+    }
+  }
+  if (0<rpos)
+    quicksort(d,t,x,alpha,rpos+1);
+  if (lpos<N-1)
+    quicksort(d,t,x+lpos*d,alpha+lpos,N-lpos);
+}
+
+/** initialize box-based search data structures */
+static void BuildBox(fastsum_plan *ths)
+{
+  int t, l;
+  int *box_index;
+  double val[ths->d];
+
+  box_index = (int *) malloc(ths->box_count * sizeof(int));
+  for (t=0; t < ths->box_count; t++)
+    box_index[t] = 0;
+
+  for (l=0; l < ths->N_total; l++)
+  {
+    int ind = 0;
+    for (t=0; t < ths->d; t++)
+    {
+      val[t] = ths->x[ths->d * l + t] + 0.25 - ths->eps_B/2.0;
+      ind *= ths->box_count_per_dim;
+      ind += (int) (val[t] / ths->eps_I);
+    }
+    box_index[ind]++;
+  }
+
+  ths->box_offset[0] = 0;
+  for (t=1; t<=ths->box_count; t++)
+  {
+    ths->box_offset[t] = ths->box_offset[t-1] + box_index[t-1];
+    box_index[t-1] = ths->box_offset[t-1];
+  }
+
+  for (l=0; l < ths->N_total; l++)
+  {
+    int ind = 0;
+    for (t=0; t < ths->d; t++)
+    {
+      val[t] = ths->x[ths->d * l + t] + 0.25 - ths->eps_B/2.0;
+      ind *= ths->box_count_per_dim;
+      ind += (int) (val[t] / ths->eps_I);
+    }
+
+    ths->box_alpha[box_index[ind]] = ths->alpha[l];
+
+    for (t=0; t < ths->d; t++)
+    {
+      ths->box_x[ths->d * box_index[ind] + t] = ths->x[ths->d * l + t];
+    }
+    box_index[ind]++;
+  }
+  free(box_index);
+}
+
+/** inner computation function for box-based near field correction */
+static inline double _Complex calc_SearchBox(int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)
+{
+  double _Complex result = 0.0;
+
+  int m, l;
+  double r;
+
+  for (m = start; m < end_lt; m++)
+  {
+      if (d==1)
+      {
+        r = y[0]-x[m];
+      }
+      else
+      {
+        r=0.0;
+        for (l=0; l<d; l++)
+          r+=(y[l]-x[m*d+l])*(y[l]-x[m*d+l]);
+        r=sqrt(r);
+      }
+      if (fabs(r)<a)
+      {
+        result += alpha[m]*k(r,0,param);              /* alpha*(kern-regkern) */
+	if (d==1)
+	{
+          if (flags & EXACT_NEARFIELD)
+            result -= alpha[m]*regkern1(k,r,p,param,a,1.0/16.0); /* exact value (in 1D)  */
+          else
+            result -= alpha[m]*kubintkern1(r,Add,Ad,a);               /* spline approximation */
+	}
+	else
+	{
+          if (flags & EXACT_NEARFIELD)
+            result -= alpha[m]*regkern(k,r,p,param,a,1.0/16.0);  /* exact value (in dD)  */
+          else
+#if defined(NF_KUB)
+            result -= alpha[m]*kubintkern(r,Add,Ad,a);                /* spline approximation */
+#elif defined(NF_QUADR)
+            result -= alpha[m]*quadrintkern(r,Add,Ad,a);                /* spline approximation */
+#elif defined(NF_LIN)
+            result -= alpha[m]*linintkern(r,Add,Ad,a);                /* spline approximation */
+#else
+  #error define interpolation method
+#endif
+        }
+      }
+  }
+  return result;
+}
+
+/** box-based near field correction */
+static double _Complex SearchBox(double *y, fastsum_plan *ths)
+{
+  double _Complex val = 0.0;
+  int t, l;
+  int y_multiind[ths->d];
+  int multiindex[ths->d];
+  int y_ind;
+
+  for (t=0; t < ths->d; t++)
+  {
+    y_multiind[t] = ((y[t] + 0.25 - ths->eps_B/2.0) / ths->eps_I);
+  }
+
+  if (ths->d==1)
+  {
+    for (y_ind = max_i(0, y_multiind[0]-1); y_ind < ths->box_count_per_dim && y_ind <= y_multiind[0]+1; y_ind++){
+      val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+      }
+  }
+  else if (ths->d==2)
+  {
+    for (multiindex[0] = max_i(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)
+      for (multiindex[1] = max_i(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)
+      {
+        y_ind = (ths->box_count_per_dim * multiindex[0]) + multiindex[1];
+        val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+      }
+  }
+  else if(ths->d==3)
+  {
+    for (multiindex[0] = max_i(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)
+      for (multiindex[1] = max_i(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)
+        for (multiindex[2] = max_i(0, y_multiind[2]-1); multiindex[2] < ths->box_count_per_dim && multiindex[2] <= y_multiind[2]+1; multiindex[2]++)
+        {
+          y_ind = ((ths->box_count_per_dim * multiindex[0]) + multiindex[1]) * ths->box_count_per_dim + multiindex[2];
+          val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+        }
+  }
+  else {
+    exit(-1);
+  }
+  return val;
+}
+
+/** recursive sort of source knots dimension by dimension to get tree structure */
+void BuildTree(int d, int t, double *x, double _Complex *alpha, int N)
+{
+  if (N>1)
+  {
+    int m=N/2;
+
+    quicksort(d,t,x,alpha,N);
+
+    BuildTree(d, (t+1)%d, x, alpha, m);
+    BuildTree(d, (t+1)%d, x+(m+1)*d, alpha+(m+1), N-m-1);
+  }
+}
+
+/** fast search in tree of source knots for near field computation*/
+double _Complex SearchTree(const int d, const int t, const double *x,
+  const double _Complex *alpha, const double *xmin, const double *xmax,
+  const int N, const kernel k, const double *param, const int Ad,
+  const double _Complex *Add, const int p, const unsigned flags)
+{
+  int m=N/2;
+  double Min=xmin[t], Max=xmax[t], Median=x[m*d+t];
+  double a=fabs(Max-Min)/2;
+  int l;
+  int E=0;
+  double r;
+
+  if (N==0)
+    return 0.0;
+  if (Min>Median)
+    return SearchTree(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags);
+  else if (Max<Median)
+    return SearchTree(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);
+  else
+  {
+    double _Complex result = 0.0;
+    E=0;
+
+    for (l=0; l<d; l++)
+    {
+      if ( x[m*d+l]>xmin[l] && x[m*d+l]<xmax[l] )
+        E++;
+    }
+
+    if (E==d)
+    {
+      if (d==1)
+      {
+        r = xmin[0]+a-x[m];  /* remember: xmin+a = y */
+      }
+      else
+      {
+        r=0.0;
+        for (l=0; l<d; l++)
+          r+=(xmin[l]+a-x[m*d+l])*(xmin[l]+a-x[m*d+l]);  /* remember: xmin+a = y */
+        r=sqrt(r);
+      }
+      if (fabs(r)<a)
+      {
+        result += alpha[m]*k(r,0,param);                         /* alpha*(kern-regkern) */
+        if (d==1)
+        {
+          if (flags & EXACT_NEARFIELD)
+            result -= alpha[m]*regkern1(k,r,p,param,a,1.0/16.0); /* exact value (in 1D)  */
+          else
+            result -= alpha[m]*kubintkern1(r,Add,Ad,a);               /* spline approximation */
+        }
+        else
+        {
+          if (flags & EXACT_NEARFIELD)
+            result -= alpha[m]*regkern(k,r,p,param,a,1.0/16.0);  /* exact value (in dD)  */
+          else
+#if defined(NF_KUB)
+            result -= alpha[m]*kubintkern(r,Add,Ad,a);                /* spline approximation */
+#elif defined(NF_QUADR)
+            result -= alpha[m]*quadrintkern(r,Add,Ad,a);                /* spline approximation */
+#elif defined(NF_LIN)
+            result -= alpha[m]*linintkern(r,Add,Ad,a);                /* spline approximation */
+#else
+  #error define interpolation method
+#endif
+        }
+      }
+    }
+    result += SearchTree(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags)
+      + SearchTree(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);
+    return result;
+  }
+}
+
+/** initialization of fastsum plan */
+void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B)
+{
+  int t;
+  int N[d], n[d];
+  int n_total;
+  int sort_flags_trafo = 0;
+  int sort_flags_adjoint = 0;
+#ifdef _OPENMP
+  int nthreads = nfft_get_omp_num_threads();
+#endif
+
+  if (d > 1)
+  {
+    sort_flags_trafo = NFFT_SORT_NODES;
+#ifdef _OPENMP
+    sort_flags_adjoint = NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT;
+#else
+    sort_flags_adjoint = NFFT_SORT_NODES;
+#endif
+  }
+
+  ths->d = d;
+
+  ths->N_total = N_total;
+  ths->M_total = M_total;
+
+  ths->x = (double *)nfft_malloc(d*N_total*(sizeof(double)));
+  ths->alpha = (double _Complex *)nfft_malloc(N_total*(sizeof(double _Complex)));
+
+  ths->y = (double *)nfft_malloc(d*M_total*(sizeof(double)));
+  ths->f = (double _Complex *)nfft_malloc(M_total*(sizeof(double _Complex)));
+
+  ths->k = k;
+  ths->kernel_param = param;
+
+  ths->flags = flags;
+
+  ths->p = p;
+  ths->eps_I = eps_I; /* =(double)ths->p/(double)nn; */  /** inner boundary */
+  ths->eps_B = eps_B; /* =1.0/16.0; */                   /** outer boundary */
+
+  /** init spline for near field computation */
+  if (!(ths->flags & EXACT_NEARFIELD))
+  {
+    if (ths->d==1)
+    {
+      ths->Ad = 4*(ths->p)*(ths->p);
+      ths->Add = (double _Complex *)nfft_malloc((ths->Ad+5)*(sizeof(double _Complex)));
+    }
+    else
+    {
+      if (ths->k == one_over_x)
+      {
+        double delta = 1e-8;
+        switch(p)
+        {
+          case 2: delta = 1e-3;
+                  break;
+          case 3: delta = 1e-4;
+                  break;
+          case 4: delta = 1e-5;
+                  break;
+          case 5: delta = 1e-6;
+                  break;
+          case 6: delta = 1e-6;
+                  break;
+          case 7: delta = 1e-7;
+                  break;
+          default: delta = 1e-8;
+        }
+
+#if defined(NF_KUB)
+        ths->Ad = max_i(10, (int) ceil(1.4/pow(delta,1.0/4.0)));
+        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+#elif defined(NF_QUADR)
+        ths->Ad = (int) ceil(2.2/pow(delta,1.0/3.0));
+        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+#elif defined(NF_LIN)
+        ths->Ad = (int) ceil(1.7/pow(delta,1.0/2.0));
+        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+#else
+  #error define NF_LIN or NF_QUADR or NF_KUB
+#endif
+      }
+      else
+      {
+        ths->Ad = 2*(ths->p)*(ths->p);
+        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+      }
+    }
+  }
+
+  /** init d-dimensional NFFT plan */
+  ths->n = nn;
+  for (t=0; t<d; t++)
+  {
+    N[t] = nn;
+    n[t] = 2*nn;
+  }
+  nfft_init_guru(&(ths->mv1), d, N, N_total, n, m,
+                   sort_flags_adjoint |
+                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                   FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  nfft_init_guru(&(ths->mv2), d, N, M_total, n, m,
+                   sort_flags_trafo |
+                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                   FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init d-dimensional FFTW plan */
+  n_total = 1;
+  for (t=0; t<d; t++)
+    n_total *= nn;
+
+  ths->b = (fftw_complex *)nfft_malloc(n_total*sizeof(fftw_complex));
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+  fftw_plan_with_nthreads(nthreads);
+#endif
+
+  ths->fft_plan = fftw_plan_dft(d,N,ths->b,ths->b,FFTW_FORWARD,FFTW_ESTIMATE);
+
+#ifdef _OPENMP
+}
+#endif
+
+  if (ths->flags & NEARFIELD_BOXES)
+  {
+    ths->box_count_per_dim = floor((0.5 - ths->eps_B) / ths->eps_I) + 1;
+    ths->box_count = 1;
+    for (t=0; t<ths->d; t++)
+      ths->box_count *= ths->box_count_per_dim;
+
+    ths->box_offset = (int *) nfft_malloc((ths->box_count+1) * sizeof(int));
+
+    ths->box_alpha = (double _Complex *)nfft_malloc(ths->N_total*(sizeof(double _Complex)));
+
+    ths->box_x = (double *) nfft_malloc(ths->d * ths->N_total *  sizeof(double));
+  }
+}
+
+/** finalization of fastsum plan */
+void fastsum_finalize(fastsum_plan *ths)
+{
+  nfft_free(ths->x);
+  nfft_free(ths->alpha);
+  nfft_free(ths->y);
+  nfft_free(ths->f);
+
+  if (!(ths->flags & EXACT_NEARFIELD))
+    nfft_free(ths->Add);
+
+  nfft_finalize(&(ths->mv1));
+  nfft_finalize(&(ths->mv2));
+
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+#endif
+  fftw_destroy_plan(ths->fft_plan);
+#ifdef _OPENMP
+}
+#endif
+
+  nfft_free(ths->b);
+
+  if (ths->flags & NEARFIELD_BOXES)
+  {
+    nfft_free(ths->box_offset);
+    nfft_free(ths->box_alpha);
+    nfft_free(ths->box_x);
+  }
+}
+
+/** direct computation of sums */
+void fastsum_exact(fastsum_plan *ths)
+{
+  int j,k;
+  int t;
+  double r;
+
+  #pragma omp parallel for default(shared) private(j,k,t,r)
+  for (j=0; j<ths->M_total; j++)
+  {
+    ths->f[j]=0.0;
+    for (k=0; k<ths->N_total; k++)
+    {
+      if (ths->d==1)
+        r = ths->y[j] - ths->x[k];
+      else
+      {
+        r=0.0;
+        for (t=0; t<ths->d; t++)
+          r += (ths->y[j*ths->d+t]-ths->x[k*ths->d+t])*(ths->y[j*ths->d+t]-ths->x[k*ths->d+t]);
+        r=sqrt(r);
+      }
+      ths->f[j] += ths->alpha[k] * ths->k(r,0,ths->kernel_param);
+    }
+  }
+}
+
+/** precomputation for fastsum */
+void fastsum_precompute(fastsum_plan *ths)
+{
+  int j,k,t;
+  int n_total;
+  ticks t0, t1;
+
+  ths->MEASURE_TIME_t[0] = 0.0;
+  ths->MEASURE_TIME_t[1] = 0.0;
+  ths->MEASURE_TIME_t[2] = 0.0;
+  ths->MEASURE_TIME_t[3] = 0.0;
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+
+
+  if (ths->flags & NEARFIELD_BOXES)
+  {
+    BuildBox(ths);
+  }
+  else
+  {
+    /** sort source knots */
+    BuildTree(ths->d,0,ths->x,ths->alpha,ths->N_total);
+  }
+
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[3] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** precompute spline values for near field*/
+  if (!(ths->flags & EXACT_NEARFIELD))
+  {
+    if (ths->d==1)
+      #pragma omp parallel for default(shared) private(k)
+      for (k=-ths->Ad/2-2; k <= ths->Ad/2+2; k++)
+        ths->Add[k+ths->Ad/2+2] = regkern1(ths->k, ths->eps_I*(double)k/ths->Ad*2, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B);
+    else
+      #pragma omp parallel for default(shared) private(k)
+      for (k=0; k <= ths->Ad+2; k++)
+        ths->Add[k] = regkern3(ths->k, ths->eps_I*(double)k/ths->Ad, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B);
+  }
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[0] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** init NFFT plan for transposed transform in first step*/
+  for (k=0; k<ths->mv1.M_total; k++)
+    for (t=0; t<ths->mv1.d; t++)
+      ths->mv1.x[ths->mv1.d*k+t] = - ths->x[ths->mv1.d*k+t];  /* note the factor -1 for transposed transform instead of adjoint*/
+
+  /** precompute psi, the entries of the matrix B */
+  if(ths->mv1.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&(ths->mv1));
+
+  if(ths->mv1.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&(ths->mv1));
+
+  if(ths->mv1.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&(ths->mv1));
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[1] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+  /** init Fourier coefficients */
+  for(k=0; k<ths->mv1.M_total;k++)
+    ths->mv1.f[k] = ths->alpha[k];
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** init NFFT plan for transform in third step*/
+  for (j=0; j<ths->mv2.M_total; j++)
+    for (t=0; t<ths->mv2.d; t++)
+      ths->mv2.x[ths->mv2.d*j+t] = - ths->y[ths->mv2.d*j+t];  /* note the factor -1 for conjugated transform instead of standard*/
+
+  /** precompute psi, the entries of the matrix B */
+  if(ths->mv2.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&(ths->mv2));
+
+  if(ths->mv2.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&(ths->mv2));
+
+  if(ths->mv2.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&(ths->mv2));
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[2] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** precompute Fourier coefficients of regularised kernel*/
+  n_total = 1;
+  for (t=0; t<ths->d; t++)
+    n_total *= ths->n;
+
+  #pragma omp parallel for default(shared) private(j,k,t)
+  for (j=0; j<n_total; j++)
+  {
+    if (ths->d==1)
+      ths->b[j] = regkern1(ths->k, (double)j / (ths->n) - 0.5, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B)/n_total;
+    else
+    {
+      k=j;
+      ths->b[j]=0.0;
+      for (t=0; t<ths->d; t++)
+      {
+        ths->b[j] += ((double)(k % (ths->n)) / (ths->n) - 0.5) * ((double)(k % (ths->n)) / (ths->n) - 0.5);
+        k = k / (ths->n);
+      }
+      ths->b[j] = regkern3(ths->k, sqrt(ths->b[j]), ths->p, ths->kernel_param, ths->eps_I, ths->eps_B)/n_total;
+    }
+  }
+
+  nfft_fftshift_complex(ths->b, ths->mv1.d, ths->mv1.N);
+  fftw_execute(ths->fft_plan);
+  nfft_fftshift_complex(ths->b, ths->mv1.d, ths->mv1.N);
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[0] += nfft_elapsed_seconds(t1,t0);
+#endif
+}
+
+/** fast NFFT-based summation */
+void fastsum_trafo(fastsum_plan *ths)
+{
+  int j,k,t;
+  ticks t0, t1;
+
+  ths->MEASURE_TIME_t[4] = 0.0; 
+  ths->MEASURE_TIME_t[5] = 0.0;
+  ths->MEASURE_TIME_t[6] = 0.0;
+  ths->MEASURE_TIME_t[7] = 0.0;
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** first step of algorithm */
+  nfft_adjoint(&(ths->mv1));
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[4] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** second step of algorithm */
+  #pragma omp parallel for default(shared) private(k)
+  for (k=0; k<ths->mv2.N_total; k++)
+    ths->mv2.f_hat[k] = ths->b[k] * ths->mv1.f_hat[k];
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[5] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** third step of algorithm */
+  nfft_trafo(&(ths->mv2));
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[6] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+  t0 = getticks();
+#endif
+  /** add near field */
+  #pragma omp parallel for default(shared) private(j,k,t)
+  for (j=0; j<ths->M_total; j++)
+  {
+    double ymin[ths->d], ymax[ths->d]; /** limits for d-dimensional near field box */
+
+    if (ths->flags & NEARFIELD_BOXES)
+    {
+      ths->f[j] = ths->mv2.f[j] + SearchBox(ths->y + ths->d*j, ths);
+    }
+    else
+    {
+      for (t=0; t<ths->d; t++)
+      {
+        ymin[t] = ths->y[ths->d*j+t] - ths->eps_I;
+        ymax[t] = ths->y[ths->d*j+t] + ths->eps_I;
+      }
+      ths->f[j] = ths->mv2.f[j] + SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags);
+    }
+    /* ths->f[j] = ths->mv2.f[j]; */
+    /* ths->f[j] = SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags); */
+  }
+
+#ifdef MEASURE_TIME
+  t1 = getticks();
+  ths->MEASURE_TIME_t[7] += nfft_elapsed_seconds(t1,t0);
+#endif
+}
+/* \} */
+
+/* fastsum.c */
diff --git a/applications/fastsum/fastsum.h b/applications/fastsum/fastsum.h
new file mode 100644
index 0000000..60dbc4c
--- /dev/null
+++ b/applications/fastsum/fastsum.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file fastsum.h
+ *  \brief Header file for the fast NFFT-based summation algorithm.
+ *
+ *  reference: M. Fenn, G. Steidl,
+ *    Fast NFFT based summation of radial functions.
+ *    Sampl. Theory Signal Image Process., 3, 1-28, 2004.
+ *
+ *  \author Markus Fenn
+ *  \date 2003-2006
+ */
+
+/**
+ * \defgroup applications_fastsum Fast summation
+ * \ingroup applications
+ * \{
+ */
+
+#ifndef fastsum_h_inc
+#define fastsum_h_inc
+
+#include "config.h"
+
+/** Include header for C99 complex datatype. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+/** Include header for utils from NFFT3 library. */
+#include "nfft3util.h"
+/** Include header for NFFT3 library. */
+#include "nfft3.h"
+
+#if !(defined(NF_LIN) || defined(NF_QUADR) || defined(NF_KUB))
+  #define NF_KUB
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+typedef double _Complex (*kernel)(double , int , const double *);
+
+/**
+ * Constant symbols
+ */
+#define EXACT_NEARFIELD  (1U<< 0)
+
+#define NEARFIELD_BOXES (1U<< 1)
+
+/** plan for fast summation algorithm */
+typedef struct fastsum_plan_
+{
+  /** api */
+
+  int d;                                /**< number of dimensions            */
+
+  int N_total;                          /**< number of source knots          */
+  int M_total;                          /**< number of target knots          */
+
+  double _Complex *alpha;                       /**< source coefficients             */
+  double _Complex *f;                           /**< target evaluations              */
+
+  double *x;                            /**< source knots in d-ball with radius 1/4-eps_b/2 */
+  double *y;                            /**< target knots in d-ball with radius 1/4-eps_b/2 */
+
+  kernel k;  /**< kernel function    */
+  double *kernel_param;                 /**< parameters for kernel function  */
+
+  unsigned flags;                       /**< flags precomp. and approx.type  */
+
+  /** internal */
+
+  /** DS_PRE - direct summation */
+  double _Complex *pre_K;                       /**< precomputed K(x_j-y_l)          */
+
+  /** FS__ - fast summation */
+  int n;                                /**< expansion degree                */
+  fftw_complex *b;                      /**< expansion coefficients          */
+
+  int p;                                /**< degree of smoothness of regularization */
+  double eps_I;                         /**< inner boundary                  */  /* fixed to p/n so far  */
+  double eps_B;                         /**< outer boundary                  */  /* fixed to 1/16 so far */
+
+  nfft_plan mv1;                        /**< source nfft plan                */
+  nfft_plan mv2;                        /**< target nfft plan                */
+
+  /** near field */
+  int Ad;                               /**< number of spline knots for nearfield computation of regularized kernel */
+  double _Complex *Add;                 /**< spline values */
+
+  /* things for computing *b - are they used only once?? */
+  fftw_plan fft_plan;
+
+  int box_count;
+  int box_count_per_dim;
+  int *box_offset;
+  double *box_x;
+  double _Complex *box_alpha;
+
+  double MEASURE_TIME_t[8]; /**< Measured time for each step if MEASURE_TIME is set */
+} fastsum_plan;
+
+/** initialize fast summation plan
+ *
+ * \param ths The pointer to a fastsum plan.
+ * \param d The dimension of the problem.
+ * \param N_total The number of source knots x.
+ * \param M_total The number of target knots y.
+ * \param kernel The kernel function.
+ * \param param The parameters for the kernel function.
+ * \param flags Fastsum flags.
+ * \param nn The expansion degree.
+ * \param m The cut-off parameter for the NFFT.
+ * \param p The degree of smoothness.
+ * \param eps_I The inner boundary.
+ * \param eps_B the outer boundary.
+ *
+ */
+void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B);
+
+/** finalize plan
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_finalize(fastsum_plan *ths);
+
+/** direct summation
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_exact(fastsum_plan *ths);
+
+/** sort source nodes, precompute Fourier coefficients, etc.
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_precompute(fastsum_plan *ths);
+
+/** fast NFFT-based summation algorithm
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_trafo(fastsum_plan *ths);
+/* \} */
+
+double _Complex regkern(kernel k, double xx, int p, const double *param, double a, double b);
+
+/** cubic spline interpolation in near field with even kernels */
+double _Complex kubintkern(const double x, const double _Complex *Add,
+  const int Ad, const double a);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif /* __cplusplus */
+
+#endif
+/* fastsum.h */
diff --git a/applications/fastsum/fastsum.m b/applications/fastsum/fastsum.m
new file mode 100644
index 0000000..19a2ff6
--- /dev/null
+++ b/applications/fastsum/fastsum.m
@@ -0,0 +1,57 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fastsum.m 3776 2012-06-03 13:29:25Z keiner $
+function [f,f_direct]=fastsum(x,alpha,y,kernel,c,m,n,p,eps_I,eps_B)
+
+% f=fastsum(x,alpha,y,kernel,c,m,n,p)
+%
+%   Computes the sums
+%
+%     f(y_j) = sum_{k=1}^N alpha_k kernel(x_k-y_j)   (j=1:M)
+%
+%   by calling C-program with the fast NFFT-based algorithm.
+%
+%   size(f) = [N,1] (complex)
+%   size(x) = [N,d]
+%   size(alpha) = [N,1] (complex)
+%   size(y)=[M,d]
+%   kernel = 'multiquadric', e.g.
+%   c kernel parameter
+%   m cut-off parameter for NFFT
+%   n expansion degree
+%   p smoothness
+%
+% Markus Fenn, 2006.
+
+[N,d]=size(x);
+[M,d]=size(y);
+
+%write input to file
+save -ascii -double x.dat x
+alpha2=[real(alpha) imag(alpha)];
+save -ascii -double alpha.dat alpha2
+save -ascii -double y.dat y
+
+%execute C-program for fast summation
+system(sprintf('./fastsum_matlab %d %d %d %d %d %d %s %e %e %e',d,N,M,n,m,p,kernel,c,eps_I,eps_B));
+
+%read result from file
+f2=load('f.dat');
+f=f2(:,1)+i*f2(:,2);
+
+f2=load('f_direct.dat');
+f_direct=f2(:,1)+i*f2(:,2);
diff --git a/applications/fastsum/fastsum_benchomp.c b/applications/fastsum/fastsum_benchomp.c
new file mode 100644
index 0000000..a22d3fc
--- /dev/null
+++ b/applications/fastsum/fastsum_benchomp.c
@@ -0,0 +1,651 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include <nfft3.h>
+#include <nfft3util.h>
+
+#define NREPEAT 5
+
+static FILE* file_out_tex = NULL;
+
+int get_nthreads_array(int **arr)
+{
+  int max_threads = nfft_get_omp_num_threads();
+  int alloc_num = 2;
+  int k;
+  int ret_number = 0;
+  int max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;
+
+  if (max_threads <= 5)
+  {
+    *arr = (int*) malloc(max_threads*sizeof(int));
+    for (k = 0; k < max_threads; k++)
+      *(*arr + k) = k+1;
+    return max_threads;
+  }
+
+  for (k = 1; k <= max_threads; k*=2, alloc_num++);
+
+  *arr = (int*) malloc(alloc_num*sizeof(int));
+
+  for (k = 1; k <= max_threads; k*=2)
+  {
+    if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+    {
+      *(*arr + ret_number) = max_threads/2;
+      ret_number++;
+    }
+
+    *(*arr + ret_number) = k;
+    ret_number++;
+
+    if (k != max_threads && 2*k > max_threads)
+    {
+      *(*arr + ret_number) = max_threads;
+      ret_number++;
+      break;
+    }
+  }
+
+  return ret_number;
+} 
+  
+
+void check_result_value(const int val, const int ok, const char *msg)
+{
+  if (val != ok)
+  {
+    fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
+
+    exit(1);
+  }
+}
+
+void run_test_create(int d, int L, int M)
+{
+  char cmd[1025];
+
+  snprintf(cmd, 1024, "./fastsum_benchomp_createdataset %d %d %d > fastsum_benchomp_test.data", d, L, M);
+  fprintf(stderr, "%s\n", cmd);
+  check_result_value(system(cmd), 0, "createdataset");
+}
+
+void run_test_init_output()
+{
+  FILE *f = fopen("fastsum_benchomp_test.result", "w");
+  if (f!= NULL)
+    fclose(f);
+}
+
+typedef struct
+{
+  int d;
+  int L;
+  int M;
+  int n;
+  int m;
+  int p;
+  char *kernel_name;
+  double c;
+  double eps_I;
+  double eps_B;
+} s_param;
+
+typedef struct
+{
+  double avg;
+  double min;
+  double max;
+} s_resval;
+
+typedef struct
+{
+  int nthreads;
+  s_resval resval[16];
+} s_result;
+
+typedef struct
+{
+  s_param param;
+  s_result *results;
+  int nresults;
+} s_testset;
+
+void run_test(s_resval *res, int nrepeat, int n, int m, int p, char *kernel_name, double c, double eps_I, double eps_B, int nthreads)
+{
+  char cmd[1025];
+  int r,t;
+  
+  for (t = 0; t < 16; t++)
+  {
+    res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+  }
+
+  if (nthreads < 2)
+    snprintf(cmd, 1024, "./fastsum_benchomp_detail_single %d %d %d %s %lg %lg %lg < fastsum_benchomp_test.data > fastsum_benchomp_test.out", n, m, p, kernel_name, c, eps_I, eps_B);
+  else
+    snprintf(cmd, 1024, "./fastsum_benchomp_detail_threads %d %d %d %s %lg %lg %lg %d < fastsum_benchomp_test.data > fastsum_benchomp_test.out", n, m, p, kernel_name, c, eps_I, eps_B, nthreads);
+  fprintf(stderr, "%s\n", cmd);
+  check_result_value(system(cmd), 0, cmd);
+
+  for (r = 0; r < nrepeat; r++)
+  {
+    int retval;
+    double v[16];
+    FILE *f;
+    check_result_value(system(cmd), 0, cmd);
+    f = fopen("fastsum_benchomp_test.out", "r");
+    retval = fscanf(f, "%lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5, v+6, v+7, v+8, v+9, v+10, v+11, v+12, v+13, v+14, v+15);
+    check_result_value(retval, 16, "read fastsum_benchomp_test.out");
+    fclose(f);
+
+    for (t = 0; t < 16; t++)
+    {
+      res[t].avg += v[t];
+      if (res[t].min > v[t])
+        res[t].min = v[t];
+      if (res[t].max < v[t])
+        res[t].max = v[t];
+    }
+  }
+
+  for (t = 0; t < 16; t++)
+    res[t].avg /= nrepeat;
+
+  fprintf(stderr, "%d %d: ", nthreads, nrepeat);
+  for (t = 0; t < 16; t++)
+    fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+  fprintf(stderr, "\n");
+}
+
+const char *get_psi_string(int flags)
+{
+  if (flags & PRE_PSI)
+    return "prepsi";
+  else if (flags & PRE_ONE_PSI)
+    return "unknownPSI";
+
+  return "nopsi";
+}
+const char *get_sort_string(int flags)
+{
+  if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    return "";
+
+  if (flags & NFFT_SORT_NODES)
+    return "sorted";
+
+  return "unsorted";
+}
+
+const char *get_adjoint_omp_string(int flags)
+{
+  if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    return "blockwise";
+
+    return "";
+}
+
+#define MASK_FSUM_D (1U<<0)
+#define MASK_FSUM_L (1U<<1)
+#define MASK_FSUM_M (1U<<2)
+#define MASK_FSUM_MULTIBW (1U<<3)
+#define MASK_FSUM_WINM (1U<<4)
+#define MASK_FSUM_P (1U<<5)
+#define MASK_FSUM_KERNEL (1U<<6)
+#define MASK_FSUM_EPSI (1U<<7)
+#define MASK_FSUM_EPSB (1U<<8)
+
+unsigned int fastsum_determine_different_parameters(s_testset *testsets, int ntestsets)
+{
+  int t;
+  unsigned int mask = 0;
+
+  if (ntestsets < 2)
+    return 0;
+
+  for (t = 1; t < ntestsets; t++)
+  {
+    if (testsets[t-1].param.d != testsets[t].param.d)
+      mask |= MASK_FSUM_D;
+    if (testsets[t-1].param.L != testsets[t].param.L)
+      mask |= MASK_FSUM_L;
+    if (testsets[t-1].param.M != testsets[t].param.M)
+      mask |= MASK_FSUM_M;
+    if (testsets[t-1].param.n != testsets[t].param.n)
+      mask |= MASK_FSUM_MULTIBW;
+    if (testsets[t-1].param.m != testsets[t].param.m)
+      mask |= MASK_FSUM_WINM;
+    if (testsets[t-1].param.p != testsets[t].param.p)
+      mask |= MASK_FSUM_P;
+    if (strcmp(testsets[t-1].param.kernel_name, testsets[t].param.kernel_name) != 0)
+      mask |= MASK_FSUM_KERNEL;
+    if (testsets[t-1].param.eps_I != testsets[t].param.eps_I)
+      mask |= MASK_FSUM_EPSI;
+    if (testsets[t-1].param.eps_B != testsets[t].param.eps_B)
+      mask |= MASK_FSUM_EPSB;
+  }
+
+  return mask;
+}
+
+void strEscapeUnderscore(char *dst, char *src, int maxlen)
+{
+  int i = 0;
+  int len;
+  int offset = 0;
+
+  while (src[i] != '\0' && len + offset < maxlen - 1)
+  {
+    if (src[i] == '_')
+      len = snprintf(dst+offset, maxlen-offset, "\\_{}");
+    else
+      len = snprintf(dst+offset, maxlen-offset, "%c", src[i]);
+    offset += len;
+    i++;
+  }
+}
+
+void fastsum_get_plot_title_minus_indep(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+{
+  unsigned int mask = ~diff_mask;
+  int offset = 0;
+  int len;
+
+  len = snprintf(outstr, maxlen, "%s", hostname);
+  if (len < 0 || len+offset >= maxlen-1) return;
+  offset += len;
+
+  if (mask & MASK_FSUM_D)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %dd fastsum", param.d);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if ((mask & (MASK_FSUM_L | MASK_FSUM_M)) && param.L == param.M)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " L=M=%d", param.L);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+  else
+  {
+    if (mask & MASK_FSUM_L)
+    {
+      len = snprintf(outstr+offset, maxlen-offset, " L=%d", param.L);
+      if (len < 0 || len+offset >= maxlen-1) return;
+      offset += len;
+    }
+
+    if (mask & MASK_FSUM_M)
+    {
+      len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
+      if (len < 0 || len+offset >= maxlen-1) return;
+      offset += len;
+    }
+  }
+
+  if (mask & MASK_FSUM_MULTIBW)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " n=%d", param.n);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FSUM_WINM)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FSUM_P)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " p=%d", param.p);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FSUM_KERNEL)
+  {
+    char tmp[maxlen];
+    strEscapeUnderscore(tmp, param.kernel_name, maxlen);
+
+    len = snprintf(outstr+offset, maxlen-offset, " %s", tmp);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if ((mask & (MASK_FSUM_EPSI | MASK_FSUM_EPSB)) && param.eps_I == param.eps_B)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{I}$=$\\varepsilon_\\mathrm{B}$=%g", param.eps_I);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+  else
+  {
+    if (mask & MASK_FSUM_EPSI)
+    {
+      len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{I}$=%g", param.eps_I);
+      if (len < 0 || len+offset >= maxlen-1) return;
+      offset += len;
+    }
+
+    if (mask & MASK_FSUM_EPSB)
+    {
+      len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{B}$=%g", param.eps_B);
+      if (len < 0 || len+offset >= maxlen-1) return;
+      offset += len;
+    }
+  }
+}
+
+void nfft_adjoint_print_output_histo_DFBRT(FILE *out, s_testset testset)
+{
+  int i, size = testset.nresults;
+  char hostname[1025];
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+  fprintf(out, "symbolic x coords={");
+  for (i = 0; i < size; i++)
+    if (i > 0)
+      fprintf(out, ",%d", testset.results[i].nthreads);
+    else
+      fprintf(out, "%d", testset.results[i].nthreads);
+
+  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out, " title={%s %dd $\\textrm{NFFT}^\\top$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}", hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);
+  fprintf(out, " ]\n");
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[10].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[11].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[12].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[1].avg);
+  fprintf(out, "};\n");
+  fprintf(out, "\\legend{D,$\\textrm{F}^\\top$,$\\textrm{B}^\\top$,prepsi,total}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void nfft_trafo_print_output_histo_DFBRT(FILE *out, s_testset testset)
+{
+  int i, size = testset.nresults;
+  char hostname[1025];
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+  fprintf(out, "symbolic x coords={");
+  for (i = 0; i < size; i++)
+    if (i > 0)
+      fprintf(out, ",%d", testset.results[i].nthreads);
+    else
+      fprintf(out, "%d", testset.results[i].nthreads);
+
+  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out, " title={%s %dd $\\textrm{NFFT}$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}", hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);
+  fprintf(out, " ]\n");
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[13].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[14].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[15].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[6].avg + testset.results[i].resval[2].avg);
+  fprintf(out, "};\n");
+  fprintf(out, "\\legend{D,F,B,prepsi,total}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void fastsum_print_output_histo_PreRfNfT(FILE *out, s_testset testset)
+{
+  int i, size = testset.nresults;
+  char hostname[1025];
+  char plottitle[1025];
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testset.param, 0);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+  fprintf(out, "symbolic x coords={");
+  for (i = 0; i < size; i++)
+    if (i > 0)
+      fprintf(out, ",%d", testset.results[i].nthreads);
+    else
+      fprintf(out, "%d", testset.results[i].nthreads);
+
+  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out, " title={%s}", plottitle);
+  fprintf(out, " ]\n");
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg+testset.results[i].resval[2].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[5].avg + testset.results[i].resval[6].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[7].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[9].avg - testset.results[i].resval[0].avg);
+  fprintf(out, "};\n");
+  fprintf(out, "\\legend{prepsi (step 1b),init nearfield (step 1c),far field (steps 2a-c),nearfield (step 2d),total $-$ step 1a}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void fastsum_print_output_speedup_total_minus_indep(FILE *out, s_testset *testsets, int ntestsets)
+{
+  int i, t;
+  char hostname[1025];
+  char plottitle[1025];
+  unsigned int diff_mask = fastsum_determine_different_parameters(testsets, ntestsets);
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FSUM_WINM);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+  fprintf(out, " title={%s}", plottitle);
+  fprintf(out, " ]\n");
+
+  for (t = 0; t < ntestsets; t++)
+  {
+    s_testset testset = testsets[t];
+
+    double tref = 0.0;
+    for (i = 0; i < testset.nresults; i++)
+      if (testset.results[i].nthreads == 1)
+        tref = testset.results[i].resval[9].avg - testset.results[i].resval[0].avg;
+
+    fprintf(out, "\\addplot coordinates {");
+    for (i = 0; i < testset.nresults; i++)
+      fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));
+    fprintf(out, "};\n");
+
+    for (i = 0; i < testset.nresults; i++)
+    {
+      fprintf(stderr, "%d:%.3f  ", testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));
+    }
+    fprintf(stderr, "\n\n");
+  }
+
+  fprintf(out, "\\legend{{");
+  for (t = 0; t < ntestsets; t++)
+  {
+    char title[256];
+    if (t > 0)
+      fprintf(out, "},{");
+    fastsum_get_plot_title_minus_indep(title, 255, "", testsets[t].param, ~(diff_mask | MASK_FSUM_WINM));
+    fprintf(out, "%s", title);
+  }
+  fprintf(out, "}}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void run_testset(s_testset *testset, int d, int L, int M, int n, int m, int p, char *kernel_name, double c, double eps_I, double eps_B, int *nthreads_array, int n_threads_array_size)
+{
+  int i;
+  testset->param.d = d;
+  testset->param.L = L;
+  testset->param.M = M;
+  testset->param.n = n;
+  testset->param.m = m;
+  testset->param.p = p;
+  testset->param.kernel_name = kernel_name;
+  testset->param.c = c;
+  testset->param.eps_I = eps_I;
+  testset->param.eps_B = eps_B;
+
+  testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+  testset->nresults = n_threads_array_size;
+
+  run_test_create(testset->param.d, testset->param.L, testset->param.M);
+  for (i = 0; i < n_threads_array_size; i++)
+  {
+    testset->results[i].nthreads = nthreads_array[i];
+    run_test(testset->results[i].resval, NREPEAT, testset->param.n, testset->param.m, testset->param.p, testset->param.kernel_name, testset->param.c, testset->param.eps_I, testset->param.eps_B, testset->results[i].nthreads);
+  }
+
+}
+
+void test1(int *nthreads_array, int n_threads_array_size)
+{
+  s_testset testsets[1];
+
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  run_testset(&testsets[0], 3, 100000, 100000, 128, 4, 7, "one_over_x", 0.0, 0.03125, 0.03125, nthreads_array, n_threads_array_size);
+
+  fastsum_print_output_speedup_total_minus_indep(file_out_tex, testsets, 1);
+
+  fastsum_print_output_histo_PreRfNfT(file_out_tex, testsets[0]);
+
+  nfft_adjoint_print_output_histo_DFBRT(file_out_tex, testsets[0]);
+
+  nfft_trafo_print_output_histo_DFBRT(file_out_tex, testsets[0]);
+#endif
+}
+
+int main(int argc, char** argv)
+{
+  int *nthreads_array;
+  int n_threads_array_size = get_nthreads_array(&nthreads_array);
+  int k;
+
+#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
+  fprintf(stderr, "WARNING: Detailed time measurements are not activated.\n");
+  fprintf(stderr, "Please re-run the configure script with options\n");
+  fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-openmp\n");
+  fprintf(stderr, "and run \"make clean all\"\n\n");
+#endif
+
+  for (k = 0; k < n_threads_array_size; k++)
+    fprintf(stderr, "%d ", nthreads_array[k]);
+  fprintf(stderr, "\n");
+
+  file_out_tex = fopen("fastsum_benchomp_results_plots.tex", "w");
+
+  test1(nthreads_array, n_threads_array_size);
+
+  fclose(file_out_tex);
+
+  return 0;
+}
+
diff --git a/applications/fastsum/fastsum_benchomp_createdataset.c b/applications/fastsum/fastsum_benchomp_createdataset.c
new file mode 100644
index 0000000..e800f52
--- /dev/null
+++ b/applications/fastsum/fastsum_benchomp_createdataset.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "config.h"
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void fastsum_benchomp_createdataset(unsigned int d, int L, int M)
+{
+  int t, j, k;
+  R *x;
+  R *y;
+  C *alpha;
+
+  x = (R*) nfft_malloc(d*L*sizeof(R));
+  y = (R*) nfft_malloc(d*L*sizeof(R));
+  alpha = (C*) nfft_malloc(L*sizeof(C));
+
+  /** init source knots in a d-ball with radius 1 */
+  k = 0;
+  while (k < L)
+  {
+    double r_max = 1.0;
+    double r2 = 0.0;
+
+    for (j=0; j<d; j++)
+      x[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+    for (j=0; j<d; j++)
+      r2 += x[k*d+j] * x[k*d+j];
+
+    if (r2 >= r_max * r_max)
+      continue;
+
+    k++;
+  }
+
+  nfft_vrand_unit_complex(alpha,L);
+
+  /** init target knots in a d-ball with radius 1 */
+  k = 0;
+  while (k < M)
+  {
+    double r_max = 1.0;
+    double r2 = 0.0;
+
+    for (j=0; j<d; j++)
+      y[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+    for (j=0; j<d; j++)
+      r2 += y[k*d+j] * y[k*d+j];
+
+    if (r2 >= r_max * r_max)
+      continue;
+
+    k++;
+  }
+
+  printf("%d %d %d\n", d, L, M);
+
+  for (j=0; j < L; j++)
+  {
+    for (t=0; t < d; t++)
+      printf("%.16e ", x[d*j+t]);
+    printf("\n");
+  }
+
+  for (j=0; j < L; j++)
+    printf("%.16e %.16e\n", creal(alpha[j]), cimag(alpha[j]));
+
+  for (j=0; j < M; j++)
+  {
+    for (t=0; t < d; t++)
+      printf("%.16e ", y[d*j+t]);
+    printf("\n");
+  }
+
+  nfft_free(x);
+  nfft_free(y);
+  nfft_free(alpha);
+}
+
+int main(int argc, char **argv)
+{
+  int d;
+  int L;
+  int M;
+
+  if (argc < 4) {
+    fprintf(stderr, "usage: d L M\n");
+    return -1;
+  }
+
+  d = atoi(argv[1]);
+  L = atoi(argv[2]);
+  M = atoi(argv[3]);
+
+  fprintf(stderr, "d=%d, L=%d, M=%d\n", d, L, M);
+
+  fastsum_benchomp_createdataset(d, L, M);
+
+  return 0;
+}
+
diff --git a/applications/fastsum/fastsum_benchomp_detail.c b/applications/fastsum/fastsum_benchomp_detail.c
new file mode 100644
index 0000000..5327028
--- /dev/null
+++ b/applications/fastsum/fastsum_benchomp_detail.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "fastsum.h"
+#include "kernels.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+int bench_openmp(FILE *infile, int n, int m, int p, double _Complex (*kernel)(double , int , const double *), double c, double eps_I, double eps_B)
+{
+  fastsum_plan my_fastsum_plan;
+  int d, L, M;
+  int t, j;
+  double re,im;
+  double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+  ticks t0, t1;
+  double tt_total;
+
+  fscanf(infile, "%d %d %d", &d, &L, &M);
+
+#ifdef _OPENMP
+  fftw_import_wisdom_from_filename("fastsum_benchomp_detail_threads.plan");
+#else
+  fftw_import_wisdom_from_filename("fastsum_benchomp_detail_single.plan");
+#endif
+
+  fastsum_init_guru(&my_fastsum_plan, d, L, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);
+
+#ifdef _OPENMP
+  fftw_export_wisdom_to_filename("fastsum_benchomp_detail_threads.plan");
+#else
+  fftw_export_wisdom_to_filename("fastsum_benchomp_detail_single.plan");
+#endif
+
+  for (j=0; j < L; j++)
+  {
+    for (t=0; t < d; t++)
+    {
+      double v;
+      fscanf(infile, "%lg", &v);
+      my_fastsum_plan.x[d*j+t] = v * r_max;
+    }
+  }
+
+  for (j=0; j < L; j++)
+  {
+    fscanf(infile, "%lg %lg", &re, &im);
+    my_fastsum_plan.alpha[j] = re + _Complex_I * im;
+  }
+
+  for (j=0; j < M; j++)
+  {
+    for (t=0; t < d; t++)
+    {
+      double v;
+      fscanf(infile, "%lg", &v);
+      my_fastsum_plan.y[d*j+t] = v * r_max;
+    }
+  }
+
+  /** precomputation */
+  t0 = getticks();
+  fastsum_precompute(&my_fastsum_plan);
+
+  /** fast computation */
+  fastsum_trafo(&my_fastsum_plan);
+  t1 = getticks();
+  tt_total = nfft_elapsed_seconds(t1,t0);
+
+#ifndef MEASURE_TIME
+  my_fastsum_plan.MEASURE_TIME_t[0] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[1] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[2] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[3] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[4] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[5] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[6] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[7] = 0.0;
+  my_fastsum_plan.mv1.MEASURE_TIME_t[0] = 0.0;
+  my_fastsum_plan.mv1.MEASURE_TIME_t[2] = 0.0;
+  my_fastsum_plan.mv2.MEASURE_TIME_t[0] = 0.0;
+  my_fastsum_plan.mv2.MEASURE_TIME_t[2] = 0.0;
+#endif
+#ifndef MEASURE_TIME_FFTW
+  my_fastsum_plan.mv1.MEASURE_TIME_t[1] = 0.0;
+  my_fastsum_plan.mv2.MEASURE_TIME_t[1] = 0.0;
+#endif
+
+  printf("%.6e %.6e %.6e %6e %.6e %.6e %.6e %.6e %.6e %6e %.6e %.6e %6e %.6e %.6e %6e\n", my_fastsum_plan.MEASURE_TIME_t[0], my_fastsum_plan.MEASURE_TIME_t[1], my_fastsum_plan.MEASURE_TIME_t[2], my_fastsum_plan.MEASURE_TIME_t[3], my_fastsum_plan.MEASURE_TIME_t[4], my_fastsum_plan.MEASURE_TIME_t[5], my_fastsum_plan.MEASURE_TIME_t[6], my_fastsum_plan.MEASURE_TIME_t[7], tt_total-my_fastsum_plan.MEASURE_TIME_t[0]-my_fastsum_plan.MEASURE_TIME_t[1]-my_fastsum_plan.MEASURE_TIME_t[2]-my_fastsum_ [...]
+
+  fastsum_finalize(&my_fastsum_plan);
+
+  return 0;
+}
+
+int main(int argc, char **argv)
+{
+  int n;                                             /**< expansion degree        */
+  int m;                                             /**< cut-off parameter       */
+  int p;                                             /**< degree of smoothness    */
+  char *s;                                           /**< name of kernel          */
+  double _Complex (*kernel)(double , int , const double *);  /**< kernel function         */
+  double c;                                          /**< parameter for kernel    */
+  double eps_I;                                      /**< inner boundary          */
+  double eps_B;                                      /**< outer boundary          */
+
+
+#ifdef _OPENMP
+  int nthreads;
+
+  if (argc != 9)
+    return 1;
+
+  nthreads = atoi(argv[8]);
+  fftw_init_threads();
+  omp_set_num_threads(nthreads);
+#else
+  if (argc != 8)
+    return 1;
+#endif
+
+  n=atoi(argv[1]);
+  m=atoi(argv[2]);
+  p=atoi(argv[3]);
+  s=argv[4];
+  c=atof(argv[5]);
+  eps_I=atof(argv[6]);
+  eps_B=atof(argv[7]);
+  if (strcmp(s,"gaussian")==0)
+    kernel = gaussian;
+  else if (strcmp(s,"multiquadric")==0)
+    kernel = multiquadric;
+  else if (strcmp(s,"inverse_multiquadric")==0)
+    kernel = inverse_multiquadric;
+  else if (strcmp(s,"logarithm")==0)
+    kernel = logarithm;
+  else if (strcmp(s,"thinplate_spline")==0)
+    kernel = thinplate_spline;
+  else if (strcmp(s,"one_over_square")==0)
+    kernel = one_over_square;
+  else if (strcmp(s,"one_over_modulus")==0)
+    kernel = one_over_modulus;
+  else if (strcmp(s,"one_over_x")==0)
+    kernel = one_over_x;
+  else if (strcmp(s,"inverse_multiquadric3")==0)
+    kernel = inverse_multiquadric3;
+  else if (strcmp(s,"sinc_kernel")==0)
+    kernel = sinc_kernel;
+  else if (strcmp(s,"cosc")==0)
+    kernel = cosc;
+  else if (strcmp(s,"cot")==0)
+    kernel = kcot;
+  else
+  {
+    s="multiquadric";
+    kernel = multiquadric;
+  }
+
+  bench_openmp(stdin, n, m, p, kernel, c, eps_I, eps_B);
+
+  return 0;
+}
+
diff --git a/applications/fastsum/fastsum_matlab.c b/applications/fastsum/fastsum_matlab.c
new file mode 100644
index 0000000..17b82aa
--- /dev/null
+++ b/applications/fastsum/fastsum_matlab.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum_matlab.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/*! \file fastsum_matlab.c
+ *  \brief Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m.
+ *
+ *  \author Markus Fenn
+ *  \date 2006
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+  #include <complex.h>
+#endif
+
+#include "fastsum.h"
+#include "kernels.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_fastsum_matlab fastsum_matlab
+ * \ingroup applications_fastsum
+ * \{
+ */
+
+int main(int argc, char **argv)
+{
+  int j,k,t;                                         /**< indices                 */
+  int d;                                             /**< number of dimensions    */
+  int N;                                             /**< number of source nodes  */
+  int M;                                             /**< number of target nodes  */
+  int n;                                             /**< expansion degree        */
+  int m;                                             /**< cut-off parameter       */
+  int p;                                             /**< degree of smoothness    */
+  char *s;                                           /**< name of kernel          */
+  double _Complex (*kernel)(double , int , const double *);  /**< kernel function         */
+  double c;                                          /**< parameter for kernel    */
+  fastsum_plan my_fastsum_plan;                      /**< plan for fast summation */
+  double _Complex *direct;                           /**< array for direct computation */
+  ticks t0, t1;                                      /**< for time measurement    */
+  double time;                                       /**< for time measurement    */
+  double error=0.0;                                  /**< for error computation   */
+  double eps_I;                                      /**< inner boundary          */
+  double eps_B;                                      /**< outer boundary          */
+  FILE *fid1, *fid2;
+  double temp;
+
+  if (argc!=11)
+  {
+    printf("\nfastsum_test d N M n m p kernel c\n\n");
+    printf("  d       dimension                 \n");
+    printf("  N       number of source nodes    \n");
+    printf("  M       number of target nodes    \n");
+    printf("  n       expansion degree          \n");
+    printf("  m       cut-off parameter         \n");
+    printf("  p       degree of smoothness      \n");
+    printf("  kernel  kernel function  (e.g., gaussian)\n");
+    printf("  c       kernel parameter          \n");
+    printf("  eps_I   inner boundary            \n");
+    printf("  eps_B   outer boundary            \n\n");
+    exit(-1);
+  }
+  else
+  {
+    d=atoi(argv[1]);
+    N=atoi(argv[2]); c=1.0/pow((double)N,1.0/(double)d);
+    M=atoi(argv[3]);
+    n=atoi(argv[4]);
+    m=atoi(argv[5]);
+    p=atoi(argv[6]);
+    s=argv[7];
+    c=atof(argv[8]);
+    eps_I=atof(argv[9]);
+    eps_B=atof(argv[10]);
+    if (strcmp(s,"gaussian")==0)
+      kernel = gaussian;
+    else if (strcmp(s,"multiquadric")==0)
+      kernel = multiquadric;
+    else if (strcmp(s,"inverse_multiquadric")==0)
+      kernel = inverse_multiquadric;
+    else if (strcmp(s,"logarithm")==0)
+      kernel = logarithm;
+    else if (strcmp(s,"thinplate_spline")==0)
+      kernel = thinplate_spline;
+    else if (strcmp(s,"one_over_square")==0)
+      kernel = one_over_square;
+    else if (strcmp(s,"one_over_modulus")==0)
+      kernel = one_over_modulus;
+    else if (strcmp(s,"one_over_x")==0)
+      kernel = one_over_x;
+    else if (strcmp(s,"inverse_multiquadric3")==0)
+      kernel = inverse_multiquadric3;
+    else if (strcmp(s,"sinc_kernel")==0)
+      kernel = sinc_kernel;
+    else if (strcmp(s,"cosc")==0)
+      kernel = cosc;
+    else if (strcmp(s,"cot")==0)
+      kernel = kcot;
+    else
+    {
+      s="multiquadric";
+      kernel = multiquadric;
+    }
+  }
+  printf("d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
+
+  /** init two dimensional fastsum plan */
+  fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
+  /*fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, EXACT_NEARFIELD, n, m, p);*/
+
+  /** load source knots and coefficients */
+  fid1=fopen("x.dat","r");
+  fid2=fopen("alpha.dat","r");
+  for (k=0; k<N; k++)
+  {
+    for (t=0; t<d; t++)
+    {
+      fscanf(fid1,"%le",&my_fastsum_plan.x[k*d+t]);
+    }
+    fscanf(fid2,"%le",&temp); my_fastsum_plan.alpha[k] = temp;
+    fscanf(fid2,"%le",&temp); my_fastsum_plan.alpha[k] += temp*_Complex_I;
+  }
+  fclose(fid1);
+  fclose(fid2);
+
+  /** load target knots */
+  fid1=fopen("y.dat","r");
+  for (j=0; j<M; j++)
+  {
+    for (t=0; t<d; t++)
+    {
+      fscanf(fid1,"%le",&my_fastsum_plan.y[j*d+t]);
+    }
+  }
+  fclose(fid1);
+
+  /** direct computation */
+  printf("direct computation: "); fflush(NULL);
+  t0 = getticks();
+  fastsum_exact(&my_fastsum_plan);
+  t1 = getticks();
+  time=nfft_elapsed_seconds(t1,t0);
+  printf("%fsec\n",time);
+
+  /** copy result */
+  direct = (double _Complex *)nfft_malloc(my_fastsum_plan.M_total*(sizeof(double _Complex)));
+  for (j=0; j<my_fastsum_plan.M_total; j++)
+    direct[j]=my_fastsum_plan.f[j];
+
+  /** precomputation */
+  printf("pre-computation:    "); fflush(NULL);
+  t0 = getticks();
+  fastsum_precompute(&my_fastsum_plan);
+  t1 = getticks();
+  time=nfft_elapsed_seconds(t1,t0);
+  printf("%fsec\n",time);
+
+  /** fast computation */
+  printf("fast computation:   "); fflush(NULL);
+  t0 = getticks();
+  fastsum_trafo(&my_fastsum_plan);
+  t1 = getticks();
+  time=nfft_elapsed_seconds(t1,t0);
+  printf("%fsec\n",time);
+
+  /** compute max error */
+  error=0.0;
+  for (j=0; j<my_fastsum_plan.M_total; j++)
+  {
+   if (cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j])>error)
+      error=cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j]);
+  }
+  printf("max relative error: %e\n",error);
+
+  /** write result to file */
+  fid1=fopen("f.dat","w+");
+  fid2=fopen("f_direct.dat","w+");
+  if (fid1==NULL)
+  {
+    printf("Fehler!\n");
+    exit(-1);
+  }
+  for (j=0; j<M; j++)
+  {
+    temp=creal(my_fastsum_plan.f[j]);
+    fprintf(fid1,"  % .16e",temp);
+    temp=cimag(my_fastsum_plan.f[j]);
+    fprintf(fid1,"  % .16e\n",temp);
+
+    temp=creal(direct[j]);
+    fprintf(fid2,"  % .16e",temp);
+    temp=cimag(direct[j]);
+    fprintf(fid2,"  % .16e\n",temp);
+  }
+  fclose(fid1);
+  fclose(fid2);
+
+  /** finalise the plan */
+  fastsum_finalize(&my_fastsum_plan);
+
+  return 0;
+}
+/* \} */
diff --git a/applications/fastsum/fastsum_test.c b/applications/fastsum/fastsum_test.c
new file mode 100644
index 0000000..120d3fd
--- /dev/null
+++ b/applications/fastsum/fastsum_test.c
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file fastsum_test.c
+ *  \brief Simple test program for the fast NFFT-based summation algorithm.
+ *
+ *  \author Markus Fenn
+ *  \date 2006
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+  #include <complex.h>
+#endif
+
+#ifdef _OPENMP
+  #include <omp.h>
+#endif
+
+#include "fastsum.h"
+#include "kernels.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_fastsum_test fastsum_test
+ * \ingroup applications_fastsum
+ * \{
+ */
+
+int main(int argc, char **argv)
+{
+  int j,k,t;                                         /**< indices                 */
+  int d;                                             /**< number of dimensions    */
+  int N;                                             /**< number of source nodes  */
+  int M;                                             /**< number of target nodes  */
+  int n;                                             /**< expansion degree        */
+  int m;                                             /**< cut-off parameter       */
+  int p;                                             /**< degree of smoothness    */
+  char *s;                                           /**< name of kernel          */
+  double _Complex (*kernel)(double , int , const double *);  /**< kernel function         */
+  double c;                                          /**< parameter for kernel    */
+  fastsum_plan my_fastsum_plan;                      /**< plan for fast summation */
+  double _Complex *direct;                                   /**< array for direct computation */
+  ticks t0, t1;                                      /**< for time measurement    */
+  double time;                                       /**< for time measurement    */
+  double error=0.0;                                  /**< for error computation   */
+  double eps_I;                                      /**< inner boundary          */
+  double eps_B;                                      /**< outer boundary          */
+
+  if (argc!=11)
+  {
+    printf("\nfastsum_test d N M n m p kernel c eps_I eps_B\n\n");
+    printf("  d       dimension                 \n");
+    printf("  N       number of source nodes    \n");
+    printf("  M       number of target nodes    \n");
+    printf("  n       expansion degree          \n");
+    printf("  m       cut-off parameter         \n");
+    printf("  p       degree of smoothness      \n");
+    printf("  kernel  kernel function  (e.g., gaussian)\n");
+    printf("  c       kernel parameter          \n");
+    printf("  eps_I   inner boundary            \n");
+    printf("  eps_B   outer boundary            \n\n");
+    exit(-1);
+  }
+  else
+  {
+    d=atoi(argv[1]);
+    N=atoi(argv[2]); c=1.0/pow((double)N,1.0/(double)d);
+    M=atoi(argv[3]);
+    n=atoi(argv[4]);
+    m=atoi(argv[5]);
+    p=atoi(argv[6]);
+    s=argv[7];
+    c=atof(argv[8]);
+    eps_I=atof(argv[9]);
+    eps_B=atof(argv[10]);
+    if (strcmp(s,"gaussian")==0)
+      kernel = gaussian;
+    else if (strcmp(s,"multiquadric")==0)
+      kernel = multiquadric;
+    else if (strcmp(s,"inverse_multiquadric")==0)
+      kernel = inverse_multiquadric;
+    else if (strcmp(s,"logarithm")==0)
+      kernel = logarithm;
+    else if (strcmp(s,"thinplate_spline")==0)
+      kernel = thinplate_spline;
+    else if (strcmp(s,"one_over_square")==0)
+      kernel = one_over_square;
+    else if (strcmp(s,"one_over_modulus")==0)
+      kernel = one_over_modulus;
+    else if (strcmp(s,"one_over_x")==0)
+      kernel = one_over_x;
+    else if (strcmp(s,"inverse_multiquadric3")==0)
+      kernel = inverse_multiquadric3;
+    else if (strcmp(s,"sinc_kernel")==0)
+      kernel = sinc_kernel;
+    else if (strcmp(s,"cosc")==0)
+      kernel = cosc;
+    else if (strcmp(s,"cot")==0)
+      kernel = kcot;
+    else
+    {
+      s="multiquadric";
+      kernel = multiquadric;
+    }
+  }
+  printf("d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
+#ifdef NF_KUB
+  printf("nearfield correction using piecewise cubic Lagrange interpolation\n");
+#elif defined(NF_QUADR)
+  printf("nearfield correction using piecewise quadratic Lagrange interpolation\n");
+#elif defined(NF_LIN)
+  printf("nearfield correction using piecewise linear Lagrange interpolation\n");
+#endif
+
+#ifdef _OPENMP
+  #pragma omp parallel
+  {
+    #pragma omp single
+    {
+      printf("nthreads=%d\n", omp_get_max_threads());
+    }
+  }
+
+  fftw_init_threads();
+#endif
+
+  /** init d-dimensional fastsum plan */
+  fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
+  //fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);
+
+  if (my_fastsum_plan.flags & NEARFIELD_BOXES)
+    printf("determination of nearfield candidates based on partitioning into boxes\n");
+  else
+    printf("determination of nearfield candidates based on search tree\n");
+
+  /** init source knots in a d-ball with radius 0.25-eps_b/2 */
+  k = 0;
+  while (k < N)
+  {
+    double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+    double r2 = 0.0;
+
+    for (j=0; j<d; j++)
+      my_fastsum_plan.x[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+    for (j=0; j<d; j++)
+      r2 += my_fastsum_plan.x[k*d+j] * my_fastsum_plan.x[k*d+j];
+
+    if (r2 >= r_max * r_max)
+      continue;
+
+    k++;
+  }
+
+  for (k=0; k<N; k++)
+  {
+/*    double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);
+    my_fastsum_plan.x[k*d+0] = r;
+    for (j=1; j<d; j++)
+    {
+      double phi=2.0*PI*(double)rand()/(double)RAND_MAX;
+      my_fastsum_plan.x[k*d+j] = r;
+      for (t=0; t<j; t++)
+      {
+        my_fastsum_plan.x[k*d+t] *= cos(phi);
+      }
+      my_fastsum_plan.x[k*d+j] *= sin(phi);
+    }
+*/
+    my_fastsum_plan.alpha[k] = (double)rand()/(double)RAND_MAX + _Complex_I*(double)rand()/(double)RAND_MAX;
+  }
+
+  /** init target knots in a d-ball with radius 0.25-eps_b/2 */
+  k = 0;
+  while (k < M)
+  {
+    double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+    double r2 = 0.0;
+
+    for (j=0; j<d; j++)
+      my_fastsum_plan.y[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+    for (j=0; j<d; j++)
+      r2 += my_fastsum_plan.y[k*d+j] * my_fastsum_plan.y[k*d+j];
+
+    if (r2 >= r_max * r_max)
+      continue;
+
+    k++;
+  }
+/*  for (k=0; k<M; k++)
+  {
+    double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);
+    my_fastsum_plan.y[k*d+0] = r;
+    for (j=1; j<d; j++)
+    {
+      double phi=2.0*PI*(double)rand()/(double)RAND_MAX;
+      my_fastsum_plan.y[k*d+j] = r;
+      for (t=0; t<j; t++)
+      {
+        my_fastsum_plan.y[k*d+t] *= cos(phi);
+      }
+      my_fastsum_plan.y[k*d+j] *= sin(phi);
+    }
+  } */
+
+  /** direct computation */
+  printf("direct computation: "); fflush(NULL);
+  t0 = getticks();
+  fastsum_exact(&my_fastsum_plan);
+  t1 = getticks();
+  time=nfft_elapsed_seconds(t1,t0);
+  printf("%fsec\n",time);
+
+  /** copy result */
+  direct = (double _Complex *)nfft_malloc(my_fastsum_plan.M_total*(sizeof(double _Complex)));
+  for (j=0; j<my_fastsum_plan.M_total; j++)
+    direct[j]=my_fastsum_plan.f[j];
+
+  /** precomputation */
+  printf("pre-computation:    "); fflush(NULL);
+  t0 = getticks();
+  fastsum_precompute(&my_fastsum_plan);
+  t1 = getticks();
+  time=nfft_elapsed_seconds(t1,t0);
+  printf("%fsec\n",time);
+
+  /** fast computation */
+  printf("fast computation:   "); fflush(NULL);
+  t0 = getticks();
+  fastsum_trafo(&my_fastsum_plan);
+  t1 = getticks();
+  time=nfft_elapsed_seconds(t1,t0);
+  printf("%fsec\n",time);
+
+  /** compute max error */
+  error=0.0;
+  for (j=0; j<my_fastsum_plan.M_total; j++)
+  {
+    if (cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j])>error)
+      error=cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j]);
+  }
+  printf("max relative error: %e\n",error);
+
+  /** finalise the plan */
+  fastsum_finalize(&my_fastsum_plan);
+
+  return 0;
+}
+/* \} */
diff --git a/applications/fastsum/fastsum_test.m b/applications/fastsum/fastsum_test.m
new file mode 100644
index 0000000..83f1677
--- /dev/null
+++ b/applications/fastsum/fastsum_test.m
@@ -0,0 +1,57 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fastsum_test.m 3776 2012-06-03 13:29:25Z keiner $
+%
+% Simple test program for fast NFFT-based summation algorithm.
+% Markus Fenn, 2006.
+
+%  d=2;
+%  N=4000;
+%  M=4000;
+%  n=128;
+%  m=4;
+%  p=3;
+%  kernel='multiquadric';
+%  c=1/sqrt(N);
+%
+%  system(sprintf('./fastsum_test %d %d %d %d %d %d %s %e',d,N,M,n,m,p,kernel,c));
+
+N = 2000;
+M = 2000;
+kernel = 'multiquadric';
+c = 1/sqrt(N);
+m = 4;
+p = 3;
+n = 156;
+eps_I = p/n;
+eps_B = 1/16;
+
+%random source nodes in circle of radius 0.25-eps_B/2
+r = sqrt(rand(N,1))*(0.25-eps_B/2);
+phi = rand(N,1)*2*pi;
+x = [r.*cos(phi) r.*sin(phi)];
+
+%random coefficients
+alpha = rand(N,1)+i*rand(N,1);
+
+%random target nodes in circle of radius 0.25-eps_B/2
+r = sqrt(rand(M,1))*(0.25-eps_B/2);
+phi = rand(M,1)*2*pi;
+y = [r.*cos(phi) r.*sin(phi)];
+
+%fast NFFT-based summation
+[f,f_direct] = fastsum(x,alpha,y,kernel,c,m,n,p,eps_I,eps_B);
diff --git a/applications/fastsum/kernels.c b/applications/fastsum/kernels.c
new file mode 100644
index 0000000..87d9115
--- /dev/null
+++ b/applications/fastsum/kernels.c
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: kernels.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/*! \file kernels.c
+ *  \brief File with predefined kernels for the fast summation algorithm.
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "kernels.h"
+
+/**
+ * \addtogroup applications_fastsum
+ * \{
+ */
+
+double _Complex gaussian(double x, int der, const double *param)    /* K(x)=exp(-x^2/c^2) */
+{
+  double c=param[0];
+  double value=0.0;
+
+  switch (der)
+  {
+    case  0 : value=exp(-x*x/(c*c)); break;
+    case  1 : value=-2.0*x/(c*c)*exp(-x*x/(c*c)); break;
+    case  2 : value=2.0*exp(-x*x/(c*c))*(-c*c+2.0*x*x)/(c*c*c*c); break;
+    case  3 : value=-4.0*x*exp(-x*x/(c*c))*(-3.0*c*c+2.0*x*x)/(c*c*c*c*c*c); break;
+    case  4 : value=4.0*exp(-x*x/(c*c))*(3.0*c*c*c*c-12.0*c*c*x*x+4.0*x*x*x*x)/(c*c*c*c*c*c*c*c); break;
+    case  5 : value=-8.0*x*exp(-x*x/(c*c))*(15.0*c*c*c*c-20.0*c*c*x*x+4.0*x*x*x*x)/pow(c,10.0); break;
+    case  6 : value=8.0*exp(-x*x/(c*c))*(-15.0*c*c*c*c*c*c+90.0*x*x*c*c*c*c-60.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,12.0); break;
+    case  7 : value=-16.0*x*exp(-x*x/(c*c))*(-105.0*c*c*c*c*c*c+210.0*x*x*c*c*c*c-84.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,14.0); break;
+    case  8 : value=16.0*exp(-x*x/(c*c))*(105.0*c*c*c*c*c*c*c*c-840.0*x*x*c*c*c*c*c*c+840.0*x*x*x*x*c*c*c*c-224.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,16.0); break;
+    case  9 : value=-32.0*x*exp(-x*x/(c*c))*(945.0*c*c*c*c*c*c*c*c-2520.0*x*x*c*c*c*c*c*c+1512.0*x*x*x*x*c*c*c*c-288.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,18.0); break;
+    case 10 : value=32.0*exp(-x*x/(c*c))*(-945.0*pow(c,10.0)+9450.0*x*x*c*c*c*c*c*c*c*c-12600.0*x*x*x*x*c*c*c*c*c*c+5040.0*x*x*x*x*x*x*c*c*c*c-720.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,20.0); break;
+    case 11 : value=-64.0*x*exp(-x*x/(c*c))*(-10395.0*pow(c,10.0)+34650.0*x*x*c*c*c*c*c*c*c*c-27720.0*x*x*x*x*c*c*c*c*c*c+7920.0*x*x*x*x*x*x*c*c*c*c-880.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,22.0); break;
+    case 12 : value=64.0*exp(-x*x/(c*c))*(10395.0*pow(c,12.0)-124740.0*x*x*pow(c,10.0)+207900.0*x*x*x*x*c*c*c*c*c*c*c*c-110880.0*x*x*x*x*x*x*c*c*c*c*c*c+23760.0*x*x*x*x*x*x*x*x*c*c*c*c-2112.0*pow(x,10.0)*c*c+64.0*pow(x,12.0))/pow(c,24.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex multiquadric(double x, int der, const double *param)    /* K(x)=sqrt(x^2+c^2) */
+{
+  double c=param[0];
+  double value=0.0;
+
+  switch (der)
+  {
+    case  0 : value=sqrt(x*x+c*c); break;
+    case  1 : value=1.0/(sqrt(x*x+c*c))*x; break;
+    case  2 : value=c*c/sqrt(pow(x*x+c*c,3.0)); break;
+    case  3 : value=-3.0*x*c*c/sqrt(pow(x*x+c*c,5.0)); break;
+    case  4 : value=3.0*c*c*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); break;
+    case  5 : value=-15.0*x*c*c*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
+    case  6 : value=45.0*c*c*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
+    case  7 : value=-315.0*x*c*c*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
+    case  8 : value=315.0*c*c*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
+    case  9 : value=-2835.0*x*c*c*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
+    case 10 : value=14175.0*c*c*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
+    case 11 : value=-155925.0*x*c*c*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); break;
+    case 12 : value=467775.0*c*c*(1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0)+512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,23.0)); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex inverse_multiquadric(double x, int der, const double *param)    /* K(x)=1/sqrt(x^2+c^2) */
+{
+  double c=param[0];
+  double value=0.0;
+
+  switch (der)
+  {
+    case  0 : value=1.0/sqrt(x*x+c*c); break;
+    case  1 : value=-1.0/(sqrt(pow(x*x+c*c,3.0)))*x; break;
+    case  2 : value=(2.0*x*x-c*c)/sqrt(pow(x*x+c*c,5.0)); break;
+    case  3 : value=-3.0*x*(2.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,7.0)); break;
+    case  4 : value=3.0*(8.0*x*x*x*x-24.0*x*x*c*c+3.0*c*c*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
+    case  5 : value=-15.0*x*(8.0*x*x*x*x-40.0*x*x*c*c+15.0*c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
+    case  6 : value=45.0*(16.0*x*x*x*x*x*x-120.0*x*x*x*x*c*c+90.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
+    case  7 : value=-315.0*x*(16.0*x*x*x*x*x*x-168.0*x*x*x*x*c*c+210.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
+    case  8 : value=315.0*(128.0*x*x*x*x*x*x*x*x-1792.0*x*x*x*x*x*x*c*c+3360.0*x*x*x*x*c*c*c*c-1120.0*x*x*c*c*c*c*c*c+35.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
+    case  9 : value=-2835.0*x*(128.0*x*x*x*x*x*x*x*x-2304.0*x*x*x*x*x*x*c*c+6048.0*x*x*x*x*c*c*c*c-3360.0*x*x*c*c*c*c*c*c+315.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
+    case 10 : value=14175.0*(256.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+20160.0*x*x*x*x*x*x*c*c*c*c-16800.0*x*x*x*x*c*c*c*c*c*c+3150.0*x*x*c*c*c*c*c*c*c*c-63.0*pow(c,10.0))/sqrt(pow(x*x+c*c,21.0)); break;
+    case 11 : value=-155925.0*x*(256.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+31680.0*x*x*x*x*x*x*c*c*c*c-36960.0*x*x*x*x*c*c*c*c*c*c+11550.0*x*x*c*c*c*c*c*c*c*c-693.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); break;
+    case 12 : value=467775.0*(231.0*pow(c,12.0)+190080.0*x*x*x*x*x*x*x*x*c*c*c*c-16632.0*x*x*pow(c,10.0)-295680.0*x*x*x*x*x*x*c*c*c*c*c*c+138600.0*x*x*x*x*c*c*c*c*c*c*c*c+1024.0*pow(x,12.0)-33792.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,25.0)); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex logarithm(double x, int der, const double *param)    /* K(x)=log |x| */
+{
+  double value=0.0;
+
+  (void)param;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=log(fabs(x)); break;
+    case  1 : value=(x<0 ? -1 : 1)/fabs(x); break;
+    case  2 : value=-1/(x*x); break;
+    case  3 : value=2.0*(x<0 ? -1 : 1)/pow(fabs(x),3.0); break;
+    case  4 : value=-6.0/(x*x*x*x); break;
+    case  5 : value=24.0*(x<0 ? -1 : 1)/pow(fabs(x),5.0); break;
+    case  6 : value=-120.0/(x*x*x*x*x*x); break;
+    case  7 : value=720.0*(x<0 ? -1 : 1)/pow(fabs(x),7.0); break;
+    case  8 : value=-5040.0/(x*x*x*x*x*x*x*x); break;
+    case  9 : value=40320.0*(x<0 ? -1 : 1)/pow(fabs(x),9.0); break;
+    case 10 : value=-362880.0/pow(x,10.0); break;
+    case 11 : value=3628800.0*(x<0 ? -1 : 1)/pow(fabs(x),11.0); break;
+    case 12 : value=-39916800.0/pow(x,12.0); break;
+    case 13 : value=479001600.0/pow(x,13.0); break;
+    case 14 : value=-6227020800.0/pow(x,14.0); break;
+    case 15 : value=87178291200.0/pow(x,15.0); break;
+    case 16 : value=-1307674368000.0/pow(x,16.0); break;
+    case 17 : value=20922789888000.0/pow(x,17.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex thinplate_spline(double x, int der, const double *param)    /* K(x) = x^2 log |x| */
+{
+  double value=0.0;
+
+  (void)param;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=x*x*log(fabs(x)); break;
+    case  1 : value=2.0*x*log(fabs(x))+x; break;
+    case  2 : value=2.0*log(fabs(x))+3.0; break;
+    case  3 : value=2.0/x; break;
+    case  4 : value=-2.0/(x*x); break;
+    case  5 : value=4.0/(x*x*x); break;
+    case  6 : value=-12.0/(x*x*x*x); break;
+    case  7 : value=48.0/(x*x*x*x*x); break;
+    case  8 : value=-240.0/(x*x*x*x*x*x); break;
+    case  9 : value=1440.0/(x*x*x*x*x*x*x); break;
+    case 10 : value=-10080.0/(x*x*x*x*x*x*x*x); break;
+    case 11 : value=80640.0/(x*x*x*x*x*x*x*x*x); break;
+    case 12 : value=-725760.0/pow(x,10.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex one_over_square(double x, int der, const double *param)    /* K(x) = 1/x^2 */
+{
+  double value=0.0;
+
+  (void)param;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=1.0/(x*x); break;
+    case  1 : value=-2.0/(x*x*x); break;
+    case  2 : value=6.0/(x*x*x*x); break;
+    case  3 : value=-24.0/(x*x*x*x*x); break;
+    case  4 : value=120.0/(x*x*x*x*x*x); break;
+    case  5 : value=-720.0/(x*x*x*x*x*x*x); break;
+    case  6 : value=5040.0/(x*x*x*x*x*x*x*x); break;
+    case  7 : value=-40320.0/(x*x*x*x*x*x*x*x*x); break;
+    case  8 : value=362880.0/pow(x,10.0); break;
+    case  9 : value=-3628800.0/pow(x,11.0); break;
+    case 10 : value=39916800.0/pow(x,12.0); break;
+    case 11 : value=-479001600.0/pow(x,13.0); break;
+    case 12 : value=6227020800.0/pow(x,14.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex one_over_modulus(double x, int der, const double *param)    /* K(x) = 1/|x| */
+{
+  double value=0.0;
+
+  (void)param;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=1.0/fabs(x); break;
+    case  1 : value=-1/x/fabs(x); break;
+    case  2 : value=2.0/pow(fabs(x),3.0); break;
+    case  3 : value=-6.0/(x*x*x)/fabs(x); break;
+    case  4 : value=24.0/pow(fabs(x),5.0); break;
+    case  5 : value=-120.0/(x*x*x*x*x)/fabs(x); break;
+    case  6 : value=720.0/pow(fabs(x),7.0); break;
+    case  7 : value=-5040.0/(x*x*x*x*x*x*x)/fabs(x); break;
+    case  8 : value=40320.0/pow(fabs(x),9.0); break;
+    case  9 : value=-362880.0/(x*x*x*x*x*x*x*x*x)/fabs(x); break;
+    case 10 : value=3628800.0/pow(fabs(x),11.0); break;
+    case 11 : value=-39916800.0/pow(x,11.0)/fabs(x); break;
+    case 12 : value=479001600.0/pow(fabs(x),13.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex one_over_x(double x, int der, const double *param)    /* K(x) = 1/x */
+{
+  double value=0.0;
+
+  (void)param;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=1.0/x; break;
+    case  1 : value=-1.0/(x*x); break;
+    case  2 : value=2.0/(x*x*x); break;
+    case  3 : value=-6.0/(x*x*x*x); break;
+    case  4 : value=24.0/(x*x*x*x*x); break;
+    case  5 : value=-120.0/(x*x*x*x*x*x); break;
+    case  6 : value=720.0/(x*x*x*x*x*x*x); break;
+    case  7 : value=-5040.0/(x*x*x*x*x*x*x*x); break;
+    case  8 : value=40320.0/(x*x*x*x*x*x*x*x*x); break;
+    case  9 : value=-362880.0/pow(x,10.0); break;
+    case 10 : value=3628800.0/pow(x,11.0); break;
+    case 11 : value=-39916800.0/pow(x,12.0); break;
+    case 12 : value=479001600.0/pow(x,13.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex inverse_multiquadric3(double x, int der, const double *param)    /* K(x) = 1/sqrt(x^2+c^2)^3 */
+{
+  double c=param[0];
+  double value=0.0;
+
+  switch (der)
+  {
+    case  0 : value=1.0/(sqrt(pow(x*x+c*c,3.0))); break;
+    case  1 : value=-3.0/sqrt(pow(x*x+c*c,5.0))*x; break;
+    case  2 : value=3.0*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); break;
+    case  3 : value=-15.0*x*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
+    case  4 : value=45.0*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
+    case  5 : value=-315.0*x*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
+    case  6 : value=315.0*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
+    case  7 : value=-2835.0*x*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
+    case  8 : value=14175.0*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
+    case  9 : value=-155925.0*x*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); break;
+    case 10 : value=467775.0*(512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c+1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); break;
+    case 11 : value=-6081075.0*x*(512.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+21120.0*x*x*x*x*x*x*c*c*c*c-18480.0*x*x*x*x*c*c*c*c*c*c+4620.0*x*x*c*c*c*c*c*c*c*c-231.0*pow(c,10.0))/sqrt(pow(x*x+c*c,25.0)); break;
+    case 12 : value=42567525.0*(1024.0*pow(x,12.0)+27720.0*x*x*x*x*c*c*c*c*c*c*c*c+33.0*pow(c,12.0)-2772.0*x*x*pow(c,10.0)-73920.0*x*x*x*x*x*x*c*c*c*c*c*c+63360.0*x*x*x*x*x*x*x*x*c*c*c*c-16896.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,27.0)); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex sinc_kernel(double x, int der, const double *param)    /* K(x) = sin(cx)/x */
+{
+  double c=param[0];
+  double value=0.0;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=sin(c*x)/x; break;
+    case  1 : value=(cos(c*x)*c*x-sin(c*x))/(x*x); break;
+    case  2 : value=-(sin(c*x)*c*c*x*x+2.0*cos(c*x)*c*x-2.0*sin(c*x))/(x*x*x); break;
+    case  3 : value=-(cos(c*x)*c*c*c*x*x*x-3.0*sin(c*x)*c*c*x*x-6.0*cos(c*x)*c*x+6.0*sin(c*x))/(x*x*x*x); break;
+    case  4 : value=(sin(c*x)*c*c*c*c*x*x*x*x+4.0*cos(c*x)*c*c*c*x*x*x-12.0*sin(c*x)*c*c*x*x-24.0*cos(c*x)*c*x+24.0*sin(c*x))/(x*x*x*x*x); break;
+    case  5 : value=(cos(c*x)*c*c*c*c*c*x*x*x*x*x-5.0*sin(c*x)*c*c*c*c*x*x*x*x-20.0*cos(c*x)*c*c*c*x*x*x+60.0*sin(c*x)*c*c*x*x+120.0*cos(c*x)*c*x-120.0*sin(c*x))/(x*x*x*x*x*x); break;
+    case  6 : value=-(sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+6.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*sin(c*x)*c*c*c*c*x*x*x*x-120.0*cos(c*x)*c*c*c*x*x*x+360.0*sin(c*x)*c*c*x*x+720.0*cos(c*x)*c*x-720.0*sin(c*x))/(x*x*x*x*x*x*x); break;
+    case  7 : value=-(cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-7.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+210.0*sin(c*x)*c*c*c*c*x*x*x*x+840.0*cos(c*x)*c*c*c*x*x*x-2520.0*sin(c*x)*c*c*x*x-5040.0*cos(c*x)*c*x+5040.0*sin(c*x))/(x*x*x*x*x*x*x*x); break;
+    case  8 : value=(sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+8.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-336.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*sin(c*x)*c*c*c*c*x*x*x*x+6720.0*cos(c*x)*c*c*c*x*x*x-20160.0*sin(c*x)*c*c*x*x-40320.0*cos(c*x)*c*x+40320.0*sin(c*x))/(x*x*x*x*x*x*x*x*x); break;
+    case  9 : value=(cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-9.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+504.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-15120.0*sin(c*x)*c*c*c*c*x*x*x*x-60480.0*cos(c*x)*c*c*c*x*x*x+181440.0*sin(c*x)*c*c*x*x+362880.0*cos(c*x)*c*x-362880.0*sin(c*x))/pow(x,10.0); break;
+    case 10 : value=-(sin(c*x)*pow(c,10.0)*pow(x,10.0)+10.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-720.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+30240.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*sin(c*x)*c*c*c*c*x*x*x*x-604800.0*cos(c*x)*c*c*c*x*x*x+1814400.0*sin(c*x)*c*c*x*x+3628800.0*cos(c*x)*c*x-3628800.0*sin(c*x))/pow(x,11.0); break;
+    case 11 : value=-(cos(c*x)*pow(c,11.0)*pow(x,11.0)-11.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+990.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-55440.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1663200.0*sin(c*x)*c*c*c*c*x*x*x*x+6652800.0*cos(c*x)*c*c*c*x*x*x-19958400.0*sin(c*x)*c*c*x*x-39916800.0*cos(c*x)*c*x+39916800.0*sin(c*x))/pow(x,12.0); break;
+    case 12 : value=(sin(c*x)*pow(c,12.0)*pow(x,12.0)+12.0*cos(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-1320.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+95040.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-3991680.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*sin(c*x)*c*c*c*c*x*x*x*x+79833600.0*cos(c*x)*c*c*c*x*x*x-239500800.0*sin(c*x)*c*c*x*x-479001600.0*cos(c*x)*c*x+479001600.0* [...]
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+double _Complex cosc(double x, int der, const double *param)    /* K(x) = cos(cx)/x */
+{
+  double c=param[0];
+  double value=0.0;
+  double sign;
+
+  if (x<0) sign=-1.0; else sign=1.0;
+  x=fabs(x);
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value=cos(c*x)/x; break;
+    case  1 : value=-(sin(c*x)*c*x+cos(c*x))/(x*x); break;
+    case  2 : value=(-cos(c*x)*c*c*x*x+2.0*sin(c*x)*c*x+2.0*cos(c*x))/(x*x*x); break;
+    case  3 : value=(sin(c*x)*c*c*c*x*x*x+3.0*cos(c*x)*c*c*x*x-6.0*sin(c*x)*c*x-6.0*cos(c*x))/(x*x*x*x); break;
+    case  4 : value=(cos(c*x)*c*c*c*c*x*x*x*x-4.0*sin(c*x)*c*c*c*x*x*x-12.0*cos(c*x)*c*c*x*x+24.0*sin(c*x)*c*x+24.0*cos(c*x))/(x*x*x*x*x); break;
+    case  5 : value=-(sin(c*x)*c*c*c*c*c*x*x*x*x*x+5.0*cos(c*x)*c*c*c*c*x*x*x*x-20.0*sin(c*x)*c*c*c*x*x*x-60.0*cos(c*x)*c*c*x*x+120.0*sin(c*x)*c*x+120.0*cos(c*x))/(x*x*x*x*x*x); break;
+    case  6 : value=-(cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-6.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*cos(c*x)*c*c*c*c*x*x*x*x+120.0*sin(c*x)*c*c*c*x*x*x+360.0*cos(c*x)*c*c*x*x-720.0*sin(c*x)*c*x-720.0*cos(c*x))/(x*x*x*x*x*x*x); break;
+    case  7 : value=(sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+7.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-210.0*cos(c*x)*c*c*c*c*x*x*x*x+840.0*sin(c*x)*c*c*c*x*x*x+2520.0*cos(c*x)*c*c*x*x-5040.0*sin(c*x)*c*x-5040.0*cos(c*x))/(x*x*x*x*x*x*x*x); break;
+    case  8 : value=(cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-8.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+336.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*cos(c*x)*c*c*c*c*x*x*x*x-6720.0*sin(c*x)*c*c*c*x*x*x-20160.0*cos(c*x)*c*c*x*x+40320.0*sin(c*x)*c*x+40320.0*cos(c*x))/(x*x*x*x*x*x*x*x*x); break;
+    case  9 : value=-(sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+9.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-504.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+15120.0*cos(c*x)*c*c*c*c*x*x*x*x-60480.0*sin(c*x)*c*c*c*x*x*x-181440.0*cos(c*x)*c*c*x*x+362880.0*sin(c*x)*c*x+362880.0*cos(c*x))/pow(x,10.0); break;
+    case 10 : value=-(cos(c*x)*pow(c,10.0)*pow(x,10.0)-10.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+720.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-30240.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*cos(c*x)*c*c*c*c*x*x*x*x+604800.0*sin(c*x)*c*c*c*x*x*x+1814400.0*cos(c*x)*c*c*x*x-3628800.0*sin(c*x)*c*x-3628800.0*cos(c*x))/pow(x,11.0); break;
+    case 11 : value=(sin(c*x)*pow(c,11.0)*pow(x,11.0)+11.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-990.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+55440.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-1663200.0*cos(c*x)*c*c*c*c*x*x*x*x+6652800.0*sin(c*x)*c*c*c*x*x*x+19958400.0*cos(c*x)*c*c*x*x-39916800.0*sin(c*x)*c*x-39916800.0*cos(c*x))/pow(x,12.0); break;
+    case 12 : value=(cos(c*x)*pow(c,12.0)*pow(x,12.0)-12.0*sin(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)+1320.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-95040.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3991680.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*cos(c*x)*c*c*c*c*x*x*x*x-79833600.0*sin(c*x)*c*c*c*x*x*x-239500800.0*cos(c*x)*c*c*x*x+479001600.0*sin(c*x)*c*x+479001600.0* [...]
+    default : value=0.0;
+  }
+  value*=pow(sign,der);
+
+  return value;
+}
+
+double _Complex kcot(double x, int der, const double *param)   /* K(x) = cot(cx) */
+{
+  double c=param[0];
+  double value=0.0;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value = 1.0/tan(c * x); break;
+    case  1 : value = -(1.0 + pow(1.0/tan(c * x), 2.0)) * c; break;
+    case  2 : value = 2.0 * 1.0/tan(c * x) * (1.0 + pow(1.0/tan(c * x), 2.0)) * c * c; break;
+    case  3 : value = -2.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 3.0) * (1.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); break;
+    case  4 : value = 8.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 4.0) * 1.0/tan(c * x) * (2.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); break;
+    case  5 : value = -0.8e1 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.5e1) * (0.15e2 * pow(1.0/tan(c * x), 0.2e1) + 0.15e2 * pow(1.0/tan(c * x), 0.4e1) + 0.2e1); break;
+    case  6 : value = 0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.6e1) * 1.0/tan(c * x) * (0.60e2 * pow(1.0/tan(c * x), 0.2e1) + 0.45e2 * pow(1.0/tan(c * x), 0.4e1) + 0.17e2); break;
+    case  7 : value = -0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.7e1) * (0.525e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.231e3 * pow(1.0/tan(c * x), 0.2e1) + 0.17e2); break;
+    case  8 : value = 0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.8e1) * 1.0/tan(c * x) * (0.630e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.378e3 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); break;
+    case  9 : value = -0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.9e1) * (0.6615e4 * pow(1.0/tan(c * x), 0.6e1) + 0.2835e4 * pow(1.0/tan(c * x), 0.8e1) + 0.5040e4 * pow(1.0/tan(c * x), 0.4e1) + 0.1320e4 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); break;
+    case 10 : value = 0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.10e2) * 1.0/tan(c * x) * (0.37800e5 * pow(1.0/tan(c * x), 0.6e1) + 0.14175e5 * pow(1.0/tan(c * x), 0.8e1) + 0.34965e5 * pow(1.0/tan(c * x), 0.4e1) + 0.12720e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); break;
+    case 11 : value = -0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.11e2) * (0.467775e6 * pow(1.0/tan(c * x), 0.8e1) + 0.155925e6 * pow(1.0/tan(c * x), 0.10e2) + 0.509355e6 * pow(1.0/tan(c * x), 0.6e1) + 0.238425e6 * pow(1.0/tan(c * x), 0.4e1) + 0.42306e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); break;
+    case 12 : value = 0.1024e4 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.12e2) * 1.0/tan(c * x) * (0.1559250e7 * pow(1.0/tan(c * x), 0.8e1) + 0.467775e6 * pow(1.0/tan(c * x), 0.10e2) + 0.1954260e7 * pow(1.0/tan(c * x), 0.6e1) + 0.1121670e7 * pow(1.0/tan(c * x), 0.4e1) + 0.280731e6 * pow(1.0/tan(c * x), 0.2e1) + 0.21844e5); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+
+double _Complex one_over_cube(double x, int der, const double *param)
+{
+  double value=0.0;
+
+  if (fabs(x)<DBL_EPSILON) value=0.0;
+  else switch (der)
+  {
+    case  0 : value = 1.0/(x*x*x); break;
+    case  1 : value = -3.0/(x*x*x*x); break;
+    case  2 : value = 12.0/(x*x*x*x*x); break;
+    case  3 : value = -60.0/(x*x*x*x*x*x); break;
+    case  4 : value = 360.0/(x*x*x*x*x*x*x); break;
+    case  5 : value = -2520.0/(x*x*x*x*x*x*x*x); break;
+    case  6 : value = 20160.0/pow(x, 9.0); break;
+    case  7 : value = -181440.0/pow(x, 10.0); break;
+    case  8 : value = 1814400.0/pow(x, 11.0); break;
+    case  9 : value = -19958400.0/pow(x, 12.0); break;
+    case  10 : value = 239500800.0/pow(x, 13.0); break;
+    case  11 : value = -3113510400.0/pow(x, 14.0); break;
+    case  12 : value = 43589145600.0/pow(x, 15.0); break;
+    default : value=0.0;
+  }
+
+  return value;
+}
+
+
+/* \} */
+
+/* kernels.c */
diff --git a/applications/fastsum/kernels.h b/applications/fastsum/kernels.h
new file mode 100644
index 0000000..8532b0b
--- /dev/null
+++ b/applications/fastsum/kernels.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: kernels.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/*! \file kernels.h
+ *  \brief Header file with predefined kernels for the fast summation algorithm.
+ */
+#ifndef KERNELS_H
+#define KERNELS_H
+
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup applications_fastsum
+ * \{
+ */
+
+double _Complex gaussian(double x, int der, const double *param);              /* K(x)=exp(-x^2/c^2) */
+double _Complex multiquadric(double x, int der, const double *param);          /* K(x)=sqrt(x^2+c^2) */
+double _Complex inverse_multiquadric(double x, int der, const double *param);  /* K(x)=1/sqrt(x^2+c^2) */
+double _Complex logarithm(double x, int der, const double *param);             /* K(x)=log |x| */
+double _Complex thinplate_spline(double x, int der, const double *param);      /* K(x) = x^2 log |x| */
+double _Complex one_over_square(double x, int der, const double *param);       /* K(x) = 1/x^2 */
+double _Complex one_over_modulus(double x, int der, const double *param);      /* K(x) = 1/|x| */
+double _Complex one_over_x(double x, int der, const double *param);            /* K(x) = 1/x */
+double _Complex inverse_multiquadric3(double x, int der, const double *param); /* K(x) = 1/sqrt(x^2+c^2)^3 */
+double _Complex sinc_kernel(double x, int der, const double *param);           /* K(x) = sin(cx)/x */
+double _Complex cosc(double x, int der, const double *param);                  /* K(x) = cos(cx)/x */
+double _Complex kcot(double x, int der, const double *param);                   /* K(x) = cot(cx) */
+double _Complex one_over_cube(double x, int der, const double *param);                /* K(x) = 1/x^3 */
+/* \} */
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif /* __cplusplus */
+
+#endif
+/* kernels.h */
diff --git a/applications/fastsumS2/Makefile.am b/applications/fastsumS2/Makefile.am
new file mode 100644
index 0000000..dc9cb12
--- /dev/null
+++ b/applications/fastsumS2/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3783 2012-06-06 13:17:59Z mpip $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = fastsumS2
+
+fastsumS2_SOURCES = fastsumS2.c doxygen.h
+fastsumS2_LDADD = $(top_builddir)/libnfft3.la
+
+EXTRA_DIST = fastsumS2.m writeTestcase.m readTestcase.m README example.in example.out
diff --git a/applications/fastsumS2/Makefile.in b/applications/fastsumS2/Makefile.in
new file mode 100644
index 0000000..3970941
--- /dev/null
+++ b/applications/fastsumS2/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3783 2012-06-06 13:17:59Z mpip $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fastsumS2$(EXEEXT)
+subdir = applications/fastsumS2
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_fastsumS2_OBJECTS = fastsumS2.$(OBJEXT)
+fastsumS2_OBJECTS = $(am_fastsumS2_OBJECTS)
+fastsumS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(fastsumS2_SOURCES)
+DIST_SOURCES = $(fastsumS2_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+fastsumS2_SOURCES = fastsumS2.c doxygen.h
+fastsumS2_LDADD = $(top_builddir)/libnfft3.la
+EXTRA_DIST = fastsumS2.m writeTestcase.m readTestcase.m README example.in example.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastsumS2/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/fastsumS2/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+fastsumS2$(EXEEXT): $(fastsumS2_OBJECTS) $(fastsumS2_DEPENDENCIES) $(EXTRA_fastsumS2_DEPENDENCIES) 
+	@rm -f fastsumS2$(EXEEXT)
+	$(LINK) $(fastsumS2_OBJECTS) $(fastsumS2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsumS2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/fastsumS2/README b/applications/fastsumS2/README
new file mode 100644
index 0000000..1e976c2
--- /dev/null
+++ b/applications/fastsumS2/README
@@ -0,0 +1,191 @@
+fastsumS2 - Fast summation of radial functions on the sphere
+
+  Introduction
+  ------------
+  This application deals with approximations to sums of the form
+
+            L-1
+             -
+  f(xi_d) =  >  b_l  K(eta_l - xi_d)    (d=0,...,D-1)                    (1)
+             -
+            l=0
+
+  where xi_d, eta_l are arbitrary nodes on the sphere S^2 given in spherical
+  coordinates (theta,phi) from [0,pi] x [0,2pi), b_l are complex coefficients
+  and K: [-1,1] -> C is a kernel function. Such kernels include the Abel-Poisson
+  and singularity kernels as well as locally supported kernels and the spherical
+  Gaussian kernel. In the following, we will assume that the reader is familiar
+  with the general procedure. A detailed description can be found in [1].
+
+  The fast approximate algorithm usees the fast spherical Fourier transform for 
+  arbitrary nodes (NFSFT). For more information on this algorithm and notation 
+  in detail, we refer to [1] and [2]. Alternatively, one can replace the 
+  individual steps of the NFSFT algirithm by exact but asymptotically slower 
+  versions or use a direct evaluation and summation of the kernel functions in 
+  (1).
+
+  Directory contents
+  ------------------
+  fastsumS2.c     Example C program
+  example.in      Example input for fastsum.c
+  example.out     Example output of fastsum.c on input example.in
+  README          This file
+  Makefile.am     Automake template
+  fastsumS2.m     MATLAB example file that re-produces figures and tables from 
+                  [1] using fastsumS2.c
+  readTestcase.m  MATLAB function that reads output of fastsumS2.c
+  writeTestcase.m MATLAB function that writes input for fastsumS2.c
+
+  fastsumS2.c
+  -----------
+  The C program fastsumS2.c computes approximations to the sums in (1) using the
+  aforementioned different algorithms. It reads input from the standard input 
+  stream and writes output to the standard output stream. The input consists of 
+  one ore more testcases. Each testcase specifies
+  - the algorithm(s) and corresponding parameters,
+  - the kernel function and corresponding parameters,
+  - the cut-off degree(s) M for the approximation to the kernel function,
+  - the numbers D and L of nodes.
+  The D and L nodes xi_d and eta_l in (1) are chosen uniformly randomly 
+  distributed over the sphere S^2. The coefficients b_l in (1) are chosen 
+  uniformly randomly distributed in the complex square [-1/2,1/2] x i[-1/2,1/2].
+  For more information, see the example input file example.in .
+
+  Each parameter is specified by an assignment of the form 'name=value'. Each
+  assignment is seperated from the others by at least one whitespace. All
+  parameter values are integer or floating point numbers. There are obligatory
+  parameters which have to be specified in every testcase and extra 
+  parameters which are only necessary if the parameters on which each of them 
+  depends take certain values. The parameters must be specified in the order as 
+  above. Every parameter has a range of admissible values. The behaviour of the 
+  program for illegal values of parameters is unspecified. The first parameter 
+  specification is 'testcases=...' which specifies the number of testcases to 
+  follow. Each testcase has the following parameters with extra parameters 
+  marked by an asterisk:
+  - nfsft          If set to 1, the NFSFT algorithm is used. If set to 0, the 
+                   direct NDSFT algorithm is used.
+  * nfft           If set to 1, the NFSFT algorithm will internally use the NFFT
+                   algorithm. If set to 0, the NFSFT algorithm will instead use 
+                   the direct NDSFT algorithm. Extra parameter. Specified only 
+                   if nfsft=1.
+  * cutoff         An integer > 0 specifying the NFFT cut-off parameter. Extra
+                   parameter. Specified only if nfft=1.
+  * fpt            If set to 1, the NFSFT algorithm will internally use the fast 
+                   polynomial transform algorithm (FPT). If set to 0, the NFSFT 
+                   algorithm will instead use the direct discrete polynomial 
+                   transform algorithm (direct DPT). Extra parameter. Specified 
+                   only if nfsft=1.
+  * threshold      A floating point number > 0 specifying the threshold 
+                   parameter for the FPT algorithm. Extra parameter. Specified 
+                   only if fpt=1.
+  - kernel         An integer from {0,1,2,3} specifying the type of kernel 
+                   function to be used. The different kernel functions available 
+                   are
+                     + the Abel-Poisson kernel Q_h with real parameter h from 
+                       (0,1),
+                     + the singularity kernel S_h with real parameter h from 
+                       (0,1),
+                     + the locally supported kernel L_h,lambda real parameter h 
+                       from (-1,1) and integer parameter lambda >= 0.
+                     + the spherical Gaussian kernel G_sigma with real parameter 
+                       sigma > 0.
+  - parameter_sets An integer > 0 specifying the number of parameter sets to
+                   follow for the chosen type of kernel function. In a testcase, 
+                   the specified type of kernel function can be used with more 
+                   than one set of distinct parameters to yield different kernel 
+                   functions.
+  - parameters     An integer > 0 specifying the number of parameters that 
+                   specifies each individual kernel function (one for 
+                   Abel-Poisson, singularity and spherical Gaussian kernel, two 
+                   for the locally supported kernel). The parameters' values are 
+                   given afterwards a list floating point numbers order as in 
+                   the description of the kernel functions above and grouped by 
+                   kernel function instance.
+  - bandwidths     The number of different cut-off degrees M to be used in the
+                   approximation. There follows a list of positive integers 
+                   specifying the distinct cut-off degrees.
+  - node_sets      An integer > 0 specifying the number of sets of nodes to 
+                   follow
+  - L              An integer > 0 specifying the number of source nodes.
+  - D              An integer > 0 specifying the number of target nodes.
+  - compare        If set to 1, the result of the approximate algorithm is 
+                   compared to the result of the direct evaluation. If set to 0, 
+                   no comparison is performed.
+  * precomputed    If set to 1, all values in the sum (1) are precomputed and 
+                   the time measurement for the direct evaluation only measures 
+                   the time needed to sum up these values. Extra parameter. 
+                   Specified only if compare=1.
+  * repetitions    An integer > 0 specifying the number of times the summation
+                   process is repeated. Time emasurements are averaged over all 
+                   repetitions. This can be used to compensate for inaccuracies 
+                   in the time measurements for very small computation times.
+
+  The output of the program containes all the input but without the parameter
+  names and, in addition, the results of time and error measurements after each
+  testcase. See the file example.out for an example output on input the contents
+  of example.in.
+
+  To each combination of kernel function, cut-off degree, and node set
+  corresponds a single run of the summation algorithm and therefore a set of
+  six resulting values grouped together. These are
+  - the time needed for direct evaluation of the sums (1),
+  - the time needed for direct evaluation of the sums (1) with the values of
+    the kernel functions precomputed,
+  - the time needed by the fast summation algorithm using the direct NDSFT
+    algorithm,
+  - the time needed by the fast summation algorithm using the NFSFT algorithm,
+  - the error E_infty for the fast summation algorithm using the direct NDSFT
+    algorithm,
+  - the error E_infty for the fast summation algorithm using the NFSFT
+    algorithm.
+
+  Here, the error E_infty is defined as ||f - f_M||_infty / ||b||_1 with the
+  infinity norm ||.||_infty, the one norm ||.||_1, the vector f of function
+  values computed by direct evaluation of the sums in (1), f_M the vector
+  computed by the fast summation algorithm, using either the direct NDSFT or
+  the NFSFT algorithm, and the vector b containing the coefficients b_l from
+  (1).
+  Depending on the parameter combination, some of these (always positive) values 
+  might be undefined. This indicated by setting these values to -1.0.
+  The blocks of resulting values for a single run are grouped for each testcase
+  first by the kernel parameters, second by the node sets and third by the
+  cut-off bandwidths ordered as in the input.
+
+  fastsumS2.m
+  -----------
+  This MATLAB function demonstrates the fast summation algorithm using the C
+  program fastsumS2.c . It allows for selecting different testcases to reproduce
+  the figures and tables from [1]. On choosing a testcase, input for the C
+  program fastsumS2.c is generated and written to the file data.in ,
+  fastsumS2.c is called with the generated input writing the result to the file
+  data.out where it is read again into MATLAB. In MATLAB, type "help fatsumS2"
+  for more information.
+
+  readTestcase.m
+  --------------
+  This MATLAB function is used by fatsumS2.m and allows for reading testcase
+  specifications and results from a file. In MATLAB, type "help readTestcase"
+  for more information.
+
+  writeTestcase.m
+  ---------------
+  This MATLAB function is used by fatsumS2.m and allows for writing testcase
+  specifications to a file. In MATLAB, type "help readTestcase" for more
+  information.
+
+  References
+  ----------
+  [1] Keiner, J., Kunis, S. and Potts, D., Fast summation of radial functions
+      on the sphere, Computing 78, 1-15 , 2006
+
+  [2] Kunis, S. and Potts, D., Fast spherical Fourier algorithms, J. Comput.
+      Appl. Math. 161, 75-98, 2003
+
+
+  Feedback
+  --------
+  If you have comments, questions, or suggestions regarding NFFT, don't
+  hesitate to contact us. For more information, news and updates see the NFFT
+  website at
+
+                 http://www.tu-chemnitz.de/~potts/nfft/
diff --git a/applications/fastsumS2/doxygen.h b/applications/fastsumS2/doxygen.h
new file mode 100644
index 0000000..be3c7e2
--- /dev/null
+++ b/applications/fastsumS2/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_fastsumS2 Fast summation of radial functions on the sphere
+ * \ingroup applications
+ */
diff --git a/applications/fastsumS2/example.in b/applications/fastsumS2/example.in
new file mode 100644
index 0000000..10a0414
--- /dev/null
+++ b/applications/fastsumS2/example.in
@@ -0,0 +1,240 @@
+testcases=3
+nfsft=1
+nfft=0
+fpt=1
+threshold=1.000000e+03
+kernel=0
+parameter_sets=1
+parameters=1
+0.800000
+bandwidths=64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+node_sets=1
+L=1000
+D=1000
+compare=1
+precomputed=0
+repetitions=1
+nfsft=1
+nfft=1
+cutoff=3
+fpt=1
+threshold=1.000000e+03
+kernel=0
+parameter_sets=1
+parameters=1
+0.800000
+bandwidths=64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+node_sets=1
+L=1000
+D=1000
+compare=1
+precomputed=0
+repetitions=1
+nfsft=1
+nfft=1
+cutoff=6
+fpt=1
+threshold=1.000000e+03
+kernel=0
+parameter_sets=1
+parameters=1
+0.800000
+bandwidths=64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+node_sets=1
+L=1000
+D=1000
+compare=1
+precomputed=0
+repetitions=1
diff --git a/applications/fastsumS2/example.out b/applications/fastsumS2/example.out
new file mode 100644
index 0000000..fe83d55
--- /dev/null
+++ b/applications/fastsumS2/example.out
@@ -0,0 +1,1584 @@
+3
+1
+0
+1
+1000.000000
+0
+1
+1
+0.800000
+64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+1
+1000
+1000
+1
+0
+1
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.047332e-03
+-1.000000e+00
+1.576067e-02
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.450238e-02
+-1.000000e+00
+7.145489e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.053569e-01
+-1.000000e+00
+5.295336e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.765255e-01
+-1.000000e+00
+2.590083e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.840986e-01
+-1.000000e+00
+1.171801e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.880245e-01
+-1.000000e+00
+4.232169e-04
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.134875e-01
+-1.000000e+00
+2.067225e-04
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+6.593283e-01
+-1.000000e+00
+8.173716e-05
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+8.628760e-01
+-1.000000e+00
+3.865388e-05
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.073047e+00
+-1.000000e+00
+1.853350e-05
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.285226e+00
+-1.000000e+00
+5.975031e-06
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.514456e+00
+-1.000000e+00
+3.461024e-06
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.714600e+00
+-1.000000e+00
+1.451071e-06
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.044110e+00
+-1.000000e+00
+5.647944e-07
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.320307e+00
+-1.000000e+00
+2.420518e-07
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.570554e+00
+-1.000000e+00
+1.113257e-07
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.194016e+00
+-1.000000e+00
+4.139858e-08
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.211849e+00
+-1.000000e+00
+1.791441e-08
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.545357e+00
+-1.000000e+00
+7.180275e-09
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.927218e+00
+-1.000000e+00
+3.205551e-09
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.417985e+00
+-1.000000e+00
+1.607196e-09
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.780440e+00
+-1.000000e+00
+6.027812e-10
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.210072e+00
+-1.000000e+00
+2.730937e-10
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.687245e+00
+-1.000000e+00
+9.956485e-11
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+6.234587e+00
+-1.000000e+00
+3.650232e-11
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+6.775789e+00
+-1.000000e+00
+1.735506e-11
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+7.207870e+00
+-1.000000e+00
+7.175873e-12
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+7.745034e+00
+-1.000000e+00
+2.552043e-12
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+8.369756e+00
+-1.000000e+00
+1.223144e-12
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+8.847885e+00
+-1.000000e+00
+4.934419e-13
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+9.429349e+00
+-1.000000e+00
+1.941885e-13
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.004512e+01
+-1.000000e+00
+9.104275e-14
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.065165e+01
+-1.000000e+00
+3.849784e-14
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.127894e+01
+-1.000000e+00
+1.654996e-14
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.203556e+01
+-1.000000e+00
+6.889145e-15
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.269827e+01
+-1.000000e+00
+2.463302e-15
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.344654e+01
+-1.000000e+00
+1.075163e-15
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.413678e+01
+-1.000000e+00
+6.001767e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.497025e+01
+-1.000000e+00
+6.664539e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.574484e+01
+-1.000000e+00
+5.081251e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.651622e+01
+-1.000000e+00
+5.596748e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.725102e+01
+-1.000000e+00
+5.154897e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.819202e+01
+-1.000000e+00
+5.191758e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.895847e+01
+-1.000000e+00
+5.449481e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.985140e+01
+-1.000000e+00
+5.412642e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.084157e+01
+-1.000000e+00
+5.228557e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.194042e+01
+-1.000000e+00
+5.412647e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.303024e+01
+-1.000000e+00
+5.412638e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.368777e+01
+-1.000000e+00
+5.449467e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.463637e+01
+-1.000000e+00
+5.596745e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.523590e+01
+-1.000000e+00
+5.596740e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.634064e+01
+-1.000000e+00
+5.596744e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.724900e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.838764e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.941623e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.046437e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.217433e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.287034e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.385329e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.507951e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.613248e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.724638e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.029788e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.159665e+01
+-1.000000e+00
+5.523099e-16
+
+1
+1
+3
+1
+1000.000000
+0
+1
+1
+0.800000
+64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+1
+1000
+1000
+1
+0
+1
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.058164e-03
+-1.000000e+00
+2.206196e-02
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.916940e-04
+-1.000000e+00
+9.230374e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.749389e-04
+-1.000000e+00
+4.864291e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+8.122652e-04
+-1.000000e+00
+2.274209e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.344094e-03
+-1.000000e+00
+1.062196e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.875128e-03
+-1.000000e+00
+5.580252e-04
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.285584e-03
+-1.000000e+00
+2.077600e-04
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.904276e-03
+-1.000000e+00
+8.803162e-05
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.139147e-03
+-1.000000e+00
+3.748478e-05
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.730155e-03
+-1.000000e+00
+1.851213e-05
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.591798e-03
+-1.000000e+00
+6.665944e-06
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+7.545517e-03
+-1.000000e+00
+2.975418e-06
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+8.549193e-03
+-1.000000e+00
+1.440584e-06
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+9.308123e-03
+-1.000000e+00
+5.872307e-07
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.009069e-02
+-1.000000e+00
+2.603293e-07
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.134565e-02
+-1.000000e+00
+1.228668e-07
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.156919e-02
+-1.000000e+00
+9.576442e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.221613e-02
+-1.000000e+00
+7.410972e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.560731e-02
+-1.000000e+00
+6.331626e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.638115e-02
+-1.000000e+00
+6.034587e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.947786e-02
+-1.000000e+00
+8.006522e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.124964e-02
+-1.000000e+00
+5.849066e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.579587e-02
+-1.000000e+00
+6.006391e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.662405e-02
+-1.000000e+00
+6.394056e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.080721e-02
+-1.000000e+00
+6.404895e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.293288e-02
+-1.000000e+00
+8.404899e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.483403e-02
+-1.000000e+00
+7.138842e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.858419e-02
+-1.000000e+00
+6.475614e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.733759e-02
+-1.000000e+00
+5.546687e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.257779e-02
+-1.000000e+00
+8.905276e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.502895e-02
+-1.000000e+00
+6.703670e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.476594e-02
+-1.000000e+00
+7.281137e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.012439e-01
+-1.000000e+00
+8.602497e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.087701e-01
+-1.000000e+00
+5.322486e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.072860e-01
+-1.000000e+00
+7.190318e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.130813e-01
+-1.000000e+00
+6.175638e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.816289e-01
+-1.000000e+00
+5.544125e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.350188e-01
+-1.000000e+00
+6.333313e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.300539e-01
+-1.000000e+00
+5.665348e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.456071e-01
+-1.000000e+00
+6.575343e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.438004e-01
+-1.000000e+00
+6.158477e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.599971e-01
+-1.000000e+00
+7.265016e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.924899e-01
+-1.000000e+00
+5.685559e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.756611e-01
+-1.000000e+00
+7.989629e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.831965e-01
+-1.000000e+00
+7.176792e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.987849e-01
+-1.000000e+00
+7.284645e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.130107e-01
+-1.000000e+00
+6.510812e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.211764e-01
+-1.000000e+00
+8.360268e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.186293e-01
+-1.000000e+00
+5.326091e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.508298e-01
+-1.000000e+00
+7.017699e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.675460e-01
+-1.000000e+00
+6.326950e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.450898e-01
+-1.000000e+00
+6.094832e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.961816e-01
+-1.000000e+00
+5.504172e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.485896e-01
+-1.000000e+00
+7.642313e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.592066e-01
+-1.000000e+00
+5.956123e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.689671e-01
+-1.000000e+00
+6.318204e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.005800e-01
+-1.000000e+00
+5.306546e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.204003e-01
+-1.000000e+00
+7.470833e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.306144e-01
+-1.000000e+00
+5.091598e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.088647e-01
+-1.000000e+00
+6.035399e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.040653e-01
+-1.000000e+00
+6.030642e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.757050e-01
+-1.000000e+00
+6.749314e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.436299e-01
+-1.000000e+00
+5.168785e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.934722e-01
+-1.000000e+00
+4.541723e-08
+
+1
+1
+6
+1
+1000.000000
+0
+1
+1
+0.800000
+64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+1
+1000
+1000
+1
+0
+1
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.039949e-03
+-1.000000e+00
+2.014872e-02
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+9.502748e-04
+-1.000000e+00
+8.659336e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.132988e-03
+-1.000000e+00
+5.506680e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.253998e-03
+-1.000000e+00
+2.229810e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.803338e-03
+-1.000000e+00
+1.095621e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.449043e-03
+-1.000000e+00
+4.469697e-04
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.783493e-03
+-1.000000e+00
+2.390019e-04
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.634455e-03
+-1.000000e+00
+7.240590e-05
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+5.709544e-03
+-1.000000e+00
+4.524542e-05
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.624406e-03
+-1.000000e+00
+1.984394e-05
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+7.271370e-03
+-1.000000e+00
+7.150170e-06
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+8.539940e-03
+-1.000000e+00
+3.311000e-06
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+8.987270e-03
+-1.000000e+00
+1.317728e-06
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.014274e-02
+-1.000000e+00
+5.724193e-07
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.100352e-02
+-1.000000e+00
+2.082067e-07
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.253078e-02
+-1.000000e+00
+8.020459e-08
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.277670e-02
+-1.000000e+00
+4.033054e-08
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.353545e-02
+-1.000000e+00
+1.910061e-08
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.701967e-02
+-1.000000e+00
+8.209719e-09
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.731132e-02
+-1.000000e+00
+3.415467e-09
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.969884e-02
+-1.000000e+00
+1.611355e-09
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.248629e-02
+-1.000000e+00
+5.897510e-10
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.718490e-02
+-1.000000e+00
+2.275297e-10
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.144712e-02
+-1.000000e+00
+1.005764e-10
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.078063e-02
+-1.000000e+00
+3.669910e-11
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.461497e-02
+-1.000000e+00
+1.799338e-11
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.949561e-02
+-1.000000e+00
+7.267821e-12
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.140988e-02
+-1.000000e+00
+2.961840e-12
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.233617e-02
+-1.000000e+00
+1.899627e-12
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.199885e-02
+-1.000000e+00
+4.898336e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+7.246404e-02
+-1.000000e+00
+2.540395e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+8.287569e-02
+-1.000000e+00
+1.419295e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.356708e-01
+-1.000000e+00
+1.077694e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.666573e-01
+-1.000000e+00
+1.166215e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.449886e-01
+-1.000000e+00
+1.040598e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.602449e-01
+-1.000000e+00
+1.045409e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.615239e-01
+-1.000000e+00
+9.447209e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.784918e-01
+-1.000000e+00
+1.110954e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.523209e-01
+-1.000000e+00
+8.527835e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.713088e-01
+-1.000000e+00
+9.703811e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.399460e-01
+-1.000000e+00
+1.111198e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.662828e-01
+-1.000000e+00
+7.758726e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.028379e-01
+-1.000000e+00
+9.356213e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.902028e-01
+-1.000000e+00
+9.564702e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.946892e-01
+-1.000000e+00
+1.116358e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.118433e-01
+-1.000000e+00
+1.074939e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.307004e-01
+-1.000000e+00
+8.718194e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.337525e-01
+-1.000000e+00
+9.001991e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.218771e-01
+-1.000000e+00
+7.784874e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.530055e-01
+-1.000000e+00
+1.154430e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.583145e-01
+-1.000000e+00
+8.167511e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.524221e-01
+-1.000000e+00
+9.630596e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.072517e-01
+-1.000000e+00
+9.168991e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.624353e-01
+-1.000000e+00
+9.037553e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.775889e-01
+-1.000000e+00
+9.259290e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.816421e-01
+-1.000000e+00
+9.142843e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.490324e-01
+-1.000000e+00
+7.655178e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.635086e-01
+-1.000000e+00
+1.163181e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.702578e-01
+-1.000000e+00
+8.073900e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.472053e-01
+-1.000000e+00
+8.085754e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+5.798098e-01
+-1.000000e+00
+8.861487e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+7.018026e-01
+-1.000000e+00
+8.376872e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.815139e-01
+-1.000000e+00
+1.069780e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.015164e-01
+-1.000000e+00
+9.420015e-14
+
diff --git a/applications/fastsumS2/fastsumS2.c b/applications/fastsumS2/fastsumS2.c
new file mode 100644
index 0000000..c898816
--- /dev/null
+++ b/applications/fastsumS2/fastsumS2.c
@@ -0,0 +1,912 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsumS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \defgroup applications_fastsumS2_test fastsumS2_matlab
+ * \ingroup applications_fastsumS2
+ * \{
+ */
+#include "config.h"
+
+/* standard headers */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <float.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* NFFT3 header */
+#include "nfft3.h"
+
+/* NFFT3 utilities */
+#include "nfft3util.h"
+#include "infft.h"
+
+/* Fourier-Legendre coefficients for Abel-Poisson kernel */
+#define SYMBOL_ABEL_POISSON(k,h) (pow(h,k))
+
+/* Fourier-Legendre coefficients for singularity kernel */
+#define SYMBOL_SINGULARITY(k,h) ((2.0/(2*k+1))*pow(h,k))
+
+/* Flags for the different kernel functions */
+
+/** Abel-Poisson kernel */
+#define KT_ABEL_POISSON (0)
+/** Singularity kernel */
+#define KT_SINGULARITY  (1)
+/** Locally supported kernel */
+#define KT_LOC_SUPP     (2)
+/** Gaussian kernel */
+#define KT_GAUSSIAN     (3)
+
+/** Enumeration type for yes/no/both-type parameters */
+enum pvalue {NO = 0, YES = 1, BOTH = 2};
+
+/**
+ * Computes the \f$\mathbb{R}^3\f$ standard inner product between two vectors
+ * on the unit sphere \f$\mathbb{S}^2\f$ given in spherical coordinates.
+ *
+ * \arg phi1   The angle \f$\varphi_1 \in [-\pi,\pi)\f$ of the first vector
+ * \arg theta1 The angle \f$\vartheta_1 \in [0,\pi]\f$ of the first vector
+ * \arg phi2   The angle \f$\varphi_2 \in [-\pi,\pi)\f$ of the second vector
+ * \arg theta2 The angle \f$\vartheta_2 \in [0,\pi]\f$ of the second vector
+ *
+ * \return The inner product \f$\cos \vartheta_1 \cos \vartheta_2 +
+ *         \sin \vartheta_1 \sin(\vartheta_2 \cos(\varphi_1 - \varphi_2)\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double innerProduct(const double phi1, const double theta1,
+  const double phi2, const double theta2)
+{
+  double pi2theta1 = PI2*theta1, pi2theta2 = PI2*theta2;
+  return (cos(pi2theta1)*cos(pi2theta2)
+    + sin(pi2theta1)*sin(pi2theta2)*cos(PI2*(phi1-phi2)));
+}
+
+/**
+ * Evaluates the Poisson kernel \f$Q_h: [-1,1] \rightarrow \mathbb{R}\f$ at a
+ * node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg h The parameter \f$h \in (0,1)\f$
+ *
+ * \return The value of the Poisson kernel \f$Q_h(x)\f$ at the node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double poissonKernel(const double x, const double h)
+{
+  return (1.0/(PI4))*((1.0-h)*(1.0+h))/pow(sqrt(1.0-2.0*h*x+h*h),3.0);
+}
+
+/**
+ * Evaluates the singularity kernel \f$S_h: [-1,1] \rightarrow \mathbb{R}\f$ at
+ * a node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg h The parameter \f$h \in (0,1)\f$
+ *
+ * \return The value of the Poisson kernel \f$S_h(x)\f$ at the node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double singularityKernel(const double x, const double h)
+{
+  return (1.0/(PI2))/sqrt(1.0-2.0*h*x+h*h);
+}
+
+/**
+ * Evaluates the locally supported kernel \f$L_{h,\lambda}: [-1,1] \rightarrow
+ * \mathbb{R}\f$ at a node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg h The parameter \f$h \in (0,1)\f$
+ * \arg lambda The parameter \f$\lambda \in \mathbb{N}_0\f$
+ *
+ * \return The value of the locally supported kernel \f$L_{h,\lambda}(x)\f$ at
+ *   the node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double locallySupportedKernel(const double x, const double h,
+  const double lambda)
+{
+  return (x<=h)?(0.0):(pow((x-h),lambda));
+}
+
+/**
+ * Evaluates the spherical Gaussian kernel \f$G_\sigma: [-1,1] \rightarrow
+ * \mathbb{R}\f$ at a node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg sigma The parameter \f$\sigma \in \mathbb{R}_+\f$
+ *
+ * \return The value of the pherical Gaussian kernel \f$G_\sigma(x)\f$ at the
+ *   node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double gaussianKernel(const double x, const double sigma)
+{
+   return exp(2.0*sigma*(x-1.0));
+}
+
+/**
+ * The main program.
+ *
+ * \param argc The number of arguments
+ * \param argv An array containing the arguments as C-strings
+ *
+ * \return Exit code
+ *
+ * \author Jens Keiner
+ */
+int main (int argc, char **argv)
+{
+  double **p;                  /* The array containing the parameter sets     *
+                                * for the kernel functions                    */
+  int *m;                      /* The array containing the cut-off degrees M  */
+  int **ld;                    /* The array containing the numbers of source  *
+                                * and target nodes, L and D                   */
+  int ip;                      /* Index variable for p                        */
+  int im;                      /* Index variable for m                        */
+  int ild;                     /* Index variable for l                        */
+  int ipp;                     /* Index for kernel parameters                 */
+  int ip_max;                  /* The maximum index for p                     */
+  int im_max;                  /* The maximum index for m                     */
+  int ild_max;                 /* The maximum index for l                     */
+  int ipp_max;                 /* The maximum index for ip                    */
+  int tc_max;                  /* The number of testcases                     */
+  int m_max;                   /* The maximum cut-off degree M for the        *
+                                * current dataset                             */
+  int l_max;                   /* The maximum number of source nodes L for    *
+                                * the current dataset                         */
+  int d_max;                   /* The maximum number of target nodes D for    *
+                                * the current dataset                         */
+  long ld_max_prec;            /* The maximum number of source and target     *
+                                * nodes for precomputation multiplied         */
+  long l_max_prec;             /* The maximum number of source nodes for      *
+                                * precomputation                              */
+  int tc;                      /* Index variable for testcases                */
+  int kt;                      /* The kernel function                         */
+  int cutoff;                  /* The current NFFT cut-off parameter          */
+  double threshold;            /* The current NFSFT threshold parameter       */
+  double t_d;                  /* Time for direct algorithm in seconds        */
+  double t_dp;                 /* Time for direct algorithm with              *
+                                  precomputation in seconds                   */
+  double t_fd;                 /* Time for fast direct algorithm in seconds   */
+  double t_f;                  /* Time for fast algorithm in seconds          */
+  double temp;                 /*                                             */
+  double err_f;                /* Error E_infty for fast algorithm            */
+  double err_fd;               /* Error E_\infty for fast direct algorithm    */
+  ticks t0, t1;                /*                                             */
+  int precompute = NO;         /*                                             */
+  fftw_complex *ptr;         /*                                             */
+  double* steed;               /*                                             */
+  fftw_complex *b;           /* The weights (b_l)_{l=0}^{L-1}               */
+  fftw_complex *f_hat;       /* The spherical Fourier coefficients          */
+  fftw_complex *a;           /* The Fourier-Legendre coefficients           */
+  double *xi;                  /* Target nodes                                */
+  double *eta;                 /* Source nodes                                */
+  fftw_complex *f_m;         /* Approximate function values                 */
+  fftw_complex *f;           /* Exact function values                       */
+  fftw_complex *prec = NULL; /*                                             */
+  nfsft_plan plan;             /* NFSFT plan                                  */
+  nfsft_plan plan_adjoint;     /* adjoint NFSFT plan                          */
+  int i;                       /*                                             */
+  int k;                       /*                                             */
+  int n;                       /*                                             */
+  int d;                       /*                                             */
+  int l;                       /*                                             */
+  int use_nfsft;               /*                                             */
+  int use_nfft;                /*                                             */
+  int use_fpt;                 /*                                             */
+  int rinc;                    /*                                             */
+  double constant;             /*                                             */
+
+  /* Read the number of testcases. */
+  fscanf(stdin,"testcases=%d\n",&tc_max);
+  fprintf(stdout,"%d\n",tc_max);
+
+  /* Process each testcase. */
+  for (tc = 0; tc < tc_max; tc++)
+  {
+    /* Check if the fast transform shall be used. */
+    fscanf(stdin,"nfsft=%d\n",&use_nfsft);
+    fprintf(stdout,"%d\n",use_nfsft);
+    if (use_nfsft != NO)
+    {
+      /* Check if the NFFT shall be used. */
+      fscanf(stdin,"nfft=%d\n",&use_nfft);
+      fprintf(stdout,"%d\n",use_nfft);
+      if (use_nfft != NO)
+      {
+        /* Read the cut-off parameter. */
+        fscanf(stdin,"cutoff=%d\n",&cutoff);
+        fprintf(stdout,"%d\n",cutoff);
+      }
+      else
+      {
+        /* TODO remove this */
+        /* Initialize unused variable with dummy value. */
+        cutoff = 1;
+      }
+      /* Check if the fast polynomial transform shall be used. */
+      fscanf(stdin,"fpt=%d\n",&use_fpt);
+      fprintf(stdout,"%d\n",use_fpt);
+      /* Read the NFSFT threshold parameter. */
+      fscanf(stdin,"threshold=%lf\n",&threshold);
+      fprintf(stdout,"%lf\n",threshold);
+    }
+    else
+    {
+      /* TODO remove this */
+      /* Set dummy values. */
+      cutoff = 3;
+      threshold = 1000000000000.0;
+    }
+
+    /* Initialize bandwidth bound. */
+    m_max = 0;
+    /* Initialize source nodes bound. */
+    l_max = 0;
+    /* Initialize target nodes bound. */
+    d_max = 0;
+    /* Initialize source nodes bound for precomputation. */
+    l_max_prec = 0;
+    /* Initialize source and target nodes bound for precomputation. */
+    ld_max_prec = 0;
+
+    /* Read the kernel type. This is one of KT_ABEL_POISSON, KT_SINGULARITY,
+     * KT_LOC_SUPP and KT_GAUSSIAN. */
+    fscanf(stdin,"kernel=%d\n",&kt);
+    fprintf(stdout,"%d\n",kt);
+
+    /* Read the number of parameter sets. */
+    fscanf(stdin,"parameter_sets=%d\n",&ip_max);
+    fprintf(stdout,"%d\n",ip_max);
+
+    /* Allocate memory for pointers to parameter sets. */
+    p = (double**) nfft_malloc(ip_max*sizeof(double*));
+
+    /* We now read in the parameter sets. */
+
+    /* Read number of parameters. */
+    fscanf(stdin,"parameters=%d\n",&ipp_max);
+    fprintf(stdout,"%d\n",ipp_max);
+
+    for (ip = 0; ip < ip_max; ip++)
+    {
+      /* Allocate memory for the parameters. */
+      p[ip] = (double*) nfft_malloc(ipp_max*sizeof(double));
+
+      /* Read the parameters. */
+      for (ipp = 0; ipp < ipp_max; ipp++)
+      {
+        /* Read the next parameter. */
+        fscanf(stdin,"%lf\n",&p[ip][ipp]);
+        fprintf(stdout,"%lf\n",p[ip][ipp]);
+      }
+    }
+
+    /* Read the number of cut-off degrees. */
+    fscanf(stdin,"bandwidths=%d\n",&im_max);
+    fprintf(stdout,"%d\n",im_max);
+    m = (int*) nfft_malloc(im_max*sizeof(int));
+
+    /* Read the cut-off degrees. */
+    for (im = 0; im < im_max; im++)
+    {
+      /* Read cut-off degree. */
+      fscanf(stdin,"%d\n",&m[im]);
+      fprintf(stdout,"%d\n",m[im]);
+      m_max = NFFT_MAX(m_max,m[im]);
+    }
+
+    /* Read number of node specifications. */
+    fscanf(stdin,"node_sets=%d\n",&ild_max);
+    fprintf(stdout,"%d\n",ild_max);
+    ld = (int**) nfft_malloc(ild_max*sizeof(int*));
+
+    /* Read the run specification. */
+    for (ild = 0; ild < ild_max; ild++)
+    {
+      /* Allocate memory for the run parameters. */
+      ld[ild] = (int*) nfft_malloc(5*sizeof(int));
+
+      /* Read number of source nodes. */
+      fscanf(stdin,"L=%d ",&ld[ild][0]);
+      fprintf(stdout,"%d\n",ld[ild][0]);
+      l_max = NFFT_MAX(l_max,ld[ild][0]);
+
+      /* Read number of target nodes. */
+      fscanf(stdin,"D=%d ",&ld[ild][1]);
+      fprintf(stdout,"%d\n",ld[ild][1]);
+      d_max = NFFT_MAX(d_max,ld[ild][1]);
+
+      /* Determine whether direct and fast algorithm shall be compared. */
+      fscanf(stdin,"compare=%d ",&ld[ild][2]);
+      fprintf(stdout,"%d\n",ld[ild][2]);
+
+      /* Check if precomputation for the direct algorithm is used. */
+      if (ld[ild][2] == YES)
+      {
+        /* Read whether the precomputed version shall also be used. */
+        fscanf(stdin,"precomputed=%d\n",&ld[ild][3]);
+        fprintf(stdout,"%d\n",ld[ild][3]);
+
+        /* Read the number of repetitions over which measurements are
+         * averaged. */
+        fscanf(stdin,"repetitions=%d\n",&ld[ild][4]);
+        fprintf(stdout,"%d\n",ld[ild][4]);
+
+        /* Update ld_max_prec and l_max_prec. */
+        if (ld[ild][3] == YES)
+        {
+          /* Update ld_max_prec. */
+          ld_max_prec = NFFT_MAX(ld_max_prec,ld[ild][0]*ld[ild][1]);
+          /* Update l_max_prec. */
+          l_max_prec = NFFT_MAX(l_max_prec,ld[ild][0]);
+          /* Turn on the precomputation for the direct algorithm. */
+          precompute = YES;
+        }
+      }
+      else
+      {
+        /* Set default value for the number of repetitions. */
+        ld[ild][4] = 1;
+      }
+    }
+
+    /* Allocate memory for data structures. */
+    b = (fftw_complex*) nfft_malloc(l_max*sizeof(fftw_complex));
+    eta = (double*) nfft_malloc(2*l_max*sizeof(double));
+    f_hat = (fftw_complex*) nfft_malloc(NFSFT_F_HAT_SIZE(m_max)*sizeof(fftw_complex));
+    a = (fftw_complex*) nfft_malloc((m_max+1)*sizeof(fftw_complex));
+    xi = (double*) nfft_malloc(2*d_max*sizeof(double));
+    f_m = (fftw_complex*) nfft_malloc(d_max*sizeof(fftw_complex));
+    f = (fftw_complex*) nfft_malloc(d_max*sizeof(fftw_complex));
+
+    /* Allocate memory for precomputed data. */
+    if (precompute == YES)
+    {
+      prec = (fftw_complex*) nfft_malloc(ld_max_prec*sizeof(fftw_complex));
+    }
+
+    /* Generate random source nodes and weights. */
+    for (l = 0; l < l_max; l++)
+    {
+      b[l] = (((double)rand())/RAND_MAX) - 0.5;
+      eta[2*l] = (((double)rand())/RAND_MAX) - 0.5;
+      eta[2*l+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(PI2);
+    }
+
+    /* Generate random target nodes. */
+    for (d = 0; d < d_max; d++)
+    {
+      xi[2*d] = (((double)rand())/RAND_MAX) - 0.5;
+      xi[2*d+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(PI2);
+    }
+
+    /* Do precomputation. */
+    nfsft_precompute(m_max,threshold,
+      ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U/*NFSFT_NO_DIRECT_ALGORITHM*/)), 0U);
+
+    /* Process all parameter sets. */
+    for (ip = 0; ip < ip_max; ip++)
+    {
+      /* Compute kernel coeffcients up to the maximum cut-off degree m_max. */
+      switch (kt)
+      {
+        case KT_ABEL_POISSON:
+          /* Compute Fourier-Legendre coefficients for the Poisson kernel. */
+          for (k = 0; k <= m_max; k++)
+            a[k] = SYMBOL_ABEL_POISSON(k,p[ip][0]);
+          break;
+
+        case KT_SINGULARITY:
+          /* Compute Fourier-Legendre coefficients for the singularity
+           * kernel. */
+          for (k = 0; k <= m_max; k++)
+            a[k] = SYMBOL_SINGULARITY(k,p[ip][0]);
+          break;
+
+        case KT_LOC_SUPP:
+          /* Compute Fourier-Legendre coefficients for the locally supported
+           * kernel. */
+          a[0] = 1.0;
+          if (1 <= m_max)
+            a[1] = ((p[ip][1]+1+p[ip][0])/(p[ip][1]+2.0))*a[0];
+          for (k = 2; k <= m_max; k++)
+            a[k] = (1.0/(k+p[ip][1]+1))*((2*k-1)*p[ip][0]*a[k-1] -
+              (k-p[ip][1]-2)*a[k-2]);
+          break;
+
+        case KT_GAUSSIAN:
+          /* Fourier-Legendre coefficients */
+          steed = (double*) nfft_malloc((m_max+1)*sizeof(double));
+          nfft_smbi(2.0*p[ip][0],0.5,m_max+1,2,steed);
+          for (k = 0; k <= m_max; k++)
+            a[k] = PI2*(sqrt(PI/p[ip][0]))*steed[k];
+
+          nfft_free(steed);
+          break;
+      }
+
+      /* Normalize Fourier-Legendre coefficients. */
+      for (k = 0; k <= m_max; k++)
+        a[k] *= (2*k+1)/(PI4);
+
+      /* Process all node sets. */
+      for (ild = 0; ild < ild_max; ild++)
+      {
+        /* Check if the fast algorithm shall be used. */
+        if (ld[ild][2] != NO)
+        {
+          /* Check if the direct algorithm with precomputation should be
+           * tested. */
+          if (ld[ild][3] != NO)
+          {
+            /* Get pointer to start of data. */
+            ptr = prec;
+            /* Calculate increment from one row to the next. */
+            rinc = l_max_prec-ld[ild][0];
+
+            /* Process al target nodes. */
+            for (d = 0; d < ld[ild][1]; d++)
+            {
+              /* Process all source nodes. */
+              for (l = 0; l < ld[ild][0]; l++)
+              {
+                /* Compute inner product between current source and target
+                 * node. */
+                temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+                /* Switch by the kernel type. */
+                switch (kt)
+                {
+                  case KT_ABEL_POISSON:
+                    /* Evaluate the Poisson kernel for the current value. */
+                    *ptr++ = poissonKernel(temp,p[ip][0]);
+                   break;
+
+                  case KT_SINGULARITY:
+                    /* Evaluate the singularity kernel for the current
+                     * value. */
+                    *ptr++ = singularityKernel(temp,p[ip][0]);
+                    break;
+
+                  case KT_LOC_SUPP:
+                     /* Evaluate the localized kernel for the current
+                      * value. */
+                    *ptr++ = locallySupportedKernel(temp,p[ip][0],p[ip][1]);
+                    break;
+
+                    case KT_GAUSSIAN:
+                       /* Evaluate the spherical Gaussian kernel for the current
+                        * value. */
+                      *ptr++ = gaussianKernel(temp,p[ip][0]);
+                       break;
+                }
+              }
+              /* Increment pointer for next row. */
+              ptr += rinc;
+            }
+
+            /* Initialize cumulative time variable. */
+            t_dp = 0.0;
+
+            /* Initialize time measurement. */
+            t0 = getticks();
+
+            /* Cycle through all runs. */
+            for (i = 0; i < ld[ild][4]; i++)
+            {
+
+              /* Reset pointer to start of precomputed data. */
+              ptr = prec;
+              /* Calculate increment from one row to the next. */
+              rinc = l_max_prec-ld[ild][0];
+
+              /* Check if the localized kernel is used. */
+              if (kt == KT_LOC_SUPP)
+              {
+                /* Perform final summation */
+
+                /* Calculate the multiplicative constant. */
+                constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));
+
+                /* Process all target nodes. */
+                for (d = 0; d < ld[ild][1]; d++)
+                {
+                  /* Initialize function value. */
+                  f[d] = 0.0;
+
+                  /* Process all source nodes. */
+                  for (l = 0; l < ld[ild][0]; l++)
+                    f[d] += b[l]*(*ptr++);
+
+                  /* Multiply with the constant. */
+                  f[d] *= constant;
+
+                  /* Proceed to next row. */
+                  ptr += rinc;
+                }
+              }
+              else
+              {
+                /* Process all target nodes. */
+                for (d = 0; d < ld[ild][1]; d++)
+                {
+                  /* Initialize function value. */
+                  f[d] = 0.0;
+
+                  /* Process all source nodes. */
+                  for (l = 0; l < ld[ild][0]; l++)
+                    f[d] += b[l]*(*ptr++);
+
+                  /* Proceed to next row. */
+                  ptr += rinc;
+                }
+              }
+            }
+
+            /* Calculate the time needed. */
+            t1 = getticks();
+            t_dp = nfft_elapsed_seconds(t1,t0);
+
+            /* Calculate average time needed. */
+            t_dp = t_dp/((double)ld[ild][4]);
+          }
+          else
+          {
+            /* Initialize cumulative time variable with dummy value. */
+            t_dp = -1.0;
+          }
+
+          /* Initialize cumulative time variable. */
+          t_d = 0.0;
+
+          /* Initialize time measurement. */
+          t0 = getticks();
+
+          /* Cycle through all runs. */
+          for (i = 0; i < ld[ild][4]; i++)
+          {
+            /* Switch by the kernel type. */
+            switch (kt)
+            {
+              case KT_ABEL_POISSON:
+
+                /* Process all target nodes. */
+                for (d = 0; d < ld[ild][1]; d++)
+                {
+                  /* Initialize function value. */
+                  f[d] = 0.0;
+
+                  /* Process all source nodes. */
+                  for (l = 0; l < ld[ild][0]; l++)
+                  {
+                    /* Compute the inner product for the current source and
+                     * target nodes. */
+                    temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+                    /* Evaluate the Poisson kernel for the current value and add
+                     * to the result. */
+                    f[d] += b[l]*poissonKernel(temp,p[ip][0]);
+                  }
+                }
+                break;
+
+              case KT_SINGULARITY:
+                /* Process all target nodes. */
+                for (d = 0; d < ld[ild][1]; d++)
+                {
+                  /* Initialize function value. */
+                  f[d] = 0.0;
+
+                  /* Process all source nodes. */
+                  for (l = 0; l < ld[ild][0]; l++)
+                  {
+                    /* Compute the inner product for the current source and
+                     * target nodes. */
+                    temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+                    /* Evaluate the Poisson kernel for the current value and add
+                     * to the result. */
+                    f[d] += b[l]*singularityKernel(temp,p[ip][0]);
+                  }
+                }
+                break;
+
+              case KT_LOC_SUPP:
+                /* Calculate the multiplicative constant. */
+                constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));
+
+                /* Process all target nodes. */
+                for (d = 0; d < ld[ild][1]; d++)
+                {
+                  /* Initialize function value. */
+                  f[d] = 0.0;
+
+                  /* Process all source nodes. */
+                  for (l = 0; l < ld[ild][0]; l++)
+                  {
+                    /* Compute the inner product for the current source and
+                     * target nodes. */
+                    temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+                    /* Evaluate the Poisson kernel for the current value and add
+                     * to the result. */
+                    f[d] += b[l]*locallySupportedKernel(temp,p[ip][0],p[ip][1]);
+                  }
+
+                  /* Multiply result with constant. */
+                  f[d] *= constant;
+                }
+                break;
+
+                case KT_GAUSSIAN:
+                  /* Process all target nodes. */
+                  for (d = 0; d < ld[ild][1]; d++)
+                  {
+                    /* Initialize function value. */
+                    f[d] = 0.0;
+
+                    /* Process all source nodes. */
+                    for (l = 0; l < ld[ild][0]; l++)
+                    {
+                      /* Compute the inner product for the current source and
+                       * target nodes. */
+                      temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+                      /* Evaluate the Poisson kernel for the current value and add
+                       * to the result. */
+                      f[d] += b[l]*gaussianKernel(temp,p[ip][0]);
+                    }
+                  }
+                  break;
+            }
+          }
+
+          /* Calculate and add the time needed. */
+          t1 = getticks();
+          t_d = nfft_elapsed_seconds(t1,t0);
+          /* Calculate average time needed. */
+          t_d = t_d/((double)ld[ild][4]);
+        }
+        else
+        {
+          /* Initialize cumulative time variable with dummy value. */
+          t_d = -1.0;
+          t_dp = -1.0;
+        }
+
+        /* Initialize error and cumulative time variables for the fast
+         * algorithm. */
+        err_fd = -1.0;
+        err_f = -1.0;
+        t_fd = -1.0;
+        t_f = -1.0;
+
+        /* Process all cut-off bandwidths. */
+        for (im = 0; im < im_max; im++)
+        {
+          /* Init transform plans. */
+          nfsft_init_guru(&plan_adjoint, m[im],ld[ild][0],
+            ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+            ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),
+            PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+            FFT_OUT_OF_PLACE, cutoff);
+          nfsft_init_guru(&plan,m[im],ld[ild][1],
+            ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+            ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),
+            PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+            FFT_OUT_OF_PLACE,
+             cutoff);
+          plan_adjoint.f_hat = f_hat;
+          plan_adjoint.x = eta;
+          plan_adjoint.f = b;
+          plan.f_hat = f_hat;
+          plan.x = xi;
+          plan.f = f_m;
+          nfsft_precompute_x(&plan_adjoint);
+          nfsft_precompute_x(&plan);
+
+          /* Check if direct algorithm shall also be tested. */
+          if (use_nfsft == BOTH)
+          {
+            /* Initialize cumulative time variable. */
+            t_fd = 0.0;
+
+            /* Initialize time measurement. */
+            t0 = getticks();
+
+            /* Cycle through all runs. */
+            for (i = 0; i < ld[ild][4]; i++)
+            {
+
+              /* Execute adjoint direct NDSFT transformation. */
+              nfsft_adjoint_direct(&plan_adjoint);
+
+              /* Multiplication with the Fourier-Legendre coefficients. */
+              for (k = 0; k <= m[im]; k++)
+                for (n = -k; n <= k; n++)
+                  f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];
+
+              /* Execute direct NDSFT transformation. */
+              nfsft_trafo_direct(&plan);
+
+            }
+
+            /* Calculate and add the time needed. */
+            t1 = getticks();
+            t_fd = nfft_elapsed_seconds(t1,t0);
+
+            /* Calculate average time needed. */
+            t_fd = t_fd/((double)ld[ild][4]);
+
+            /* Check if error E_infty should be computed. */
+            if (ld[ild][2] != NO)
+            {
+              /* Compute the error E_infinity. */
+              err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,
+                ld[ild][0]);
+            }
+          }
+
+          /* Check if the fast NFSFT algorithm shall also be tested. */
+          if (use_nfsft != NO)
+          {
+            /* Initialize cumulative time variable for the NFSFT algorithm. */
+            t_f = 0.0;
+          }
+          else
+          {
+            /* Initialize cumulative time variable for the direct NDSFT
+             * algorithm. */
+            t_fd = 0.0;
+          }
+
+          /* Initialize time measurement. */
+          t0 = getticks();
+
+          /* Cycle through all runs. */
+          for (i = 0; i < ld[ild][4]; i++)
+          {
+            /* Check if the fast NFSFT algorithm shall also be tested. */
+            if (use_nfsft != NO)
+            {
+              /* Execute the adjoint NFSFT transformation. */
+              nfsft_adjoint(&plan_adjoint);
+            }
+            else
+            {
+              /* Execute the adjoint direct NDSFT transformation. */
+              nfsft_adjoint_direct(&plan_adjoint);
+            }
+
+            /* Multiplication with the Fourier-Legendre coefficients. */
+            for (k = 0; k <= m[im]; k++)
+              for (n = -k; n <= k; n++)
+                f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];
+
+            /* Check if the fast NFSFT algorithm shall also be tested. */
+            if (use_nfsft != NO)
+            {
+              /* Execute the NFSFT transformation. */
+              nfsft_trafo(&plan);
+            }
+            else
+            {
+              /* Execute the NDSFT transformation. */
+              nfsft_trafo_direct(&plan);
+            }
+          }
+
+          /* Check if the fast NFSFT algorithm has been used. */
+          t1 = getticks();
+
+          if (use_nfsft != NO)
+            t_f = nfft_elapsed_seconds(t1,t0);
+          else
+            t_fd = nfft_elapsed_seconds(t1,t0);
+
+          /* Check if the fast NFSFT algorithm has been used. */
+          if (use_nfsft != NO)
+          {
+            /* Calculate average time needed. */
+            t_f = t_f/((double)ld[ild][4]);
+          }
+          else
+          {
+            /* Calculate average time needed. */
+            t_fd = t_fd/((double)ld[ild][4]);
+          }
+
+          /* Check if error E_infty should be computed. */
+          if (ld[ild][2] != NO)
+          {
+            /* Check if the fast NFSFT algorithm has been used. */
+            if (use_nfsft != NO)
+            {
+              /* Compute the error E_infinity. */
+              err_f = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,
+                ld[ild][0]);
+            }
+            else
+            {
+              /* Compute the error E_infinity. */
+              err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,
+                ld[ild][0]);
+            }
+          }
+
+          /* Print out the error measurements. */
+          fprintf(stdout,"%e\n%e\n%e\n%e\n%e\n%e\n\n",t_d,t_dp,t_fd,t_f,err_fd,
+            err_f);
+
+          /* Finalize the NFSFT plans */
+          nfsft_finalize(&plan_adjoint);
+          nfsft_finalize(&plan);
+        } /* for (im = 0; im < im_max; im++) - Process all cut-off
+           * bandwidths.*/
+      } /* for (ild = 0; ild < ild_max; ild++) - Process all node sets. */
+    } /* for (ip = 0; ip < ip_max; ip++) - Process all parameter sets. */
+
+    /* Delete precomputed data. */
+    nfsft_forget();
+
+    /* Check if memory for precomputed data of the matrix K has been
+     * allocated. */
+    if (precompute == YES)
+    {
+      /* Free memory for precomputed matrix K. */
+      nfft_free(prec);
+    }
+    /* Free data arrays. */
+    nfft_free(f);
+    nfft_free(f_m);
+    nfft_free(xi);
+    nfft_free(eta);
+    nfft_free(a);
+    nfft_free(f_hat);
+    nfft_free(b);
+
+    /* Free memory for node sets. */
+    for (ild = 0; ild < ild_max; ild++)
+      nfft_free(ld[ild]);
+    nfft_free(ld);
+
+    /* Free memory for cut-off bandwidths. */
+    nfft_free(m);
+
+    /* Free memory for parameter sets. */
+    for (ip = 0; ip < ip_max; ip++)
+      nfft_free(p[ip]);
+    nfft_free(p);
+  } /* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */
+
+  /* Return exit code for successful run. */
+  return EXIT_SUCCESS;
+}
+/* \} */
diff --git a/applications/fastsumS2/fastsumS2.m b/applications/fastsumS2/fastsumS2.m
new file mode 100644
index 0000000..0c435f3
--- /dev/null
+++ b/applications/fastsumS2/fastsumS2.m
@@ -0,0 +1,299 @@
+function fastsumS2()
+%FASTSUMS2
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fastsumS2.m 3784 2012-06-06 20:30:39Z keiner $
+
+% The input file's name for fastsumS2.c
+infilename = 'data.in';
+% The output file name.
+outfilename = 'data.out';
+% The name of the fastsumS2.c executable
+programname = 'fastsumS2';
+% The name of the file to write the time measurements table to.
+texfilename = 'table.tex';
+
+% Create the menu
+selection = menu(...
+  ['fastsumS2 - Fast summation of radial functions on the sphere'],...
+  'Generate Figure 5.1 (a)','Generate Figure 5.1 (b)',...
+  'Generate Figure 5.1 (c)','Generate Figure 5.1 (d)',...
+  'Generate Table 5.1')
+
+% Open the file for the input to fastsumS2.c
+file = fopen(infilename,'w');
+
+% Check if the error plots are to be generated
+if (selection > 0 && selection <= 4)
+
+  % Write the number of testcases to the file.
+  fprintf(file,'testcases=3\n');
+
+  % Set the single node set to be used. The values in the vector signify
+  % - 1000 Use 1000 source nodes,
+  % - 1000 use 1000 target nodes,
+  % - 1 Compare with direct evaluation of the sums (1 = Yes, 0 = No),
+  % - 0 Don't use precomputed values for direct evaluation (1 = Yes, 0 = No),
+  % - 1 Do the summation process 1 time.
+  nodes = [1000, 1000, 1, 0, 1];
+
+  % Switch by kernel type.
+  if (selection == 1)
+
+    % Generate figure 5.1 (a)
+
+    % Set the kernel to be the Abel-Poisson kernel.
+    kernel = 0;
+    % Set the parameter h.
+    parameters = [0.8];
+    % Set the cut-off bandwidth
+    m = 4:4:256;
+
+    % Generate the theoretical error bound function from [1].
+    bound = inline(sprintf(['((%d.^(x+1))./(4*pi)).*((2*x+1)./(1-%d)+(2)./',...
+        '((1-%d).^2))'],parameters(1),parameters(1),parameters(1)));
+
+  elseif (selection == 2)
+
+    % Generate figure 5.1 (b)
+
+    % Set the kernel to be the singularity kernel.
+    kernel=1;
+
+    % Set the parameter h.
+    parameters = [0.8];
+
+    % Set the cut-off bandwidth
+    m = 4:4:256;
+
+    % Generate the theoretical error bound function from [1].
+    bound = inline(sprintf(['((%d.^(x+1))./(4*pi)).*((2*x+1)./(2*(1-%d))+',...
+      '(4*x)./((1-%d).^2)+(4)./((1-%d).^3))'], parameters(1),...
+      parameters(1),parameters(1),parameters(1)));
+
+  elseif (selection == 3)
+
+    % Generate figure 5.1 (c)
+
+    % Set the kernel to be the locally supported kernel.
+    kernel=2;
+
+    % Set the parameter h and lambda.
+    parameters = [0.3 7];
+
+    % Set the cut-off bandwidth
+    m = 4:4:256;
+
+    % Generate the theoretical error bound function from [1].
+    bound = inline(sprintf(['(1/(pi*sqrt(2*pi))).*(((%d+1).^2)./(%d-0.5)).*',...
+      '(1./((1-%d).^(2*%d+1).*sqrt(sqrt(1-abs(%d))))).*(1./((x-%d).^',...
+      '(%d-0.5)))'], parameters(2), parameters(2), parameters(1),...
+      parameters(2), parameters(1), parameters(2), parameters(2)));
+
+  elseif (selection == 4)
+
+    % Generate figure 5.1 (c)
+
+    % Set the kernel to be the spherical gaussian kernel.
+    kernel=3;
+
+    % Set the parameter sigma.
+    parameters = [2.5];
+
+    % Set the cut-off bandwidth
+    m = 1:1:32;
+
+    % Generate the theoretical error bound function from [1].
+    bound = inline(sprintf('(sqrt(pi*%d).*(exp(%d)-1).*%d.^(x-0.5))./(gamma(x+0.5))',...
+      parameters(1),parameters(1),parameters(1)));
+
+  end
+
+  % Write three testcases for testing three different algorithms and parameters
+  % to the input file.
+
+  % NFSFT algorithm with direct NDFT and direct DPT
+  writeTestcase(file,1,0,0,1,1000,kernel,parameters,m,nodes);
+
+  % NFSFT algorithm with NFFT (cut-off parameter 3) and FPT algorithm
+  % (threshold 1000.0)
+  writeTestcase(file,1,1,3,1,1000,kernel,parameters,m,nodes);
+
+  % NFSFT algorithm with NFFT (cut-off parameter 6) and FPT algorithm
+  % (threshold 1000.0)
+  writeTestcase(file,1,1,6,1,1000,kernel,parameters,m,nodes);
+
+  % Close the input file.
+  fclose(file);
+
+  % Call fastsumS2.c with the generated input file writing the output to the
+  % output file.
+  system(sprintf('./%s < %s > %s',programname,infilename,outfilename));
+
+  % Open the output file.
+  file = fopen(outfilename,'r');
+
+  % Read the testcases into a cell array.
+  T = readTestcase(file);
+
+  % Close the output file.
+  fclose(file);
+
+  % Generate the values of the theoretical error bound function.
+  y4 = feval(bound,T{1}.bandwidths);
+
+  % Generate a new figure.
+  figure('Color',[1 1 1],'InvertHardcopy','off','PaperSize',[20.98 29.68]);
+
+  % Add the different error curves to the figure
+
+  % Get the cut-off degree values.
+  x = T{1}.bandwidths;
+
+  % First testcase
+  semilogy(x,T{1}.data{1}(:,6),'-','LineWidth',2,'Color',[0,0,0]);
+
+  % Prevent old curves from being deleted by adding the next curve
+  hold on
+
+  % Second testcase
+  semilogy(x,T{2}.data{1}(:,6),'-.','LineWidth',2,'Color',[0,0,0]);
+
+  % Third testcase
+  semilogy(x,T{3}.data{1}(:,6),'--','LineWidth',2,'Color',[0,0,0]);
+
+  % Theoretical error bound
+  semilogy(x,y4,':','LineWidth',2,'Color',[0,0,0]);
+
+  % Adjust the axis limits.
+  axis([x(1) x(end) 1e-17 1])
+
+  % Add axis labels.
+  xlabel('M');
+  ylabel('E_{\infty}','Rotation',0);
+
+elseif (selection == 5)
+
+  % Generate Table 5.1
+
+  % Write the number of testcases to the file.
+  fprintf(file,'testcases=1\n');
+
+  % Set node sets to be used. We use L = D source and target nodes as a power
+  % of two from 2^6 up to 2^21. Up to L = D = 2^18, we use the direct sum
+  % evaluation and compute the error E_infty. Up to L = D = 2^12 we also use
+  % precomputed kernel function values to compare the time needed. For small
+  % node numbers and computation times, we use repetitions to obtain time
+  % measurements averaged over multiple computations.
+  nodes = [...
+     2^6,  2^6, 1, 1, 60;...
+     2^7,  2^7, 1, 1, 50;...
+     2^8,  2^8, 1, 1, 35;...
+     2^9,  2^9, 1, 1, 20;...
+    2^10, 2^10, 1, 1, 10;...
+    2^11, 2^11, 1, 1, 10;...
+    2^12, 2^12, 1, 1, 10;...
+    2^13, 2^13, 1, 0, 1;...
+    2^14, 2^14, 1, 0, 1;...
+    2^15, 2^15, 1, 0, 1;...
+    2^16, 2^16, 1, 0, 1;...
+    2^17, 2^17, 1, 0, 1;...
+    2^18, 2^18, 1, 0, 1;...
+    2^19, 2^19, 0, 0, 1;...
+    2^20, 2^20, 0, 0, 1;...
+    2^21, 2^21, 0, 0, 1];
+
+  % Set the kernel to be the Abel-Poisson kernel.
+  kernel = 0;
+
+  % Set the parameter h.
+  parameters = [0.6];
+
+  %Set the cut-off degree.
+  m = 128;
+
+  % Write the testcase to the input file.
+  writeTestcase(file,2,1,6,1,1000,kernel,parameters,m,nodes);
+
+  % Close the input file.
+  fclose(file);
+
+  % Call fastsumS2.c with the generated input file writing the output to the
+  % output file.
+  system(sprintf('./%s < %s > %s',programname,infilename,outfilename));
+
+  % Open the output file.
+  file = fopen(outfilename,'r');
+
+  % Read the testcases into a cell array.
+  T = readTestcase(file);
+
+  % Close the output file.
+  fclose(file);
+
+  % Open the file to write the table in TeX format to.
+  file = fopen(texfilename,'w');
+
+  % Generate the table in TeX format and write it to the output file.
+  fprintf(file,'\\begin{table}[ht!]\n  \\begin{center}\n    ');
+  fprintf(file,'\\begin{tabular}{r|r|r|r|r|r}\n      ');
+  fprintf(file,'$L = D$ &      direct alg.   &     w/pre-comp.    &      ');
+  fprintf(file,'FS, NDSFT &      FS, NFSFT & error ');
+  fprintf(file,'$E_{\\infty}$\\\\\\hline\\\\[-2.0ex]\n');
+  for i = 1:size(T{1}.data,2)
+    fprintf(file,'      $2^{%d}$ & %s & %s & %s & %s & %s\\\\\n',...
+      round(log2(T{1}.nodes(i,1))),texFormat(T{1}.data{i}(1)),...
+      texFormat(T{1}.data{i}(2)),texFormat(T{1}.data{i}(3)),...
+      texFormat(T{1}.data{i}(4)),texFormat(T{1}.data{i}(6)));
+  end
+  fprintf(file,'    \\end{tabular}\n');
+  fprintf(file,'  \\end{center}\n');
+  fprintf(file,'\\end{table}\n');
+
+  % Close the output file.
+  fclose(file);
+else
+  % Error due to invalid selection.
+  error('Invalid selection!');
+end
+
+% End of the function
+return;
+
+
+function s = texFormat(d)
+% TEXFORMAT Output positive numbers in TeX verbatim font style
+%   TEXFORMAT(d) converts any number d > 0 to a string in TeX verbatim
+%   font style. The number is converted into scientfic format with one decimal
+%   digit precision. If d <= 0 a dash in Tex verbatim font style is returned in
+%   place of the number.
+
+% Check if number is greater zero.
+if d > 0
+
+  % Convert number to TeX verbatim font style and scientif format.
+  s = sprintf('\\verb#%.1E#',d);
+
+else
+
+  % Return a dash in TeX verbatim font style.
+  s = '\verb#-#';
+
+end
diff --git a/applications/fastsumS2/readTestcase.m b/applications/fastsumS2/readTestcase.m
new file mode 100644
index 0000000..56927aa
--- /dev/null
+++ b/applications/fastsumS2/readTestcase.m
@@ -0,0 +1,203 @@
+function T = readTestcase(file)
+% READTESTCASE Read fastsumS2.c testcase results from file
+%   READTESTCASE(FILE) reads fastsumS2.c testcase results from the file FILE.
+%   The testcase results are returned as a cell vector containing the data for
+%   each individual testcase as a structure with the following fields:
+%   - USENFSFT If true, the NFSFT algorithm has been used, otherwise the direct
+%     NDSFT algorithm
+%   - USENFFT If true, the NFFT algorithm has been used, otherwise the direct
+%     NDFT algorithm (undefined if USENFSFT is false),
+%   - CUTOFF The NFFT cut-off parameter (undefined if USENFFT is false)
+%   - USEFPT If true, the fast polynomial transform has been used, otherwise the
+%     direct polynomial transform algorithm (undefined if USENFSFT is false),
+%   - THRESHOLD The fast polynomial transform threshold parameter (undefined if
+%     USEFPT is false),
+%   - kernel The kernel function used (0 = Abel-Poisson kernel, 1 =
+%     singularity kernel, 2 = locally supported kernel, 3 = spherical Gaussian
+%     kernel),
+%   - parameters A m x n matrix containing the kernel function parameters,
+%     m is the number of parameter sets and n is the number of kernel function
+%     parameters (1 for Abel-Poisson, singularity and spherical Gaussian kernel,
+%     2 for the locally supported kernel)
+%   - bandwidths A vector containing the cut-off degrees for the approximation
+%   - nodes A m x 5 matrix containing the node sets used, where m is the number
+%     of different node sets. Each row contains a node set specification
+%     containing
+%     - in the first column the number of source nodes,
+%     - in the second colum the number of target nodes,
+%     - in the third column whether the direct sum evaluation has been performed
+%       to compute the error E_infty,
+%     - in the fourth column whether the precomputed direct sum evaluation has
+%       been used (undefined if direct sum evaluation has not been used),
+%     - in the fifth column the error E_infty (undefined if direct sum
+%       evaluation has not been used).
+%   - data A m x n cell array containing the result data where m is the number
+%     of parameter sets and n is the number of node sets. Cell (m,n) correspond
+%     to the given ordering of parameter sets and node sets and is
+%     a j x 6 matrix, where j is the number of cut-off degrees. Each row
+%     represents the result data for a single cut-off degree and contains
+%     - in the first column the time needed for direct sum evaluation,
+%     - in the second column the time needed for direct sum evaluation with
+%       precomputation,
+%     - in the third column the time needed by the fast summation algorithm
+%       using the direct NDSFT algorithm,
+%     - in the fourth column the time needed by the fast summation algorithm
+%       using the NFSFT algorithm,
+%     - in the fifth column the error E_infty for the fast summation algorithm
+%       using the direct NDSFT algorithm,
+%     - in the sixth column the error E_infty for the fast summation algorithm
+%       using the NFSFT algorithm.
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: readTestcase.m 3780 2012-06-04 21:50:09Z keiner $
+
+% Read the number of testcases.
+tc_max = fscanf(file,'%d',1);
+
+% Create empty cell array for the testcases.
+T = cell(tc_max,1);
+
+% Cycle through all testcases.
+for i = 1:tc_max
+
+  % Create structure.
+  t = struct('USENFSFT',[0],'USENFFT',[0],'CUTOFF',[0],'USEFPT',[0],...
+    'THRESHOLD',[0],'kernel',[0],'parameters',{0},'bandwidths',[0],...
+    'nodes',{0},'data',{0});
+
+  % Read NFSFT usage flag.
+  v = fscanf(file,'%d',1);
+  if (v >= 1)
+
+    % Set NFSFT usage flag in the structure.
+    t.USENFSFT = [true];
+
+    % Read NFFT usage flag.
+    v = fscanf(file,'%d',1);
+
+    if (v >= 1)
+
+      % Set NFSFT usage flag in the structure.
+      t.USENFFFT = [true];
+
+      % Read the NFFT cut-off parameter.
+      v = fscanf(file,'%d',1);
+      t.CUTOFF = [v];
+
+    else
+
+      % Set NFSFT usage flag in the structure.
+      t.USENFFFT = [false];
+
+    end
+
+    % Read FPT usage flag.
+    v = fscanf(file,'%d',1);
+
+    if (v >= 1)
+
+      % Set NFSFT usage flag in the structure.
+      t.USEFPT = [false];
+
+    else
+
+      % Set NFSFT usage flag in the structure.
+      t.USEFPT = [false];
+
+    end
+
+    % Read the FPT threshold.
+    v = fscanf(file,'%lf',1);
+    t.THRESHOLD = [v];
+
+  else
+
+    % Set NFSFT usage flag in the structure.
+    t.USENFSFT = [false];
+
+  end
+
+  % Read the kernel type.
+  v = fscanf(file,'%d',1);
+  t.kernel = [v];
+
+  % Read the number of parameter sets.
+  ip_max = fscanf(file,'%d',1);
+
+  % Read the number of parameters.
+  ipp_max = fscanf(file,'%d',1);
+
+  % Create empty array for parameters.
+  p = zeros(ipp_max,ip_max);
+
+  % Read parameters.
+  p = fscanf(file,'%lf',[ipp_max,ip_max]);
+
+  % Transpose matrix to get dimensions right.
+  t.parameters = p';
+
+  % Read number of cut-off degrees
+  bandwidths = fscanf(file,'%d',1);
+
+  % Read the cut-off degrees
+  m = fscanf(file,'%d',bandwidths);
+  t.bandwidths = m;
+
+  % Read number of node sets.
+  ild_max = fscanf(file,'%d',1);
+
+  % Read node sets.
+  nodes = zeros(ild_max,5);
+  for j=1:ild_max
+    % Read first three parameters.
+    nodes(j,1) = fscanf(file,'%d',1);
+    nodes(j,2) = fscanf(file,'%d',1);
+    nodes(j,3) = fscanf(file,'%d',1);
+    % Check for for parameters.
+    if (nodes(j,3) == 1)
+      % Read two more parameters.
+      nodes(j,4) = fscanf(file,'%d',1);
+      nodes(j,5) = fscanf(file,'%d',1);
+    end
+  end
+
+  % Assign node set matrix to data field in structure.
+  t.nodes = nodes;
+
+  % Create cell array for result data
+  datacell = {ip_max,ild_max};
+
+  % For each parameter set and node set combination read the result data for
+  % every cut-off degree into a matrix.
+  for j=1:ip_max
+    for k=1:ild_max
+      data = fscanf(file,'%e',[6,bandwidths]);
+      datacell{j,k} = data';
+    end
+  end
+
+  % Assign cell array to data field in structure.
+  t.data = datacell;
+
+  % Assign testcase structure to field in cell array.
+  T{i} = t;
+
+end
+
+% End of the function
+return;
diff --git a/applications/fastsumS2/writeTestcase.m b/applications/fastsumS2/writeTestcase.m
new file mode 100644
index 0000000..32ab884
--- /dev/null
+++ b/applications/fastsumS2/writeTestcase.m
@@ -0,0 +1,118 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,kernel,...
+  parameters,bandwidths,nodes)
+
+% WRITETESTCASE Write a fastsumS2 testcase definition to a file
+%    WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD, KERNEL,
+%    PARAMETERS, BANDWIDTHS, NODES) writes a fastsumS2 testcase specification to
+%    the file associated with the file handle FILE.
+%    The parameters are
+%    - FILE The file handle associated with the file to write to,
+%    - USENFSFT If true, the NFSFT algorithm is used, otherwise the direct NDSFT
+%      algorithm,
+%    - USENFFT If true, the NFFT algorithm is used, otherwise the direct NDSFT
+%      algorithm (ignored if USENFSFT is false),
+%    - CUTOFF The NFFT cut-off parameter (ignored if USENFFT is false)
+%    - USEFPT If true, the fast polynomial transform is used, otherwise the
+%      direct polynomial transform algorithm (ignored if USENFSFT is false),
+%    - THRESHOLD The fast polynomial transform threshold parameter (ignored if
+%      USEFPT is false),
+%    - KERNEL The kernel function to be used (0 = Abel-Poisson kernel, 1 =
+%      singularity kernel, 2 = locally supported kernel, 3 = spherical Gaussian
+%      kernel),
+%   - PARAMETERS A m x n matrix containing the kernel function parameters,
+%     m is the number of parameter sets and n is the number of kernel function
+%     parameters (1 for Abel-Poisson, singularity and spherical Gaussian kernel,
+%     2 for the locally supported kernel)
+%   - BANDWIDTH A vector containing the cut-off degrees for the approximation
+%   - NODES A m x 5 matrix containing the node sets used, where m is the number
+%     of different node sets. Each row contains a node set specification
+%     containing
+%     - in the first column the number of source nodes,
+%     - in the second colum the number of target nodes,
+%     - in the third column whether the direct sum evaluation has been performed
+%       to compute the error E_infty,
+%     - in the fourth column whether the precomputed direct sum evaluation has
+%       been used (undefined if direct sum evaluation has not been used),
+%     - in the fifth column the error E_infty (undefined if direct sum
+%       evaluation has not been used).
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeTestcase.m 3780 2012-06-04 21:50:09Z keiner $
+
+% Write NFSFT usage flag.
+fprintf(file,'nfsft=%d\n',usenfsft);
+
+if (usenfsft == true)
+
+  % Write NFFT usage flag.
+  fprintf(file,'nfft=%d\n',usenfft);
+
+  if (usenfft == true)
+
+    % Write NFFT cut-off parameter.
+    fprintf(file,'cutoff=%d\n',cutoff);
+
+  end
+
+  % Write FPT usage flag.
+  fprintf(file,'fpt=%d\n',usefpt);
+
+  % Write FPT threshold.
+  fprintf(file,'threshold=%e\n',threshold);
+
+end
+
+% Write kernel type
+fprintf(file,'kernel=%d\n',kernel);
+
+% Write number of parameter sets.
+fprintf(file,'parameter_sets=%d\n',size(parameters,1));
+
+% Write number of parameters.
+fprintf(file,'parameters=%d\n',size(parameters,2));
+
+% Write parameters sets.
+for j=1:size(parameters,1)
+  for k=1:size(parameters,2)
+    % Write parameter k of parameter sets j.
+    fprintf(file,'%f\n',parameters(j,k));
+  end
+end
+
+% Write number of bandwidths.
+fprintf(file,'bandwidths=%d\n',length(bandwidths));
+
+% Write bandwidths.
+fprintf(file,'%d\n',bandwidths);
+
+% Write number of node sets.
+fprintf(file,'node_sets=%d\n',size(nodes,1));
+
+% Write node sets.
+for j = 1:size(nodes,1)
+  fprintf(file,'L=%d\n',nodes(j,1));
+  fprintf(file,'D=%d\n',nodes(j,2));
+  fprintf(file,'compare=%d\n',nodes(j,3));
+  if (nodes(j,3) == 1)
+    fprintf(file,'precomputed=%d\n',nodes(j,4));
+    fprintf(file,'repetitions=%d\n',nodes(j,5));
+  end
+end
+
+% End of function
+return;
diff --git a/applications/iterS2/Makefile.am b/applications/iterS2/Makefile.am
new file mode 100644
index 0000000..43fabe4
--- /dev/null
+++ b/applications/iterS2/Makefile.am
@@ -0,0 +1,11 @@
+# $Id: Makefile.am 3792 2012-06-12 06:45:24Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/kernel/nfsft
+
+noinst_PROGRAMS = iterS2
+
+iterS2_SOURCES = iterS2.c doxygen.h
+iterS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = writeTestcase.m writeImageTestcase.m README
+#iterS2.m readTestcase.m
diff --git a/applications/iterS2/Makefile.in b/applications/iterS2/Makefile.in
new file mode 100644
index 0000000..4989571
--- /dev/null
+++ b/applications/iterS2/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3792 2012-06-12 06:45:24Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = iterS2$(EXEEXT)
+subdir = applications/iterS2
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_iterS2_OBJECTS = iterS2.$(OBJEXT)
+iterS2_OBJECTS = $(am_iterS2_OBJECTS)
+iterS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(iterS2_SOURCES)
+DIST_SOURCES = $(iterS2_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/kernel/nfsft
+iterS2_SOURCES = iterS2.c doxygen.h
+iterS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = writeTestcase.m writeImageTestcase.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/iterS2/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/iterS2/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+iterS2$(EXEEXT): $(iterS2_OBJECTS) $(iterS2_DEPENDENCIES) $(EXTRA_iterS2_DEPENDENCIES) 
+	@rm -f iterS2$(EXEEXT)
+	$(LINK) $(iterS2_OBJECTS) $(iterS2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/iterS2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+#iterS2.m readTestcase.m
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/iterS2/README b/applications/iterS2/README
new file mode 100644
index 0000000..f27b9bd
--- /dev/null
+++ b/applications/iterS2/README
@@ -0,0 +1,50 @@
+iterS2 - Iterative reconstruction on the sphere S2.
+
+!!! THIS EXAMPLE IS CURRENTLY NOT FUNCTIONAL !!!
+
+  Introduction
+  ------------
+
+  Directory contents
+  ------------------
+  iterS2.c             Example C program
+  example.in           Example input for iterS2.c
+  example.out          Example output of iterS2.c on input example.in
+  README               This file
+  Makefile.am          Automake template
+  iterS2.m             MATLAB example file that preproduces figures from [1] using
+                       iterS2.c
+  readTestcase.m       MATLAB function that reads output of iterS2.c
+  writeTestcase.m      MATLAB function that writes input for iterS2.c
+  writeImageTestcase.m MATLAB function that writes input for iterS2.c
+
+  iterS2.c
+  -----------
+
+  iterS2.m
+  -----------
+
+  readTestcase.m
+  --------------
+  This MATLAB function is used by iterS2.m and allows for reading testcase
+  specifications and results from a file. In MATLAB, type "help readTestcase"
+  for more information.
+
+  writeTestcase.m
+  ---------------
+  This MATLAB function is used by iterS2.m and allows for writing testcase
+  specifications to a file. In MATLAB, type "help readTestcase" for more
+  information.
+
+  References
+  ----------
+
+  Feedback
+  --------
+  If you have comments, questions, or suggestions regarding NFFT, don't
+  hesitate to contact us. For more information, news and updates see the NFFT
+  website at
+
+                 http://www.tu-chemnitz.de/~potts/nfft/
+
+
diff --git a/applications/iterS2/doxygen.h b/applications/iterS2/doxygen.h
new file mode 100644
index 0000000..3bee191
--- /dev/null
+++ b/applications/iterS2/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_iterS2 Iterative reconstruction on the sphere S2
+ * \ingroup applications
+ */
diff --git a/applications/iterS2/iterS2.c b/applications/iterS2/iterS2.c
new file mode 100644
index 0000000..bce0afb
--- /dev/null
+++ b/applications/iterS2/iterS2.c
@@ -0,0 +1,440 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: iterS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* iterS2 - Iterative reconstruction on the sphere S2 */
+
+/**
+ * \defgroup applications_iterS2_matlab iterS2_matlab
+ * \ingroup applications_iterS2
+ * \{
+ */
+#include "config.h"
+
+/* Include standard C headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* Include NFFT 3 utilities headers. */
+#include "nfft3util.h"
+/* Include NFFT3 library header. */
+#include "nfft3.h"
+
+#include "legendre.h"
+
+/** Enumeration for parameter values */
+enum boolean {NO = 0, YES = 1};
+
+/**
+ * The main program.
+ *
+ * \param argc The number of arguments
+ * \param argv An array containing the arguments as C-strings
+ *
+ * \return Exit code
+ *
+ * \author Jens Keiner
+ */
+int main (int argc, char **argv)
+{
+  int T;
+  int N;
+  int M;
+  int M2;
+
+  int t;                       /* Index variable for testcases                */
+  nfsft_plan plan;             /* NFSFT plan                                  */
+  nfsft_plan plan2;            /* NFSFT plan                                  */
+  solver_plan_complex iplan;           /* NFSFT plan                                  */
+  int j;                       /*                                             */
+  int k;                       /*                                             */
+  int m;                       /*                                             */
+  int use_nfsft;               /*                                             */
+  int use_nfft;                /*                                             */
+  int use_fpt;                 /*                                             */
+  int cutoff;                  /**< The current NFFT cut-off parameter        */
+  double threshold;            /**< The current NFSFT threshold parameter     */
+  double re;
+  double im;
+  double a;
+  double *scratch;
+  double xs;
+  double *ys;
+  double *temp;
+  double _Complex *temp2;
+  int qlength;
+  double *qweights;
+  fftw_plan fplan;
+  fpt_set set;
+  int npt;
+  int npt_exp;
+  double *alpha, *beta, *gamma;
+
+  /* Read the number of testcases. */
+  fscanf(stdin,"testcases=%d\n",&T);
+  fprintf(stderr,"%d\n",T);
+
+  /* Process each testcase. */
+  for (t = 0; t < T; t++)
+  {
+    /* Check if the fast transform shall be used. */
+    fscanf(stdin,"nfsft=%d\n",&use_nfsft);
+    fprintf(stderr,"%d\n",use_nfsft);
+    if (use_nfsft != NO)
+    {
+      /* Check if the NFFT shall be used. */
+      fscanf(stdin,"nfft=%d\n",&use_nfft);
+      fprintf(stderr,"%d\n",use_nfsft);
+      if (use_nfft != NO)
+      {
+        /* Read the cut-off parameter. */
+        fscanf(stdin,"cutoff=%d\n",&cutoff);
+        fprintf(stderr,"%d\n",cutoff);
+      }
+      else
+      {
+        /* TODO remove this */
+        /* Initialize unused variable with dummy value. */
+        cutoff = 1;
+      }
+      /* Check if the fast polynomial transform shall be used. */
+      fscanf(stdin,"fpt=%d\n",&use_fpt);
+      fprintf(stderr,"%d\n",use_fpt);
+      if (use_fpt != NO)
+      {
+        /* Read the NFSFT threshold parameter. */
+        fscanf(stdin,"threshold=%lf\n",&threshold);
+        fprintf(stderr,"%lf\n",threshold);
+      }
+      else
+      {
+        /* TODO remove this */
+        /* Initialize unused variable with dummy value. */
+        threshold = 1000.0;
+      }
+    }
+    else
+    {
+      /* TODO remove this */
+      /* Set dummy values. */
+      use_nfft = NO;
+      use_fpt = NO;
+      cutoff = 3;
+      threshold = 1000.0;
+    }
+
+    /* Read the bandwidth. */
+    fscanf(stdin,"bandwidth=%d\n",&N);
+    fprintf(stderr,"%d\n",N);
+
+    /* Do precomputation. */
+    nfsft_precompute(N,threshold,
+      ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U/*NFSFT_NO_DIRECT_ALGORITHM*/)), 0U);
+
+    /* Read the number of nodes. */
+    fscanf(stdin,"nodes=%d\n",&M);
+    fprintf(stderr,"%d\n",M);
+
+    /* */
+    if ((N+1)*(N+1) > M)
+    {
+      X(next_power_of_2_exp)(N, &npt, &npt_exp);
+      fprintf(stderr, "npt = %d, npt_exp = %d\n", npt, npt_exp);
+      fprintf(stderr,"Optimal interpolation!\n");
+      scratch = (double*) nfft_malloc(4*sizeof(double));
+      ys = (double*) nfft_malloc((N+1)*sizeof(double));
+      temp = (double*) nfft_malloc((2*N+1)*sizeof(double));
+      temp2 = (double _Complex*) nfft_malloc((N+1)*sizeof(double _Complex));
+
+      a = 0.0;
+      for (j = 0; j <= N; j++)
+      {
+        xs = 2.0 + (2.0*j)/(N+1);
+        ys[j] = (2.0-((j == 0)?(1.0):(0.0)))*4.0*nfft_bspline(4,xs,scratch);
+        //fprintf(stdout,"%3d: g(%le) = %le\n",j,xs,ys[j]);
+        a += ys[j];
+      }
+      //fprintf(stdout,"a = %le\n",a);
+      for (j = 0; j <= N; j++)
+      {
+        ys[j] *= 1.0/a;
+      }
+
+      qlength = 2*N+1;
+      qweights = (double*) nfft_malloc(qlength*sizeof(double));
+
+      fplan = fftw_plan_r2r_1d(N+1, qweights, qweights, FFTW_REDFT00, 0U);
+      for (j = 0; j < N+1; j++)
+      {
+        qweights[j] = -2.0/(4*j*j-1);
+      }
+      fftw_execute(fplan);
+      qweights[0] *= 0.5;
+
+      for (j = 0; j < N+1; j++)
+      {
+        qweights[j] *= 1.0/(2.0*N+1.0);
+        qweights[2*N+1-1-j] = qweights[j];
+      }
+
+      fplan = fftw_plan_r2r_1d(2*N+1, temp, temp, FFTW_REDFT00, 0U);
+      for (j = 0; j <= N; j++)
+      {
+        temp[j] = ((j==0 || j == 2*N)?(1.0):(0.5))*ys[j];
+      }
+      for (j = N+1; j < 2*N+1; j++)
+      {
+        temp[j] = 0.0;
+      }
+      fftw_execute(fplan);
+
+      for (j = 0; j < 2*N+1; j++)
+      {
+        temp[j] *= qweights[j];
+      }
+
+      fftw_execute(fplan);
+
+      for (j = 0; j < 2*N+1; j++)
+      {
+        temp[j] *= ((j==0 || j == 2*N)?(1.0):(0.5));
+        if (j <= N)
+        {
+          temp2[j] = temp[j];
+        }
+      }
+
+      set = fpt_init(1, npt_exp, 0U);
+
+      alpha = (double*) nfft_malloc((N+2)*sizeof(double));
+      beta = (double*) nfft_malloc((N+2)*sizeof(double));
+      gamma = (double*) nfft_malloc((N+2)*sizeof(double));
+
+      alpha_al_row(alpha, N, 0);
+      beta_al_row(beta, N, 0);
+      gamma_al_row(gamma, N, 0);
+
+      fpt_precompute(set, 0, alpha, beta, gamma, 0, 1000.0);
+
+      fpt_transposed(set,0, temp2, temp2, N, 0U);
+
+      fpt_finalize(set);
+
+      nfft_free(alpha);
+      nfft_free(beta);
+      nfft_free(gamma);
+
+      fftw_destroy_plan(fplan);
+
+      nfft_free(scratch);
+      nfft_free(qweights);
+      nfft_free(ys);
+      nfft_free(temp);
+    }
+
+    /* Init transform plans. */
+    nfsft_init_guru(&plan, N, M,
+      ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+      ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |
+      NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,
+      PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+      FFT_OUT_OF_PLACE,
+      cutoff);
+
+    if ((N+1)*(N+1) > M)
+    {
+      solver_init_advanced_complex(&iplan, (nfft_mv_plan_complex*)(&plan), CGNE | PRECOMPUTE_DAMP);
+    }
+    else
+    {
+      solver_init_advanced_complex(&iplan, (nfft_mv_plan_complex*)(&plan), CGNR | PRECOMPUTE_WEIGHT | PRECOMPUTE_DAMP);
+    }
+
+    /* Read the nodes and function values. */
+    for (j = 0; j < M; j++)
+    {
+      fscanf(stdin,"%le %le %le %le\n",&plan.x[2*j+1],&plan.x[2*j],&re,&im);
+      plan.x[2*j+1] = plan.x[2*j+1]/(2.0*PI);
+      plan.x[2*j] = plan.x[2*j]/(2.0*PI);
+      if (plan.x[2*j] >= 0.5)
+      {
+        plan.x[2*j] = plan.x[2*j] - 1;
+      }
+      iplan.y[j] = re + _Complex_I * im;
+      fprintf(stderr,"%le %le %le %le\n",plan.x[2*j+1],plan.x[2*j],
+        creal(iplan.y[j]),cimag(iplan.y[j]));
+    }
+
+    /* Read the number of nodes. */
+    fscanf(stdin,"nodes_eval=%d\n",&M2);
+    fprintf(stderr,"%d\n",M2);
+
+    /* Init transform plans. */
+    nfsft_init_guru(&plan2, N, M2,
+      ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+      ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |
+      NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,
+      PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+      FFT_OUT_OF_PLACE,
+      cutoff);
+
+    /* Read the nodes and function values. */
+    for (j = 0; j < M2; j++)
+    {
+      fscanf(stdin,"%le %le\n",&plan2.x[2*j+1],&plan2.x[2*j]);
+      plan2.x[2*j+1] = plan2.x[2*j+1]/(2.0*PI);
+      plan2.x[2*j] = plan2.x[2*j]/(2.0*PI);
+      if (plan2.x[2*j] >= 0.5)
+      {
+        plan2.x[2*j] = plan2.x[2*j] - 1;
+      }
+      fprintf(stderr,"%le %le\n",plan2.x[2*j+1],plan2.x[2*j]);
+    }
+
+    nfsft_precompute_x(&plan);
+
+    nfsft_precompute_x(&plan2);
+
+    /* Frequency weights. */
+    if ((N+1)*(N+1) > M)
+    {
+      /* Compute Voronoi weights. */
+      //nfft_voronoi_weights_S2(iplan.w, plan.x, M);
+
+      /* Print out Voronoi weights. */
+      /*a = 0.0;
+      for (j = 0; j < plan.M_total; j++)
+      {
+        fprintf(stderr,"%le\n",iplan.w[j]);
+        a += iplan.w[j];
+      }
+      fprintf(stderr,"sum = %le\n",a);*/
+
+      for (j = 0; j < plan.N_total; j++)
+      {
+        iplan.w_hat[j] = 0.0;
+      }
+
+      for (k = 0; k <= N; k++)
+      {
+        for (j = -k; j <= k; j++)
+        {
+          iplan.w_hat[NFSFT_INDEX(k,j,&plan)] = 1.0/(pow(k+1.0,2.0)); /*temp2[j]*/;
+        }
+      }
+    }
+    else
+    {
+      for (j = 0; j < plan.N_total; j++)
+      {
+        iplan.w_hat[j] = 0.0;
+      }
+
+      for (k = 0; k <= N; k++)
+      {
+        for (j = -k; j <= k; j++)
+        {
+          iplan.w_hat[NFSFT_INDEX(k,j,&plan)] = 1/(pow(k+1.0,2.5));
+        }
+      }
+
+      /* Compute Voronoi weights. */
+      nfft_voronoi_weights_S2(iplan.w, plan.x, M);
+
+      /* Print out Voronoi weights. */
+      a = 0.0;
+      for (j = 0; j < plan.M_total; j++)
+      {
+        fprintf(stderr,"%le\n",iplan.w[j]);
+        a += iplan.w[j];
+      }
+      fprintf(stderr,"sum = %le\n",a);
+    }
+
+    fprintf(stderr, "N_total = %d\n", plan.N_total);
+    fprintf(stderr, "M_total = %d\n", plan.M_total);
+
+    /* init some guess */
+    for (k = 0; k < plan.N_total; k++)
+    {
+      iplan.f_hat_iter[k] = 0.0;
+    }
+
+    /* inverse trafo */
+    solver_before_loop_complex(&iplan);
+
+    /*for (k = 0; k < plan.M_total; k++)
+    {
+      printf("%le %le\n",creal(iplan.r_iter[k]),cimag(iplan.r_iter[k]));
+    }*/
+
+    for (m = 0; m < 29; m++)
+    {
+      fprintf(stderr,"Residual ||r||=%e,\n",sqrt(iplan.dot_r_iter));
+      solver_loop_one_step_complex(&iplan);
+    }
+
+    /*NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);
+    nfsft_trafo(&plan);
+    NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);
+
+    a = 0.0;
+    b = 0.0;
+    for (k = 0; k < plan.M_total; k++)
+    {
+      printf("%le %le %le\n",cabs(iplan.y[k]),cabs(plan.f[k]),
+        cabs(iplan.y[k]-plan.f[k]));
+      a += cabs(iplan.y[k]-plan.f[k])*cabs(iplan.y[k]-plan.f[k]);
+      b += cabs(iplan.y[k])*cabs(iplan.y[k]);
+    }
+
+    fprintf(stderr,"relative error in 2-norm: %le\n",a/b);*/
+
+    NFFT_SWAP_complex(iplan.f_hat_iter, plan2.f_hat);
+    nfsft_trafo(&plan2);
+    NFFT_SWAP_complex(iplan.f_hat_iter, plan2.f_hat);
+    for (k = 0; k < plan2.M_total; k++)
+    {
+      fprintf(stdout,"%le\n",cabs(plan2.f[k]));
+    }
+
+    solver_finalize_complex(&iplan);
+
+    nfsft_finalize(&plan);
+
+    nfsft_finalize(&plan2);
+
+    /* Delete precomputed data. */
+    nfsft_forget();
+
+    if ((N+1)*(N+1) > M)
+    {
+      nfft_free(temp2);
+    }
+
+  } /* Process each testcase. */
+
+  /* Return exit code for successful run. */
+  return EXIT_SUCCESS;
+}
+/* \} */
diff --git a/applications/iterS2/writeImageTestcase.m b/applications/iterS2/writeImageTestcase.m
new file mode 100644
index 0000000..e7d2dc5
--- /dev/null
+++ b/applications/iterS2/writeImageTestcase.m
@@ -0,0 +1,111 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
+  bandwidth,img,itheta,iphi)
+%WRITEIMAGETESTCASE
+%    WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD,
+%    BANDWIDTH, THETA, PHI, F)
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeImageTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+
+% Write NFSFT usage flag.
+fprintf(file,'nfsft=%d\n',usenfsft);
+
+if (usenfsft == true)
+
+  % Write NFFT usage flag.
+  fprintf(file,'nfft=%d\n',usenfft);
+
+  if (usenfft == true)
+
+    % Write NFFT cut-off parameter.
+    fprintf(file,'cutoff=%d\n',cutoff);
+
+  end
+
+  % Write FPT usage flag.
+  fprintf(file,'fpt=%d\n',usefpt);
+
+  if (usefpt == true)
+
+    % Write FPT threshold.
+    fprintf(file,'threshold=%e\n',threshold);
+
+  end
+
+end
+
+% Write bandwidth
+fprintf(file,'bandwidth=%d\n',bandwidth);
+
+% Generate Image
+[m,n] = size(img)
+dtheta = pi/m;
+dphi = 2*pi/n;
+
+if (exist('itheta','var') == false)
+  ts = 1;
+  te = m;
+else
+  ts = itheta(1)
+  te = itheta(2)
+end
+
+if (exist('iphi','var') == false)
+  ps = 1;
+  pe = n;
+else
+  ps = iphi(1)
+  pe = iphi(2)
+end
+
+im = img(ts:te,ps:pe);
+
+r = length(find(im == 0))
+
+theta = ((ts-0.5):(te-0.5))*dtheta;
+phi = ((ps-1):(pe-1))*dphi;
+
+% Write number of nodes.
+fprintf(file,'nodes=%d\n',((te-ts+1)*(pe-ps+1))-r);
+
+% Write nodes and function values.
+for j=1:length(theta)
+  for k=1:length(phi)
+    % Write node (j,k) and corresponding function value.
+    if (abs(im(j,k)) ~= 0)
+      fprintf(file,'%f %f %f %f\n',theta(j),phi(k),real(im(j,k)),imag(im(j,k)));
+    end
+  end
+end
+
+theta = ((ts-0.5):0.25:(te-0.5))*dtheta;
+phi = ((ps-1):0.25:(pe-1))*dphi;
+
+% Write number of nodes.
+fprintf(file,'nodes_eval=%d\n',length(theta)*length(phi));
+% Write nodes and function values.
+for j=1:length(theta)
+  for k=1:length(phi)
+    fprintf(file,'%f %f\n',theta(j),phi(k));
+  end
+end
+
+% End of function
+return;
diff --git a/applications/iterS2/writeTestcase.m b/applications/iterS2/writeTestcase.m
new file mode 100644
index 0000000..420612d
--- /dev/null
+++ b/applications/iterS2/writeTestcase.m
@@ -0,0 +1,77 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
+  bandwidth,theta,phi,f)
+%WRITETESTCASE - Write an iterS2 testcase definition to a file
+%   WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD,
+%   BANDWIDTH, THETA, PHI, F)
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+
+% Write NFSFT usage flag.
+fprintf(file,'nfsft=%d\n',usenfsft);
+
+if (usenfsft == true)
+
+  % Write NFFT usage flag.
+  fprintf(file,'nfft=%d\n',usenfft);
+
+  if (usenfft == true)
+
+    % Write NFFT cut-off parameter.
+    fprintf(file,'cutoff=%d\n',cutoff);
+
+  end
+
+  % Write FPT usage flag.
+  fprintf(file,'fpt=%d\n',usefpt);
+
+  if (usefpt == true)
+
+    % Write FPT threshold.
+    fprintf(file,'threshold=%e\n',threshold);
+
+  end
+
+end
+
+% Write bandwidth
+fprintf(file,'bandwidth=%d\n',bandwidth);
+
+% Write number of nodes.
+fprintf(file,'nodes=%d\n',length(theta));
+
+
+% Write nodes and function values.
+for j=1:length(theta)
+  % Write node j and corresponding function value.
+  fprintf(file,'%f %f %f %f\n',theta(j),phi(j),real(f(j)),imag(f(j)));
+end
+
+% Write number of nodes.
+fprintf(file,'nodes_eval=%d\n',m*n);
+% Write nodes and function values.
+for j=1:length(theta)
+  for k=1:length(phi)
+    fprintf(file,'%f %f\n',theta(j),phi(k));
+  end
+end
+
+% End of function
+return;
diff --git a/applications/mri/Makefile.am b/applications/mri/Makefile.am
new file mode 100644
index 0000000..b1d42c3
--- /dev/null
+++ b/applications/mri/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = mri2d mri3d 
+EXTRA_DIST = doxygen.c
\ No newline at end of file
diff --git a/applications/mri/Makefile.in b/applications/mri/Makefile.in
new file mode 100644
index 0000000..2416637
--- /dev/null
+++ b/applications/mri/Makefile.in
@@ -0,0 +1,638 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applications/mri
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = mri2d mri3d 
+EXTRA_DIST = doxygen.c
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/mri/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist cscopelist-recursive ctags ctags-recursive \
+	distclean distclean-generic distclean-libtool distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/mri/doxygen.c b/applications/mri/doxygen.c
new file mode 100644
index 0000000..4e41802
--- /dev/null
+++ b/applications/mri/doxygen.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \defgroup applications_mri Transforms in magnetic resonance imaging
+ * \ingroup applications
+ */
diff --git a/applications/mri/mri2d/Makefile.am b/applications/mri/mri2d/Makefile.am
new file mode 100644
index 0000000..ab2efb3
--- /dev/null
+++ b/applications/mri/mri2d/Makefile.am
@@ -0,0 +1,51 @@
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = \
+  construct_data_2d \
+  construct_data_inh_2d1d \
+  construct_data_inh_3d \
+  reconstruct_data_gridding \
+  reconstruct_data_2d \
+  reconstruct_data_inh_3d \
+  reconstruct_data_inh_2d1d \
+  reconstruct_data_inh_nnfft
+
+construct_data_2d_SOURCES = construct_data_2d.c doxygen.h
+construct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+
+construct_data_inh_2d1d_SOURCES = construct_data_inh_2d1d.c
+construct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+
+construct_data_inh_3d_SOURCES = construct_data_inh_3d.c
+construct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_2d_SOURCES = reconstruct_data_2d.c
+reconstruct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_inh_3d_SOURCES = reconstruct_data_inh_3d.c
+reconstruct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_inh_2d1d_SOURCES = reconstruct_data_inh_2d1d.c
+reconstruct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_inh_nnfft_SOURCES = reconstruct_data_inh_nnfft.c
+reconstruct_data_inh_nnfft_LDADD = $(top_builddir)/libnfft3.la
+
+EXTRA_DIST = 	construct_inh.m \
+		construct_readout_time.m \
+		precompute_weights.m \
+		construct_knots_linogram.m \
+		mri_inh.m \
+		rms.m \
+		construct_knots_radial.m \
+		mri.m \
+		construct_knots_rose.m \
+		visualize_data.m \
+		construct_knots_spiral.m \
+		phantom.m \
+		README
diff --git a/applications/mri/mri2d/Makefile.in b/applications/mri/mri2d/Makefile.in
new file mode 100644
index 0000000..a533449
--- /dev/null
+++ b/applications/mri/mri2d/Makefile.in
@@ -0,0 +1,661 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = construct_data_2d$(EXEEXT) \
+	construct_data_inh_2d1d$(EXEEXT) \
+	construct_data_inh_3d$(EXEEXT) \
+	reconstruct_data_gridding$(EXEEXT) \
+	reconstruct_data_2d$(EXEEXT) reconstruct_data_inh_3d$(EXEEXT) \
+	reconstruct_data_inh_2d1d$(EXEEXT) \
+	reconstruct_data_inh_nnfft$(EXEEXT)
+subdir = applications/mri/mri2d
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_construct_data_2d_OBJECTS = construct_data_2d.$(OBJEXT)
+construct_data_2d_OBJECTS = $(am_construct_data_2d_OBJECTS)
+construct_data_2d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_construct_data_inh_2d1d_OBJECTS =  \
+	construct_data_inh_2d1d.$(OBJEXT)
+construct_data_inh_2d1d_OBJECTS =  \
+	$(am_construct_data_inh_2d1d_OBJECTS)
+construct_data_inh_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_construct_data_inh_3d_OBJECTS = construct_data_inh_3d.$(OBJEXT)
+construct_data_inh_3d_OBJECTS = $(am_construct_data_inh_3d_OBJECTS)
+construct_data_inh_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_2d_OBJECTS = reconstruct_data_2d.$(OBJEXT)
+reconstruct_data_2d_OBJECTS = $(am_reconstruct_data_2d_OBJECTS)
+reconstruct_data_2d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_gridding_OBJECTS =  \
+	reconstruct_data_gridding.$(OBJEXT)
+reconstruct_data_gridding_OBJECTS =  \
+	$(am_reconstruct_data_gridding_OBJECTS)
+reconstruct_data_gridding_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_inh_2d1d_OBJECTS =  \
+	reconstruct_data_inh_2d1d.$(OBJEXT)
+reconstruct_data_inh_2d1d_OBJECTS =  \
+	$(am_reconstruct_data_inh_2d1d_OBJECTS)
+reconstruct_data_inh_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_inh_3d_OBJECTS =  \
+	reconstruct_data_inh_3d.$(OBJEXT)
+reconstruct_data_inh_3d_OBJECTS =  \
+	$(am_reconstruct_data_inh_3d_OBJECTS)
+reconstruct_data_inh_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_inh_nnfft_OBJECTS =  \
+	reconstruct_data_inh_nnfft.$(OBJEXT)
+reconstruct_data_inh_nnfft_OBJECTS =  \
+	$(am_reconstruct_data_inh_nnfft_OBJECTS)
+reconstruct_data_inh_nnfft_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(construct_data_2d_SOURCES) \
+	$(construct_data_inh_2d1d_SOURCES) \
+	$(construct_data_inh_3d_SOURCES) \
+	$(reconstruct_data_2d_SOURCES) \
+	$(reconstruct_data_gridding_SOURCES) \
+	$(reconstruct_data_inh_2d1d_SOURCES) \
+	$(reconstruct_data_inh_3d_SOURCES) \
+	$(reconstruct_data_inh_nnfft_SOURCES)
+DIST_SOURCES = $(construct_data_2d_SOURCES) \
+	$(construct_data_inh_2d1d_SOURCES) \
+	$(construct_data_inh_3d_SOURCES) \
+	$(reconstruct_data_2d_SOURCES) \
+	$(reconstruct_data_gridding_SOURCES) \
+	$(reconstruct_data_inh_2d1d_SOURCES) \
+	$(reconstruct_data_inh_3d_SOURCES) \
+	$(reconstruct_data_inh_nnfft_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+construct_data_2d_SOURCES = construct_data_2d.c doxygen.h
+construct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+construct_data_inh_2d1d_SOURCES = construct_data_inh_2d1d.c
+construct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+construct_data_inh_3d_SOURCES = construct_data_inh_3d.c
+construct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_2d_SOURCES = reconstruct_data_2d.c
+reconstruct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_inh_3d_SOURCES = reconstruct_data_inh_3d.c
+reconstruct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_inh_2d1d_SOURCES = reconstruct_data_inh_2d1d.c
+reconstruct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_inh_nnfft_SOURCES = reconstruct_data_inh_nnfft.c
+reconstruct_data_inh_nnfft_LDADD = $(top_builddir)/libnfft3.la
+EXTRA_DIST = construct_inh.m \
+		construct_readout_time.m \
+		precompute_weights.m \
+		construct_knots_linogram.m \
+		mri_inh.m \
+		rms.m \
+		construct_knots_radial.m \
+		mri.m \
+		construct_knots_rose.m \
+		visualize_data.m \
+		construct_knots_spiral.m \
+		phantom.m \
+		README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/mri2d/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/mri/mri2d/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+construct_data_2d$(EXEEXT): $(construct_data_2d_OBJECTS) $(construct_data_2d_DEPENDENCIES) $(EXTRA_construct_data_2d_DEPENDENCIES) 
+	@rm -f construct_data_2d$(EXEEXT)
+	$(LINK) $(construct_data_2d_OBJECTS) $(construct_data_2d_LDADD) $(LIBS)
+construct_data_inh_2d1d$(EXEEXT): $(construct_data_inh_2d1d_OBJECTS) $(construct_data_inh_2d1d_DEPENDENCIES) $(EXTRA_construct_data_inh_2d1d_DEPENDENCIES) 
+	@rm -f construct_data_inh_2d1d$(EXEEXT)
+	$(LINK) $(construct_data_inh_2d1d_OBJECTS) $(construct_data_inh_2d1d_LDADD) $(LIBS)
+construct_data_inh_3d$(EXEEXT): $(construct_data_inh_3d_OBJECTS) $(construct_data_inh_3d_DEPENDENCIES) $(EXTRA_construct_data_inh_3d_DEPENDENCIES) 
+	@rm -f construct_data_inh_3d$(EXEEXT)
+	$(LINK) $(construct_data_inh_3d_OBJECTS) $(construct_data_inh_3d_LDADD) $(LIBS)
+reconstruct_data_2d$(EXEEXT): $(reconstruct_data_2d_OBJECTS) $(reconstruct_data_2d_DEPENDENCIES) $(EXTRA_reconstruct_data_2d_DEPENDENCIES) 
+	@rm -f reconstruct_data_2d$(EXEEXT)
+	$(LINK) $(reconstruct_data_2d_OBJECTS) $(reconstruct_data_2d_LDADD) $(LIBS)
+reconstruct_data_gridding$(EXEEXT): $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_DEPENDENCIES) $(EXTRA_reconstruct_data_gridding_DEPENDENCIES) 
+	@rm -f reconstruct_data_gridding$(EXEEXT)
+	$(LINK) $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_LDADD) $(LIBS)
+reconstruct_data_inh_2d1d$(EXEEXT): $(reconstruct_data_inh_2d1d_OBJECTS) $(reconstruct_data_inh_2d1d_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_2d1d_DEPENDENCIES) 
+	@rm -f reconstruct_data_inh_2d1d$(EXEEXT)
+	$(LINK) $(reconstruct_data_inh_2d1d_OBJECTS) $(reconstruct_data_inh_2d1d_LDADD) $(LIBS)
+reconstruct_data_inh_3d$(EXEEXT): $(reconstruct_data_inh_3d_OBJECTS) $(reconstruct_data_inh_3d_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_3d_DEPENDENCIES) 
+	@rm -f reconstruct_data_inh_3d$(EXEEXT)
+	$(LINK) $(reconstruct_data_inh_3d_OBJECTS) $(reconstruct_data_inh_3d_LDADD) $(LIBS)
+reconstruct_data_inh_nnfft$(EXEEXT): $(reconstruct_data_inh_nnfft_OBJECTS) $(reconstruct_data_inh_nnfft_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_nnfft_DEPENDENCIES) 
+	@rm -f reconstruct_data_inh_nnfft$(EXEEXT)
+	$(LINK) $(reconstruct_data_inh_nnfft_OBJECTS) $(reconstruct_data_inh_nnfft_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_2d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_inh_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_inh_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_2d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_gridding.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_nnfft.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/mri/mri2d/README b/applications/mri/mri2d/README
new file mode 100644
index 0000000..ee6973c
--- /dev/null
+++ b/applications/mri/mri2d/README
@@ -0,0 +1,24 @@
+Based on the research paper:
+A note on the iterative MRI reconstruction from nonuniform k-space data
+ 
+by Tobias Knopp, Stefan Kunis and Daniel Potts
+Available from:
+http://www.mathematik.tu-chemnitz.de/~potts
+
+see also: 
+http://www.tu-chemnitz.de/~potts/projecte/projekt_mri.php
+http://www.tu-chemnitz.de/~potts/projects/mri/
+
+Furthermore see the Paper
+Field Inhomogeneity Correction based on Gridding Reconstruction for Magnetic Resonance Imaging
+
+by H. Eggers, Tobias Knopp, and Daniel Potts
+
+--------------------------------------------------------------------
+
+Open MATLAB and run the script file mri.m or mri_inh.m.
+mri.m and mri_inh are an examples for the usage of the programs.
+mri.m uses a simple model without considering  a field inhomogenity
+against what mri_inh.m considers the field inhomogeneity
+
+For questions mail us: tobias.knopp at informatik.uni-luebeck.de 
diff --git a/applications/mri/mri2d/construct_data_2d.c b/applications/mri/mri2d/construct_data_2d.c
new file mode 100644
index 0000000..fa36e56
--- /dev/null
+++ b/applications/mri/mri2d/construct_data_2d.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_2d construct_data_2d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * construct makes an 2d-nfft
+ */
+static void construct(char * file, int N, int M)
+{
+  int j,k;            /* some variables */
+  double real;
+  nfft_plan my_plan;  /* plan for the two dimensional nfft  */
+  FILE* fp;
+  FILE* fk;
+  FILE* fi;
+
+  /* initialise my_plan */
+  nfft_init_2d(&my_plan,N,N,M);
+
+  fp=fopen("knots.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fp,"%le %le ",&my_plan.x[2*j+0],&my_plan.x[2*j+1]);
+  }
+  fclose(fp);
+
+  fi=fopen("input_f.dat","r");
+  fk=fopen(file,"w");
+
+  for(j=0;j<N;j++)
+  {
+    for(k=0;k<N;k++) {
+      fscanf(fi,"%le ",&real);
+      my_plan.f_hat[(N*j+k)] = real;
+    }
+  }
+
+  if(my_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_plan);
+
+  nfft_trafo(&my_plan);
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fprintf(fk,"%le %le %le %le\n",my_plan.x[2*j+0],my_plan.x[2*j+1],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+  }
+  fclose(fk);
+  fclose(fi);
+
+  nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 3) {
+    printf("usage: ./construct_data FILENAME N M\n");
+    return 1;
+  }
+
+  construct(argv[1],atoi(argv[2]),atoi(argv[3]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/construct_data_inh_2d1d.c b/applications/mri/mri2d/construct_data_inh_2d1d.c
new file mode 100644
index 0000000..b4e2d4f
--- /dev/null
+++ b/applications/mri/mri2d/construct_data_inh_2d1d.c
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_inh_2d1d construct_data__inh_2d1d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * construct
+ */
+static void construct(char * file, int N, int M)
+{
+  int j;                  /* some variables */
+  double real;
+  double w;
+  double time,min_time,max_time,min_inh,max_inh;
+  mri_inh_2d1d_plan my_plan;
+  FILE *fp,*fout,*fi,*finh,*ftime;
+  int my_N[3],my_n[3];
+  int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT;
+
+  double Ts;
+  double W,T;
+  int N3;
+  int m=2;
+  double sigma = 1.25;
+
+  ftime=fopen("readout_time.dat","r");
+  finh=fopen("inh.dat","r");
+
+  min_time=INT_MAX; max_time=INT_MIN;
+  for(j=0;j<M;j++)
+  {
+    fscanf(ftime,"%le ",&time);
+    if(time<min_time)
+      min_time = time;
+    if(time>max_time)
+      max_time = time;
+  }
+
+  fclose(ftime);
+
+  Ts=(min_time+max_time)/2.0;
+
+  min_inh=INT_MAX; max_inh=INT_MIN;
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&w);
+    if(w<min_inh)
+      min_inh = w;
+    if(w>max_inh)
+      max_inh = w;
+  }
+  fclose(finh);
+
+
+  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+  T=((max_time-min_time)/2.0)/(0.5-((double) m)/N3);
+  W=N3/T;
+
+  my_N[0]=N; my_n[0]=ceil(N*sigma);
+  my_N[1]=N; my_n[1]=ceil(N*sigma);
+  my_N[2]=N3; my_n[2]=N3;
+
+  /* initialise nfft */
+  mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  ftime=fopen("readout_time.dat","r");
+  fp=fopen("knots.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fp,"%le %le ",&my_plan.plan.x[2*j+0],&my_plan.plan.x[2*j+1]);
+    fscanf(ftime,"%le ",&my_plan.t[j]);
+    my_plan.t[j] = (my_plan.t[j]-Ts)/T;
+  }
+  fclose(fp);
+  fclose(ftime);
+
+  finh=fopen("inh.dat","r");
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&my_plan.w[j]);
+    my_plan.w[j]/=W;
+  }
+  fclose(finh);
+
+
+  fi=fopen("input_f.dat","r");
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(fi,"%le ",&real);
+    my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+  }
+
+  if(my_plan.plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_plan.plan);
+
+  mri_inh_2d1d_trafo(&my_plan);
+
+  fout=fopen(file,"w");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fprintf(fout,"%le %le %le %le\n",my_plan.plan.x[2*j+0],my_plan.plan.x[2*j+1],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+  }
+
+  fclose(fout);
+
+  mri_inh_2d1d_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 3) {
+    printf("usage: ./construct_data_inh_2d1d FILENAME N M\n");
+    return 1;
+  }
+
+  construct(argv[1],atoi(argv[2]),atoi(argv[3]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/construct_data_inh_3d.c b/applications/mri/mri2d/construct_data_inh_3d.c
new file mode 100644
index 0000000..1000a7c
--- /dev/null
+++ b/applications/mri/mri2d/construct_data_inh_3d.c
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_inh_3d construct_data_inh_3d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * construct
+ */
+static void construct(char * file, int N, int M)
+{
+  int j;                  /* some variables */
+  double real;
+  double w;
+  double time,min_time,max_time,min_inh,max_inh;
+  mri_inh_3d_plan my_plan;
+  FILE *fp,*fout,*fi,*finh,*ftime;
+  int my_N[3],my_n[3];
+  int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT;
+
+  double Ts;
+  double W;
+  int N3;
+  int m=2;
+  double sigma = 1.25;
+
+  ftime=fopen("readout_time.dat","r");
+  finh=fopen("inh.dat","r");
+
+  min_time=INT_MAX; max_time=INT_MIN;
+  for(j=0;j<M;j++)
+  {
+    fscanf(ftime,"%le ",&time);
+    if(time<min_time)
+      min_time = time;
+    if(time>max_time)
+      max_time = time;
+  }
+
+  fclose(ftime);
+
+  Ts=(min_time+max_time)/2.0;
+
+  min_inh=INT_MAX; max_inh=INT_MIN;
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&w);
+    if(w<min_inh)
+      min_inh = w;
+    if(w>max_inh)
+      max_inh = w;
+  }
+  fclose(finh);
+
+  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+
+  W= NFFT_MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double)m)/N3);
+
+  my_N[0]=N; my_n[0]=ceil(N*sigma);
+  my_N[1]=N; my_n[1]=ceil(N*sigma);
+  my_N[2]=N3; my_n[2]=ceil(N3*sigma);
+
+  /* initialise nfft */
+  mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  ftime=fopen("readout_time.dat","r");
+  fp=fopen("knots.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fp,"%le %le",&my_plan.plan.x[3*j+0],&my_plan.plan.x[3*j+1]);
+    fscanf(ftime,"%le ",&my_plan.plan.x[3*j+2]);
+    my_plan.plan.x[3*j+2] = (my_plan.plan.x[3*j+2]-Ts)*W/N3;
+  }
+  fclose(fp);
+  fclose(ftime);
+
+  finh=fopen("inh.dat","r");
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&my_plan.w[j]);
+    my_plan.w[j]/=W;
+  }
+  fclose(finh);
+
+
+  fi=fopen("input_f.dat","r");
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(fi,"%le ",&real);
+    my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+  }
+
+  if(my_plan.plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_plan.plan);
+
+  mri_inh_3d_trafo(&my_plan);
+
+  fout=fopen(file,"w");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fprintf(fout,"%le %le %le %le\n",my_plan.plan.x[3*j+0],my_plan.plan.x[3*j+1],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+  }
+
+  fclose(fout);
+
+  mri_inh_3d_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 3) {
+    printf("usage: ./construct_data_inh_3d FILENAME N M\n");
+    return 1;
+  }
+
+  construct(argv[1],atoi(argv[2]),atoi(argv[3]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/construct_inh.m b/applications/mri/mri2d/construct_inh.m
new file mode 100644
index 0000000..09ae481
--- /dev/null
+++ b/applications/mri/mri2d/construct_inh.m
@@ -0,0 +1,27 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_inh.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = construct_inh( N )
+out=zeros(N*N,1);
+
+for k=1:N,
+  for j=1:N,
+    out((k-1)*N+j) = (((k-N/2)/(N/sqrt(2)))^2+((j-N/2)/(N/sqrt(2)))^2)/2 -0.5/2;
+  end
+end
+
+save inh.dat -ascii out
diff --git a/applications/mri/mri2d/construct_knots_linogram.m b/applications/mri/mri2d/construct_knots_linogram.m
new file mode 100644
index 0000000..a3d68bf
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_linogram.m
@@ -0,0 +1,31 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_linogram.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_linogram ( N )
+
+l=((-N/2):(N/2-1));
+k=((-N):(N-1))';
+
+x=[reshape(k*l/N^2,2*N^2,1) kron(ones(N,1),k/2/N);
+   kron(ones(N,1),k/2/N) reshape(-k*l/N^2,2*N^2,1)];
+
+% feel free to plot the knots by uncommenting
+% plot(x(:,1),x(:,2),'r.')
+
+save knots.dat -ascii x
+
+M=size(x,1);
diff --git a/applications/mri/mri2d/construct_knots_radial.m b/applications/mri/mri2d/construct_knots_radial.m
new file mode 100644
index 0000000..7214a35
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_radial.m
@@ -0,0 +1,39 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_radial.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_radial( N )
+
+A=N*2;
+P=410/512*A;
+M=A*P;
+file=zeros(P*A,2);
+for i=1:P
+  for j=1:A,
+   if mod(i,2) == 0,
+     r=(j-1)/A - 1/2;
+   else
+     r=-(j-1)/A + 1/2;
+   end
+   file((i-1)*A+j,1)=r*sin((i-1)*pi/P);
+   file((i-1)*A+j,2)=r*cos((i-1)*pi/P);
+  end
+end
+
+% feel free to plot the knots by uncommenting
+% plot(file(:,1),file(:,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri2d/construct_knots_rose.m b/applications/mri/mri2d/construct_knots_rose.m
new file mode 100644
index 0000000..33263ef
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_rose.m
@@ -0,0 +1,41 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_rose.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_rose( N )
+
+N=ceil(1.5*N);
+B=1;
+M=N^2;
+file = zeros(M,2);
+
+A=0.5;
+
+w=N/64*50;
+
+for b=0:B-1,
+for i=1:M/B,
+    t=i/(M/B);
+    file(b*M/B+i,1) = A*cos(2*pi*w*t)*cos(2*pi*t+b*2*pi/B);
+
+    file(b*M/B+i,2) = A*cos(2*pi*w*t)*sin(2*pi*t+b*2*pi/B);
+end
+end
+
+% feel free to plot the knots by uncommenting
+% plot(file(:,1),file(:,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri2d/construct_knots_spiral.m b/applications/mri/mri2d/construct_knots_spiral.m
new file mode 100644
index 0000000..a6691a3
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_spiral.m
@@ -0,0 +1,42 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_spiral.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_spiral ( N,arms )
+M=N^2;
+file = zeros(M,2);
+
+A=0.5;
+
+w=N/64*50;
+
+hold on;
+
+for b=0:arms-1,
+  for i=1:M/arms,
+    t=((i-1)/(M/arms))^(1/2);
+    file(b*M/arms+i,1) = A*t*cos(2*pi*(w*t+b/arms));
+
+    file(b*M/arms+i,2) = A*t*sin(2*pi*(w*t+b/arms));
+  end
+  % plot(file(b*M/arms+1:(b+1)*M/arms,1),file(b*M/arms+1:(b+1)*M/arms,2),'-');
+end
+hold off;
+
+% feel free to plot the knots by uncommenting
+% plot(file(:,1),file(:,2),'.');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri2d/construct_readout_time.m b/applications/mri/mri2d/construct_readout_time.m
new file mode 100644
index 0000000..9545cc9
--- /dev/null
+++ b/applications/mri/mri2d/construct_readout_time.m
@@ -0,0 +1,29 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_readout_time.m 3776 2012-06-03 13:29:25Z keiner $
+% constructs a three dimensional Shepp Logan phantom
+function [M] = construct_readout_time( M, Te, arms, increment )
+
+out=zeros(M,1);
+
+for j=1:M,
+  out(j) =   mod(j-1,M/arms)*increment + Te;
+end
+
+%0.00402542373
+
+save readout_time.dat -ascii out
diff --git a/applications/mri/mri2d/doxygen.h b/applications/mri/mri2d/doxygen.h
new file mode 100644
index 0000000..407d638
--- /dev/null
+++ b/applications/mri/mri2d/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_mri2d 2D transforms
+ * \ingroup applications_mri
+ */
diff --git a/applications/mri/mri2d/mri.m b/applications/mri/mri2d/mri.m
new file mode 100644
index 0000000..a483e36
--- /dev/null
+++ b/applications/mri/mri2d/mri.m
@@ -0,0 +1,69 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mri.m 3776 2012-06-03 13:29:25Z keiner $
+% This script file is an example of the usage
+
+N=128;   % points per row / column
+
+% Construct the raw data of the phantom
+% and write it to input_f.dat
+% To use another example than the phantom
+% just put the reshape of your example into input_data_f.dat
+output = reshape(phantom(N),1,N*N);
+save input_f.dat -ascii output
+
+% Construct the knots in k-space and write them to knots.dat
+% Different knots like spiral,rose,radial or linogram can be chosen
+% M is the number of knots
+M = construct_knots_spiral(N,1);
+
+% Make a 2d-NFFT on the constructed knots
+% and write the output to output_data_phantom_nfft.dat
+system(['./construct_data_2d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M)]);
+
+% Precompute the weights using voronoi cells
+% and write them to weights.dat
+precompute_weights('output_phantom_nfft.dat',M);
+
+% Make an inverse 2d-NFFT
+% and write the output to output_real.dat and output_imag.dat
+% The usage is "./reconstruct_data_2 filename N M ITER WEIGHTS"
+% where ITER is the number of iteration and WEIGHTS is 1
+% if the weights are used 0 else
+system(['./reconstruct_data_2d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M)  ' 3 1']);
+
+% Visualize the two dimensional phantom. Make a pic
+% and one plot of the N/2 row
+visualize_data('pics/pic_2d', N, 1, 'Inverse 2d-NFFT - 3. iteration');
+
+% Compute the root mean square
+rms('pics/rms_2d.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The same as above but reconstructed with gridding
+% That means an adjoint 2d-NFFT
+% The ITER parameter is unused and just for compatibility
+system(['./reconstruct_data_gridding ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M)  ' 5 1']);
+visualize_data('pics/pic_gridding', N, 2, '2d-NFFT (Gridding)');
+rms('pics/rms_gridding.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/applications/mri/mri2d/mri_inh.m b/applications/mri/mri2d/mri_inh.m
new file mode 100644
index 0000000..1f0ed1f
--- /dev/null
+++ b/applications/mri/mri2d/mri_inh.m
@@ -0,0 +1,69 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mri_inh.m 3776 2012-06-03 13:29:25Z keiner $
+% This script file is an example of the usage
+
+N=128;   % points per row / column
+arms=1;  % number of spiral arms
+
+% Construct the spiral knots in k-space and write them to knots.dat
+% M is the number of knots
+M = construct_knots_spiral(N,arms);
+
+% Construct the file time.dat which contains the readout time
+construct_readout_time( M, 2, arms,0.0004);
+
+% Construct a fieldmap and write the output to inh.dat
+construct_inh(N);
+
+% Construct the raw data of the phantom
+% and write it to input_f.dat
+% To use another example than the phantom
+% just put the reshape of your example into input_data_f.dat
+out=reshape(phantom(N),1,N*N);
+save input_f.dat -ascii out
+
+% Construct the k-space data considering the fieldmap
+% and write the output to output_data_phantom_nfft.dat
+system(['./construct_data_inh_2d1d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M)]);
+
+% Precompute the weights using voronoi cells
+% and write them to weights.dat
+precompute_weights('output_phantom_nfft.dat',M);
+
+% Reconstruct with the 2d1d method
+% and write the output to output_real.dat and output_imag.dat
+% The usage is "./reconstruct_data_inh_2d1d filename N M ITER WEIGHTS"
+% where ITER is the number of iteration and WEIGHTS is 1
+% if the weights are used 0 else
+% The other methods can be used by replacing 2d1d with 3d or nnfft
+system(['./reconstruct_data_inh_2d1d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M)  ' 3 1']);
+
+% Visualize the two dimensional phantom. Make a pic
+% and one plot of the N/2 row
+visualize_data('pics/pic_2d1d', N, 1, 'Reconstruction considering the fieldmap');
+
+% Compute the root mean square
+rms('pics/rms_2d1d.txt');
+
+% Reconstruct without considering the fieldmap
+system(['./reconstruct_data_2d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M)  ' 3 1']);
+visualize_data('pics/pic_2d', N, 2, 'Inverse 2d-NFFT - 3. iteration');
+rms('pics/rms_2d.txt');
diff --git a/applications/mri/mri2d/phantom.m b/applications/mri/mri2d/phantom.m
new file mode 100644
index 0000000..3d17d08
--- /dev/null
+++ b/applications/mri/mri2d/phantom.m
@@ -0,0 +1,46 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function I=phantom(N)
+% phantom(N)
+%  generates the (modified) Shepp-Logan phantom of P. Toft
+%  as an NxN matrix.
+%
+% Reference: Peter Toft: "The Radon Transform - Theory and Implementation", Ph.D. thesis.
+%   Department of Mathematical Modelling, Technical University of Denmark, June 1996. 326 pages.
+
+% Author: Markus Fenn, 2005
+
+I = zeros(N,N);
+
+k = linspace(-1,1,N);
+[x,y] = meshgrid(k);
+
+I = I + 1.0 * ( (x/0.69).^2+(y/0.92).^2 <= 1 );
+I = I - 0.8 * ( (x/0.6624).^2+((y+0.0184)/0.874).^2 <= 1 );
+I = I - 0.2 * ( ( (cos(-18/360*2*pi)*(x-0.22)+sin(-18/360*2*pi)*y)/0.11).^2+...
+                ( (sin(-18/360*2*pi)*(x-0.22)-cos(-18/360*2*pi)*y)/0.31).^2 <= 1 );
+I = I - 0.2 * ( ( (cos( 18/360*2*pi)*(x+0.22)+sin( 18/360*2*pi)*y)/0.16).^2+...
+                ( (sin( 18/360*2*pi)*(x+0.22)-cos( 18/360*2*pi)*y)/0.41).^2 <= 1 );
+I = I + 0.1 * ( (x/0.21).^2+((y-0.35)/0.25).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y-0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y+0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( ((x+0.08)/0.046).^2+((y+0.605)/0.023).^2 <= 1 );
+I = I + 0.1 * ( (x/0.023).^2+((y+0.606)/0.023).^2 <= 1 );
+I = I + 0.1 * ( ((x-0.06)/0.023).^2+((y+0.605)/0.046).^2 <= 1 );
+
+I=flipud(I);
diff --git a/applications/mri/mri2d/precompute_weights.m b/applications/mri/mri2d/precompute_weights.m
new file mode 100644
index 0000000..7ff5e9c
--- /dev/null
+++ b/applications/mri/mri2d/precompute_weights.m
@@ -0,0 +1,69 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: precompute_weights.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = precompute_weights ( file, M )
+
+input=load(file);
+
+kx = input(1:M,1);
+ky = input(1:M,2);
+
+kxy=[kx ky];
+
+% compute the voronoi regions
+[V,C] = voronoin(kxy,{'QJ'});
+
+% the surface of the knots is written to area
+area = [];
+
+% sum of all surfaces
+sum_area = 0;
+
+% the maximum distance two nearest neighbour have
+% to get the surface we store max_distance^2
+max_distance=0;
+
+% compute the surface of the knots
+for j= 1:length(kxy)
+  x = V(C{j},1);
+  y = V(C{j},2);
+  lxy = length(x);
+  if(lxy==0) % a knot exists more than one time
+    A=0;
+  else
+    A = abs(sum(0.5*(x([2:lxy 1])-x(:)).* ...
+        (y([2:lxy 1]) + y(:))));
+  end
+  area = [area A];
+  min_distance = min((2*(x-kxy(j,1))).^2+(2*(y-kxy(j,2))).^2);
+  max_distance = max([max_distance min_distance]);
+end
+
+% if the surface of a knot is bigger than max_distance^2
+% or isnan or isinf, then take max_distance^2
+for j=1:length(area),
+  if(isnan(area(j)) | isinf(area(j))| area(j)>max_distance),
+    area(j)=max_distance;
+  end
+  sum_area = sum_area + area(j);
+end
+
+% norm the weights
+area = area / sum_area;
+
+save weights.dat -ascii area
+
diff --git a/applications/mri/mri2d/reconstruct_data_2d.c b/applications/mri/mri2d/reconstruct_data_2d.c
new file mode 100644
index 0000000..52214b2
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_2d.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_reconstruct_data_2d reconstruct_data_2d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * reconstruct makes an inverse 2d nfft
+ */
+static void reconstruct(char* filename,int N,int M,int iteration, int weight)
+{
+  int j,k,l;                    /* some variables  */
+  ticks t0, t1;
+  double real,imag,t;           /* to read the real and imag part of a complex number */
+  nfft_plan my_plan;            /* plan for the two dimensional nfft  */
+  solver_plan_complex my_iplan; /* plan for the two dimensional infft */
+  FILE* fin;                    /* input file                         */
+  FILE* fout_real;              /* output file                        */
+  FILE* fout_imag;              /* output file                        */
+  int my_N[2],my_n[2];          /* to init the nfft */
+  double epsilon=0.0000003;     /* epsilon is a the break criterium for
+                                   the iteration */
+  unsigned infft_flags = CGNR | PRECOMPUTE_DAMP;  /* flags for the infft*/
+  int m = 6;
+  double alpha = 2.0;
+  /* initialise my_plan */
+  my_N[0]=N; my_n[0]=ceil(N*alpha);
+  my_N[1]=N; my_n[1]=ceil(N*alpha);
+  nfft_init_guru(&my_plan, 2, my_N, M, my_n, m, PRE_PHI_HUT| PRE_PSI|
+                         MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+                         FFTW_INIT| FFT_OUT_OF_PLACE,
+                         FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /* precompute lin psi if set */
+  if(my_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_plan);
+
+  /* set the flags for the infft*/
+  if (weight)
+    infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+  /* initialise my_iplan, advanced */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)&my_plan, infft_flags );
+
+  /* get the weights */
+  if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+  {
+    fin=fopen("weights.dat","r");
+    for(j=0;j<my_plan.M_total;j++)
+    {
+        fscanf(fin,"%le ",&my_iplan.w[j]);
+    }
+    fclose(fin);
+  }
+
+  /* get the damping factors */
+  if(my_iplan.flags & PRECOMPUTE_DAMP)
+  {
+    for(j=0;j<N;j++){
+      for(k=0;k<N;k++) {
+        int j2= j-N/2;
+        int k2= k-N/2;
+        double r=sqrt(j2*j2+k2*k2);
+        if(r>(double) N/2)
+          my_iplan.w_hat[j*N+k]=0.0;
+        else
+          my_iplan.w_hat[j*N+k]=1.0;
+      }
+    }
+  }
+
+  /* open the input file */
+  fin=fopen(filename,"r");
+
+  /* read x,y,freal and fimag from the knots */
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fin,"%le %le %le %le ",&my_plan.x[2*j+0],&my_plan.x[2*j+1],
+    &real,&imag);
+    my_iplan.y[j] = real + _Complex_I*imag;
+  }
+
+	fclose(fin);
+
+  /* precompute psi */
+  if(my_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_plan);
+
+  /* precompute full psi */
+  if(my_plan.nfft_flags & PRE_FULL_PSI)
+      nfft_precompute_full_psi(&my_plan);
+
+  /* init some guess */
+  for(k=0;k<my_plan.N_total;k++)
+    my_iplan.f_hat_iter[k]=0.0;
+
+  t0 = getticks();
+
+  /* inverse trafo */
+  solver_before_loop_complex(&my_iplan);
+  for(l=0;l<iteration;l++)
+  {
+    /* break if dot_r_iter is smaller than epsilon*/
+    if(my_iplan.dot_r_iter<epsilon)
+      break;
+    fprintf(stderr,"%e,  %i of %i\n",sqrt(my_iplan.dot_r_iter),
+    l+1,iteration);
+    solver_loop_one_step_complex(&my_iplan);
+  }
+
+
+  t1 = getticks();
+  t=nfft_elapsed_seconds(t1,t0);
+
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for(k=0;k<my_plan.N_total;k++) {
+    fprintf(fout_real,"%le ", creal(my_iplan.f_hat_iter[k]));
+    fprintf(fout_imag,"%le ", cimag(my_iplan.f_hat_iter[k]));
+  }
+
+  fclose(fout_real);
+  fclose(fout_imag);
+
+  /* finalize the infft */
+  solver_finalize_complex(&my_iplan);
+
+  /* finalize the nfft */
+  nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 5) {
+    printf("usage: ./reconstruct_data_2d FILENAME N M ITER WEIGHTS\n");
+    return 1;
+  }
+
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_gridding.c b/applications/mri/mri2d/reconstruct_data_gridding.c
new file mode 100644
index 0000000..f003e80
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_gridding.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_gridding construct_data_gridding
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * reconstruct makes a 2d-adjoint-nfft
+ */
+static void reconstruct(char* filename, int N, int M, int weight)
+{
+  int j;                   /* some variables  */
+  double weights;          /* store one weight temporary */
+  double real,imag;        /* to read the real and imag part of a complex number */
+  nfft_plan my_plan;       /* plan for the two dimensional nfft  */
+  FILE* fin;               /* input file  */
+  FILE* fweight;           /* input file for the weights */
+  FILE *fout_real;         /* output file  */
+  FILE *fout_imag;         /* output file  */
+  int my_N[2],my_n[2];
+  int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT;
+
+  /* initialise nfft */
+  my_N[0]=N; my_n[0]=ceil(N*1.2);
+  my_N[1]=N; my_n[1]=ceil(N*1.2);
+  nfft_init_guru(&my_plan, 2, my_N, M, my_n, 6,flags,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  fin=fopen(filename,"r");
+
+  fweight=fopen("weights.dat","r");
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fweight,"%le ",&weights);
+    fscanf(fin,"%le %le %le %le",&my_plan.x[2*j+0],&my_plan.x[2*j+1],&real,&imag);
+    my_plan.f[j] = real + _Complex_I*imag;
+    if (weight)
+      my_plan.f[j] = my_plan.f[j] * weights;
+  }
+  fclose(fweight);
+
+  /* precompute psi */
+  if(my_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_plan);
+
+  /* precompute full psi */
+  if(my_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_plan);
+
+
+  /* compute the adjoint nfft */
+  nfft_adjoint(&my_plan);
+
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for (j=0;j<N*N;j++) {
+    fprintf(fout_real,"%le ",creal(my_plan.f_hat[j]));
+    fprintf(fout_imag,"%le ",cimag(my_plan.f_hat[j]));
+  }
+
+  fclose(fin);
+  fclose(fout_real);
+  fclose(fout_imag);
+
+  nfft_finalize(&my_plan);
+}
+
+
+int main(int argc, char **argv)
+{
+  if (argc <= 5) {
+    printf("usage: ./reconstruct_data_gridding FILENAME N M ITER WEIGHTS\n");
+    return 1;
+  }
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[5]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_inh_2d1d.c b/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
new file mode 100644
index 0000000..f8bfadd
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_reconstruct_data_inh_2d1d reconstruct_data__inh_2d1d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+static void reconstruct(char* filename,int N,int M,int iteration , int weight)
+{
+  int j,k,l;
+  double time,min_time,max_time,min_inh,max_inh;
+  ticks t0, t1;
+  double t,real,imag;
+  double w,epsilon=0.0000003;     /* epsilon is a the break criterium for
+                                   the iteration */;
+  mri_inh_2d1d_plan my_plan;
+  solver_plan_complex my_iplan;
+  FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;
+  int my_N[3],my_n[3];
+  int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;
+  unsigned infft_flags = CGNR | PRECOMPUTE_DAMP;
+
+  double Ts;
+  double W,T;
+  int N3;
+  int m=2;
+  double sigma = 1.25;
+
+  ftime=fopen("readout_time.dat","r");
+  finh=fopen("inh.dat","r");
+
+  min_time=INT_MAX; max_time=INT_MIN;
+  for(j=0;j<M;j++)
+  {
+    fscanf(ftime,"%le ",&time);
+    if(time<min_time)
+      min_time = time;
+    if(time>max_time)
+      max_time = time;
+  }
+
+  fclose(ftime);
+
+  Ts=(min_time+max_time)/2.0;
+
+
+  min_inh=INT_MAX; max_inh=INT_MIN;
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&w);
+    if(w<min_inh)
+      min_inh = w;
+    if(w>max_inh)
+      max_inh = w;
+  }
+  fclose(finh);
+
+  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+(m)/(2*sigma))*4*sigma);
+	/* N3 has to be even */
+	if(N3%2!=0)
+	  N3++;
+
+	T=((max_time-min_time)/2.0)/(0.5-((double) (m))/N3);
+  W=N3/T;
+
+  my_N[0]=N; my_n[0]=ceil(N*sigma);
+  my_N[1]=N; my_n[1]=ceil(N*sigma);
+  my_N[2]=N3; my_n[2]=N3;
+
+  /* initialise nfft */
+  mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+
+  /* precompute lin psi if set */
+  if(my_plan.plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_plan.plan);
+
+  if (weight)
+    infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+  /* initialise my_iplan, advanced */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+  /* get the weights */
+  if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+  {
+    fw=fopen("weights.dat","r");
+    for(j=0;j<my_plan.M_total;j++)
+    {
+        fscanf(fw,"%le ",&my_iplan.w[j]);
+    }
+    fclose(fw);
+  }
+
+  /* get the damping factors */
+  if(my_iplan.flags & PRECOMPUTE_DAMP)
+  {
+    for(j=0;j<N;j++){
+      for(k=0;k<N;k++) {
+        int j2= j-N/2;
+        int k2= k-N/2;
+        double r=sqrt(j2*j2+k2*k2);
+        if(r>(double) N/2)
+          my_iplan.w_hat[j*N+k]=0.0;
+        else
+          my_iplan.w_hat[j*N+k]=1.0;
+      }
+    }
+  }
+
+  fp=fopen(filename,"r");
+  ftime=fopen("readout_time.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fp,"%le %le %le %le",&my_plan.plan.x[2*j+0],&my_plan.plan.x[2*j+1],&real,&imag);
+    my_iplan.y[j]=real+ _Complex_I*imag;
+    fscanf(ftime,"%le ",&my_plan.t[j]);
+
+    my_plan.t[j] = (my_plan.t[j]-Ts)/T;
+  }
+  fclose(fp);
+  fclose(ftime);
+
+
+  finh=fopen("inh.dat","r");
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&my_plan.w[j]);
+    my_plan.w[j]/=W;
+  }
+  fclose(finh);
+
+
+  if(my_plan.plan.nfft_flags & PRE_PSI) {
+    nfft_precompute_psi(&my_plan.plan);
+  }
+  if(my_plan.plan.nfft_flags & PRE_FULL_PSI) {
+      nfft_precompute_full_psi(&my_plan.plan);
+  }
+
+  /* init some guess */
+  for(j=0;j<my_plan.N_total;j++)
+  {
+    my_iplan.f_hat_iter[j]=0.0;
+  }
+
+  t0 = getticks();
+
+  /* inverse trafo */
+  solver_before_loop_complex(&my_iplan);
+  for(l=0;l<iteration;l++)
+  {
+    /* break if dot_r_iter is smaller than epsilon*/
+    if(my_iplan.dot_r_iter<epsilon)
+    break;
+    fprintf(stderr,"%e,  %i of %i\n",sqrt(my_iplan.dot_r_iter),
+    l+1,iteration);
+    solver_loop_one_step_complex(&my_iplan);
+  }
+
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for (j=0;j<N*N;j++) {
+    /* Verschiebung wieder herausrechnen */
+    my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+
+    fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[j]));
+    fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[j]));
+  }
+
+  fclose(fout_real);
+  fclose(fout_imag);
+  solver_finalize_complex(&my_iplan);
+  mri_inh_2d1d_finalize(&my_plan);
+}
+
+
+int main(int argc, char **argv)
+{
+  if (argc <= 5) {
+
+    printf("usage: ./reconstruct_data_inh_2d1d FILENAME N M ITER WEIGHTS\n");
+    return 1;
+  }
+
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_inh_3d.c b/applications/mri/mri2d/reconstruct_data_inh_3d.c
new file mode 100644
index 0000000..130d529
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_inh_3d.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_reconstruct_data_inh_3d reconstruct_data_inh_3d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+static void reconstruct(char* filename,int N,int M,int iteration , int weight)
+{
+  int j,k,l;
+  ticks t0, t1;
+  double time,min_time,max_time,min_inh,max_inh;
+  double t,real,imag;
+  double w,epsilon=0.0000003;     /* epsilon is a the break criterium for
+                                   the iteration */;
+  mri_inh_3d_plan my_plan;
+  solver_plan_complex my_iplan;
+  FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;
+  int my_N[3],my_n[3];
+  int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;
+  unsigned infft_flags = CGNR | PRECOMPUTE_DAMP;
+
+  double Ts;
+  double W;
+  int N3;
+  int m=2;
+  double sigma = 1.25;
+
+  ftime=fopen("readout_time.dat","r");
+  finh=fopen("inh.dat","r");
+
+  min_time=INT_MAX; max_time=INT_MIN;
+  for(j=0;j<M;j++)
+  {
+    fscanf(ftime,"%le ",&time);
+    if(time<min_time)
+      min_time = time;
+    if(time>max_time)
+      max_time = time;
+  }
+
+  fclose(ftime);
+
+  Ts=(min_time+max_time)/2.0;
+
+
+  min_inh=INT_MAX; max_inh=INT_MIN;
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&w);
+    if(w<min_inh)
+      min_inh = w;
+    if(w>max_inh)
+      max_inh = w;
+  }
+  fclose(finh);
+
+  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+	/* N3 has to be even */
+	if(N3%2!=0)
+	  N3++;
+
+  W= NFFT_MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double) m)/N3);
+
+  my_N[0]=N;my_n[0]=ceil(N*sigma);
+  my_N[1]=N; my_n[1]=ceil(N*sigma);
+  my_N[2]=N3; my_n[2]=ceil(N3*sigma);
+
+  /* initialise nfft */
+  mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  if (weight)
+    infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+  /* initialise my_iplan, advanced */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+  /* get the weights */
+  if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+  {
+    fw=fopen("weights.dat","r");
+    for(j=0;j<my_plan.M_total;j++)
+    {
+        fscanf(fw,"%le ",&my_iplan.w[j]);
+    }
+    fclose(fw);
+  }
+
+  /* get the damping factors */
+  if(my_iplan.flags & PRECOMPUTE_DAMP)
+  {
+    for(j=0;j<N;j++){
+      for(k=0;k<N;k++) {
+        int j2= j-N/2;
+        int k2= k-N/2;
+        double r=sqrt(j2*j2+k2*k2);
+        if(r>(double) N/2)
+          my_iplan.w_hat[j*N+k]=0.0;
+        else
+          my_iplan.w_hat[j*N+k]=1.0;
+      }
+    }
+  }
+
+  fp=fopen(filename,"r");
+  ftime=fopen("readout_time.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fp,"%le %le %le %le",&my_plan.plan.x[3*j+0],&my_plan.plan.x[3*j+1],&real,&imag);
+    my_iplan.y[j]=real+ _Complex_I*imag;
+    fscanf(ftime,"%le ",&my_plan.plan.x[3*j+2]);
+
+    my_plan.plan.x[3*j+2] = (my_plan.plan.x[3*j+2]-Ts)*W/N3;
+  }
+  fclose(fp);
+  fclose(ftime);
+
+
+  finh=fopen("inh.dat","r");
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&my_plan.w[j]);
+    my_plan.w[j]/=W;
+  }
+  fclose(finh);
+
+
+  if(my_plan.plan.nfft_flags & PRE_PSI) {
+    nfft_precompute_psi(&my_plan.plan);
+  }
+  if(my_plan.plan.nfft_flags & PRE_FULL_PSI) {
+      nfft_precompute_full_psi(&my_plan.plan);
+  }
+
+  /* init some guess */
+  for(j=0;j<my_plan.N_total;j++)
+  {
+    my_iplan.f_hat_iter[j]=0.0;
+  }
+
+  t0 = getticks();
+
+  /* inverse trafo */
+  solver_before_loop_complex(&my_iplan);
+  for(l=0;l<iteration;l++)
+  {
+    /* break if dot_r_iter is smaller than epsilon*/
+    if(my_iplan.dot_r_iter<epsilon)
+    break;
+    fprintf(stderr,"%e,  %i of %i\n",sqrt(my_iplan.dot_r_iter),
+    l+1,iteration);
+    solver_loop_one_step_complex(&my_iplan);
+  }
+
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for (j=0;j<N*N;j++) {
+    /* Verschiebung wieder herausrechnen */
+    my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+
+    fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[j]));
+    fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[j]));
+  }
+
+  fclose(fout_real);
+  fclose(fout_imag);
+  solver_finalize_complex(&my_iplan);
+  mri_inh_3d_finalize(&my_plan);
+}
+
+
+int main(int argc, char **argv)
+{
+  if (argc <= 5) {
+
+    printf("usage: ./reconstruct_data_inh_3d FILENAME N M ITER WEIGHTS\n");
+    return 1;
+  }
+
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_inh_nnfft.c b/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
new file mode 100644
index 0000000..cf71d04
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_inh_nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_inh_nnfft construct_data_inh_nnfft
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * reconstruct
+ */
+static void reconstruct(char* filename,int N,int M,int iteration, int weight)
+{
+  int j,k,l;                    /* some variables  */
+  nnfft_plan my_plan;            /* plan for the two dimensional nfft  */
+  solver_plan_complex my_iplan;          /* plan for the two dimensional infft */
+  FILE* fin;                    /* input file                         */
+  FILE* finh;
+  FILE* ftime;
+  FILE* fout_real;              /* output file                        */
+  FILE* fout_imag;              /* output file                        */
+  int my_N[3],my_n[3];          /* to init the nfft */
+  ticks t0, t1;
+  double t,epsilon=0.0000003;     /* epsilon is a the break criterium for
+                                   the iteration */
+  unsigned infft_flags = CGNR | PRECOMPUTE_DAMP; /* flags for the infft*/
+  double time,min_time,max_time,min_inh,max_inh;
+  double real,imag;
+  double *w;
+
+  double Ts;
+  double W;
+  int N3;
+  int m=2;
+  double sigma = 1.25;
+
+  w = (double*)nfft_malloc(N*N*sizeof(double));
+
+  ftime=fopen("readout_time.dat","r");
+  finh=fopen("inh.dat","r");
+
+  min_time=INT_MAX; max_time=INT_MIN;
+  for(j=0;j<M;j++)
+  {
+    fscanf(ftime,"%le ",&time);
+    if(time<min_time)
+      min_time = time;
+    if(time>max_time)
+      max_time = time;
+  }
+
+  fclose(ftime);
+
+  Ts=(min_time+max_time)/2.0;
+
+  min_inh=INT_MAX; max_inh=INT_MIN;
+  for(j=0;j<N*N;j++)
+  {
+    fscanf(finh,"%le ",&w[j]);
+    if(w[j]<min_inh)
+      min_inh = w[j];
+    if(w[j]>max_inh)
+      max_inh = w[j];
+  }
+  fclose(finh);
+
+  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0)*4);
+
+
+  W=NFFT_MAX(fabs(min_inh),fabs(max_inh))*2.0;
+
+  fprintf(stderr,"3:  %i %e %e %e %e %e %e\n",N3,W,min_inh,max_inh,min_time,max_time,Ts);
+
+  /* initialise my_plan */
+  my_N[0]=N;my_n[0]=ceil(N*sigma);
+  my_N[1]=N; my_n[1]=ceil(N*sigma);
+  my_N[2]=N3; my_n[2]=ceil(N3*sigma);
+  nnfft_init_guru(&my_plan, 3, N*N, M, my_N,my_n,m,
+        PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F );
+
+  /* precompute lin psi if set */
+  if(my_plan.nnfft_flags & PRE_LIN_PSI)
+    nnfft_precompute_lin_psi(&my_plan);
+
+  /* set the flags for the infft*/
+  if (weight)
+    infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+  /* initialise my_iplan, advanced */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+  /* get the weights */
+  if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+  {
+    fin=fopen("weights.dat","r");
+    for(j=0;j<my_plan.M_total;j++)
+    {
+        fscanf(fin,"%le ",&my_iplan.w[j]);
+    }
+    fclose(fin);
+  }
+
+  /* get the damping factors */
+  if(my_iplan.flags & PRECOMPUTE_DAMP)
+  {
+    for(j=0;j<N;j++){
+      for(k=0;k<N;k++) {
+        int j2= j-N/2;
+        int k2= k-N/2;
+        double r=sqrt(j2*j2+k2*k2);
+        if(r>(double) N/2)
+          my_iplan.w_hat[j*N+k]=0.0;
+        else
+          my_iplan.w_hat[j*N+k]=1.0;
+      }
+    }
+  }
+
+  /* open the input file */
+  fin=fopen(filename,"r");
+  ftime=fopen("readout_time.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fin,"%le %le %le %le ",&my_plan.x[3*j+0],&my_plan.x[3*j+1],&real,&imag);
+    my_iplan.y[j]=real+ _Complex_I*imag;
+    fscanf(ftime,"%le ",&my_plan.x[3*j+2]);
+
+    my_plan.x[3*j+2] = (my_plan.x[3*j+2]-Ts)*W/N3;
+  }
+
+  for(j=0;j<N;j++)
+    {
+    for(l=0;l<N;l++)
+      {
+        my_plan.v[3*(N*j+l)+0]=(((double) j) -(((double) N)/2.0))/((double) N);
+        my_plan.v[3*(N*j+l)+1]=(((double) l) -(((double) N)/2.0))/((double) N);
+        my_plan.v[3*(N*j+l)+2] = w[N*j+l]/W ;
+      }
+    }
+
+  /* precompute psi */
+  if(my_plan.nnfft_flags & PRE_PSI) {
+    nnfft_precompute_psi(&my_plan);
+    if(my_plan.nnfft_flags & PRE_FULL_PSI)
+      nnfft_precompute_full_psi(&my_plan);
+  }
+
+  if(my_plan.nnfft_flags & PRE_PHI_HUT)
+    nnfft_precompute_phi_hut(&my_plan);
+
+  /* init some guess */
+  for(k=0;k<my_plan.N_total;k++)
+  {
+    my_iplan.f_hat_iter[k]=0.0;
+  }
+
+  t0 = getticks();
+
+  /* inverse trafo */
+  solver_before_loop_complex(&my_iplan);
+  for(l=0;l<iteration;l++)
+  {
+    /* break if dot_r_iter is smaller than epsilon*/
+    if(my_iplan.dot_r_iter<epsilon)
+    break;
+    fprintf(stderr,"%e,  %i of %i\n",sqrt(my_iplan.dot_r_iter),
+    l+1,iteration);
+    solver_loop_one_step_complex(&my_iplan);
+  }
+
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for(k=0;k<my_plan.N_total;k++) {
+
+    my_iplan.f_hat_iter[k]*=cexp(2.0*_Complex_I*PI*Ts*w[k]);
+
+    fprintf(fout_real,"%le ", creal(my_iplan.f_hat_iter[k]));
+    fprintf(fout_imag,"%le ", cimag(my_iplan.f_hat_iter[k]));
+  }
+
+
+  fclose(fout_real);
+  fclose(fout_imag);
+
+
+  /* finalize the infft */
+  solver_finalize_complex(&my_iplan);
+
+  /* finalize the nfft */
+  nnfft_finalize(&my_plan);
+
+  nfft_free(w);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 5) {
+    printf("usage: ./reconstruct_data_inh_nnfft FILENAME N M ITER WEIGHTS\n");
+    return 1;
+  }
+
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/rms.m b/applications/mri/mri2d/rms.m
new file mode 100644
index 0000000..6335d03
--- /dev/null
+++ b/applications/mri/mri2d/rms.m
@@ -0,0 +1,32 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: rms.m 3776 2012-06-03 13:29:25Z keiner $
+% computes the root mean square
+function [] = rms ( file )
+% load original data f
+load input_f.dat
+% load recontructed data f~
+load output_real.dat
+load output_imag.dat
+output = output_real+i*output_imag;
+
+% compute
+result = (norm(input_f - output) / norm(input_f) );
+
+
+% write the root mean square to file
+save(file,'result','-ascii');
diff --git a/applications/mri/mri2d/visualize_data.m b/applications/mri/mri2d/visualize_data.m
new file mode 100644
index 0000000..7cb9e7e
--- /dev/null
+++ b/applications/mri/mri2d/visualize_data.m
@@ -0,0 +1,49 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: visualize_data.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = visualize_data ( file, N, num_fig, caption )
+
+load output_real.dat
+load output_imag.dat
+
+A=reshape(abs(output_real+i*output_imag),N,N);
+
+for k=1:N,
+  for l=1:N,
+    if sqrt((l-N/2)^2+(k-N/2)^2)>N/2,
+      A(k,l)=0;
+    end
+  end
+end
+
+% plot the two dimensional phantom
+figure(2*num_fig-1)
+imagesc(A, [0 1.2]);
+colormap(gray(256));
+colorbar;
+title(caption);
+file_out =[file '.jpg'];
+print('-djpeg',file_out);
+
+% plot the N/2 row
+figure(2*num_fig)
+file_out = [file 'row' '.png'];
+plot(1:N,A(N/2,:));
+axis([1 N 0 1.2]);
+title([caption ' - The ' int2str(N/2) 'th row']);
+print('-djpeg',file_out);
+
diff --git a/applications/mri/mri3d/Makefile.am b/applications/mri/mri3d/Makefile.am
new file mode 100644
index 0000000..a01853f
--- /dev/null
+++ b/applications/mri/mri3d/Makefile.am
@@ -0,0 +1,37 @@
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = \
+  construct_data_2d1d \
+  construct_data_3d \
+  reconstruct_data_gridding \
+  reconstruct_data_2d1d \
+  reconstruct_data_3d
+
+construct_data_2d1d_SOURCES = construct_data_2d1d.c doxygen.h
+construct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+construct_data_3d_SOURCES = construct_data_3d.c
+construct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+reconstruct_data_2d1d_SOURCES = reconstruct_data_2d1d.c
+reconstruct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+reconstruct_data_3d_SOURCES = reconstruct_data_3d.c
+reconstruct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+
+EXTRA_DIST = mri.m \
+			construct_knots_linogram.m \
+			construct_knots_radial_3d.m \
+			construct_knots_radial.m \
+			construct_knots_rose.m \
+			construct_knots_spiral.m \
+			construct_phantom.m \
+			precompute_weights_2d.m \
+			rms.m \
+			visualize_data.m \
+			README
diff --git a/applications/mri/mri3d/Makefile.in b/applications/mri/mri3d/Makefile.in
new file mode 100644
index 0000000..70bce7f
--- /dev/null
+++ b/applications/mri/mri3d/Makefile.in
@@ -0,0 +1,612 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = construct_data_2d1d$(EXEEXT) \
+	construct_data_3d$(EXEEXT) reconstruct_data_gridding$(EXEEXT) \
+	reconstruct_data_2d1d$(EXEEXT) reconstruct_data_3d$(EXEEXT)
+subdir = applications/mri/mri3d
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_construct_data_2d1d_OBJECTS = construct_data_2d1d.$(OBJEXT)
+construct_data_2d1d_OBJECTS = $(am_construct_data_2d1d_OBJECTS)
+construct_data_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_construct_data_3d_OBJECTS = construct_data_3d.$(OBJEXT)
+construct_data_3d_OBJECTS = $(am_construct_data_3d_OBJECTS)
+construct_data_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_2d1d_OBJECTS = reconstruct_data_2d1d.$(OBJEXT)
+reconstruct_data_2d1d_OBJECTS = $(am_reconstruct_data_2d1d_OBJECTS)
+reconstruct_data_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_3d_OBJECTS = reconstruct_data_3d.$(OBJEXT)
+reconstruct_data_3d_OBJECTS = $(am_reconstruct_data_3d_OBJECTS)
+reconstruct_data_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_gridding_OBJECTS =  \
+	reconstruct_data_gridding.$(OBJEXT)
+reconstruct_data_gridding_OBJECTS =  \
+	$(am_reconstruct_data_gridding_OBJECTS)
+reconstruct_data_gridding_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(construct_data_2d1d_SOURCES) $(construct_data_3d_SOURCES) \
+	$(reconstruct_data_2d1d_SOURCES) \
+	$(reconstruct_data_3d_SOURCES) \
+	$(reconstruct_data_gridding_SOURCES)
+DIST_SOURCES = $(construct_data_2d1d_SOURCES) \
+	$(construct_data_3d_SOURCES) $(reconstruct_data_2d1d_SOURCES) \
+	$(reconstruct_data_3d_SOURCES) \
+	$(reconstruct_data_gridding_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+construct_data_2d1d_SOURCES = construct_data_2d1d.c doxygen.h
+construct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+construct_data_3d_SOURCES = construct_data_3d.c
+construct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+reconstruct_data_2d1d_SOURCES = reconstruct_data_2d1d.c
+reconstruct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+reconstruct_data_3d_SOURCES = reconstruct_data_3d.c
+reconstruct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+EXTRA_DIST = mri.m \
+			construct_knots_linogram.m \
+			construct_knots_radial_3d.m \
+			construct_knots_radial.m \
+			construct_knots_rose.m \
+			construct_knots_spiral.m \
+			construct_phantom.m \
+			precompute_weights_2d.m \
+			rms.m \
+			visualize_data.m \
+			README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/mri3d/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/mri/mri3d/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+construct_data_2d1d$(EXEEXT): $(construct_data_2d1d_OBJECTS) $(construct_data_2d1d_DEPENDENCIES) $(EXTRA_construct_data_2d1d_DEPENDENCIES) 
+	@rm -f construct_data_2d1d$(EXEEXT)
+	$(LINK) $(construct_data_2d1d_OBJECTS) $(construct_data_2d1d_LDADD) $(LIBS)
+construct_data_3d$(EXEEXT): $(construct_data_3d_OBJECTS) $(construct_data_3d_DEPENDENCIES) $(EXTRA_construct_data_3d_DEPENDENCIES) 
+	@rm -f construct_data_3d$(EXEEXT)
+	$(LINK) $(construct_data_3d_OBJECTS) $(construct_data_3d_LDADD) $(LIBS)
+reconstruct_data_2d1d$(EXEEXT): $(reconstruct_data_2d1d_OBJECTS) $(reconstruct_data_2d1d_DEPENDENCIES) $(EXTRA_reconstruct_data_2d1d_DEPENDENCIES) 
+	@rm -f reconstruct_data_2d1d$(EXEEXT)
+	$(LINK) $(reconstruct_data_2d1d_OBJECTS) $(reconstruct_data_2d1d_LDADD) $(LIBS)
+reconstruct_data_3d$(EXEEXT): $(reconstruct_data_3d_OBJECTS) $(reconstruct_data_3d_DEPENDENCIES) $(EXTRA_reconstruct_data_3d_DEPENDENCIES) 
+	@rm -f reconstruct_data_3d$(EXEEXT)
+	$(LINK) $(reconstruct_data_3d_OBJECTS) $(reconstruct_data_3d_LDADD) $(LIBS)
+reconstruct_data_gridding$(EXEEXT): $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_DEPENDENCIES) $(EXTRA_reconstruct_data_gridding_DEPENDENCIES) 
+	@rm -f reconstruct_data_gridding$(EXEEXT)
+	$(LINK) $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_gridding.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/mri/mri3d/README b/applications/mri/mri3d/README
new file mode 100644
index 0000000..87523da
--- /dev/null
+++ b/applications/mri/mri3d/README
@@ -0,0 +1,18 @@
+Based on the research paper:
+A note on the iterative MRI reconstruction from nonuniform k-space data
+
+ 
+by Tobias Knopp, Stefan Kunis and Daniel Potts
+Available from:
+http://www.tu-chemnitz.de/~potts
+
+see also: 
+http://www.tu-chemnitz.de/~potts/projecte/projekt_mri.php
+http://www.tu-chemnitz.de/~potts/projecte/ijbi
+
+--------------------------------------------------------------------
+
+Open MATLAB and run the script file mri.m. 
+mri.m is an example for the usage of the programs.
+
+For questions mail us: tobias.knopp at informatik.uni-luebeck.de 
diff --git a/applications/mri/mri3d/construct_data_2d1d.c b/applications/mri/mri3d/construct_data_2d1d.c
new file mode 100644
index 0000000..588605e
--- /dev/null
+++ b/applications/mri/mri3d/construct_data_2d1d.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_construct_data_1d2d construct_data_1d2d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * construct makes an 2d-nfft for every slice
+ */
+static void construct(char * file, int N, int M, int Z, fftw_complex *mem)
+{
+  int j,z;                /* some variables */
+  double tmp;             /* a placeholder */
+  nfft_plan my_plan;      /* plan for the two dimensional nfft  */
+  FILE* fp;
+
+  /* initialise my_plan */
+  nfft_init_2d(&my_plan,N,N,M/Z);
+
+  fp=fopen("knots.dat","r");
+
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    fscanf(fp,"%le %le %le",&my_plan.x[2*j+0],&my_plan.x[2*j+1],&tmp);
+  }
+  fclose(fp);
+
+  fp=fopen(file,"w");
+
+  for(z=0;z<Z;z++) {
+    tmp = (double) z;
+
+    for(j=0;j<N*N;j++)
+      my_plan.f_hat[j] = mem[(z*N*N+N*N*Z/2+j)%(N*N*Z)];
+
+    if(my_plan.nfft_flags & PRE_PSI)
+      nfft_precompute_psi(&my_plan);
+
+    nfft_trafo(&my_plan);
+
+    for(j=0;j<my_plan.M_total;j++)
+    {
+      fprintf(fp,"%le %le %le %le %le\n",my_plan.x[2*j+0],my_plan.x[2*j+1],tmp/Z-0.5,
+              creal(my_plan.f[j]),cimag(my_plan.f[j]));
+    }
+  }
+  fclose(fp);
+
+  nfft_finalize(&my_plan);
+}
+
+/**
+ * fft makes an 1D-ftt for every knot through
+ * all layers
+ */
+static void fft(int N,int M,int Z, fftw_complex *mem)
+{
+  fftw_plan plan;
+  plan = fftw_plan_many_dft(1, &Z, N*N,
+                                  mem, NULL,
+                                  N*N, 1,
+                                  mem, NULL,
+                                  N*N,1 ,
+                                  FFTW_FORWARD, FFTW_ESTIMATE);
+
+  fftw_execute(plan); /* execute the fft */
+  fftw_destroy_plan(plan);
+}
+
+/**
+ * read fills the memory with the file input_data_f.dat as
+ * the real part of f and with zeros for the imag part of f
+ */
+static void read_data(int N,int M,int Z, fftw_complex *mem)
+{
+  int i,z;
+  double real;
+  FILE* fin;
+  fin=fopen("input_f.dat","r");
+
+  for(z=0;z<Z;z++)
+  {
+    for(i=0;i<N*N;i++)
+    {
+      fscanf(fin,"%le ",&real );
+      mem[(z*N*N+N*N*Z/2+i)%(N*N*Z)]=real;
+    }
+  }
+  fclose(fin);
+}
+
+int main(int argc, char **argv)
+{
+  fftw_complex *mem;
+
+  if (argc <= 4) {
+    printf("usage: ./construct_data FILENAME N M Z\n");
+    return 1;
+  }
+
+  mem = (fftw_complex*) nfft_malloc(sizeof(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));
+
+  read_data(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);
+
+  fft(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);
+
+  construct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);
+
+  nfft_free(mem);
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/construct_data_3d.c b/applications/mri/mri3d/construct_data_3d.c
new file mode 100644
index 0000000..a6d4a81
--- /dev/null
+++ b/applications/mri/mri3d/construct_data_3d.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_construct_data_3d construct_data_3d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+static void construct(char * file, int N, int M, int Z)
+{
+  int j,k,l;                /* some variables */
+  double real;
+  nfft_plan my_plan;        /* plan for the three dimensional nfft  */
+  FILE* fp,*fk;
+  int my_N[3],my_n[3];      /* to init the nfft */
+
+
+  /* initialise my_plan */
+  //nfft_init_3d(&my_plan,Z,N,N,M);
+  my_N[0]=Z; my_n[0]=ceil(Z*1.2);
+  my_N[1]=N; my_n[1]=ceil(N*1.2);
+  my_N[2]=N; my_n[2]=ceil(N*1.2);
+  nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,
+                      PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  fp=fopen("knots.dat","r");
+
+  for(j=0;j<M;j++)
+    fscanf(fp,"%le %le %le",&my_plan.x[3*(j)+1],
+      &my_plan.x[3*(j)+2],&my_plan.x[3*(j)+0]);
+
+  fclose(fp);
+
+  fp=fopen("input_f.dat","r");
+  fk=fopen(file,"w");
+
+  for(l=0;l<Z;l++) {
+    for(j=0;j<N;j++)
+    {
+      for(k=0;k<N;k++)
+      {
+        //fscanf(fp,"%le ",&my_plan.f_hat[(N*N*(Z-l)+N*j+k+N*N*Z/2)%(N*N*Z)][0]);
+        fscanf(fp,"%le ",&real);
+        my_plan.f_hat[(N*N*l+N*j+k)] = real;
+      }
+    }
+  }
+
+    if(my_plan.nfft_flags & PRE_PSI)
+      nfft_precompute_psi(&my_plan);
+
+    nfft_trafo(&my_plan);
+
+
+    for(j=0;j<my_plan.M_total;j++)
+      fprintf(fk,"%le %le %le %le %le\n",my_plan.x[3*j+1],
+      my_plan.x[3*j+2],my_plan.x[3*j+0],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+
+
+
+  fclose(fk);
+  fclose(fp);
+
+  nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 4) {
+    printf("usage: ./construct_data FILENAME N M Z\n");
+    return 1;
+  }
+
+  construct(argv[1], atoi(argv[2]),atoi(argv[3]),atoi(argv[4]));
+
+	return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/construct_knots_linogram.m b/applications/mri/mri3d/construct_knots_linogram.m
new file mode 100644
index 0000000..f396714
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_linogram.m
@@ -0,0 +1,38 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_linogram.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_linogram ( N,Z )
+
+l=((-N/2):(N/2-1));
+k=((-N):(N-1))';
+
+x=[reshape(k*l/N^2,2*N^2,1) kron(ones(N,1),k/2/N);
+   kron(ones(N,1),k/2/N) reshape(-k*l/N^2,2*N^2,1)];
+
+file=[];
+for z=0:Z-1,
+  file=[file; x ones(size(x,1),1)*(z/Z-0.5)];
+end
+
+M=size(file,1);
+
+% feel free to plot the knots by uncommenting
+% plot(file(1:M/Z,1),file(1:M/Z,2),'.');
+
+
+save knots.dat -ascii file
+
diff --git a/applications/mri/mri3d/construct_knots_radial.m b/applications/mri/mri3d/construct_knots_radial.m
new file mode 100644
index 0000000..6b42445
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_radial.m
@@ -0,0 +1,44 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_radial.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_radial( N,Z )
+
+A=N*2;
+P=410/512*A;
+M=A*P*Z;
+file=zeros(M,3);
+
+for z=0:Z-1,
+for i=1:P,
+  for j=1:A,
+   if mod(i,2) == 0,
+     r=(j-1)/A - 1/2;
+   else
+     r=-(j-1)/A + 1/2;
+   end
+   file(z*A*P+(i-1)*A+j,1)=r*sin((i-1)*pi/P);
+   file(z*A*P+(i-1)*A+j,2)=r*cos((i-1)*pi/P);
+   file(z*A*P+(i-1)*A+j,3)=z/Z-0.5;
+  end
+end
+end
+
+% feel free to plot the knots by uncommenting
+plot(file(1:M/Z,1),file(1:M/Z,2),'.-');
+
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri3d/construct_knots_radial_3d.m b/applications/mri/mri3d/construct_knots_radial_3d.m
new file mode 100644
index 0000000..58e4419
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_radial_3d.m
@@ -0,0 +1,49 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_radial_3d.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_radial_3d( N,P )
+xk=zeros(N*P^2,4);
+counter=1;
+for r=0:N-1,
+ for i=1:P,
+  for j=1:P,
+   x1=sqrt(2)*r/N/2*cos(2*(i-1/2)*pi/P)*sin((j-1/2)*pi/P);
+   x2=sqrt(2)*r/N/2*sin(2*(i-1/2)*pi/P)*sin((j-1/2)*pi/P);
+   x3=sqrt(2)*r/N/2*cos((j-1/2)*pi/P);
+   if (abs(x1)<0.5 & abs(x2)<0.5 & abs(x3)<0.5),
+     if(r==0)
+       xk(counter,:)=[ x1 x2 x3 (r/N/2)^2*pi]; %weights
+     else
+       xk(counter,:)=[ x1 x2 x3 sqrt(2)*r/N/2*sin((j-1/2)*pi/P)]; %weights
+     end
+     counter=counter+1;
+   end
+  end
+ end
+end
+
+xk=xk(1:counter,:);
+
+% feel free to plot the knots by uncommenting
+% plot3(xk(:,1),xk(:,2),xk(:,3),'.');
+M=size(xk,1);
+
+knots=xk(:,1:3);
+weights=xk(:,4);
+save knots.dat -ascii knots
+save weights.dat -ascii weights
+
diff --git a/applications/mri/mri3d/construct_knots_rose.m b/applications/mri/mri3d/construct_knots_rose.m
new file mode 100644
index 0000000..aa16eb7
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_rose.m
@@ -0,0 +1,43 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_rose.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_rose( N,Z )
+
+N=ceil(1.5*N);
+B=1;
+M=N^2*Z;
+file = zeros(M,3);
+
+A=0.5;
+
+w=N/64*50;
+
+for z=0:Z-1,
+for b=0:B-1,
+for i=1:M/B/Z,
+    t=i/(M/B/Z);
+    file(z*M/Z+b*M/B+i,1) = A*cos(2*pi*w*t)*cos(2*pi*t+b*2*pi/B);
+    file(z*M/Z+b*M/B+i,2) = A*cos(2*pi*w*t)*sin(2*pi*t+b*2*pi/B);
+    file(z*M/Z+b*M/B+i,3) = z/Z-0.5;
+end
+end
+end
+
+% feel free to plot the knots by uncommenting
+% plot(file(1:M/Z,1),file(1:M/Z,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri3d/construct_knots_spiral.m b/applications/mri/mri3d/construct_knots_spiral.m
new file mode 100644
index 0000000..30983af
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_spiral.m
@@ -0,0 +1,41 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_spiral.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_spiral ( N,Z )
+B=1;
+M=N^2*Z;
+file = zeros(M,3);
+
+A=0.5;
+
+w=N/64*50;
+
+for z=0:Z-1,
+  for b=0:B-1,
+    for i=1:M/B/Z,
+      t=(i/(M/B/Z))^(1/2);
+      file(z*M/Z+b*M/B+i,1) = A*t*cos(2*pi*w*t+b);
+      file(z*M/Z+b*M/B+i,2) = A*t*sin(2*pi*w*t+b);
+      file(z*M/Z+b*M/B+i,3) = z/Z-0.5;
+    end
+  end
+end
+
+% feel free to plot the knots by uncommenting
+ plot(file(1:M/Z,1),file(1:M/Z,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri3d/construct_phantom.m b/applications/mri/mri3d/construct_phantom.m
new file mode 100644
index 0000000..98804ff
--- /dev/null
+++ b/applications/mri/mri3d/construct_phantom.m
@@ -0,0 +1,88 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = construct_phantom( N, Z )
+% constructs a three dimensional Shepp Logan phantom
+
+% The phantom will be a little bit smaller than N
+% because of aliasing effects
+%N_=N/8*5;
+N_=N;
+
+% The specs of the phantom
+A = [1.0 0.69 0.92 0.0 0.0 0;
+     0.1 0.6624 0.874 0.0 -0.0184 0;
+     0.4 0.11 0.31 0.22 0.0 18;
+     0.4 0.16 0.41 -0.22 0.0 -18;
+     0.55 0.21 0.25 0.0 0.35 0;
+     0.55 0.046 0.046 0.0 0.1 0;
+     0.55 0.046 0.046 0.0 -0.1 0;
+     0.55 0.046 0.023 -0.08 -0.605 0;
+     0.55 0.023 0.023 0.0 -0.606 0;
+     0.55 0.023 0.046 0.06 -0.605 0];
+
+% compute the phantom
+B = zeros(N_,N_,Z);
+for l=1:10,
+  for z=1:Z,
+    for y=1:N_,
+      for x=1:N_,
+        x_=    x /(N_/2)-1;
+        y_=    y /(N_/2)-1;
+        r = sqrt(x_^2+y_^2);
+        if x_==0 & y_==0,
+          phi=0;
+          elseif x_ >= 0 & y_ >= 0,
+            phi=asin(y_/r);
+          elseif x_ < 0 & y_ > 0,
+            phi=asin(-y_/r)+pi;
+          elseif x_ <= 0 & y_ <= 0,
+            phi=asin(-y_/r)+pi;
+          elseif x_ > 0 & y_ < 0,
+            phi=asin(y_/r);
+          end
+          if(((r*cos(pi*A(l,6)/180+phi)+A(l,4))/A(l,2))^2+...
+          ((r*sin(pi*A(l,6)/180+phi)+A(l,5))/A(l,3))^2+...
+          ((z/(Z/2)-1)/A(l,3))^2 <= 1 ),
+            if B(x,y,z) > 0.1 & l>2,
+              B(x,y,z) = B(x,y,z) +A(l,1);
+            else
+              B(x,y,z) = A(l,1);
+            end
+          end
+      end
+    end
+  end
+end
+
+% place the matrix B in the middle of the matrix C
+C=zeros(N,N,Z);
+C(N/2-N_/2+1:N/2+N_/2,N/2-N_/2+1:N/2+N_/2,:)=B;
+B=C;
+
+% rotate the matrix B
+for z=1:Z,
+  B(:,:,z)=rot90(rot90(rot90((B(:,:,z)))));
+end
+
+output=zeros(Z,N*N);
+
+for z_=0:Z-1,
+  output(z_+1,:)=reshape(B(:,:,z_+1),1,N*N);
+end
+
+save input_f.dat -ascii output
diff --git a/applications/mri/mri3d/doxygen.h b/applications/mri/mri3d/doxygen.h
new file mode 100644
index 0000000..3d9ccae
--- /dev/null
+++ b/applications/mri/mri3d/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_mri3d 3D transforms
+ * \ingroup applications_mri
+ */
diff --git a/applications/mri/mri3d/mri.m b/applications/mri/mri3d/mri.m
new file mode 100644
index 0000000..2b91510
--- /dev/null
+++ b/applications/mri/mri3d/mri.m
@@ -0,0 +1,91 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mri.m 3776 2012-06-03 13:29:25Z keiner $
+% This script file is an example of the usage
+
+N=48;   % points per row / column
+Z=48;    % number of slices
+
+% Construct the raw data of the phantom
+% and write it to input_f.dat
+% To use another example than the phantom
+% just put the reshape of your example into input_f.dat
+construct_phantom(N,Z);
+
+% Construct the knots in k-space and write them to knots.dat
+% Different knots like spiral,rose,radial,radial_3d or linogram can be chosen
+% The radial_3d knots just work with construct_data_3d and reconstruct_data_3d
+% Then the weights are generated in construct_knots_radial_3d
+% M is the number of knots
+M = construct_knots_spiral(N,Z);
+
+% First make N^2 1d-FFT, then Z 2d-NFFT on the constructed knots
+% and write the output to output_phantom_nfft.dat
+system(['./construct_data_2d1d ' 'output_phantom_nfft.dat '...
+         int2str(N) ' ' int2str(M) ' ' int2str(Z)]);
+
+% Precompute the weights using voronoi cells
+% and write them to weights.dat
+precompute_weights_2d('output_phantom_nfft.dat',M,Z);
+
+% First make Z inverse 2d-NFFT, then N^2 inverse 1d-FFT
+% and write the output to output_real.dat and output_imag.dat
+% The usage is "./reconstruct_data_2d1d filename N M Z ITER WEIGHTS"
+% where ITER is the number of iteration and WEIGHTS is 1
+% if the weights are used 0 else
+system(['./reconstruct_data_2d1d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M) ' ' int2str(Z)  ' 3 1']);
+
+% Visualize the three dimensional phantom. Makes a pic of
+% every slice and one plot of the N/2 row of the 10th plane.
+visualize_data('pics_2+1d/pic', N, Z, 1, 'Inverse 2d1d-NFFT - 3. iteration - spiral knots');
+
+% Compute the root mean square
+ rms('pics_2+1d/rms.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The same as above but reconstructed with gridding.
+% That means first an adjoint 2d-NFFT, then a 1d-FFT.
+% The ITER parameter is obsolent and just for compatibility
+system(['./reconstruct_data_gridding ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M) ' ' int2str(Z)  ' 0 1']);
+visualize_data('pics_gridding/pic', N, Z, 2, 'Adjoint 2d1d-NFFT (Gridding) - spiral knots');
+rms('pics_gridding/rms.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The same as above but reconstructed with a 3d-nfft
+system(['./reconstruct_data_3d ' 'output_phantom_nfft.dat ' ...
+         int2str(N) ' ' int2str(M) ' ' int2str(Z)  ' 1 1']);
+visualize_data('pics_3d/pic', N, Z, 3, 'Inverse 3d-NFFT - 1. iteration - spiral knots');
+rms('pics_3d/rms.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% An example with the radial_3d knots
+% please uncomment to try
+
+%M = construct_knots_radial_3d(N,N*3/2);
+
+%system(['./construct_data_3d ' 'output_phantom_nfft.dat '...
+%         int2str(N) ' ' int2str(M) ' ' int2str(Z)]);
+
+%system(['./reconstruct_data_3d ' 'output_phantom_nfft.dat ' ...
+%         int2str(N) ' ' int2str(M) ' ' int2str(Z)  ' 3 1']);
+%visualize_data('pics_3d/pic_', N, Z, 4, 'Inverse 3d-NFFT - 3. iteration - radial_3d knots');
+%rms('pics_3d/rms.txt');
diff --git a/applications/mri/mri3d/precompute_weights_2d.m b/applications/mri/mri3d/precompute_weights_2d.m
new file mode 100644
index 0000000..2b98e07
--- /dev/null
+++ b/applications/mri/mri3d/precompute_weights_2d.m
@@ -0,0 +1,77 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: precompute_weights_2d.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = precompute_weights_2d ( file,M,Z )
+
+input=load(file);
+
+kx = input(1:M/Z,1);
+ky = input(1:M/Z,2);
+
+kxy=[kx ky];
+
+% compute the voronoi regions
+[V,C] = voronoin(kxy,{'QJ'});
+
+% the surface of the knots is written to area
+area = [];
+
+% sum of all surfaces
+sum_area = 0;
+
+% the maximum distance two nearest neighbour have
+% to get the surface we store max_distance^2
+max_distance=0;
+
+% compute the surface of the knots
+for j= 1:length(kxy)
+  x = V(C{j},1);
+  y = V(C{j},2);
+  lxy = length(x);
+  if(lxy==0) % a knot exists more than one time
+    A=0;
+  else
+    A = abs(sum(0.5*(x([2:lxy 1])-x(:)).* ...
+        (y([2:lxy 1]) + y(:))));
+  end
+  area = [area A];
+  min_distance = min((2*(x-kxy(j,1))).^2+(2*(y-kxy(j,2))).^2);
+  max_distance = max([max_distance min_distance]);
+end
+
+% if the surface of a knot is bigger than max_distance^2
+% or isnan or isinf, then take max_distance^2
+for j=1:length(area),
+  if(isnan(area(j)) | isinf(area(j))| area(j)>max_distance),
+    area(j)=max_distance;
+  end
+  sum_area = sum_area + area(j);
+end
+
+% norm the weights
+area = area / sum_area;
+
+
+% stack the weights for every slice
+out=[];
+for z=0:Z-1,
+  out=[out area];
+end
+
+save weights.dat -ascii out
+
+
diff --git a/applications/mri/mri3d/reconstruct_data_2d1d.c b/applications/mri/mri3d/reconstruct_data_2d1d.c
new file mode 100644
index 0000000..f118c43
--- /dev/null
+++ b/applications/mri/mri3d/reconstruct_data_2d1d.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_reconstruct_data_1d2d reconstruct_data_1d2d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * reconstruct makes an inverse 2d-nfft for every slice
+ */
+static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weight, fftw_complex *mem)
+{
+  int j,k,l,z;                  /* some variables  */
+  double real,imag;             /* to read the real and imag part of a complex number */
+  nfft_plan my_plan;            /* plan for the two dimensional nfft  */
+  solver_plan_complex my_iplan; /* plan for the two dimensional infft */
+  FILE* fin;                    /* input file */
+  int my_N[2],my_n[2];          /* to init the nfft */
+  double tmp, epsilon=0.0000003;/* tmp to read the obsolent z from the input file
+                                   epsilon is the break criterium for
+                                   the iteration */
+  unsigned infft_flags = CGNR | PRECOMPUTE_DAMP; /* flags for the infft */
+
+  /* initialise my_plan */
+  my_N[0]=N;my_n[0]=ceil(N*1.2);
+  my_N[1]=N; my_n[1]=ceil(N*1.2);
+  nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|
+                         MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+                        FFTW_INIT| FFT_OUT_OF_PLACE,
+                        FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /* precompute lin psi if set */
+  if(my_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_plan);
+
+  /* set the flags for the infft*/
+  if (weight)
+    infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+  /* initialise my_iplan, advanced */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+  /* get the weights */
+  if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+  {
+    fin=fopen("weights.dat","r");
+    for(j=0;j<my_plan.M_total;j++)
+    {
+        fscanf(fin,"%le ",&my_iplan.w[j]);
+    }
+    fclose(fin);
+  }
+
+  /* get the damping factors */
+  if(my_iplan.flags & PRECOMPUTE_DAMP)
+  {
+    for(j=0;j<N;j++){
+      for(k=0;k<N;k++) {
+        int j2= j-N/2;
+        int k2= k-N/2;
+        double r=sqrt(j2*j2+k2*k2);
+        if(r>(double) N/2)
+          my_iplan.w_hat[j*N+k]=0.0;
+        else
+          my_iplan.w_hat[j*N+k]=1.0;
+      }
+    }
+  }
+
+  /* open the input file */
+  fin=fopen(filename,"r");
+
+  /* For every Layer*/
+  for(z=0;z<Z;z++) {
+
+    /* read x,y,freal and fimag from the knots */
+    for(j=0;j<my_plan.M_total;j++)
+    {
+      fscanf(fin,"%le %le %le %le %le ",&my_plan.x[2*j+0],&my_plan.x[2*j+1], &tmp,
+      &real,&imag);
+      my_iplan.y[j] = real + _Complex_I*imag;
+    }
+
+    /* precompute psi if set just one time because the knots equal each plane */
+    if(z==0 && my_plan.nfft_flags & PRE_PSI)
+      nfft_precompute_psi(&my_plan);
+
+    /* precompute full psi if set just one time because the knots equal each plane */
+    if(z==0 && my_plan.nfft_flags & PRE_FULL_PSI)
+      nfft_precompute_full_psi(&my_plan);
+
+    /* init some guess */
+    for(k=0;k<my_plan.N_total;k++)
+      my_iplan.f_hat_iter[k]=0.0;
+
+    /* inverse trafo */
+    solver_before_loop_complex(&my_iplan);
+    for(l=0;l<iteration;l++)
+    {
+      /* break if dot_r_iter is smaller than epsilon*/
+      if(my_iplan.dot_r_iter<epsilon)
+      break;
+      fprintf(stderr,"%e,  %i of %i\n",sqrt(my_iplan.dot_r_iter),
+      iteration*z+l+1,iteration*Z);
+      solver_loop_one_step_complex(&my_iplan);
+    }
+    for(k=0;k<my_plan.N_total;k++) {
+      /* write every slice in the memory.
+      here we make an fftshift direct */
+      mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_iplan.f_hat_iter[k];
+    }
+  }
+
+  fclose(fin);
+
+  /* finalize the infft */
+  solver_finalize_complex(&my_iplan);
+
+  /* finalize the nfft */
+  nfft_finalize(&my_plan);
+}
+
+/**
+ * print writes the memory back in a file
+ * output_real.dat for the real part and output_imag.dat for the imaginary part
+ */
+static void print(int N,int M,int Z, fftw_complex *mem)
+{
+  int i,j;
+  FILE* fout_real;
+  FILE* fout_imag;
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for(i=0;i<Z;i++) {
+    for (j=0;j<N*N;j++) {
+      fprintf(fout_real,"%le ",creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+      fprintf(fout_imag,"%le ",cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+    }
+    fprintf(fout_real,"\n");
+    fprintf(fout_imag,"\n");
+  }
+
+  fclose(fout_real);
+  fclose(fout_imag);
+}
+
+int main(int argc, char **argv)
+{
+  fftw_complex *mem;
+  fftw_plan plan;
+  int N,M,Z;
+
+  if (argc <= 6) {
+    printf("usage: ./reconstruct FILENAME N M Z ITER WEIGHTS\n");
+    return 1;
+  }
+
+  N=atoi(argv[2]);
+  M=atoi(argv[3]);
+  Z=atoi(argv[4]);
+
+  /* Allocate memory to hold every layer in memory after the
+  2D-infft */
+  mem = (fftw_complex*) nfft_malloc(sizeof(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));
+
+  /* Create plan for the 1d-ifft */
+  plan = fftw_plan_many_dft(1, &Z, N*N,
+                                  mem, NULL,
+                                  N*N, 1,
+                                  mem, NULL,
+                                  N*N,1 ,
+                                  FFTW_BACKWARD, FFTW_MEASURE);
+
+  /* execute the 2d-infft's */
+  reconstruct(argv[1],N,M,Z,atoi(argv[5]),atoi(argv[6]),mem);
+
+  /* execute the 1d-fft's */
+  fftw_execute(plan);
+
+  /* write the memory back in files */
+  print(N,M,Z, mem);
+
+  /* free memory */
+  nfft_free(mem);
+  fftw_destroy_plan(plan);
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/reconstruct_data_3d.c b/applications/mri/mri3d/reconstruct_data_3d.c
new file mode 100644
index 0000000..1cb8799
--- /dev/null
+++ b/applications/mri/mri3d/reconstruct_data_3d.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_reconstruct_data_3d reconstruct_data_3d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * reconstruct makes an inverse 3d-nfft
+ */
+static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weight)
+{
+  int j,k,z,l;                  /* some variables  */
+  double real,imag;             /* to read the real and imag part of a complex number */
+  nfft_plan my_plan;            /* plan for the two dimensional nfft  */
+  solver_plan_complex my_iplan;          /* plan for the two dimensional infft */
+  FILE* fin;                    /* input file                         */
+  FILE* fout_real;              /* output file (real part) */
+  FILE* fout_imag;              /* output file (imag part) */
+  int my_N[3],my_n[3];          /* to init the nfft */
+  double epsilon=0.0000003;     /* tmp to read the obsolent z from 700.acs
+                                   epsilon is a the break criterion for
+                                   the iteration */
+  unsigned infft_flags = CGNR | PRECOMPUTE_DAMP;  /* flags for the infft */
+
+  /* initialise my_plan, specific.
+     we don't precompute psi */
+  my_N[0]=Z; my_n[0]=ceil(Z*1.2);
+  my_N[1]=N; my_n[1]=ceil(N*1.2);
+  my_N[2]=N; my_n[2]=ceil(N*1.2);
+  nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,
+                      PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+                      MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,
+                      FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /* precompute lin psi */
+  if(my_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_plan);
+
+  if (weight)
+    infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+  /* initialise my_iplan, advanced */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+  /* get the weights */
+  if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+  {
+    fin=fopen("weights.dat","r");
+    for(j=0;j<M;j++)
+    {
+      fscanf(fin,"%le ",&my_iplan.w[j]);
+    }
+    fclose(fin);
+  }
+
+  /* get the damping factors */
+  if(my_iplan.flags & PRECOMPUTE_DAMP)
+  {
+    for(j=0;j<N;j++){
+      for(k=0;k<N;k++) {
+        for(z=0;z<N;z++) {
+        int j2= j-N/2;
+        int k2= k-N/2;
+        int z2= z-N/2;
+        double r=sqrt(j2*j2+k2*k2+z2*z2);
+        if(r>(double) N/2)
+          my_iplan.w_hat[z*N*N+j*N+k]=0.0;
+        else
+          my_iplan.w_hat[z*N*N+j*N+k]=1.0;
+        }
+      }
+    }
+  }
+
+  /* open the input file */
+  fin=fopen(filename,"r");
+
+  /* open the output files */
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  /* read x,y,freal and fimag from the knots */
+  for(j=0;j<M;j++)
+  {
+    fscanf(fin,"%le %le %le %le %le ",&my_plan.x[3*j+1],&my_plan.x[3*j+2], &my_plan.x[3*j+0],
+    &real,&imag);
+    my_iplan.y[j] = real + _Complex_I*imag;
+  }
+
+  /* precompute psi */
+  if(my_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_plan);
+
+  /* precompute full psi */
+  if(my_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_plan);
+
+  /* init some guess */
+  for(k=0;k<my_plan.N_total;k++)
+    my_iplan.f_hat_iter[k]=0.0;
+
+  /* inverse trafo */
+  solver_before_loop_complex(&my_iplan);
+  for(l=0;l<iteration;l++)
+  {
+    /* break if dot_r_iter is smaller than epsilon*/
+    if(my_iplan.dot_r_iter<epsilon)
+      break;
+    fprintf(stderr,"%e,  %i of %i\n",sqrt(my_iplan.dot_r_iter),
+    l+1,iteration);
+    solver_loop_one_step_complex(&my_iplan);
+  }
+
+  for(l=0;l<Z;l++)
+  {
+    for(k=0;k<N*N;k++)
+    {
+      /* write every Layer in the files */
+      fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[ k+N*N*l ]));
+      fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[ k+N*N*l ]));
+    }
+    fprintf(fout_real,"\n");
+    fprintf(fout_imag,"\n");
+  }
+
+  fclose(fout_real);
+  fclose(fout_imag);
+
+  solver_finalize_complex(&my_iplan);
+  nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+  if (argc <= 6) {
+    printf("usage: ./reconstruct3D FILENAME N M Z ITER WEIGHTS\n");
+    return 1;
+  }
+
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/reconstruct_data_gridding.c b/applications/mri/mri3d/reconstruct_data_gridding.c
new file mode 100644
index 0000000..69136e8
--- /dev/null
+++ b/applications/mri/mri3d/reconstruct_data_gridding.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_reconstruct_data_gridding reconstruct_data_gridding
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * reconstruct makes an 2d-adjoint-nfft for every slice
+ */
+static void reconstruct(char* filename,int N,int M,int Z, int weight ,fftw_complex *mem)
+{
+  int j,k,z;               /* some variables  */
+  double weights;          /* store one weight temporary */
+  double tmp;              /* tmp to read the obsolent z from the input file */
+  double real,imag;        /* to read the real and imag part of a complex number */
+  nfft_plan my_plan;       /* plan for the two dimensional nfft  */
+  int my_N[2],my_n[2];     /* to init the nfft */
+  FILE* fin;               /* input file  */
+  FILE* fweight;           /* input file for the weights */
+
+  /* initialise my_plan */
+  my_N[0]=N; my_n[0]=ceil(N*1.2);
+  my_N[1]=N; my_n[1]=ceil(N*1.2);
+  nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|
+                        MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+                        FFTW_INIT| FFT_OUT_OF_PLACE,
+                        FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /* precompute lin psi if set */
+  if(my_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_plan);
+
+  fin=fopen(filename,"r");
+
+  for(z=0;z<Z;z++) {
+    fweight=fopen("weights.dat","r");
+    for(j=0;j<my_plan.M_total;j++)
+    {
+      fscanf(fweight,"%le ",&weights);
+      fscanf(fin,"%le %le %le %le %le",
+             &my_plan.x[2*j+0],&my_plan.x[2*j+1],&tmp,&real,&imag);
+      my_plan.f[j] = real + _Complex_I*imag;
+      if(weight)
+        my_plan.f[j] = my_plan.f[j] * weights;
+    }
+    fclose(fweight);
+
+    /* precompute psi if set just one time because the knots equal each slice */
+    if(z==0 && my_plan.nfft_flags & PRE_PSI)
+      nfft_precompute_psi(&my_plan);
+
+    /* precompute full psi if set just one time because the knots equal each slice */
+    if(z==0 && my_plan.nfft_flags & PRE_FULL_PSI)
+      nfft_precompute_full_psi(&my_plan);
+
+    /* compute the adjoint nfft */
+    nfft_adjoint(&my_plan);
+
+    for(k=0;k<my_plan.N_total;k++) {
+      /* write every slice in the memory.
+      here we make an fftshift direct */
+      mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_plan.f_hat[k];
+    }
+  }
+  fclose(fin);
+
+  nfft_finalize(&my_plan);
+}
+
+ /**
+ * print writes the memory back in a file
+ * output_real.dat for the real part and output_imag.dat for the imaginary part
+ */
+static void print(int N,int M,int Z, fftw_complex *mem)
+{
+  int i,j;
+  FILE* fout_real;
+  FILE* fout_imag;
+  fout_real=fopen("output_real.dat","w");
+  fout_imag=fopen("output_imag.dat","w");
+
+  for(i=0;i<Z;i++) {
+    for (j=0;j<N*N;j++) {
+      fprintf(fout_real,"%le ",creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+      fprintf(fout_imag,"%le ",cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+    }
+    fprintf(fout_real,"\n");
+    fprintf(fout_imag,"\n");
+  }
+
+  fclose(fout_real);
+  fclose(fout_imag);
+}
+
+
+int main(int argc, char **argv)
+{
+  fftw_complex *mem;
+  fftw_plan plan;
+  int N,M,Z;
+
+  if (argc <= 6) {
+    printf("usage: ./reconstruct_data_gridding FILENAME N M Z ITER WEIGHTS\n");
+    return 1;
+  }
+
+  N=atoi(argv[2]);
+  M=atoi(argv[3]);
+  Z=atoi(argv[4]);
+
+  /* Allocate memory to hold every slice in memory after the
+  2D-infft */
+  mem = (fftw_complex*) nfft_malloc(sizeof(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));
+
+  /* Create plan for the 1d-ifft */
+  plan = fftw_plan_many_dft(1, &Z, N*N,
+                                  mem, NULL,
+                                  N*N, 1,
+                                  mem, NULL,
+                                  N*N,1 ,
+                                  FFTW_BACKWARD, FFTW_MEASURE);
+
+  /* execute the 2d-nfft's */
+  reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[6]),mem);
+
+  /* execute the 1d-fft's */
+  fftw_execute(plan);
+
+  /* write the memory back in files */
+  print(N,M,Z, mem);
+
+  /* free memory */
+  nfft_free(mem);
+
+  return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/rms.m b/applications/mri/mri3d/rms.m
new file mode 100644
index 0000000..6335d03
--- /dev/null
+++ b/applications/mri/mri3d/rms.m
@@ -0,0 +1,32 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: rms.m 3776 2012-06-03 13:29:25Z keiner $
+% computes the root mean square
+function [] = rms ( file )
+% load original data f
+load input_f.dat
+% load recontructed data f~
+load output_real.dat
+load output_imag.dat
+output = output_real+i*output_imag;
+
+% compute
+result = (norm(input_f - output) / norm(input_f) );
+
+
+% write the root mean square to file
+save(file,'result','-ascii');
diff --git a/applications/mri/mri3d/visualize_data.m b/applications/mri/mri3d/visualize_data.m
new file mode 100644
index 0000000..4bd458e
--- /dev/null
+++ b/applications/mri/mri3d/visualize_data.m
@@ -0,0 +1,54 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: visualize_data.m 3776 2012-06-03 13:29:25Z keiner $
+% Visualizes the three dimensional phantom. Makes a pic of
+% every plane and one plot of the N/2 row of the 10th plane.
+function [] = visualize_data ( file, N, Z, num_fig, caption )
+
+% load the real part of f
+load output_real.dat
+
+for z=0:Z-1,
+  for y=0:N-1,
+    for x =0:N-1,
+      A(x+1,y+1,z+1)=output_real(z+1,y*N+ x+1);
+     end
+   end
+end
+
+% plot the three dimensional phantom
+for j=0:Z-1,
+  figure(2*num_fig-1)
+  imagesc(A(:,:,j+1),[0 1]);
+  colorbar;
+  colormap(flipud(gray(256)));
+  title(caption);
+  if j<9,
+    file_out =[file '0' int2str(j+1) '.jpg'];
+  else
+    file_out =[file int2str(j+1) '.jpg'];
+  end
+  print('-djpeg',file_out);
+end
+
+% plot the N/2 row of the 10 plane
+figure(2*num_fig)
+file_out = [file 'row' '.png'];
+plot(1:N,A(:,N/2,Z/2));
+axis([1 N 0 1.2]);
+title([caption ' - The ' int2str(N/2) 'th row']);
+print('-djpeg',file_out);
diff --git a/applications/polarFFT/Makefile.am b/applications/polarFFT/Makefile.am
new file mode 100644
index 0000000..3fac460
--- /dev/null
+++ b/applications/polarFFT/Makefile.am
@@ -0,0 +1,16 @@
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = polar_fft_test mpolar_fft_test linogram_fft_test
+
+polar_fft_test_SOURCES = polar_fft_test.c doxygen.h
+polar_fft_test_LDADD = $(top_builddir)/libnfft3.la
+
+mpolar_fft_test_SOURCES = mpolar_fft_test.c
+mpolar_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+linogram_fft_test_SOURCES = linogram_fft_test.c
+linogram_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = phantom.m fft_test.m README
diff --git a/applications/polarFFT/Makefile.in b/applications/polarFFT/Makefile.in
new file mode 100644
index 0000000..749f26a
--- /dev/null
+++ b/applications/polarFFT/Makefile.in
@@ -0,0 +1,576 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = polar_fft_test$(EXEEXT) mpolar_fft_test$(EXEEXT) \
+	linogram_fft_test$(EXEEXT)
+subdir = applications/polarFFT
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_linogram_fft_test_OBJECTS = linogram_fft_test.$(OBJEXT)
+linogram_fft_test_OBJECTS = $(am_linogram_fft_test_OBJECTS)
+linogram_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_mpolar_fft_test_OBJECTS = mpolar_fft_test.$(OBJEXT)
+mpolar_fft_test_OBJECTS = $(am_mpolar_fft_test_OBJECTS)
+mpolar_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_polar_fft_test_OBJECTS = polar_fft_test.$(OBJEXT)
+polar_fft_test_OBJECTS = $(am_polar_fft_test_OBJECTS)
+polar_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(linogram_fft_test_SOURCES) $(mpolar_fft_test_SOURCES) \
+	$(polar_fft_test_SOURCES)
+DIST_SOURCES = $(linogram_fft_test_SOURCES) $(mpolar_fft_test_SOURCES) \
+	$(polar_fft_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+polar_fft_test_SOURCES = polar_fft_test.c doxygen.h
+polar_fft_test_LDADD = $(top_builddir)/libnfft3.la
+mpolar_fft_test_SOURCES = mpolar_fft_test.c
+mpolar_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+linogram_fft_test_SOURCES = linogram_fft_test.c
+linogram_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = phantom.m fft_test.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/polarFFT/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/polarFFT/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+linogram_fft_test$(EXEEXT): $(linogram_fft_test_OBJECTS) $(linogram_fft_test_DEPENDENCIES) $(EXTRA_linogram_fft_test_DEPENDENCIES) 
+	@rm -f linogram_fft_test$(EXEEXT)
+	$(LINK) $(linogram_fft_test_OBJECTS) $(linogram_fft_test_LDADD) $(LIBS)
+mpolar_fft_test$(EXEEXT): $(mpolar_fft_test_OBJECTS) $(mpolar_fft_test_DEPENDENCIES) $(EXTRA_mpolar_fft_test_DEPENDENCIES) 
+	@rm -f mpolar_fft_test$(EXEEXT)
+	$(LINK) $(mpolar_fft_test_OBJECTS) $(mpolar_fft_test_LDADD) $(LIBS)
+polar_fft_test$(EXEEXT): $(polar_fft_test_OBJECTS) $(polar_fft_test_DEPENDENCIES) $(EXTRA_polar_fft_test_DEPENDENCIES) 
+	@rm -f polar_fft_test$(EXEEXT)
+	$(LINK) $(polar_fft_test_OBJECTS) $(polar_fft_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linogram_fft_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mpolar_fft_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/polar_fft_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/polarFFT/README b/applications/polarFFT/README
new file mode 100644
index 0000000..f8af55f
--- /dev/null
+++ b/applications/polarFFT/README
@@ -0,0 +1,20 @@
+polarFFT
+
+  These are examples of the application of the NFFT for the computation of the
+
+  - polar FFT: polar_fft_test.c
+
+  - modified polar FFT: mpolar_fft_test.c
+
+  - pseudopolar (linogram) FFT: linogram_fft_test.c.
+
+  Use the Matlab script file fft_test.m for a demonstration.
+
+
+  Reference:
+
+ [1]  M. Fenn, S. Kunis, and D. Potts. On the computation of the polar FFT.
+      Appl. Comput. Harmon. Anal., accepted.
+
+ [2]  D. Potts, and G. Steidl, G. A new linogram algorithm for computerized 
+      tomography. IMA J. Numer. Anal. 21, 769-782, 2001
diff --git a/applications/polarFFT/doxygen.h b/applications/polarFFT/doxygen.h
new file mode 100644
index 0000000..7868ac3
--- /dev/null
+++ b/applications/polarFFT/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_polarFFT Polar FFT
+ * \ingroup applications
+ */
diff --git a/applications/polarFFT/fft_test.m b/applications/polarFFT/fft_test.m
new file mode 100644
index 0000000..6be6257
--- /dev/null
+++ b/applications/polarFFT/fft_test.m
@@ -0,0 +1,124 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fft_test.m 3776 2012-06-03 13:29:25Z keiner $
+N=64;
+T=3*N; %T=5*N/2;
+R=3*N/2;
+
+
+f=fft2(phantom(N));
+%f=imresize(im2double(imread('trui.png')),N/256);
+fr=real(f); fi=imag(f);
+save 'input_data_r.dat' fr -ascii -double
+save 'input_data_i.dat' fi -ascii -double
+
+
+system(sprintf('./polar_fft_test %d %d %d',N,T,R));
+
+polar_fft_error = load('polar_fft_error.dat');
+polar_ifft_error3 = load('polar_ifft_error3.dat');
+polar_ifft_error6 = load('polar_ifft_error6.dat');
+polar_ifft_error9 = load('polar_ifft_error9.dat');
+
+figure(1);
+h=semilogy(1:length(polar_fft_error),polar_fft_error);
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+axis([0,10,10^-15,1]);
+title('Test of the polar FFT');
+xlabel('m');
+ylabel('E_{max}');
+print fig_polar_fft -deps2
+
+figure(2);
+it=0:10:100;
+h=plot(it,polar_ifft_error3,'-',it,polar_ifft_error6,'--',it,polar_ifft_error9,'-.');
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+title('Test of the inverse polar FFT');
+xlabel('iterations');
+ylabel('E_{max}');
+legend('m=3','m=6','m=9');
+print fig_ipolar_fft -deps2
+
+disp(sprintf('\n'));
+
+
+system(sprintf('./mpolar_fft_test %d %d %d',N,T,R));
+
+mpolar_fft_error = load('mpolar_fft_error.dat');
+mpolar_ifft_error3 = load('mpolar_ifft_error3.dat');
+mpolar_ifft_error6 = load('mpolar_ifft_error6.dat');
+mpolar_ifft_error9 = load('mpolar_ifft_error9.dat');
+
+figure(3);
+h=semilogy(1:length(mpolar_fft_error),mpolar_fft_error);
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+axis([0,10,10^-15,1]);
+title('Test of the mpolar FFT');
+xlabel('m');
+ylabel('E_{max}');
+print fig_mpolar_fft -deps2
+
+figure(4);
+it=0:2:20;
+h=semilogy(it,mpolar_ifft_error3,'-',it,mpolar_ifft_error6,'--',it,mpolar_ifft_error9,'-.');
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+title('Test of the inverse mpolar FFT');
+xlabel('iterations');
+ylabel('E_{max}');
+legend('m=3','m=6','m=9');
+print fig_impolar_fft -deps2
+
+disp(sprintf('\n'));
+
+
+system(sprintf('./linogram_fft_test %d %d %d',N,T,R));
+
+linogram_fft_error = load('linogram_fft_error.dat');
+linogram_ifft_error3 = load('linogram_ifft_error3.dat');
+linogram_ifft_error6 = load('linogram_ifft_error6.dat');
+linogram_ifft_error9 = load('linogram_ifft_error9.dat');
+
+figure(5);
+h=semilogy(1:length(linogram_fft_error),linogram_fft_error);
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+axis([0,10,10^-15,1]);
+title('Test of the linogram FFT');
+xlabel('m');
+ylabel('E_{max}');
+print fig_lino_fft -deps2
+
+figure(6);
+it=0:2:20;
+h=semilogy(it,linogram_ifft_error3,'-',it,linogram_ifft_error6,'--',it,linogram_ifft_error9,'-.');
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+title('Test of the inverse linogram FFT');
+xlabel('iterations');
+ylabel('E_{max}');
+legend('m=3','m=6','m=9');
+print fig_ilino_fft -deps2
diff --git a/applications/polarFFT/linogram_fft_test.c b/applications/polarFFT/linogram_fft_test.c
new file mode 100644
index 0000000..73529fa
--- /dev/null
+++ b/applications/polarFFT/linogram_fft_test.c
@@ -0,0 +1,489 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: linogram_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file polarFFT/linogram_fft_test.c
+ * \brief NFFT-based pseudo-polar FFT and inverse.
+ *
+ * Computes the NFFT-based pseudo-polar FFT and its inverse.
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_polarFFT_linogramm linogram_fft_test
+ * \ingroup applications_polarFFT
+ * \{
+ */
+
+double GLOBAL_elapsed_time;
+
+/** Generates the points x with weights w
+ *  for the linogram grid with T slopes and R offsets.
+ */
+static int linogram_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R/2; r<R/2; r++)
+    {
+      if(t<0)
+      {
+        x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
+        x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+      }
+      else
+      {
+        x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
+        x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+      }
+      if (r==0)
+        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      else
+        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+    }
+  }
+
+  return T*R;                           /** return the number of knots        */
+}
+
+/** discrete pseudo-polar FFT */
+static int linogram_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+  ticks t0, t1;
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M=T*R;                            /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init nodes from linogram grid*/
+  linogram_grid(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f_hat[k];
+
+  /** NFFT-2D */
+  t0 = getticks();
+  nfft_trafo_direct(&my_nfft_plan);
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+  /** copy result */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+    f[j] = my_nfft_plan.f[j];
+
+  /** finalise the plans and free the variables */
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** NFFT-based pseudo-polar FFT */
+static int linogram_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+  ticks t0, t1;
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M=T*R;                            /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init nodes from linogram grid*/
+  linogram_grid(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f_hat[k];
+
+  /** NFFT-2D */
+  t0 = getticks();
+  nfft_trafo(&my_nfft_plan);
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+  /** copy result */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+    f[j] = my_nfft_plan.f[j];
+
+  /** finalise the plans and free the variables */
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** NFFT-based inverse pseudo-polar FFT */
+static int inverse_linogram_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+{
+  ticks t0, t1;
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+
+  double *x, *w;                        /**< knots and associated weights     */
+  int l;                                /**< index for iterations             */
+
+  int N[2],n[2];
+  int M=T*R;                            /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init two dimensional infft plan */
+  solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+
+  /** init nodes, given samples and weights */
+  linogram_grid(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_infft_plan.y[j]    = f[j];
+    my_infft_plan.w[j]    = w[j];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** initialise damping factors */
+  if(my_infft_plan.flags & PRECOMPUTE_DAMP)
+    for(j=0;j<my_nfft_plan.N[0];j++)
+      for(k=0;k<my_nfft_plan.N[1];k++)
+  {
+    my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
+        (sqrt(pow(j-my_nfft_plan.N[0]/2,2)+pow(k-my_nfft_plan.N[1]/2,2))>(my_nfft_plan.N[0]/2)?0:1);
+  }
+
+  /** initialise some guess f_hat_0 */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+  t0 = getticks();
+  /** solve the system */
+  solver_before_loop_complex(&my_infft_plan);
+
+  if (max_i<1)
+  {
+    l=1;
+    for(k=0;k<my_nfft_plan.N_total;k++)
+      my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+  }
+  else
+  {
+    for(l=1;l<=max_i;l++)
+    {
+      solver_loop_one_step_complex(&my_infft_plan);
+    }
+  }
+
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+  /** copy result */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    f_hat[k] = my_infft_plan.f_hat_iter[k];
+
+  /** finalise the plans and free the variables */
+  solver_finalize_complex(&my_infft_plan);
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** Comparison of the FFTW, linogram FFT, and inverse linogram FFT */
+int comparison_fft(FILE *fp, int N, int T, int R)
+{
+  ticks t0, t1;
+  fftw_plan my_fftw_plan;
+  fftw_complex *f_hat,*f;
+  int m,k;
+  double t_fft, t_dft_linogram;
+
+  f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f     = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*(T*R/4)*5);
+
+  my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);
+
+  for(k=0; k<N*N; k++)
+    f_hat[k] = (((double)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);
+
+  t0 = getticks();
+  for(m=0;m<65536/N;m++)
+    {
+      fftw_execute(my_fftw_plan);
+      /* touch */
+      f_hat[2]=2*f_hat[0];
+    }
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  t_fft=N*GLOBAL_elapsed_time/65536;
+
+  if(N<256)
+    {
+      linogram_dft(f_hat,N,f,T,R,m);
+      t_dft_linogram=GLOBAL_elapsed_time;
+    }
+
+  for (m=3; m<=9; m+=3)
+    {
+      if((m==3)&&(N<256))
+        fprintf(fp,"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t",N,t_fft,t_dft_linogram,m);
+      else
+        if(m==3)
+	  fprintf(fp,"%d\t&\t&\t%1.1e&\t       &\t%d\t",N,t_fft,m);
+	else
+	  fprintf(fp,"  \t&\t&\t       &\t       &\t%d\t",m);
+
+      printf("N=%d\tt_fft=%1.1e\tt_dft_linogram=%1.1e\tm=%d\t",N,t_fft,t_dft_linogram,m);
+
+      linogram_fft(f_hat,N,f,T,R,m);
+      fprintf(fp,"%1.1e&\t",GLOBAL_elapsed_time);
+      printf("t_linogram=%1.1e\t",GLOBAL_elapsed_time);
+      inverse_linogram_fft(f,T,R,f_hat,N,m+3,m);
+      if(m==9)
+	fprintf(fp,"%1.1e\\\\\\hline\n",GLOBAL_elapsed_time);
+      else
+	fprintf(fp,"%1.1e\\\\\n",GLOBAL_elapsed_time);
+      printf("t_ilinogram=%1.1e\n",GLOBAL_elapsed_time);
+    }
+
+  fflush(fp);
+
+  nfft_free(f);
+  nfft_free(f_hat);
+
+  return EXIT_SUCCESS;
+}
+
+/** test program for various parameters */
+int main(int argc,char **argv)
+{
+  int N;                                /**< linogram FFT size NxN              */
+  int T, R;                             /**< number of directions/offsets     */
+  int M;                                /**< number of knots of linogram grid   */
+  double *x, *w;                        /**< knots and associated weights     */
+  fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+  int k;
+  int max_i;                            /**< number of iterations             */
+  int m;
+  double temp1, temp2, E_max=0.0;
+  FILE *fp1, *fp2;
+  char filename[30];
+  int logN;
+
+  if( argc!=4 )
+  {
+    printf("linogram_fft_test N T R \n");
+    printf("\n");
+    printf("N          linogram FFT of size NxN    \n");
+    printf("T          number of slopes          \n");
+    printf("R          number of offsets         \n");
+
+    /** Hence, comparison of the FFTW, linogram FFT, and inverse linogram FFT */
+    printf("\nHence, comparison FFTW, linogram FFT and inverse linogram FFT\n");
+    fp1=fopen("linogram_comparison_fft.dat","w");
+    if (fp1==NULL)
+	return(-1);
+    for (logN=4; logN<=8; logN++)
+	comparison_fft(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));
+    fclose(fp1);
+
+    exit(-1);
+  }
+
+  N = atoi(argv[1]);
+  T = atoi(argv[2]);
+  R = atoi(argv[3]);
+  printf("N=%d, linogram grid with T=%d, R=%d => ",N,T,R);
+
+  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+
+  f_hat    = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f        = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*5*T*R/4);  /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
+  f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*5*T*R/4);
+  f_tilde  = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+
+  /** generate knots of linogram grid */
+  M=linogram_grid(T,R,x,w); printf("M=%d.\n",M);
+
+  /** load data */
+  fp1=fopen("input_data_r.dat","r");
+  fp2=fopen("input_data_i.dat","r");
+  if ((fp1==NULL) || (fp2==NULL))
+    return(-1);
+  for(k=0;k<N*N;k++)
+  {
+    fscanf(fp1,"%le ",&temp1);
+    fscanf(fp2,"%le ",&temp2);
+    f_hat[k]=temp1+_Complex_I*temp2;
+  }
+  fclose(fp1);
+  fclose(fp2);
+
+  /** direct linogram FFT */
+      linogram_dft(f_hat,N,f_direct,T,R,1);
+  //  linogram_fft(f_hat,N,f_direct,T,R,12);
+
+  /** Test of the linogram FFT with different m */
+  printf("\nTest of the linogram FFT: \n");
+  fp1=fopen("linogram_fft_error.dat","w+");
+  for (m=1; m<=12; m++)
+  {
+    /** fast linogram FFT */
+    linogram_fft(f_hat,N,f,T,R,m);
+
+    /** error of fast linogram FFT */
+    E_max=X(error_l_infty_complex)(f_direct,f,M);
+    //E_max=X(error_l_2_complex)(f_direct,f,M);
+
+    printf("m=%2d: E_max = %e\n",m,E_max);
+    fprintf(fp1,"%e\n",E_max);
+  }
+  fclose(fp1);
+
+  /** Test of the inverse linogram FFT for different m in dependece of the iteration number*/
+  for (m=3; m<=9; m+=3)
+  {
+    printf("\nTest of the inverse linogram FFT for m=%d: \n",m);
+    sprintf(filename,"linogram_ifft_error%d.dat",m);
+    fp1=fopen(filename,"w+");
+    for (max_i=0; max_i<=20; max_i+=2)
+    {
+      /** inverse linogram FFT */
+      inverse_linogram_fft(f_direct,T,R,f_tilde,N,max_i,m);
+
+      /** compute maximum error */
+      E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
+      printf("%3d iterations: E_max = %e\n",max_i,E_max);
+      fprintf(fp1,"%e\n",E_max);
+    }
+    fclose(fp1);
+  }
+
+  /** free the variables */
+  nfft_free(x);
+  nfft_free(w);
+  nfft_free(f_hat);
+  nfft_free(f);
+  nfft_free(f_direct);
+  nfft_free(f_tilde);
+
+  return 0;
+}
+/* \} */
diff --git a/applications/polarFFT/mpolar_fft_test.c b/applications/polarFFT/mpolar_fft_test.c
new file mode 100644
index 0000000..0bb4e01
--- /dev/null
+++ b/applications/polarFFT/mpolar_fft_test.c
@@ -0,0 +1,517 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: mpolar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file polarFFT/mpolar_fft_test.c
+ * \brief NFFT-based polar FFT and inverse on  modified polar grid.
+ *
+ * Computes the NFFT-based polar FFT and its inverse
+ * on a modified polar grid for various parameters.
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_polarFFT_mpolar mpolar_fft_test
+ * \ingroup applications_polarFFT
+ * \{
+ */
+
+double GLOBAL_elapsed_time;
+
+/** Generates the points \f$x_{t,j}\f$ with weights \f$w_{t,j}\f$
+ *  for the modified polar grid with \f$T\f$ angles and \f$R\f$ offsets.
+ *
+ *  We add more concentric circles to the polar grid
+ *  and exclude those nodes not located in the unit square, i.e.,
+ *  \f[
+ *    x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,,\qquad
+ *    (j,t)^{\top}\in I_{\sqrt{2}R}\times I_T\,.
+ *  \f]
+ *  with \f$r_j\f$ and \f$\theta_t\f$ as for the polar grid.
+ *  The number of nodes for the modified polar grid can be estimated as
+ *  \f$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R\f$.
+ */
+static int mpolar_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W;
+  int R2=2*ceil(sqrt(2.0)*R/2);
+  double xx, yy;
+  int M=0;
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R2/2; r<R2/2; r++)
+    {
+      xx = (double)r/R*cos(PI*t/T);
+      yy = (double)r/R*sin(PI*t/T);
+
+      if ( ((-0.5-1.0/(double)R)<=xx) & (xx<=(0.5+1.0/(double)R)) &
+        ((-0.5-1.0/(double)R)<=yy) & (yy<=(0.5+1.0/(double)R)) )
+      {
+        x[2*M+0] = xx;
+        x[2*M+1] = yy;
+
+        if (r==0)
+          w[M] = 1.0/4.0;
+        else
+          w[M] = fabs((double)r);
+
+        M++; /** count the knots */
+      }
+    }
+  }
+
+   /** normalize the weights */
+   W=0.0;
+   for (t=0; t<M; t++)
+      W+=w[t];
+
+   for (t=0; t<M; t++)
+    w[t]/=W;
+
+  return M;                             /** return the number of knots        */
+}
+
+/** discrete mpolar FFT */
+static int mpolar_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+  ticks t0, t1;
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M;                                /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(5*(T/2)*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(5*(T*R)/4*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  M=mpolar_grid(T,R,x,w);
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init nodes from mpolar grid*/
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f_hat[k];
+
+  t0 = getticks();
+
+  /** NDFT-2D */
+  nfft_trafo_direct(&my_nfft_plan);
+
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+  /** copy result */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+    f[j] = my_nfft_plan.f[j];
+
+  /** finalise the plans and free the variables */
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** NFFT-based mpolar FFT */
+static int mpolar_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+  ticks t0, t1;
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M;                                /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  M=mpolar_grid(T,R,x,w);
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init nodes from mpolar grid*/
+
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f_hat[k];
+
+  t0 = getticks();
+
+  /** NFFT-2D */
+  nfft_trafo(&my_nfft_plan);
+
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+  /** copy result */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+    f[j] = my_nfft_plan.f[j];
+
+  /** finalise the plans and free the variables */
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** inverse NFFT-based mpolar FFT */
+static int inverse_mpolar_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+{
+  ticks t0, t1;
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+
+  double *x, *w;                        /**< knots and associated weights     */
+  int l;                                /**< index for iterations             */
+
+  int N[2],n[2];
+  int M;                                /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  M=mpolar_grid(T,R,x,w);
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init two dimensional infft plan */
+    solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+
+  /** init nodes, given samples and weights */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_infft_plan.y[j]    = f[j];
+    my_infft_plan.w[j]    = w[j];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+
+ /** initialise damping factors */
+ if(my_infft_plan.flags & PRECOMPUTE_DAMP)
+   for(j=0;j<my_nfft_plan.N[0];j++)
+     for(k=0;k<my_nfft_plan.N[1];k++)
+     {
+        my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
+          (sqrt(pow(j-my_nfft_plan.N[0]/2,2)+pow(k-my_nfft_plan.N[1]/2,2))>(my_nfft_plan.N[0]/2)?0:1);
+     }
+
+  /** initialise some guess f_hat_0 */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+      my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+  t0 = getticks();
+
+  /** solve the system */
+  solver_before_loop_complex(&my_infft_plan);
+
+  if (max_i<1)
+  {
+    l=1;
+    for(k=0;k<my_nfft_plan.N_total;k++)
+      my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+  }
+  else
+  {
+    for(l=1;l<=max_i;l++)
+    {
+      solver_loop_one_step_complex(&my_infft_plan);
+    }
+  }
+
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+  /** copy result */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    f_hat[k] = my_infft_plan.f_hat_iter[k];
+
+  /** finalise the plans and free the variables */
+  solver_finalize_complex(&my_infft_plan);
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT */
+static int comparison_fft(FILE *fp, int N, int T, int R)
+{
+  ticks t0, t1;
+  fftw_plan my_fftw_plan;
+  fftw_complex *f_hat,*f;
+  int m,k;
+  double t_fft, t_dft_mpolar;
+
+  f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f     = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*(T*R/4)*5);
+
+  my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);
+
+  for(k=0; k<N*N; k++)
+    f_hat[k] = (((double)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);
+
+  t0 = getticks();
+  for(m=0;m<65536/N;m++)
+    {
+      fftw_execute(my_fftw_plan);
+      /* touch */
+      f_hat[2]=2*f_hat[0];
+    }
+  t1 = getticks();
+  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  t_fft=N*GLOBAL_elapsed_time/65536;
+
+  if(N<256)
+    {
+      mpolar_dft(f_hat,N,f,T,R,1);
+      t_dft_mpolar=GLOBAL_elapsed_time;
+    }
+
+  for (m=3; m<=9; m+=3)
+    {
+      if((m==3)&&(N<256))
+        fprintf(fp,"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t",N,t_fft,t_dft_mpolar,m);
+      else
+        if(m==3)
+	  fprintf(fp,"%d\t&\t&\t%1.1e&\t       &\t%d\t",N,t_fft,m);
+	else
+	  fprintf(fp,"  \t&\t&\t       &\t       &\t%d\t",m);
+
+      printf("N=%d\tt_fft=%1.1e\tt_dft_mpolar=%1.1e\tm=%d\t",N,t_fft,t_dft_mpolar,m);
+
+      mpolar_fft(f_hat,N,f,T,R,m);
+      fprintf(fp,"%1.1e&\t",GLOBAL_elapsed_time);
+      printf("t_mpolar=%1.1e\t",GLOBAL_elapsed_time);
+      inverse_mpolar_fft(f,T,R,f_hat,N,2*m,m);
+      if(m==9)
+	fprintf(fp,"%1.1e\\\\\\hline\n",GLOBAL_elapsed_time);
+      else
+	fprintf(fp,"%1.1e\\\\\n",GLOBAL_elapsed_time);
+      printf("t_impolar=%1.1e\n",GLOBAL_elapsed_time);
+    }
+
+  fflush(fp);
+
+  nfft_free(f);
+  nfft_free(f_hat);
+
+  return EXIT_SUCCESS;
+}
+
+/** test program for various parameters */
+int main(int argc,char **argv)
+{
+  int N;                                /**< mpolar FFT size NxN              */
+  int T, R;                             /**< number of directions/offsets     */
+  int M;                                /**< number of knots of mpolar grid   */
+  double *x, *w;                        /**< knots and associated weights     */
+  fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+  int k;
+  int max_i;                            /**< number of iterations             */
+  int m;
+  double temp1, temp2, E_max=0.0;
+  FILE *fp1, *fp2;
+  char filename[30];
+  int logN;
+
+  if( argc!=4 )
+  {
+    printf("mpolar_fft_test N T R \n");
+    printf("\n");
+    printf("N          mpolar FFT of size NxN    \n");
+    printf("T          number of slopes          \n");
+    printf("R          number of offsets         \n");
+
+    /** Hence, comparison of the FFTW, mpolar FFT, and inverse mpolar FFT */
+    printf("\nHence, comparison FFTW, mpolar FFT and inverse mpolar FFT\n");
+    fp1=fopen("mpolar_comparison_fft.dat","w");
+    if (fp1==NULL)
+	return(-1);
+    for (logN=4; logN<=8; logN++)
+	comparison_fft(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));
+    fclose(fp1);
+
+    exit(-1);
+  }
+
+  N = atoi(argv[1]);
+  T = atoi(argv[2]);
+  R = atoi(argv[3]);
+  printf("N=%d, modified polar grid with T=%d, R=%d => ",N,T,R);
+
+  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+
+  f_hat    = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f        = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*1.25*T*R);  /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
+  f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*1.25*T*R);
+  f_tilde  = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+
+  /** generate knots of mpolar grid */
+  M=mpolar_grid(T,R,x,w); printf("M=%d.\n",M);
+
+  /** load data */
+  fp1=fopen("input_data_r.dat","r");
+  fp2=fopen("input_data_i.dat","r");
+  if ((fp1==NULL) || (fp2==NULL))
+    return(-1);
+  for(k=0;k<N*N;k++)
+  {
+    fscanf(fp1,"%le ",&temp1);
+    fscanf(fp2,"%le ",&temp2);
+    f_hat[k]=temp1+ _Complex_I*temp2;
+  }
+  fclose(fp1);
+  fclose(fp2);
+
+  /** direct mpolar FFT */
+      mpolar_dft(f_hat,N,f_direct,T,R,1);
+  //  mpolar_fft(f_hat,N,f_direct,T,R,12);
+
+  /** Test of the mpolar FFT with different m */
+  printf("\nTest of the mpolar FFT: \n");
+  fp1=fopen("mpolar_fft_error.dat","w+");
+  for (m=1; m<=12; m++)
+  {
+    /** fast mpolar FFT */
+    mpolar_fft(f_hat,N,f,T,R,m);
+
+    /** compute error of fast mpolar FFT */
+    E_max=X(error_l_infty_complex)(f_direct,f,M);
+    printf("m=%2d: E_max = %e\n",m,E_max);
+    fprintf(fp1,"%e\n",E_max);
+  }
+  fclose(fp1);
+
+  /** Test of the inverse mpolar FFT for different m in dependece of the iteration number*/
+  for (m=3; m<=9; m+=3)
+  {
+    printf("\nTest of the inverse mpolar FFT for m=%d: \n",m);
+    sprintf(filename,"mpolar_ifft_error%d.dat",m);
+    fp1=fopen(filename,"w+");
+    for (max_i=0; max_i<=20; max_i+=2)
+    {
+      /** inverse mpolar FFT */
+      inverse_mpolar_fft(f_direct,T,R,f_tilde,N,max_i,m);
+
+      /** compute maximum relativ error */
+      E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
+      printf("%3d iterations: E_max = %e\n",max_i,E_max);
+      fprintf(fp1,"%e\n",E_max);
+    }
+    fclose(fp1);
+  }
+
+  /** free the variables */
+  nfft_free(x);
+  nfft_free(w);
+  nfft_free(f_hat);
+  nfft_free(f);
+  nfft_free(f_direct);
+  nfft_free(f_tilde);
+
+  return 0;
+}
+/* \} */
diff --git a/applications/polarFFT/phantom.m b/applications/polarFFT/phantom.m
new file mode 100644
index 0000000..3d17d08
--- /dev/null
+++ b/applications/polarFFT/phantom.m
@@ -0,0 +1,46 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function I=phantom(N)
+% phantom(N)
+%  generates the (modified) Shepp-Logan phantom of P. Toft
+%  as an NxN matrix.
+%
+% Reference: Peter Toft: "The Radon Transform - Theory and Implementation", Ph.D. thesis.
+%   Department of Mathematical Modelling, Technical University of Denmark, June 1996. 326 pages.
+
+% Author: Markus Fenn, 2005
+
+I = zeros(N,N);
+
+k = linspace(-1,1,N);
+[x,y] = meshgrid(k);
+
+I = I + 1.0 * ( (x/0.69).^2+(y/0.92).^2 <= 1 );
+I = I - 0.8 * ( (x/0.6624).^2+((y+0.0184)/0.874).^2 <= 1 );
+I = I - 0.2 * ( ( (cos(-18/360*2*pi)*(x-0.22)+sin(-18/360*2*pi)*y)/0.11).^2+...
+                ( (sin(-18/360*2*pi)*(x-0.22)-cos(-18/360*2*pi)*y)/0.31).^2 <= 1 );
+I = I - 0.2 * ( ( (cos( 18/360*2*pi)*(x+0.22)+sin( 18/360*2*pi)*y)/0.16).^2+...
+                ( (sin( 18/360*2*pi)*(x+0.22)-cos( 18/360*2*pi)*y)/0.41).^2 <= 1 );
+I = I + 0.1 * ( (x/0.21).^2+((y-0.35)/0.25).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y-0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y+0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( ((x+0.08)/0.046).^2+((y+0.605)/0.023).^2 <= 1 );
+I = I + 0.1 * ( (x/0.023).^2+((y+0.606)/0.023).^2 <= 1 );
+I = I + 0.1 * ( ((x-0.06)/0.023).^2+((y+0.605)/0.046).^2 <= 1 );
+
+I=flipud(I);
diff --git a/applications/polarFFT/polar_fft_test.c b/applications/polarFFT/polar_fft_test.c
new file mode 100644
index 0000000..cce3bff
--- /dev/null
+++ b/applications/polarFFT/polar_fft_test.c
@@ -0,0 +1,423 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: polar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file polarFFT/polar_fft_test.c
+ * \brief NFFT-based polar FFT and inverse.
+ *
+ * Computes the NFFT-based polar FFT and its inverse for various parameters.
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_polarFFT_polar polar_fft_test
+ * \ingroup applications_polarFFT
+ * \{
+ */
+
+/** Generates the points \f$x_{t,j}\f$ with weights \f$w_{t,j}\f$
+ *  for the polar grid with \f$T\f$ angles and \f$R\f$ offsets.
+ *
+ *  The nodes of the polar grid lie on concentric circles around the origin.
+ *  They are given for \f$(j,t)^{\top}\in I_R\times I_T\f$ by
+ *  a signed radius \f$r_j := \frac{j}{R} \in [-\frac{1}{2},\frac{1}{2})\f$ and
+ *  an angle \f$\theta_t := \frac{\pi t}{T} \in [-\frac{\pi}{2},\frac{\pi}{2})\f$
+ *  as
+ *  \f[
+ *    x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,.
+ *  \f]
+ *  The total number of nodes is \f$M=TR\f$,
+ *  whereas the origin is included multiple times.
+ *
+ *  Weights are introduced to compensate for local sampling density variations.
+ *  For every point in the sampling set, we associate a small surrounding area.
+ *  In case of the polar grid, we choose small ring segments.
+ *  The area of such a ring segment around \f$x_{t,j}\f$ (\f$j \ne 0\f$) is
+ *  \f[
+ *    w_{t,j}
+ *    = \frac{\pi}{2TR^2}\left(\left(|j|+\frac{1}{2}\right)^2-
+ *      \left(|j|-\frac{1}{2}\right)^2\right)
+ *    = \frac{\pi |j| }{TR^2}\, .
+ *  \f]
+ *  The area of the small circle of radius \f$\frac{1}{2R}\f$ around the origin is
+ *  \f$\frac{\pi}{4R^2}\f$.
+ *  Divided by the multiplicity of the origin in the sampling set, we get
+ *  \f$w_{t,0} := \frac{\pi}{4TR^2}\f$.
+ *  Thus, the sum of all weights is \f$\frac{\pi}{4}(1+\frac{1}{R^2})\f$ and
+ *  we divide by this value for normalization.
+ */
+static int polar_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R/2; r<R/2; r++)
+    {
+      x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
+      x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
+      if (r==0)
+        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      else
+        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+    }
+  }
+
+  return T*R;                           /** return the number of knots        */
+}
+
+/** discrete polar FFT */
+static int polar_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+  int j,k;                              /**< index for nodes and frequencies  */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M=T*R;                            /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init nodes from polar grid*/
+  polar_grid(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f_hat[k];
+
+  /** NDFT-2D */
+  nfft_trafo_direct(&my_nfft_plan);
+
+  /** copy result */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+    f[j] = my_nfft_plan.f[j];
+
+  /** finalise the plans and free the variables */
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** NFFT-based polar FFT */
+static int polar_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M=T*R;                            /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init nodes from polar grid*/
+  polar_grid(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f_hat[k];
+
+  /** NFFT-2D */
+  nfft_trafo(&my_nfft_plan);
+
+  /** copy result */
+  for(j=0;j<my_nfft_plan.M_total;j++)
+    f[j] = my_nfft_plan.f[j];
+
+  /** finalise the plans and free the variables */
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** inverse NFFT-based polar FFT */
+static int inverse_polar_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+
+  double *x, *w;                        /**< knots and associated weights     */
+  int l;                                /**< index for iterations             */
+
+  int N[2],n[2];
+  int M=T*R;                            /**< number of knots                  */
+
+  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
+  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init two dimensional infft plan */
+  solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+
+  /** init nodes, given samples and weights */
+  polar_grid(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_infft_plan.y[j]    = f[j];
+    my_infft_plan.w[j]    = w[j];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** initialise damping factors */
+  if(my_infft_plan.flags & PRECOMPUTE_DAMP)
+    for(j=0;j<my_nfft_plan.N[0];j++)
+      for(k=0;k<my_nfft_plan.N[1];k++)
+  {
+    my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
+        (sqrt(pow((double)(j-my_nfft_plan.N[0]/2),2.0)+pow((double)(k-my_nfft_plan.N[1]/2),2.0))
+            >((double)(my_nfft_plan.N[0]/2))?0:1);
+  }
+
+  /** initialise some guess f_hat_0 */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+  /** solve the system */
+  solver_before_loop_complex(&my_infft_plan);
+
+  if (max_i<1)
+  {
+    l=1;
+    for(k=0;k<my_nfft_plan.N_total;k++)
+      my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+  }
+  else
+  {
+    for(l=1;l<=max_i;l++)
+    {
+      solver_loop_one_step_complex(&my_infft_plan);
+    }
+  }
+
+  /** copy result */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    f_hat[k] = my_infft_plan.f_hat_iter[k];
+
+  /** finalise the plans and free the variables */
+  solver_finalize_complex(&my_infft_plan);
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+
+  return EXIT_SUCCESS;
+}
+
+/** test program for various parameters */
+int main(int argc,char **argv)
+{
+  int N;                                /**< mpolar FFT size NxN              */
+  int T, R;                             /**< number of directions/offsets     */
+  int M;                                /**< number of knots of mpolar grid   */
+  double *x, *w;                        /**< knots and associated weights     */
+  fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+  int k;
+  int max_i;                            /**< number of iterations             */
+  int m = 1;
+  double temp1, temp2, E_max=0.0;
+  FILE *fp1, *fp2;
+  char filename[30];
+
+  if( argc!=4 )
+  {
+    printf("polar_fft_test N T R \n");
+    printf("\n");
+    printf("N          polar FFT of size NxN     \n");
+    printf("T          number of slopes          \n");
+    printf("R          number of offsets         \n");
+    exit(-1);
+  }
+
+  N = atoi(argv[1]);
+  T = atoi(argv[2]);
+  R = atoi(argv[3]);
+  printf("N=%d, polar grid with T=%d, R=%d => ",N,T,R);
+
+  x = (double *)nfft_malloc(2*5*(T/2)*(R/2)*(sizeof(double)));
+  w = (double *)nfft_malloc(5*(T/2)*(R/2)*(sizeof(double)));
+
+  f_hat    = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f        = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*T*R);
+  f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*T*R);
+  f_tilde  = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+
+  /** generate knots of mpolar grid */
+  M=polar_grid(T,R,x,w); printf("M=%d.\n",M);
+
+  /** load data */
+  fp1=fopen("input_data_r.dat","r");
+  fp2=fopen("input_data_i.dat","r");
+  if (fp1==NULL)
+    return(-1);
+  for(k=0;k<N*N;k++)
+  {
+    fscanf(fp1,"%le ",&temp1);
+    fscanf(fp2,"%le ",&temp2);
+    f_hat[k]=temp1+ _Complex_I*temp2;
+  }
+  fclose(fp1);
+  fclose(fp2);
+
+  /** direct polar FFT */
+    polar_dft(f_hat,N,f_direct,T,R,m);
+  //  polar_fft(f_hat,N,f_direct,T,R,12);
+
+  /** Test of the polar FFT with different m */
+  printf("\nTest of the polar FFT: \n");
+  fp1=fopen("polar_fft_error.dat","w+");
+  for (m=1; m<=12; m++)
+  {
+    /** fast polar FFT */
+    polar_fft(f_hat,N,f,T,R,m);
+
+    /** compute error of fast polar FFT */
+    E_max=X(error_l_infty_complex)(f_direct,f,M);
+    printf("m=%2d: E_max = %e\n",m,E_max);
+    fprintf(fp1,"%e\n",E_max);
+  }
+  fclose(fp1);
+
+  /** Test of the inverse polar FFT for different m in dependece of the iteration number*/
+  for (m=3; m<=9; m+=3)
+  {
+    printf("\nTest of the inverse polar FFT for m=%d: \n",m);
+    sprintf(filename,"polar_ifft_error%d.dat",m);
+    fp1=fopen(filename,"w+");
+    for (max_i=0; max_i<=100; max_i+=10)
+    {
+      /** inverse polar FFT */
+      inverse_polar_fft(f_direct,T,R,f_tilde,N,max_i,m);
+
+      /** compute maximum relative error */
+      /* E_max=0.0;
+      for(k=0;k<N*N;k++)
+      {
+        temp = cabs((f_hat[k]-f_tilde[k])/f_hat[k]);
+        if (temp>E_max) E_max=temp;
+      }
+      */
+       E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
+      printf("%3d iterations: E_max = %e\n",max_i,E_max);
+      fprintf(fp1,"%e\n",E_max);
+    }
+    fclose(fp1);
+  }
+
+  /** free the variables */
+  nfft_free(x);
+  nfft_free(w);
+  nfft_free(f_hat);
+  nfft_free(f);
+  nfft_free(f_direct);
+  nfft_free(f_tilde);
+
+  return 0;
+}
+/* \} */
diff --git a/applications/quadratureS2/Makefile.am b/applications/quadratureS2/Makefile.am
new file mode 100644
index 0000000..884f613
--- /dev/null
+++ b/applications/quadratureS2/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3786 2012-06-07 14:51:35Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = quadratureS2
+
+quadratureS2_SOURCES = quadratureS2.c doxygen.h
+quadratureS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = quadratureS2.m writeTestcase.m writeWeights.m readTestcase.m lgwt.m plotGrid.m example.in example.out
diff --git a/applications/quadratureS2/Makefile.in b/applications/quadratureS2/Makefile.in
new file mode 100644
index 0000000..4f05dd8
--- /dev/null
+++ b/applications/quadratureS2/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3786 2012-06-07 14:51:35Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = quadratureS2$(EXEEXT)
+subdir = applications/quadratureS2
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_quadratureS2_OBJECTS = quadratureS2.$(OBJEXT)
+quadratureS2_OBJECTS = $(am_quadratureS2_OBJECTS)
+quadratureS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(quadratureS2_SOURCES)
+DIST_SOURCES = $(quadratureS2_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+quadratureS2_SOURCES = quadratureS2.c doxygen.h
+quadratureS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = quadratureS2.m writeTestcase.m writeWeights.m readTestcase.m lgwt.m plotGrid.m example.in example.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/quadratureS2/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/quadratureS2/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+quadratureS2$(EXEEXT): $(quadratureS2_OBJECTS) $(quadratureS2_DEPENDENCIES) $(EXTRA_quadratureS2_DEPENDENCIES) 
+	@rm -f quadratureS2$(EXEEXT)
+	$(LINK) $(quadratureS2_OBJECTS) $(quadratureS2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/quadratureS2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/quadratureS2/doxygen.h b/applications/quadratureS2/doxygen.h
new file mode 100644
index 0000000..5f100cf
--- /dev/null
+++ b/applications/quadratureS2/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_quadratureS2 Fast evaluation of quadrature formulae on the sphere
+ * \ingroup applications
+ */
diff --git a/applications/quadratureS2/example.in b/applications/quadratureS2/example.in
new file mode 100644
index 0000000..46a7f05
--- /dev/null
+++ b/applications/quadratureS2/example.in
@@ -0,0 +1,354 @@
+testcases=3
+nfsft=1
+nfft=1
+cutoff=3
+fpt=1
+threshold=1.000000e+03
+testmode=0
+gridtype=0
+testfunction=1
+repetitions=1
+mode=0
+bandwidths=2
+16 16
+32 32
+
+
+0.024148302868547931454568100662
+0.055459529373987133393786308488
+0.085036148317179163780288320140
+0.111883847193403884734408393342
+0.135136368468525447372741155050
+0.154045761076810394651914748465
+0.168004102156449897087497902248
+0.176562705366992644950840940510
+0.179446470356206533303122796497
+0.176562705366992644950840940510
+0.168004102156449897087497902248
+0.154045761076810394651914748465
+0.135136368468525447372741155050
+0.111883847193403884734408393342
+0.085036148317179163780288320140
+0.055459529373987133393786308488
+0.024148302868547931454568100662
+
+0.021867872517185239084058778758
+0.050195855139357897778396022659
+0.078691039281386376824656281315
+0.107223872365252256844136979907
+0.135770824783899402010689527742
+0.164324411574724438267480763898
+0.192881461704887263719498946557
+0.221440333046589832299844147201
+0.250000000000000000000000000000
+0.278559666953410167700155852799
+0.307118538295112764036076669072
+0.335675588425275617243670467360
+0.364229175216100653500461703516
+0.392776127634747729278075212278
+0.421308960718613623175343718685
+0.449804144860642129977179592970
+0.478132127482814750507600365381
+
+
+0.006606227847587484679203750915
+0.015321701512934696523537958512
+0.023915548101749450893294124398
+0.032300358632328871055783281463
+0.040401541331669621470723541279
+0.048147742818711682100119020333
+0.055470846631663503489839683880
+0.062306482530317411350218037569
+0.068594572818656829316097400806
+0.074279854843954107312953283326
+0.079312364794886736074630562143
+0.083647876067038787195606630576
+0.087248287618844302948595270664
+0.090081958660638547509158513549
+0.092123986643316849165508131136
+0.093356426065596062602303106814
+0.093768446160209989459488610919
+0.093356426065596062602303106814
+0.092123986643316849165508131136
+0.090081958660638547509158513549
+0.087248287618844302948595270664
+0.083647876067038787195606630576
+0.079312364794886736074630562143
+0.074279854843954107312953283326
+0.068594572818656829316097400806
+0.062306482530317411350218037569
+0.055470846631663503489839683880
+0.048147742818711682100119020333
+0.040401541331669621470723541279
+0.032300358632328871055783281463
+0.023915548101749450893294124398
+0.015321701512934696523537958512
+0.006606227847587484679203750915
+
+0.011424646629589122262538047892
+0.026224329716335245676894771805
+0.041111409496705275667949308627
+0.056018231215834990432966833396
+0.070932535986010208928220777125
+0.085850455629256680611938179482
+0.100770388669267227377268625332
+0.115691552534641750593635833866
+0.130613518882987722502520000489
+0.145536032750858829176721087606
+0.160458932010607013829428524332
+0.175382107696440303623575118763
+0.190305482843150408633903225564
+0.205229000420828450179655533248
+0.220152616025452413373031390620
+0.235076293166748051532977115130
+0.250000000000000000000000000000
+0.264923706833251948467022884870
+0.279847383974547614382544225009
+0.294770999579171577575920082381
+0.309694517156849591366096774436
+0.324617892303559696376424881237
+0.339541067989393041681722706926
+0.354463967249141254090005759281
+0.369386481117012333008631230769
+0.384308447465358304917515397392
+0.399229611330732814256094798111
+0.414149544370743361021425243962
+0.429067464013989818827354838504
+0.443981768784165065078184397862
+0.458888590503294724332050691373
+0.473775670283664795956468651639
+0.488575353370410914166654947621
+nfsft=1
+nfft=1
+cutoff=6
+fpt=1
+threshold=1.000000e+03
+testmode=0
+gridtype=0
+testfunction=1
+repetitions=1
+mode=0
+bandwidths=2
+16 16
+32 32
+
+
+0.024148302868547931454568100662
+0.055459529373987133393786308488
+0.085036148317179163780288320140
+0.111883847193403884734408393342
+0.135136368468525447372741155050
+0.154045761076810394651914748465
+0.168004102156449897087497902248
+0.176562705366992644950840940510
+0.179446470356206533303122796497
+0.176562705366992644950840940510
+0.168004102156449897087497902248
+0.154045761076810394651914748465
+0.135136368468525447372741155050
+0.111883847193403884734408393342
+0.085036148317179163780288320140
+0.055459529373987133393786308488
+0.024148302868547931454568100662
+
+0.021867872517185239084058778758
+0.050195855139357897778396022659
+0.078691039281386376824656281315
+0.107223872365252256844136979907
+0.135770824783899402010689527742
+0.164324411574724438267480763898
+0.192881461704887263719498946557
+0.221440333046589832299844147201
+0.250000000000000000000000000000
+0.278559666953410167700155852799
+0.307118538295112764036076669072
+0.335675588425275617243670467360
+0.364229175216100653500461703516
+0.392776127634747729278075212278
+0.421308960718613623175343718685
+0.449804144860642129977179592970
+0.478132127482814750507600365381
+
+
+0.006606227847587484679203750915
+0.015321701512934696523537958512
+0.023915548101749450893294124398
+0.032300358632328871055783281463
+0.040401541331669621470723541279
+0.048147742818711682100119020333
+0.055470846631663503489839683880
+0.062306482530317411350218037569
+0.068594572818656829316097400806
+0.074279854843954107312953283326
+0.079312364794886736074630562143
+0.083647876067038787195606630576
+0.087248287618844302948595270664
+0.090081958660638547509158513549
+0.092123986643316849165508131136
+0.093356426065596062602303106814
+0.093768446160209989459488610919
+0.093356426065596062602303106814
+0.092123986643316849165508131136
+0.090081958660638547509158513549
+0.087248287618844302948595270664
+0.083647876067038787195606630576
+0.079312364794886736074630562143
+0.074279854843954107312953283326
+0.068594572818656829316097400806
+0.062306482530317411350218037569
+0.055470846631663503489839683880
+0.048147742818711682100119020333
+0.040401541331669621470723541279
+0.032300358632328871055783281463
+0.023915548101749450893294124398
+0.015321701512934696523537958512
+0.006606227847587484679203750915
+
+0.011424646629589122262538047892
+0.026224329716335245676894771805
+0.041111409496705275667949308627
+0.056018231215834990432966833396
+0.070932535986010208928220777125
+0.085850455629256680611938179482
+0.100770388669267227377268625332
+0.115691552534641750593635833866
+0.130613518882987722502520000489
+0.145536032750858829176721087606
+0.160458932010607013829428524332
+0.175382107696440303623575118763
+0.190305482843150408633903225564
+0.205229000420828450179655533248
+0.220152616025452413373031390620
+0.235076293166748051532977115130
+0.250000000000000000000000000000
+0.264923706833251948467022884870
+0.279847383974547614382544225009
+0.294770999579171577575920082381
+0.309694517156849591366096774436
+0.324617892303559696376424881237
+0.339541067989393041681722706926
+0.354463967249141254090005759281
+0.369386481117012333008631230769
+0.384308447465358304917515397392
+0.399229611330732814256094798111
+0.414149544370743361021425243962
+0.429067464013989818827354838504
+0.443981768784165065078184397862
+0.458888590503294724332050691373
+0.473775670283664795956468651639
+0.488575353370410914166654947621
+nfsft=0
+testmode=0
+gridtype=0
+testfunction=1
+repetitions=1
+mode=0
+bandwidths=2
+16 16
+32 32
+
+
+0.024148302868547931454568100662
+0.055459529373987133393786308488
+0.085036148317179163780288320140
+0.111883847193403884734408393342
+0.135136368468525447372741155050
+0.154045761076810394651914748465
+0.168004102156449897087497902248
+0.176562705366992644950840940510
+0.179446470356206533303122796497
+0.176562705366992644950840940510
+0.168004102156449897087497902248
+0.154045761076810394651914748465
+0.135136368468525447372741155050
+0.111883847193403884734408393342
+0.085036148317179163780288320140
+0.055459529373987133393786308488
+0.024148302868547931454568100662
+
+0.021867872517185239084058778758
+0.050195855139357897778396022659
+0.078691039281386376824656281315
+0.107223872365252256844136979907
+0.135770824783899402010689527742
+0.164324411574724438267480763898
+0.192881461704887263719498946557
+0.221440333046589832299844147201
+0.250000000000000000000000000000
+0.278559666953410167700155852799
+0.307118538295112764036076669072
+0.335675588425275617243670467360
+0.364229175216100653500461703516
+0.392776127634747729278075212278
+0.421308960718613623175343718685
+0.449804144860642129977179592970
+0.478132127482814750507600365381
+
+
+0.006606227847587484679203750915
+0.015321701512934696523537958512
+0.023915548101749450893294124398
+0.032300358632328871055783281463
+0.040401541331669621470723541279
+0.048147742818711682100119020333
+0.055470846631663503489839683880
+0.062306482530317411350218037569
+0.068594572818656829316097400806
+0.074279854843954107312953283326
+0.079312364794886736074630562143
+0.083647876067038787195606630576
+0.087248287618844302948595270664
+0.090081958660638547509158513549
+0.092123986643316849165508131136
+0.093356426065596062602303106814
+0.093768446160209989459488610919
+0.093356426065596062602303106814
+0.092123986643316849165508131136
+0.090081958660638547509158513549
+0.087248287618844302948595270664
+0.083647876067038787195606630576
+0.079312364794886736074630562143
+0.074279854843954107312953283326
+0.068594572818656829316097400806
+0.062306482530317411350218037569
+0.055470846631663503489839683880
+0.048147742818711682100119020333
+0.040401541331669621470723541279
+0.032300358632328871055783281463
+0.023915548101749450893294124398
+0.015321701512934696523537958512
+0.006606227847587484679203750915
+
+0.011424646629589122262538047892
+0.026224329716335245676894771805
+0.041111409496705275667949308627
+0.056018231215834990432966833396
+0.070932535986010208928220777125
+0.085850455629256680611938179482
+0.100770388669267227377268625332
+0.115691552534641750593635833866
+0.130613518882987722502520000489
+0.145536032750858829176721087606
+0.160458932010607013829428524332
+0.175382107696440303623575118763
+0.190305482843150408633903225564
+0.205229000420828450179655533248
+0.220152616025452413373031390620
+0.235076293166748051532977115130
+0.250000000000000000000000000000
+0.264923706833251948467022884870
+0.279847383974547614382544225009
+0.294770999579171577575920082381
+0.309694517156849591366096774436
+0.324617892303559696376424881237
+0.339541067989393041681722706926
+0.354463967249141254090005759281
+0.369386481117012333008631230769
+0.384308447465358304917515397392
+0.399229611330732814256094798111
+0.414149544370743361021425243962
+0.429067464013989818827354838504
+0.443981768784165065078184397862
+0.458888590503294724332050691373
+0.473775670283664795956468651639
+0.488575353370410914166654947621
diff --git a/applications/quadratureS2/example.out b/applications/quadratureS2/example.out
new file mode 100644
index 0000000..617a145
--- /dev/null
+++ b/applications/quadratureS2/example.out
@@ -0,0 +1,42 @@
+3
+1
+1
+3
+1
+1000.000000
+0
+0
+1
+1
+0
+2
+16 16
+32 32
++6.984776e-04 +3.886121e-06 +4.494552e-06
++2.990931e-03 +6.012098e-06 +4.316038e-06
+1
+1
+6
+1
+1000.000000
+0
+0
+1
+1
+0
+2
+16 16
+32 32
++9.052888e-04 +3.140451e-12 +3.298942e-12
++3.696837e-03 +5.486733e-12 +5.527605e-12
+0
+0
+0
+1
+1
+0
+2
+16 16
+32 32
++5.884322e-03 +3.245259e-15 +1.976205e-15
++5.845654e-02 +8.561233e-15 +3.745339e-15
diff --git a/applications/quadratureS2/lgwt.m b/applications/quadratureS2/lgwt.m
new file mode 100644
index 0000000..6840891
--- /dev/null
+++ b/applications/quadratureS2/lgwt.m
@@ -0,0 +1,77 @@
+function [x,w]=lgwt(N,a,b)
+%LGWT - Legendre Gauss Quadrature
+%
+%   This script is for computing definite integrals using Legendre-Gauss
+%   Quadrature. Computes the Legendre-Gauss nodes and weights  on an interval
+%   [a,b] with truncation order N
+%
+%   Suppose you have a continuous function f(x) which is defined on [a,b]
+%   which you can evaluate at any x in [a,b]. Simply evaluate it at all of
+%   the values contained in the x vector to obtain a vector f. Then compute
+%   the definite integral using sum(f.*w);
+%
+%   Written by Greg von Winckel - 02/25/2004
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: lgwt.m 3784 2012-06-06 20:30:39Z keiner $
+
+N=N-1;
+N1=N+1; N2=N+2;
+
+xu=linspace(-1,1,N1)';
+
+% Initial guess
+y=cos((2*(0:N)'+1)*pi/(2*N+2))+(0.27/N1)*sin(pi*xu*N/N2);
+
+% Legendre-Gauss Vandermonde Matrix
+L=zeros(N1,N2);
+
+% Derivative of LGVM
+Lp=zeros(N1,N2);
+
+% Compute the zeros of the N+1 Legendre Polynomial
+% using the recursion relation and the Newton-Raphson method
+
+y0=2;
+
+% Iterate until new points are uniformly within epsilon of old points
+while max(abs(y-y0))>eps
+
+
+    L(:,1)=1;
+    Lp(:,1)=0;
+
+    L(:,2)=y;
+    Lp(:,2)=1;
+
+    for k=2:N1
+        L(:,k+1)=( (2*k-1)*y.*L(:,k)-(k-1)*L(:,k-1) )/k;
+    end
+
+    Lp=(N2)*( L(:,N1)-y.*L(:,N2) )./(1-y.^2);
+
+    y0=y;
+    y=y0-L(:,N2)./Lp;
+
+end
+
+% Linear map from[-1,1] to [a,b]
+x=(a*(1-y)+b*(1+y))/2;
+
+% Compute the weights
+w=(b-a)./((1-y.^2).*Lp.^2)*(N2/N1)^2;
diff --git a/applications/quadratureS2/plotGrid.m b/applications/quadratureS2/plotGrid.m
new file mode 100644
index 0000000..f0f9026
--- /dev/null
+++ b/applications/quadratureS2/plotGrid.m
@@ -0,0 +1,123 @@
+function plotGrid(gridType,p)
+%plotGrid - Plot spherical quadrature grids
+%
+%   plotGrid(gridtype) plots a quadrature grid. The parameter gridType specifies
+%   the point set to plot and can take the following values:
+%   0: Gauss-Legendre quadrature grid,
+%   1: Clenshaw-Curtis qudrature grid,
+%   2: HEALPix point set,
+%   3: Equidistribution point set.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: plotGrid.m 3784 2012-06-06 20:30:39Z keiner $
+
+if (gridType == 0)
+  [theta,w] = lgwt(p(1)+1,-1,1);
+  theta = acos(theta);
+  phi = 2*pi*(0:(2*p(1)+1))./(2*p(1)+2);
+  [Y,X] = meshgrid(theta,phi);
+  gridName = 'Gauss-Legendre';
+  temp = repmat(w,[1,length(phi)])';
+  [Y(:),X(:),temp(:)]
+  size(Y(:))
+elseif (gridType == 1)
+  theta = pi*(0:2*p(1))./(2*p(1));
+  phi = 2*pi*(0:(2*p(1)+1))./(2*p(1)+2);
+  [X,Y] = meshgrid(phi,theta);
+  gridName = 'Clenshaw-Curtis';
+
+elseif (gridType == 2)
+  if log2(p(1)) ~= fix(log2(p(1)))
+    error('NS has to be an INTEGER power of 2')
+  end
+
+  % initialization of the parameters
+  Y=zeros(12*p(1)^2,1);
+  X=zeros(12*p(1)^2,1);
+  ncoo=0;
+
+  % North pole
+  for ii=1:p(1)-1
+    for hh=0:4*ii-1
+      ncoo=ncoo+1;
+      Y(ncoo)=1-ii^2/(3*p(1)^2);
+      X(ncoo)=2*pi/(4*ii)*(hh+0.5);
+    end
+  end
+  ncoo1=ncoo;
+
+  % Equator
+  for ii=p(1):3*p(1)
+    for hh=0:4*p(1)-1
+      ncoo=ncoo+1;
+      Y(ncoo)=2/(3*p(1))*(2*p(1)-ii);
+      X(ncoo)=2*pi/(4*p(1))*(hh+codd(ii));
+    end
+  end
+
+  % add the south pole
+  X(ncoo+1:end)=X(ncoo1:-1:1);
+  Y(ncoo+1:end)=-Y(ncoo1:-1:1);
+  Y=acos(Y);
+
+  gridName = 'HEALPix';
+
+elseif (gridType == 3)
+
+  X = zeros(2+4*(floor((p(1)+1)/2))*floor(p(1)/2),1);
+  Y = zeros(2+4*(floor((p(1)+1)/2))*floor(p(1)/2),1);
+  X(1) = 0.0;
+  Y(1) = 0.0;
+  d = 2;
+  for k = 1:p(1)-1
+    thetai = (k*pi)/p(1);
+    if (k<=(p(1)/2))
+      gammai = 4*k;
+    else
+      gammai = 4*(p(1)-k);
+    end
+    for n = 1:gammai
+      Y(d) = thetai;
+      X(d) = ((n-0.5)*((2.0*pi)/gammai));
+      d = d+1;
+    end
+  end
+  Y(d) = pi;
+  X(d) = 0.0;
+  size(X)
+
+  gridName = 'Equidistribution Example 7.1.11';
+
+else
+  error('Wrong grid type!');
+end
+
+figure;
+plot(X,Y,'ko');
+axis equal;
+axis([-0.1 2*pi+0.1 -0.1 pi+0.1]);
+xlabel('Phi');
+ylabel('Theta');
+title(gridName);
+return;
+
+function coeff=codd(k);
+  if fix(k/2)*2 == k, coeff=0.5;, else, coeff=0;, end
+return
diff --git a/applications/quadratureS2/quadratureS2.c b/applications/quadratureS2/quadratureS2.c
new file mode 100644
index 0000000..2863e19
--- /dev/null
+++ b/applications/quadratureS2/quadratureS2.c
@@ -0,0 +1,1146 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: quadratureS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \defgroup applications_quadratureS2_test quadratureS2_test
+ * \ingroup applications_quadratureS2
+ * \{
+ */
+#include "config.h"
+
+/* Include standard C headers. */
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* Include NFFT 3 utilities headers. */
+#include "nfft3util.h"
+
+/* Include NFFT 3 library header. */
+#include "nfft3.h"
+
+#include "infft.h"
+
+/** Enumeration for parameter values */
+enum boolean {NO = 0, YES = 1};
+
+/** Enumeration for test modes */
+enum testtype {ERROR = 0, TIMING = 1};
+
+/** Enumeration for quadrature grid types */
+enum gridtype {GRID_GAUSS_LEGENDRE = 0, GRID_CLENSHAW_CURTIS = 1,
+  GRID_HEALPIX = 2, GRID_EQUIDISTRIBUTION = 3, GRID_EQUIDISTRIBUTION_UNIFORM = 4};
+
+/** Enumeration for test functions */
+enum functiontype {FUNCTION_RANDOM_BANDLIMITED = 0, FUNCTION_F1 = 1,
+  FUNCTION_F2 = 2, FUNCTION_F3 = 3, FUNCTION_F4 = 4, FUNCTION_F5 = 5,
+  FUNCTION_F6 = 6};
+
+/** TODO Add comment here */
+enum modes {USE_GRID = 0, RANDOM = 1};
+
+/**
+ * The main program.
+ *
+ * \param argc The number of arguments
+ * \param argv An array containing the arguments as C-strings
+ *
+ * \return Exit code
+ */
+int main (int argc, char **argv)
+{
+  int tc;                      /**< The index variable for testcases          */
+  int tc_max;                  /**< The number of testcases                   */
+
+  int *NQ;                     /**< The array containing the cut-off degrees  *
+                                    \f$N\f$                                   */
+  int NQ_max;                  /**< The maximum cut-off degree \f$N\f$ for the*
+                                    current testcase                          */
+  int *SQ;                     /**< The array containing the grid size
+                                    parameters                                */
+  int SQ_max;                  /**< The maximum grid size parameter           */
+  int *RQ;                     /**< The array containing the grid size
+                                    parameters                                */
+  int iNQ;                     /**< Index variable for cut-off degrees        */
+  int iNQ_max;                 /**< The maximum number of cut-off degrees     */
+  int testfunction;            /**< The testfunction                          */
+  int N;                       /**< The test function's bandwidth             */
+
+  int use_nfsft;               /**< Whether to use the NFSFT algorithm or not */
+  int use_nfft;                /**< Whether to use the NFFT algorithm or not  */
+  int use_fpt;                 /**< Whether to use the FPT algorithm or not   */
+  int cutoff;                  /**< The current NFFT cut-off parameter        */
+  double threshold;            /**< The current NFSFT threshold parameter     */
+
+  int gridtype;                /**< The type of quadrature grid to be used    */
+  int repetitions;             /**< The number of repetitions to be performed */
+  int mode;                    /**< The number of repetitions to be performed */
+
+  double *w;                   /**< The quadrature weights                    */
+  double *x_grid;              /**< The quadrature nodes                      */
+  double *x_compare;           /**< The quadrature nodes                      */
+  double _Complex *f_grid;             /**< The reference function values             */
+  double _Complex *f_compare;          /**< The function values                       */
+  double _Complex *f;                  /**< The function values                       */
+  double _Complex *f_hat_gen;         /**< The reference spherical Fourier           *
+                                    coefficients                              */
+  double _Complex *f_hat;              /**< The spherical Fourier coefficients        */
+
+  nfsft_plan plan_adjoint;     /**< The NFSFT plan                            */
+  nfsft_plan plan;             /**< The NFSFT plan                            */
+  nfsft_plan plan_gen;         /**< The NFSFT plan                            */
+
+  double t_avg;                /**< The average computation time needed       */
+  double err_infty_avg;        /**< The average error \f$E_\infty\f$          */
+  double err_2_avg;            /**< The average error \f$E_2\f$               */
+
+  int i;                       /**< A loop variable                           */
+  int k;                       /**< A loop variable                           */
+  int n;                       /**< A loop variable                           */
+  int d;                       /**< A loop variable                           */
+
+  int m_theta;                 /**< The current number of different           *
+                                    colatitudinal angles (for grids)          */
+  int m_phi;                   /**< The current number of different           *
+                                    longitudinal angles (for grids).          */
+  int m_total;                 /**< The total number nodes.                   */
+  double *theta;               /**< An array for saving the angles theta of a *
+                                    grid                                      */
+  double *phi;                 /**< An array for saving the angles phi of a   *
+                                    grid                                      */
+  fftw_plan fplan;             /**< An FFTW plan for computing Clenshaw-Curtis
+                                    quadrature weights                        */
+  //int nside;                   /**< The size parameter for the HEALPix grid   */
+  int d2;
+  int M;
+  double theta_s;
+  double x1,x2,x3,temp;
+  int m_compare;
+  nfsft_plan *plan_adjoint_ptr;
+  nfsft_plan *plan_ptr;
+  double *w_temp;
+  int testmode;
+  ticks t0, t1;
+
+  /* Read the number of testcases. */
+  fscanf(stdin,"testcases=%d\n",&tc_max);
+  fprintf(stdout,"%d\n",tc_max);
+
+  /* Process each testcase. */
+  for (tc = 0; tc < tc_max; tc++)
+  {
+    /* Check if the fast transform shall be used. */
+    fscanf(stdin,"nfsft=%d\n",&use_nfsft);
+    fprintf(stdout,"%d\n",use_nfsft);
+    if (use_nfsft != NO)
+    {
+      /* Check if the NFFT shall be used. */
+      fscanf(stdin,"nfft=%d\n",&use_nfft);
+      fprintf(stdout,"%d\n",use_nfsft);
+      if (use_nfft != NO)
+      {
+        /* Read the cut-off parameter. */
+        fscanf(stdin,"cutoff=%d\n",&cutoff);
+        fprintf(stdout,"%d\n",cutoff);
+      }
+      else
+      {
+        /* TODO remove this */
+        /* Initialize unused variable with dummy value. */
+        cutoff = 1;
+      }
+      /* Check if the fast polynomial transform shall be used. */
+      fscanf(stdin,"fpt=%d\n",&use_fpt);
+      fprintf(stdout,"%d\n",use_fpt);
+      if (use_fpt != NO)
+      {
+        /* Read the NFSFT threshold parameter. */
+        fscanf(stdin,"threshold=%lf\n",&threshold);
+        fprintf(stdout,"%lf\n",threshold);
+      }
+      else
+      {
+        /* TODO remove this */
+        /* Initialize unused variable with dummy value. */
+        threshold = 1000.0;
+      }
+    }
+    else
+    {
+      /* TODO remove this */
+      /* Set dummy values. */
+      use_nfft = NO;
+      use_fpt = NO;
+      cutoff = 3;
+      threshold = 1000.0;
+    }
+
+    /* Read the testmode type. */
+    fscanf(stdin,"testmode=%d\n",&testmode);
+    fprintf(stdout,"%d\n",testmode);
+
+    if (testmode == ERROR)
+    {
+      /* Read the quadrature grid type. */
+      fscanf(stdin,"gridtype=%d\n",&gridtype);
+      fprintf(stdout,"%d\n",gridtype);
+
+      /* Read the test function. */
+      fscanf(stdin,"testfunction=%d\n",&testfunction);
+      fprintf(stdout,"%d\n",testfunction);
+
+      /* Check if random bandlimited function has been chosen. */
+      if (testfunction == FUNCTION_RANDOM_BANDLIMITED)
+      {
+        /* Read the bandwidht. */
+        fscanf(stdin,"bandlimit=%d\n",&N);
+        fprintf(stdout,"%d\n",N);
+      }
+      else
+      {
+        N = 1;
+      }
+
+      /* Read the number of repetitions. */
+      fscanf(stdin,"repetitions=%d\n",&repetitions);
+      fprintf(stdout,"%d\n",repetitions);
+
+      fscanf(stdin,"mode=%d\n",&mode);
+      fprintf(stdout,"%d\n",mode);
+
+      if (mode == RANDOM)
+      {
+        /* Read the bandwidht. */
+        fscanf(stdin,"points=%d\n",&m_compare);
+        fprintf(stdout,"%d\n",m_compare);
+        x_compare = (double*) nfft_malloc(2*m_compare*sizeof(double));
+        d = 0;
+        while (d < m_compare)
+        {
+          x1 = 2.0*(((double)rand())/RAND_MAX) - 1.0;
+          x2 = 2.0*(((double)rand())/RAND_MAX) - 1.0;
+          x3 = 2.0*(((double)rand())/RAND_MAX) - 1.0;
+          temp = sqrt(x1*x1+x2*x2+x3*x3);
+          if (temp <= 1)
+          {
+            x_compare[2*d+1] = acos(x3);
+            if (x_compare[2*d+1] == 0 || x_compare[2*d+1] == PI)
+            {
+              x_compare[2*d] = 0.0;
+            }
+            else
+            {
+              x_compare[2*d] = atan2(x2/sin(x_compare[2*d+1]),x1/sin(x_compare[2*d+1]));
+            }
+            x_compare[2*d] *= 1.0/(2.0*PI);
+            x_compare[2*d+1] *= 1.0/(2.0*PI);
+            d++;
+          }
+        }
+        f_compare = (double _Complex*) nfft_malloc(m_compare*sizeof(double _Complex));
+        f = (double _Complex*) nfft_malloc(m_compare*sizeof(double _Complex));
+      }
+    }
+
+    /* Initialize maximum cut-off degree and grid size parameter. */
+    NQ_max = 0;
+    SQ_max = 0;
+
+    /* Read the number of cut-off degrees. */
+    fscanf(stdin,"bandwidths=%d\n",&iNQ_max);
+    fprintf(stdout,"%d\n",iNQ_max);
+
+    /* Allocate memory for the cut-off degrees and grid size parameters. */
+    NQ = (int*) nfft_malloc(iNQ_max*sizeof(int));
+    SQ = (int*) nfft_malloc(iNQ_max*sizeof(int));
+    if (testmode == TIMING)
+    {
+      RQ = (int*) nfft_malloc(iNQ_max*sizeof(int));
+    }
+
+    /* Read the cut-off degrees and grid size parameters. */
+    for (iNQ = 0; iNQ < iNQ_max; iNQ++)
+    {
+      if (testmode == TIMING)
+      {
+        /* Read cut-off degree and grid size parameter. */
+        fscanf(stdin,"%d %d %d\n",&NQ[iNQ],&SQ[iNQ],&RQ[iNQ]);
+        fprintf(stdout,"%d %d %d\n",NQ[iNQ],SQ[iNQ],RQ[iNQ]);
+        NQ_max = NFFT_MAX(NQ_max,NQ[iNQ]);
+        SQ_max = NFFT_MAX(SQ_max,SQ[iNQ]);
+      }
+      else
+      {
+        /* Read cut-off degree and grid size parameter. */
+        fscanf(stdin,"%d %d\n",&NQ[iNQ],&SQ[iNQ]);
+        fprintf(stdout,"%d %d\n",NQ[iNQ],SQ[iNQ]);
+        NQ_max = NFFT_MAX(NQ_max,NQ[iNQ]);
+        SQ_max = NFFT_MAX(SQ_max,SQ[iNQ]);
+      }
+    }
+
+    /* Do precomputation. */
+    //fprintf(stderr,"NFSFT Precomputation\n");
+    //fflush(stderr);
+    nfsft_precompute(NQ_max, threshold,
+      ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U)), 0U);
+
+    if (testmode == TIMING)
+    {
+      /* Allocate data structures. */
+      f_hat = (double _Complex*) nfft_malloc(NFSFT_F_HAT_SIZE(NQ_max)*sizeof(double _Complex));
+      f = (double _Complex*) nfft_malloc(SQ_max*sizeof(double _Complex));
+      x_grid = (double*) nfft_malloc(2*SQ_max*sizeof(double));
+      for (d = 0; d < SQ_max; d++)
+      {
+        f[d] = (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);
+        x_grid[2*d] = (((double)rand())/RAND_MAX) - 0.5;
+        x_grid[2*d+1] = (((double)rand())/RAND_MAX) * 0.5;
+      }
+    }
+
+    //fprintf(stderr,"Entering loop\n");
+    //fflush(stderr);
+    /* Process all cut-off bandwidths. */
+    for (iNQ = 0; iNQ < iNQ_max; iNQ++)
+    {
+      if (testmode == TIMING)
+      {
+        nfsft_init_guru(&plan,NQ[iNQ],SQ[iNQ], NFSFT_NORMALIZED |
+          ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+          ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+          PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFTW_MEASURE | FFT_OUT_OF_PLACE,
+          cutoff);
+
+        plan.f_hat = f_hat;
+        plan.x = x_grid;
+        plan.f = f;
+
+        nfsft_precompute_x(&plan);
+
+        t_avg = 0.0;
+
+        for (i = 0; i < RQ[iNQ]; i++)
+        {
+          t0 = getticks();
+
+          if (use_nfsft != NO)
+          {
+            /* Execute the adjoint NFSFT transformation. */
+            nfsft_adjoint(&plan);
+          }
+          else
+          {
+            /* Execute the adjoint direct NDSFT transformation. */
+            nfsft_adjoint_direct(&plan);
+          }
+
+          t1 = getticks();
+          t_avg += nfft_elapsed_seconds(t1,t0);
+        }
+
+        t_avg = t_avg/((double)RQ[iNQ]);
+
+        nfsft_finalize(&plan);
+
+        fprintf(stdout,"%+le\n", t_avg);
+        fprintf(stderr,"%d: %4d %4d %+le\n", tc, NQ[iNQ], SQ[iNQ], t_avg);
+      }
+      else
+      {
+        /* Determine the maximum number of nodes. */
+        switch (gridtype)
+        {
+          case GRID_GAUSS_LEGENDRE:
+            /* Calculate grid dimensions. */
+            m_theta = SQ[iNQ] + 1;
+            m_phi = 2*SQ[iNQ] + 2;
+            m_total = m_theta*m_phi;
+            break;
+          case GRID_CLENSHAW_CURTIS:
+            /* Calculate grid dimensions. */
+            m_theta = 2*SQ[iNQ] + 1;
+            m_phi = 2*SQ[iNQ] + 2;
+            m_total = m_theta*m_phi;
+            break;
+          case GRID_HEALPIX:
+            m_theta = 1;
+            m_phi = 12*SQ[iNQ]*SQ[iNQ];
+            m_total = m_theta * m_phi;
+            //fprintf("HEALPix: SQ = %d, m_theta = %d, m_phi= %d, m");
+            break;
+          case GRID_EQUIDISTRIBUTION:
+          case GRID_EQUIDISTRIBUTION_UNIFORM:
+            m_theta = 2;
+            //fprintf(stderr,"ed: m_theta = %d\n",m_theta);
+            for (k = 1; k < SQ[iNQ]; k++)
+            {
+              m_theta += (int)floor((2*PI)/acos((cos(PI/(double)SQ[iNQ])-
+                cos(k*PI/(double)SQ[iNQ])*cos(k*PI/(double)SQ[iNQ]))/
+                (sin(k*PI/(double)SQ[iNQ])*sin(k*PI/(double)SQ[iNQ]))));
+              //fprintf(stderr,"ed: m_theta = %d\n",m_theta);
+            }
+            //fprintf(stderr,"ed: m_theta final = %d\n",m_theta);
+            m_phi = 1;
+            m_total = m_theta * m_phi;
+            break;
+        }
+
+        /* Allocate memory for data structures. */
+        w = (double*) nfft_malloc(m_theta*sizeof(double));
+        x_grid = (double*) nfft_malloc(2*m_total*sizeof(double));
+
+        //fprintf(stderr,"NQ = %d\n",NQ[iNQ]);
+        //fflush(stderr);
+        switch (gridtype)
+        {
+          case GRID_GAUSS_LEGENDRE:
+            //fprintf(stderr,"Generating grid for NQ = %d, SQ = %d\n",NQ[iNQ],SQ[iNQ]);
+            //fflush(stderr);
+
+            /* Read quadrature weights. */
+            for (k = 0; k < m_theta; k++)
+            {
+              fscanf(stdin,"%le\n",&w[k]);
+              w[k] *= (2.0*PI)/((double)m_phi);
+            }
+
+            //fprintf(stderr,"Allocating theta and phi\n");
+            //fflush(stderr);
+            /* Allocate memory to store the grid's angles. */
+            theta = (double*) nfft_malloc(m_theta*sizeof(double));
+            phi = (double*) nfft_malloc(m_phi*sizeof(double));
+
+            //if (theta == NULL || phi == NULL)
+            //{
+              //fprintf(stderr,"Couldn't allocate theta and phi\n");
+              //fflush(stderr);
+            //}
+
+
+            /* Read angles theta. */
+            for (k = 0; k < m_theta; k++)
+            {
+              fscanf(stdin,"%le\n",&theta[k]);
+            }
+
+            /* Generate the grid angles phi. */
+            for (n = 0; n < m_phi; n++)
+            {
+              phi[n] = n/((double)m_phi);
+              phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));
+            }
+
+            //fprintf(stderr,"Generating grid nodes\n");
+            //fflush(stderr);
+
+            /* Generate the grid's nodes. */
+            d = 0;
+            for (k = 0; k < m_theta; k++)
+            {
+              for (n = 0; n < m_phi; n++)
+              {
+                x_grid[2*d] = phi[n];
+                x_grid[2*d+1] = theta[k];
+                d++;
+              }
+            }
+
+            //fprintf(stderr,"Freeing theta and phi\n");
+            //fflush(stderr);
+            /* Free the arrays for the grid's angles. */
+            nfft_free(theta);
+            nfft_free(phi);
+
+            break;
+
+          case GRID_CLENSHAW_CURTIS:
+
+            /* Allocate memory to store the grid's angles. */
+            theta = (double*) nfft_malloc(m_theta*sizeof(double));
+            phi = (double*) nfft_malloc(m_phi*sizeof(double));
+
+            /* Generate the grid angles theta. */
+            for (k = 0; k < m_theta; k++)
+            {
+              theta[k] = k/((double)2*(m_theta-1));
+            }
+
+            /* Generate the grid angles phi. */
+            for (n = 0; n < m_phi; n++)
+            {
+              phi[n] = n/((double)m_phi);
+              phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));
+            }
+
+            /* Generate quadrature weights. */
+            fplan = fftw_plan_r2r_1d(SQ[iNQ]+1, w, w, FFTW_REDFT00, 0U);
+            for (k = 0; k < SQ[iNQ]+1; k++)
+            {
+              w[k] = -2.0/(4*k*k-1);
+            }
+            fftw_execute(fplan);
+            w[0] *= 0.5;
+
+            for (k = 0; k < SQ[iNQ]+1; k++)
+            {
+              w[k] *= (2.0*PI)/((double)(m_theta-1)*m_phi);
+              w[m_theta-1-k] = w[k];
+            }
+            fftw_destroy_plan(fplan);
+
+            /* Generate the grid's nodes. */
+            d = 0;
+            for (k = 0; k < m_theta; k++)
+            {
+              for (n = 0; n < m_phi; n++)
+              {
+                x_grid[2*d] = phi[n];
+                x_grid[2*d+1] = theta[k];
+                d++;
+              }
+            }
+
+            /* Free the arrays for the grid's angles. */
+            nfft_free(theta);
+            nfft_free(phi);
+
+            break;
+
+          case GRID_HEALPIX:
+
+            d = 0;
+            for (k = 1; k <= SQ[iNQ]-1; k++)
+            {
+              for (n = 0; n <= 4*k-1; n++)
+              {
+                x_grid[2*d+1] = 1 - (k*k)/((double)(3.0*SQ[iNQ]*SQ[iNQ]));
+                x_grid[2*d] =  ((n+0.5)/(4*k));
+                x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
+                d++;
+              }
+            }
+
+            d2 = d-1;
+
+            for (k = SQ[iNQ]; k <= 3*SQ[iNQ]; k++)
+            {
+              for (n = 0; n <= 4*SQ[iNQ]-1; n++)
+              {
+                x_grid[2*d+1] = 2.0/(3*SQ[iNQ])*(2*SQ[iNQ]-k);
+                x_grid[2*d] = (n+((k%2==0)?(0.5):(0.0)))/(4*SQ[iNQ]);
+                x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
+                d++;
+              }
+            }
+
+            for (k = 1; k <= SQ[iNQ]-1; k++)
+            {
+              for (n = 0; n <= 4*k-1; n++)
+              {
+                x_grid[2*d+1] = -x_grid[2*d2+1];
+                x_grid[2*d] =  x_grid[2*d2];
+                d++;
+                d2--;
+              }
+            }
+
+            for (d = 0; d < m_total; d++)
+            {
+              x_grid[2*d+1] = acos(x_grid[2*d+1])/(2.0*PI);
+            }
+
+            w[0] = (4.0*PI)/(m_total);
+            break;
+
+          case GRID_EQUIDISTRIBUTION:
+          case GRID_EQUIDISTRIBUTION_UNIFORM:
+            /* TODO Compute the weights. */
+
+            if (gridtype == GRID_EQUIDISTRIBUTION)
+            {
+              w_temp = (double*) nfft_malloc((SQ[iNQ]+1)*sizeof(double));
+              fplan = fftw_plan_r2r_1d(SQ[iNQ]/2+1, w_temp, w_temp, FFTW_REDFT00, 0U);
+              for (k = 0; k < SQ[iNQ]/2+1; k++)
+              {
+                w_temp[k] = -2.0/(4*k*k-1);
+              }
+              fftw_execute(fplan);
+              w_temp[0] *= 0.5;
+
+              for (k = 0; k < SQ[iNQ]/2+1; k++)
+              {
+                w_temp[k] *= (2.0*PI)/((double)(SQ[iNQ]));
+                w_temp[SQ[iNQ]-k] = w_temp[k];
+              }
+              fftw_destroy_plan(fplan);
+            }
+
+            d = 0;
+            x_grid[2*d] = -0.5;
+            x_grid[2*d+1] = 0.0;
+            if (gridtype == GRID_EQUIDISTRIBUTION)
+            {
+              w[d] = w_temp[0];
+            }
+            else
+            {
+              w[d] = (4.0*PI)/(m_total);
+            }
+            d = 1;
+            x_grid[2*d] = -0.5;
+            x_grid[2*d+1] = 0.5;
+            if (gridtype == GRID_EQUIDISTRIBUTION)
+            {
+              w[d] = w_temp[SQ[iNQ]];
+            }
+            else
+            {
+              w[d] = (4.0*PI)/(m_total);
+            }
+            d = 2;
+
+            for (k = 1; k < SQ[iNQ]; k++)
+            {
+              theta_s = (double)k*PI/(double)SQ[iNQ];
+              M = (int)floor((2.0*PI)/acos((cos(PI/(double)SQ[iNQ])-
+                cos(theta_s)*cos(theta_s))/(sin(theta_s)*sin(theta_s))));
+
+              for (n = 0; n < M; n++)
+              {
+                x_grid[2*d] = (n + 0.5)/M;
+                x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
+                x_grid[2*d+1] = theta_s/(2.0*PI);
+                if (gridtype == GRID_EQUIDISTRIBUTION)
+                {
+                  w[d] = w_temp[k]/((double)(M));
+                }
+                else
+                {
+                  w[d] = (4.0*PI)/(m_total);
+                }
+                d++;
+              }
+            }
+
+            if (gridtype == GRID_EQUIDISTRIBUTION)
+            {
+              nfft_free(w_temp);
+            }
+            break;
+
+          default:
+            break;
+        }
+
+        /* Allocate memory for grid values. */
+        f_grid = (double _Complex*) nfft_malloc(m_total*sizeof(double _Complex));
+
+        if (mode == RANDOM)
+        {
+        }
+        else
+        {
+          m_compare = m_total;
+          f_compare = (double _Complex*) nfft_malloc(m_compare*sizeof(double _Complex));
+          x_compare = x_grid;
+          f = f_grid;
+        }
+
+        //fprintf(stderr,"Generating test function\n");
+        //fflush(stderr);
+        switch (testfunction)
+        {
+          case FUNCTION_RANDOM_BANDLIMITED:
+            f_hat_gen = (double _Complex*) nfft_malloc(NFSFT_F_HAT_SIZE(N)*sizeof(double _Complex));
+            //fprintf(stderr,"Generating random test function\n");
+            //fflush(stderr);
+            /* Generate random function samples by sampling a bandlimited
+             * function. */
+            nfsft_init_guru(&plan_gen,N,m_total, NFSFT_NORMALIZED |
+              ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+              ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+              ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+              FFT_OUT_OF_PLACE, cutoff);
+
+            plan_gen.f_hat = f_hat_gen;
+            plan_gen.x = x_grid;
+            plan_gen.f = f_grid;
+
+            nfsft_precompute_x(&plan_gen);
+
+            for (k = 0; k < plan_gen.N_total; k++)
+            {
+              f_hat_gen[k] = 0.0;
+            }
+
+            for (k = 0; k <= N; k++)
+            {
+              for (n = -k; n <= k; n++)
+              {
+                f_hat_gen[NFSFT_INDEX(k,n,&plan_gen)] =
+                (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);
+              }
+            }
+
+            if (use_nfsft != NO)
+            {
+              /* Execute the NFSFT transformation. */
+              nfsft_trafo(&plan_gen);
+            }
+            else
+            {
+              /* Execute the direct NDSFT transformation. */
+              nfsft_trafo_direct(&plan_gen);
+            }
+
+            nfsft_finalize(&plan_gen);
+
+            if (mode == RANDOM)
+            {
+              nfsft_init_guru(&plan_gen,N,m_compare, NFSFT_NORMALIZED |
+                ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+                ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+                ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+                FFT_OUT_OF_PLACE, cutoff);
+
+              plan_gen.f_hat = f_hat_gen;
+              plan_gen.x = x_compare;
+              plan_gen.f = f_compare;
+
+              nfsft_precompute_x(&plan_gen);
+
+              if (use_nfsft != NO)
+              {
+                /* Execute the NFSFT transformation. */
+                nfsft_trafo(&plan_gen);
+              }
+              else
+              {
+                /* Execute the direct NDSFT transformation. */
+                nfsft_trafo_direct(&plan_gen);
+              }
+
+              nfsft_finalize(&plan_gen);
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+
+            nfft_free(f_hat_gen);
+
+            break;
+
+          case FUNCTION_F1:
+            for (d = 0; d < m_total; d++)
+            {
+              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              f_grid[d] = x1*x2*x3;
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                f_compare[d] = x1*x2*x3;
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+          case FUNCTION_F2:
+            for (d = 0; d < m_total; d++)
+            {
+              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              f_grid[d] = 0.1*exp(x1+x2+x3);
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                f_compare[d] = 0.1*exp(x1+x2+x3);
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+          case FUNCTION_F3:
+            for (d = 0; d < m_total; d++)
+            {
+              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+              f_grid[d] = 0.1*temp;
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+                f_compare[d] = 0.1*temp;
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+          case FUNCTION_F4:
+            for (d = 0; d < m_total; d++)
+            {
+              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+              f_grid[d] = 1.0/(temp);
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+                f_compare[d] = 1.0/(temp);
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+          case FUNCTION_F5:
+            for (d = 0; d < m_total; d++)
+            {
+              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+              f_grid[d] = 0.1*sin(1+temp)*sin(1+temp);
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+                f_compare[d] = 0.1*sin(1+temp)*sin(1+temp);
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+          case FUNCTION_F6:
+            for (d = 0; d < m_total; d++)
+            {
+              if (x_grid[2*d+1] <= 0.25)
+              {
+                f_grid[d] = 1.0;
+              }
+              else
+              {
+                f_grid[d] = 1.0/(sqrt(1+3*cos(2.0*PI*x_grid[2*d+1])*cos(2.0*PI*x_grid[2*d+1])));
+              }
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                if (x_compare[2*d+1] <= 0.25)
+                {
+                  f_compare[d] = 1.0;
+                }
+                else
+                {
+                  f_compare[d] = 1.0/(sqrt(1+3*cos(2.0*PI*x_compare[2*d+1])*cos(2.0*PI*x_compare[2*d+1])));
+                }
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+          default:
+            //fprintf(stderr,"Generating one function\n");
+            //fflush(stderr);
+            for (d = 0; d < m_total; d++)
+            {
+              f_grid[d] = 1.0;
+            }
+            if (mode == RANDOM)
+            {
+              for (d = 0; d < m_compare; d++)
+              {
+                f_compare[d] = 1.0;
+              }
+            }
+            else
+            {
+              memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+            }
+            break;
+        }
+
+        //fprintf(stderr,"Initializing trafo\n");
+        //fflush(stderr);
+        /* Init transform plan. */
+        nfsft_init_guru(&plan_adjoint,NQ[iNQ],m_total, NFSFT_NORMALIZED |
+          ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+          ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+          ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+          FFT_OUT_OF_PLACE, cutoff);
+
+        plan_adjoint_ptr = &plan_adjoint;
+
+        if (mode == RANDOM)
+        {
+          nfsft_init_guru(&plan,NQ[iNQ],m_compare, NFSFT_NORMALIZED |
+            ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+            ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+            ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+            FFT_OUT_OF_PLACE, cutoff);
+          plan_ptr = &plan;
+        }
+        else
+        {
+          plan_ptr = &plan_adjoint;
+        }
+
+        f_hat = (double _Complex*) nfft_malloc(NFSFT_F_HAT_SIZE(NQ[iNQ])*sizeof(double _Complex));
+
+        plan_adjoint_ptr->f_hat = f_hat;
+        plan_adjoint_ptr->x = x_grid;
+        plan_adjoint_ptr->f = f_grid;
+
+        plan_ptr->f_hat = f_hat;
+        plan_ptr->x = x_compare;
+        plan_ptr->f = f;
+
+        //fprintf(stderr,"Precomputing for x\n");
+        //fflush(stderr);
+        nfsft_precompute_x(plan_adjoint_ptr);
+        if (plan_adjoint_ptr != plan_ptr)
+        {
+          nfsft_precompute_x(plan_ptr);
+        }
+
+        /* Initialize cumulative time variable. */
+        t_avg = 0.0;
+        err_infty_avg = 0.0;
+        err_2_avg = 0.0;
+
+        /* Cycle through all runs. */
+        for (i = 0; i < 1/*repetitions*/; i++)
+        {
+          //fprintf(stderr,"Copying original values\n");
+          //fflush(stderr);
+          /* Copy exact funtion values to working array. */
+          //memcpy(f,f_grid,m_total*sizeof(double _Complex));
+
+          /* Initialize time measurement. */
+          t0 = getticks();
+
+          //fprintf(stderr,"Multiplying with quadrature weights\n");
+          //fflush(stderr);
+          /* Multiplication with the quadrature weights. */
+          /*fprintf(stderr,"\n");*/
+          d = 0;
+          for (k = 0; k < m_theta; k++)
+          {
+            for (n = 0; n < m_phi; n++)
+            {
+              /*fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le,  \t w[%d] = %le\n",
+              d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]),k,
+              w[k]);*/
+              f_grid[d] *= w[k];
+              d++;
+            }
+          }
+
+          t1 = getticks();
+          t_avg += nfft_elapsed_seconds(t1,t0);
+
+          nfft_free(w);
+
+          t0 = getticks();
+
+          /*fprintf(stderr,"\n");
+          d = 0;
+          for (d = 0; d < grid_total; d++)
+          {
+            fprintf(stderr,"f[%d] = %le + I*%le, theta[%d] = %le, phi[%d] = %le\n",
+                    d,creal(f[d]),cimag(f[d]),d,x[2*d+1],d,x[2*d]);
+          }*/
+
+          //fprintf(stderr,"Executing adjoint\n");
+          //fflush(stderr);
+          /* Check if the fast NFSFT algorithm shall be tested. */
+          if (use_nfsft != NO)
+          {
+            /* Execute the adjoint NFSFT transformation. */
+            nfsft_adjoint(plan_adjoint_ptr);
+          }
+          else
+          {
+            /* Execute the adjoint direct NDSFT transformation. */
+            nfsft_adjoint_direct(plan_adjoint_ptr);
+          }
+
+          /* Multiplication with the Fourier-Legendre coefficients. */
+          /*for (k = 0; k <= m[im]; k++)
+          {
+            for (n = -k; n <= k; n++)
+            {
+              fprintf(stderr,"f_hat[%d,%d] = %le\t + I*%le\n",k,n,
+                      creal(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]),
+                      cimag(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]));
+            }
+          }*/
+
+          //fprintf(stderr,"Executing trafo\n");
+          //fflush(stderr);
+          if (use_nfsft != NO)
+          {
+            /* Execute the NFSFT transformation. */
+            nfsft_trafo(plan_ptr);
+          }
+          else
+          {
+            /* Execute the direct NDSFT transformation. */
+            nfsft_trafo_direct(plan_ptr);
+          }
+
+          t1 = getticks();
+          t_avg += nfft_elapsed_seconds(t1,t0);
+
+          //fprintf(stderr,"Finalizing\n");
+          //fflush(stderr);
+          /* Finalize the NFSFT plans */
+          nfsft_finalize(plan_adjoint_ptr);
+          if (plan_ptr != plan_adjoint_ptr)
+          {
+            nfsft_finalize(plan_ptr);
+          }
+
+          /* Free data arrays. */
+          nfft_free(f_hat);
+          nfft_free(x_grid);
+
+          err_infty_avg += X(error_l_infty_complex)(f, f_compare, m_compare);
+          err_2_avg += X(error_l_2_complex)(f, f_compare, m_compare);
+
+          nfft_free(f_grid);
+
+          if (mode == RANDOM)
+          {
+          }
+          else
+          {
+            nfft_free(f_compare);
+          }
+
+          /*for (d = 0; d < m_total; d++)
+          {
+            fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le\n",
+              d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]));
+          }*/
+        }
+
+        //fprintf(stderr,"Calculating the error\n");
+        //fflush(stderr);
+        /* Calculate average time needed. */
+        t_avg = t_avg/((double)repetitions);
+
+        /* Calculate the average error. */
+        err_infty_avg = err_infty_avg/((double)repetitions);
+
+        /* Calculate the average error. */
+        err_2_avg = err_2_avg/((double)repetitions);
+
+        /* Print out the error measurements. */
+        fprintf(stdout,"%+le %+le %+le\n", t_avg, err_infty_avg, err_2_avg);
+        fprintf(stderr,"%d: %4d %4d %+le %+le %+le\n", tc, NQ[iNQ], SQ[iNQ],
+          t_avg, err_infty_avg, err_2_avg);
+      }
+    } /* for (im = 0; im < im_max; im++) - Process all cut-off
+       * bandwidths.*/
+    fprintf(stderr,"\n");
+
+    /* Delete precomputed data. */
+    nfsft_forget();
+
+    /* Free memory for cut-off bandwidths and grid size parameters. */
+    nfft_free(NQ);
+    nfft_free(SQ);
+    if (testmode == TIMING)
+    {
+      nfft_free(RQ);
+    }
+
+    if (mode == RANDOM)
+    {
+      nfft_free(x_compare);
+      nfft_free(f_compare);
+      nfft_free(f);
+    }
+
+    if (testmode == TIMING)
+    {
+      /* Allocate data structures. */
+      nfft_free(f_hat);
+      nfft_free(f);
+      nfft_free(x_grid);
+    }
+
+  } /* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */
+
+  /* Return exit code for successful run. */
+  return EXIT_SUCCESS;
+}
+/* \} */
diff --git a/applications/quadratureS2/quadratureS2.m b/applications/quadratureS2/quadratureS2.m
new file mode 100644
index 0000000..799e380
--- /dev/null
+++ b/applications/quadratureS2/quadratureS2.m
@@ -0,0 +1,177 @@
+function quadratureS2()
+%QUADRATURES2
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: quadratureS2.m 3784 2012-06-06 20:30:39Z keiner $
+
+% The name of the input file
+infilename = 'data.in';
+% The name of the output file
+outfilename = 'data.out';
+% The name of the program
+programname = 'quadratureS2';
+
+% Display the menu.
+selection = menu('quadratureS2 - Fast evaluation of quadrature formulae on the sphere',...
+  'Generate Figure 6.1 (a)','Generate Figure 6.1 (b)','Generate Figure 6.2 (a)',...
+  'Generate Figure 6.2 (b)')
+
+% Open input data file.
+file = fopen(infilename,'w');
+
+if (selection == 1)
+  % Set the grid type.
+  % 0 = Gauss-Legendre
+  gridtype = 0;
+  % Set the number of repetitions.
+  repetitions = 1;
+  % Set the size parameters.
+  S1 = 16:16:1024;
+  %S1 = 16:16:128;
+  S2 = [16,32,64,128,256,512,1024];
+  %S2 = [16,32,64,128];
+  % Set the bandwidhts.
+  N1 = S1;
+  N2 = S2;
+  % Write the number of testcases.
+  fprintf(file,'testcases=3\n');
+  % Write the testcases.
+  writeTestcase(file,1,1,3,1,1000,0,gridtype,[1],repetitions,[0],[N1;S1]);
+  writeTestcase(file,1,1,6,1,1000,0,gridtype,[1],repetitions,[0],[N1;S1]);
+  writeTestcase(file,0,0,0,0,1000,0,gridtype,[1],repetitions,[0],[N2;S2]);
+elseif (selection == 2)
+  % Set the grid type.
+  % 0 = Gauss-Legendre
+  gridtype=0;
+  % Set the number of repetitions.
+  repetitions=1;
+  % Set the bandwidhts.
+  N=16:16:1024;
+  % Set the size parameters.
+  S=1024*ones(size(N));
+  % Write the number of testcases.
+  fprintf(file,'testcases=4\n');
+  % Write the testcases.
+  writeTestcase(file,1,1,6,1,1000,0,gridtype,[3],repetitions,[0],[N;S]);
+  writeTestcase(file,1,1,6,1,1000,0,gridtype,[4],repetitions,[0],[N;S]);
+  writeTestcase(file,1,1,6,1,1000,0,gridtype,[5],repetitions,[0],[N;S]);
+  writeTestcase(file,1,1,6,1,1000,0,gridtype,[6],repetitions,[0],[N;S]);
+elseif (selection == 3)
+  % Set the number of repetitions.
+  repetitions=1;
+  % Set the size parameters.
+  S1 = 16:16:1024;
+  S2 = [1,2,4,8,16,32,64,128,256,512];
+  %S1 = 16:16:256;
+  %S2 = [1,2,4,8,16,32,64,128];
+  % Set the bandwidhts.
+  N1 = 128*ones(1,length(S1));
+  N2 = 128*ones(1,length(S2));
+  % Write the number of testcases.
+  fprintf(file,'testcases=4\n');
+  % Write the testcases.
+  writeTestcase(file,1,1,6,1,1000,0,0,[0,128],repetitions,[0],[N1;S1]);
+  writeTestcase(file,1,1,6,1,1000,0,1,[0,128],repetitions,[0],[N1;S1]);
+  writeTestcase(file,1,1,6,1,1000,0,2,[0,128],repetitions,[0],[N2;S2]);
+  writeTestcase(file,1,1,6,1,1000,0,3,[0,128],repetitions,[0],[N1;S1]);
+elseif (selection == 4)
+  % Set the grid type.
+  % 1 = Clenshaw-Curtis
+  gridtype=1;
+  % Set the number of repetitions.
+  repetitions=1;
+  % Set the bandwidhts.
+  N=16:16:1024;
+  %N=16:16:128;
+  % Set the number of nodes.
+  Q=N.*N;
+  % Set the number of repetitions
+  R=ceil(7500./(N.^(1.5))); %horzcat(100:-10:20,20*ones(1,length(N)-length(100:-10:20)));
+  % Set the bandwidhts.
+  N2=[1,2,4,8,16,32,64,128,256,512,1024];
+  %N2=[16,32,64,128];
+  % Set the number of nodes.
+  Q2=N2.*N2;
+  % Set the number of repetitions
+  R2=ceil(7500./(N2.^(2))); %horzcat(100:-10:20,20*ones(1,length(N)-length(100:-10:20)));
+  % Write the number of testcases.
+  fprintf(file,'testcases=2\n');
+  % Write the testcases.
+  writeTestcase(file,1,1,6,1,1000,1,gridtype,[0,128],repetitions,[0],[N;Q;R]);
+  writeTestcase(file,0,1,6,1,1000,1,gridtype,[0,128],repetitions,[0],[N2;Q2;R2]);
+else
+  error('Wrong selection!');
+end
+
+fclose(file);
+
+fprintf('Program in execution. Please be patient! This may take a while!\n');
+
+system(sprintf('./%s < %s > %s',programname,infilename,outfilename));
+file = fopen(outfilename,'r');
+T = readTestcase(file);
+fclose(file);
+figure('Color',[1 1 1],'InvertHardcopy','off','PaperSize',[20.98 29.68]);
+axes('FontSize',16);
+
+if (selection == 1)
+%if (false)
+  x = T{1}.parameters(:,1);
+  semilogy(x,T{1}.data(:,3),'-.','LineWidth',2,'Color',[0,0,0]);
+  hold on
+  semilogy(x,T{2}.data(:,3),'--','LineWidth',2,'Color',[0,0,0]);
+  x2 = T{3}.parameters(:,1);
+  semilogy(x2,T{3}.data(:,3),'-','LineWidth',2,'Color',[0,0,0]);
+  semilogy(x2,T{3}.data(:,3),'.','MarkerSize',2,'Color',[0,0,0]);
+  axis([x(1) x(end) 1e-16 1e-5])
+  xlabel('S=M');
+  ylabel('E_{\infty}','Rotation',0);
+elseif (selection == 2)
+  x = T{1}.parameters(:,1);
+  semilogy(x,T{1}.data(:,3),'-.','LineWidth',2,'Color',[0,0,0]);
+  hold on
+  semilogy(x,T{2}.data(:,3),':','LineWidth',2,'Color',[0,0,0]);
+  semilogy(x,T{3}.data(:,3),'--','LineWidth',2,'Color',[0,0,0]);
+  semilogy(x,T{4}.data(:,3),'-','LineWidth',2,'Color',[0,0,0]);
+  axis([x(1) x(end) 1e-12 1e-0])
+  xlabel('M');
+  ylabel('E_{\infty}','Rotation',0);
+elseif (selection == 3)
+  x = T{1}.parameters(:,2);
+  semilogy(x,T{1}.data(:,3),'-','LineWidth',2,'Color',[0,0,0]);
+  hold on
+  semilogy(x,T{2}.data(:,3),'--','LineWidth',2,'Color',[0,0,0]);
+  semilogy(x,T{3}.data(:,3),':','LineWidth',2,'Color',[0,0,0]);
+  semilogy(x,T{3}.data(:,3),'.','MarkerSize',2,'Color',[0,0,0]);
+  semilogy(x,T{4}.data(:,3),'-.','LineWidth',2,'Color',[0,0,0]);
+  axis([x(1) x(end) 1e-12 1e+0])
+  xlabel('S');
+  ylabel('E_{\infty}','Rotation',0);
+elseif (selection == 4)
+  x = T{1}.parameters(:,1);
+  x2 = T{2}.parameters(:,1);
+  semilogy(x,T{1}.data(:,1),'--','LineWidth',2,'Color',[0,0,0]);
+  hold on
+  semilogy(x2,T{2}.data(:,1),'-','LineWidth',2,'Color',[0,0,0]);
+  semilogy(x2,T{2}.data(:,1),'.','MarkerSize',2,'Color',[0,0,0]);
+  axis([x(1) x(end) 1e-4 1e+6])
+  xlabel('M');
+  ylabel('T','Rotation',0);
+end
diff --git a/applications/quadratureS2/readTestcase.m b/applications/quadratureS2/readTestcase.m
new file mode 100644
index 0000000..d54b212
--- /dev/null
+++ b/applications/quadratureS2/readTestcase.m
@@ -0,0 +1,176 @@
+function T = readTestcase(file)
+%READTESTCASE - Read quadratureS2.c testcase results from file
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: readTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+
+% Read the number of testcases.
+tc_max = fscanf(file,'%d',1);
+
+% Create empty cell array for the testcases.
+T = cell(tc_max,1);
+
+% Cycle through all testcases.
+for i = 1:tc_max
+
+  % Create structure.
+  t = struct('USENFSFT',[0],'USENFFT',[0],'CUTOFF',[0],'USEFPT',[0],...
+    'THRESHOLD',[0],'testmode',[0],'gridtype',{0},'testfunction',[0],...
+    'bandlimit',[0],'repetitions',[0],'mode',{0},'points',[0],...
+    'parameters',[0],'data',[0]);
+
+  % Read NFSFT usage flag.
+  v = fscanf(file,'%d',1);
+  if (v >= 1)
+
+    % Set NFSFT usage flag in the structure.
+    t.USENFSFT = [true];
+
+    % Read NFFT usage flag.
+    v = fscanf(file,'%d',1);
+
+    if (v >= 1)
+
+      % Set NFSFT usage flag in the structure.
+      t.USENFFFT = [true];
+
+      % Read the NFFT cut-off parameter.
+      v = fscanf(file,'%d',1);
+      t.CUTOFF = [v];
+
+    else
+
+      % Set NFSFT usage flag in the structure.
+      t.USENFFFT = [false];
+
+    end
+
+    % Read FPT usage flag.
+    v = fscanf(file,'%d',1);
+
+    if (v >= 1)
+
+      % Set NFSFT usage flag in the structure.
+      t.USEFPT = [true];
+
+      % Read the FPT threshold.
+      v = fscanf(file,'%lf',1);
+      t.THRESHOLD = [v];
+
+    else
+
+      % Set NFSFT usage flag in the structure.
+      t.USEFPT = [false];
+
+    end
+
+  else
+
+    % Set NFSFT usage flag in the structure.
+    t.USENFSFT = [false];
+
+  end
+
+  % Read the test mode.
+  v = fscanf(file,'%d',1);
+  t.testmode = [v];
+
+  if (v == 0)
+
+    % Read the grid type.
+    v = fscanf(file,'%d',1);
+    t.gridtype = [v];
+
+    % Read the testfunction.
+    v = fscanf(file,'%d',1);
+    t.testfunction = [v];
+
+    if (v == 0)
+
+      % Read the badnlimit.
+      v = fscanf(file,'%d',1);
+      t.bandlimit = [v];
+
+    end
+
+    % Read the number of repetitions.
+    v = fscanf(file,'%d',1);
+    t.repetitions = [v];
+
+    % Read the mode.
+    v = fscanf(file,'%d',1);
+    t.mode = [v];
+
+    if (v == 1)
+
+      % Read the points.
+      v = fscanf(file,'%d',1);
+      t.points = [v];
+
+    end
+
+  end
+
+  % Read the number of bandwidths.
+  v = fscanf(file,'%d',1);
+
+  if (t.testmode == 0)
+    % Create empty array for parameters.
+    p = zeros(2,v);
+    % Create empty array for parameters.
+    data = zeros(3,v);
+
+    % Read parameters.
+    p = fscanf(file,'%d',[2,v]);
+
+    % Transpose matrix to get dimensions right.
+    t.parameters = p';
+
+    % Read parameters.
+    data = fscanf(file,'%lf',[3,v]);
+
+    % Transpose matrix to get dimensions right.
+    t.data = data';
+  else
+    % Create empty array for parameters.
+    p = zeros(3,v);
+    % Create empty array for parameters.
+    data = zeros(1,v);
+
+    % Read parameters.
+    p = fscanf(file,'%d',[3,v]);
+
+    % Transpose matrix to get dimensions right.
+    t.parameters = p';
+
+    % Read parameters.
+    data = fscanf(file,'%lf',[1,v]);
+
+    % Transpose matrix to get dimensions right.
+    t.data = data';
+  end
+
+  % Assign testcase structure to field in cell array.
+  T{i} = t;
+
+end
+
+% End of the function
+return;
diff --git a/applications/quadratureS2/writeTestcase.m b/applications/quadratureS2/writeTestcase.m
new file mode 100644
index 0000000..f2de4f0
--- /dev/null
+++ b/applications/quadratureS2/writeTestcase.m
@@ -0,0 +1,77 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
+  testmode,gridtype,testfunction,repetitions,mode,bandwidths)
+%WRITETESTCASE - Write qudratureS2 testcases
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeTestcase.m 3785 2012-06-06 20:38:33Z keiner $
+
+% Write usenfsft
+fprintf(file,'nfsft=%d\n',usenfsft);
+if (usenfsft == 1)
+  % Write usenfft
+  fprintf(file,'nfft=%d\n',usenfft);
+  if (usenfft == 1)
+    % Write NFFT cut-off parameter
+    fprintf(file,'cutoff=%d\n',cutoff);
+  end
+  % Write use FPT
+  fprintf(file,'fpt=%d\n',usefpt);
+  if (usefpt == 1)
+    % Write NFSFT threshold
+    fprintf(file,'threshold=%e\n',threshold);
+  end
+end
+
+fprintf(file,'testmode=%d\n',testmode);
+
+if (testmode == 0)
+  % Write grid type
+  fprintf(file,'gridtype=%d\n',gridtype);
+  % Write grid type
+  fprintf(file,'testfunction=%d\n',testfunction(1));
+  if (testfunction(1) == 0)
+    fprintf(file,'bandlimit=%d\n',testfunction(2));
+  end
+  % Write number of repetitions
+  fprintf(file,'repetitions=%d\n',repetitions);
+  % Write mode
+  fprintf(file,'mode=%d\n',mode(1));
+  if (mode(1) == 1)
+    % Write points
+    fprintf(file,'points=%d\n',mode(2));
+  end
+end
+
+% Write number of bandwidths
+fprintf(file,'bandwidths=%d\n',size(bandwidths,2));
+
+if (testmode == 0)
+  % Write bandwidths
+  fprintf(file,'%d %d\n',bandwidths);
+else
+  % Write bandwidths
+  fprintf(file,'%d %d %d\n',bandwidths);
+end
+
+% Check if we need to provide also quadrature weights. This is the case if
+% the Gauss-Legendre quadrature grid is used.
+if (gridtype==0)
+  writeWeights(file,bandwidths(2,:));
+end
diff --git a/applications/quadratureS2/writeWeights.m b/applications/quadratureS2/writeWeights.m
new file mode 100644
index 0000000..f70c775
--- /dev/null
+++ b/applications/quadratureS2/writeWeights.m
@@ -0,0 +1,35 @@
+function writeWeights(file,m)
+%WRITEWEIGHTS
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeWeights.m 3784 2012-06-06 20:30:39Z keiner $
+
+for k = m
+  % Generate Gauss-Legendre nodes in co-latitudinal direction.
+  [theta,w] = lgwt(k+1,-1,1);
+  theta = (1/(2*pi))*acos(theta);
+
+  % Write data to file.
+  fprintf(file,'\n');
+  fprintf(file,'\n');
+  fprintf(file,'%.30f\n',w);
+  fprintf(file,'\n');
+  fprintf(file,'%.30f\n',theta);
+end
diff --git a/applications/radon/Makefile.am b/applications/radon/Makefile.am
new file mode 100644
index 0000000..3023ba9
--- /dev/null
+++ b/applications/radon/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = radon inverse_radon
+
+radon_SOURCES = radon.c
+radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+inverse_radon_SOURCES = inverse_radon.c
+inverse_radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = phantom.m radon.m ridgelet.m README
diff --git a/applications/radon/Makefile.in b/applications/radon/Makefile.in
new file mode 100644
index 0000000..63d5c08
--- /dev/null
+++ b/applications/radon/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = radon$(EXEEXT) inverse_radon$(EXEEXT)
+subdir = applications/radon
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_inverse_radon_OBJECTS = inverse_radon.$(OBJEXT)
+inverse_radon_OBJECTS = $(am_inverse_radon_OBJECTS)
+inverse_radon_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_radon_OBJECTS = radon.$(OBJEXT)
+radon_OBJECTS = $(am_radon_OBJECTS)
+radon_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(inverse_radon_SOURCES) $(radon_SOURCES)
+DIST_SOURCES = $(inverse_radon_SOURCES) $(radon_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+radon_SOURCES = radon.c
+radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+inverse_radon_SOURCES = inverse_radon.c
+inverse_radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = phantom.m radon.m ridgelet.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/radon/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu applications/radon/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+inverse_radon$(EXEEXT): $(inverse_radon_OBJECTS) $(inverse_radon_DEPENDENCIES) $(EXTRA_inverse_radon_DEPENDENCIES) 
+	@rm -f inverse_radon$(EXEEXT)
+	$(LINK) $(inverse_radon_OBJECTS) $(inverse_radon_LDADD) $(LIBS)
+radon$(EXEEXT): $(radon_OBJECTS) $(radon_DEPENDENCIES) $(EXTRA_radon_DEPENDENCIES) 
+	@rm -f radon$(EXEEXT)
+	$(LINK) $(radon_OBJECTS) $(radon_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inverse_radon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/radon.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/radon/README b/applications/radon/README
new file mode 100644
index 0000000..c40bf51
--- /dev/null
+++ b/applications/radon/README
@@ -0,0 +1,27 @@
+radon - Fast discrete NFFT-based Radon transform
+
+  This folder includes simple C programs (radon.c, inverse_radon.c) for the
+  computation of a fast discrete NFFT-based Radon transform and its inverse.
+  Use the Matlab script file radon.m for a simple demonstration.
+
+  The Matlab script file ridgelet.m contains an example of denoising by hard
+  thresholding the discrete ridgelet coefficients of a noisy image. The
+  discrete ridgelet transform is based on the fast discrete NFFT-based Radon
+  transform.
+
+
+  References:
+
+  [1] M. Fenn. Fast Fourier Transform at Nonequispaced Nodes and Applications,
+      PhD Thesis, University of Mannheim, 2005.
+
+  [2] J. Ma and M. Fenn. Combined complex ridgelet shrinkage and total
+      variation minimization. SIAM J. Sci. Comput. 28, 984-1000, 2006.
+
+  [3] D. Potts, and G. Steidl, G. A new linogram algorithm for computerized 
+      tomography. IMA J. Numer. Anal. 21, 769-782, 2001
+
+  [4] D. Potts, and G. Steidl,  New Fourier reconstruction algorithms for 
+      computerized tomography. in: Proceedings of SPIE: Wavelet Applications 
+      in Signal and Image Processing VIII,A. Aldroubi,A.F. Laine,
+      M.A. Unser (Eds.), Vol.:4119, pages 13-23,   2000
diff --git a/applications/radon/inverse_radon.c b/applications/radon/inverse_radon.c
new file mode 100644
index 0000000..7e22c7d
--- /dev/null
+++ b/applications/radon/inverse_radon.c
@@ -0,0 +1,293 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: inverse_radon.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file inverse_radon.c
+ * \brief NFFT-based discrete inverse Radon transform.
+ *
+ * Computes the inverse of the discrete Radon transform
+ * \f[
+ *    R_{\theta_t} f\left(\frac{s}{R}\right)
+ *    = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k}
+ *        \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)}
+ *        \, \mathrm{e}^{2\pi\mathrm{i} r s / R}
+ *    \qquad(t \in I_T, s \in I_R).
+ * \f]
+ * given at the points \f$\frac{r}{R}\theta_t\f$ of the polar or linogram grid
+ * and where \f$w_r\f$ are the weights of the Dirichlet- or Fejer-kernel
+ * by 1D-FFTs and the 2D-iNFFT.
+ * \author Markus Fenn
+ * \date 2005
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/** define weights of kernel function for discrete Radon transform */
+/*#define KERNEL(r) 1.0 */
+#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))
+
+/** generates the points x with weights w
+ *  for the polar grid with T angles and R offsets
+ */
+static int polar_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R/2; r<R/2; r++)
+    {
+      x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
+      x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
+      if (r==0)
+        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      else
+        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+    }
+  }
+
+  return 0;
+}
+
+/** generates the points x with weights w
+ *  for the linogram grid with T slopes and R offsets
+ */
+static int linogram_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R/2; r<R/2; r++)
+    {
+      if(t<0)
+      {
+        x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
+        x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+      }
+      else
+      {
+        x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
+        x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+      }
+      if (r==0)
+        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      else
+        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+    }
+  }
+
+  return 0;
+}
+
+/** computes the inverse discrete Radon transform of Rf
+ *  on the grid given by gridfcn() with T angles and R offsets
+ *  by a NFFT-based CG-type algorithm
+ */
+int Inverse_Radon_trafo(int (*gridfcn)(), int T, int R, double *Rf, int NN, double *f, int max_i)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+
+  fftw_complex *fft;                    /**< variable for the fftw-1Ds        */
+  fftw_plan my_fftw_plan;               /**< plan for the fftw-1Ds            */
+
+  int t,r;                              /**< index for directions and offsets */
+  double *x, *w;                        /**< knots and associated weights     */
+  int l;                                /**< index for iterations             */
+
+  int N[2],n[2];
+  int M=T*R;
+
+  N[0]=NN; n[0]=2*N[0];
+  N[1]=NN; n[1]=2*N[1];
+
+  fft = (fftw_complex *)nfft_malloc(R*sizeof(fftw_complex));
+  my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_FORWARD,FFTW_MEASURE);
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,
+                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init two dimensional infft plan */
+  solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
+
+  /** init nodes and weights of grid*/
+  gridfcn(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    if (j%R)
+      my_infft_plan.w[j]    = w[j];
+    else
+      my_infft_plan.w[j]    = 0.0;
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** compute 1D-ffts and init given samples and weights */
+  for(t=0; t<T; t++)
+  {
+/*    for(r=0; r<R/2; r++)
+       fft[r] = cexp(I*PI*r)*Rf[t*R+(r+R/2)];
+      for(r=0; r<R/2; r++)
+       fft[r+R/2] = cexp(I*PI*r)*Rf[t*R+r];
+ */
+
+    for(r=0; r<R; r++)
+      fft[r] = Rf[t*R+r] + _Complex_I*0.0;
+
+    nfft_fftshift_complex(fft, 1, &R);
+    fftw_execute(my_fftw_plan);
+    nfft_fftshift_complex(fft, 1, &R);
+
+    my_infft_plan.y[t*R] = 0.0;
+    for(r=-R/2+1; r<R/2; r++)
+      my_infft_plan.y[t*R+(r+R/2)] = fft[r+R/2]/KERNEL(r);
+  }
+
+  /** initialise some guess f_hat_0 */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+  /** solve the system */
+  solver_before_loop_complex(&my_infft_plan);
+
+  if (max_i<1)
+  {
+    l=1;
+    for(k=0;k<my_nfft_plan.N_total;k++)
+      my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+  }
+  else
+  {
+    for(l=1;l<=max_i;l++)
+    {
+      solver_loop_one_step_complex(&my_infft_plan);
+      /*if (sqrt(my_infft_plan.dot_r_iter)<=1e-12) break;*/
+    }
+  }
+  /*printf("after %d iteration(s): weighted 2-norm of original residual vector = %g\n",l-1,sqrt(my_infft_plan.dot_r_iter));*/
+
+  /** copy result */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    f[k] = creal(my_infft_plan.f_hat_iter[k]);
+
+  /** finalise the plans and free the variables */
+  fftw_destroy_plan(my_fftw_plan);
+  nfft_free(fft);
+  solver_finalize_complex(&my_infft_plan);
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+  return 0;
+}
+
+/** simple test program for the inverse discrete Radon transform
+ */
+int main(int argc,char **argv)
+{
+  int (*gridfcn)();                     /**< grid generating function        */
+  int T, R;                             /**< number of directions/offsets    */
+  FILE *fp;
+  int N;                                /**< image size                      */
+  double *Rf, *iRf;
+  int max_i;                            /**< number of iterations            */
+
+  if( argc!=6 )
+  {
+    printf("inverse_radon gridfcn N T R max_i\n");
+    printf("\n");
+    printf("gridfcn    \"polar\" or \"linogram\" \n");
+    printf("N          image size NxN            \n");
+    printf("T          number of slopes          \n");
+    printf("R          number of offsets         \n");
+    printf("max_i      number of iterations      \n");
+    exit(-1);
+  }
+
+  if (strcmp(argv[1],"polar") == 0)
+    gridfcn = polar_grid;
+  else
+    gridfcn = linogram_grid;
+
+  N = atoi(argv[2]);
+  T = atoi(argv[3]);
+  R = atoi(argv[4]);
+  /*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/
+  max_i = atoi(argv[5]);
+
+  Rf  = (double *)nfft_malloc(T*R*(sizeof(double)));
+  iRf = (double *)nfft_malloc(N*N*(sizeof(double)));
+
+  /** load data */
+  fp=fopen("sinogram_data.bin","rb");
+  if (fp==NULL)
+    return(-1);
+  fread(Rf,sizeof(double),T*R,fp);
+  fclose(fp);
+
+  /** inverse Radon transform */
+  Inverse_Radon_trafo(gridfcn,T,R,Rf,N,iRf,max_i);
+
+  /** write result */
+  fp=fopen("output_data.bin","wb+");
+  if (fp==NULL)
+    return(-1);
+  fwrite(iRf,sizeof(double),N*N,fp);
+  fclose(fp);
+
+  /** free the variables */
+  nfft_free(Rf);
+  nfft_free(iRf);
+
+  return EXIT_SUCCESS;
+}
diff --git a/applications/radon/phantom.m b/applications/radon/phantom.m
new file mode 100644
index 0000000..3d17d08
--- /dev/null
+++ b/applications/radon/phantom.m
@@ -0,0 +1,46 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function I=phantom(N)
+% phantom(N)
+%  generates the (modified) Shepp-Logan phantom of P. Toft
+%  as an NxN matrix.
+%
+% Reference: Peter Toft: "The Radon Transform - Theory and Implementation", Ph.D. thesis.
+%   Department of Mathematical Modelling, Technical University of Denmark, June 1996. 326 pages.
+
+% Author: Markus Fenn, 2005
+
+I = zeros(N,N);
+
+k = linspace(-1,1,N);
+[x,y] = meshgrid(k);
+
+I = I + 1.0 * ( (x/0.69).^2+(y/0.92).^2 <= 1 );
+I = I - 0.8 * ( (x/0.6624).^2+((y+0.0184)/0.874).^2 <= 1 );
+I = I - 0.2 * ( ( (cos(-18/360*2*pi)*(x-0.22)+sin(-18/360*2*pi)*y)/0.11).^2+...
+                ( (sin(-18/360*2*pi)*(x-0.22)-cos(-18/360*2*pi)*y)/0.31).^2 <= 1 );
+I = I - 0.2 * ( ( (cos( 18/360*2*pi)*(x+0.22)+sin( 18/360*2*pi)*y)/0.16).^2+...
+                ( (sin( 18/360*2*pi)*(x+0.22)-cos( 18/360*2*pi)*y)/0.41).^2 <= 1 );
+I = I + 0.1 * ( (x/0.21).^2+((y-0.35)/0.25).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y-0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y+0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( ((x+0.08)/0.046).^2+((y+0.605)/0.023).^2 <= 1 );
+I = I + 0.1 * ( (x/0.023).^2+((y+0.606)/0.023).^2 <= 1 );
+I = I + 0.1 * ( ((x-0.06)/0.023).^2+((y+0.605)/0.046).^2 <= 1 );
+
+I=flipud(I);
diff --git a/applications/radon/radon.c b/applications/radon/radon.c
new file mode 100644
index 0000000..9255104
--- /dev/null
+++ b/applications/radon/radon.c
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: radon.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file radon.c
+ * \brief NFFT-based discrete Radon transform.
+ *
+ * Computes the discrete Radon transform
+ * \f[
+ *    R_{\theta_t} f\left(\frac{s}{R}\right)
+ *    = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k}
+ *        \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)}
+ *        \, \mathrm{e}^{2\pi\mathrm{i} r s / R}
+ *    \qquad(t \in I_T, s \in I_R).
+ * \f]
+ * by taking the 2D-NFFT of \f$f_k\f$ (\f$k \in I_N^2\f$)
+ * at the points \f$\frac{r}{R}\theta_t\f$ of the polar or linogram grid
+ * followed by 1D-iFFTs for every direction \f$t \in T\f$,
+ * where \f$w_r\f$ are the weights of the Dirichlet- or Fejer-kernel.
+ * \author Markus Fenn
+ * \date 2005
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/** define weights of kernel function for discrete Radon transform */
+/*#define KERNEL(r) 1.0 */
+#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))
+
+/** generates the points x with weights w
+ *  for the polar grid with T angles and R offsets
+ */
+static int polar_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R/2; r<R/2; r++)
+    {
+      x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
+      x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
+      if (r==0)
+        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      else
+        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+    }
+  }
+
+  return 0;
+}
+
+/** generates the points x with weights w
+ *  for the linogram grid with T slopes and R offsets
+ */
+static int linogram_grid(int T, int R, double *x, double *w)
+{
+  int t, r;
+  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+  for(t=-T/2; t<T/2; t++)
+  {
+    for(r=-R/2; r<R/2; r++)
+    {
+      if(t<0)
+      {
+        x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
+        x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+      }
+      else
+      {
+        x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
+        x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+      }
+      if (r==0)
+        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      else
+        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+    }
+  }
+
+  return 0;
+}
+
+/** computes the NFFT-based discrete Radon transform of f
+ *  on the grid given by gridfcn() with T angles and R offsets
+ */
+int Radon_trafo(int (*gridfcn)(), int T, int R, double *f, int NN, double *Rf)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+
+  fftw_complex *fft;                    /**< variable for the fftw-1Ds        */
+  fftw_plan my_fftw_plan;               /**< plan for the fftw-1Ds            */
+
+  int t,r;                              /**< index for directions and offsets */
+  double *x, *w;                        /**< knots and associated weights     */
+
+  int N[2],n[2];
+  int M=T*R;
+
+  N[0]=NN; n[0]=2*N[0];
+  N[1]=NN; n[1]=2*N[1];
+
+  fft = (fftw_complex *)nfft_malloc(R*sizeof(fftw_complex));
+  my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_BACKWARD,FFTW_MEASURE);
+
+  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+  if (x==NULL)
+    return -1;
+
+  w = (double *)nfft_malloc(T*R*(sizeof(double)));
+  if (w==NULL)
+    return -1;
+
+  /** init two dimensional NFFT plan */
+  nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,
+                 PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+
+  /** init nodes from grid*/
+  gridfcn(T,R,x,w);
+  for(j=0;j<my_nfft_plan.M_total;j++)
+  {
+    my_nfft_plan.x[2*j+0] = x[2*j+0];
+    my_nfft_plan.x[2*j+1] = x[2*j+1];
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_PSI)
+    nfft_precompute_psi(&my_nfft_plan);
+
+  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(&my_nfft_plan);
+
+  /** init Fourier coefficients from given image */
+  for(k=0;k<my_nfft_plan.N_total;k++)
+    my_nfft_plan.f_hat[k] = f[k] + _Complex_I*0.0;
+
+  /** NFFT-2D */
+  nfft_trafo(&my_nfft_plan);
+
+  /** FFTW-1Ds */
+  for(t=0; t<T; t++)
+  {
+    fft[0]=0.0;
+    for(r=-R/2+1; r<R/2; r++)
+      fft[r+R/2] = KERNEL(r)*my_nfft_plan.f[t*R+(r+R/2)];
+
+    nfft_fftshift_complex(fft, 1, &R);
+    fftw_execute(my_fftw_plan);
+    nfft_fftshift_complex(fft, 1, &R);
+
+    for(r=0; r<R; r++)
+      Rf[t*R+r] = creal(fft[r])/R;
+
+/*    for(r=0; r<R/2; r++)
+      Rf[t*R+(r+R/2)] = creal(cexp(-I*PI*r)*fft[r]);
+    for(r=0; r<R/2; r++)
+      Rf[t*R+r] = creal(cexp(-I*PI*r)*fft[r+R/2]);
+ */
+  }
+
+  /** finalise the plans and free the variables */
+  fftw_destroy_plan(my_fftw_plan);
+  nfft_free(fft);
+  nfft_finalize(&my_nfft_plan);
+  nfft_free(x);
+  nfft_free(w);
+  return 0;
+}
+
+/** simple test program for the discrete Radon transform
+ */
+int main(int argc,char **argv)
+{
+  int (*gridfcn)();                     /**< grid generating function        */
+  int T, R;                             /**< number of directions/offsets    */
+  FILE *fp;
+  int N;                                /**< image size                      */
+  double *f, *Rf;
+
+  if( argc!=5 )
+  {
+    printf("radon gridfcn N T R\n");
+    printf("\n");
+    printf("gridfcn    \"polar\" or \"linogram\" \n");
+    printf("N          image size NxN            \n");
+    printf("T          number of slopes          \n");
+    printf("R          number of offsets         \n");
+    exit(-1);
+  }
+
+  if (strcmp(argv[1],"polar") == 0)
+    gridfcn = polar_grid;
+  else
+    gridfcn = linogram_grid;
+
+  N = atoi(argv[2]);
+  T = atoi(argv[3]);
+  R = atoi(argv[4]);
+  /*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/
+
+  f   = (double *)nfft_malloc(N*N*(sizeof(double)));
+  Rf  = (double *)nfft_malloc(T*R*(sizeof(double)));
+
+  /** load data */
+  fp=fopen("input_data.bin","rb");
+  if (fp==NULL)
+    return(-1);
+  fread(f,sizeof(double),N*N,fp);
+  fclose(fp);
+
+  /** Radon transform */
+  Radon_trafo(gridfcn,T,R,f,N,Rf);
+
+  /** write result */
+  fp=fopen("sinogram_data.bin","wb+");
+  if (fp==NULL)
+    return(-1);
+  fwrite(Rf,sizeof(double),T*R,fp);
+  fclose(fp);
+
+  /** free the variables */
+  nfft_free(f);
+  nfft_free(Rf);
+
+  return EXIT_SUCCESS;
+}
diff --git a/applications/radon/radon.m b/applications/radon/radon.m
new file mode 100644
index 0000000..8c758f3
--- /dev/null
+++ b/applications/radon/radon.m
@@ -0,0 +1,77 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: radon.m 3776 2012-06-03 13:29:25Z keiner $
+%file: radon.m
+%
+%  Simple test program for NFFT-based discrete
+%  Radon transform and its inverse.
+%
+%  See radon.c, inverse_radon.c and refman.pdf for details.
+%
+%author: Markus Fenn
+%date: February 2006
+
+N=128;
+f=phantom(N);
+%grid='polar'; T=2.5*N; R=1.5*N; it=5;
+grid='linogram'; T=2*N; R=2*N; it=5;
+
+%plot input image
+figure(1);
+imagesc(f);
+axis image
+title('phantom');
+
+%write input to file
+fp = fopen('input_data.bin','wb+');
+fwrite(fp,f','double');
+fclose(fp);
+
+%compute Radon transform by C-program
+system(sprintf('./radon %s %d %d %d',grid,N,T,R));
+
+%read result from file
+fp = fopen('sinogram_data.bin','rb+');
+Rf = fread(fp,[R,T],'double');
+fclose(fp);
+
+%plot sinogram
+figure(2);
+imagesc(Rf);
+axis image
+title('sinogram');
+xlabel('angle');
+ylabel('offset');
+
+%compute inverse Radon transform by C-program
+system(sprintf('./inverse_radon %s %d %d %d %d',grid,N,T,R,it));
+
+%read result from file
+fp = fopen('output_data.bin','rb+');
+iRf = fread(fp,[N,N],'double')';
+fclose(fp);
+
+%plot reconstructed image
+figure(3);
+imagesc(iRf);
+axis image
+title('reconstructed image');
+
+%compute error
+disp(sprintf('max(abs(f(:)-iRf(:))) = %e',max(abs(f(:)-iRf(:)))))
+
+%end: radon.m
diff --git a/applications/radon/ridgelet.m b/applications/radon/ridgelet.m
new file mode 100644
index 0000000..fb615d0
--- /dev/null
+++ b/applications/radon/ridgelet.m
@@ -0,0 +1,111 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ridgelet.m 3776 2012-06-03 13:29:25Z keiner $
+%file: ridgelet.m
+%
+%  Simple test program for denoising an image
+%  by hard thresholding the ridgelet coefficients.
+%  It uses the NFFT-based discrete Radon transform
+%  and translationinvariant discrete Wavelet transform.
+%  Requires Matlab-Toolbox WaveLab802.
+%
+%references: D. Donoho et al.,
+%  WaveLab802 - A collection of Matlab functions.
+%  http://www-stat.stanford.edu/~wavelab/, 1999.
+%
+%author: Markus Fenn
+%date: April 2006
+
+N=128;
+grid='linogram'; T=2*N; R=2*N; it=5;  %grid and parameters for Radon transform
+SNR=1;                                %noise level
+qmf=MakeONFilter('Battle',3);         %filter for translation invariant DWT
+threshold=17;                         %threshhold for denoising
+
+%original input image
+f=ones(N,N);
+for j=1:N
+  for k=j:(N-j)
+    f(j,k)=0.0;
+  end
+end
+f((5*N/8):(7*N/8),(N/4):(3*N/4))=0.0;
+
+%plot original image
+figure(1);
+colormap(gray);
+imagesc(f);
+axis image
+title('original image');
+
+%add gaussian white noise of given SNR
+noise=randn(size(f));
+noise_factor = norm(f - mean(f(:)),'fro')/10^(SNR/20);
+f2 = f + noise_factor * noise/norm(noise,'fro');
+
+%write noisy image to file
+fp = fopen('input_data.bin','wb+');
+fwrite(fp,f2','double');
+fclose(fp);
+
+%plot noisy image
+figure(2);
+colormap(gray);
+imagesc(f2);
+axis image
+title(sprintf('noisy image (SNR=%g)',SNR));
+
+%compute Radon transform by C-program
+system(sprintf('./radon %s %d %d %d %d',grid,N,T,R));
+
+%read result from file
+fp = fopen('sinogram_data.bin','rb+');
+Rf2 = fread(fp,[R,T],'double');
+fclose(fp);
+
+%compute translation invariant DWT for every direction
+Rf2d=zeros(size(Rf2));
+for k=1:T
+  TItable = FWT_TI(Rf2(:,k)', 4, qmf);
+  [nrow,ncol] = size(TItable);
+  for j = 2:ncol
+      TItable(:,j) = TItable(:,j) .* (abs(TItable(:,j)) > threshold);
+  end
+  temp = IWT_TI(TItable,qmf);
+  Rf2d(:,k)=temp';
+end
+
+%write result to file
+fp = fopen('sinogram_data.bin','wb+');
+fwrite(fp,Rf2d,'double');
+fclose(fp);
+
+%compute inverse Radon transform by C-program
+system(sprintf('./inverse_radon %s %d %d %d %d',grid,N,T,R,it));
+
+%read result
+fp = fopen('output_data.bin','rb+');
+iRf2d = fread(fp,[N,N],'double')';
+fclose(fp);
+
+figure(3);
+imagesc(iRf2d);
+colormap(gray);
+axis image
+title(sprintf('reconstructed image (SNR=%g)',20*log10( norm(f - mean(f(:)),'fro') / norm(f-iRf2d,'fro') )));
+
+%end: ridgelet.m
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..7a3789a
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# $Id$
+#
+# Copyright (c) 2003, 2006 Matteo Frigo
+# Copyright (c) 2003, 2006 Massachusetts Institute of Technology
+# Copyright (c) 2007 Jens Keiner
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program 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 GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+################################################################################
+# NOTE: If you just want to build NFFT3, do not use this file. Just follow the 
+# installation instructions as described in the tutorial found under 
+# doc/tutorial.
+#
+# This file is based on the bootstrap.sh script from FFTW 3.1.2 by
+# M. Frigo and S. G. Johnson
+################################################################################
+
+# alias to allow for systems having glibtoolize
+alias libtoolize=$(type -p glibtoolize libtoolize | head -1)
+
+touch ChangeLog
+
+echo "PLEASE IGNORE WARNINGS AND ERRORS"
+
+# paranoia: sometimes autoconf doesn't get things right the first time
+rm -rf autom4te.cache
+libtoolize
+autoreconf --verbose --install --force
+autoreconf --verbose --install --force
+autoreconf --verbose --install --force
+
+rm -f config.cache
diff --git a/config/compile b/config/compile
new file mode 100755
index 0000000..7b4a9a7
--- /dev/null
+++ b/config/compile
@@ -0,0 +1,342 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-03-05.13; # UTC
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/config.guess b/config/config.guess
new file mode 100755
index 0000000..de8e6dd
--- /dev/null
+++ b/config/config.guess
@@ -0,0 +1,1540 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-02-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_MACHINE}" in
+  i?86)
+     test -z "$VENDOR" && VENDOR=pc
+     ;;
+  *)
+     test -z "$VENDOR" && VENDOR=unknown
+     ;;
+esac
+test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep -q __ELF__
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+		os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-${VENDOR}-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+	echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-${VENDOR}-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+	echo m68k-${VENDOR}-mint${UNAME_RELEASE}
+	exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[4567])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+			esac ;;
+		    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^		//' << EOF >$dummy.c
+
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
+
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
+
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-${VENDOR}-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-${VENDOR}-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+	exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+	exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+	exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+	exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    5000:UNIX_System_V:4.*:*)
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-${VENDOR}-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
+	    amd64)
+		echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
+    i*:windows32*:*)
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-${VENDOR}-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-${VENDOR}-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-${VENDOR}-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-${VENDOR}-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	else
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabihf
+	    fi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-${VENDOR}-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-${VENDOR}-linux-gnu
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
+	  PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
+	  *)    echo hppa-${VENDOR}-linux-gnu ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-${VENDOR}-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-${VENDOR}-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+	# Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-${VENDOR}-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-${VENODR}-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+	exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-${VENODR}-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-${VENDOR}-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-${VENDOR}-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel at ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+		echo mips-nec-sysv${UNAME_RELEASE}
+	else
+		echo mips-${VENDOR}-sysv${UNAME_RELEASE}
+	fi
+	exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-${VENDOR}-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-${VENDOR}-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-${VENDOR}-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-${VENDOR}-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-${VENDOR}-its
+	exit ;;
+    SEI:*:*:SEIUX)
+	echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-esx
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+	"4"
+#else
+	""
+#endif
+	); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/config.sub b/config/config.sub
new file mode 100755
index 0000000..59bb593
--- /dev/null
+++ b/config/config.sub
@@ -0,0 +1,1779 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-04-18'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray | -microblaze)
+		os=
+		basic_machine=$1
+		;;
+	-bluegene*)
+		os=-cnk
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+	-chorusrdb)
+		os=-chorusrdb
+		basic_machine=$1
+		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| aarch64 | aarch64_be \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| le32 | le64 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep | metag \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64octeon | mips64octeonel \
+	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
+	| msp430 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| open8 \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pyramid \
+	| rl78 | rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| we32k \
+	| x86 | xc16x | xstormy16 | xtensa \
+	| z8k | z80)
+		basic_machine=$basic_machine-unknown
+		;;
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| aarch64-* | aarch64_be-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| be32-* | be64-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64octeon-* | mips64octeonel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pyramid-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
+	| tron-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-* | z80-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16 | cr16-*)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	microblaze)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc | ppcbe)	basic_machine=powerpc-unknown
+		;;
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tile*)
+		basic_machine=$basic_machine-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+	# First match some system type aliases
+	# that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* | -aros* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+	-os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+	-tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-nacl*)
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	score-*)
+		os=-elf
+		;;
+	spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-cnk*|-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/depcomp b/config/depcomp
new file mode 100755
index 0000000..debb6ff
--- /dev/null
+++ b/config/depcomp
@@ -0,0 +1,707 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2012-03-27.16; # UTC
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program 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
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputting dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+   gccflag=-qmakedep=gcc,-MF
+   depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'.  On the theory
+## that the space means something, we add a space to the output as
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like '#:fec' to the end of the
+    # dependency line.
+    tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' "$nl" < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # '$object: dependent.h' and one to simply 'dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+  # However on
+  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using '\':
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+  # tcc 0.9.26 (FIXME still under development at the moment of writing)
+  # will emit a similar output, but also prepend the continuation lines
+  # with horizontal tabulation characters.
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form 'foo.o: dependent.h',
+  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # '$object: dependent.h' and one to simply 'dependent.h:'.
+  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
+    < "$tmpdepfile" > "$depfile"
+  sed '
+    s/[ '"$tab"'][ '"$tab"']*/ /g
+    s/^ *//
+    s/ *\\*$//
+    s/^[^:]*: *//
+    /^$/d
+    /:$/d
+    s/$/ :/
+  ' < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+	       s/^ *//
+	       s/ \\*$//
+	       s/$/:/
+	       p
+	     }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in 'foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove '-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for ':'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove '-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/install-sh b/config/install-sh
new file mode 100755
index 0000000..377bb86
--- /dev/null
+++ b/config/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test X"$d" = X && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/ltmain.sh b/config/ltmain.sh
new file mode 100644
index 0000000..63ae69d
--- /dev/null
+++ b/config/ltmain.sh
@@ -0,0 +1,9655 @@
+
+# libtool (GNU libtool) 2.4.2
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --no-warn            don't display warning messages
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
+#
+# MODE must be one of the following:
+#
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4.2
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
+#
+# Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4.2
+TIMESTAMP=""
+package_revision=1.3337
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+	  export $lt_var
+	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+	fi"
+done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+$lt_unset CDPATH
+
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" 	$lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
+
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=${PATH_SEPARATOR-:}
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+	IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "$my_tmpdir"
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+	my_arg=`$ECHO "$1" | $SED \
+	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+	    $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+	s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
+        s/^# //
+	s/^# *$//
+	s/\$progname/'$progname'/
+	p
+    }' < "$progpath"
+    echo
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
+        s/^# //
+	s/^# *$//
+	s*\$progname*'$progname'*
+	s*\$host*'"$host"'*
+	s*\$SHELL*'"$SHELL"'*
+	s*\$LTCC*'"$LTCC"'*
+	s*\$LTCFLAGS*'"$LTCFLAGS"'*
+	s*\$LD*'"$LD"'*
+	s/\$with_gnu_ld/'"$with_gnu_ld"'/
+	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
+	p
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $opt_debug
+
+    func_error "missing argument for $1."
+    exit_cmd=exit
+}
+
+
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+nonopt=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	taglist="$taglist $tagname"
+
+	# Evaluate the configuration.  Be careful to quote the path
+	# and the sed script, to avoid splitting on whitespace, but
+	# also don't use non-portable quotes within backquotes within
+	# quotes we have to do it in 2 steps:
+	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	eval "$extractedcf"
+      else
+	func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
+    opt="$1"
+    shift
+    case $opt in
+      --debug|-x)	opt_debug='set -x'
+			func_echo "enabling shell trace mode"
+			$opt_debug
+			;;
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
+			;;
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
+			shift
+			;;
+      --preserve-dup-deps)
+			opt_preserve_dup_deps=:
+			;;
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
+			opt_silent=false
+func_append preserve_args " $opt"
+			;;
+      --no-warning|--no-warn)
+			opt_warning=false
+func_append preserve_args " $opt"
+			;;
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
+			shift
+			;;
+
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
+      # Separate optargs to long options:
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
+    esac
+  done
+
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+      ;;
+  esac
+
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
+
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
+    fi
+
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
+
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
+
+
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
+
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+	for lalib_p_l in 1 2 3 4
+	do
+	    read lalib_p_line
+	    case "$lalib_p_line" in
+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+	    esac
+	done
+	exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)	. "$1" ;;
+    *)		. "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	      # Double-quote args containing other shell metacharacters.
+	      func_append_quoted CC_quoted "$arg"
+	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
+	    case "$@ " in
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  func_echo "unable to infer tagged configuration"
+	  func_fatal_error "specify a tag with \`--tag'"
+#	else
+#	  func_verbose "using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  test -n "$libobj" && \
+	    func_fatal_error "you cannot specify \`-o' more than once"
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+	  continue
+	  ;;
+
+	-shared | -static | -prefer-pic | -prefer-non-pic)
+	  func_append later " $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  func_stripname '-Wc,' '' "$arg"
+	  args=$func_stripname_result
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+	  for arg in $args; do
+	    IFS="$save_ifs"
+	    func_append_quoted lastarg "$arg"
+	  done
+	  IFS="$save_ifs"
+	  func_stripname ' ' '' "$lastarg"
+	  lastarg=$func_stripname_result
+
+	  # Add the arguments to base_compile.
+	  func_append base_compile " $lastarg"
+	  continue
+	  ;;
+
+	*)
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+	func_basename "$srcfile"
+	libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	continue
+	;;
+
+      -static)
+	build_libtool_libs=no
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command"	\
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	func_show_eval '$MV "$output_obj" "$lobj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+	suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile$pie_flag"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	func_show_eval '$MV "$output_obj" "$obj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+	removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+	|| func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+	func_source "$file"
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && \
+	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  func_append dir "/$objdir"
+	else
+	  if test ! -f "$dir/$dlname"; then
+	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+	;;
+
+      *)
+	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if func_ltwrapper_script_p "$file"; then
+	  func_source "$file"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	elif func_ltwrapper_executable_p "$file"; then
+	  func_ltwrapper_scriptname "$file"
+	  func_source "$func_ltwrapper_scriptname_result"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+	      else
+		$lt_unset $lt_var
+	      fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
+
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+	func_append files " $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
+	;;
+      -g | -m | -o)
+	prev=$arg
+	;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	func_fatal_help "no file or destination specified"
+      else
+	func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+	func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  func_fatal_help "\`$destdir' must be an absolute directory name"
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	func_append staticlibs " $file"
+	;;
+
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$file' is not a valid libtool archive"
+
+	library_names=
+	old_library=
+	relink_command=
+	func_source "$file"
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append current_libdirs " $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append future_libdirs " $libdir" ;;
+	  esac
+	fi
+
+	func_dirname "$file" "/" ""
+	dir="$func_dirname_result"
+	func_append dir "$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  test "$inst_prefix_dir" = "$destdir" && \
+	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  func_warning "relinking \`$file'"
+	  func_show_eval "$relink_command" \
+	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names; shift
+	if test -n "$1"; then
+	  realname="$1"
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+	      'exit $?'
+	  tstripme="$stripme"
+	  case $host_os in
+	  cygwin* | mingw* | pw32* | cegcc*)
+	    case $realname in
+	    *.dll.a)
+	      tstripme=""
+	      ;;
+	    esac
+	    ;;
+	  esac
+	  if test -n "$tstripme" && test -n "$striplib"; then
+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      test "$linkname" != "$realname" \
+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
+	fi
+
+	# Install the pseudo-library for information purposes.
+	func_basename "$file"
+	name="$func_basename_result"
+	instname="$dir/$name"i
+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  func_lo2o "$destfile"
+	  staticdest=$func_lo2o_result
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	test -n "$destfile" && \
+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  func_lo2o "$file"
+	  staticobj=$func_lo2o_result
+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      func_stripname '' '.exe' "$file"
+	      file=$func_stripname_result
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin* | *mingw*)
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      wrapper=$func_ltwrapper_scriptname_result
+	    else
+	      func_stripname '' '.exe' "$file"
+	      wrapper=$func_stripname_result
+	    fi
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if func_ltwrapper_script_p "$wrapper"; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  func_source "$wrapper"
+
+	  # Check the variables that should have been set.
+	  test -z "$generated_by_libtool_version" && \
+	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      func_source "$lib"
+	    fi
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      func_warning "\`$lib' has not been installed in \`$libdir'"
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  func_source "$wrapper"
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    $opt_dry_run || {
+	      if test "$finalize" = yes; then
+	        tmpdir=`func_mktempdir`
+		func_basename "$file$stripped_ext"
+		file="$func_basename_result"
+	        outputname="$tmpdir/$file"
+	        # Replace the output file specification.
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+	        $opt_silent || {
+	          func_quote_for_expand "$relink_command"
+		  eval "func_echo $func_quote_for_expand_result"
+	        }
+	        if eval "$relink_command"; then :
+	          else
+		  func_error "error: relink \`$file' with the above command before installing it"
+		  $opt_dry_run || ${RM}r "$tmpdir"
+		  continue
+	        fi
+	        file="$outputname"
+	      else
+	        func_warning "cannot relink \`$file'"
+	      fi
+	    }
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    func_stripname '' '.exe' "$destfile"
+	    destfile=$func_stripname_result
+	    ;;
+	  esac
+	  ;;
+	esac
+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+	$opt_dry_run || if test -n "$outputname"; then
+	  ${RM}r "$tmpdir"
+	fi
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	my_dlsyms="${my_outputname}S.c"
+      else
+	func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+	# Discover the nlist of each of the dlfiles.
+	nlist="$output_objdir/${my_outputname}.nm"
+
+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+	# Parse the name list into a source file.
+	func_verbose "creating $output_objdir/$my_dlsyms"
+
+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+	if test "$dlself" = yes; then
+	  func_verbose "generating symbol list for \`$output'"
+
+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+	  # Add our own program objects to the symbol list.
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	  for progfile in $progfiles; do
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -n "$exclude_expsyms"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  if test -n "$export_symbols_regex"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  # Prepare the list of exported symbols
+	  if test -z "$export_symbols"; then
+	    export_symbols="$output_objdir/$outputname.exp"
+	    $opt_dry_run || {
+	      $RM $export_symbols
+	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      case $host in
+	      *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+	        ;;
+	      esac
+	    }
+	  else
+	    $opt_dry_run || {
+	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	      case $host in
+	        *cygwin* | *mingw* | *cegcc* )
+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+	          ;;
+	      esac
+	    }
+	  fi
+	fi
+
+	for dlprefile in $dlprefiles; do
+	  func_verbose "extracting global C symbols from \`$dlprefile'"
+	  func_basename "$dlprefile"
+	  name="$func_basename_result"
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
+	done
+
+	$opt_dry_run || {
+	  # Make sure we have at least an empty file.
+	  test -f "$nlist" || : > "$nlist"
+
+	  if test -n "$exclude_expsyms"; then
+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	    $MV "$nlist"T "$nlist"
+	  fi
+
+	  # Try sorting and uniquifying the output.
+	  if $GREP -v "^: " < "$nlist" |
+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
+		sort -k 3
+	      else
+		sort +2
+	      fi |
+	      uniq > "$nlist"S; then
+	    :
+	  else
+	    $GREP -v "^: " < "$nlist" > "$nlist"S
+	  fi
+
+	  if test -f "$nlist"S; then
+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+	  else
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	  fi
+
+	  echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+	  case $need_lib_prefix in
+	  no)
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  *)
+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  esac
+	  echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	} # !$opt_dry_run
+
+	pic_flag_for_symtable=
+	case "$compile_command " in
+	*" -static "*) ;;
+	*)
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+	  *-*-hpux*)
+	    pic_flag_for_symtable=" $pic_flag"  ;;
+	  *)
+	    if test "X$my_pic_p" != Xno; then
+	      pic_flag_for_symtable=" $pic_flag"
+	    fi
+	    ;;
+	  esac
+	  ;;
+	esac
+	symtab_cflags=
+	for arg in $LTCFLAGS; do
+	  case $arg in
+	  -pie | -fpie | -fPIE) ;;
+	  *) func_append symtab_cflags " $arg" ;;
+	  esac
+	done
+
+	# Now compile the dynamic symbol file.
+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+	# Clean up the generated files.
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+	# Transform the symbol file into the correct name.
+	symfileobj="$output_objdir/${my_outputname}S.$objext"
+	case $host in
+	*cygwin* | *mingw* | *cegcc* )
+	  if test -f "$output_objdir/$my_outputname.def"; then
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	  else
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  fi
+	  ;;
+	*)
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  ;;
+	esac
+	;;
+      *)
+	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+	;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+	$SED -n -e '
+	    1,100{
+		/ I /{
+		    s,.*,import,
+		    p
+		    q
+		}
+	    }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  func_arith $extracted_serial + 1
+	  extracted_serial=$func_arith_result
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+	func_verbose "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	$opt_dry_run || {
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  darwin_base_archive=`basename "$darwin_archive"`
+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+	  if test -n "$darwin_arches"; then
+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches ; do
+	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	      cd "$darwin_curdir"
+	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	    done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+	      $LIPO -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    $RM -rf unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd $darwin_orig_dir
+	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	} # !$opt_dry_run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+	;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+	func_emit_wrapper_arg1=${1-no}
+
+	$ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+	  $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$ECHO \"\$relink_command_output\" >&2
+	$RM \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+	else
+	  $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	$ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+	cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+	    cat <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+	      cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+	      cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test "$fast_install" = yes; then
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+	    else
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+	    fi
+
+
+	    cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+	{
+EOF
+	    case "$host" in
+	      *mingw* | *cygwin* )
+		# make stdout use "unix" line endings
+		echo "          setmode(1,_O_BINARY);"
+		;;
+	      esac
+
+	    cat <<"EOF"
+	  lt_dump_script (stdout);
+	  return 0;
+	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
+EOF
+
+	    cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+	    cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+	    case $host_os in
+	      mingw*)
+	    cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+	*p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+	*p = '/';
+      }
+  }
+EOF
+	    ;;
+	    esac
+
+	    cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
+    }
+
+EOF
+
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+		;;
+	      *)
+		cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+		;;
+	    esac
+
+	    cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+			  string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+	return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+	{
+	  concat_name = xstrdup (wrapper);
+	  if (check_executable (concat_name))
+	    return concat_name;
+	  XFREE (concat_name);
+	}
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+	has_slash = 1;
+	break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+	{
+	  for (p = path; *p; p = p_next)
+	    {
+	      const char *q;
+	      size_t p_len;
+	      for (q = p; *q; q++)
+		if (IS_PATH_SEPARATOR (*q))
+		  break;
+	      p_len = q - p;
+	      p_next = (*q == '\0' ? q : q + 1);
+	      if (p_len == 0)
+		{
+		  /* empty path: current directory */
+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+		  tmp_len = strlen (tmp);
+		  concat_name =
+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, tmp, tmp_len);
+		  concat_name[tmp_len] = '/';
+		  strcpy (concat_name + tmp_len + 1, wrapper);
+		}
+	      else
+		{
+		  concat_name =
+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, p, p_len);
+		  concat_name[p_len] = '/';
+		  strcpy (concat_name + p_len + 1, wrapper);
+		}
+	      if (check_executable (concat_name))
+		return concat_name;
+	      XFREE (concat_name);
+	    }
+	}
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+	{
+	  if (S_ISLNK (s.st_mode) != 0)
+	    {
+	      has_symlinks = 1;
+	      break;
+	    }
+
+	  /* search backwards for last DIR_SEPARATOR */
+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    p--;
+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    {
+	      /* no more DIR_SEPARATORS left */
+	      break;
+	    }
+	  *p = '\0';
+	}
+      else
+	{
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
+	}
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+	*str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
+	       const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	break
+	;;
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    func_warning "complete static linking is impossible in this configuration"
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	-static)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  func_append compile_command " @OUTPUT@"
+	  func_append finalize_command " @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    func_append compile_command " @SYMFILE@"
+	    func_append finalize_command " @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      func_append dlfiles " $arg"
+	    else
+	      func_append dlprefiles " $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  test -f "$arg" \
+	    || func_fatal_error "symbol file \`$arg' does not exist"
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	framework)
+	  case $host in
+	    *-*-darwin*)
+	      case "$deplibs " in
+		*" $qarg.ltframework "*) ;;
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
+		   ;;
+	      esac
+	      ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat "$save_arg"`
+	    do
+#	      func_append moreargs " $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if func_lalib_unsafe_p "$arg"; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		func_source "$arg"
+
+		if test -z "$pic_object" ||
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none &&
+		   test "$non_pic_object" = none; then
+		  func_fatal_error "cannot find name of object for \`$arg'"
+		fi
+
+		# Extract subdirectory from the argument.
+		func_dirname "$arg" "/" ""
+		xdir="$func_dirname_result"
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      func_append dlfiles " $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    func_append dlprefiles " $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  func_append libobjs " $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  func_append non_pic_objects " $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object="$pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if $opt_dry_run; then
+		  # Extract subdirectory from the argument.
+		  func_dirname "$arg" "/" ""
+		  xdir="$func_dirname_result"
+
+		  func_lo2o "$arg"
+		  pic_object=$xdir$objdir/$func_lo2o_result
+		  non_pic_object=$xdir$func_lo2o_result
+		  func_append libobjs " $pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+	        else
+		  func_fatal_error "\`$arg' is not a valid libtool object"
+		fi
+	      fi
+	    done
+	  else
+	    func_fatal_error "link input file \`$arg' does not exist"
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    func_fatal_error "only absolute run-paths are allowed"
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) func_append rpath " $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) func_append xrpath " $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	shrext)
+	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	weak)
+	  func_append weak_libs " $arg"
+	  prev=
+	  continue
+	  ;;
+	xcclinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xcompiler)
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
+	  prev=
+	  func_append compile_command " $wl$qarg"
+	  func_append finalize_command " $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  # See comment for -static flag below, for more details.
+	  func_append compile_command " $link_static_flag"
+	  func_append finalize_command " $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework)
+	prev=framework
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
+	  if test "$#" -gt 0; then
+	    func_fatal_error "require no space between \`-L' and \`$1'"
+	  else
+	    func_fatal_error "need path for \`-L' option"
+	  fi
+	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  test -z "$absdir" && \
+	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
+	*)
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  ::) dllsearchpath=$dir;;
+	  *) func_append dllsearchpath ":$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    func_append deplibs " System.ltframework"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	func_append deplibs " $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	prev=xcompiler
+	continue
+	;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	case "$new_inherited_linker_flags " in
+	    *" $arg "*) ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
+	esac
+	continue
+	;;
+
+      -multi_module)
+	single_module="${wl}-multi_module"
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # and Darwin in order for the loader to find any dlls it needs.
+	  func_warning "\`-no-install' is ignored for $host"
+	  func_warning "assuming \`-no-fast-install' instead"
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	func_stripname '-R' '' "$arg"
+	dir=$func_stripname_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
+	*)
+	  func_fatal_error "only absolute run-paths are allowed"
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) func_append xrpath " $dir" ;;
+	esac
+	continue
+	;;
+
+      -shared)
+	# The effects of -shared are defined in a previous loop.
+	continue
+	;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -static | -static-libtool-libs)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -weak)
+        prev=weak
+	continue
+	;;
+
+      -Wc,*)
+	func_stripname '-Wc,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Wl,*)
+	func_stripname '-Wl,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # -msg_* for osf cc
+      -msg_*)
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      *.$objext)
+	# A standard object.
+	func_append objs " $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if func_lalib_unsafe_p "$arg"; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  func_source "$arg"
+
+	  if test -z "$pic_object" ||
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none &&
+	     test "$non_pic_object" = none; then
+	    func_fatal_error "cannot find name of object for \`$arg'"
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  func_dirname "$arg" "/" ""
+	  xdir="$func_dirname_result"
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		func_append dlfiles " $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      func_append dlprefiles " $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    func_append libobjs " $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    func_append non_pic_objects " $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object="$pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if $opt_dry_run; then
+	    # Extract subdirectory from the argument.
+	    func_dirname "$arg" "/" ""
+	    xdir="$func_dirname_result"
+
+	    func_lo2o "$arg"
+	    pic_object=$xdir$objdir/$func_lo2o_result
+	    non_pic_object=$xdir$func_lo2o_result
+	    func_append libobjs " $pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  else
+	    func_fatal_error "\`$arg' is not a valid libtool object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	func_resolve_sysroot "$arg"
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  func_append dlfiles " $func_resolve_sysroot_result"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  func_append dlprefiles " $func_resolve_sysroot_result"
+	  prev=
+	else
+	  func_append deplibs " $func_resolve_sysroot_result"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps ; then
+	case "$libs " in
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+	  esac
+	  func_append pre_post_deps " $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+	passes="conv dlpreopen link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+	## FIXME: Find the place where the list is rebuilt in the wrong
+	##        order, and fix it there properly
+        tmp_deplibs=
+	for deplib in $deplibs; do
+	  tmp_deplibs="$deplib $tmp_deplibs"
+	done
+	deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+	# Collect and forward deplibs of preopened libtool libs
+	for lib in $dlprefiles; do
+	  # Ignore non-libtool-libs
+	  dependency_libs=
+	  func_resolve_sysroot "$lib"
+	  case $lib in
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
+	  esac
+
+	  # Collect preopened libtool deplibs, except any this library
+	  # has declared as weak libs
+	  for deplib in $dependency_libs; do
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
+	    case " $weak_libs " in
+	    *" $deplib_base "*) ;;
+	    *) func_append deplibs " $deplib" ;;
+	    esac
+	  done
+	done
+	libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    func_append compiler_flags " $deplib"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    func_warning "\`-l' is ignored for archives/objects"
+	    continue
+	  fi
+	  func_stripname '-l' '' "$deplib"
+	  name=$func_stripname_result
+	  if test "$linkmode" = lib; then
+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+	  else
+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+	  fi
+	  for searchdir in $searchdirs; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if func_lalib_p "$lib"; then
+		  library_names=
+		  old_library=
+		  func_source "$lib"
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    func_dirname "$lib" "" "."
+		    ladir="$func_dirname_result"
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+		;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	*.ltframework)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  *)
+	    func_warning "\`-L' is ignored for archives/objects"
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    func_stripname '-R' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) func_append xrpath " $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    # Linking convenience modules into shared libraries is allowed,
+	    # but linking other static libraries is non-portable.
+	    case " $dlpreconveniencelibs " in
+	    *" $deplib "*) ;;
+	    *)
+	      valid_a_lib=no
+	      case $deplibs_check_method in
+		match_pattern*)
+		  set dummy $deplibs_check_method; shift
+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		    valid_a_lib=yes
+		  fi
+		;;
+		pass_all)
+		  valid_a_lib=yes
+		;;
+	      esac
+	      if test "$valid_a_lib" != yes; then
+		echo
+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
+	      else
+		echo
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      fi
+	      ;;
+	    esac
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      func_append newdlprefiles " $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      func_append newdlfiles " $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+	fi
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$lib" \
+	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+	func_dirname "$lib" "" "."
+	ladir="$func_dirname_result"
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	inherited_linker_flags=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	func_source "$lib"
+
+	# Convert "-framework foo" to "foo.ltframework"
+	if test -n "$inherited_linker_flags"; then
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+	    case " $new_inherited_linker_flags " in
+	      *" $tmp_inherited_linker_flag "*) ;;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+	    esac
+	  done
+	fi
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      func_fatal_error "cannot find name of link library for \`$lib'"
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    func_fatal_error "\`$lib' is not a convenience library"
+	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
+	if test -z "$linklib"; then
+	  func_fatal_error "cannot find name of link library for \`$lib'"
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    func_append dlprefiles " $lib $dependency_libs"
+	  else
+	    func_append newdlfiles " $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    func_warning "cannot determine absolute directory name of \`$ladir'"
+	    func_warning "passing it literally to the linker, although it might fail"
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	func_basename "$lib"
+	laname="$func_basename_result"
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    func_warning "library \`$lib' was moved."
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
+	  fi
+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  else
+	    dir="$ladir/$objdir"
+	    absdir="$abs_ladir/$objdir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  fi
+	fi # $installed = yes
+	func_stripname 'lib' '.la' "$laname"
+	name=$func_stripname_result
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir" && test "$linkmode" = prog; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  func_append newlib_search_path " $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) func_stripname '-L' '' "$deplib"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
+		 ;;
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { { test "$prefer_static_libs" = no ||
+	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	       test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath:" in
+	      *"$absdir:"*) ;;
+	      *) func_append temp_rpath "$absdir:" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test "$use_static_libs" = built && test "$installed" = yes; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc*)
+	      # No point in relinking DLLs because paths are not encoded
+	      func_append notinst_deplibs " $lib"
+	      need_relink=no
+	    ;;
+	  *)
+	    if test "$installed" = no; then
+	      func_append notinst_deplibs " $lib"
+	      need_relink=yes
+	    fi
+	    ;;
+	  esac
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on some
+	  # systems (darwin).  Don't bleat about dlopened modules though!
+	  dlopenmodule=""
+	  for dlpremoduletest in $dlprefiles; do
+	    if test "X$dlpremoduletest" = "X$lib"; then
+	      dlopenmodule="$dlpremoduletest"
+	      break
+	    fi
+	  done
+	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+	    echo
+	    if test "$linkmode" = prog; then
+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $ECHO "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    shift
+	    realname="$1"
+	    shift
+	    libname=`eval "\\$ECHO \"$libname_spec\""`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw* | *cegcc*)
+	        func_arith $current - $age
+		major=$func_arith_result
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    func_basename "$soroot"
+	    soname="$func_basename_result"
+	    func_stripname 'lib' '.dll' "$soname"
+	    newlib=libimp-$func_stripname_result.a
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      func_verbose "extracting exported symbol list from \`$soname'"
+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      func_verbose "generating import library for \`$soname'"
+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a (non-dlopened) module then we can not
+		    # link against it, someone is ignoring the earlier warnings
+		    if /usr/bin/file -L $add 2> /dev/null |
+			 $GREP ": [^:]* bundle" >/dev/null ; then
+		      if test "X$dlopenmodule" != "X$lib"; then
+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+			if test -z "$old_library" ; then
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
+			else
+			  add="$dir/$old_library"
+			fi
+		      elif test -n "$old_library"; then
+			add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes &&
+	         test "$hardcode_direct_absolute" = no; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$absdir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      func_fatal_configuration "unsupported hardcode properties"
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes &&
+		 test "$hardcode_minus_L" != yes &&
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes &&
+	       test "$hardcode_direct_absolute" = no; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+		add="$inst_prefix_dir$libdir/$linklib"
+	      else
+		add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    echo
+	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) func_stripname '-R' '' "$libdir"
+	           temp_xrpath=$func_stripname_result
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) func_append xrpath " $temp_xrpath";;
+		   esac;;
+	      *) func_append temp_deplibs " $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  func_append newlib_search_path " $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $func_resolve_sysroot_result"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      path=
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
+	        func_dirname "$deplib" "" "."
+		dir=$func_dirname_result
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    func_warning "cannot determine absolute directory name of \`$dir'"
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if $GREP "^installed=no" $deplib > /dev/null; then
+		case $host in
+		*-*-darwin*)
+		  depdepl=
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$absdir/$objdir/$depdepl" ; then
+		      depdepl="$absdir/$objdir/$depdepl"
+		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+		      path=
+		    fi
+		  fi
+		  ;;
+		*)
+		  path="-L$absdir/$objdir"
+		  ;;
+		esac
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  test -z "$libdir" && \
+		    func_fatal_error "\`$deplib' is not a valid libtool archive"
+		  test "$absdir" != "$libdir" && \
+		    func_warning "\`$deplib' seems to be moved"
+
+		  path="-L$absdir"
+		fi
+		;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+	if test "$linkmode" = "prog"; then
+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+	else
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) func_append lib_search_path " $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) func_append tmp_libs " $deplib" ;;
+	      esac
+	      ;;
+	    *) func_append tmp_libs " $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  func_append tmp_libs " $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+	func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	func_stripname 'lib' '.la' "$outputname"
+	name=$func_stripname_result
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	test "$module" = no && \
+	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  func_stripname '' '.la' "$outputname"
+	  name=$func_stripname_result
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  func_stripname '' '.la' "$outputname"
+	  libname=$func_stripname_result
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+	else
+	  echo
+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+	  $ECHO "*** objects $objs is not portable!"
+	  func_append libobjs " $objs"
+	fi
+      fi
+
+      test "$dlself" != no && \
+	func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+	func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	test -n "$vinfo" && \
+	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+	test -n "$release" && \
+	  func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	shift
+	IFS="$save_ifs"
+
+	test -n "$7" && \
+	  func_fatal_help "too many parameters to \`-version-info'"
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$1"
+	  number_minor="$2"
+	  number_revision="$3"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
+	  darwin|linux|osf|windows|none)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|qnx|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_minor"
+	    lt_irix_increment=no
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$1"
+	  revision="$2"
+	  age="$3"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "CURRENT \`$current' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "REVISION \`$revision' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "AGE \`$age' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  func_arith $current + 1
+	  minor_current=$func_arith_result
+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	irix | nonstopux)
+	  if test "X$lt_irix_increment" = "Xno"; then
+	    func_arith $current - $age
+	  else
+	    func_arith $current - $age + 1
+	  fi
+	  major=$func_arith_result
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    func_arith $revision - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux) # correct to gnu/linux during the next big refactor
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    func_arith $current - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  func_append verstring ":${current}.0"
+	  ;;
+
+	qnx)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  func_arith $current - $age
+	  major=$func_arith_result
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  func_fatal_configuration "unknown library version type \`$version_type'"
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    func_warning "undefined symbols not allowed in $host shared libraries"
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_append libobjs " $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$opt_mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$ECHO "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext | *.gcno)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+		 then
+		   continue
+		 fi
+	       fi
+	       func_append removelist " $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	test -n "$removelist" && \
+	  func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	func_append oldlibs " $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) func_append dlfiles " $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) func_append dlprefiles " $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    func_append deplibs " System.ltframework"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      func_append deplibs " -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $opt_dry_run || $RM conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $opt_dry_run || $RM conftest
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    func_append newdeplibs " $i"
+		    i=""
+		    ;;
+		  esac
+		fi
+		if test -n "$i" ; then
+		  libname=`eval "\\$ECHO \"$libname_spec\""`
+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		  set dummy $deplib_matches; shift
+		  deplib_match=$1
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    func_append newdeplibs " $i"
+		  else
+		    droppeddeps=yes
+		    echo
+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		$opt_dry_run || $RM conftest
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      func_append newdeplibs " $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval "\\$ECHO \"$libname_spec\""`
+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		    set dummy $deplib_matches; shift
+		    deplib_match=$1
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      func_append newdeplibs " $i"
+		    else
+		      droppeddeps=yes
+		      echo
+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  echo
+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method; shift
+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null |
+			 $GREP " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+			 $SED -e 10q |
+			 $EGREP "$file_magic_regex" > /dev/null; then
+			func_append newdeplibs " $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method; shift
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+		       $EGREP "$match_pattern_regex" > /dev/null; then
+		      func_append newdeplibs " $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+	    done
+	  fi
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	    ;;
+	  esac
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library with the System framework
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+	*-*-darwin*)
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		func_append dep_rpath " $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append perm_rpath " $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      func_append rpath "$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	shift
+	realname="$1"
+	shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	linknames=
+	for link
+	do
+	  func_append linknames " $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	test "X$libobjs" = "X " && libobjs=
+
+	delfiles=
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+	  export_symbols="$output_objdir/$libname.uexp"
+	  func_append delfiles " $export_symbols"
+	fi
+
+	orig_export_symbols=
+	case $host_os in
+	cygwin* | mingw* | cegcc*)
+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+	    # exporting using user supplied symfile
+	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+	      # and it's NOT already a .def file. Must figure out
+	      # which of the given symbols are data symbols and tag
+	      # them as such. So, trigger use of export_symbols_cmds.
+	      # export_symbols gets reassigned inside the "prepare
+	      # the list of exported symbols" if statement, so the
+	      # include_expsyms logic still works.
+	      orig_export_symbols="$export_symbols"
+	      export_symbols=
+	      always_export_symbols=yes
+	    fi
+	  fi
+	  ;;
+	esac
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $opt_dry_run || $RM $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd1 in $cmds; do
+	      IFS="$save_ifs"
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
+		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
+		skipped_export=false
+	      else
+		# The command line is too long to execute in one step.
+		func_verbose "using reloadable object file for export list..."
+		skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  tmp_export_symbols="$export_symbols"
+	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	fi
+
+	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+	  # The given exports_symbols file has to be filtered, so filter it.
+	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	  # 's' commands which not all seds can handle. GNU sed should be fine
+	  # though. Also, the filter scales superlinearly with the number of
+	  # global variables. join(1) would be nice here, but unfortunately
+	  # isn't a blessed tool.
+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	  export_symbols=$output_objdir/$libname.def
+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+	  case " $convenience " in
+	  *" $test_deplib "*) ;;
+	  *)
+	    func_append tmp_deplibs " $test_deplib"
+	    ;;
+	  esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec" &&
+	    test "$compiler_needs_object" = yes &&
+	    test -z "$libobjs"; then
+	    # extract the archives, so we have objects to list.
+	    # TODO: could optimize this to just extract one archive.
+	    whole_archive_flag_spec=
+	  fi
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    func_append generated " $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    func_append libobjs " $func_extract_archives_result"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  func_append linker_flags " $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    eval test_cmds=\"$archive_expsym_cmds\"
+	    cmds=$archive_expsym_cmds
+	  else
+	    eval test_cmds=\"$archive_cmds\"
+	    cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" &&
+	   func_len " $test_cmds" &&
+	   len=$func_len_result &&
+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise
+	  # or, if using GNU ld and skipped_export is not :, use a linker
+	  # script.
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  func_basename "$output"
+	  output_la=$func_basename_result
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  last_robj=
+	  k=1
+
+	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+	    output=${output_objdir}/${output_la}.lnkscript
+	    func_verbose "creating GNU ld script: $output"
+	    echo 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
+	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+	    output=${output_objdir}/${output_la}.lnk
+	    func_verbose "creating linker input file list: $output"
+	    : > $output
+	    set x $save_libobjs
+	    shift
+	    firstobj=
+	    if test "$compiler_needs_object" = yes; then
+	      firstobj="$1 "
+	      shift
+	    fi
+	    for obj
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+	  else
+	    if test -n "$save_libobjs"; then
+	      func_verbose "creating reloadable object files..."
+	      output=$output_objdir/$output_la-${k}.$objext
+	      eval test_cmds=\"$reload_cmds\"
+	      func_len " $test_cmds"
+	      len0=$func_len_result
+	      len=$len0
+
+	      # Loop over the list of objects to be linked.
+	      for obj in $save_libobjs
+	      do
+		func_len " $obj"
+		func_arith $len + $func_len_result
+		len=$func_arith_result
+		if test "X$objlist" = X ||
+		   test "$len" -lt "$max_cmd_len"; then
+		  func_append objlist " $obj"
+		else
+		  # The command $test_cmds is almost too long, add a
+		  # command to the queue.
+		  if test "$k" -eq 1 ; then
+		    # The first file doesn't have a previous command to add.
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
+		  else
+		    # All subsequent reloadable object files will link in
+		    # the last one created.
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+		  fi
+		  last_robj=$output_objdir/$output_la-${k}.$objext
+		  func_arith $k + 1
+		  k=$func_arith_result
+		  output=$output_objdir/$output_la-${k}.$objext
+		  objlist=" $obj"
+		  func_len " $last_robj"
+		  func_arith $len0 + $func_len_result
+		  len=$func_arith_result
+		fi
+	      done
+	      # Handle the remaining objects by creating one last
+	      # reloadable object file.  All subsequent reloadable object
+	      # files will link in the last one created.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+	      if test -n "$last_robj"; then
+	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+	      fi
+	      func_append delfiles " $output"
+
+	    else
+	      output=
+	    fi
+
+	    if ${skipped_export-false}; then
+	      func_verbose "generating symbol list for \`$libname.la'"
+	      export_symbols="$output_objdir/$libname.exp"
+	      $opt_dry_run || $RM $export_symbols
+	      libobjs=$output
+	      # Append the command to create the export file.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+	      if test -n "$last_robj"; then
+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	    fi
+
+	    test -n "$save_libobjs" &&
+	      func_verbose "creating a temporary reloadable object file: $output"
+
+	    # Loop through the commands generated above and execute them.
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS="$save_ifs"
+	      $opt_silent || {
+		  func_quote_for_expand "$cmd"
+		  eval "func_echo $func_quote_for_expand_result"
+	      }
+	      $opt_dry_run || eval "$cmd" || {
+		lt_exit=$?
+
+		# Restore the uninstalled library and exit
+		if test "$opt_mode" = relink; then
+		  ( cd "$output_objdir" && \
+		    $RM "${realname}T" && \
+		    $MV "${realname}U" "$realname" )
+		fi
+
+		exit $lt_exit
+	      }
+	    done
+	    IFS="$save_ifs"
+
+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+
+          if ${skipped_export-false}; then
+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	      tmp_export_symbols="$export_symbols"
+	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	    fi
+
+	    if test -n "$orig_export_symbols"; then
+	      # The given exports_symbols file has to be filtered, so filter it.
+	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	      # 's' commands which not all seds can handle. GNU sed should be fine
+	      # though. Also, the filter scales superlinearly with the number of
+	      # global variables. join(1) would be nice here, but unfortunately
+	      # isn't a blessed tool.
+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	      export_symbols=$output_objdir/$libname.def
+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	    fi
+	  fi
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	      cmds=$archive_expsym_cmds
+	    else
+	      cmds=$archive_cmds
+	    fi
+	  fi
+	fi
+
+	if test -n "$delfiles"; then
+	  # Append the command to remove temporary files to $cmds.
+	  eval cmds=\"\$cmds~\$RM $delfiles\"
+	fi
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append libobjs " $func_extract_archives_result"
+	  test "X$libobjs" = "X " && libobjs=
+	fi
+
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $opt_silent || {
+	    func_quote_for_expand "$cmd"
+	    eval "func_echo $func_quote_for_expand_result"
+	  }
+	  $opt_dry_run || eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test "$opt_mode" = relink; then
+	      ( cd "$output_objdir" && \
+	        $RM "${realname}T" && \
+		$MV "${realname}U" "$realname" )
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      func_show_eval '${RM}r "$gentop"'
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+	test -n "$objs$old_deplibs" && \
+	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+	libobj=$output
+	func_lo2o "$libobj"
+	obj=$func_lo2o_result
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	else
+	  gentop="$output_objdir/${obj}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+	func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) func_stripname '' '.exe' "$output"
+	          output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+	&& test "$dlopen_self" = unknown \
+	&& test "$dlopen_self_static" = unknown && \
+	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+	# Don't allow lazy linking, it breaks C++ global constructors
+	# But is supposedly fixed on 10.4 or later (yay!).
+	if test "$tagname" = CXX ; then
+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+	    10.[0123])
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
+	    ;;
+	  esac
+	fi
+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append perm_rpath " $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  ::) dllsearchpath=$libdir;;
+	  *) func_append dllsearchpath ":$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+	func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+	# Replace the output file specification.
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	exit_status=0
+	func_show_eval "$link_command" 'exit_status=$?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	# Delete the generated files.
+	if test -f "$output_objdir/${outputname}S.${objext}"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+	fi
+
+	exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$opt_dry_run || $RM $output
+	# Link the executable and exit
+	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	func_warning "this platform does not like uninstalled shared libraries"
+	func_warning "\`$output' will be relinked during installation"
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    func_quote_for_eval "$var_value"
+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) func_stripname '' '.exe' "$output"
+	         output=$func_stripname_result ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    func_stripname '' '.exe' "$outputname"
+	    outputname=$func_stripname_result ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    func_dirname_and_basename "$output" "" "."
+	    output_name=$func_basename_result
+	    output_path=$func_dirname_result
+	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
+	    cwrapper="$output_path/$output_name.exe"
+	    $RM $cwrappersource $cwrapper
+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_cwrapperexe_src > $cwrappersource
+
+	    # The wrapper executable is built using the $host compiler,
+	    # because it contains $host paths and files. If cross-
+	    # compiling, it, like the target executable, must be
+	    # executed on the $host or under an emulation environment.
+	    $opt_dry_run || {
+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+	      $STRIP $cwrapper
+	    }
+
+	    # Now, create the wrapper script for func_source use:
+	    func_ltwrapper_scriptname $cwrapper
+	    $RM $func_ltwrapper_scriptname_result
+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+	    $opt_dry_run || {
+	      # note: this script will not be executed, so do not chmod.
+	      if test "x$build" = "x$host" ; then
+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+	      else
+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+	      fi
+	    }
+	  ;;
+	  * )
+	    $RM $output
+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_wrapper no > $output
+	    chmod +x $output
+	  ;;
+	esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save $symfileobj"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	  if test "$preload" = yes && test -f "$symfileobj"; then
+	    func_append oldobjs " $symfileobj"
+	  fi
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	func_append generated " $gentop"
+
+	func_extract_archives $gentop $addlibs
+	func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+	cmds=$old_archive_from_new_cmds
+      else
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append oldobjs " $func_extract_archives_result"
+	fi
+
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      func_basename "$obj"
+	      $ECHO "$func_basename_result"
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  echo "copying selected object files to avoid basename conflicts..."
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+	  func_mkdir_p "$gentop"
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    func_basename "$obj"
+	    objbase="$func_basename_result"
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		func_arith $counter + 1
+		counter=$func_arith_result
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
+	      ;;
+	    *) func_append oldobjs " $obj" ;;
+	    esac
+	  done
+	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
+	eval cmds=\"$old_archive_cmds\"
+
+	func_len " $cmds"
+	len=$func_len_result
+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  func_verbose "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  eval test_cmds=\"$old_archive_cmds\"
+	  func_len " $test_cmds"
+	  len0=$func_len_result
+	  len=$len0
+	  for obj in $save_oldobjs
+	  do
+	    func_len " $obj"
+	    func_arith $len + $func_len_result
+	    len=$func_arith_result
+	    func_append objlist " $obj"
+	    if test "$len" -lt "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+		RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	      len=$len0
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  func_quote_for_eval "$var_value"
+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		func_basename "$deplib"
+		name="$func_basename_result"
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
+		;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+
+	    for lib in $dlfiles; do
+	      case $lib in
+	      *.la)
+	        func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      *) func_append newdlfiles " $lib" ;;
+	      esac
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+	      *.la)
+		# Only pass preopened files to the pseudo-archive (for
+		# eventual linking with the app. that links it) if we
+		# didn't already link the preopened objects directly into
+		# the library:
+		func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      esac
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlfiles " $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlprefiles " $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $RM $output
+	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
+	  esac
+	  $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $ECHO >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+	odir="$objdir"
+      else
+	odir="$dir/$objdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$opt_mode" = uninstall && odir="$dir"
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
+	case " $rmdirs " in
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+	 { test -h "$file"; } >/dev/null 2>&1 ||
+	 test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if func_lalib_p "$file"; then
+	  func_source $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    func_append rmfiles " $odir/$n"
+	  done
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+	  case "$opt_mode" in
+	  clean)
+	    case " $library_names " in
+	    *" $dlname "*) ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+	    esac
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if func_lalib_p "$file"; then
+
+	  # Read the .lo file
+	  func_source $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" &&
+	     test "$pic_object" != none; then
+	    func_append rmfiles " $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" &&
+	     test "$non_pic_object" != none; then
+	    func_append rmfiles " $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$opt_mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    func_stripname '' '.exe' "$file"
+	    file=$func_stripname_result
+	    func_stripname '' '.exe' "$name"
+	    noexename=$func_stripname_result
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    func_append rmfiles " $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if func_ltwrapper_p "$file"; then
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      relink_command=
+	      func_source $func_ltwrapper_scriptname_result
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
+	    else
+	      relink_command=
+	      func_source $dir/$noexename
+	    fi
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      func_append rmfiles " $odir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      func_append rmfiles " $odir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$opt_mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/config/missing b/config/missing
new file mode 100755
index 0000000..9a55648
--- /dev/null
+++ b/config/missing
@@ -0,0 +1,330 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.18; # UTC
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program 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
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, 'missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file 'aclocal.m4'
+  autoconf     touch file 'configure'
+  autoheader   touch file 'config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all 'Makefile.in' files
+  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
+  flex         create 'lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create 'lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running '$TOOL --version' or '$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
+         to install the Automake and Perl packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified '${configure_ac}'.  You might want to install the
+         Autoconf and GNU m4 packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acconfig.h' or '${configure_ac}'.  You might want
+         to install the Autoconf and GNU m4 packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+         You might want to install the Automake and Perl packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: '$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get '$1' as part of Autoconf from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: '$1' $msg.  You should only need it if
+         you modified a '.y' file.  You may need the Bison package
+         in order for those modifications to take effect.  You can get
+         Bison from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+	case $LASTARG in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f y.tab.h; then
+	echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.l' file.  You may need the Flex package
+         in order for those modifications to take effect.  You can get
+         Flex from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+	case $LASTARG in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f lex.yy.c; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 Help2man package in order for those modifications to take
+	 effect.  You can get Help2man from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.texi' or '.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy 'make' (AIX,
+         DU, IRIX).  You might want to install the Texinfo package or
+         the GNU make package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: '$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the 'README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing '$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..2fdf263
--- /dev/null
+++ b/configure
@@ -0,0 +1,22488 @@
+#! /bin/sh
+# From configure.ac Id: configure.ac 3971 2013-04-29 08:59:35Z tovo .
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for NFFT 3.2.3.
+#
+# Report bugs to <bugs at nfft.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+#
+# 2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and bugs at nfft.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='NFFT'
+PACKAGE_TARNAME='nfft'
+PACKAGE_VERSION='3.2.3'
+PACKAGE_STRING='NFFT 3.2.3'
+PACKAGE_BUGREPORT='bugs at nfft.org'
+PACKAGE_URL=''
+
+ac_unique_file="include/nfft3.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+TICKS_PER_SECOND
+LIBOBJS
+POW_LIB
+ALLOCA
+PRTDIAG
+matlab_fftw3_LDFLAGS
+matlab_fftw3_LIBS
+matlab_mexext
+matlab_LDFLAGS
+matlab_LIBS
+matlab_CPPFLAGS
+HAVE_MATLAB_THREADS_FALSE
+HAVE_MATLAB_THREADS_TRUE
+HAVE_MATLAB_FALSE
+HAVE_MATLAB_TRUE
+matlab_prog_mexext
+OPENMP_CFLAGS
+HAVE_OPENMP_FALSE
+HAVE_OPENMP_TRUE
+fftw3_LDFLAGS
+fftw3_threads_LIBS
+fftw3_LIBS
+am__fastdepCCAS_FALSE
+am__fastdepCCAS_TRUE
+CCASDEPMODE
+CCASFLAGS
+CCAS
+HAVE_THREADS_FALSE
+HAVE_THREADS_TRUE
+HAVE_FPT
+HAVE_FPT_FALSE
+HAVE_FPT_TRUE
+HAVE_MRI
+HAVE_MRI_FALSE
+HAVE_MRI_TRUE
+HAVE_NSFFT
+HAVE_NSFFT_FALSE
+HAVE_NSFFT_TRUE
+HAVE_NNFFT
+HAVE_NNFFT_FALSE
+HAVE_NNFFT_TRUE
+HAVE_NFSOFT
+HAVE_NFSOFT_FALSE
+HAVE_NFSOFT_TRUE
+HAVE_NFSFT
+HAVE_NFSFT_FALSE
+HAVE_NFSFT_TRUE
+HAVE_NFST
+HAVE_NFST_FALSE
+HAVE_NFST_TRUE
+HAVE_NFCT
+HAVE_NFCT_FALSE
+HAVE_NFCT_TRUE
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+SET_MAKE
+SHARED_VERSION_INFO
+LIBTOOL_DEPS
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+AWK
+RANLIB
+STRIP
+ac_ct_AR
+AR
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+abs_srcdir
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_dependency_tracking
+enable_maintainer_mode
+enable_all
+enable_nfct
+enable_nfst
+enable_nfsft
+enable_nfsoft
+enable_nnfft
+enable_nsfft
+enable_mri
+enable_fpt
+enable_openmp
+enable_debug
+enable_measure_time
+enable_measure_time_fftw
+enable_mips_zbus_timer
+with_window
+with_fftw3
+with_fftw3_libdir
+with_fftw3_includedir
+with_matlab
+with_matlab_arch
+enable_matlab_argchecks
+with_matlab_fftw3_libdir
+enable_matlab_threads
+enable_portable_binary
+with_gcc_arch
+with_apple_gcc_arch
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CCAS
+CCASFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+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 NFFT 3.2.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --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/nfft]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of NFFT 3.2.3:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
+  --enable-maintainer-mode
+                          enable make rules and dependencies not useful (and
+                          sometimes confusing) to the casual installer
+  --enable-all            build all modules
+  --enable-nfct           build NFCT module (nonequispaced fast cosine
+                          transform)
+  --enable-nfst           build NFST module (nonequispaced fast sine
+                          transform)
+  --enable-nfsft          build NFSFT module (nonequispaced fast spherical
+                          Fourier transform)
+  --enable-nfsoft         build NFSOFT module (nonequispaced fast SO(3)
+                          Fourier transform)
+  --enable-nnfft          build NNFFT module (nonequispaced fast Fourier
+                          transform -- # nonequispaced in both domains)
+  --enable-nsfft          build NSFFT module (nonequispaced sparse fast
+                          Fourier transform)
+  --enable-mri            build MRI module (magnet resonance imaging)
+  --enable-fpt            build FPT module (fast polynomial transform)
+  --enable-openmp         enable OpenMP multithreaded code
+  --enable-debug          compile with extra runtime checks for debugging
+  --enable-measure-time   measure time during execution
+  --enable-measure-time-fftw
+                          measure time of FFTW transforms during execution
+  --enable-mips-zbus-timer
+                          use MIPS ZBus cycle-counter
+  --enable-matlab-argchecks
+                          Compile Matlab interface with argument checks
+                          [default=yes]
+  --enable-matlab-threads Compile Matlab interface with thread support
+                          [default same as --enable-openmp]
+  --enable-portable-binary
+                          disable compiler optimizations that would produce
+                          unportable binaries
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
+  --with-window=ARG       choose window function (ARG can be one of:
+                          kaiserbessel (default), gaussian, bspline, sinc,
+                          dirac)
+  --with-fftw3=DIR        compile with fftw3 in DIR
+  --with-fftw3-libdir=DIR compile with fftw3 library directory DIR
+  --with-fftw3-includedir=DIR
+                          compile with fftw3 include directory DIR
+  --with-matlab=DIR       the directory where Matlab is installed
+  --with-matlab-arch=DIR  Matlab architecture acronym
+  --with-matlab-fftw3-libdir=DIR
+                          compile Matlab interface with fftw3 library
+                          directory DIR
+  --with-gcc-arch=<arch>  use architecture <arch> for gcc -march/-mtune,
+                          instead of guessing
+  --with-apple-gcc-arch=<arch>
+                          use architecture <arch> for Apple's gcc -arch,
+                          instead of guessing
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CCAS        assembler compiler command (defaults to CC)
+  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bugs at nfft.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+NFFT configure 3.2.3
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+
+2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------- ##
+## Report this to bugs at nfft.org ##
+## ---------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+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 NFFT $as_me 3.2.3, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# revision id from svn
+
+
+# copyright notice
+
+
+# m4 macros go here
+
+
+# where to put auxilliary files
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+
+# how to recognize the source directory
+
+
+# header to create
+ac_config_headers="$ac_config_headers include/config.h:include/config.h.in"
+
+
+# canonical host system type string
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+# number of CPUs
+#AX_COUNT_CPUS
+#AC_DEFINE_UNQUOTED(NFFT_NUM_CORES,$cpu_count,[Define to number of cores.])
+
+# substitute abs_srcdir in generated Makefiles
+
+
+# minimum required libtool version
+
+
+# libtool initialization
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.2'
+macro_revision='1.3337'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AS"; then
+  ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AS="${ac_tool_prefix}as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+  ac_ct_AS=$AS
+  # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AS"; then
+  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AS="as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AS" = x; then
+    AS="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AS=$ac_ct_AS
+  fi
+else
+  AS="$ac_cv_prog_AS"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+  ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+        enable_dlopen=no
+
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# substitute LIBTOOL_DEPS variable in generated Makefiles
+
+
+# version information for shared library
+SHARED_VERSION_INFO="1:0:0"
+
+# substitute SHARED_VERSION_INFO in generated Makefiles
+
+
+# check for make
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+# automake initialization
+am__api_version='1.12'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='nfft'
+ VERSION='3.2.3'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+mkdir_p="$MKDIR_P"
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+
+################################################################################
+# options for customizing the build process
+################################################################################
+
+# maintainer mode option
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# enable or disable parts of NFFT
+
+# whether we need the fpt module
+need_fpt="no"
+
+# build all modules by default in maintainer mode or if option is given
+# Check whether --enable-all was given.
+if test "${enable_all+set}" = set; then :
+  enableval=$enable_all; ok=$enableval
+else
+  ok=no
+fi
+
+if test "x$ok" = "xyes" -o "x$USE_MAINTAINER_MODE" = "xyes"; then
+  nfft_module_default="yes"
+else
+  nfft_module_default="no"
+fi
+
+# options for modules
+
+  # Check whether --enable-nfct was given.
+if test "${enable_nfct+set}" = set; then :
+  enableval=$enable_nfct; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_NFCT="#define HAVE_NFCT 1"
+
+  else
+    HAVE_NFCT="#undef HAVE_NFCT"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_NFCT_TRUE=
+  HAVE_NFCT_FALSE='#'
+else
+  HAVE_NFCT_TRUE='#'
+  HAVE_NFCT_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-nfst was given.
+if test "${enable_nfst+set}" = set; then :
+  enableval=$enable_nfst; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_NFST="#define HAVE_NFST 1"
+
+  else
+    HAVE_NFST="#undef HAVE_NFST"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_NFST_TRUE=
+  HAVE_NFST_FALSE='#'
+else
+  HAVE_NFST_TRUE='#'
+  HAVE_NFST_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-nfsft was given.
+if test "${enable_nfsft+set}" = set; then :
+  enableval=$enable_nfsft; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_NFSFT="#define HAVE_NFSFT 1"
+    need_fpt="yes"
+  else
+    HAVE_NFSFT="#undef HAVE_NFSFT"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_NFSFT_TRUE=
+  HAVE_NFSFT_FALSE='#'
+else
+  HAVE_NFSFT_TRUE='#'
+  HAVE_NFSFT_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-nfsoft was given.
+if test "${enable_nfsoft+set}" = set; then :
+  enableval=$enable_nfsoft; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_NFSOFT="#define HAVE_NFSOFT 1"
+    need_fpt="yes"
+  else
+    HAVE_NFSOFT="#undef HAVE_NFSOFT"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_NFSOFT_TRUE=
+  HAVE_NFSOFT_FALSE='#'
+else
+  HAVE_NFSOFT_TRUE='#'
+  HAVE_NFSOFT_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-nnfft was given.
+if test "${enable_nnfft+set}" = set; then :
+  enableval=$enable_nnfft; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_NNFFT="#define HAVE_NNFFT 1"
+
+  else
+    HAVE_NNFFT="#undef HAVE_NNFFT"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_NNFFT_TRUE=
+  HAVE_NNFFT_FALSE='#'
+else
+  HAVE_NNFFT_TRUE='#'
+  HAVE_NNFFT_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-nsfft was given.
+if test "${enable_nsfft+set}" = set; then :
+  enableval=$enable_nsfft; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_NSFFT="#define HAVE_NSFFT 1"
+
+  else
+    HAVE_NSFFT="#undef HAVE_NSFFT"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_NSFFT_TRUE=
+  HAVE_NSFFT_FALSE='#'
+else
+  HAVE_NSFFT_TRUE='#'
+  HAVE_NSFFT_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-mri was given.
+if test "${enable_mri+set}" = set; then :
+  enableval=$enable_mri; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes"; then
+    HAVE_MRI="#define HAVE_MRI 1"
+
+  else
+    HAVE_MRI="#undef HAVE_MRI"
+
+  fi
+   if test "x$ok" = "xyes"; then
+  HAVE_MRI_TRUE=
+  HAVE_MRI_FALSE='#'
+else
+  HAVE_MRI_TRUE='#'
+  HAVE_MRI_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-fpt was given.
+if test "${enable_fpt+set}" = set; then :
+  enableval=$enable_fpt; ok=$enableval
+else
+  ok=$nfft_module_default
+fi
+
+  if test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"; then
+    HAVE_FPT="#define HAVE_FPT 1"
+
+  else
+    HAVE_FPT="#undef HAVE_FPT"
+
+  fi
+   if test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"; then
+  HAVE_FPT_TRUE=
+  HAVE_FPT_FALSE='#'
+else
+  HAVE_FPT_TRUE='#'
+  HAVE_FPT_FALSE=
+fi
+
+
+
+
+# multithreaded code
+# Check whether --enable-openmp was given.
+if test "${enable_openmp+set}" = set; then :
+  enableval=$enable_openmp; enable_threads=$enableval
+else
+  enable_threads=no
+fi
+
+ if test "x$enable_threads" = "xyes" ; then
+  HAVE_THREADS_TRUE=
+  HAVE_THREADS_FALSE='#'
+else
+  HAVE_THREADS_TRUE='#'
+  HAVE_THREADS_FALSE=
+fi
+
+
+# debug mode
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+  enableval=$enable_debug; enable_debug=$enableval
+else
+  enable_debug=no
+fi
+
+if test "x$enable_debug" = "xyes"; then
+
+$as_echo "#define NFFT_DEBUG 1" >>confdefs.h
+
+fi
+
+# runtime time measurements
+# Check whether --enable-measure-time was given.
+if test "${enable_measure_time+set}" = set; then :
+  enableval=$enable_measure_time; ok=$enableval
+else
+  ok=no
+fi
+
+if test "x$ok" = "xyes"; then
+
+$as_echo "#define MEASURE_TIME 1" >>confdefs.h
+
+fi
+
+# runtime time measurements for FFTW part
+# Check whether --enable-measure-time-fftw was given.
+if test "${enable_measure_time_fftw+set}" = set; then :
+  enableval=$enable_measure_time_fftw; ok=$enableval
+else
+  ok=no
+fi
+
+if test "x$ok" = "xyes"; then
+
+$as_echo "#define MEASURE_TIME_FFTW 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-mips_zbus_timer was given.
+if test "${enable_mips_zbus_timer+set}" = set; then :
+  enableval=$enable_mips_zbus_timer; have_mips_zbus_timer=$enableval
+else
+  have_mips_zbus_timer=no
+fi
+
+if test "$have_mips_zbus_timer" = "yes"; then
+
+$as_echo "#define HAVE_MIPS_ZBUS_TIMER 1" >>confdefs.h
+
+fi
+
+# select window function
+
+# Check whether --with-window was given.
+if test "${with_window+set}" = set; then :
+  withval=$with_window; window=$withval
+else
+  window="kaiserbessel"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking window function" >&5
+$as_echo_n "checking window function... " >&6; }
+case "$window" in
+  gaussian)
+
+$as_echo "#define GAUSSIAN 1" >>confdefs.h
+;;
+  bspline)
+
+$as_echo "#define B_SPLINE 1" >>confdefs.h
+;;
+  sinc)
+
+$as_echo "#define SINC_POWER 1" >>confdefs.h
+;;
+  kaiserbessel)
+
+$as_echo "#define KAISER_BESSEL 1" >>confdefs.h
+;;
+  delta)
+
+$as_echo "#define B_SPLINE 1" >>confdefs.h
+;;
+  *)
+    as_fn_error $? "Unknown window function \"$window\"." "$LINENO" 5;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $window" >&5
+$as_echo "$window" >&6; }
+
+################################################################################
+# compiler characteristis
+################################################################################
+
+# select programming language
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# compiler vendor
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5
+$as_echo_n "checking for C compiler vendor... " >&6; }
+if ${ax_cv_c_compiler_vendor+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_c_compiler_vendor=unknown
+  # note: don't check for gcc first since some other compilers define __GNUC__
+  for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ apple:__APPLE_CC__,__APPLE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
+    vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+#if !($vencpp)
+      thisisanerror;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5
+$as_echo "$ax_cv_c_compiler_vendor" >&6; }
+
+
+# check for C99 compliant mode (possibly with GNU extensions)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if ${ac_cv_prog_cc_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+	{
+	case 's': // string
+	  str = va_arg (args_copy, const char *);
+	  break;
+	case 'd': // int
+	  number = va_arg (args_copy, int);
+	  break;
+	case 'f': // float
+	  fnumber = va_arg (args_copy, double);
+	  break;
+	default:
+	  break;
+	}
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+	  || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+
+fi
+
+
+
+# per-target flags
+if test "x$CC" != xcc; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+      then
+	# cc works too.
+	:
+      else
+	# cc exists but doesn't like -o.
+	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+# enable "const" keyword
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this sort of thing.  */
+  typedef int charset[2];
+  const charset cs = { 0, 0 };
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this sort of thing.  */
+    char tx;
+    char *t = &tx;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; } bx;
+    struct s *b = &bx; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+# enable "restrict" keyword
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int * int_ptr;
+	int foo (int_ptr $ac_kw ip) {
+	return ip[0];
+       }
+int
+main ()
+{
+int s[1];
+	int * $ac_kw t = s;
+	t[0] = 0;
+	return foo(t)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     test "$ac_cv_c_restrict" != no && break
+   done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+
+# enable "inline" keyword
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+# reset CC variable (the C99 option is added back below)
+CC="$ac_save_CC"
+
+################################################################################
+# program checks
+################################################################################
+
+# C preprocessor
+ac_c_preproc_warn_flag=yes
+
+# assembler
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CCAS_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CCAS_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CCAS_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+  am__fastdepCCAS_TRUE=
+  am__fastdepCCAS_FALSE='#'
+else
+  am__fastdepCCAS_TRUE='#'
+  am__fastdepCCAS_FALSE=
+fi
+
+
+
+# BSD-compatible install
+
+
+# whether ln -s works
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+################################################################################
+# 3rd party libraries
+################################################################################
+
+# Check for fftw3.
+
+
+# Check whether --with-fftw3 was given.
+if test "${with_fftw3+set}" = set; then :
+  withval=$with_fftw3; with_fftw3=$withval
+else
+  with_fftw3="yes"
+fi
+
+
+
+# Check whether --with-fftw3-libdir was given.
+if test "${with_fftw3_libdir+set}" = set; then :
+  withval=$with_fftw3_libdir; fftw3_lib_dir=$withval
+else
+  fftw3_lib_dir="yes"
+fi
+
+
+
+# Check whether --with-fftw3-includedir was given.
+if test "${with_fftw3_includedir+set}" = set; then :
+  withval=$with_fftw3_includedir; fftw3_include_dir=$withval
+else
+  fftw3_include_dir="yes"
+fi
+
+
+  if test "x$with_fftw3" != "xyes"; then
+    if test "x${fftw3_include_dir}" = "xyes"; then
+      fftw3_include_dir="$with_fftw3/include"
+    fi
+    if test "x${fftw3_lib_dir}" = "xyes"; then
+      fftw3_lib_dir="$with_fftw3/lib"
+    fi
+  fi
+
+  if test "x${fftw3_include_dir}" != "xyes"; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${fftw3_include_dir} exists" >&5
+$as_echo_n "checking whether directory ${fftw3_include_dir} exists... " >&6; }
+if test -d "${fftw3_include_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "The directory ${fftw3_include_dir} does not exist." "$LINENO" 5
+fi
+
+    fftw3_CPPFLAGS="-I$fftw3_include_dir"
+  else
+    fftw3_CPPFLAGS=""
+  fi
+
+  if test "x${fftw3_lib_dir}" != "xyes"; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${fftw3_lib_dir} exists" >&5
+$as_echo_n "checking whether directory ${fftw3_lib_dir} exists... " >&6; }
+if test -d "${fftw3_lib_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "The directory ${fftw3_lib_dir} does not exist." "$LINENO" 5
+fi
+
+    fftw3_LDFLAGS="-L$fftw3_lib_dir"
+  else
+    fftw3_LDFLAGS=""
+  fi
+
+  saved_LDFLAGS="$LDFLAGS"
+  saved_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+  LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+
+  # Check if header is present and usable.
+  ax_lib_fftw3=yes
+  ax_lib_fftw3_threads=yes
+  ac_fn_c_check_header_mongrel "$LINENO" "fftw3.h" "ac_cv_header_fftw3_h" "$ac_includes_default"
+if test "x$ac_cv_header_fftw3_h" = xyes; then :
+
+else
+  ax_lib_fftw3=no;ax_lib_fftw3_threads=no
+fi
+
+
+
+  if test "x$ax_lib_fftw3" = "xyes"; then
+    saved_LIBS="$LIBS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_execute in -lfftw3" >&5
+$as_echo_n "checking for fftw_execute in -lfftw3... " >&6; }
+if ${ac_cv_lib_fftw3_fftw_execute+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_fftw3_fftw_execute=yes
+else
+  ac_cv_lib_fftw3_fftw_execute=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_execute" >&5
+$as_echo "$ac_cv_lib_fftw3_fftw_execute" >&6; }
+if test "x$ac_cv_lib_fftw3_fftw_execute" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBFFTW3 1
+_ACEOF
+
+  LIBS="-lfftw3 $LIBS"
+
+else
+  ax_lib_fftw3=no
+fi
+
+    fftw3_LIBS="-lfftw3"
+    LIBS="$saved_LIBS"
+  fi
+
+  if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes"; then
+    fftw3_threads_LIBS=""
+    # Combined lib
+    LIBS="-lfftw3 $LIBS"
+    fftw3_threads_LIBS="-lfftw3"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_lib_fftw3_threads=yes
+else
+  ax_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lib_fftw3_threads" >&5
+$as_echo "$ax_lib_fftw3_threads" >&6; }
+    LIBS="$saved_LIBS"
+
+    if test "x$ax_lib_fftw3_threads" = "xno"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3... " >&6; }
+if ${ac_cv_lib_fftw3_fftw_init_threads+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3 -lpthread -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_fftw3_fftw_init_threads=yes
+else
+  ac_cv_lib_fftw3_fftw_init_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_init_threads" >&5
+$as_echo "$ac_cv_lib_fftw3_fftw_init_threads" >&6; }
+if test "x$ac_cv_lib_fftw3_fftw_init_threads" = xyes; then :
+  ax_lib_fftw3_threads=yes
+else
+  ax_lib_fftw3_threads=no
+fi
+
+      fftw3_threads_LIBS="-lfftw3 -lpthread -lm"
+    fi
+
+    if test "x$ax_lib_fftw3_threads" = "xno"; then
+      LIBS="-lfftw3_threads -lfftw3 $LIBS"
+      fftw3_threads_LIBS="-lfftw3_threads -lfftw3"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_threads" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3_threads... " >&6; }
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_lib_fftw3_threads=yes
+else
+  ax_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lib_fftw3_threads" >&5
+$as_echo "$ax_lib_fftw3_threads" >&6; }
+      LIBS="$saved_LIBS"
+    fi
+
+    if test "x$ax_lib_fftw3_threads" = "xno"; then
+      LIBS="-lfftw3 -lpthread -lm $LIBS"
+      fftw3_threads_LIBS="-lfftw3_threads -lfftw3 -lpthread -lm"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_threads" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3_threads... " >&6; }
+if ${ac_cv_lib_fftw3_threads_fftw_init_threads+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3_threads  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_fftw3_threads_fftw_init_threads=yes
+else
+  ac_cv_lib_fftw3_threads_fftw_init_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_threads_fftw_init_threads" >&5
+$as_echo "$ac_cv_lib_fftw3_threads_fftw_init_threads" >&6; }
+if test "x$ac_cv_lib_fftw3_threads_fftw_init_threads" = xyes; then :
+  ax_lib_fftw3_threads=yes
+else
+  ax_lib_fftw3_threads=no
+fi
+
+    fi
+
+    LIBS="$saved_LIBS"
+  fi
+
+  # Restore saved flags.
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+
+
+
+
+
+
+if test "x$ax_lib_fftw3" = "xno"; then
+  as_fn_error $? "You don't seem to have the FFTW 3 library installed. You can #
+     download it from http://www.fftw.org. If you have installed FFTW 3, #
+     make sure that this configure script can find it. See ./configure #
+     --help for more information." "$LINENO" 5
+fi
+
+if  test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3_threads" = "xno"; then
+  as_fn_error $? "You don't seem to have the threaded FFTW 3 library installed." "$LINENO" 5
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C compiler" >&5
+$as_echo_n "checking for OpenMP flag of C compiler... " >&6; }
+if ${ax_cv_c_openmp+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  saveCFLAGS=$CFLAGS
+ax_cv_c_openmp=unknown
+# Flags to try:  -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
+#                -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
+ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
+if test "x$OPENMP_CFLAGS" != x; then
+  ax_openmp_flags="$OPENMP_CFLAGS $ax_openmp_flags"
+fi
+for ax_openmp_flag in $ax_openmp_flags; do
+  case $ax_openmp_flag in
+    none) CFLAGS=$saveC ;;
+    *) CFLAGS="$saveCFLAGS $ax_openmp_flag" ;;
+  esac
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char omp_set_num_threads ();
+int
+main ()
+{
+return omp_set_num_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_c_openmp=$ax_openmp_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+done
+CFLAGS=$saveCFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_openmp" >&5
+$as_echo "$ax_cv_c_openmp" >&6; }
+if test "x$ax_cv_c_openmp" = "xunknown"; then
+  :
+else
+  if test "x$ax_cv_c_openmp" != "xnone"; then
+    OPENMP_CFLAGS=$ax_cv_c_openmp
+  fi
+
+$as_echo "#define HAVE_OPENMP 1" >>confdefs.h
+
+fi
+
+ if test "x$ax_cv_c_openmp" != "xunknown" ; then
+  HAVE_OPENMP_TRUE=
+  HAVE_OPENMP_FALSE='#'
+else
+  HAVE_OPENMP_TRUE='#'
+  HAVE_OPENMP_FALSE=
+fi
+
+
+
+if  test "x$enable_threads" = "xyes" -a "x$ax_cv_c_openmp" = "xunknown"; then
+  as_fn_error $? "You don't seem to have a C compiler with OpenMP support installed which is required for threaded NFFT." "$LINENO" 5
+fi
+
+# Check for MATLAB.
+
+
+
+
+  # option to enable mex file compilation
+
+# Check whether --with-matlab was given.
+if test "${with_matlab+set}" = set; then :
+  withval=$with_matlab; matlab_dir=${withval}
+else
+  matlab_dir="no"
+fi
+
+
+
+# Check whether --with-matlab-arch was given.
+if test "${with_matlab_arch+set}" = set; then :
+  withval=$with_matlab_arch; matlab_arch=${withval}
+else
+  matlab_arch="yes"
+fi
+
+
+  # Check whether --enable-matlab-argchecks was given.
+if test "${enable_matlab_argchecks+set}" = set; then :
+  enableval=$enable_matlab_argchecks; ok="$enableval"
+else
+  ok="yes"
+fi
+
+
+  if test "x$ok" = "xyes"; then
+
+$as_echo "#define MATLAB_ARGCHECKS 1" >>confdefs.h
+
+  fi
+
+
+# Check whether --with-matlab-fftw3-libdir was given.
+if test "${with_matlab_fftw3_libdir+set}" = set; then :
+  withval=$with_matlab_fftw3_libdir; matlab_fftw3_lib_dir=$withval
+else
+  matlab_fftw3_lib_dir="yes"
+fi
+
+
+  # Check whether --enable-matlab-threads was given.
+if test "${enable_matlab_threads+set}" = set; then :
+  enableval=$enable_matlab_threads; matlab_threads="$enableval"
+else
+  matlab_threads="$enable_threads"
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for Matlab" >&5
+$as_echo_n "checking whether to check for Matlab... " >&6; }
+
+  if test "x${matlab_dir}" = "xno"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ax_prog_matlab="no"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+    # Matlab root
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_dir} exists... " >&6; }
+if test -d "${matlab_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "Please supply a valid path to a Matlab root directory or run configure without the option --with-matlab." "$LINENO" 5
+fi
+
+
+    # subdirectories
+    matlab_bin_dir="${matlab_dir}/bin"
+    matlab_src_dir="${matlab_dir}/extern/src"
+    matlab_include_dir="${matlab_dir}/extern/include"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_bin_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_bin_dir} exists... " >&6; }
+if test -d "${matlab_bin_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
+fi
+
+    # More recent versions of Matlab do no longer have the src directory.
+    # AX_CHECK_DIR([${matlab_src_dir}],[],
+    #   [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_include_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_include_dir} exists... " >&6; }
+if test -d "${matlab_include_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
+fi
+
+
+    # architecture and mex file extension
+    if test ! "x${matlab_arch}" = "xyes"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab architecture" >&5
+$as_echo_n "checking for Matlab architecture... " >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
+$as_echo "${matlab_arch}" >&6; }
+      # mex file extension for architecture
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
+$as_echo_n "checking for mex file extension... " >&6; }
+      case $matlab_arch in
+        glnx86) matlab_mexext="mexglx";;
+        glnxa64) matlab_mexext="mexa64";;
+        mac) matlab_mexext="mexmac";;
+        maci) matlab_mexext="mexmaci";;
+        maci64) matlab_mexext="mexmaci64";;
+        sol64) matlab_mexext="mexs64";;
+        win32) matlab_mexext="mexw32";;
+        win64) matlab_mexext="mexw64";;
+        *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
+      esac
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
+$as_echo "${matlab_mexext}" >&6; }
+    else
+      matlab_mexext="unknown"
+      matlab_arch="unknown"
+
+      # mex file extension, maybe
+      for matlab_check_prog_mexext in mexext mexext.sh mexext.bat; do
+        unset ac_cv_path_matlab_prog_mexext
+        # Extract the first word of "$matlab_check_prog_mexext", so it can be a program name with args.
+set dummy $matlab_check_prog_mexext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_matlab_prog_mexext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $matlab_prog_mexext in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_matlab_prog_mexext="$matlab_prog_mexext" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $matlab_bin_dir$PATH_SEPARATOR$PATH$PATH_SEPARATOR$matlab_bin_dir
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_matlab_prog_mexext="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_matlab_prog_mexext" && ac_cv_path_matlab_prog_mexext="no"
+  ;;
+esac
+fi
+matlab_prog_mexext=$ac_cv_path_matlab_prog_mexext
+if test -n "$matlab_prog_mexext"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $matlab_prog_mexext" >&5
+$as_echo "$matlab_prog_mexext" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+        if test ! "x${matlab_prog_mexext}" = "xno"; then
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
+$as_echo_n "checking for mex file extension... " >&6; }
+          if test "x${host_os}" = "xmingw32"; then
+            matlab_mexext=mexw32
+          else
+            matlab_mexext=`${matlab_prog_mexext}`
+            matlab_mexext=`echo ${matlab_mexext} | tr -d '\r\n'`
+          fi
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
+$as_echo "${matlab_mexext}" >&6; }
+          break
+        fi
+      done
+
+      # architecture, maybe
+      if test "x${matlab_mexext}" = "xunknown"; then
+        # Try guessing the architecture based on host
+        case $host in
+          *86_64*linux*) matlab_arch_test="glnxa64";;
+          *86*linux*) matlab_arch_test="glnx86";;
+          *powerpc*darwin*) matlab_arch_test="mac mac64";;
+          *86*darwin*) matlab_arch_test="maci maci64";;
+          *solaris*) matlab_arch_test="sol sol64";;
+          *cygwin*) matlab_arch_test="win32 win64";;
+          *mingw*) matlab_arch_test="win32 win64";;
+          *) as_fn_error $? "Cannot guess Matlab architecture based on host type." "$LINENO" 5;;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture" >&5
+$as_echo_n "checking for architecture... " >&6; }
+        for matlab_arch in "$matlab_arch_test"; do
+          if test -d "${matlab_bin_dir}/${matlab_arch}" -a -f "${matlab_bin_dir}/${matlab_arch}/MATLAB"; then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
+$as_echo "${matlab_arch}" >&6; }
+            break
+          fi
+          matlab_arch="unkown"
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
+$as_echo "unknown" >&6; }
+        done
+      fi
+
+      # mex file extension or architecture found
+      if test "x${matlab_mexext}" = "xunknown" -a "x${matlab_arch}" = "xunknown"; then
+        as_fn_error $? "Could not determine mex file extension nor Matlab architecture. Please supply a valid architecture flag using the option --with-matlab-arch" "$LINENO" 5
+      fi
+
+      if test "x${matlab_arch}" = "xunknown"; then
+        # architecture for mex file extension
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture" >&5
+$as_echo_n "checking for architecture... " >&6; }
+        case ${matlab_mexext} in
+          mexglx) matlab_arch="glnx86";;
+          mexa64) matlab_arch="glnxa64";;
+          mexmac) matlab_arch="mac";;
+          mexmaci) matlab_arch="maci";;
+          mexmaci64) matlab_arch="maci64";;
+          mexs64) matlab_arch="sol64";;
+          mexw32) matlab_arch="win32";;
+          mexw64) matlab_arch="win64";;
+          *) as_fn_error $? "Unsupported mex file extension ${matlab_mexext}." "$LINENO" 5;;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
+$as_echo "${matlab_arch}" >&6; }
+      elif test "x${matlab_mexext}" = "xunknown"; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
+$as_echo_n "checking for mex file extension... " >&6; }
+        case $matlab_arch in
+          glnx86) matlab_mexext="mexglx";;
+          glnxa64) matlab_mexext="mexa64";;
+          mac) matlab_mexext="mexmac";;
+          maci) matlab_mexext="mexmaci";;
+          maci64) matlab_mexext="mexmaci64";;
+          sol64) matlab_mexext="mexs64";;
+          win32) matlab_mexext="mexw32";;
+          win64) matlab_mexext="mexw64";;
+          *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
+$as_echo "${matlab_mexext}" >&6; }
+      fi
+    fi
+
+    # add "." to mex file extension
+    matlab_mexext=".$matlab_mexext"
+
+    # arch bin dir
+    matlab_arch_bin_dir="${matlab_bin_dir}/${matlab_arch}"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_arch_bin_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_arch_bin_dir} exists... " >&6; }
+if test -d "${matlab_arch_bin_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
+fi
+
+
+    # dynamic library extension for architecture
+    case $matlab_arch in
+      glnx86|glnxa64|sol|sol64) matlab_libext=".so";;
+      mac|mac64|maci|maci64) matlab_libext=".dylib";;
+      win32|win64) matlab_libext=".dll";;
+      *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
+    esac
+
+    # libraries
+    matlab_LDFLAGS="-L${matlab_arch_bin_dir}"
+    saved_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS ${matlab_LDFLAGS}"
+    matlab_LIBS=""
+    matlab_fftw3_LIBS=""
+    matlab_fftw3_LDFLAGS=""
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mxMalloc in -lmx" >&5
+$as_echo_n "checking for mxMalloc in -lmx... " >&6; }
+if ${ac_cv_lib_mx_mxMalloc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmx  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mxMalloc ();
+int
+main ()
+{
+return mxMalloc ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mx_mxMalloc=yes
+else
+  ac_cv_lib_mx_mxMalloc=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mx_mxMalloc" >&5
+$as_echo "$ac_cv_lib_mx_mxMalloc" >&6; }
+if test "x$ac_cv_lib_mx_mxMalloc" = xyes; then :
+  matlab_LIBS="$matlab_LIBS -lmx"
+else
+  as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmx${matlab_libext}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmx${matlab_libext}" >&5
+$as_echo_n "checking for ${matlab_arch_bin_dir}/libmx${matlab_libext}... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_arch_bin_dir}/libmx${matlab_libext}"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  matlab_LIBS="$matlab_LIBS -lmx"
+else
+  as_fn_error $? "Needed Matlab library mx not usable." "$LINENO" 5
+fi
+
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mexCallMATLAB in -lmex" >&5
+$as_echo_n "checking for mexCallMATLAB in -lmex... " >&6; }
+if ${ac_cv_lib_mex_mexCallMATLAB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmex  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mexCallMATLAB ();
+int
+main ()
+{
+return mexCallMATLAB ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mex_mexCallMATLAB=yes
+else
+  ac_cv_lib_mex_mexCallMATLAB=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mex_mexCallMATLAB" >&5
+$as_echo "$ac_cv_lib_mex_mexCallMATLAB" >&6; }
+if test "x$ac_cv_lib_mex_mexCallMATLAB" = xyes; then :
+  matlab_LIBS="$matlab_LIBS -lmex"
+else
+  as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmex${matlab_libext}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmex${matlab_libext}" >&5
+$as_echo_n "checking for ${matlab_arch_bin_dir}/libmex${matlab_libext}... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_arch_bin_dir}/libmex${matlab_libext}"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  matlab_LIBS="$matlab_LIBS -lmex"
+else
+  as_fn_error $? "Needed Matlab library mex not usable." "$LINENO" 5
+fi
+
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for matGetVariable in -lmat" >&5
+$as_echo_n "checking for matGetVariable in -lmat... " >&6; }
+if ${ac_cv_lib_mat_matGetVariable+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmat  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char matGetVariable ();
+int
+main ()
+{
+return matGetVariable ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mat_matGetVariable=yes
+else
+  ac_cv_lib_mat_matGetVariable=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mat_matGetVariable" >&5
+$as_echo "$ac_cv_lib_mat_matGetVariable" >&6; }
+if test "x$ac_cv_lib_mat_matGetVariable" = xyes; then :
+  matlab_LIBS="$matlab_LIBS -lmat"
+else
+  as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmat${matlab_libext}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmat${matlab_libext}" >&5
+$as_echo_n "checking for ${matlab_arch_bin_dir}/libmat${matlab_libext}... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_arch_bin_dir}/libmat${matlab_libext}"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  matlab_LIBS="$matlab_LIBS -lmat"
+else
+  as_fn_error $? "Needed Matlab library mat not usable." "$LINENO" 5
+fi
+
+fi
+
+
+    LDFLAGS="$saved_LDFLAGS"
+
+    matlab_CPPFLAGS="-I${matlab_include_dir}"
+
+    # mexversion.c
+    as_ac_File=`$as_echo "ac_cv_file_${matlab_src_dir}/mexversion.c" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_src_dir}/mexversion.c" >&5
+$as_echo_n "checking for ${matlab_src_dir}/mexversion.c... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_src_dir}/mexversion.c"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  matlab_CPPFLAGS="${matlab_CPPFLAGS} -I${matlab_src_dir}";
+$as_echo "#define HAVE_MEXVERSION_C 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: File ${matlab_src_dir}/mexversion.c not found" >&5
+$as_echo "$as_me: WARNING: File ${matlab_src_dir}/mexversion.c not found" >&2;}
+fi
+
+
+    ax_prog_matlab="yes"
+
+    # Only overwrite Matlab fftw3 lib dir when not explicitly set
+    if test "x${matlab_fftw3_lib_dir}" = "xyes"; then
+      matlab_fftw3_lib_dir="${matlab_bin_dir}/${matlab_arch}"
+    else
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_fftw3_lib_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_fftw3_lib_dir} exists... " >&6; }
+if test -d "${matlab_fftw3_lib_dir}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  as_fn_error $? "The directory ${matlab_fftw3_lib_dir} does not seem to be a valid fftw3 library directory." "$LINENO" 5
+fi
+
+      matlab_fftw3_LDFLAGS="-L$matlab_fftw3_lib_dir"
+    fi
+
+    saved_LIBS="$LIBS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    matlab_fftw3_LIBS="-lfftw3"
+    LIBS="-lfftw3 $LIBS"
+    LDFLAGS="-L$matlab_fftw3_lib_dir ${matlab_LDFLAGS} $LDFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library" >&5
+$as_echo_n "checking for Matlab fftw3 library... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_matlab_lib_fftw3=yes
+else
+  ax_matlab_lib_fftw3=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
+$as_echo "$ax_matlab_lib_fftw3" >&6; }
+
+    if test "x$ax_matlab_lib_fftw3" = "xno"; then
+      matlab_fftw3_LIBS="-lfftw3 -lm"
+      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library (-lm set)" >&5
+$as_echo_n "checking for Matlab fftw3 library (-lm set)... " >&6; }
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_matlab_lib_fftw3=yes
+else
+  ax_matlab_lib_fftw3=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
+$as_echo "$ax_matlab_lib_fftw3" >&6; }
+    fi
+
+    if test "x$ax_matlab_lib_fftw3" = "xno"; then
+      matlab_fftw3_LIBS="-lfftw3 -pthread -lm"
+      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library (-lpthread -lm set)" >&5
+$as_echo_n "checking for Matlab fftw3 library (-lpthread -lm set)... " >&6; }
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_matlab_lib_fftw3=yes
+else
+  ax_matlab_lib_fftw3=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
+$as_echo "$ax_matlab_lib_fftw3" >&6; }
+    fi
+
+    if test "x$ax_matlab_lib_fftw3" = "xno"; then
+      as_fn_error $? "You don't seem to have installed installed the FFTW 3 libray for the NFFT Matlab interface." "$LINENO" 5
+    fi
+
+    if test "x$matlab_threads" = "xyes"; then
+      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab combined fftw3 library with thread support" >&5
+$as_echo_n "checking for Matlab combined fftw3 library with thread support... " >&6; }
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_matlab_lib_fftw3_threads=yes
+else
+  ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        ax_matlab_lib_fftw3_threads="yes"
+        LIBS="$matlab_fftw3_LIBS -lpthread -lm $saved_LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab combined fftw3 library with thread support (-lpthread -lm set)" >&5
+$as_echo_n "checking for Matlab combined fftw3 library with thread support (-lpthread -lm set)... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  matlab_fftw3_LIBS="$matlab_fftw3_LIBS -lpthread -lm"
+else
+  ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+      fi
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        ax_matlab_lib_fftw3_threads="yes"
+        LIBS="-lfftw3_threads $matlab_fftw3_LIBS $saved_LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library with thread support" >&5
+$as_echo_n "checking for Matlab fftw3 library with thread support... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  matlab_fftw3_LIBS="-lfftw3_threads $matlab_fftw3_LIBS"
+else
+  ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+      fi
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        ax_matlab_lib_fftw3_threads="yes"
+        LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS $saved_LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library with thread support (-lpthread set)" >&5
+$as_echo_n "checking for Matlab fftw3 library with thread support (-lpthread set)... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  matlab_fftw3_LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS"
+else
+  ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+      fi
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        as_fn_error $? "You don't seem to have installed the FFTW 3 libray for the NFFT Matlab interface." "$LINENO" 5
+      fi
+    fi
+
+    LIBS="$saved_LIBS"
+    LDFLAGS="$saved_LDFLAGS"
+  fi
+   if test "x$ax_prog_matlab" = "xyes" ; then
+  HAVE_MATLAB_TRUE=
+  HAVE_MATLAB_FALSE='#'
+else
+  HAVE_MATLAB_TRUE='#'
+  HAVE_MATLAB_FALSE=
+fi
+
+   if test "x$matlab_threads" = "xyes"; then
+  HAVE_MATLAB_THREADS_TRUE=
+  HAVE_MATLAB_THREADS_FALSE='#'
+else
+  HAVE_MATLAB_THREADS_TRUE='#'
+  HAVE_MATLAB_THREADS_FALSE=
+fi
+
+
+
+
+
+
+
+
+
+if test "x$matlab_threads" = "xyes" -a "x$enable_threads" != "xyes"; then
+  as_fn_error $? "The NFFT Matlab interface with thread support requires the threaded NFFT to be built. Please re-run configure with \"--enable-openmp\"." "$LINENO" 5
+fi
+
+ if test "x$ax_prog_matlab" = "xyes" ; then
+  HAVE_MATLAB_TRUE=
+  HAVE_MATLAB_FALSE='#'
+else
+  HAVE_MATLAB_TRUE='#'
+  HAVE_MATLAB_FALSE=
+fi
+
+
+
+
+
+
+################################################################################
+# compiler options
+################################################################################
+
+# Try to choose good compiler options.
+if test "x$ac_test_CFLAGS" != "xset"; then
+  saved_CPPFLAGS="$CPPFLAGS"
+  saved_LDFLAGS="$LDFLAGS"
+  saved_LIBS="$LIBS"
+  CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+  LIBS="$LIBS $fftw3_LIBS"
+  LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+
+
+
+
+
+# Check whether --enable-portable-binary was given.
+if test "${enable_portable_binary+set}" = set; then :
+  enableval=$enable_portable_binary; acx_maxopt_portable=$enableval
+else
+  acx_maxopt_portable=no
+fi
+
+
+# Try to determine "good" native compiler flags if none specified via CFLAGS
+if test "$ac_test_CFLAGS" != "set"; then
+  CFLAGS=""
+  case $ax_cv_c_compiler_vendor in
+    dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
+      if test "x$acx_maxopt_portable" = xno; then
+        CFLAGS="$CFLAGS -arch host"
+      fi;;
+
+    sun) CFLAGS="-native -fast -xO5 -dalign"
+      if test "x$acx_maxopt_portable" = xyes; then
+         CFLAGS="$CFLAGS -xarch=generic"
+      fi;;
+
+    hp) CFLAGS="+Oall +Optrs_ansi +DSnative"
+      if test "x$acx_maxopt_portable" = xyes; then
+        CFLAGS="$CFLAGS +DAportable"
+      fi;;
+
+    ibm) if test "x$acx_maxopt_portable" = xno; then
+        xlc_opt="-qarch=auto -qtune=auto"
+      else
+        xlc_opt="-qtune=auto"
+      fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5
+$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; }
+ax_save_FLAGS=$CFLAGS
+   CFLAGS="$xlc_opt"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes
+else
+  eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="-O3 -qansialias -w $xlc_opt"
+else
+	CFLAGS="-O3 -qansialias -w"
+              echo "******************************************************"
+              echo "*  You seem to have the IBM  C compiler.  It is      *"
+              echo "*  recommended for best performance that you use:    *"
+              echo "*                                                    *"
+              echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
+              echo "*                      ^^^        ^^^                *"
+              echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
+              echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
+              echo "*  and re-run configure.)  For more info, man cc.    *"
+              echo "******************************************************"
+fi
+
+        ;;
+
+    intel) CFLAGS="-O3"
+        # Intel seems to have changed the spelling of this flag recently
+        icc_ansi_alias="unknown"
+	for flag in -ansi-alias -ansi_alias; do
+	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
+ax_save_FLAGS=$CFLAGS
+   CFLAGS="$flag"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
+else
+  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	icc_ansi_alias=$flag; break
+else
+	:
+fi
+
+	done
+ 	if test "x$icc_ansi_alias" != xunknown; then
+            CFLAGS="$CFLAGS $icc_ansi_alias"
+        fi
+	 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
+$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
+if ${ax_cv_c_flags__malign_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-malign-double"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__malign_double=yes
+else
+  ax_cv_c_flags__malign_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -malign-double"
+else
+	:
+fi
+
+	if test "x$acx_maxopt_portable" = xno; then
+	  icc_archflag=unknown
+	  icc_flags=""
+	  # -xN etcetera are for older versions of icc:
+	  case $host_cpu in
+	    i686*|x86_64*)
+              # icc accepts gcc assembly syntax, so these should work:
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
+$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ax_cv_gcc_x86_cpuid_0=unknown
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+     int op = 0, eax, ebx, ecx, edx;
+     FILE *f;
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "pop %%ebx"
+             : "=a" (eax), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "mov %%ebx, %%eax\n\t"
+             "pop %%ebx"
+             : "=a" (ebx), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+     fclose(f);
+     return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+  ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
+$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ax_cv_gcc_x86_cpuid_1=unknown
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+     int op = 1, eax, ebx, ecx, edx;
+     FILE *f;
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "pop %%ebx"
+             : "=a" (eax), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "mov %%ebx, %%eax\n\t"
+             "pop %%ebx"
+             : "=a" (ebx), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+     fclose(f);
+     return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+  ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+	      case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
+                *:756e6547:*:*) # Intel
+                  case $ax_cv_gcc_x86_cpuid_1 in
+                    *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";;
+                    *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";;
+                    *f??:*:*:*) icc_flags="-xN -xW -xK";;
+                  esac ;;
+              esac ;;
+          esac
+          # newer icc versions should support -xHost
+	  icc_flags="-xHost $icc_flags"
+          if test "x$icc_flags" != x; then
+            for flag in $icc_flags; do
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
+ax_save_FLAGS=$CFLAGS
+   CFLAGS="$flag"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
+else
+  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	icc_archflag=$flag; break
+else
+	:
+fi
+
+            done
+          fi
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5
+$as_echo_n "checking for icc architecture flag... " >&6; }
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5
+$as_echo "$icc_archflag" >&6; }
+          if test "x$icc_archflag" != xunknown; then
+            CFLAGS="$CFLAGS $icc_archflag"
+          fi
+        fi
+	;;
+
+    gnu)
+     # default optimization flags for gcc on all systems
+     CFLAGS="-O3 -fomit-frame-pointer"
+
+     # -malign-double for x86 systems
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
+$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
+if ${ax_cv_c_flags__malign_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-malign-double"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__malign_double=yes
+else
+  ax_cv_c_flags__malign_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -malign-double"
+else
+	:
+fi
+
+
+     #  -fstrict-aliasing for gcc-2.95+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
+$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
+if ${ax_cv_c_flags__fstrict_aliasing+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-fstrict-aliasing"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__fstrict_aliasing=yes
+else
+  ax_cv_c_flags__fstrict_aliasing=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -fstrict-aliasing"
+else
+	:
+fi
+
+
+     # note that we enable "unsafe" fp optimization with other compilers, too
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
+$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
+if ${ax_cv_c_flags__ffast_math+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-ffast-math"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__ffast_math=yes
+else
+  ax_cv_c_flags__ffast_math=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -ffast-math"
+else
+	:
+fi
+
+
+
+
+
+
+# Check whether --with-gcc-arch was given.
+if test "${with_gcc_arch+set}" = set; then :
+  withval=$with_gcc_arch; ax_gcc_arch=$withval
+else
+  ax_gcc_arch=yes
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
+$as_echo_n "checking for gcc architecture flag... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
+$as_echo "" >&6; }
+if ${ax_cv_gcc_archflag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+ax_cv_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+
+if test "x$ax_gcc_arch" = xyes; then
+ax_gcc_arch=""
+if test "$cross_compiling" = no; then
+case $host_cpu in
+  i[3456]86*|x86_64*|amd64*) # use cpuid codes, in part from x86info-1.21 by D. Jones
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
+$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ax_cv_gcc_x86_cpuid_0=unknown
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+     int op = 0, eax, ebx, ecx, edx;
+     FILE *f;
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "pop %%ebx"
+             : "=a" (eax), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "mov %%ebx, %%eax\n\t"
+             "pop %%ebx"
+             : "=a" (ebx), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+     fclose(f);
+     return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+  ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
+$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ax_cv_gcc_x86_cpuid_1=unknown
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+     int op = 1, eax, ebx, ecx, edx;
+     FILE *f;
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "pop %%ebx"
+             : "=a" (eax), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "mov %%ebx, %%eax\n\t"
+             "pop %%ebx"
+             : "=a" (ebx), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+     fclose(f);
+     return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+  ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+     case $ax_cv_gcc_x86_cpuid_0 in
+       *:756e6547:*:*) # Intel
+          case $ax_cv_gcc_x86_cpuid_1 in
+	    *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
+	    *5??:*:*:*) ax_gcc_arch=pentium ;;
+	    *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+	    *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+	    *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+	    *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+	    *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
+	    *6[e]?:*:*:*) ax_gcc_arch="native pentium-m pentium3 pentiumpro" ;; # Core Duo
+	    *6f?:*:*:*) ax_gcc_arch="core2 native pentium-m pentium3 pentiumpro" ;;
+	    *6??:*:*:*) ax_gcc_arch="native pentiumpro" ;;
+            *f3[347]:*:*:*|*f4[1347]:*:*:*)
+		case $host_cpu in
+                  x86_64*|amd64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
+                  *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
+                esac ;;
+            *f??:*:*:*) ax_gcc_arch="native pentium4 pentiumpro";;
+          esac ;;
+       *:68747541:*:*) # AMD
+          case $ax_cv_gcc_x86_cpuid_1 in
+	    *5[67]?:*:*:*) ax_gcc_arch=k6 ;;
+	    *5[8c]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
+	    *5[9d]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
+	    *60?:*:*:*) ax_gcc_arch=k7 ;;
+	    *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;;
+	    *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
+	    *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
+	    *6[68a]?:*:*:*)
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5
+$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ax_cv_gcc_x86_cpuid_0x80000006=unknown
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+     int op = 0x80000006, eax, ebx, ecx, edx;
+     FILE *f;
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "pop %%ebx"
+             : "=a" (eax), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "mov %%ebx, %%eax\n\t"
+             "pop %%ebx"
+             : "=a" (ebx), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+     fclose(f);
+     return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+  ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ # L2 cache size
+	       case $ax_cv_gcc_x86_cpuid_0x80000006 in
+                 *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256
+			ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
+                 *) ax_gcc_arch="athlon-4 athlon k7" ;;
+	       esac ;;
+	    *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
+	    *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
+	    *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
+	    *f??:*:*:*) ax_gcc_arch="native k8" ;;
+          esac ;;
+	*:746e6543:*:*) # IDT
+	   case $ax_cv_gcc_x86_cpuid_1 in
+	     *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
+	     *58?:*:*:*) ax_gcc_arch=winchip2 ;;
+	     *6[78]?:*:*:*) ax_gcc_arch=c3 ;;
+	     *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
+	   esac ;;
+     esac
+     if test x"$ax_gcc_arch" = x; then # fallback
+	case $host_cpu in
+	  i586*) ax_gcc_arch="native pentium" ;;
+	  i686*) ax_gcc_arch="native pentiumpro" ;;
+          x86_64*|amd64*) ax_gcc_arch="native" ;;
+        esac
+     fi
+     ;;
+
+  sparc*)
+     # Extract the first word of "prtdiag", so it can be a program name with args.
+set dummy prtdiag; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PRTDIAG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PRTDIAG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/"
+for as_dir in $as_dummy
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag"
+  ;;
+esac
+fi
+PRTDIAG=$ac_cv_path_PRTDIAG
+if test -n "$PRTDIAG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5
+$as_echo "$PRTDIAG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+     cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
+     cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
+     case $cputype in
+         *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
+         *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
+         *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
+         *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;;
+         *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;;
+         *cypress*) ax_gcc_arch=cypress ;;
+     esac ;;
+
+  alphaev5) ax_gcc_arch=ev5 ;;
+  alphaev56) ax_gcc_arch=ev56 ;;
+  alphapca56) ax_gcc_arch="pca56 ev56" ;;
+  alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
+  alphaev6) ax_gcc_arch=ev6 ;;
+  alphaev67) ax_gcc_arch=ev67 ;;
+  alphaev68) ax_gcc_arch="ev68 ev67" ;;
+  alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
+  alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
+  alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
+
+  powerpc*)
+     cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+     cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+     case $cputype in
+       *750*) ax_gcc_arch="750 G3" ;;
+       *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;;
+       *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;;
+       *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;;
+       *970*) ax_gcc_arch="970 G5 power4";;
+       *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
+       *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
+       603ev|8240) ax_gcc_arch="$cputype 603e 603";;
+       *Cell*) ax_gcc_arch="cellppu cell";;
+       *) ax_gcc_arch="$cputype native" ;;
+     esac
+     ax_gcc_arch="$ax_gcc_arch powerpc"
+     ;;
+esac
+fi # not cross-compiling
+fi # guess arch
+
+if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
+for arch in $ax_gcc_arch; do
+  if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
+    flags="-mtune=$arch"
+    # -mcpu=$arch and m$arch generate nonportable code on every arch except
+    # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
+    case $host_cpu in i*86|x86_64*|amd64*) flags="$flags -mcpu=$arch -m$arch";; esac
+  else
+    flags="-march=$arch -mcpu=$arch -m$arch"
+  fi
+  for flag in $flags; do
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
+ax_save_FLAGS=$CFLAGS
+   CFLAGS="$flag"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
+else
+  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	ax_cv_gcc_archflag=$flag; break
+else
+	:
+fi
+
+  done
+  test "x$ax_cv_gcc_archflag" = xunknown || break
+done
+fi
+
+fi # $GCC=yes
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
+$as_echo_n "checking for gcc architecture flag... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5
+$as_echo "$ax_cv_gcc_archflag" >&6; }
+if test "x$ax_cv_gcc_archflag" = xunknown; then
+  :
+else
+  CFLAGS="$CFLAGS $ax_cv_gcc_archflag"
+fi
+
+     ;;
+   apple)
+     # default optimization flags for apple on all systems
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -O3" >&5
+$as_echo_n "checking whether C compiler accepts -O3... " >&6; }
+if ${ax_cv_c_flags__O3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-O3"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__O3=yes
+else
+  ax_cv_c_flags__O3=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__O3
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -O3"
+else
+	:
+fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fomit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fomit-frame-pointer... " >&6; }
+if ${ax_cv_c_flags__fomit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-fomit-frame-pointer"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__fomit_frame_pointer=yes
+else
+  ax_cv_c_flags__fomit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fomit_frame_pointer
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -fomit-frame-pointer"
+else
+	:
+fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fPIC" >&5
+$as_echo_n "checking whether C compiler accepts -fPIC... " >&6; }
+if ${ax_cv_c_flags__fPIC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-fPIC"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__fPIC=yes
+else
+  ax_cv_c_flags__fPIC=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fPIC
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -fPIC"
+else
+	:
+fi
+
+
+     # -malign-double for x86 systems
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
+$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
+if ${ax_cv_c_flags__malign_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-malign-double"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__malign_double=yes
+else
+  ax_cv_c_flags__malign_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -malign-double"
+else
+	:
+fi
+
+
+     #  -fstrict-aliasing for gcc-2.95+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
+$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
+if ${ax_cv_c_flags__fstrict_aliasing+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-fstrict-aliasing"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__fstrict_aliasing=yes
+else
+  ax_cv_c_flags__fstrict_aliasing=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -fstrict-aliasing"
+else
+	:
+fi
+
+
+     # note that we enable "unsafe" fp optimization with other compilers, too
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
+$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
+if ${ax_cv_c_flags__ffast_math+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-ffast-math"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__ffast_math=yes
+else
+  ax_cv_c_flags__ffast_math=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -ffast-math"
+else
+	:
+fi
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -march=core2" >&5
+$as_echo_n "checking whether C compiler accepts -march=core2... " >&6; }
+if ${ax_cv_c_flags__march_core2+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-march=core2"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__march_core2=yes
+else
+  ax_cv_c_flags__march_core2=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__march_core2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -march=core2"
+else
+	:
+fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mtune=core2" >&5
+$as_echo_n "checking whether C compiler accepts -mtune=core2... " >&6; }
+if ${ax_cv_c_flags__mtune_core2+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      ax_save_FLAGS=$CFLAGS
+      CFLAGS="-mtune=core2"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_c_flags__mtune_core2=yes
+else
+  ax_cv_c_flags__mtune_core2=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__mtune_core2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	CFLAGS="$CFLAGS -mtune=core2"
+else
+	:
+fi
+
+
+
+
+
+
+# Check whether --with-apple-gcc-arch was given.
+if test "${with_apple_gcc_arch+set}" = set; then :
+  withval=$with_apple_gcc_arch; ax_apple_gcc_arch=$withval
+else
+  ax_apple_gcc_arch=yes
+fi
+
+
+if ${ax_cv_apple_gcc_archflag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+ax_cv_apple_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+  if test "x$ax_apple_gcc_arch" = xyes; then
+    ax_apple_gcc_arch=""
+    if test "$cross_compiling" = no; then
+      if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
+        ax_apple_gcc_arch="i386 x86_64 ppc ppc64"
+        echo "default arch because of portable code"
+      else
+        case $host_cpu in
+          x86_64*|amd64*|i[3456]86*)
+            ax_apple_gcc_arch="x86_64 i386"
+            ;;
+          powerpc*)
+             cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+             cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+             case $cputype in
+               *750*|*740[0-9]*|*74[4-5][0-9]*|*74[0-9][0-9]*) ax_apple_gcc_arch="ppc";;
+               *970*|*POWER4*|*power4*|*gq*|*POWER5*|*power5*|*gr*|*gs*) ax_apple_gcc_arch="ppc64";;
+               *) ax_apple_gcc_arch="ppc64 ppc";;
+             esac
+             ;;
+          *)
+            ax_apple_gcc_arch="x86_64 i386 ppc64 ppc"
+            ;;
+        esac
+      fi # portable code
+    fi # not cross-compiling
+  fi # guess arch
+
+  if test "x$ax_apple_gcc_arch" != x -a "x$ax_apple_gcc_arch" != xno; then
+    ax_cv_apple_gcc_archflag=""
+    for arch in $ax_apple_gcc_arch; do
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -arch $arch" >&5
+$as_echo_n "checking whether C compiler accepts -arch $arch... " >&6; }
+ax_save_FLAGS=$CFLAGS
+   CFLAGS="-arch $arch"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval `$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`=yes
+else
+  eval `$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+
+        saved_CFLAGS="$CFLAGS";
+        CFLAGS="$CFLAGS -arch $arch";
+        LIBS="$LIBS $fftw3_LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linking is possible with -arch $arch" >&5
+$as_echo_n "checking whether linking is possible with -arch $arch... " >&6; };
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int main(void){return 0;}
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  last_result=yes;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };ax_cv_apple_gcc_archflag="$ax_cv_apple_gcc_archflag -arch $arch"
+else
+  last_result=no;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext;
+        CFLAGS="$saved_CFLAGS"
+
+else
+	:
+fi
+
+      if test "x$last_result" = "xyes"; then
+        break;
+      fi
+    done
+  fi
+fi # $GCC=yes
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Apple's gcc architecture flag" >&5
+$as_echo_n "checking for Apple's gcc architecture flag... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_apple_gcc_archflag" >&5
+$as_echo "$ax_cv_apple_gcc_archflag" >&6; }
+if test "x$ax_cv_apple_gcc_archflag" = xunknown; then
+  :
+else
+  CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
+fi
+
+     ;;
+  esac
+
+  if test -z "$CFLAGS"; then
+	echo ""
+	echo "********************************************************"
+        echo "* WARNING: Don't know the best CFLAGS for this system  *"
+        echo "* Use ./configure CFLAGS=... to specify your own flags *"
+	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
+	echo "********************************************************"
+	echo ""
+        CFLAGS="-O3"
+  fi
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5
+$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; }
+ax_save_FLAGS=$CFLAGS
+   CFLAGS="$CFLAGS"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes
+else
+  eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+	:
+else
+
+	echo ""
+        echo "********************************************************"
+        echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
+        echo "* your compiler.                                       *"
+        echo "* Use ./configure CFLAGS=... to specify your own flags *"
+        echo "********************************************************"
+        echo ""
+        CFLAGS=""
+
+fi
+
+
+fi
+
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+  LIBS="$saved_LIBS"
+fi
+
+# override CFLAGS selection when debugging
+if test "x${enable_debug}" = "xyes"; then
+  CFLAGS="-g"
+#  if test "x$ax_cv_c_compiler_vendor" = "xapple"; then
+#    CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
+#  fi
+fi
+
+# add gcc warnings, in debug/maintainer mode only
+if test "x${enable_debug}" = "xyes" || test "x$USE_MAINTAINER_MODE" = "xyes";
+then
+  if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
+    CFLAGS="$CFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic"
+    CFLAGS="$CFLAGS -Wno-long-long -Wshadow -Wbad-function-cast -Wwrite-strings"
+    CFLAGS="$CFLAGS -Wstrict-prototypes -Wredundant-decls -Wnested-externs"
+    CFLAGS="$CFLAGS -Wundef -Wconversion -Wmissing-prototypes "
+    CFLAGS="$CFLAGS -Wmissing-declarations"
+  fi
+fi
+
+# option to accept C99
+CFLAGS="$CFLAGS $ac_cv_prog_cc_c99"
+
+CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+
+# add Matlab CFLAGS
+if test "x$ax_prog_matlab" = "xyes"; then
+  CFLAGS="$CFLAGS $matlab_CFLAGS"
+fi
+
+################################################################################
+# check if mex.h can be included without undefinition of
+################################################################################
+ax_prog_matlab_gcc_require_undef_stdc_utf_16=no
+if test "x$ax_prog_matlab" = "xyes"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inclusion of mex.h succeeds" >&5
+$as_echo_n "checking if inclusion of mex.h succeeds... " >&6; }
+  saved_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $matlab_CPPFLAGS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include "mex.h"
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_prog_matlab_check_compile_mex_h=yes
+else
+  ax_prog_matlab_check_compile_mex_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_prog_matlab_check_compile_mex_h" >&5
+$as_echo "$ax_prog_matlab_check_compile_mex_h" >&6; }
+  if test "x$ax_prog_matlab_check_compile_mex_h" = "xno"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if undefining __STDC_UTF_16__ solves this issue" >&5
+$as_echo_n "checking if undefining __STDC_UTF_16__ solves this issue... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#undef __STDC_UTF_16__
+    #include "mex.h"
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_prog_matlab_gcc_require_undef_stdc_utf_16=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_prog_matlab_gcc_require_undef_stdc_utf_16" >&5
+$as_echo "$ax_prog_matlab_gcc_require_undef_stdc_utf_16" >&6; }
+  fi
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+if test "x$ax_prog_matlab_gcc_require_undef_stdc_utf_16" =  "xyes"; then
+
+$as_echo "#define HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16 1" >>confdefs.h
+
+fi
+
+################################################################################
+# header files/data types/compiler characteristics
+################################################################################
+
+for ac_header in math.h stdio.h stdlib.h time.h  sys/time.h \
+  complex.h string.h float.h limits.h stdarg.h stddef.h sys/types.h stdint.h \
+  inttypes.h stdbool.h malloc.h c_asm.h intrinsics.h mach/mach_time.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if ${ac_cv_header_time+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_time=yes
+else
+  ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "long double" "ac_cv_type_long_double" "$ac_includes_default"
+if test "x$ac_cv_type_long_double" = xyes; then :
+
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "hrtime_t" "ac_cv_type_hrtime_t" "
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+"
+if test "x$ac_cv_type_hrtime_t" = xyes; then :
+
+$as_echo "#define HAVE_HRTIME_T 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default
+#ifdef HAVE_STDINT_H
+#  include <stdint.h>
+#endif
+"
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINTPTR_T 1
+_ACEOF
+
+
+else
+  # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_void_p" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if ${ac_cv_sizeof_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
+$as_echo_n "checking size of unsigned int... " >&6; }
+if ${ac_cv_sizeof_unsigned_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned int)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if ${ac_cv_sizeof_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
+$as_echo_n "checking size of unsigned long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if ${ac_cv_sizeof_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
+$as_echo_n "checking size of unsigned long long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+$as_echo_n "checking size of size_t... " >&6; }
+if ${ac_cv_sizeof_size_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_size_t" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_size_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+$as_echo "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ptrdiff_t" >&5
+$as_echo_n "checking size of ptrdiff_t... " >&6; }
+if ${ac_cv_sizeof_ptrdiff_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ptrdiff_t))" "ac_cv_sizeof_ptrdiff_t"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_ptrdiff_t" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (ptrdiff_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_ptrdiff_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ptrdiff_t" >&5
+$as_echo "$ac_cv_sizeof_ptrdiff_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_PTRDIFF_T $ac_cv_sizeof_ptrdiff_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
+$as_echo_n "checking size of float... " >&6; }
+if ${ac_cv_sizeof_float+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_float" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (float)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_float=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
+$as_echo "$ac_cv_sizeof_float" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
+$as_echo_n "checking size of double... " >&6; }
+if ${ac_cv_sizeof_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_double" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (double)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_double=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
+$as_echo "$ac_cv_sizeof_double" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5
+$as_echo_n "checking size of long double... " >&6; }
+if ${ac_cv_sizeof_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long_double" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long double)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long_double=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5
+$as_echo "$ac_cv_sizeof_long_double" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+_ACEOF
+
+
+
+# library functions
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
+else
+  ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_alloca_works=yes
+else
+  ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
+else
+  ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
+$as_echo_n "checking for working strtod... " >&6; }
+if ${ac_cv_func_strtod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_strtod=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+$ac_includes_default
+#ifndef strtod
+double strtod ();
+#endif
+int
+main()
+{
+  {
+    /* Some versions of Linux strtod mis-parse strings with leading '+'.  */
+    char *string = " +69";
+    char *term;
+    double value;
+    value = strtod (string, &term);
+    if (value != 69 || term != (string + 4))
+      return 1;
+  }
+
+  {
+    /* Under Solaris 2.4, strtod returns the wrong value for the
+       terminating character under some conditions.  */
+    char *string = "NaN";
+    char *term;
+    strtod (string, &term);
+    if (term != string && *(term - 1) == 0)
+      return 1;
+  }
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_strtod=yes
+else
+  ac_cv_func_strtod=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
+$as_echo "$ac_cv_func_strtod" >&6; }
+if test $ac_cv_func_strtod = no; then
+  case " $LIBOBJS " in
+  *" strtod.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
+ ;;
+esac
+
+ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
+if test "x$ac_cv_func_pow" = xyes; then :
+
+fi
+
+if test $ac_cv_func_pow = no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
+$as_echo_n "checking for pow in -lm... " >&6; }
+if ${ac_cv_lib_m_pow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pow ();
+int
+main ()
+{
+return pow ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_pow=yes
+else
+  ac_cv_lib_m_pow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
+$as_echo "$ac_cv_lib_m_pow" >&6; }
+if test "x$ac_cv_lib_m_pow" = xyes; then :
+  POW_LIB=-lm
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
+$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
+fi
+
+fi
+
+fi
+
+for ac_func in vprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
+if test "x$ac_cv_func_vprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VPRINTF 1
+_ACEOF
+
+ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = xyes; then :
+
+$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
+
+fi
+
+fi
+done
+
+
+saved_LIBS=$LIBS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
+$as_echo_n "checking for sin in -lm... " >&6; }
+if ${ac_cv_lib_m_sin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sin ();
+int
+main ()
+{
+return sin ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_sin=yes
+else
+  ac_cv_lib_m_sin=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
+$as_echo "$ac_cv_lib_m_sin" >&6; }
+if test "x$ac_cv_lib_m_sin" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+LIBS=$saved_LIBS
+
+for ac_func in gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in memset posix_memalign memalign
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in _mm_malloc _mm_free sysctl
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in abort snprintf sqrt
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in sleep usleep nanosleep drand48 srand48
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ac_fn_c_check_decl "$LINENO" "memalign" "ac_cv_have_decl_memalign" "$ac_includes_default"
+if test "x$ac_cv_have_decl_memalign" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMALIGN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "posix_memalign" "ac_cv_have_decl_posix_memalign" "$ac_includes_default"
+if test "x$ac_cv_have_decl_posix_memalign" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POSIX_MEMALIGN $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include <unistd.h>
+"
+if test "x$ac_cv_have_decl_sleep" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SLEEP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "nanosleep" "ac_cv_have_decl_nanosleep" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_nanosleep" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NANOSLEEP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "drand48" "ac_cv_have_decl_drand48" "#include <stdlib.h>
+"
+if test "x$ac_cv_have_decl_drand48" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_DRAND48 $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "srand48" "ac_cv_have_decl_srand48" "#include <stdlib.h>
+"
+if test "x$ac_cv_have_decl_srand48" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SRAND48 $ac_have_decl
+_ACEOF
+
+
+# Cray UNICOS _rtc() (real-time clock) intrinsic
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _rtc intrinsic" >&5
+$as_echo_n "checking for _rtc intrinsic... " >&6; }
+rtc_ok=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef HAVE_INTRINSICS_H
+#include <intrinsics.h>
+#endif
+int
+main ()
+{
+_rtc()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+$as_echo "#define HAVE__RTC 1" >>confdefs.h
+
+else
+  rtc_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rtc_ok" >&5
+$as_echo "$rtc_ok" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a cycle counter is available" >&5
+$as_echo_n "checking whether a cycle counter is available... " >&6; }
+save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$CPPFLAGS -I$srcdir/include"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include "cycle.h"
+#ifndef HAVE_TICK_COUNTER
+#  error No cycle counter
+#endif
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ok=yes
+else
+  ok=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5
+$as_echo "$ok" >&6; }
+TICKS_PER_SECOND=1
+if test $ok = no; then
+  echo "***************************************************************"
+  echo "WARNING: No cycle counter found. Time measurements in NFFT will"
+  echo "         show incorrect results.                               "
+  echo "***************************************************************"
+else
+  if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include "cycle.h"
+#include <stdio.h>
+#if defined(HAVE_NANOSLEEP)
+#include <stdlib.h>
+static struct timespec ts = {1,0};
+#define SLEEP nanosleep(&ts, 0)
+#elif defined(HAVE_SLEEP)
+#include <unistd.h>
+#define SLEEP sleep(1)
+#elif defined(HAVE_USLEEP)
+#include <unistd.h>
+#define SLEEP usleep(1000)
+#else
+#error wtf!
+#endif
+int main(){
+ticks t0 = getticks();
+SLEEP;{
+  double tps = elapsed(getticks(),t0)/1.0;
+  FILE *f = fopen("ticks.tmp","w");
+  fprintf(f,"%.1f\n",tps);
+  fclose(f);}
+return 0;}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  read TICKS_PER_SECOND < ticks.tmp
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    rm -f ticks.tmp
+  if test "$TICKS_PER_SECOND" = "1"; then
+    echo "***************************************************************"
+    echo "WARNING: Number of ticks per second could not be determined.   "
+    echo "         Time measurements in NFFT will be in arbitrary units  "
+    echo "         instead of seconds.                                   "
+    echo "***************************************************************"
+  fi
+fi
+
+CPPFLAGS=$save_CPPFLAGS
+
+
+PRECISION=d
+if test "$PRECISION" = "l"; then
+for ac_func in copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csinl  [...]
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_copysignl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nextafterl" "ac_cv_have_decl_nextafterl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nextafterl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEXTAFTERL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nanl" "ac_cv_have_decl_nanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nanl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ceill" "ac_cv_have_decl_ceill" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ceill" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEILL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "floorl" "ac_cv_have_decl_floorl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_floorl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FLOORL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nearbyintl" "ac_cv_have_decl_nearbyintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nearbyintl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEARBYINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "rintl" "ac_cv_have_decl_rintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_rintl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "roundl" "ac_cv_have_decl_roundl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_roundl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ROUNDL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lrintl" "ac_cv_have_decl_lrintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lrintl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LRINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lroundl" "ac_cv_have_decl_lroundl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lroundl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LROUNDL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llrintl" "ac_cv_have_decl_llrintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llrintl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLRINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llroundl" "ac_cv_have_decl_llroundl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llroundl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLROUNDL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "truncl" "ac_cv_have_decl_truncl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_truncl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TRUNCL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmodl" "ac_cv_have_decl_fmodl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmodl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMODL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remainderl" "ac_cv_have_decl_remainderl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remainderl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMAINDERL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remquol" "ac_cv_have_decl_remquol" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remquol" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMQUOL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fdiml" "ac_cv_have_decl_fdiml" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fdiml" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FDIML $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmaxl" "ac_cv_have_decl_fmaxl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmaxl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAXL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fminl" "ac_cv_have_decl_fminl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fminl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmal" "ac_cv_have_decl_fmal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmal" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fabsl" "ac_cv_have_decl_fabsl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fabsl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FABSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sqrtl" "ac_cv_have_decl_sqrtl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sqrtl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SQRTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cbrtl" "ac_cv_have_decl_cbrtl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cbrtl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CBRTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "hypotl" "ac_cv_have_decl_hypotl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_hypotl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_HYPOTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expl" "ac_cv_have_decl_expl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp2l" "ac_cv_have_decl_exp2l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp2l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP2L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expm1l" "ac_cv_have_decl_expm1l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expm1l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPM1L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logl" "ac_cv_have_decl_logl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log2l" "ac_cv_have_decl_log2l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log2l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG2L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log10l" "ac_cv_have_decl_log10l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log10l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG10L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log1pl" "ac_cv_have_decl_log1pl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log1pl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG1PL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logbl" "ac_cv_have_decl_logbl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logbl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGBL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ilogbl" "ac_cv_have_decl_ilogbl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ilogbl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ILOGBL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "modfl" "ac_cv_have_decl_modfl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_modfl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MODFL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_frexpl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ldexpl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LDEXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbnl" "ac_cv_have_decl_scalbnl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbnl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalblnl" "ac_cv_have_decl_scalblnl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalblnl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBLNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "powl" "ac_cv_have_decl_powl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_powl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POWL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cosl" "ac_cv_have_decl_cosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cosl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinl" "ac_cv_have_decl_sinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanl" "ac_cv_have_decl_tanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "coshl" "ac_cv_have_decl_coshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_coshl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinhl" "ac_cv_have_decl_sinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanhl" "ac_cv_have_decl_tanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acosl" "ac_cv_have_decl_acosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acosl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinl" "ac_cv_have_decl_asinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanl" "ac_cv_have_decl_atanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan2l" "ac_cv_have_decl_atan2l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan2l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN2L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acoshl" "ac_cv_have_decl_acoshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acoshl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinhl" "ac_cv_have_decl_asinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanhl" "ac_cv_have_decl_atanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tgammal" "ac_cv_have_decl_tgammal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tgammal" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TGAMMAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lgammal" "ac_cv_have_decl_lgammal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lgammal" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LGAMMAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j0l" "ac_cv_have_decl_j0l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j0l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J0L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j1l" "ac_cv_have_decl_j1l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j1l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J1L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "jnl" "ac_cv_have_decl_jnl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_jnl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_JNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y0l" "ac_cv_have_decl_y0l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y0l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y0L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y1l" "ac_cv_have_decl_y1l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y1l" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y1L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ynl" "ac_cv_have_decl_ynl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ynl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_YNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfl" "ac_cv_have_decl_erfl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfcl" "ac_cv_have_decl_erfcl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfcl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFCL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "creall" "ac_cv_have_decl_creall" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_creall" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CREALL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cimagl" "ac_cv_have_decl_cimagl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cimagl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CIMAGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cabsl" "ac_cv_have_decl_cabsl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cabsl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CABSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cargl" "ac_cv_have_decl_cargl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cargl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CARGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "conjl" "ac_cv_have_decl_conjl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_conjl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CONJL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cprojl" "ac_cv_have_decl_cprojl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cprojl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPROJL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csqrtl" "ac_cv_have_decl_csqrtl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csqrtl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSQRTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cexpl" "ac_cv_have_decl_cexpl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cexpl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "clogl" "ac_cv_have_decl_clogl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_clogl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLOGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cpowl" "ac_cv_have_decl_cpowl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cpowl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPOWL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinl" "ac_cv_have_decl_csinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccosl" "ac_cv_have_decl_ccosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccosl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanl" "ac_cv_have_decl_ctanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinl" "ac_cv_have_decl_casinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacosl" "ac_cv_have_decl_cacosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacosl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanl" "ac_cv_have_decl_catanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinhl" "ac_cv_have_decl_csinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccoshl" "ac_cv_have_decl_ccoshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccoshl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanhl" "ac_cv_have_decl_ctanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinhl" "ac_cv_have_decl_casinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacoshl" "ac_cv_have_decl_cacoshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacoshl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanhl" "ac_cv_have_decl_catanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanhl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANHL $ac_have_decl
+_ACEOF
+
+fi
+
+if test "$PRECISION" = "d"; then
+for ac_func in copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_copysign" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nextafter" "ac_cv_have_decl_nextafter" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nextafter" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEXTAFTER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nan" "ac_cv_have_decl_nan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nan" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ceil" "ac_cv_have_decl_ceil" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ceil" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEIL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "floor" "ac_cv_have_decl_floor" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_floor" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FLOOR $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nearbyint" "ac_cv_have_decl_nearbyint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nearbyint" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEARBYINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "rint" "ac_cv_have_decl_rint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_rint" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "round" "ac_cv_have_decl_round" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_round" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ROUND $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lrint" "ac_cv_have_decl_lrint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lrint" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LRINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lround" "ac_cv_have_decl_lround" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lround" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LROUND $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llrint" "ac_cv_have_decl_llrint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llrint" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLRINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llround" "ac_cv_have_decl_llround" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llround" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLROUND $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "trunc" "ac_cv_have_decl_trunc" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_trunc" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TRUNC $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmod" "ac_cv_have_decl_fmod" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmod" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMOD $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remainder" "ac_cv_have_decl_remainder" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remainder" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMAINDER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remquo" "ac_cv_have_decl_remquo" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remquo" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMQUO $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fdim" "ac_cv_have_decl_fdim" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fdim" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FDIM $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmax" "ac_cv_have_decl_fmax" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmax" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAX $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmin" "ac_cv_have_decl_fmin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmin" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fma" "ac_cv_have_decl_fma" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fma" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMA $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fabs" "ac_cv_have_decl_fabs" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fabs" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FABS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sqrt" "ac_cv_have_decl_sqrt" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sqrt" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SQRT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cbrt" "ac_cv_have_decl_cbrt" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cbrt" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CBRT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "hypot" "ac_cv_have_decl_hypot" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_hypot" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_HYPOT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp" "ac_cv_have_decl_exp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp2" "ac_cv_have_decl_exp2" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp2" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP2 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expm1" "ac_cv_have_decl_expm1" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expm1" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPM1 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log" "ac_cv_have_decl_log" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log2" "ac_cv_have_decl_log2" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log2" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG2 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log10" "ac_cv_have_decl_log10" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log10" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG10 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log1p" "ac_cv_have_decl_log1p" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log1p" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG1P $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logb" "ac_cv_have_decl_logb" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logb" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGB $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ilogb" "ac_cv_have_decl_ilogb" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ilogb" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ILOGB $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "modf" "ac_cv_have_decl_modf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_modf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MODF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "frexp" "ac_cv_have_decl_frexp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_frexp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ldexp" "ac_cv_have_decl_ldexp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ldexp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LDEXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbn" "ac_cv_have_decl_scalbn" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbn" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbln" "ac_cv_have_decl_scalbln" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbln" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBLN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "pow" "ac_cv_have_decl_pow" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_pow" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POW $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cos" "ac_cv_have_decl_cos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cos" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sin" "ac_cv_have_decl_sin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sin" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tan" "ac_cv_have_decl_tan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tan" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cosh" "ac_cv_have_decl_cosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cosh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinh" "ac_cv_have_decl_sinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanh" "ac_cv_have_decl_tanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acos" "ac_cv_have_decl_acos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acos" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asin" "ac_cv_have_decl_asin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asin" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan" "ac_cv_have_decl_atan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan2" "ac_cv_have_decl_atan2" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan2" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN2 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acosh" "ac_cv_have_decl_acosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acosh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinh" "ac_cv_have_decl_asinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanh" "ac_cv_have_decl_atanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tgamma" "ac_cv_have_decl_tgamma" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tgamma" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TGAMMA $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lgamma" "ac_cv_have_decl_lgamma" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lgamma" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LGAMMA $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j0" "ac_cv_have_decl_j0" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j0" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J0 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j1" "ac_cv_have_decl_j1" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j1" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J1 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "jn" "ac_cv_have_decl_jn" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_jn" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_JN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y0" "ac_cv_have_decl_y0" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y0" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y0 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y1" "ac_cv_have_decl_y1" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y1" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y1 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "yn" "ac_cv_have_decl_yn" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_yn" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_YN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erf" "ac_cv_have_decl_erf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfc" "ac_cv_have_decl_erfc" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfc" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFC $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "creal" "ac_cv_have_decl_creal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_creal" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CREAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cimag" "ac_cv_have_decl_cimag" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cimag" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CIMAG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cabs" "ac_cv_have_decl_cabs" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cabs" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CABS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "carg" "ac_cv_have_decl_carg" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_carg" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CARG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "conj" "ac_cv_have_decl_conj" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_conj" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CONJ $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cproj" "ac_cv_have_decl_cproj" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cproj" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPROJ $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csqrt" "ac_cv_have_decl_csqrt" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csqrt" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSQRT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cexp" "ac_cv_have_decl_cexp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cexp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "clog" "ac_cv_have_decl_clog" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_clog" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLOG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cpow" "ac_cv_have_decl_cpow" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cpow" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPOW $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csin" "ac_cv_have_decl_csin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csin" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccos" "ac_cv_have_decl_ccos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccos" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctan" "ac_cv_have_decl_ctan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctan" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casin" "ac_cv_have_decl_casin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casin" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacos" "ac_cv_have_decl_cacos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacos" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catan" "ac_cv_have_decl_catan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catan" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinh" "ac_cv_have_decl_csinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccosh" "ac_cv_have_decl_ccosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccosh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanh" "ac_cv_have_decl_ctanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinh" "ac_cv_have_decl_casinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacosh" "ac_cv_have_decl_cacosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacosh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanh" "ac_cv_have_decl_catanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanh" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANH $ac_have_decl
+_ACEOF
+
+fi
+
+if test "$PRECISION" = "s"; then
+for ac_func in copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf ccos [...]
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_copysignf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nextafterf" "ac_cv_have_decl_nextafterf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nextafterf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEXTAFTERF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nanf" "ac_cv_have_decl_nanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nanf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ceilf" "ac_cv_have_decl_ceilf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ceilf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEILF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "floorf" "ac_cv_have_decl_floorf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_floorf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FLOORF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nearbyintf" "ac_cv_have_decl_nearbyintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nearbyintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEARBYINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "rintf" "ac_cv_have_decl_rintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_rintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "roundf" "ac_cv_have_decl_roundf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_roundf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ROUNDF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lrintf" "ac_cv_have_decl_lrintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lrintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LRINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lroundf" "ac_cv_have_decl_lroundf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lroundf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LROUNDF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llrintf" "ac_cv_have_decl_llrintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llrintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLRINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llroundf" "ac_cv_have_decl_llroundf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llroundf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLROUNDF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "truncf" "ac_cv_have_decl_truncf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_truncf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TRUNCF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmodf" "ac_cv_have_decl_fmodf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmodf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMODF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remainderf" "ac_cv_have_decl_remainderf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remainderf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMAINDERF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remquof" "ac_cv_have_decl_remquof" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remquof" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMQUOF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fdimf" "ac_cv_have_decl_fdimf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fdimf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FDIMF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmaxf" "ac_cv_have_decl_fmaxf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmaxf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAXF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fminf" "ac_cv_have_decl_fminf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fminf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmaf" "ac_cv_have_decl_fmaf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmaf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fabsf" "ac_cv_have_decl_fabsf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fabsf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FABSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sqrtf" "ac_cv_have_decl_sqrtf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sqrtf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SQRTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cbrtf" "ac_cv_have_decl_cbrtf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cbrtf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CBRTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "hypotf" "ac_cv_have_decl_hypotf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_hypotf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_HYPOTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expf" "ac_cv_have_decl_expf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp2f" "ac_cv_have_decl_exp2f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp2f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP2F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expm1f" "ac_cv_have_decl_expm1f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expm1f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPM1F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logf" "ac_cv_have_decl_logf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log2f" "ac_cv_have_decl_log2f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log2f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG2F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log10f" "ac_cv_have_decl_log10f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log10f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG10F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log1pf" "ac_cv_have_decl_log1pf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log1pf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG1PF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logbf" "ac_cv_have_decl_logbf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logbf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGBF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ilogbf" "ac_cv_have_decl_ilogbf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ilogbf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ILOGBF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "modff" "ac_cv_have_decl_modff" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_modff" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MODFF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "frexpf" "ac_cv_have_decl_frexpf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_frexpf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ldexpf" "ac_cv_have_decl_ldexpf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ldexpf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LDEXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbnf" "ac_cv_have_decl_scalbnf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbnf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalblnf" "ac_cv_have_decl_scalblnf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalblnf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBLNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "powf" "ac_cv_have_decl_powf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_powf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POWF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cosf" "ac_cv_have_decl_cosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cosf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinf" "ac_cv_have_decl_sinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanf" "ac_cv_have_decl_tanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "coshf" "ac_cv_have_decl_coshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_coshf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinhf" "ac_cv_have_decl_sinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanhf" "ac_cv_have_decl_tanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acosf" "ac_cv_have_decl_acosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acosf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinf" "ac_cv_have_decl_asinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanf" "ac_cv_have_decl_atanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan2f" "ac_cv_have_decl_atan2f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan2f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN2F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acoshf" "ac_cv_have_decl_acoshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acoshf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinhf" "ac_cv_have_decl_asinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanhf" "ac_cv_have_decl_atanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tgammaf" "ac_cv_have_decl_tgammaf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tgammaf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TGAMMAF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lgammaf" "ac_cv_have_decl_lgammaf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lgammaf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LGAMMAF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j0f" "ac_cv_have_decl_j0f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j0f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J0F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j1f" "ac_cv_have_decl_j1f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j1f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J1F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "jnf" "ac_cv_have_decl_jnf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_jnf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_JNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y0f" "ac_cv_have_decl_y0f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y0f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y0F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y1f" "ac_cv_have_decl_y1f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y1f" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y1F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ynf" "ac_cv_have_decl_ynf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ynf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_YNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erff" "ac_cv_have_decl_erff" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erff" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfcf" "ac_cv_have_decl_erfcf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfcf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFCF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "crealf" "ac_cv_have_decl_crealf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_crealf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CREALF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cimagf" "ac_cv_have_decl_cimagf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cimagf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CIMAGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cabs" "ac_cv_have_decl_cabs" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cabs" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CABS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cargf" "ac_cv_have_decl_cargf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cargf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CARGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "conjf" "ac_cv_have_decl_conjf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_conjf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CONJF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cprojf" "ac_cv_have_decl_cprojf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cprojf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPROJF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csqrtf" "ac_cv_have_decl_csqrtf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csqrtf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSQRTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cexpf" "ac_cv_have_decl_cexpf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cexpf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "clogf" "ac_cv_have_decl_clogf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_clogf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLOGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cpowf" "ac_cv_have_decl_cpowf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cpowf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPOWF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinf" "ac_cv_have_decl_csinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccosf" "ac_cv_have_decl_ccosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccosf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanf" "ac_cv_have_decl_ctanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinf" "ac_cv_have_decl_casinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacosf" "ac_cv_have_decl_cacosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacosf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanf" "ac_cv_have_decl_catanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinhf" "ac_cv_have_decl_csinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccoshf" "ac_cv_have_decl_ccoshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccoshf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanhf" "ac_cv_have_decl_ctanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinhf" "ac_cv_have_decl_casinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacoshf" "ac_cv_have_decl_cacoshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacoshf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanhf" "ac_cv_have_decl_catanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanhf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANHF $ac_have_decl
+_ACEOF
+
+fi
+
+# The output files to be generated
+ac_config_files="$ac_config_files Makefile nfft3.pc doxygen/doxygen.Doxyfile include/Makefile include/nfft3conf.h include/ticks.h 3rdparty/Makefile 3rdparty/cstripack/Makefile util/Makefile kernel/Makefile kernel/fpt/Makefile kernel/mri/Makefile kernel/nfct/Makefile kernel/nfft/Makefile kernel/nfsft/Makefile kernel/nfsoft/Makefile kernel/nfst/Makefile kernel/nnfft/Makefile kernel/nsfft/Makefile kernel/solver/Makefile kernel/util/Makefile tests/Makefile examples/Makefile examples/fpt/Make [...]
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFCT_TRUE}" && test -z "${HAVE_NFCT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NFCT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFST_TRUE}" && test -z "${HAVE_NFST_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NFST\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFSFT_TRUE}" && test -z "${HAVE_NFSFT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NFSFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFSOFT_TRUE}" && test -z "${HAVE_NFSOFT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NFSOFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NNFFT_TRUE}" && test -z "${HAVE_NNFFT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NNFFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NSFFT_TRUE}" && test -z "${HAVE_NSFFT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NSFFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MRI_TRUE}" && test -z "${HAVE_MRI_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_MRI\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_FPT_TRUE}" && test -z "${HAVE_FPT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_FPT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_THREADS_TRUE}" && test -z "${HAVE_THREADS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_THREADS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_OPENMP_TRUE}" && test -z "${HAVE_OPENMP_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_OPENMP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MATLAB_TRUE}" && test -z "${HAVE_MATLAB_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_MATLAB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MATLAB_THREADS_TRUE}" && test -z "${HAVE_MATLAB_THREADS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_MATLAB_THREADS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MATLAB_TRUE}" && test -z "${HAVE_MATLAB_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_MATLAB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by NFFT $as_me 3.2.3, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bugs at nfft.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+NFFT config.status 3.2.3
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h:include/config.h.in" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "nfft3.pc") CONFIG_FILES="$CONFIG_FILES nfft3.pc" ;;
+    "doxygen/doxygen.Doxyfile") CONFIG_FILES="$CONFIG_FILES doxygen/doxygen.Doxyfile" ;;
+    "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+    "include/nfft3conf.h") CONFIG_FILES="$CONFIG_FILES include/nfft3conf.h" ;;
+    "include/ticks.h") CONFIG_FILES="$CONFIG_FILES include/ticks.h" ;;
+    "3rdparty/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/Makefile" ;;
+    "3rdparty/cstripack/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/cstripack/Makefile" ;;
+    "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
+    "kernel/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/Makefile" ;;
+    "kernel/fpt/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/fpt/Makefile" ;;
+    "kernel/mri/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/mri/Makefile" ;;
+    "kernel/nfct/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfct/Makefile" ;;
+    "kernel/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfft/Makefile" ;;
+    "kernel/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfsft/Makefile" ;;
+    "kernel/nfsoft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfsoft/Makefile" ;;
+    "kernel/nfst/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfst/Makefile" ;;
+    "kernel/nnfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nnfft/Makefile" ;;
+    "kernel/nsfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nsfft/Makefile" ;;
+    "kernel/solver/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/solver/Makefile" ;;
+    "kernel/util/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/util/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "examples/fpt/Makefile") CONFIG_FILES="$CONFIG_FILES examples/fpt/Makefile" ;;
+    "examples/mri/Makefile") CONFIG_FILES="$CONFIG_FILES examples/mri/Makefile" ;;
+    "examples/nfct/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfct/Makefile" ;;
+    "examples/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfft/Makefile" ;;
+    "examples/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfsft/Makefile" ;;
+    "examples/nfsoft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfsoft/Makefile" ;;
+    "examples/nfst/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfst/Makefile" ;;
+    "examples/nnfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nnfft/Makefile" ;;
+    "examples/nsfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nsfft/Makefile" ;;
+    "examples/solver/Makefile") CONFIG_FILES="$CONFIG_FILES examples/solver/Makefile" ;;
+    "applications/Makefile") CONFIG_FILES="$CONFIG_FILES applications/Makefile" ;;
+    "applications/fastgauss/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastgauss/Makefile" ;;
+    "applications/fastsum/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastsum/Makefile" ;;
+    "applications/fastsumS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastsumS2/Makefile" ;;
+    "applications/quadratureS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/quadratureS2/Makefile" ;;
+    "applications/mri/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/Makefile" ;;
+    "applications/mri/mri2d/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/mri2d/Makefile" ;;
+    "applications/mri/mri3d/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/mri3d/Makefile" ;;
+    "applications/polarFFT/Makefile") CONFIG_FILES="$CONFIG_FILES applications/polarFFT/Makefile" ;;
+    "applications/radon/Makefile") CONFIG_FILES="$CONFIG_FILES applications/radon/Makefile" ;;
+    "applications/iterS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/iterS2/Makefile" ;;
+    "matlab/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/Makefile" ;;
+    "matlab/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfsft/Makefile" ;;
+    "matlab/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfft/Makefile" ;;
+    "matlab/nfsft/@f_hat/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfsft/@f_hat/Makefile" ;;
+    "doxygen/Makefile") CONFIG_FILES="$CONFIG_FILES doxygen/Makefile" ;;
+    "support/Makefile") CONFIG_FILES="$CONFIG_FILES support/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Assembler program.
+AS=$lt_AS
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$lt_OBJDUMP
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..fcd76c3
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,514 @@
+# $Id: configure.ac 3971 2013-04-29 08:59:35Z tovo $
+#
+# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program 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 GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+################################################################################
+# Process this file with autoconf to produce a configure script.
+################################################################################
+
+# autoconf initialization
+AC_INIT([NFFT],[3.2.3],[bugs at nfft.org])
+
+# revision id from svn
+AC_REVISION([$Id: configure.ac 3971 2013-04-29 08:59:35Z tovo $])
+
+# copyright notice
+AC_COPYRIGHT([2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts])
+
+# m4 macros go here
+AC_CONFIG_MACRO_DIR([m4])
+
+# where to put auxilliary files
+AC_CONFIG_AUX_DIR([config])
+
+# how to recognize the source directory
+AC_CONFIG_SRCDIR([include/nfft3.h])
+
+# header to create
+AC_CONFIG_HEADERS([include/config.h:include/config.h.in])
+
+# canonical host system type string
+AC_CANONICAL_HOST
+
+# number of CPUs
+#AX_COUNT_CPUS
+#AC_DEFINE_UNQUOTED(NFFT_NUM_CORES,$cpu_count,[Define to number of cores.])
+
+# substitute abs_srcdir in generated Makefiles
+AC_SUBST([abs_srcdir])
+
+# minimum required libtool version
+LT_PREREQ([2.4.2])
+
+# libtool initialization
+LT_INIT([win32-dll])
+
+# substitute LIBTOOL_DEPS variable in generated Makefiles
+AC_SUBST([LIBTOOL_DEPS])
+
+# version information for shared library
+SHARED_VERSION_INFO="1:0:0"
+
+# substitute SHARED_VERSION_INFO in generated Makefiles
+AC_SUBST(SHARED_VERSION_INFO)
+
+# check for make
+AC_PROG_MAKE_SET
+
+# automake initialization
+AM_INIT_AUTOMAKE(1.10)
+
+################################################################################
+# options for customizing the build process
+################################################################################
+
+# maintainer mode option
+AM_MAINTAINER_MODE
+
+# enable or disable parts of NFFT
+
+# whether we need the fpt module
+need_fpt="no"
+
+# build all modules by default in maintainer mode or if option is given
+AC_ARG_ENABLE(all, [AC_HELP_STRING([--enable-all],[build all modules])], 
+  ok=$enableval, ok=no)
+if test "x$ok" = "xyes" -o "x$USE_MAINTAINER_MODE" = "xyes"; then
+  nfft_module_default="yes"
+else
+  nfft_module_default="no"
+fi
+
+# options for modules
+AX_NFFT_MODULE([nfct],[NFCT],[nonequispaced fast cosine transform])
+AX_NFFT_MODULE([nfst],[NFST],[nonequispaced fast sine transform])
+AX_NFFT_MODULE([nfsft],[NFSFT],[nonequispaced fast spherical Fourier transform],
+  [need_fpt="yes"])
+AX_NFFT_MODULE([nfsoft],[NFSOFT],[nonequispaced fast SO(3) Fourier transform],
+  [need_fpt="yes"])
+AX_NFFT_MODULE([nnfft],[NNFFT],[nonequispaced fast Fourier transform -- ]#
+  [nonequispaced in both domains])
+AX_NFFT_MODULE([nsfft],[NSFFT],[nonequispaced sparse fast Fourier transform])
+AX_NFFT_MODULE([mri],[MRI],[magnet resonance imaging])
+AX_NFFT_MODULE([fpt],[FPT],[fast polynomial transform],[],[],
+  [test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"])
+
+# multithreaded code
+AC_ARG_ENABLE(openmp, [AC_HELP_STRING([--enable-openmp],
+  [enable OpenMP multithreaded code])], enable_threads=$enableval, enable_threads=no)
+AM_CONDITIONAL(HAVE_THREADS, test "x$enable_threads" = "xyes" )
+
+# debug mode
+AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],
+  [compile with extra runtime checks for debugging])], enable_debug=$enableval,
+  enable_debug=no)
+if test "x$enable_debug" = "xyes"; then
+  AC_DEFINE(NFFT_DEBUG,1,[Define to enable extra debugging code.])
+fi
+
+# runtime time measurements
+AC_ARG_ENABLE(measure-time, [AC_HELP_STRING([--enable-measure-time],
+  [measure time during execution])], ok=$enableval, ok=no)
+if test "x$ok" = "xyes"; then
+  AC_DEFINE(MEASURE_TIME,1,[Define to enable runtime time measurements.])
+fi
+
+# runtime time measurements for FFTW part
+AC_ARG_ENABLE(measure-time-fftw, [AC_HELP_STRING([--enable-measure-time-fftw],
+  [measure time of FFTW transforms during execution])], ok=$enableval, ok=no)
+if test "x$ok" = "xyes"; then
+  AC_DEFINE(MEASURE_TIME_FFTW,1,[Define to enable time measurements for FFTW]
+  [transforms.])
+fi
+
+AC_ARG_ENABLE(mips_zbus_timer, [AC_HELP_STRING([--enable-mips-zbus-timer],
+  [use MIPS ZBus cycle-counter])], have_mips_zbus_timer=$enableval, 
+  have_mips_zbus_timer=no)
+if test "$have_mips_zbus_timer" = "yes"; then
+  AC_DEFINE(HAVE_MIPS_ZBUS_TIMER,1,
+    [Define to enable use of MIPS ZBus cycle-counter.])
+fi
+
+# select window function
+AC_ARG_WITH(window, [AC_HELP_STRING([--with-window=ARG],[choose window function
+  (ARG can be one of: kaiserbessel (default), gaussian, bspline, sinc,
+  dirac)])],
+  window=$withval, window="kaiserbessel")
+
+AC_MSG_CHECKING([window function])
+case "$window" in
+  gaussian)
+    AC_DEFINE(GAUSSIAN,1,[Define to enable Gaussian window function.]);;
+  bspline)
+    AC_DEFINE(B_SPLINE,1,[Define to enable B-spline window function.]);;
+  sinc)
+    AC_DEFINE(SINC_POWER,1,[Define to enable sinc power window function.]);;
+  kaiserbessel)
+    AC_DEFINE(KAISER_BESSEL,1,[Define to enable Kaiser-Bessel window function.]);;
+  delta)
+    AC_DEFINE(B_SPLINE,1,[Define to enable Dirac delta window function.]);;
+  *)
+    AC_MSG_ERROR([Unknown window function "$window".]);;
+esac
+AC_MSG_RESULT([$window])
+
+################################################################################
+# compiler characteristis
+################################################################################
+
+# select programming language
+AC_LANG(C)
+
+# compiler vendor
+AX_COMPILER_VENDOR
+
+# check for C99 compliant mode (possibly with GNU extensions)
+AC_PROG_CC_C99
+
+# per-target flags
+AM_PROG_CC_C_O
+
+# enable "const" keyword
+AC_C_CONST
+
+# enable "restrict" keyword
+AC_C_RESTRICT
+
+# enable "inline" keyword
+AC_C_INLINE
+
+# reset CC variable (the C99 option is added back below)
+CC="$ac_save_CC"
+
+################################################################################
+# program checks
+################################################################################
+
+# C preprocessor
+AC_PROG_CPP_WERROR
+
+# assembler
+AM_PROG_AS
+
+# BSD-compatible install
+AC_PROG_INSTALL
+
+# whether ln -s works
+AC_PROG_LN_S
+
+################################################################################
+# 3rd party libraries
+################################################################################
+
+# Check for fftw3.
+AX_LIB_FFTW3
+
+if test "x$ax_lib_fftw3" = "xno"; then
+  AC_MSG_ERROR([You don't seem to have the FFTW 3 library installed. You can ]#
+     [download it from http://www.fftw.org. If you have installed FFTW 3, ]#
+     [make sure that this configure script can find it. See ./configure ]#
+     [--help for more information.])
+fi
+
+if  test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3_threads" = "xno"; then
+  AC_MSG_ERROR([You don't seem to have the threaded FFTW 3 library installed.])
+fi
+
+AX_OPENMP
+AM_CONDITIONAL(HAVE_OPENMP, test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xunknown" )
+AC_SUBST(OPENMP_CFLAGS)
+
+if  test "x$enable_threads" = "xyes" -a "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then
+  AC_MSG_ERROR([You don't seem to have a C compiler with OpenMP support installed which is required for threaded NFFT.])
+fi
+
+# Check for MATLAB.
+AX_PROG_MATLAB
+
+if test "x$matlab_threads" = "xyes" -a "x$enable_threads" != "xyes"; then
+  AC_MSG_ERROR([The NFFT Matlab interface with thread support requires the threaded NFFT to be built. Please re-run configure with \"--enable-openmp\".])
+fi
+
+AM_CONDITIONAL(HAVE_MATLAB, test "x$ax_prog_matlab" = "xyes" )
+AC_SUBST(matlab_CPPFLAGS)
+AC_SUBST(matlab_LIBS)
+AC_SUBST(matlab_LDFLAGS)
+AC_SUBST(matlab_mexext)
+
+################################################################################
+# compiler options
+################################################################################
+
+# Try to choose good compiler options.
+if test "x$ac_test_CFLAGS" != "xset"; then
+  saved_CPPFLAGS="$CPPFLAGS"
+  saved_LDFLAGS="$LDFLAGS"
+  saved_LIBS="$LIBS"
+  CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+  LIBS="$LIBS $fftw3_LIBS"
+  LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+  AX_CC_MAXOPT
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+  LIBS="$saved_LIBS"
+fi
+
+# override CFLAGS selection when debugging
+if test "x${enable_debug}" = "xyes"; then
+  CFLAGS="-g"
+#  if test "x$ax_cv_c_compiler_vendor" = "xapple"; then
+#    CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
+#  fi
+fi
+
+# add gcc warnings, in debug/maintainer mode only
+if test "x${enable_debug}" = "xyes" || test "x$USE_MAINTAINER_MODE" = "xyes"; 
+then
+  if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
+    CFLAGS="$CFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic"
+    CFLAGS="$CFLAGS -Wno-long-long -Wshadow -Wbad-function-cast -Wwrite-strings"
+    CFLAGS="$CFLAGS -Wstrict-prototypes -Wredundant-decls -Wnested-externs"
+    CFLAGS="$CFLAGS -Wundef -Wconversion -Wmissing-prototypes "
+    CFLAGS="$CFLAGS -Wmissing-declarations"
+  fi
+fi
+
+# option to accept C99
+CFLAGS="$CFLAGS $ac_cv_prog_cc_c99" 
+
+CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+
+# add Matlab CFLAGS
+if test "x$ax_prog_matlab" = "xyes"; then
+  CFLAGS="$CFLAGS $matlab_CFLAGS"
+fi
+
+################################################################################
+# check if mex.h can be included without undefinition of  
+################################################################################
+ax_prog_matlab_gcc_require_undef_stdc_utf_16=no
+if test "x$ax_prog_matlab" = "xyes"; then
+  AC_MSG_CHECKING([if inclusion of mex.h succeeds])
+  saved_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $matlab_CPPFLAGS"
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "mex.h"]],[[]])],[ax_prog_matlab_check_compile_mex_h=yes], [ax_prog_matlab_check_compile_mex_h=no])
+  AC_MSG_RESULT([$ax_prog_matlab_check_compile_mex_h])
+  if test "x$ax_prog_matlab_check_compile_mex_h" = "xno"; then
+    AC_MSG_CHECKING([if undefining __STDC_UTF_16__ solves this issue])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#undef __STDC_UTF_16__
+    #include "mex.h"]],[[]])],[ax_prog_matlab_gcc_require_undef_stdc_utf_16=yes], [])
+    AC_MSG_RESULT([$ax_prog_matlab_gcc_require_undef_stdc_utf_16])
+  fi
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+if test "x$ax_prog_matlab_gcc_require_undef_stdc_utf_16" =  "xyes"; then
+  AC_DEFINE([HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16],[1],[Define to 1 if compilation of Matlab interface only succeeds when macro __STDC_UTF_16__ not defined.])
+fi
+
+################################################################################
+# header files/data types/compiler characteristics
+################################################################################
+
+AC_CHECK_HEADERS([math.h stdio.h stdlib.h time.h  sys/time.h \
+  complex.h string.h float.h limits.h stdarg.h stddef.h sys/types.h stdint.h \
+  inttypes.h stdbool.h malloc.h c_asm.h intrinsics.h mach/mach_time.h])
+
+AC_HEADER_TIME
+
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE([long double],
+  [AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define to 1 if the compiler supports]
+  ['long double'])],[])
+AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t]
+  [is defined in <sys/time.h>])],,
+  [
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+  ])
+AC_CHECK_TYPES(uintptr_t, [], [AC_CHECK_SIZEOF(void *)], [$ac_includes_default
+#ifdef HAVE_STDINT_H
+#  include <stdint.h>
+#endif])
+
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(unsigned long)
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(unsigned long long)
+AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF(ptrdiff_t)
+AC_CHECK_SIZEOF(float)
+AC_CHECK_SIZEOF(double)
+AC_CHECK_SIZEOF(long double)
+
+# library functions
+AC_FUNC_ALLOCA
+AC_FUNC_STRTOD
+AC_FUNC_VPRINTF
+saved_LIBS=$LIBS
+AC_CHECK_LIB(m, sin)
+LIBS=$saved_LIBS
+
+AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time])
+
+AC_CHECK_FUNCS([memset posix_memalign memalign])
+AC_CHECK_FUNCS([_mm_malloc _mm_free sysctl])
+AC_CHECK_FUNCS([abort snprintf sqrt])
+AC_CHECK_FUNCS([sleep usleep nanosleep drand48 srand48])
+
+AC_CHECK_DECLS([memalign, posix_memalign])
+AC_CHECK_DECLS([sleep],[],[],[#include <unistd.h>])
+AC_CHECK_DECLS([nanosleep],[],[],[#include <time.h>])
+AC_CHECK_DECLS([drand48],[],[],[#include <stdlib.h>])
+AC_CHECK_DECLS([srand48],[],[],[#include <stdlib.h>])
+
+# Cray UNICOS _rtc() (real-time clock) intrinsic
+AC_MSG_CHECKING([for _rtc intrinsic])
+rtc_ok=yes
+AC_TRY_LINK([#ifdef HAVE_INTRINSICS_H
+#include <intrinsics.h>
+#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no])
+AC_MSG_RESULT($rtc_ok)
+
+AC_MSG_CHECKING([whether a cycle counter is available])
+save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$CPPFLAGS -I$srcdir/include"
+AC_TRY_CPP([#include "cycle.h"
+#ifndef HAVE_TICK_COUNTER
+#  error No cycle counter
+#endif], [ok=yes], [ok=no])
+AC_MSG_RESULT($ok)
+TICKS_PER_SECOND=1
+if test $ok = no; then
+  echo "***************************************************************"
+  echo "WARNING: No cycle counter found. Time measurements in NFFT will"
+  echo "         show incorrect results.                               "
+  echo "***************************************************************"
+else
+  AC_TRY_RUN([#include "cycle.h"
+#include <stdio.h>
+#if defined(HAVE_NANOSLEEP)
+#include <stdlib.h>
+static struct timespec ts = {1,0};
+#define SLEEP nanosleep(&ts, 0)
+#elif defined(HAVE_SLEEP)
+#include <unistd.h>
+#define SLEEP sleep(1)
+#elif defined(HAVE_USLEEP)
+#include <unistd.h>
+#define SLEEP usleep(1000)
+#else
+#error wtf!
+#endif
+int main(){
+ticks t0 = getticks();
+SLEEP;{
+  double tps = elapsed(getticks(),t0)/1.0;
+  FILE *f = fopen("ticks.tmp","w");
+  fprintf(f,"%.1f\n",tps);
+  fclose(f);}
+return 0;}],[read TICKS_PER_SECOND < ticks.tmp],[],[])
+    rm -f ticks.tmp
+  if test "$TICKS_PER_SECOND" = "1"; then
+    echo "***************************************************************"
+    echo "WARNING: Number of ticks per second could not be determined.   "
+    echo "         Time measurements in NFFT will be in arbitrary units  "
+    echo "         instead of seconds.                                   "
+    echo "***************************************************************"
+  fi
+fi
+
+CPPFLAGS=$save_CPPFLAGS
+AC_SUBST(TICKS_PER_SECOND)
+
+PRECISION=d
+if test "$PRECISION" = "l"; then
+AC_CHECK_FUNCS([copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csinl [...]
+AC_CHECK_DECLS([copysignl, nextafterl, nanl, ceill, floorl, nearbyintl, rintl, roundl, lrintl, lroundl, llrintl, llroundl, truncl, fmodl, remainderl, remquol, fdiml, fmaxl, fminl, fmal, fabsl, sqrtl, cbrtl, hypotl, expl, exp2l, expm1l, logl, log2l, log10l, log1pl, logbl, ilogbl, modfl, frexpl, ldexpl, scalbnl, scalblnl, powl, cosl, sinl, tanl, coshl, sinhl, tanhl, acosl, asinl, atanl, atan2l, acoshl, asinhl, atanhl, tgammal, lgammal, j0l, j1l, jnl, y0l, y1l, ynl, erfl, erfcl, creall, cim [...]
+  [#include <math.h> 
+#include <complex.h>])
+fi
+
+if test "$PRECISION" = "d"; then
+AC_CHECK_FUNCS([copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh])
+AC_CHECK_DECLS([copysign, nextafter, nan, ceil, floor, nearbyint, rint, round, lrint, lround, llrint, llround, trunc, fmod, remainder, remquo, fdim, fmax, fmin, fma, fabs, sqrt, cbrt, hypot, exp, exp2, expm1, log, log2, log10, log1p, logb, ilogb, modf, frexp, ldexp, scalbn, scalbln, pow, cos, sin, tan, cosh, sinh, tanh, acos, asin, atan, atan2, acosh, asinh, atanh, tgamma, lgamma, j0, j1, jn, y0, y1, yn, erf, erfc, creal, cimag, cabs, carg, conj, cproj, csqrt, cexp, clog, cpow, csin, cco [...]
+  [#include <math.h>
+#include <complex.h>])
+fi
+
+if test "$PRECISION" = "s"; then
+AC_CHECK_FUNCS([copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf cco [...]
+AC_CHECK_DECLS([copysignf, nextafterf, nanf, ceilf, floorf, nearbyintf, rintf, roundf, lrintf, lroundf, llrintf, llroundf, truncf, fmodf, remainderf, remquof, fdimf, fmaxf, fminf, fmaf, fabsf, sqrtf, cbrtf, hypotf, expf, exp2f, expm1f, logf, log2f, log10f, log1pf, logbf, ilogbf, modff, frexpf, ldexpf, scalbnf, scalblnf, powf, cosf, sinf, tanf, coshf, sinhf, tanhf, acosf, asinf, atanf, atan2f, acoshf, asinhf, atanhf, tgammaf, lgammaf, j0f, j1f, jnf, y0f, y1f, ynf, erff, erfcf, crealf, cim [...]
+  [#include <math.h> 
+#include <complex.h>])
+fi
+
+# The output files to be generated
+AC_CONFIG_FILES(Makefile \
+                nfft3.pc \
+                doxygen/doxygen.Doxyfile \
+                include/Makefile \
+                include/nfft3conf.h \
+                include/ticks.h \
+                3rdparty/Makefile \
+                3rdparty/cstripack/Makefile \
+                util/Makefile \
+                kernel/Makefile \
+                kernel/fpt/Makefile \
+                kernel/mri/Makefile \
+                kernel/nfct/Makefile \
+                kernel/nfft/Makefile \
+                kernel/nfsft/Makefile \
+                kernel/nfsoft/Makefile \
+                kernel/nfst/Makefile \
+                kernel/nnfft/Makefile \
+                kernel/nsfft/Makefile \
+                kernel/solver/Makefile \
+                kernel/util/Makefile \
+                tests/Makefile \
+                examples/Makefile \
+                examples/fpt/Makefile \
+                examples/mri/Makefile \
+                examples/nfct/Makefile \
+                examples/nfft/Makefile \
+                examples/nfsft/Makefile \
+                examples/nfsoft/Makefile \
+                examples/nfst/Makefile \
+                examples/nnfft/Makefile \
+                examples/nsfft/Makefile \
+                examples/solver/Makefile \
+                applications/Makefile \
+                applications/fastgauss/Makefile \
+                applications/fastsum/Makefile \
+                applications/fastsumS2/Makefile \
+                applications/quadratureS2/Makefile \
+                applications/mri/Makefile \
+                applications/mri/mri2d/Makefile \
+                applications/mri/mri3d/Makefile \
+                applications/polarFFT/Makefile \
+                applications/radon/Makefile \
+                applications/iterS2/Makefile
+                matlab/Makefile \
+                matlab/nfsft/Makefile \
+                matlab/nfft/Makefile \
+                matlab/nfsft/@f_hat/Makefile \
+                doxygen/Makefile \
+                support/Makefile)
+
+AC_OUTPUT
diff --git a/doc/api/html/accuracy_8c_source.html b/doc/api/html/accuracy_8c_source.html
new file mode 100644
index 0000000..287bfda
--- /dev/null
+++ b/doc/api/html/accuracy_8c_source.html
@@ -0,0 +1,148 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - accuracy.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">accuracy.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: accuracy.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keywordtype">void</span> accuracy(<span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> m,t;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">double</span> _Complex *slow;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> N[d],n[d];</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">int</span> M_total,N_total;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   M_total=10000;N_total=1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   slow=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     {</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>       N[t]=(1<<(12/d));</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>       n[t]=2*N[t];</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>       N_total*=N[t];</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     }</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordflow">for</span>(m=0; m<10; m++)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>       nnfft_init_guru(&my_plan, d, N_total, M_total, N, n, m,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>           PRE_PSI| PRE_PHI_HUT|</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>           MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>       <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>, d*my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total numb [...]
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>       <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>, d*my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of [...]
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb99 [...]
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,slow);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       <a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>       printf(<span class="stringliteral">"%e, %e\n"</span>,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>        X(error_l_infty_complex)(slow, my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, M_total),</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>        X(error_l_infty_1_complex)(slow, my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, M_total, my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>              my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordflow">for</span>(d=1; d<4; d++)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     accuracy(d);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/annotated.html b/doc/api/html/annotated.html
new file mode 100644
index 0000000..9e54f4d
--- /dev/null
+++ b/doc/api/html/annotated.html
@@ -0,0 +1,109 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Structures
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfastsum__plan__.html" target="_self">fastsum_plan_</a></td><td class="desc">Plan for fast summation algorithm</td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfgt__plan.html" target="_self">fgt_plan</a></td><td class="desc">Structure for the Gauss transform</td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfpt__data__.html" target="_self">fpt_data_</a></td><td class="desc">Holds data for a single cascade summation</td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfpt__set__s__.html" target="_self">fpt_set_s_</a></td><td class="desc">Holds data for a set of cascade summations</td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfpt__step__.html" target="_self">fpt_step_</a></td><td class="desc">Holds data for a single multiplication step in the cascade summation</td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structimri__inh__2d1d__adjoint__plan.html" target="_self">imri_inh_2d1d_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structimri__inh__3d__adjoint__plan.html" target="_self">imri_inh_3d_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfct__adjoint__plan.html" target="_self">infct_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfft__adjoint__plan.html" target="_self">infft_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfsft__adjoint__plan.html" target="_self">infsft_adjoint_plan</a></td><td class="desc">TODO: different solvers</td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfst__adjoint__plan.html" target="_self">infst_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinnfft__adjoint__plan.html" target="_self">innfft_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmri__inh__2d1d__plan.html" target="_self">mri_inh_2d1d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmri__inh__3d__plan.html" target="_self">mri_inh_3d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmrif__inh__2d1d__plan.html" target="_self">mrif_inh_2d1d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmrif__inh__3d__plan.html" target="_self">mrif_inh_3d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmril__inh__2d1d__plan.html" target="_self">mril_inh_2d1d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmril__inh__3d__plan.html" target="_self">mril_inh_3d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfct__plan.html" target="_self">nfct_plan</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfctf__plan.html" target="_self">nfctf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfctl__plan.html" target="_self">nfctl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfft__mv__plan__complex.html" target="_self">nfft_mv_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfft__mv__plan__double.html" target="_self">nfft_mv_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfft__plan.html" target="_self">nfft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftf__mv__plan__complex.html" target="_self">nfftf_mv_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftf__mv__plan__double.html" target="_self">nfftf_mv_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftf__plan.html" target="_self">nfftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftl__mv__plan__complex.html" target="_self">nfftl_mv_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftl__mv__plan__double.html" target="_self">nfftl_mv_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftl__plan.html" target="_self">nfftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsft__plan.html" target="_self">nfsft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsft__wisdom.html" target="_self">nfsft_wisdom</a></td><td class="desc">Wisdom structure</td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsftf__plan.html" target="_self">nfsftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsftl__plan.html" target="_self">nfsftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsoft__plan__.html" target="_self">nfsoft_plan_</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsoftf__plan__.html" target="_self">nfsoftf_plan_</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsoftl__plan__.html" target="_self">nfsoftl_plan_</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfst__plan.html" target="_self">nfst_plan</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfstf__plan.html" target="_self">nfstf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfstl__plan.html" target="_self">nfstl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnnfft__plan.html" target="_self">nnfft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnnfftf__plan.html" target="_self">nnfftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnnfftl__plan.html" target="_self">nnfftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnsfft__plan.html" target="_self">nsfft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnsfftf__plan.html" target="_self">nsfftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnsfftl__plan.html" target="_self">nsfftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__param.html" target="_self">s_param</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__result.html" target="_self">s_result</a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__resval.html" target="_self">s_resval</a></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__testset.html" target="_self">s_testset</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolver__plan__complex.html" target="_self">solver_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolver__plan__double.html" target="_self">solver_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverf__plan__complex.html" target="_self">solverf_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverf__plan__double.html" target="_self">solverf_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverl__plan__complex.html" target="_self">solverl_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverl__plan__double.html" target="_self">solverl_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtaylor__plan.html" target="_self">taylor_plan</a></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structwindow__funct__plan__.html" target="_self">window_funct_plan_</a></td><td class="desc">Window_funct_plan is a plan to use the window functions independent of the nfft</td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2doxygen_8c_source.html b/doc/api/html/applications_2doxygen_8c_source.html
new file mode 100644
index 0000000..ae90e09
--- /dev/null
+++ b/doc/api/html/applications_2doxygen_8c_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/doxygen.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2fastsumS2_2doxygen_8h_source.html b/doc/api/html/applications_2fastsumS2_2doxygen_8h_source.html
new file mode 100644
index 0000000..d60ce07
--- /dev/null
+++ b/doc/api/html/applications_2fastsumS2_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/fastsumS2/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2iterS2_2doxygen_8h_source.html b/doc/api/html/applications_2iterS2_2doxygen_8h_source.html
new file mode 100644
index 0000000..40dcda8
--- /dev/null
+++ b/doc/api/html/applications_2iterS2_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/iterS2/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2mri_2doxygen_8c_source.html b/doc/api/html/applications_2mri_2doxygen_8c_source.html
new file mode 100644
index 0000000..61a8f60
--- /dev/null
+++ b/doc/api/html/applications_2mri_2doxygen_8c_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/mri/doxygen.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2mri_2mri2d_2doxygen_8h_source.html b/doc/api/html/applications_2mri_2mri2d_2doxygen_8h_source.html
new file mode 100644
index 0000000..c654fcd
--- /dev/null
+++ b/doc/api/html/applications_2mri_2mri2d_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/mri/mri2d/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2mri_2mri3d_2doxygen_8h_source.html b/doc/api/html/applications_2mri_2mri3d_2doxygen_8h_source.html
new file mode 100644
index 0000000..faf1155
--- /dev/null
+++ b/doc/api/html/applications_2mri_2mri3d_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/mri/mri3d/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2polarFFT_2doxygen_8h_source.html b/doc/api/html/applications_2polarFFT_2doxygen_8h_source.html
new file mode 100644
index 0000000..eb9348a
--- /dev/null
+++ b/doc/api/html/applications_2polarFFT_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/polarFFT/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/applications_2quadratureS2_2doxygen_8h_source.html b/doc/api/html/applications_2quadratureS2_2doxygen_8h_source.html
new file mode 100644
index 0000000..5f9a8fe
--- /dev/null
+++ b/doc/api/html/applications_2quadratureS2_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications/quadratureS2/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/bc_s.png b/doc/api/html/bc_s.png
new file mode 100644
index 0000000..25e3beb
Binary files /dev/null and b/doc/api/html/bc_s.png differ
diff --git a/doc/api/html/bdwn.png b/doc/api/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
Binary files /dev/null and b/doc/api/html/bdwn.png differ
diff --git a/doc/api/html/bessel__i0_8c_source.html b/doc/api/html/bessel__i0_8c_source.html
new file mode 100644
index 0000000..d809260
--- /dev/null
+++ b/doc/api/html/bessel__i0_8c_source.html
@@ -0,0 +1,368 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - bessel_i0.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">bessel_i0.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor"></span><span class="preprocessor">  #if LDBL_MANT_DIG > 64</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span>    <span class="comment">/* long double 128 bit wide */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>     <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>     {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>         K(1.00715709113717408460589579223209941204261347125985390244049122),</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>         K(0.244951997023176876020320575838917179801959212259109588711443322),</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>         K(0.007157677421552158878119583351756319398653762265084335703499437),</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>         K(0.000088638803372684623765617528646130117285577351082745565226135),</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>         K(5.86290506716174293160891590037213629006472953235560773267e-7),</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>         K(2.345957469650316879673588315314269880856753475545514611e-9),</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>         K(6.128655873200031753345017339110506400750029700912053e-12),</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>         K(1.0986892011606471142197070904902679807307454250063e-14),</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>         K(1.3971139352985872209413265761909675621623302845e-17),</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>         K(1.2871864763402201040551492995178709443354555e-20),</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>         K(8.691006015934819586402366491436791599814e-24),</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>         K(4.309390047550403478410330783891146603e-27),</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>         K(1.555612957227921944637472907134242e-30),</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>         K(3.9925388022711127965090640127e-34),</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>         K(6.9368410036374068977799409e-38),</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>         K(7.357454531748581565018e-42),</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>         K(3.62204101214442072e-46),</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     };</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>         K(1.000007070784273109528051454385187718969110645914059499666326971665),</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>         K(-0.005313926453449002844879821442805584438144938596471790433918964154),</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>         K(7.070788418542362565462155969863941136682888242514039780835548e-6),</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         K(-6.26540971437695808708857953483635930152829451235344028056e-9),</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         K(4.145433773149898726789014352388133793941127788810021957e-12),</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         K(-2.175603200497645955857316018087216481968512641548262e-15),</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         K(9.38635995876117135738708302122439402494096616172e-19),</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         K(-3.40237206590514988600833435986797066144532635e-22),</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         K(1.04920116497922307284730776882365699575587e-25),</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         K(-2.7669765371483918815184949580784634161e-29),</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         K(6.231564149372584873279011515844227e-33),</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         K(-1.188050982913851622946881814029e-36),</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         K(1.88293159106694034780937099e-40),</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         K(-2.4019827304263718078055e-44),</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         K(2.329008315410200325e-48),</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         K(-1.5351885198203e-52),</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         K(5.185989964e-57),</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     };</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       K( 131.0667020533290798466779416062094395070734202211890460026693857),</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       K(-245.6303545941878773983069709370348347580041325639555236454969282),</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       K( 204.5101554148308448423458719550952945685069457114308003995567211),</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       K(-150.5327320302921153754033870344894598759293143264072490756636477),</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       K( 98.7912567249134681293252237328232822188103014960829409778733265),</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       K(-57.7019241687318590480852440271548151666166507997357208465833492),</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>       K( 30.1081598594932287475081756049550869990287890532877175670317803),</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       K(-14.0088712491952531569334147267018927351724433165829632848926311),</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>       K( 5.8111909743388254524987383393719023598144356156326152933831237),</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>       K(-2.1414136626793476610653760169160704073350780611789294609123711),</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>       K( 0.698259559703142895902111022926235616592885506170181809796723),</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       K(-0.2001189347807367129846000381714457873845590394096920427488356),</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       K( 0.049988621846192684047867347253361546337456980171441178625268),</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       K(-0.0107553807128048320349112565182564637746370430259714241685807),</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       K( 0.0019628478791093008488874963820323167136472914702684286586238),</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       K(-0.0002975064821201439959012839810796951490827490578144599267114),</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       K( 0.0000363948822068787975159479880539390140326476204059270500102),</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       K(-3.4500354506312803346122587812035952285744626406680126004e-6),</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>       K( 2.389194163273735466736165111640837640682648262451843124e-7),</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       K(-1.10522228579658847710719851107420853059835206797979003e-8),</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>       K( 2.998585735858447897961231663140456464729911623332484e-10),</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>       K(-3.9833617558882606404645795329229040634928477778665e-12),</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       K( 1.92588438006565847602499920031655017544553574078e-14),</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       K(-1.53988141966712757209882685942469734803820881e-17)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     };</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       K(328.4489907350967829456654595549647170421869780143590268003242948),</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       K(-615.575319575198219705670766725559477112082560070865403723416427),</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       K(512.563661235514015228169012911053008163272899480360140632585558),</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       K(-377.3415411557897134242242685951784724031156711312221525972796826),</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       K(247.6887960380354072297631204916926385047383091206925653242453925),</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       K(-144.7079367047916629699737294050207521413589574809430211064537016),</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       K(75.5300501439366128901130531145623549019791219037305096822646727),</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>       K(-35.1562871183824787711155827433330019401972267325168728838283815),</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       K(14.5900995053625141158588399870084373879991873744753473985888771),</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       K(-5.3793167684795558315535956122846115342243771791771104555817078),</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       K(1.7551860916884001665224751521627837644140913167505738803593836),</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       K(-0.5034275191915128601243198185547065251560284487106213345738464),</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       K(0.1258761177781805904401665597080296597844219207555140252667602),</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>       K(-0.0271165711067811527517031577204913417520417117202287079370524),</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       K(0.0049566968097755025323253093106955508273120444565853663949773),</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>       K(-0.0007529042621964042565348473109633952383792675486716081916002),</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       K(0.0000923845012025941529926888028246088283227759969619552077927),</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>       K(-8.7971061636613823628316954758674029940675792754742342069e-6),</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       K(6.136252042100256280345626781919643641626278378156829218e-7),</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       K(-2.87514497545628209951433938237642236070094379906239019e-8),</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       K(7.99982739755782677965258184972152681716223485333226e-10),</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       K(-1.12250050360331111260828032356887810736651792918878e-11),</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       K(6.221827386743849038481605158298006999161167883e-14),</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>       K(-8.0950402455773560717067392049638116407074069e-17)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     };</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">  #elif LDBL_MANT_DIG == 64</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor"></span>    <span class="comment">/* long double 96 bit wide */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         K(1.00696388290874250231638626673686646317801154370159972703168538),</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         K(0.243352848727738955738908687369450214577920342918851509272408866),</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         K(0.006964401160721188186398281247079919082283450941469460164590432),</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         K(0.000083047334117897959145500056901191736030823531931380263686302),</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         K(5.18256420384764810882467760619532575731801821889985626099e-7),</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         K(1.90790611016475818883461118145629029943434891680660527e-9),</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         K(4.44170587990105074420754325358582895345307949815573e-12),</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         K(6.805150196466153819995090798791966304827558189423e-15),</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         K(6.985104315031938858779570788468047860794936128e-18),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         K(4.785507068734939741097928056648844894386614e-21),</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         K(2.117077490896605677726199140622837572025e-24),</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         K(5.52919580174986488729896702518475621e-28),</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         K(6.5666588969169003434516942087381e-32),</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     };</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         K(1.000011863675914860400478598182318948452642744176732473923183795358),</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         K(-0.006896324225185339751945118908659032102601115341265224641280055928),</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         K(0.00001186368725103095674191039208189536570056102297912907572890034),</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         K(-1.3496696876875206170114218872940978330152830864048922600366e-8),</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         K(1.1336174449932022007831556161183407392648142591512923821e-11),</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         K(-7.422841655569707018644701823047396523966712871897812e-15),</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>         K(3.893669273036094904159100761627937282479044304922e-18),</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>         K(-1.651720545895290413869725701665259282787265642e-21),</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         K(5.6323805635535562808481781647661895955232e-25),</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         K(-1.50728066570923164846664348266414336373e-28),</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         K(3.006044492319661074666639642233229e-32),</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         K(-4.010148023149017379419706572721e-36),</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         K(2.70282874465984817539266054e-40),</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     };</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       K( 1.30090423521760256476093919023146864017751590623897710895862681),</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       K(-1.981041925270972574120174940817336830170017871902975653312750388),</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       K( 0.956892580228917795561363651877698243164566364537052353014543669),</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       K(-0.295476285312266394050596510402082979039773201845265239542019439),</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       K( 0.056978837924988815165935230495950981635872574537538384147033652),</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       K(-0.006299149197554616295736173514236214970859775932020376086036399),</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       K( 0.000353716966863384475462973243411450895641022763240331882363443),</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       K(-8.707624424632528381900923003415938761710942641810978203625e-6),</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       K( 7.283705999222063845686558855093093825421931939071318202e-8),</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       K(-9.7967727386492889920273780071218382357131320542055799e-11)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     };</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       K( 3.257608431020108786259398271424889402309379351594793640349460063),</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       K(-4.96363276525502538609792324882976732173260916421950408693842731),</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       K( 2.400495835659089927333294199555080092801133193497330702140754591),</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       K(-0.742868968166381852162379299256973953894545292197384361382965225),</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       K( 0.143801810439830068463911726822151703498931831272162081681231077),</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       K(-0.016019224718850575023820322478614758671031103220377245057110662),</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       K( 0.000914623505897601721718970098041677534130323750396506936364887),</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       K(-0.000023411644633126949191317085153966622167096685843127825287574),</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       K( 2.17705048674331703171406080664526952334380771487046428339e-7),</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       K(-4.47580289731041130181939560179689655281441839562189718e-10)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     };</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor">  #else</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor"></span><span class="preprocessor">    #error Unsupported size of long double</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor"></span><span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor"></span>  <span class="comment">/* float */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       K(1.006634511033311726164163027592274220828216885723379609007274761),</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       K(0.240606487720090757394176928596156553834296465200311569457994763),</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       K(0.006634921274522227156198202198389031672287220144321235665461021),</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       K(0.000073749622820821337100502174723273851941734199062726870961819),</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       K(4.10243517822171814488230564074819973544765129449450710122e-7),</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       K(1.262110026222369902633819303536802438120823461060572684e-9),</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       K(2.218532296437410634454463125960648541194468552527652e-12),</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       K(2.141504045536019682125761418851096299425878119158e-15),</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       K(9.19584570350722374435337612379408707845677156e-19),</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   };</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       K(1.000022624782705275228334312456728477812835742762369533496905023937),</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       K(-0.009614857078745003693609489751018087358244444264456521971379273084),</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       K(0.000022624818652773047747424411495054891627754515915461183178099877),</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       K(-3.4080521639954323706277061786236961377055349443081338572762e-8),</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       K(3.5947512112800645225066705862453058797853924958888263259e-11),</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       K(-2.7149805873212658218594464017972758572144265290831215e-14),</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       K(1.4293388301569282795540255590126107486209476445158e-17),</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       K(-4.771887851505849942903948600229238419570937509e-21),</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>       K(7.68298982666756594543081799488936861257839e-25),</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   };</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     K( 0.400758393969643840397216812932361963736749407866811083462461),</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     K(-0.0312216150704950438088565774064329777860642477326179964345542),</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     K( 0.0001215451718646727844117193541329442989170354233955281424116)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   };</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     K( 1.00043733569136882353241680221279480297575523819814430369272934),</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     K(-0.0822433017391967535749382764476705160129315137731445852657631),</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     K( 0.00043733569136882353241680221279480297575523819814430369272934)</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   };</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor"></span>  <span class="comment">/* double */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       K(1.006897990143384859657820271920512961153421109156614230747188622),</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       K(0.242805341483041870658834102275462978674549112393424086979586278),</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       K(0.006898486035482686938510112687043665965094733332210445239567379),</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       K(0.000081165067173822070066416843139523709162208390998449005642346),</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       K(4.95896034564955471201271060753697747487292805350402943964e-7),</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       K(1.769262324717844587819564151110983803173733141412266849e-9),</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       K(3.936742942676484111899247866083681245613312522754135e-12),</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       K(5.65030097981781148787580946077568408874044779529e-15),</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       K(5.267856044117588097078633338366456262960465052e-18),</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       K(3.111192981528832405775039015470693622536939e-21),</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       K(1.071238669051606108411504195862449904664e-24),</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       K(1.66685455020362122704904175079692613e-28),</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   };</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       K(1.000013770640886533569435896302721489503868900260448440877422679934),</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       K(-0.007438195256024963574139196893944950727405523418354136393367554385),</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       K(0.000013770655915064256304772604385297068669909609091264440116789601),</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       K(-1.6794623118559896441239590667288215019925076196457659206142e-8),</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       K(1.50285363491992136130760477001818578470292828225498818e-11),</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       K(-1.0383232801211938342796582949062551517465351830706356e-14),</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       K(5.66233115275307483428203764087829782195312564006e-18),</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       K(-2.44062252162491829675666639093292109472275754e-21),</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       K(8.15441695513966815222186223740016719597617e-25),</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       K(-2.01117218503954384746303760121365911698e-28),</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       K(3.2919820158429806312377323449729691e-32),</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       K(-2.70343047912331415988664032397e-36),</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   };</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     K( 0.4305671332839579065931339658100499864903788418438938270811),</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     K(-0.2897224581554843285637983312103876003389911968369470222427),</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     K( 0.0299419330186508349765969995362253891383950029259740306077),</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     K(-0.0010756807437990349677633120240742396555192749710627626584),</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     K( 0.0000116485185631252780743187413946316104574410146692335443),</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     K(-1.89995137955806752293614125586568854200245376235433e-08)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   };</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     K(1.0762291019783101702628805159947862543863829764738274558421),</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     K(-0.7279167074883770739509279847502106137135422309409220238564),</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     K(0.0762629142282649564822465976300194596092279190843683614797),</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     K(-0.0028345107938479082322784040228834113914746923069059932628),</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     K(0.0000338122499547862193660816352332052228449426105409056376),</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     K(-8.28850093512263912295888947693700479250899073022595e-08)</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   };</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="keyword">static</span> <span class="keyword">const</span> INT N1 = <span class="keyword">sizeof</span>(P1)/<span class="keyword">sizeof</span>(P1[0]);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="keyword">static</span> <span class="keyword">const</span> INT M1 = <span class="keyword">sizeof</span>(Q1)/<span class="keyword">sizeof</span>(Q1[0]);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="keyword">static</span> <span class="keyword">const</span> INT N2 = <span class="keyword">sizeof</span>(P2)/<span class="keyword">sizeof</span>(P2[0]);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="keyword">static</span> <span class="keyword">const</span> INT M2 = <span class="keyword">sizeof</span>(Q2)/<span class="keyword">sizeof</span>(Q2[0]);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="keyword">static</span> <span class="keyword">inline</span> R evaluate_chebyshev(<span class="keyword">const</span> INT n, <span class="keyword">const</span> R *c, <span class="keyword">const</span> R x)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   R a = c[n-2], b = c[n-1], t;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   A(n >= 2);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">for</span> (j = n - 2; j > 0; j--)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     t = c[j-1] - b;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     b = a + K(2.0) * x * b;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     a = t;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordflow">return</span> a + x * b;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> R X(bessel_i0)(R x)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keywordflow">if</span> (x < 0)</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="comment">/* even function */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     x = -x;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="keywordflow">if</span> (x == K(0.0))</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordflow">if</span> (x <= K(15.0))</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="comment">/* x in (0, 15] */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keyword">const</span> R y = x * x;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">return</span> evaluate_chebyshev(N1, P1, y) / evaluate_chebyshev(M1, Q1, y);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="comment">/* x in (15, \infty) */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keyword">const</span> R y = (K(30.0) - x) / x;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordflow">return</span> (EXP(x) / SQRT(x)) * (evaluate_chebyshev(N2, P2, y) /</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       evaluate_chebyshev(M2, Q2, y));</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/classes.html b/doc/api/html/classes.html
new file mode 100644
index 0000000..ec08fce
--- /dev/null
+++ b/doc/api/html/classes.html
@@ -0,0 +1,74 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Structure Index
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_W">W</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  F  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structinnfft__adjoint__plan.html">innfft_adjoint_plan</a>   </td><td valign="top"><a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a>   </td><td valign="top"><a class="el" href="structnfst__plan.html">nfst_plan</a>   </td><td valign="top"><a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a>   </td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  M  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structnfft__plan.html">nfft_plan</a>   </td><td valign="top"><a class="el" href="structnfstf__plan.html">nfstf_plan</a>   </td><td valign="top"><a class="el" href="structsolver__plan__double.html">solver_plan_double</a>   </td></tr>
+<tr><td valign="top"><a class="el" href="structfastsum__plan__.html">fastsum_plan_</a>   </td><td valign="top"><a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a>   </td><td valign="top"><a class="el" href="structnfstl__plan.html">nfstl_plan</a>   </td><td valign="top"><a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a>   </td></tr>
+<tr><td valign="top"><a class="el" href="structfgt__plan.html">fgt_plan</a>   </td><td valign="top"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a>   </td><td valign="top"><a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a>   </td><td valign="top"><a class="el" href="structnnfft__plan.html">nnfft_plan</a>   </td><td valign="top"><a class="el" href="structsolverf__plan__doub [...]
+<tr><td valign="top"><a class="el" href="structfpt__data__.html">fpt_data_</a>   </td><td valign="top"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a>   </td><td valign="top"><a class="el" href="structnfftf__plan.html">nfftf_plan</a>   </td><td valign="top"><a class="el" href="structnnfftf__plan.html">nnfftf_plan</a>   </td><td valign="top"><a class="el" href="structsolverl__plan__complex.html">solverl_pla [...]
+<tr><td valign="top"><a class="el" href="structfpt__set__s__.html">fpt_set_s_</a>   </td><td valign="top"><a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a>   </td><td valign="top"><a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a>   </td><td valign="top"><a class="el" href="structnnfftl__plan.html">nnfftl_plan</a>   </td><td valign="top"><a class="el" href="structsolverl [...]
+<tr><td valign="top"><a class="el" href="structfpt__step__.html">fpt_step_</a>   </td><td valign="top"><a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a>   </td><td valign="top"><a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a>   </td><td valign="top"><a class="el" href="structnsfft__plan.html">nsfft_plan</a>   </td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table [...]
+</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  I  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a>   </td><td valign="top"><a class="el" href="structnfftl__plan.html">nfftl_plan</a>   </td><td valign="top"><a class="el" href="structnsfftf__plan.html">nsfftf_plan</a>   </td></tr>
+<tr><td valign="top"><a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a>   </td><td valign="top"><a class="el" href="structnfsft__plan.html">nfsft_plan</a>   </td><td valign="top"><a class="el" href="structnsfftl__plan.html">nsfftl_plan</a>   </td><td valign="top"><a class="el" href="structtaylor__plan.html">taylor_plan</a>   </td></tr>
+<tr><td valign="top"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html">imri_inh_2d1d_adjoint_plan</a>   </td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  N  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a>   </td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  S  </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  W  </div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="structimri__inh__3d__adjoint__plan.html">imri_inh_3d_adjoint_plan</a>   </td><td valign="top"><a class="el" href="structnfsftf__plan.html">nfsftf_plan</a>   </td></tr>
+<tr><td valign="top"><a class="el" href="structinfct__adjoint__plan.html">infct_adjoint_plan</a>   </td><td valign="top"><a class="el" href="structnfct__plan.html">nfct_plan</a>   </td><td valign="top"><a class="el" href="structnfsftl__plan.html">nfsftl_plan</a>   </td><td valign="top"><a class="el" href="structs__param.html">s_param</a>   </td><td valign="top"><a class="el" href="structwindow__funct__plan__.html">window_funct_p [...]
+<tr><td valign="top"><a class="el" href="structinfft__adjoint__plan.html">infft_adjoint_plan</a>   </td><td valign="top"><a class="el" href="structnfctf__plan.html">nfctf_plan</a>   </td><td valign="top"><a class="el" href="structnfsoft__plan__.html">nfsoft_plan_</a>   </td><td valign="top"><a class="el" href="structs__result.html">s_result</a>   </td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structinfsft__adjoint__plan.html">infsft_adjoint_plan</a>   </td><td valign="top"><a class="el" href="structnfctl__plan.html">nfctl_plan</a>   </td><td valign="top"><a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan_</a>   </td><td valign="top"><a class="el" href="structs__resval.html">s_resval</a>   </td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structinfst__adjoint__plan.html">infst_adjoint_plan</a>   </td><td valign="top"><a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>   </td><td valign="top"><a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan_</a>   </td><td valign="top"><a class="el" href="structs__testset.html">s_testset</a>   </td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_W">W</a></div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/closed.png b/doc/api/html/closed.png
new file mode 100644
index 0000000..98cc2c9
Binary files /dev/null and b/doc/api/html/closed.png differ
diff --git a/doc/api/html/config_8h_source.html b/doc/api/html/config_8h_source.html
new file mode 100644
index 0000000..660474d
--- /dev/null
+++ b/doc/api/html/config_8h_source.html
@@ -0,0 +1,2118 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - config.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* include/config.h.  Generated from config.h.in by configure.  */</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">/* include/config.h.in.  Generated from configure.ac by autoheader.  */</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/* Define to enable Dirac delta window function. */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">/* #undef B_SPLINE */</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> </div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment">/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment">   systems. This function is required for `alloca.c' support on those systems.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment">/* #undef CRAY_STACKSEG_END */</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment">/* Define to 1 if using `alloca.c'. */</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment">/* #undef C_ALLOCA */</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment">/* Define to enable Gaussian window function. */</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment">/* #undef GAUSSIAN */</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment">/* Define to 1 if you have the `abort' function. */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#define HAVE_ABORT 1</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/* Define to 1 if you have the `acos' function. */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/* #undef HAVE_ACOS */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">/* Define to 1 if you have the `acosf' function. */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">/* #undef HAVE_ACOSF */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/* Define to 1 if you have the `acosh' function. */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* #undef HAVE_ACOSH */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/* Define to 1 if you have the `acoshf' function. */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/* #undef HAVE_ACOSHF */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/* Define to 1 if you have the `acoshl' function. */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/* #undef HAVE_ACOSHL */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* Define to 1 if you have the `acosl' function. */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* #undef HAVE_ACOSL */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* Define to 1 if you have `alloca', as a function or macro. */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#define HAVE_ALLOCA 1</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#define HAVE_ALLOCA_H 1</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/* Define to 1 if you have the `asin' function. */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* #undef HAVE_ASIN */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* Define to 1 if you have the `asinf' function. */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* #undef HAVE_ASINF */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* Define to 1 if you have the `asinh' function. */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* #undef HAVE_ASINH */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/* Define to 1 if you have the `asinhf' function. */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/* #undef HAVE_ASINHF */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/* Define to 1 if you have the `asinhl' function. */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/* #undef HAVE_ASINHL */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/* Define to 1 if you have the `asinl' function. */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/* #undef HAVE_ASINL */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/* Define to 1 if you have the `atan' function. */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/* #undef HAVE_ATAN */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/* Define to 1 if you have the `atan2' function. */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/* #undef HAVE_ATAN2 */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/* Define to 1 if you have the `atan2f' function. */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/* #undef HAVE_ATAN2F */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/* Define to 1 if you have the `atan2l' function. */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/* #undef HAVE_ATAN2L */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/* Define to 1 if you have the `atanf' function. */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/* #undef HAVE_ATANF */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/* Define to 1 if you have the `atanh' function. */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/* #undef HAVE_ATANH */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/* Define to 1 if you have the `atanhf' function. */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/* #undef HAVE_ATANHF */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/* Define to 1 if you have the `atanhl' function. */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/* #undef HAVE_ATANHL */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/* Define to 1 if you have the `atanl' function. */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/* #undef HAVE_ATANL */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/* Define to 1 if you have the `cabs' function. */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/* #undef HAVE_CABS */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">/* Define to 1 if you have the `cabsf' function. */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">/* #undef HAVE_CABSF */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/* Define to 1 if you have the `cabsl' function. */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">/* #undef HAVE_CABSL */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/* Define to 1 if you have the `cacos' function. */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">/* #undef HAVE_CACOS */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">/* Define to 1 if you have the `cacosf' function. */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/* #undef HAVE_CACOSF */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">/* Define to 1 if you have the `cacosh' function. */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/* #undef HAVE_CACOSH */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/* Define to 1 if you have the `cacoshf' function. */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">/* #undef HAVE_CACOSHF */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/* Define to 1 if you have the `cacoshl' function. */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/* #undef HAVE_CACOSHL */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">/* Define to 1 if you have the `cacosl' function. */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/* #undef HAVE_CACOSL */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/* Define to 1 if you have the `carg' function. */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/* #undef HAVE_CARG */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">/* Define to 1 if you have the `cargf' function. */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">/* #undef HAVE_CARGF */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">/* Define to 1 if you have the `cargl' function. */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/* #undef HAVE_CARGL */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">/* Define to 1 if you have the `casin' function. */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/* #undef HAVE_CASIN */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/* Define to 1 if you have the `casinf' function. */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/* #undef HAVE_CASINF */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">/* Define to 1 if you have the `casinh' function. */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/* #undef HAVE_CASINH */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/* Define to 1 if you have the `casinhf' function. */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">/* #undef HAVE_CASINHF */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">/* Define to 1 if you have the `casinhl' function. */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/* #undef HAVE_CASINHL */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">/* Define to 1 if you have the `casinl' function. */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/* #undef HAVE_CASINL */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">/* Define to 1 if you have the `catan' function. */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">/* #undef HAVE_CATAN */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/* Define to 1 if you have the `catanf' function. */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/* #undef HAVE_CATANF */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/* Define to 1 if you have the `catanh' function. */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">/* #undef HAVE_CATANH */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">/* Define to 1 if you have the `catanhf' function. */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">/* #undef HAVE_CATANHF */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">/* Define to 1 if you have the `catanhl' function. */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/* #undef HAVE_CATANHL */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">/* Define to 1 if you have the `catanl' function. */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">/* #undef HAVE_CATANL */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">/* Define to 1 if you have the `cbrt' function. */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/* #undef HAVE_CBRT */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">/* Define to 1 if you have the `cbrtf' function. */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">/* #undef HAVE_CBRTF */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/* Define to 1 if you have the `cbrtl' function. */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">/* #undef HAVE_CBRTL */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">/* Define to 1 if you have the `ccos' function. */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/* #undef HAVE_CCOS */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/* Define to 1 if you have the `ccosf' function. */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">/* #undef HAVE_CCOSF */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">/* Define to 1 if you have the `ccosh' function. */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/* #undef HAVE_CCOSH */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/* Define to 1 if you have the `ccoshf' function. */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">/* #undef HAVE_CCOSHF */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">/* Define to 1 if you have the `ccoshl' function. */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">/* #undef HAVE_CCOSHL */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">/* Define to 1 if you have the `ccosl' function. */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/* #undef HAVE_CCOSL */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">/* Define to 1 if you have the `ceil' function. */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/* #undef HAVE_CEIL */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">/* Define to 1 if you have the `ceilf' function. */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">/* #undef HAVE_CEILF */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">/* Define to 1 if you have the `ceill' function. */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">/* #undef HAVE_CEILL */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">/* Define to 1 if you have the `cexp' function. */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">/* #undef HAVE_CEXP */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">/* Define to 1 if you have the `cexpf' function. */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">/* #undef HAVE_CEXPF */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">/* Define to 1 if you have the `cexpl' function. */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">/* #undef HAVE_CEXPL */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">/* Define to 1 if you have the `cimag' function. */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">/* #undef HAVE_CIMAG */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">/* Define to 1 if you have the `cimagf' function. */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">/* #undef HAVE_CIMAGF */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">/* Define to 1 if you have the `cimagl' function. */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">/* #undef HAVE_CIMAGL */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">/* Define to 1 if you have the `clock_gettime' function. */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">/* #undef HAVE_CLOCK_GETTIME */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">/* Define to 1 if you have the `clog' function. */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/* #undef HAVE_CLOG */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/* Define to 1 if you have the `clogf' function. */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/* #undef HAVE_CLOGF */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">/* Define to 1 if you have the `clogl' function. */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">/* #undef HAVE_CLOGL */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">/* Define to 1 if you have the <complex.h> header file. */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">#define HAVE_COMPLEX_H 1</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">/* Define to 1 if you have the `conj' function. */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">/* #undef HAVE_CONJ */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">/* Define to 1 if you have the `conjf' function. */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">/* #undef HAVE_CONJF */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">/* Define to 1 if you have the `conjl' function. */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment">/* #undef HAVE_CONJL */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/* Define to 1 if you have the `copysign' function. */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor">#define HAVE_COPYSIGN 1</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment">/* Define to 1 if you have the `copysignf' function. */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">/* #undef HAVE_COPYSIGNF */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">/* Define to 1 if you have the `copysignl' function. */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">/* #undef HAVE_COPYSIGNL */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">/* Define to 1 if you have the `cos' function. */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">/* #undef HAVE_COS */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">/* Define to 1 if you have the `cosf' function. */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">/* #undef HAVE_COSF */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">/* Define to 1 if you have the `cosh' function. */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment">/* #undef HAVE_COSH */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">/* Define to 1 if you have the `coshf' function. */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment">/* #undef HAVE_COSHF */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">/* Define to 1 if you have the `coshl' function. */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">/* #undef HAVE_COSHL */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">/* Define to 1 if you have the `cosl' function. */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">/* #undef HAVE_COSL */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/* Define to 1 if you have the `cpow' function. */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">/* #undef HAVE_CPOW */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">/* Define to 1 if you have the `cpowf' function. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/* #undef HAVE_CPOWF */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">/* Define to 1 if you have the `cpowl' function. */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">/* #undef HAVE_CPOWL */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/* Define to 1 if you have the `cproj' function. */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">/* #undef HAVE_CPROJ */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">/* Define to 1 if you have the `cprojf' function. */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">/* #undef HAVE_CPROJF */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">/* Define to 1 if you have the `cprojl' function. */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">/* #undef HAVE_CPROJL */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">/* Define to 1 if you have the `creal' function. */</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">/* #undef HAVE_CREAL */</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">/* Define to 1 if you have the `crealf' function. */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">/* #undef HAVE_CREALF */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/* Define to 1 if you have the `creall' function. */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">/* #undef HAVE_CREALL */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">/* Define to 1 if you have the `csin' function. */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">/* #undef HAVE_CSIN */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">/* Define to 1 if you have the `csinf' function. */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">/* #undef HAVE_CSINF */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">/* Define to 1 if you have the `csinh' function. */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">/* #undef HAVE_CSINH */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">/* Define to 1 if you have the `csinhf' function. */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">/* #undef HAVE_CSINHF */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="comment">/* Define to 1 if you have the `csinhl' function. */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="comment">/* #undef HAVE_CSINHL */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">/* Define to 1 if you have the `csinl' function. */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">/* #undef HAVE_CSINL */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment">/* Define to 1 if you have the `csqrt' function. */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">/* #undef HAVE_CSQRT */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment">/* Define to 1 if you have the `csqrtf' function. */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">/* #undef HAVE_CSQRTF */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">/* Define to 1 if you have the `csqrtl' function. */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">/* #undef HAVE_CSQRTL */</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">/* Define to 1 if you have the `ctan' function. */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">/* #undef HAVE_CTAN */</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="comment">/* Define to 1 if you have the `ctanf' function. */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">/* #undef HAVE_CTANF */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">/* Define to 1 if you have the `ctanh' function. */</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">/* #undef HAVE_CTANH */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">/* Define to 1 if you have the `ctanhf' function. */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">/* #undef HAVE_CTANHF */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">/* Define to 1 if you have the `ctanhl' function. */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">/* #undef HAVE_CTANHL */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">/* Define to 1 if you have the `ctanl' function. */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">/* #undef HAVE_CTANL */</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">/* Define to 1 if you have the <c_asm.h> header file. */</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">/* #undef HAVE_C_ASM_H */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">/* Define to 1 if you have the declaration of `acos', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="preprocessor">#define HAVE_DECL_ACOS 1</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">/* Define to 1 if you have the declaration of `acosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">/* #undef HAVE_DECL_ACOSF */</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">/* Define to 1 if you have the declaration of `acosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="preprocessor">#define HAVE_DECL_ACOSH 1</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">/* Define to 1 if you have the declaration of `acoshf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">/* #undef HAVE_DECL_ACOSHF */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">/* Define to 1 if you have the declaration of `acoshl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">/* #undef HAVE_DECL_ACOSHL */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">/* Define to 1 if you have the declaration of `acosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">/* #undef HAVE_DECL_ACOSL */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">/* Define to 1 if you have the declaration of `asin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="preprocessor">#define HAVE_DECL_ASIN 1</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">/* Define to 1 if you have the declaration of `asinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">/* #undef HAVE_DECL_ASINF */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">/* Define to 1 if you have the declaration of `asinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor">#define HAVE_DECL_ASINH 1</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">/* Define to 1 if you have the declaration of `asinhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">/* #undef HAVE_DECL_ASINHF */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">/* Define to 1 if you have the declaration of `asinhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="comment">/* #undef HAVE_DECL_ASINHL */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">/* Define to 1 if you have the declaration of `asinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">/* #undef HAVE_DECL_ASINL */</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">/* Define to 1 if you have the declaration of `atan', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="preprocessor">#define HAVE_DECL_ATAN 1</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="comment">/* Define to 1 if you have the declaration of `atan2', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="preprocessor">#define HAVE_DECL_ATAN2 1</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">/* Define to 1 if you have the declaration of `atan2f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">/* #undef HAVE_DECL_ATAN2F */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">/* Define to 1 if you have the declaration of `atan2l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">/* #undef HAVE_DECL_ATAN2L */</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="comment">/* Define to 1 if you have the declaration of `atanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">/* #undef HAVE_DECL_ATANF */</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">/* Define to 1 if you have the declaration of `atanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor">#define HAVE_DECL_ATANH 1</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="comment">/* Define to 1 if you have the declaration of `atanhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="comment">/* #undef HAVE_DECL_ATANHF */</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="comment">/* Define to 1 if you have the declaration of `atanhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="comment">/* #undef HAVE_DECL_ATANHL */</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="comment">/* Define to 1 if you have the declaration of `atanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="comment">/* #undef HAVE_DECL_ATANL */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="comment">/* Define to 1 if you have the declaration of `cabs', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="preprocessor">#define HAVE_DECL_CABS 1</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="comment">/* Define to 1 if you have the declaration of `cabsl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">/* #undef HAVE_DECL_CABSL */</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment">/* Define to 1 if you have the declaration of `cacos', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="preprocessor">#define HAVE_DECL_CACOS 1</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="comment">/* Define to 1 if you have the declaration of `cacosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">/* #undef HAVE_DECL_CACOSF */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="comment">/* Define to 1 if you have the declaration of `cacosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="preprocessor">#define HAVE_DECL_CACOSH 1</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="comment">/* Define to 1 if you have the declaration of `cacoshf', and to 0 if you</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="comment">/* #undef HAVE_DECL_CACOSHF */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">/* Define to 1 if you have the declaration of `cacoshl', and to 0 if you</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="comment">/* #undef HAVE_DECL_CACOSHL */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="comment">/* Define to 1 if you have the declaration of `cacosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">/* #undef HAVE_DECL_CACOSL */</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="comment">/* Define to 1 if you have the declaration of `carg', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor">#define HAVE_DECL_CARG 1</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="comment">/* Define to 1 if you have the declaration of `cargf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="comment">/* #undef HAVE_DECL_CARGF */</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="comment">/* Define to 1 if you have the declaration of `cargl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="comment">/* #undef HAVE_DECL_CARGL */</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="comment">/* Define to 1 if you have the declaration of `casin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="preprocessor">#define HAVE_DECL_CASIN 1</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">/* Define to 1 if you have the declaration of `casinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment">/* #undef HAVE_DECL_CASINF */</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="comment">/* Define to 1 if you have the declaration of `casinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor">#define HAVE_DECL_CASINH 1</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">/* Define to 1 if you have the declaration of `casinhf', and to 0 if you</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="comment">/* #undef HAVE_DECL_CASINHF */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="comment">/* Define to 1 if you have the declaration of `casinhl', and to 0 if you</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">/* #undef HAVE_DECL_CASINHL */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment">/* Define to 1 if you have the declaration of `casinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">/* #undef HAVE_DECL_CASINL */</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="comment">/* Define to 1 if you have the declaration of `catan', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor">#define HAVE_DECL_CATAN 1</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="comment">/* Define to 1 if you have the declaration of `catanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="comment">/* #undef HAVE_DECL_CATANF */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="comment">/* Define to 1 if you have the declaration of `catanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor">#define HAVE_DECL_CATANH 1</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">/* Define to 1 if you have the declaration of `catanhf', and to 0 if you</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">/* #undef HAVE_DECL_CATANHF */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="comment">/* Define to 1 if you have the declaration of `catanhl', and to 0 if you</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">/* #undef HAVE_DECL_CATANHL */</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment">/* Define to 1 if you have the declaration of `catanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">/* #undef HAVE_DECL_CATANL */</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">/* Define to 1 if you have the declaration of `cbrt', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="preprocessor">#define HAVE_DECL_CBRT 1</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="comment">/* Define to 1 if you have the declaration of `cbrtf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="comment">/* #undef HAVE_DECL_CBRTF */</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="comment">/* Define to 1 if you have the declaration of `cbrtl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="comment">/* #undef HAVE_DECL_CBRTL */</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">/* Define to 1 if you have the declaration of `ccos', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="preprocessor">#define HAVE_DECL_CCOS 1</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment">/* Define to 1 if you have the declaration of `ccosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">/* #undef HAVE_DECL_CCOSF */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="comment">/* Define to 1 if you have the declaration of `ccosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor">#define HAVE_DECL_CCOSH 1</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="comment">/* Define to 1 if you have the declaration of `ccoshf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="comment">/* #undef HAVE_DECL_CCOSHF */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">/* Define to 1 if you have the declaration of `ccoshl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="comment">/* #undef HAVE_DECL_CCOSHL */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment">/* Define to 1 if you have the declaration of `ccosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="comment">/* #undef HAVE_DECL_CCOSL */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment">/* Define to 1 if you have the declaration of `ceil', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor">#define HAVE_DECL_CEIL 1</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="comment">/* Define to 1 if you have the declaration of `ceilf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">/* #undef HAVE_DECL_CEILF */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="comment">/* Define to 1 if you have the declaration of `ceill', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="comment">/* #undef HAVE_DECL_CEILL */</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="comment">/* Define to 1 if you have the declaration of `cexp', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="preprocessor">#define HAVE_DECL_CEXP 1</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="comment">/* Define to 1 if you have the declaration of `cexpf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="comment">/* #undef HAVE_DECL_CEXPF */</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="comment">/* Define to 1 if you have the declaration of `cexpl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="comment">/* #undef HAVE_DECL_CEXPL */</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="comment">/* Define to 1 if you have the declaration of `cimag', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">#define HAVE_DECL_CIMAG 1</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="comment">/* Define to 1 if you have the declaration of `cimagf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="comment">/* #undef HAVE_DECL_CIMAGF */</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="comment">/* Define to 1 if you have the declaration of `cimagl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="comment">/* #undef HAVE_DECL_CIMAGL */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="comment">/* Define to 1 if you have the declaration of `clog', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="preprocessor">#define HAVE_DECL_CLOG 1</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="comment">/* Define to 1 if you have the declaration of `clogf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="comment">/* #undef HAVE_DECL_CLOGF */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="comment">/* Define to 1 if you have the declaration of `clogl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="comment">/* #undef HAVE_DECL_CLOGL */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="comment">/* Define to 1 if you have the declaration of `conj', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="preprocessor">#define HAVE_DECL_CONJ 1</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="comment">/* Define to 1 if you have the declaration of `conjf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">/* #undef HAVE_DECL_CONJF */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">/* Define to 1 if you have the declaration of `conjl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="comment">/* #undef HAVE_DECL_CONJL */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment">/* Define to 1 if you have the declaration of `copysign', and to 0 if you</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor">#define HAVE_DECL_COPYSIGN 1</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="comment">/* Define to 1 if you have the declaration of `copysignf', and to 0 if you</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="comment">/* #undef HAVE_DECL_COPYSIGNF */</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment">/* Define to 1 if you have the declaration of `copysignl', and to 0 if you</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="comment">/* #undef HAVE_DECL_COPYSIGNL */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> <span class="comment">/* Define to 1 if you have the declaration of `cos', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> <span class="preprocessor">#define HAVE_DECL_COS 1</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> <span class="comment">/* Define to 1 if you have the declaration of `cosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="comment">/* #undef HAVE_DECL_COSF */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> <span class="comment">/* Define to 1 if you have the declaration of `cosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> <span class="preprocessor">#define HAVE_DECL_COSH 1</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="comment">/* Define to 1 if you have the declaration of `coshf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> <span class="comment">/* #undef HAVE_DECL_COSHF */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> <span class="comment">/* Define to 1 if you have the declaration of `coshl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> <span class="comment">/* #undef HAVE_DECL_COSHL */</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> <span class="comment">/* Define to 1 if you have the declaration of `cosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> <span class="comment">/* #undef HAVE_DECL_COSL */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> <span class="comment">/* Define to 1 if you have the declaration of `cpow', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="preprocessor">#define HAVE_DECL_CPOW 1</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> <span class="comment">/* Define to 1 if you have the declaration of `cpowf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="comment">/* #undef HAVE_DECL_CPOWF */</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> <span class="comment">/* Define to 1 if you have the declaration of `cpowl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> <span class="comment">/* #undef HAVE_DECL_CPOWL */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> <span class="comment">/* Define to 1 if you have the declaration of `cproj', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="preprocessor">#define HAVE_DECL_CPROJ 1</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> <span class="comment">/* Define to 1 if you have the declaration of `cprojf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="comment">/* #undef HAVE_DECL_CPROJF */</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="comment">/* Define to 1 if you have the declaration of `cprojl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="comment">/* #undef HAVE_DECL_CPROJL */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="comment">/* Define to 1 if you have the declaration of `creal', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> <span class="preprocessor">#define HAVE_DECL_CREAL 1</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="comment">/* Define to 1 if you have the declaration of `crealf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="comment">/* #undef HAVE_DECL_CREALF */</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="comment">/* Define to 1 if you have the declaration of `creall', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="comment">/* #undef HAVE_DECL_CREALL */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="comment">/* Define to 1 if you have the declaration of `csin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="preprocessor">#define HAVE_DECL_CSIN 1</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="comment">/* Define to 1 if you have the declaration of `csinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="comment">/* #undef HAVE_DECL_CSINF */</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="comment">/* Define to 1 if you have the declaration of `csinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> <span class="preprocessor">#define HAVE_DECL_CSINH 1</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> <span class="comment">/* Define to 1 if you have the declaration of `csinhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> <span class="comment">/* #undef HAVE_DECL_CSINHF */</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> <span class="comment">/* Define to 1 if you have the declaration of `csinhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> <span class="comment">/* #undef HAVE_DECL_CSINHL */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="comment">/* Define to 1 if you have the declaration of `csinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> <span class="comment">/* #undef HAVE_DECL_CSINL */</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> <span class="comment">/* Define to 1 if you have the declaration of `csqrt', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> <span class="preprocessor">#define HAVE_DECL_CSQRT 1</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="comment">/* Define to 1 if you have the declaration of `csqrtf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="comment">/* #undef HAVE_DECL_CSQRTF */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="comment">/* Define to 1 if you have the declaration of `csqrtl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> <span class="comment">/* #undef HAVE_DECL_CSQRTL */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="comment">/* Define to 1 if you have the declaration of `ctan', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="preprocessor">#define HAVE_DECL_CTAN 1</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="comment">/* #undef HAVE_DECL_CTANF */</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="preprocessor">#define HAVE_DECL_CTANH 1</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> <span class="comment">/* #undef HAVE_DECL_CTANHF */</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="comment">/* #undef HAVE_DECL_CTANHL */</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="comment">/* #undef HAVE_DECL_CTANL */</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> <span class="comment">/* Define to 1 if you have the declaration of `drand48', and to 0 if you</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> <span class="preprocessor">#define HAVE_DECL_DRAND48 1</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> <span class="comment">/* Define to 1 if you have the declaration of `erf', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> <span class="preprocessor">#define HAVE_DECL_ERF 1</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> <span class="comment">/* Define to 1 if you have the declaration of `erfc', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="preprocessor">#define HAVE_DECL_ERFC 1</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="comment">/* Define to 1 if you have the declaration of `erfcf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">/* #undef HAVE_DECL_ERFCF */</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="comment">/* Define to 1 if you have the declaration of `erfcl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="comment">/* #undef HAVE_DECL_ERFCL */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> <span class="comment">/* Define to 1 if you have the declaration of `erff', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="comment">/* #undef HAVE_DECL_ERFF */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="comment">/* Define to 1 if you have the declaration of `erfl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> <span class="comment">/* #undef HAVE_DECL_ERFL */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> <span class="comment">/* Define to 1 if you have the declaration of `exp', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> <span class="preprocessor">#define HAVE_DECL_EXP 1</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> <span class="comment">/* Define to 1 if you have the declaration of `exp2', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> <span class="preprocessor">#define HAVE_DECL_EXP2 1</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> <span class="comment">/* Define to 1 if you have the declaration of `exp2f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="comment">/* #undef HAVE_DECL_EXP2F */</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> <span class="comment">/* Define to 1 if you have the declaration of `exp2l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="comment">/* #undef HAVE_DECL_EXP2L */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="comment">/* Define to 1 if you have the declaration of `expf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">/* #undef HAVE_DECL_EXPF */</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="comment">/* Define to 1 if you have the declaration of `expl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="comment">/* #undef HAVE_DECL_EXPL */</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="comment">/* Define to 1 if you have the declaration of `expm1', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="preprocessor">#define HAVE_DECL_EXPM1 1</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="comment">/* Define to 1 if you have the declaration of `expm1f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">/* #undef HAVE_DECL_EXPM1F */</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment">/* Define to 1 if you have the declaration of `expm1l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> <span class="comment">/* #undef HAVE_DECL_EXPM1L */</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> <span class="comment">/* Define to 1 if you have the declaration of `fabs', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="preprocessor">#define HAVE_DECL_FABS 1</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> <span class="comment">/* Define to 1 if you have the declaration of `fabsf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="comment">/* #undef HAVE_DECL_FABSF */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="comment">/* Define to 1 if you have the declaration of `fabsl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="comment">/* #undef HAVE_DECL_FABSL */</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="comment">/* Define to 1 if you have the declaration of `fdim', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="preprocessor">#define HAVE_DECL_FDIM 1</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="comment">/* Define to 1 if you have the declaration of `fdimf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> <span class="comment">/* #undef HAVE_DECL_FDIMF */</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="comment">/* Define to 1 if you have the declaration of `fdiml', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> <span class="comment">/* #undef HAVE_DECL_FDIML */</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="comment">/* Define to 1 if you have the declaration of `floor', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="preprocessor">#define HAVE_DECL_FLOOR 1</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="comment">/* Define to 1 if you have the declaration of `floorf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="comment">/* #undef HAVE_DECL_FLOORF */</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="comment">/* Define to 1 if you have the declaration of `floorl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="comment">/* #undef HAVE_DECL_FLOORL */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> <span class="comment">/* Define to 1 if you have the declaration of `fma', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="preprocessor">#define HAVE_DECL_FMA 1</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="comment">/* Define to 1 if you have the declaration of `fmaf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="comment">/* #undef HAVE_DECL_FMAF */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="comment">/* Define to 1 if you have the declaration of `fmal', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="comment">/* #undef HAVE_DECL_FMAL */</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="comment">/* Define to 1 if you have the declaration of `fmax', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="preprocessor">#define HAVE_DECL_FMAX 1</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="comment">/* Define to 1 if you have the declaration of `fmaxf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> <span class="comment">/* #undef HAVE_DECL_FMAXF */</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> </div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> <span class="comment">/* Define to 1 if you have the declaration of `fmaxl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="comment">/* #undef HAVE_DECL_FMAXL */</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="comment">/* Define to 1 if you have the declaration of `fmin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> <span class="preprocessor">#define HAVE_DECL_FMIN 1</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> <span class="comment">/* Define to 1 if you have the declaration of `fminf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="comment">/* #undef HAVE_DECL_FMINF */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="comment">/* Define to 1 if you have the declaration of `fminl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="comment">/* #undef HAVE_DECL_FMINL */</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="comment">/* Define to 1 if you have the declaration of `fmod', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> <span class="preprocessor">#define HAVE_DECL_FMOD 1</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="comment">/* Define to 1 if you have the declaration of `fmodf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="comment">/* #undef HAVE_DECL_FMODF */</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="comment">/* Define to 1 if you have the declaration of `fmodl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="comment">/* #undef HAVE_DECL_FMODL */</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="comment">/* Define to 1 if you have the declaration of `frexp', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> <span class="preprocessor">#define HAVE_DECL_FREXP 1</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> <span class="comment">/* Define to 1 if you have the declaration of `frexpf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="comment">/* #undef HAVE_DECL_FREXPF */</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="comment">/* Define to 1 if you have the declaration of `frexpl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> <span class="comment">/* #undef HAVE_DECL_FREXPL */</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="comment">/* Define to 1 if you have the declaration of `hypot', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="preprocessor">#define HAVE_DECL_HYPOT 1</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="comment">/* Define to 1 if you have the declaration of `hypotf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> <span class="comment">/* #undef HAVE_DECL_HYPOTF */</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> <span class="comment">/* Define to 1 if you have the declaration of `hypotl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> <span class="comment">/* #undef HAVE_DECL_HYPOTL */</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> <span class="comment">/* Define to 1 if you have the declaration of `ilogb', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> <span class="preprocessor">#define HAVE_DECL_ILOGB 1</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> <span class="comment">/* Define to 1 if you have the declaration of `ilogbf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="comment">/* #undef HAVE_DECL_ILOGBF */</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="comment">/* Define to 1 if you have the declaration of `ilogbl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="comment">/* #undef HAVE_DECL_ILOGBL */</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="comment">/* Define to 1 if you have the declaration of `j0', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="preprocessor">#define HAVE_DECL_J0 1</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> <span class="comment">/* Define to 1 if you have the declaration of `j0f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> <span class="comment">/* #undef HAVE_DECL_J0F */</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="comment">/* Define to 1 if you have the declaration of `j0l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> <span class="comment">/* #undef HAVE_DECL_J0L */</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="comment">/* Define to 1 if you have the declaration of `j1', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="preprocessor">#define HAVE_DECL_J1 1</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> <span class="comment">/* Define to 1 if you have the declaration of `j1f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> <span class="comment">/* #undef HAVE_DECL_J1F */</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> <span class="comment">/* Define to 1 if you have the declaration of `j1l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> <span class="comment">/* #undef HAVE_DECL_J1L */</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> <span class="comment">/* Define to 1 if you have the declaration of `jn', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> <span class="preprocessor">#define HAVE_DECL_JN 1</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> <span class="comment">/* Define to 1 if you have the declaration of `jnf', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> <span class="comment">/* #undef HAVE_DECL_JNF */</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> <span class="comment">/* Define to 1 if you have the declaration of `jnl', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> <span class="comment">/* #undef HAVE_DECL_JNL */</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> <span class="comment">/* Define to 1 if you have the declaration of `ldexp', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="preprocessor">#define HAVE_DECL_LDEXP 1</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> <span class="comment">/* Define to 1 if you have the declaration of `ldexpf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> <span class="comment">/* #undef HAVE_DECL_LDEXPF */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="comment">/* Define to 1 if you have the declaration of `ldexpl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> <span class="comment">/* #undef HAVE_DECL_LDEXPL */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="comment">/* Define to 1 if you have the declaration of `lgamma', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> <span class="preprocessor">#define HAVE_DECL_LGAMMA 1</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> <span class="comment">/* Define to 1 if you have the declaration of `lgammaf', and to 0 if you</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="comment">/* #undef HAVE_DECL_LGAMMAF */</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> <span class="comment">/* Define to 1 if you have the declaration of `lgammal', and to 0 if you</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="comment">/* #undef HAVE_DECL_LGAMMAL */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="comment">/* Define to 1 if you have the declaration of `llrint', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> <span class="preprocessor">#define HAVE_DECL_LLRINT 1</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="comment">/* Define to 1 if you have the declaration of `llrintf', and to 0 if you</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> <span class="comment">/* #undef HAVE_DECL_LLRINTF */</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="comment">/* Define to 1 if you have the declaration of `llrintl', and to 0 if you</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> <span class="comment">/* #undef HAVE_DECL_LLRINTL */</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> <span class="comment">/* Define to 1 if you have the declaration of `llround', and to 0 if you</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> <span class="preprocessor">#define HAVE_DECL_LLROUND 1</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> <span class="comment">/* Define to 1 if you have the declaration of `llroundf', and to 0 if you</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> <span class="comment">/* #undef HAVE_DECL_LLROUNDF */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> <span class="comment">/* Define to 1 if you have the declaration of `llroundl', and to 0 if you</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">/* #undef HAVE_DECL_LLROUNDL */</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">/* Define to 1 if you have the declaration of `log', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="preprocessor">#define HAVE_DECL_LOG 1</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">/* Define to 1 if you have the declaration of `log10', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="preprocessor">#define HAVE_DECL_LOG10 1</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">/* Define to 1 if you have the declaration of `log10f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">/* #undef HAVE_DECL_LOG10F */</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment">/* Define to 1 if you have the declaration of `log10l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">/* #undef HAVE_DECL_LOG10L */</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">/* Define to 1 if you have the declaration of `log1p', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="preprocessor">#define HAVE_DECL_LOG1P 1</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment">/* Define to 1 if you have the declaration of `log1pf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">/* #undef HAVE_DECL_LOG1PF */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment">/* Define to 1 if you have the declaration of `log1pl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">/* #undef HAVE_DECL_LOG1PL */</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment">/* Define to 1 if you have the declaration of `log2', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="preprocessor">#define HAVE_DECL_LOG2 1</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment">/* Define to 1 if you have the declaration of `log2f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">/* #undef HAVE_DECL_LOG2F */</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment">/* Define to 1 if you have the declaration of `log2l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">/* #undef HAVE_DECL_LOG2L */</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment">/* Define to 1 if you have the declaration of `logb', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="preprocessor">#define HAVE_DECL_LOGB 1</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="comment">/* Define to 1 if you have the declaration of `logbf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment">/* #undef HAVE_DECL_LOGBF */</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment">/* Define to 1 if you have the declaration of `logbl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment">/* #undef HAVE_DECL_LOGBL */</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">/* Define to 1 if you have the declaration of `logf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">/* #undef HAVE_DECL_LOGF */</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment">/* Define to 1 if you have the declaration of `logl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment">/* #undef HAVE_DECL_LOGL */</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">/* Define to 1 if you have the declaration of `lrint', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="preprocessor">#define HAVE_DECL_LRINT 1</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">/* Define to 1 if you have the declaration of `lrintf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">/* #undef HAVE_DECL_LRINTF */</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">/* Define to 1 if you have the declaration of `lrintl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">/* #undef HAVE_DECL_LRINTL */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment">/* Define to 1 if you have the declaration of `lround', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="preprocessor">#define HAVE_DECL_LROUND 1</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment">/* Define to 1 if you have the declaration of `lroundf', and to 0 if you</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">/* #undef HAVE_DECL_LROUNDF */</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="comment">/* Define to 1 if you have the declaration of `lroundl', and to 0 if you</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment">/* #undef HAVE_DECL_LROUNDL */</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment">/* Define to 1 if you have the declaration of `memalign', and to 0 if you</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="preprocessor">#define HAVE_DECL_MEMALIGN 0</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">/* Define to 1 if you have the declaration of `modf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="preprocessor">#define HAVE_DECL_MODF 1</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="comment">/* Define to 1 if you have the declaration of `modff', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">/* #undef HAVE_DECL_MODFF */</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment">/* Define to 1 if you have the declaration of `modfl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="comment">/* #undef HAVE_DECL_MODFL */</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="comment">/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="preprocessor">#define HAVE_DECL_NAN 1</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="comment">/* Define to 1 if you have the declaration of `nanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment">/* #undef HAVE_DECL_NANF */</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment">/* Define to 1 if you have the declaration of `nanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment">/* #undef HAVE_DECL_NANL */</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment">/* Define to 1 if you have the declaration of `nanosleep', and to 0 if you</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="preprocessor">#define HAVE_DECL_NANOSLEEP 1</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="comment">/* Define to 1 if you have the declaration of `nearbyint', and to 0 if you</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="preprocessor">#define HAVE_DECL_NEARBYINT 1</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment">/* Define to 1 if you have the declaration of `nearbyintf', and to 0 if you</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">/* #undef HAVE_DECL_NEARBYINTF */</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment">/* Define to 1 if you have the declaration of `nearbyintl', and to 0 if you</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">/* #undef HAVE_DECL_NEARBYINTL */</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment">/* Define to 1 if you have the declaration of `nextafter', and to 0 if you</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor">#define HAVE_DECL_NEXTAFTER 1</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="comment">/* Define to 1 if you have the declaration of `nextafterf', and to 0 if you</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">/* #undef HAVE_DECL_NEXTAFTERF */</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">/* Define to 1 if you have the declaration of `nextafterl', and to 0 if you</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="comment">/* #undef HAVE_DECL_NEXTAFTERL */</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="comment">/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment">   you don't. */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="preprocessor">#define HAVE_DECL_POSIX_MEMALIGN 1</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="comment">/* Define to 1 if you have the declaration of `pow', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="preprocessor">#define HAVE_DECL_POW 1</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">/* Define to 1 if you have the declaration of `powf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">/* #undef HAVE_DECL_POWF */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">/* Define to 1 if you have the declaration of `powl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">/* #undef HAVE_DECL_POWL */</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment">/* Define to 1 if you have the declaration of `remainder', and to 0 if you</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="preprocessor">#define HAVE_DECL_REMAINDER 1</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment">/* Define to 1 if you have the declaration of `remainderf', and to 0 if you</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">/* #undef HAVE_DECL_REMAINDERF */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">/* Define to 1 if you have the declaration of `remainderl', and to 0 if you</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="comment">/* #undef HAVE_DECL_REMAINDERL */</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="comment">/* Define to 1 if you have the declaration of `remquo', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor">#define HAVE_DECL_REMQUO 1</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment">/* Define to 1 if you have the declaration of `remquof', and to 0 if you</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment">/* #undef HAVE_DECL_REMQUOF */</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="comment">/* Define to 1 if you have the declaration of `remquol', and to 0 if you</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="comment">/* #undef HAVE_DECL_REMQUOL */</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">/* Define to 1 if you have the declaration of `rint', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="preprocessor">#define HAVE_DECL_RINT 1</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">/* Define to 1 if you have the declaration of `rintf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">/* #undef HAVE_DECL_RINTF */</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment">/* Define to 1 if you have the declaration of `rintl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="comment">/* #undef HAVE_DECL_RINTL */</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">/* Define to 1 if you have the declaration of `round', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="preprocessor">#define HAVE_DECL_ROUND 1</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment">/* Define to 1 if you have the declaration of `roundf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="comment">/* #undef HAVE_DECL_ROUNDF */</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> </div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment">/* Define to 1 if you have the declaration of `roundl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="comment">/* #undef HAVE_DECL_ROUNDL */</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbln', and to 0 if you</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor">#define HAVE_DECL_SCALBLN 1</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">/* Define to 1 if you have the declaration of `scalblnf', and to 0 if you</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment">/* #undef HAVE_DECL_SCALBLNF */</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> </div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment">/* Define to 1 if you have the declaration of `scalblnl', and to 0 if you</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment">/* #undef HAVE_DECL_SCALBLNL */</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbn', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor">#define HAVE_DECL_SCALBN 1</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbnf', and to 0 if you</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment">/* #undef HAVE_DECL_SCALBNF */</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbnl', and to 0 if you</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment">/* #undef HAVE_DECL_SCALBNL */</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="comment">/* Define to 1 if you have the declaration of `sin', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="preprocessor">#define HAVE_DECL_SIN 1</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">/* Define to 1 if you have the declaration of `sinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment">/* #undef HAVE_DECL_SINF */</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">/* Define to 1 if you have the declaration of `sinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor">#define HAVE_DECL_SINH 1</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment">/* Define to 1 if you have the declaration of `sinhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="comment">/* #undef HAVE_DECL_SINHF */</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> </div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment">/* Define to 1 if you have the declaration of `sinhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">/* #undef HAVE_DECL_SINHL */</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> </div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment">/* Define to 1 if you have the declaration of `sinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment">/* #undef HAVE_DECL_SINL */</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="preprocessor">#define HAVE_DECL_SLEEP 1</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="comment">/* Define to 1 if you have the declaration of `sqrt', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="preprocessor">#define HAVE_DECL_SQRT 1</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="comment">/* Define to 1 if you have the declaration of `sqrtf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="comment">/* #undef HAVE_DECL_SQRTF */</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="comment">/* Define to 1 if you have the declaration of `sqrtl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="comment">/* #undef HAVE_DECL_SQRTL */</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="comment">/* Define to 1 if you have the declaration of `srand48', and to 0 if you</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="preprocessor">#define HAVE_DECL_SRAND48 1</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment">/* Define to 1 if you have the declaration of `tan', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="preprocessor">#define HAVE_DECL_TAN 1</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment">/* Define to 1 if you have the declaration of `tanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="comment">/* #undef HAVE_DECL_TANF */</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="comment">/* Define to 1 if you have the declaration of `tanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="preprocessor">#define HAVE_DECL_TANH 1</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">/* Define to 1 if you have the declaration of `tanhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="comment">/* #undef HAVE_DECL_TANHF */</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment">/* Define to 1 if you have the declaration of `tanhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment">/* #undef HAVE_DECL_TANHL */</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="comment">/* Define to 1 if you have the declaration of `tanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">/* #undef HAVE_DECL_TANL */</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">/* Define to 1 if you have the declaration of `tgamma', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="preprocessor">#define HAVE_DECL_TGAMMA 1</span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">/* Define to 1 if you have the declaration of `tgammaf', and to 0 if you</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment">/* #undef HAVE_DECL_TGAMMAF */</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment">/* Define to 1 if you have the declaration of `tgammal', and to 0 if you</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment">   don't. */</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">/* #undef HAVE_DECL_TGAMMAL */</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment">/* Define to 1 if you have the declaration of `trunc', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="preprocessor">#define HAVE_DECL_TRUNC 1</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">/* Define to 1 if you have the declaration of `truncf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment">/* #undef HAVE_DECL_TRUNCF */</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">/* Define to 1 if you have the declaration of `truncl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment">/* #undef HAVE_DECL_TRUNCL */</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment">/* Define to 1 if you have the declaration of `y0', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="preprocessor">#define HAVE_DECL_Y0 1</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment">/* Define to 1 if you have the declaration of `y0f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment">/* #undef HAVE_DECL_Y0F */</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment">/* Define to 1 if you have the declaration of `y0l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">/* #undef HAVE_DECL_Y0L */</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment">/* Define to 1 if you have the declaration of `y1', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="preprocessor">#define HAVE_DECL_Y1 1</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">/* Define to 1 if you have the declaration of `y1f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">/* #undef HAVE_DECL_Y1F */</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment">/* Define to 1 if you have the declaration of `y1l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment">/* #undef HAVE_DECL_Y1L */</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment">/* Define to 1 if you have the declaration of `yn', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="preprocessor">#define HAVE_DECL_YN 1</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment">/* Define to 1 if you have the declaration of `ynf', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment">/* #undef HAVE_DECL_YNF */</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> </div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment">/* Define to 1 if you have the declaration of `ynl', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment">/* #undef HAVE_DECL_YNL */</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="comment">/* Define to 1 if you have the <dlfcn.h> header file. */</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="preprocessor">#define HAVE_DLFCN_H 1</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment">/* #undef HAVE_DOPRNT */</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">/* Define to 1 if you have the `drand48' function. */</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="preprocessor">#define HAVE_DRAND48 1</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment">/* Define to 1 if you have the `erf' function. */</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment">/* #undef HAVE_ERF */</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">/* Define to 1 if you have the `erfc' function. */</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment">/* #undef HAVE_ERFC */</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment">/* Define to 1 if you have the `erfcf' function. */</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">/* #undef HAVE_ERFCF */</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> </div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">/* Define to 1 if you have the `erfcl' function. */</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment">/* #undef HAVE_ERFCL */</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">/* Define to 1 if you have the `erff' function. */</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">/* #undef HAVE_ERFF */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">/* Define to 1 if you have the `erfl' function. */</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment">/* #undef HAVE_ERFL */</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> </div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="comment">/* Define to 1 if you have the `exp' function. */</span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <span class="comment">/* #undef HAVE_EXP */</span></div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="comment">/* Define to 1 if you have the `exp2' function. */</span></div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="comment">/* #undef HAVE_EXP2 */</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment">/* Define to 1 if you have the `exp2f' function. */</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">/* #undef HAVE_EXP2F */</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> </div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment">/* Define to 1 if you have the `exp2l' function. */</span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">/* #undef HAVE_EXP2L */</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment">/* Define to 1 if you have the `expf' function. */</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">/* #undef HAVE_EXPF */</span></div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> </div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment">/* Define to 1 if you have the `expl' function. */</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">/* #undef HAVE_EXPL */</span></div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">/* Define to 1 if you have the `expm1' function. */</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment">/* #undef HAVE_EXPM1 */</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> </div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment">/* Define to 1 if you have the `expm1f' function. */</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="comment">/* #undef HAVE_EXPM1F */</span></div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> </div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="comment">/* Define to 1 if you have the `expm1l' function. */</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment">/* #undef HAVE_EXPM1L */</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="comment">/* Define to 1 if you have the `fabs' function. */</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="comment">/* #undef HAVE_FABS */</span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">/* Define to 1 if you have the `fabsf' function. */</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment">/* #undef HAVE_FABSF */</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment">/* Define to 1 if you have the `fabsl' function. */</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment">/* #undef HAVE_FABSL */</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment">/* Define to 1 if you have the `fdim' function. */</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="comment">/* #undef HAVE_FDIM */</span></div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> </div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment">/* Define to 1 if you have the `fdimf' function. */</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment">/* #undef HAVE_FDIMF */</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="comment">/* Define to 1 if you have the `fdiml' function. */</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="comment">/* #undef HAVE_FDIML */</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="comment">/* Define to 1 if you have the <float.h> header file. */</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="preprocessor">#define HAVE_FLOAT_H 1</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="comment">/* Define to 1 if you have the `floor' function. */</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="comment">/* #undef HAVE_FLOOR */</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="comment">/* Define to 1 if you have the `floorf' function. */</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="comment">/* #undef HAVE_FLOORF */</span></div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="comment">/* Define to 1 if you have the `floorl' function. */</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment">/* #undef HAVE_FLOORL */</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="comment">/* Define to 1 if you have the `fma' function. */</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="comment">/* #undef HAVE_FMA */</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment">/* Define to 1 if you have the `fmaf' function. */</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment">/* #undef HAVE_FMAF */</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment">/* Define to 1 if you have the `fmal' function. */</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="comment">/* #undef HAVE_FMAL */</span></div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment">/* Define to 1 if you have the `fmax' function. */</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="comment">/* #undef HAVE_FMAX */</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="comment">/* Define to 1 if you have the `fmaxf' function. */</span></div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="comment">/* #undef HAVE_FMAXF */</span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="comment">/* Define to 1 if you have the `fmaxl' function. */</span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="comment">/* #undef HAVE_FMAXL */</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> </div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment">/* Define to 1 if you have the `fmin' function. */</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment">/* #undef HAVE_FMIN */</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> </div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="comment">/* Define to 1 if you have the `fminf' function. */</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="comment">/* #undef HAVE_FMINF */</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> </div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment">/* Define to 1 if you have the `fminl' function. */</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment">/* #undef HAVE_FMINL */</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment">/* Define to 1 if you have the `fmod' function. */</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="comment">/* #undef HAVE_FMOD */</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> </div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">/* Define to 1 if you have the `fmodf' function. */</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="comment">/* #undef HAVE_FMODF */</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment">/* Define to 1 if you have the `fmodl' function. */</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="comment">/* #undef HAVE_FMODL */</span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">/* Define to 1 if you have the `frexp' function. */</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="preprocessor">#define HAVE_FREXP 1</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment">/* Define to 1 if you have the `frexpf' function. */</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="comment">/* #undef HAVE_FREXPF */</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment">/* Define to 1 if you have the `frexpl' function. */</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment">/* #undef HAVE_FREXPL */</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment">/* Define to 1 if you have the `gethrtime' function. */</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment">/* #undef HAVE_GETHRTIME */</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment">/* Define to 1 if hrtime_t is defined in <sys/time.h> */</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="comment">/* #undef HAVE_HRTIME_T */</span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="comment">/* Define to 1 if you have the `hypot' function. */</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment">/* #undef HAVE_HYPOT */</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> </div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="comment">/* Define to 1 if you have the `hypotf' function. */</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="comment">/* #undef HAVE_HYPOTF */</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment">/* Define to 1 if you have the `hypotl' function. */</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment">/* #undef HAVE_HYPOTL */</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment">/* Define to 1 if you have the `ilogb' function. */</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">/* #undef HAVE_ILOGB */</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="comment">/* Define to 1 if you have the `ilogbf' function. */</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="comment">/* #undef HAVE_ILOGBF */</span></div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> </div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment">/* Define to 1 if you have the `ilogbl' function. */</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment">/* #undef HAVE_ILOGBL */</span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> </div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment">/* Define to 1 if you have the <intrinsics.h> header file. */</span></div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment">/* #undef HAVE_INTRINSICS_H */</span></div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="comment">/* Define to 1 if you have the <inttypes.h> header file. */</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="preprocessor">#define HAVE_INTTYPES_H 1</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="comment">/* Define to 1 if you have the `j0' function. */</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="comment">/* #undef HAVE_J0 */</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> </div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="comment">/* Define to 1 if you have the `j0f' function. */</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="comment">/* #undef HAVE_J0F */</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> </div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="comment">/* Define to 1 if you have the `j0l' function. */</span></div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="comment">/* #undef HAVE_J0L */</span></div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> </div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="comment">/* Define to 1 if you have the `j1' function. */</span></div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="comment">/* #undef HAVE_J1 */</span></div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="comment">/* Define to 1 if you have the `j1f' function. */</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="comment">/* #undef HAVE_J1F */</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="comment">/* Define to 1 if you have the `j1l' function. */</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="comment">/* #undef HAVE_J1L */</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment">/* Define to 1 if you have the `jn' function. */</span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment">/* #undef HAVE_JN */</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">/* Define to 1 if you have the `jnf' function. */</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment">/* #undef HAVE_JNF */</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="comment">/* Define to 1 if you have the `jnl' function. */</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> <span class="comment">/* #undef HAVE_JNL */</span></div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> </div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="comment">/* Define to 1 if you have the `ldexp' function. */</span></div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="preprocessor">#define HAVE_LDEXP 1</span></div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="comment">/* Define to 1 if you have the `ldexpf' function. */</span></div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="comment">/* #undef HAVE_LDEXPF */</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> </div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="comment">/* Define to 1 if you have the `ldexpl' function. */</span></div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="comment">/* #undef HAVE_LDEXPL */</span></div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="comment">/* Define to 1 if you have the `lgamma' function. */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="comment">/* #undef HAVE_LGAMMA */</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="comment">/* Define to 1 if you have the `lgammaf' function. */</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment">/* #undef HAVE_LGAMMAF */</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="comment">/* Define to 1 if you have the `lgammal' function. */</span></div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="comment">/* #undef HAVE_LGAMMAL */</span></div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> </div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="comment">/* Define to 1 if you have the `fftw3' library (-lfftw3). */</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="preprocessor">#define HAVE_LIBFFTW3 1</span></div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="comment">/* Define to 1 if you have the `m' library (-lm). */</span></div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="preprocessor">#define HAVE_LIBM 1</span></div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="comment">/* Define to 1 if you have the <limits.h> header file. */</span></div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="preprocessor">#define HAVE_LIMITS_H 1</span></div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="comment">/* Define to 1 if you have the `llrint' function. */</span></div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="comment">/* #undef HAVE_LLRINT */</span></div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="comment">/* Define to 1 if you have the `llrintf' function. */</span></div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">/* #undef HAVE_LLRINTF */</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="comment">/* Define to 1 if you have the `llrintl' function. */</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="comment">/* #undef HAVE_LLRINTL */</span></div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> </div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="comment">/* Define to 1 if you have the `llround' function. */</span></div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="comment">/* #undef HAVE_LLROUND */</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="comment">/* Define to 1 if you have the `llroundf' function. */</span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment">/* #undef HAVE_LLROUNDF */</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="comment">/* Define to 1 if you have the `llroundl' function. */</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment">/* #undef HAVE_LLROUNDL */</span></div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> </div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment">/* Define to 1 if you have the `log' function. */</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment">/* #undef HAVE_LOG */</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="comment">/* Define to 1 if you have the `log10' function. */</span></div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="comment">/* #undef HAVE_LOG10 */</span></div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="comment">/* Define to 1 if you have the `log10f' function. */</span></div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="comment">/* #undef HAVE_LOG10F */</span></div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="comment">/* Define to 1 if you have the `log10l' function. */</span></div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <span class="comment">/* #undef HAVE_LOG10L */</span></div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> <span class="comment">/* Define to 1 if you have the `log1p' function. */</span></div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="comment">/* #undef HAVE_LOG1P */</span></div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment">/* Define to 1 if you have the `log1pf' function. */</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="comment">/* #undef HAVE_LOG1PF */</span></div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> </div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="comment">/* Define to 1 if you have the `log1pl' function. */</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment">/* #undef HAVE_LOG1PL */</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment">/* Define to 1 if you have the `log2' function. */</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment">/* #undef HAVE_LOG2 */</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="comment">/* Define to 1 if you have the `log2f' function. */</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="comment">/* #undef HAVE_LOG2F */</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="comment">/* Define to 1 if you have the `log2l' function. */</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="comment">/* #undef HAVE_LOG2L */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <span class="comment">/* Define to 1 if you have the `logb' function. */</span></div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="comment">/* #undef HAVE_LOGB */</span></div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> </div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> <span class="comment">/* Define to 1 if you have the `logbf' function. */</span></div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="comment">/* #undef HAVE_LOGBF */</span></div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> <span class="comment">/* Define to 1 if you have the `logbl' function. */</span></div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> <span class="comment">/* #undef HAVE_LOGBL */</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> </div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="comment">/* Define to 1 if you have the `logf' function. */</span></div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment">/* #undef HAVE_LOGF */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> </div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="comment">/* Define to 1 if you have the `logl' function. */</span></div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment">/* #undef HAVE_LOGL */</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="comment">/* Define to 1 if the compiler supports 'long double' */</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="preprocessor">#define HAVE_LONG_DOUBLE 1</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="comment">/* Define to 1 if you have the `lrint' function. */</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="comment">/* #undef HAVE_LRINT */</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> </div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="comment">/* Define to 1 if you have the `lrintf' function. */</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="comment">/* #undef HAVE_LRINTF */</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> </div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="comment">/* Define to 1 if you have the `lrintl' function. */</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment">/* #undef HAVE_LRINTL */</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="comment">/* Define to 1 if you have the `lround' function. */</span></div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="comment">/* #undef HAVE_LROUND */</span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="comment">/* Define to 1 if you have the `lroundf' function. */</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="comment">/* #undef HAVE_LROUNDF */</span></div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="comment">/* Define to 1 if you have the `lroundl' function. */</span></div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment">/* #undef HAVE_LROUNDL */</span></div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> <span class="comment">/* Define to 1 if you have the `mach_absolute_time' function. */</span></div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="comment">/* #undef HAVE_MACH_ABSOLUTE_TIME */</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="comment">/* Define to 1 if you have the <mach/mach_time.h> header file. */</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="comment">/* #undef HAVE_MACH_MACH_TIME_H */</span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment">/* Define to 1 if you have the <malloc.h> header file. */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="preprocessor">#define HAVE_MALLOC_H 1</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment">/* Define to 1 if you have the <math.h> header file. */</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="preprocessor">#define HAVE_MATH_H 1</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="comment">/* Define to 1 if compilation of Matlab interface only succeeds when macro</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <span class="comment">   __STDC_UTF_16__ not defined. */</span></div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="comment">/* #undef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16 */</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">/* Define to 1 if you have the `memalign' function. */</span></div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="preprocessor">#define HAVE_MEMALIGN 1</span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="comment">/* Define to 1 if you have the <memory.h> header file. */</span></div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="preprocessor">#define HAVE_MEMORY_H 1</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="comment">/* Define to 1 if you have the `memset' function. */</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="preprocessor">#define HAVE_MEMSET 1</span></div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment">/* Define to have the file mexversion.c */</span></div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="comment">/* #undef HAVE_MEXVERSION_C */</span></div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment">/* Define to enable use of MIPS ZBus cycle-counter. */</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment">/* #undef HAVE_MIPS_ZBUS_TIMER */</span></div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> </div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="comment">/* Define to 1 if you have the `modf' function. */</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="preprocessor">#define HAVE_MODF 1</span></div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="comment">/* Define to 1 if you have the `modff' function. */</span></div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="comment">/* #undef HAVE_MODFF */</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> </div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="comment">/* Define to 1 if you have the `modfl' function. */</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="comment">/* #undef HAVE_MODFL */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> </div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="comment">/* Define to 1 if you have the `nan' function. */</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="comment">/* #undef HAVE_NAN */</span></div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> </div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment">/* Define to 1 if you have the `nanf' function. */</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> <span class="comment">/* #undef HAVE_NANF */</span></div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> <span class="comment">/* Define to 1 if you have the `nanl' function. */</span></div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> <span class="comment">/* #undef HAVE_NANL */</span></div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> </div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="comment">/* Define to 1 if you have the `nanosleep' function. */</span></div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="preprocessor">#define HAVE_NANOSLEEP 1</span></div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="comment">/* Define to 1 if you have the `nearbyint' function. */</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <span class="comment">/* #undef HAVE_NEARBYINT */</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> </div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="comment">/* Define to 1 if you have the `nearbyintf' function. */</span></div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="comment">/* #undef HAVE_NEARBYINTF */</span></div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> <span class="comment">/* Define to 1 if you have the `nearbyintl' function. */</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> <span class="comment">/* #undef HAVE_NEARBYINTL */</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> </div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="comment">/* Define to 1 if you have the `nextafter' function. */</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="comment">/* #undef HAVE_NEXTAFTER */</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> </div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment">/* Define to 1 if you have the `nextafterf' function. */</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="comment">/* #undef HAVE_NEXTAFTERF */</span></div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="comment">/* Define to 1 if you have the `nextafterl' function. */</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="comment">/* #undef HAVE_NEXTAFTERL */</span></div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="comment">/* Define if OpenMP is enabled */</span></div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> <span class="preprocessor">#define HAVE_OPENMP 1</span></div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="comment">/* Define to 1 if you have the `posix_memalign' function. */</span></div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> <span class="preprocessor">#define HAVE_POSIX_MEMALIGN 1</span></div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="comment">/* Define to 1 if you have the `pow' function. */</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="comment">/* #undef HAVE_POW */</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="comment">/* Define to 1 if you have the `powf' function. */</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> <span class="comment">/* #undef HAVE_POWF */</span></div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> </div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="comment">/* Define to 1 if you have the `powl' function. */</span></div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> <span class="comment">/* #undef HAVE_POWL */</span></div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment">/* Define to 1 if you have the `read_real_time' function. */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="comment">/* #undef HAVE_READ_REAL_TIME */</span></div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="comment">/* Define to 1 if you have the `remainder' function. */</span></div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment">/* #undef HAVE_REMAINDER */</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment">/* Define to 1 if you have the `remainderf' function. */</span></div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="comment">/* #undef HAVE_REMAINDERF */</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment">/* Define to 1 if you have the `remainderl' function. */</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment">/* #undef HAVE_REMAINDERL */</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">/* Define to 1 if you have the `remquo' function. */</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment">/* #undef HAVE_REMQUO */</span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> </div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment">/* Define to 1 if you have the `remquof' function. */</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">/* #undef HAVE_REMQUOF */</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> </div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="comment">/* Define to 1 if you have the `remquol' function. */</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment">/* #undef HAVE_REMQUOL */</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> </div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="comment">/* Define to 1 if you have the `rint' function. */</span></div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <span class="comment">/* #undef HAVE_RINT */</span></div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> <span class="comment">/* Define to 1 if you have the `rintf' function. */</span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="comment">/* #undef HAVE_RINTF */</span></div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> </div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> <span class="comment">/* Define to 1 if you have the `rintl' function. */</span></div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="comment">/* #undef HAVE_RINTL */</span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> </div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment">/* Define to 1 if you have the `round' function. */</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment">/* #undef HAVE_ROUND */</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> </div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> <span class="comment">/* Define to 1 if you have the `roundf' function. */</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment">/* #undef HAVE_ROUNDF */</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">/* Define to 1 if you have the `roundl' function. */</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment">/* #undef HAVE_ROUNDL */</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> </div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment">/* Define to 1 if you have the `scalbln' function. */</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="comment">/* #undef HAVE_SCALBLN */</span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> </div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="comment">/* Define to 1 if you have the `scalblnf' function. */</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment">/* #undef HAVE_SCALBLNF */</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> </div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment">/* Define to 1 if you have the `scalblnl' function. */</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment">/* #undef HAVE_SCALBLNL */</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> </div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment">/* Define to 1 if you have the `scalbn' function. */</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="preprocessor">#define HAVE_SCALBN 1</span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment">/* Define to 1 if you have the `scalbnf' function. */</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="comment">/* #undef HAVE_SCALBNF */</span></div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="comment">/* Define to 1 if you have the `scalbnl' function. */</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="comment">/* #undef HAVE_SCALBNL */</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> </div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="comment">/* Define to 1 if you have the `sin' function. */</span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="comment">/* #undef HAVE_SIN */</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> </div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment">/* Define to 1 if you have the `sinf' function. */</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">/* #undef HAVE_SINF */</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> </div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">/* Define to 1 if you have the `sinh' function. */</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">/* #undef HAVE_SINH */</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> </div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="comment">/* Define to 1 if you have the `sinhf' function. */</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="comment">/* #undef HAVE_SINHF */</span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> </div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment">/* Define to 1 if you have the `sinhl' function. */</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">/* #undef HAVE_SINHL */</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> </div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="comment">/* Define to 1 if you have the `sinl' function. */</span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment">/* #undef HAVE_SINL */</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> </div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="comment">/* Define to 1 if you have the `sleep' function. */</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="preprocessor">#define HAVE_SLEEP 1</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment">/* Define to 1 if you have the `snprintf' function. */</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="preprocessor">#define HAVE_SNPRINTF 1</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> <span class="comment">/* Define to 1 if you have the `sqrt' function. */</span></div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> <span class="comment">/* #undef HAVE_SQRT */</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> </div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> <span class="comment">/* Define to 1 if you have the `sqrtf' function. */</span></div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> <span class="comment">/* #undef HAVE_SQRTF */</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> </div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment">/* Define to 1 if you have the `sqrtl' function. */</span></div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment">/* #undef HAVE_SQRTL */</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment">/* Define to 1 if you have the `srand48' function. */</span></div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="preprocessor">#define HAVE_SRAND48 1</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <span class="comment">/* Define to 1 if you have the <stdarg.h> header file. */</span></div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <span class="preprocessor">#define HAVE_STDARG_H 1</span></div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="comment">/* Define to 1 if you have the <stdbool.h> header file. */</span></div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="preprocessor">#define HAVE_STDBOOL_H 1</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment">/* Define to 1 if you have the <stddef.h> header file. */</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="preprocessor">#define HAVE_STDDEF_H 1</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment">/* Define to 1 if you have the <stdint.h> header file. */</span></div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="preprocessor">#define HAVE_STDINT_H 1</span></div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment">/* Define to 1 if you have the <stdio.h> header file. */</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="preprocessor">#define HAVE_STDIO_H 1</span></div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="comment">/* Define to 1 if you have the <stdlib.h> header file. */</span></div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <span class="preprocessor">#define HAVE_STDLIB_H 1</span></div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="comment">/* Define to 1 if you have the <strings.h> header file. */</span></div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="preprocessor">#define HAVE_STRINGS_H 1</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="comment">/* Define to 1 if you have the <string.h> header file. */</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="preprocessor">#define HAVE_STRING_H 1</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> <span class="comment">/* Define to 1 if you have the `sysctl' function. */</span></div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="preprocessor">#define HAVE_SYSCTL 1</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="comment">/* Define to 1 if you have the <sys/stat.h> header file. */</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="preprocessor">#define HAVE_SYS_STAT_H 1</span></div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment">/* Define to 1 if you have the <sys/time.h> header file. */</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> <span class="preprocessor">#define HAVE_SYS_TIME_H 1</span></div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment">/* Define to 1 if you have the <sys/types.h> header file. */</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="preprocessor">#define HAVE_SYS_TYPES_H 1</span></div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <span class="comment">/* Define to 1 if you have the `tan' function. */</span></div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <span class="comment">/* #undef HAVE_TAN */</span></div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> </div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> <span class="comment">/* Define to 1 if you have the `tanf' function. */</span></div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> <span class="comment">/* #undef HAVE_TANF */</span></div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="comment">/* Define to 1 if you have the `tanh' function. */</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment">/* #undef HAVE_TANH */</span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="comment">/* Define to 1 if you have the `tanhf' function. */</span></div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment">/* #undef HAVE_TANHF */</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> </div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> <span class="comment">/* Define to 1 if you have the `tanhl' function. */</span></div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="comment">/* #undef HAVE_TANHL */</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment">/* Define to 1 if you have the `tanl' function. */</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="comment">/* #undef HAVE_TANL */</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> </div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="comment">/* Define to 1 if you have the `tgamma' function. */</span></div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="comment">/* #undef HAVE_TGAMMA */</span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="comment">/* Define to 1 if you have the `tgammaf' function. */</span></div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <span class="comment">/* #undef HAVE_TGAMMAF */</span></div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <span class="comment">/* Define to 1 if you have the `tgammal' function. */</span></div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="comment">/* #undef HAVE_TGAMMAL */</span></div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> </div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="comment">/* Define to 1 if you have the `time_base_to_time' function. */</span></div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> <span class="comment">/* #undef HAVE_TIME_BASE_TO_TIME */</span></div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <span class="comment">/* Define to 1 if you have the <time.h> header file. */</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="preprocessor">#define HAVE_TIME_H 1</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="comment">/* Define to 1 if you have the `trunc' function. */</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="comment">/* #undef HAVE_TRUNC */</span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> </div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment">/* Define to 1 if you have the `truncf' function. */</span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="comment">/* #undef HAVE_TRUNCF */</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="comment">/* Define to 1 if you have the `truncl' function. */</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="comment">/* #undef HAVE_TRUNCL */</span></div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> </div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="comment">/* Define to 1 if the system has the type `uintptr_t'. */</span></div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="preprocessor">#define HAVE_UINTPTR_T 1</span></div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> <span class="comment">/* Define to 1 if you have the <unistd.h> header file. */</span></div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> <span class="preprocessor">#define HAVE_UNISTD_H 1</span></div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> <span class="comment">/* Define to 1 if you have the `usleep' function. */</span></div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> <span class="preprocessor">#define HAVE_USLEEP 1</span></div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="comment">/* Define to 1 if you have the `vprintf' function. */</span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="preprocessor">#define HAVE_VPRINTF 1</span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> <span class="comment">/* Define to 1 if you have the `y0' function. */</span></div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="comment">/* #undef HAVE_Y0 */</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="comment">/* Define to 1 if you have the `y0f' function. */</span></div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> <span class="comment">/* #undef HAVE_Y0F */</span></div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> <span class="comment">/* Define to 1 if you have the `y0l' function. */</span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="comment">/* #undef HAVE_Y0L */</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> </div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="comment">/* Define to 1 if you have the `y1' function. */</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="comment">/* #undef HAVE_Y1 */</span></div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="comment">/* Define to 1 if you have the `y1f' function. */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="comment">/* #undef HAVE_Y1F */</span></div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> </div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> <span class="comment">/* Define to 1 if you have the `y1l' function. */</span></div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="comment">/* #undef HAVE_Y1L */</span></div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> </div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> <span class="comment">/* Define to 1 if you have the `yn' function. */</span></div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> <span class="comment">/* #undef HAVE_YN */</span></div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> </div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> <span class="comment">/* Define to 1 if you have the `ynf' function. */</span></div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> <span class="comment">/* #undef HAVE_YNF */</span></div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> </div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> <span class="comment">/* Define to 1 if you have the `ynl' function. */</span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="comment">/* #undef HAVE_YNL */</span></div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> <span class="comment">/* Define to 1 if you have the `_mm_free' function. */</span></div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> <span class="comment">/* #undef HAVE__MM_FREE */</span></div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> <span class="comment">/* Define to 1 if you have the `_mm_malloc' function. */</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="comment">/* #undef HAVE__MM_MALLOC */</span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> </div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> <span class="comment">/* Define if you have the UNICOS _rtc() intrinsic. */</span></div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="comment">/* #undef HAVE__RTC */</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> </div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> <span class="comment">/* Define to enable Kaiser-Bessel window function. */</span></div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> <span class="preprocessor">#define KAISER_BESSEL 1</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="comment">/* Define to the sub-directory in which libtool stores uninstalled libraries.</span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="preprocessor">#define LT_OBJDIR ".libs/"</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">/* Define to enable Matlab argument checks. */</span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="preprocessor">#define MATLAB_ARGCHECKS 1</span></div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> <span class="comment">/* Define to enable runtime time measurements. */</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment">/* #undef MEASURE_TIME */</span></div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> </div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="comment">/* Define to enable time measurements for FFTW transforms. */</span></div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="comment">/* #undef MEASURE_TIME_FFTW */</span></div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> </div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> <span class="comment">/* Define to enable extra debugging code. */</span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="comment">/* #undef NFFT_DEBUG */</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">/* Define to 1 if your C compiler doesn't accept -c and -o together. */</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="comment">/* #undef NO_MINUS_C_MINUS_O */</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> </div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment">/* Name of package */</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="preprocessor">#define PACKAGE "nfft"</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment">/* Define to the address where bug reports for this package should be sent. */</span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="preprocessor">#define PACKAGE_BUGREPORT "bugs at nfft.org"</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment">/* Define to the full name of this package. */</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="preprocessor">#define PACKAGE_NAME "NFFT"</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> <span class="comment">/* Define to the full name and version of this package. */</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="preprocessor">#define PACKAGE_STRING "NFFT 3.2.3"</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="comment">/* Define to the one symbol short name of this package. */</span></div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> <span class="preprocessor">#define PACKAGE_TARNAME "nfft"</span></div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="comment">/* Define to the home page for this package. */</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="preprocessor">#define PACKAGE_URL ""</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> <span class="comment">/* Define to the version of this package. */</span></div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> <span class="preprocessor">#define PACKAGE_VERSION "3.2.3"</span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> <span class="comment">/* Define to enable sinc power window function. */</span></div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> <span class="comment">/* #undef SINC_POWER */</span></div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> </div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> <span class="comment">/* The size of `double', as computed by sizeof. */</span></div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="preprocessor">#define SIZEOF_DOUBLE 8</span></div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> <span class="comment">/* The size of `float', as computed by sizeof. */</span></div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> <span class="preprocessor">#define SIZEOF_FLOAT 4</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> <span class="comment">/* The size of `int', as computed by sizeof. */</span></div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> <span class="preprocessor">#define SIZEOF_INT 4</span></div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> <span class="comment">/* The size of `long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="preprocessor">#define SIZEOF_LONG 8</span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> <span class="comment">/* The size of `long double', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="preprocessor">#define SIZEOF_LONG_DOUBLE 16</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="comment">/* The size of `long long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="preprocessor">#define SIZEOF_LONG_LONG 8</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> <span class="comment">/* The size of `ptrdiff_t', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="preprocessor">#define SIZEOF_PTRDIFF_T 8</span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> <span class="comment">/* The size of `size_t', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="preprocessor">#define SIZEOF_SIZE_T 8</span></div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> <span class="comment">/* The size of `unsigned int', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> <span class="preprocessor">#define SIZEOF_UNSIGNED_INT 4</span></div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> <span class="comment">/* The size of `unsigned long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="preprocessor">#define SIZEOF_UNSIGNED_LONG 8</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="comment">/* The size of `unsigned long long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="preprocessor">#define SIZEOF_UNSIGNED_LONG_LONG 8</span></div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="comment">/* The size of `void *', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment">/* #undef SIZEOF_VOID_P */</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> </div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="comment">/* If using the C implementation of alloca, define if you know the</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="comment">   direction of stack growth for your system; otherwise it will be</span></div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="comment">   automatically deduced at runtime.</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="comment">  STACK_DIRECTION > 0 => grows toward higher addresses</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment">  STACK_DIRECTION < 0 => grows toward lower addresses</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment">  STACK_DIRECTION = 0 => direction of growth unknown */</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment">/* #undef STACK_DIRECTION */</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> </div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="comment">/* Define to 1 if you have the ANSI C header files. */</span></div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> <span class="preprocessor">#define STDC_HEADERS 1</span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="comment">/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="preprocessor">#define TIME_WITH_SYS_TIME 1</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="comment">/* Version number of package */</span></div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="preprocessor">#define VERSION "3.2.3"</span></div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="comment">/* Define to empty if `const' does not conform to ANSI C. */</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="comment">/* #undef const */</span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> </div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="comment">/* Define to `__inline__' or `__inline' if that's what the C compiler</span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment">   calls it, or to nothing if 'inline' is not supported under any name.  */</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="preprocessor">#ifndef __cplusplus</span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="preprocessor"></span><span class="comment">/* #undef inline */</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> <span class="comment">/* Define to the equivalent of the C99 'restrict' keyword, or to</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> <span class="comment">   nothing if this is not supported.  Do not define if restrict is</span></div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="comment">   supported directly.  */</span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <span class="preprocessor">#define restrict __restrict</span></div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> <span class="preprocessor"></span><span class="comment">/* Work around a bug in Sun C++: it does not support _Restrict or</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> <span class="comment">   __restrict__, even though the corresponding Sun C compiler ends up with</span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> <span class="comment">   "#define restrict _Restrict" or "#define restrict __restrict__" in the</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <span class="comment">   previous line.  Perhaps some future version of Sun C++ will work with</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="comment">   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="preprocessor">#if defined __SUNPRO_CC && !defined __RESTRICT</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <span class="preprocessor"></span><span class="preprocessor"># define _Restrict</span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="preprocessor"></span><span class="preprocessor"># define __restrict__</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> <span class="comment">/* Define to `unsigned int' if <sys/types.h> does not define. */</span></div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="comment">/* #undef size_t */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/construct__data__2d1d_8c_source.html b/doc/api/html/construct__data__2d1d_8c_source.html
new file mode 100644
index 0000000..724e602
--- /dev/null
+++ b/doc/api/html/construct__data__2d1d_8c_source.html
@@ -0,0 +1,176 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_2d1d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">construct_data_2d1d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: construct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791">   40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791" title="construct makes an 2d-nfft for every slice">construct</a>(<span class="keywordtype">char</span> * file, [...]
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">int</span> j,z;                <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> tmp;             <span class="comment">/* a placeholder */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;      <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   FILE* fp;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   nfft_init_2d(&my_plan,N,N,M/Z);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],&tmp);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   fclose(fp);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   fp=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordflow">for</span>(z=0;z<Z;z++) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     tmp = (double) z;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>       my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = mem[(z*N*N+N*N*Z/2+j)%(N*N*Z)];</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       fprintf(fp,<span class="stringliteral">"%le %le %le %le %le\n"</span>,my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],tmp/Z-0.5,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>               creal(my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]),cimag(my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   fclose(fp);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5">   86</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>(<span class="keywordtype">int</span> N,< [...]
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   fftw_plan plan;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   plan = fftw_plan_many_dft(1, &Z, N*N,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                                   mem, NULL,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                   N*N, 1,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                   mem, NULL,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                                   N*N,1 ,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                                   FFTW_FORWARD, FFTW_ESTIMATE);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   fftw_execute(plan); <span class="comment">/* execute the fft */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f">  104</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f" title="read fills the memory with the file input_data_f.dat as the real part of f and with zeros for the ima.. [...]
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">int</span> i,z;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   FILE* fin;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   fin=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordflow">for</span>(z=0;z<Z;z++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordflow">for</span>(i=0;i<N*N;i++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       fscanf(fin,<span class="stringliteral">"%le "</span>,&real );</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       mem[(z*N*N+N*N*Z/2+i)%(N*N*Z)]=real;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   fclose(fin);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   fftw_complex *mem;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordflow">if</span> (argc <= 4) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     printf(<span class="stringliteral">"usage: ./construct_data FILENAME N M Z\n"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   mem = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f" title="read fills the memory with the file input_data_f.dat as the real part of f and with zeros for the ima...">read_data</a>(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791" title="construct makes an 2d-nfft for every slice">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(mem);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/construct__data__2d_8c_source.html b/doc/api/html/construct__data__2d_8c_source.html
new file mode 100644
index 0000000..4bbd354
--- /dev/null
+++ b/doc/api/html/construct__data__2d_8c_source.html
@@ -0,0 +1,139 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_2d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">construct_data_2d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: construct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">   41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywor [...]
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> j,k;            <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;  <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   FILE* fp;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   FILE* fk;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE* fi;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   nfft_init_2d(&my_plan,N,N,M);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     fscanf(fp,<span class="stringliteral">"%le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   fclose(fp);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   fi=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   fk=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       fscanf(fi,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(N*j+k)] = real;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     fprintf(fk,<span class="stringliteral">"%le %le %le %le\n"</span>,my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],creal(my_plan.<a class [...]
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   fclose(fk);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   fclose(fi);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">if</span> (argc <= 3) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     printf(<span class="stringliteral">"usage: ./construct_data FILENAME N M\n"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]));</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/construct__data__3d_8c_source.html b/doc/api/html/construct__data__3d_8c_source.html
new file mode 100644
index 0000000..7fc65cf
--- /dev/null
+++ b/doc/api/html/construct__data__3d_8c_source.html
@@ -0,0 +1,152 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_3d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">construct_data_3d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: construct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> Z)</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> j,k,l;                <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;        <span class="comment">/* plan for the three dimensional nfft  */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   FILE* fp,*fk;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];      <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="comment">//nfft_init_3d(&my_plan,Z,N,N,M);</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   my_N[0]=Z; my_n[0]=ceil(Z*1.2);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   my_N[2]=N; my_n[2]=ceil(N*1.2);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                       PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*(j)+1],</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>       &my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*(j)+2],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*(j)+0]);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   fclose(fp);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   fp=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   fk=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordflow">for</span>(l=0;l<Z;l++) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       <span class="keywordflow">for</span>(k=0;k<N;k++)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="comment">//fscanf(fp,"%le ",&my_plan.f_hat[(N*N*(Z-l)+N*j+k+N*N*Z/2)%(N*N*Z)][0]);</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         fscanf(fp,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(N*N*l+N*j+k)] = real;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>       fprintf(fk,<span class="stringliteral">"%le %le %le %le %le\n"</span>,my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1],</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2],my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0],creal(my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" tit [...]
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   fclose(fk);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   fclose(fp);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">if</span> (argc <= 4) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     printf(<span class="stringliteral">"usage: ./construct_data FILENAME N M Z\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(argv[1], atoi(argv[2]),atoi(argv[3]),atoi(argv[4]));</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/construct__data__inh__2d1d_8c_source.html b/doc/api/html/construct__data__inh__2d1d_8c_source.html
new file mode 100644
index 0000000..8651639
--- /dev/null
+++ b/doc/api/html/construct__data__inh__2d1d_8c_source.html
@@ -0,0 +1,198 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_inh_2d1d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">construct_data_inh_2d1d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: construct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">   41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywordty [...]
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> j;                  <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> w;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE *fp,*fout,*fi,*finh,*ftime;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">double</span> W,T;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       min_time = time;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       max_time = time;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   fclose(ftime);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       min_inh = w;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       max_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   fclose(finh);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   T=((max_time-min_time)/2.0)/(0.5-((double) m)/N3);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   W=N3/T;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   my_N[0]=N; my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   my_N[2]=N3; my_n[2]=N3;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     fscanf(fp,<span class="stringliteral">"%le %le "</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.t[j]);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     my_plan.t[j] = (my_plan.t[j]-Ts)/T;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   fclose(fp);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   fclose(ftime);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   fclose(finh);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   fi=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     fscanf(fi,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = real*cexp(2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   mri_inh_2d1d_trafo(&my_plan);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   fout=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     fprintf(fout,<span class="stringliteral">"%le %le %le %le\n"</span>,my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],creal(my_p [...]
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   fclose(fout);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   mri_inh_2d1d_finalize(&my_plan);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">if</span> (argc <= 3) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     printf(<span class="stringliteral">"usage: ./construct_data_inh_2d1d FILENAME N M\n"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <a class="code" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/construct__data__inh__3d_8c_source.html b/doc/api/html/construct__data__inh__3d_8c_source.html
new file mode 100644
index 0000000..25c807f
--- /dev/null
+++ b/doc/api/html/construct__data__inh__3d_8c_source.html
@@ -0,0 +1,197 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_inh_3d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">construct_data_inh_3d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: construct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">   41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywordtype"> [...]
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> j;                  <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> w;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE *fp,*fout,*fi,*finh,*ftime;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       min_time = time;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       max_time = time;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   fclose(ftime);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       min_inh = w;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       max_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   fclose(finh);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   W= <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))/(0.5-((double)m)/N3);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   my_N[0]=N; my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   my_N[2]=N3; my_n[2]=ceil(N3*sigma);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     fscanf(fp,<span class="stringliteral">"%le %le"</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2] = (my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]-Ts)*W/N3;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   fclose(fp);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   fclose(ftime);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   fclose(finh);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   fi=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     fscanf(fi,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     my_plan.<a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = real*cexp(2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   mri_inh_3d_trafo(&my_plan);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   fout=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     fprintf(fout,<span class="stringliteral">"%le %le %le %le\n"</span>,my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0],my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1],creal(my_p [...]
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   fclose(fout);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   mri_inh_3d_finalize(&my_plan);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">if</span> (argc <= 3) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     printf(<span class="stringliteral">"usage: ./construct_data_inh_3d FILENAME N M\n"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <a class="code" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]));</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/cycle_8h_source.html b/doc/api/html/cycle_8h_source.html
new file mode 100644
index 0000000..6177f5a
--- /dev/null
+++ b/doc/api/html/cycle_8h_source.html
@@ -0,0 +1,568 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - cycle.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">cycle.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2003, 2007-8 Matteo Frigo</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (c) 2003, 2007-8 Massachusetts Institute of Technology</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * a copy of this software and associated documentation files (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * "Software"), to deal in the Software without restriction, including</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * without limitation the rights to use, copy, modify, merge, publish,</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * distribute, sublicense, and/or sell copies of the Software, and to</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * permit persons to whom the Software is furnished to do so, subject to</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * the following conditions:</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * The above copyright notice and this permission notice shall be</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * included in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/* machine-dependent cycle counters code. Needs to be inlined. */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/***************************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/* To use the cycle counters in your code, simply #include "cycle.h" (this</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">   file), and then use the functions/macros:</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                 ticks getticks(void);</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">   ticks is an opaque typedef defined below, representing the current time.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">   You extract the elapsed time between two calls to gettick() via:</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                 double elapsed(ticks t1, ticks t0);</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">   which returns a double-precision variable in arbitrary units.  You</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">   are not expected to convert this into human units like seconds; it</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">   is intended only for *comparisons* of time intervals.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">   (In order to use some of the OS-dependent timer routines like</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">   Solaris' gethrtime, you need to paste the autoconf snippet below</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">   into your configure.ac file and #include "config.h" before cycle.h,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">   or define the relevant macros manually if you are not using autoconf.)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/***************************************************************************/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/* This file uses macros like HAVE_GETHRTIME that are assumed to be</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   defined according to whether the corresponding function/type/header</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   is available on your system.  The necessary macros are most</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   conveniently defined if you are using GNU autoconf, via the tests:</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">   dnl ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">   AC_C_INLINE</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">   AC_HEADER_TIME</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">   AC_CHECK_HEADERS([sys/time.h c_asm.h intrinsics.h mach/mach_time.h])</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">   AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t is defined in <sys/time.h>])],,[#if HAVE_SYS_TIME_H</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">#include <sys/time.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">#endif])</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time])</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   dnl Cray UNICOS _rtc() (real-time clock) intrinsic</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">   AC_MSG_CHECKING([for _rtc intrinsic])</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">   rtc_ok=yes</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">   AC_TRY_LINK([#ifdef HAVE_INTRINSICS_H</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">#include <intrinsics.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no])</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">   AC_MSG_RESULT($rtc_ok)</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">   dnl ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/***************************************************************************/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor">#if TIME_WITH_SYS_TIME</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor"># include <sys/time.h></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"># include <time.h></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor"># if HAVE_SYS_TIME_H</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#  include <sys/time.h></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span><span class="preprocessor">#  include <time.h></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor">#define INLINE_ELAPSED(INL) static INL double elapsed(ticks t1, ticks t0) \</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">{                   \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">     return (double)t1 - (double)t0;            \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#if 1 == 0</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">/* Solaris */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor">#if defined(HAVE_GETHRTIME) && defined(HAVE_HRTIME_T) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span><span class="keyword">typedef</span> hrtime_t ticks;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor">#define getticks gethrtime</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/* AIX v. 4+ routines to read the real-time clock or time-base register */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">#if defined(HAVE_READ_REAL_TIME) && defined(HAVE_TIME_BASE_TO_TIME) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor"></span><span class="keyword">typedef</span> timebasestruct_t ticks;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>      ticks t;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>      read_real_time(&t, TIMEBASE_SZ);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>      <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keyword">static</span> __inline <span class="keywordtype">double</span> elapsed(ticks t1, ticks t0) <span class="comment">/* time in nanoseconds */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>      time_base_to_time(&t1, TIMEBASE_SZ);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>      time_base_to_time(&t0, TIMEBASE_SZ);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>      <span class="keywordflow">return</span> (((<span class="keywordtype">double</span>)t1.tb_high - (<span class="keywordtype">double</span>)t0.tb_high) * 1.0e9 + </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>        ((<span class="keywordtype">double</span>)t1.tb_low - (<span class="keywordtype">double</span>)t0.tb_low));</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment"> * PowerPC ``cycle'' counter using the time base register.</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">#if ((((defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))) || (defined(__MWERKS__) && defined(macintosh)))) || (defined(__IBM_GCC_ASM) && (defined(__powerpc__) || defined(__ppc__))))  && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tbl, tbu0, tbu1;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>      <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     __asm__ __volatile__ (<span class="stringliteral">"mftbu %0"</span> : <span class="stringliteral">"=r"</span>(tbu0));</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     __asm__ __volatile__ (<span class="stringliteral">"mftb %0"</span> : <span class="stringliteral">"=r"</span>(tbl));</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     __asm__ __volatile__ (<span class="stringliteral">"mftbu %0"</span> : <span class="stringliteral">"=r"</span>(tbu1));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>      } <span class="keywordflow">while</span> (tbu0 != tbu1);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>      <span class="keywordflow">return</span> (((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>)tbu0) << 32) | tbl;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">/* MacOS/Mach (Darwin) time-base register interface (unlike UpTime,</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">   from Carbon, requires no additional libraries to be linked). */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">#if defined(HAVE_MACH_ABSOLUTE_TIME) && defined(HAVE_MACH_MACH_TIME_H) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor"></span><span class="preprocessor">#include <mach/mach_time.h></span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="keyword">typedef</span> uint64_t ticks;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor">#define getticks mach_absolute_time</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor"></span>INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment"> * Pentium cycle counter </span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">#if (defined(__GNUC__) || defined(__ICC)) && defined(__i386__)  && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>      ticks ret;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>      __asm__ __volatile__(<span class="stringliteral">"rdtsc"</span>: <span class="stringliteral">"=A"</span> (ret));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>      <span class="comment">/* no input, nothing else clobbered */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>      <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor"></span><span class="preprocessor">#define TIME_MIN 5000.0   </span><span class="comment">/* unreliable pentium IV cycle counter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">/* Visual C++ -- thanks to Morten Nissov for his help with this */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER >= 1200 && _M_IX86 >= 500 && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keyword">typedef</span> LARGE_INTEGER ticks;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">#define RDTSC __asm __emit 0fh __asm __emit 031h </span><span class="comment">/* hack for VC++ 5.0 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>      ticks retval;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>      __asm {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     RDTSC</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     mov retval.HighPart, edx</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     mov retval.LowPart, eax</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>      }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>      <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keyword">static</span> __inline <span class="keywordtype">double</span> elapsed(ticks t1, ticks t0)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> {  </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>      <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)t1.QuadPart - (double)t0.QuadPart;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> }  </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor"></span><span class="preprocessor">#define TIME_MIN 5000.0   </span><span class="comment">/* unreliable pentium IV cycle counter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment"> * X86-64 cycle counter</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">#if (defined(__GNUC__) || defined(__ICC) || defined(__SUNPRO_C)) && defined(__x86_64__)  && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>      <span class="keywordtype">unsigned</span> a, d; </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>      <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">"rdtsc"</span> : <span class="stringliteral">"=a"</span> (a), <span class="stringliteral">"=d"</span> (d)); </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>      <span class="keywordflow">return</span> ((ticks)a) | (((ticks)d) << 32); </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">/* PGI compiler, courtesy Cristiano Calonaci, Andrea Tarsi, & Roberto Gori.</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment">   NOTE: this code will fail to link unless you use the -Masmkeyword compiler</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">   option (grrr). */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="preprocessor">#if defined(__PGI) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER) </span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="keyword">static</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keyword">asm</span>(<span class="stringliteral">" rdtsc; shl    $0x20,%rdx; mov    %eax,%eax; or     %rdx,%rax;    "</span>);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">/* Visual C++, courtesy of Dirk Michaelis */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER >= 1400 && (defined(_M_AMD64) || defined(_M_X64)) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">#include <intrin.h></span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">#pragma intrinsic(__rdtsc)</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 ticks;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">#define getticks __rdtsc</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor"></span>INLINE_ELAPSED(__inline)</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment"> * IA64 cycle counter</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/* intel's icc/ecc compiler */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor">#if (defined(__EDG_VERSION) || defined(__ECC)) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor">#include <ia64intrin.h></span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>      <span class="keywordflow">return</span> __getReg(_IA64_REG_AR_ITC);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>  </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>  </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">/* gcc */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>      ticks ret;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>      __asm__ __volatile__ (<span class="stringliteral">"mov %0=ar.itc"</span> : <span class="stringliteral">"=r"</span>(ret));</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>      <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment">/* HP/UX IA64 compiler, courtesy Teresa L. Johnson: */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="preprocessor">#if defined(__hpux) && defined(__ia64) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor"></span><span class="preprocessor">#include <machine/sys/inline.h></span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="keyword">static</span> <span class="keyword">inline</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>      ticks ret;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>      ret = _Asm_mov_from_ar (_AREG_ITC);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>      <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">/* Microsoft Visual C++ */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="preprocessor">#if defined(_MSC_VER) && defined(_M_IA64) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 ticks;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="preprocessor">#  ifdef __cplusplus</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor">#  endif</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor"></span>ticks __getReg(<span class="keywordtype">int</span> whichReg);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor">#pragma intrinsic(__getReg)</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>      <span class="keyword">volatile</span> ticks temp;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>      temp = __getReg(3116);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>      <span class="keywordflow">return</span> temp;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment"> * PA-RISC cycle counter </span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="preprocessor">#if defined(__hppa__) || defined(__hppa) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="preprocessor">#  ifdef __GNUC__</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="preprocessor"></span><span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>      ticks ret;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>      __asm__ __volatile__(<span class="stringliteral">"mfctl 16, %0"</span>: <span class="stringliteral">"=r"</span> (ret));</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>      <span class="comment">/* no input, nothing else clobbered */</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>      <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="preprocessor">#  else</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="preprocessor"></span><span class="preprocessor">#  include <machine/inline.h></span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>      <span class="keyword">register</span> ticks ret;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>      _MFCTL(16, ret);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>      <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor">#  endif</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">/* S390, courtesy of James Treacy */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__s390__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>      ticks cycles;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>      __asm__(<span class="stringliteral">"stck 0(%0)"</span> : : <span class="stringliteral">"a"</span> (&(cycles)) : <span class="stringliteral">"memory"</span>, <span class="stringliteral">"cc"</span>);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>      <span class="keywordflow">return</span> cycles;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__alpha__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment"> * The 32-bit cycle counter on alpha overflows pretty quickly, </span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment"> * unfortunately.  A 1GHz machine overflows in 4 seconds.</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ticks;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cc;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>      __asm__ __volatile__ (<span class="stringliteral">"rpcc %0"</span> : <span class="stringliteral">"=r"</span>(cc));</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>      <span class="keywordflow">return</span> (cc & 0xFFFFFFFF);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__sparc_v9__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>      ticks ret;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>      __asm__ __volatile__(<span class="stringliteral">"rd %%tick, %0"</span> : <span class="stringliteral">"=r"</span> (ret));</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>      <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor">#if (defined(__DECC) || defined(__DECCXX)) && defined(__alpha) && defined(HAVE_C_ASM_H) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="preprocessor"></span><span class="preprocessor">#  include <c_asm.h></span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ticks;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> {</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cc;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>      cc = <span class="keyword">asm</span>(<span class="stringliteral">"rpcc %v0"</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>      <span class="keywordflow">return</span> (cc & 0xFFFFFFFF);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> INLINE_ELAPSED(__inline)</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">/* SGI/Irix */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="preprocessor">#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span>timespec ticks;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="keyword">static</span> <span class="keyword">inline</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>      <span class="keyword">struct </span>timespec t;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>      clock_gettime(CLOCK_SGI_CYCLE, &t);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>      <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> elapsed(ticks t1, ticks t0)</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>      <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>)t1.tv_sec - (<span class="keywordtype">double</span>)t0.tv_sec) * 1.0E9 +</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     ((double)t1.tv_nsec - (<span class="keywordtype">double</span>)t0.tv_nsec);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="comment">/* Cray UNICOS _rtc() intrinsic function */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor">#if defined(HAVE__RTC) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_INTRINSICS_H</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="preprocessor"></span><span class="preprocessor">#  include <intrinsics.h></span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor">#define getticks _rtc</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">/* MIPS ZBus */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor">#if defined(HAVE_MIPS_ZBUS_TIMER) && HAVE_MIPS_ZBUS_TIMER</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(__mips__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor"></span><span class="preprocessor">#include <sys/mman.h></span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor">#include <fcntl.h></span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="keyword">typedef</span> uint64_t ticks;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="keyword">static</span> <span class="keyword">inline</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   <span class="keyword">static</span> uint64_t* addr = 0;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   <span class="keywordflow">if</span> (addr == 0)</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     uint32_t rq_addr = 0x10030000;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordtype">int</span> fd;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="keywordtype">int</span> pgsize;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     pgsize = getpagesize();</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     fd = open (<span class="stringliteral">"/dev/mem"</span>, O_RDONLY | O_SYNC, 0);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordflow">if</span> (fd < 0) {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>       perror(<span class="stringliteral">"open"</span>);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     }</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     addr = mmap(0, pgsize, PROT_READ, MAP_SHARED, fd, rq_addr);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     close(fd);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     <span class="keywordflow">if</span> (addr == (uint64_t *)-1) {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       perror(<span class="stringliteral">"mmap"</span>);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     }</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   <span class="keywordflow">return</span> *addr;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> }</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* HAVE_MIPS_ZBUS_TIMER */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html b/doc/api/html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html
new file mode 100644
index 0000000..a0304ea
--- /dev/null
+++ b/doc/api/html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/radon/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">radon Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:inverse__radon_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html">inverse_radon.c</a> <a href="inverse__radon_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:inverse__radon_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based discrete inverse Radon transform. <br/></td></tr>
+<tr class="memitem:radon_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html">radon.c</a> <a href="radon_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:radon_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based discrete Radon transform. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html b/doc/api/html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html
new file mode 100644
index 0000000..c44022f
--- /dev/null
+++ b/doc/api/html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nnfft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nnfft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:accuracy_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>accuracy.c</b> <a href="accuracy_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nnfft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nnfft/simple_test.c</b> <a href="nnfft_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_224fe669cf662e4d4573ba584877a9b9.html b/doc/api/html/dir_224fe669cf662e4d4573ba584877a9b9.html
new file mode 100644
index 0000000..7ed373e
--- /dev/null
+++ b/doc/api/html/dir_224fe669cf662e4d4573ba584877a9b9.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/fastsumS2/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsumS2 Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2fastsumS2_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/fastsumS2/doxygen.h</b> <a href="applications_2fastsumS2_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsumS2_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fastsumS2.c</b> <a href="fastsumS2_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_23ec12649285f9fabf3a6b7380226c28.html b/doc/api/html/dir_23ec12649285f9fabf3a6b7380226c28.html
new file mode 100644
index 0000000..5905d25
--- /dev/null
+++ b/doc/api/html/dir_23ec12649285f9fabf3a6b7380226c28.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - util/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_23ec12649285f9fabf3a6b7380226c28.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">util Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:util_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>util.c</b> <a href="util_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_25564cacf5a7ef2ec915d9f7b609853e.html b/doc/api/html/dir_25564cacf5a7ef2ec915d9f7b609853e.html
new file mode 100644
index 0000000..137f617
--- /dev/null
+++ b/doc/api/html/dir_25564cacf5a7ef2ec915d9f7b609853e.html
@@ -0,0 +1,53 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nfsft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:kernel_2nfsft_2api_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>kernel/nfsft/api.h</b> <a href="kernel_2nfsft_2api_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:legendre_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>legendre.c</b> <a href="legendre_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:legendre_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>legendre.h</b> <a href="legendre_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="nfsft_8c.html">nfsft.c</a> <a href="nfsft_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:nfsft_8c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation file for the NFSFT module. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_390363ac6c75087990c53a11ba2c3b15.html b/doc/api/html/dir_390363ac6c75087990c53a11ba2c3b15.html
new file mode 100644
index 0000000..1a14578
--- /dev/null
+++ b/doc/api/html/dir_390363ac6c75087990c53a11ba2c3b15.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nsfft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nsfft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nsfft__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nsfft_test.c</b> <a href="nsfft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nsfft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nsfft/simple_test.c</b> <a href="nsfft_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_58759e03702cf5d3134868f6de633189.html b/doc/api/html/dir_58759e03702cf5d3134868f6de633189.html
new file mode 100644
index 0000000..fc11062
--- /dev/null
+++ b/doc/api/html/dir_58759e03702cf5d3134868f6de633189.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/solver/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">solver Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:solver_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html">solver.c</a> <a href="solver_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:solver_8c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation file for the solver module. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_6409bbb6ca4d9fdb6de069951c273365.html b/doc/api/html/dir_6409bbb6ca4d9fdb6de069951c273365.html
new file mode 100644
index 0000000..f67f603
--- /dev/null
+++ b/doc/api/html/dir_6409bbb6ca4d9fdb6de069951c273365.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nfct/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_6409bbb6ca4d9fdb6de069951c273365.html">nfct</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfct Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfct_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfct.c</b> <a href="nfct_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html b/doc/api/html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html
new file mode 100644
index 0000000..8f81322
--- /dev/null
+++ b/doc/api/html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/polarFFT/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">polarFFT Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2polarFFT_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/polarFFT/doxygen.h</b> <a href="applications_2polarFFT_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:linogram__fft__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="linogram__fft__test_8c.html">linogram_fft_test.c</a> <a href="linogram__fft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:linogram__fft__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based pseudo-polar FFT and inverse. <br/></td></tr>
+<tr class="memitem:mpolar__fft__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="mpolar__fft__test_8c.html">mpolar_fft_test.c</a> <a href="mpolar__fft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:mpolar__fft__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT and inverse on modified polar grid. <br/></td></tr>
+<tr class="memitem:polar__fft__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="polar__fft__test_8c.html">polar_fft_test.c</a> <a href="polar__fft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:polar__fft__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT and inverse. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html b/doc/api/html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html
new file mode 100644
index 0000000..b41e54f
--- /dev/null
+++ b/doc/api/html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/util/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">util Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:bessel__i0_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>bessel_i0.c</b> <a href="bessel__i0_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:error_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>error.c</b> <a href="error_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:float_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>float.c</b> <a href="float_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:int_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>int.c</b> <a href="int_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:lambda_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>lambda.c</b> <a href="lambda_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:malloc_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>malloc.c</b> <a href="malloc_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinc_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinc.c</b> <a href="sinc_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_7af51a00587982c04b08a156fa91c254.html b/doc/api/html/dir_7af51a00587982c04b08a156fa91c254.html
new file mode 100644
index 0000000..434decb
--- /dev/null
+++ b/doc/api/html/dir_7af51a00587982c04b08a156fa91c254.html
@@ -0,0 +1,51 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/solver/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">solver Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:examples_2solver_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>examples/solver/doxygen.h</b> <a href="examples_2solver_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:glacier_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>glacier.c</b> <a href="glacier_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:solver_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>solver/simple_test.c</b> <a href="solver_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_7bc5b4c2d8fedbf49abc178849c07704.html b/doc/api/html/dir_7bc5b4c2d8fedbf49abc178849c07704.html
new file mode 100644
index 0000000..3389c09
--- /dev/null
+++ b/doc/api/html/dir_7bc5b4c2d8fedbf49abc178849c07704.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/fpt/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7bc5b4c2d8fedbf49abc178849c07704.html">fpt</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fpt Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fpt_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fpt/simple_test.c</b> <a href="fpt_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_7eb6ea3471917cbff788e1046aaeac44.html b/doc/api/html/dir_7eb6ea3471917cbff788e1046aaeac44.html
new file mode 100644
index 0000000..76d274d
--- /dev/null
+++ b/doc/api/html/dir_7eb6ea3471917cbff788e1046aaeac44.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nfft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7eb6ea3471917cbff788e1046aaeac44.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft.c</b> <a href="nfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_899180af8ae9527aed19a2e763253fcc.html b/doc/api/html/dir_899180af8ae9527aed19a2e763253fcc.html
new file mode 100644
index 0000000..1539593
--- /dev/null
+++ b/doc/api/html/dir_899180af8ae9527aed19a2e763253fcc.html
@@ -0,0 +1,57 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/mri/mri2d/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri2d Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:construct__data__2d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>construct_data_2d.c</b> <a href="construct__data__2d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:construct__data__inh__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>construct_data_inh_2d1d.c</b> <a href="construct__data__inh__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:construct__data__inh__3d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>construct_data_inh_3d.c</b> <a href="construct__data__inh__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:applications_2mri_2mri2d_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/mri/mri2d/doxygen.h</b> <a href="applications_2mri_2mri2d_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__2d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_2d.c</b> <a href="reconstruct__data__2d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:mri2d_2reconstruct__data__gridding_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>mri2d/reconstruct_data_gridding.c</b> <a href="mri2d_2reconstruct__data__gridding_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__inh__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_inh_2d1d.c</b> <a href="reconstruct__data__inh__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__inh__3d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_inh_3d.c</b> <a href="reconstruct__data__inh__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__inh__nnfft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_inh_nnfft.c</b> <a href="reconstruct__data__inh__nnfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_8c2550e038f78045c202418cbfa07f80.html b/doc/api/html/dir_8c2550e038f78045c202418cbfa07f80.html
new file mode 100644
index 0000000..81cc4fc
--- /dev/null
+++ b/doc/api/html/dir_8c2550e038f78045c202418cbfa07f80.html
@@ -0,0 +1,60 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nfft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:flags_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="flags_8c.html">flags.c</a> <a href="flags_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:flags_8c"><td class="mdescLeft"> </td><td class="mdescRight">Testing the nfft. <br/></td></tr>
+<tr class="memitem:ndft__fast_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="ndft__fast_8c.html">ndft_fast.c</a> <a href="ndft__fast_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:ndft__fast_8c"><td class="mdescLeft"> </td><td class="mdescRight">Testing ndft, Horner-like ndft, and fully precomputed ndft. <br/></td></tr>
+<tr class="memitem:nfft__benchomp_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft_benchomp.c</b> <a href="nfft__benchomp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft__benchomp__createdataset_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft_benchomp_createdataset.c</b> <a href="nfft__benchomp__createdataset_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft__benchomp__detail_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft_benchomp_detail.c</b> <a href="nfft__benchomp__detail_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft__times_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft_times.c</b> <a href="nfft__times_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft/simple_test.c</b> <a href="nfft_2simple__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft_2simple__test__threads_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft/simple_test_threads.c</b> <a href="nfft_2simple__test__threads_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:taylor__nfft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html">taylor_nfft.c</a> <a href="taylor__nfft_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:taylor__nfft_8c"><td class="mdescLeft"> </td><td class="mdescRight">Testing the nfft againt a Taylor expansion based version. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html b/doc/api/html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html
new file mode 100644
index 0000000..a456a48
--- /dev/null
+++ b/doc/api/html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nfct/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d4f17a3806fad624168c14bf0ea2fb4.html">nfct</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfct Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfct_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfct/simple_test.c</b> <a href="nfct_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_8d554148c8057b12dc5cb11ef005c62c.html b/doc/api/html/dir_8d554148c8057b12dc5cb11ef005c62c.html
new file mode 100644
index 0000000..66b6c9e
--- /dev/null
+++ b/doc/api/html/dir_8d554148c8057b12dc5cb11ef005c62c.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nfsoft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d554148c8057b12dc5cb11ef005c62c.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsoft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfsoft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsoft/simple_test.c</b> <a href="nfsoft_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html b/doc/api/html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html
new file mode 100644
index 0000000..c53adea
--- /dev/null
+++ b/doc/api/html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nfsoft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsoft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfsoft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsoft.c</b> <a href="nfsoft_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:wigner_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>wigner.c</b> <a href="wigner_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:wigner_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html">wigner.h</a> <a href="wigner_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:wigner_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for functions related to Wigner-d/D functions. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_a42734e8bce3bbae48210591d0fac63c.html b/doc/api/html/dir_a42734e8bce3bbae48210591d0fac63c.html
new file mode 100644
index 0000000..9a80c89
--- /dev/null
+++ b/doc/api/html/dir_a42734e8bce3bbae48210591d0fac63c.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nsfft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a42734e8bce3bbae48210591d0fac63c.html">nsfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nsfft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nsfft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nsfft.c</b> <a href="nsfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_a6d8c0f9045568178601abc26c60f91f.html b/doc/api/html/dir_a6d8c0f9045568178601abc26c60f91f.html
new file mode 100644
index 0000000..86bc80c
--- /dev/null
+++ b/doc/api/html/dir_a6d8c0f9045568178601abc26c60f91f.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/mri/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a6d8c0f9045568178601abc26c60f91f.html">mri</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:mri_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>mri.c</b> <a href="mri_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html b/doc/api/html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html
new file mode 100644
index 0000000..5ed8d71
--- /dev/null
+++ b/doc/api/html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html
@@ -0,0 +1,60 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">applications Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html">fastgauss</a></td></tr>
+<tr class="memitem:dir_ac1c8221356786b534ab925d360822d4"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></td></tr>
+<tr class="memitem:dir_224fe669cf662e4d4573ba584877a9b9"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></td></tr>
+<tr class="memitem:dir_e198b4faa999927a1ae92d03d5f1f5e6"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></td></tr>
+<tr class="memitem:dir_fcbc4f55ac8dbf86a30b1d7535946c2d"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></td></tr>
+<tr class="memitem:dir_697d3e9fc07ca8e2f36d15eea53bc2fc"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></td></tr>
+<tr class="memitem:dir_deedd863ca11d55d683e9872da0f56e1"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></td></tr>
+<tr class="memitem:dir_0c7f2452bc84fa0fc4195fb15953ec53"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2doxygen_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/doxygen.c</b> <a href="applications_2doxygen_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_ac1c8221356786b534ab925d360822d4.html b/doc/api/html/dir_ac1c8221356786b534ab925d360822d4.html
new file mode 100644
index 0000000..7b7bd82
--- /dev/null
+++ b/doc/api/html/dir_ac1c8221356786b534ab925d360822d4.html
@@ -0,0 +1,63 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/fastsum/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fastsum_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum_8c.html">fastsum.c</a> <a href="fastsum_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum_8c"><td class="mdescLeft"> </td><td class="mdescRight">Fast NFFT-based summation algorithm. <br/></td></tr>
+<tr class="memitem:fastsum_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum_8h.html">fastsum.h</a> <a href="fastsum_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for the fast NFFT-based summation algorithm. <br/></td></tr>
+<tr class="memitem:fastsum__benchomp_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fastsum_benchomp.c</b> <a href="fastsum__benchomp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsum__benchomp__createdataset_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fastsum_benchomp_createdataset.c</b> <a href="fastsum__benchomp__createdataset_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsum__benchomp__detail_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fastsum_benchomp_detail.c</b> <a href="fastsum__benchomp__detail_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsum__matlab_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum__matlab_8c.html">fastsum_matlab.c</a> <a href="fastsum__matlab_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum__matlab_8c"><td class="mdescLeft"> </td><td class="mdescRight">Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m. <br/></td></tr>
+<tr class="memitem:fastsum__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum__test_8c.html">fastsum_test.c</a> <a href="fastsum__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">Simple test program for the fast NFFT-based summation algorithm. <br/></td></tr>
+<tr class="memitem:kernels_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="kernels_8c.html">kernels.c</a> <a href="kernels_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:kernels_8c"><td class="mdescLeft"> </td><td class="mdescRight">File with predefined kernels for the fast summation algorithm. <br/></td></tr>
+<tr class="memitem:kernels_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="kernels_8h.html">kernels.h</a> <a href="kernels_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:kernels_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file with predefined kernels for the fast summation algorithm. <br/></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_d28a4824dc47e487b107a5db32ef43c4.html b/doc/api/html/dir_d28a4824dc47e487b107a5db32ef43c4.html
new file mode 100644
index 0000000..6308821
--- /dev/null
+++ b/doc/api/html/dir_d28a4824dc47e487b107a5db32ef43c4.html
@@ -0,0 +1,61 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">examples Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_7bc5b4c2d8fedbf49abc178849c07704"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7bc5b4c2d8fedbf49abc178849c07704.html">fpt</a></td></tr>
+<tr class="memitem:dir_8d4f17a3806fad624168c14bf0ea2fb4"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8d4f17a3806fad624168c14bf0ea2fb4.html">nfct</a></td></tr>
+<tr class="memitem:dir_8c2550e038f78045c202418cbfa07f80"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></td></tr>
+<tr class="memitem:dir_e6016a3bd4e6017d6b851aae5334ffd2"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></td></tr>
+<tr class="memitem:dir_8d554148c8057b12dc5cb11ef005c62c"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8d554148c8057b12dc5cb11ef005c62c.html">nfsoft</a></td></tr>
+<tr class="memitem:dir_fa65d2cfa17fd1e7f6091ef3f0c886ac"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html">nfst</a></td></tr>
+<tr class="memitem:dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></td></tr>
+<tr class="memitem:dir_390363ac6c75087990c53a11ba2c3b15"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></td></tr>
+<tr class="memitem:dir_7af51a00587982c04b08a156fa91c254"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:examples_2doxygen_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>examples/doxygen.c</b> <a href="examples_2doxygen_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/api/html/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 0000000..b594ea0
--- /dev/null
+++ b/doc/api/html/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -0,0 +1,59 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - include/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">include Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:include_2api_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>include/api.h</b> <a href="include_2api_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>config.h</b> <a href="config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:cycle_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cycle.h</b> <a href="cycle_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:infft_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>infft.h</b> <a href="infft_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft3_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html">nfft3.h</a> <a href="nfft3_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft3conf_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfft3conf.h</b> <a href="nfft3conf_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft3util_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3util_8h.html">nfft3util.h</a> <a href="nfft3util_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:nfft3util_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for utility functions used by the nfft3 library. <br/></td></tr>
+<tr class="memitem:solver__adjoint_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html">solver_adjoint.h</a> <a href="solver__adjoint_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:solver__adjoint_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for adjoint solver. <br/></td></tr>
+<tr class="memitem:ticks_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>ticks.h</b> <a href="ticks_8h_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html b/doc/api/html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html
new file mode 100644
index 0000000..7373688
--- /dev/null
+++ b/doc/api/html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nfst/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d46f6e04c6f21c2dce6558b4c13d80de.html">nfst</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfst Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfst_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfst.c</b> <a href="nfst_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_d47b87128a15c0ce57cf8f363265bec1.html b/doc/api/html/dir_d47b87128a15c0ce57cf8f363265bec1.html
new file mode 100644
index 0000000..5f34fe8
--- /dev/null
+++ b/doc/api/html/dir_d47b87128a15c0ce57cf8f363265bec1.html
@@ -0,0 +1,51 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/fpt/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fpt Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fpt_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html">fpt.c</a> <a href="fpt_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fpt_8c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation file for the FPT module. <br/></td></tr>
+<tr class="memitem:fpt_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fpt.h</b> <a href="fpt_8h_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_dc43877d82dd332f9fb2071fcca799d6.html b/doc/api/html/dir_dc43877d82dd332f9fb2071fcca799d6.html
new file mode 100644
index 0000000..cdcd79f
--- /dev/null
+++ b/doc/api/html/dir_dc43877d82dd332f9fb2071fcca799d6.html
@@ -0,0 +1,59 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">kernel Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_d47b87128a15c0ce57cf8f363265bec1"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></td></tr>
+<tr class="memitem:dir_a6d8c0f9045568178601abc26c60f91f"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_a6d8c0f9045568178601abc26c60f91f.html">mri</a></td></tr>
+<tr class="memitem:dir_6409bbb6ca4d9fdb6de069951c273365"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6409bbb6ca4d9fdb6de069951c273365.html">nfct</a></td></tr>
+<tr class="memitem:dir_7eb6ea3471917cbff788e1046aaeac44"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7eb6ea3471917cbff788e1046aaeac44.html">nfft</a></td></tr>
+<tr class="memitem:dir_25564cacf5a7ef2ec915d9f7b609853e"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></td></tr>
+<tr class="memitem:dir_8f3c7156d7272f1462551f3a6c5fabd1"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></td></tr>
+<tr class="memitem:dir_d46f6e04c6f21c2dce6558b4c13d80de"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d46f6e04c6f21c2dce6558b4c13d80de.html">nfst</a></td></tr>
+<tr class="memitem:dir_ea25627ea6e0d39c26e4e31bca7b94c4"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ea25627ea6e0d39c26e4e31bca7b94c4.html">nnfft</a></td></tr>
+<tr class="memitem:dir_a42734e8bce3bbae48210591d0fac63c"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_a42734e8bce3bbae48210591d0fac63c.html">nsfft</a></td></tr>
+<tr class="memitem:dir_58759e03702cf5d3134868f6de633189"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></td></tr>
+<tr class="memitem:dir_7ab5cd9d6a44db3bf3b807f89e50cefe"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_deedd863ca11d55d683e9872da0f56e1.html b/doc/api/html/dir_deedd863ca11d55d683e9872da0f56e1.html
new file mode 100644
index 0000000..6a1b8f1
--- /dev/null
+++ b/doc/api/html/dir_deedd863ca11d55d683e9872da0f56e1.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/quadratureS2/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quadratureS2 Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2quadratureS2_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/quadratureS2/doxygen.h</b> <a href="applications_2quadratureS2_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:quadratureS2_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>quadratureS2.c</b> <a href="quadratureS2_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html b/doc/api/html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html
new file mode 100644
index 0000000..547c1e8
--- /dev/null
+++ b/doc/api/html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/iterS2/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">iterS2 Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2iterS2_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/iterS2/doxygen.h</b> <a href="applications_2iterS2_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:iterS2_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>iterS2.c</b> <a href="iterS2_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html b/doc/api/html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html
new file mode 100644
index 0000000..379566d
--- /dev/null
+++ b/doc/api/html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html
@@ -0,0 +1,53 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nfsft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfsft__benchomp_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsft_benchomp.c</b> <a href="nfsft__benchomp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft__benchomp__createdataset_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsft_benchomp_createdataset.c</b> <a href="nfsft__benchomp__createdataset_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft__benchomp__detail_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsft_benchomp_detail.c</b> <a href="nfsft__benchomp__detail_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsft/simple_test.c</b> <a href="nfsft_2simple__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft_2simple__test__threads_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfsft/simple_test_threads.c</b> <a href="nfsft_2simple__test__threads_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html b/doc/api/html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html
new file mode 100644
index 0000000..fc50652
--- /dev/null
+++ b/doc/api/html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernel/nnfft/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_ea25627ea6e0d39c26e4e31bca7b94c4.html">nnfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nnfft Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nnfft_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nnfft.c</b> <a href="nnfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html b/doc/api/html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html
new file mode 100644
index 0000000..66c6099
--- /dev/null
+++ b/doc/api/html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/fastgauss/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html">fastgauss</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastgauss Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fastgauss_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>fastgauss.c</b> <a href="fastgauss_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html b/doc/api/html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html
new file mode 100644
index 0000000..91fb826
--- /dev/null
+++ b/doc/api/html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - examples/nfst/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html">nfst</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfst Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfst_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>nfst/simple_test.c</b> <a href="nfst_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_fb8678d426210fc305fe5dfd30a163a5.html b/doc/api/html/dir_fb8678d426210fc305fe5dfd30a163a5.html
new file mode 100644
index 0000000..21dd559
--- /dev/null
+++ b/doc/api/html/dir_fb8678d426210fc305fe5dfd30a163a5.html
@@ -0,0 +1,54 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/mri/mri3d/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri3d Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:construct__data__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>construct_data_2d1d.c</b> <a href="construct__data__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:construct__data__3d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>construct_data_3d.c</b> <a href="construct__data__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:applications_2mri_2mri3d_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/mri/mri3d/doxygen.h</b> <a href="applications_2mri_2mri3d_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_2d1d.c</b> <a href="reconstruct__data__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__3d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_3d.c</b> <a href="reconstruct__data__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:mri3d_2reconstruct__data__gridding_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>mri3d/reconstruct_data_gridding.c</b> <a href="mri3d_2reconstruct__data__gridding_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html b/doc/api/html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html
new file mode 100644
index 0000000..a4a89ca
--- /dev/null
+++ b/doc/api/html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html
@@ -0,0 +1,54 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - applications/mri/ Directory Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_899180af8ae9527aed19a2e763253fcc"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></td></tr>
+<tr class="memitem:dir_fb8678d426210fc305fe5dfd30a163a5"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2mri_2doxygen_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>applications/mri/doxygen.c</b> <a href="applications_2mri_2doxygen_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/doxygen.css b/doc/api/html/doxygen.css
new file mode 100644
index 0000000..c023715
--- /dev/null
+++ b/doc/api/html/doxygen.css
@@ -0,0 +1,360 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV 
+{
+	font-family: Geneva, Arial, Helvetica, sans-serif;	
+	color: #000000;
+}
+
+BODY,TD 
+{
+       font-size: 90%;
+}
+
+H1 
+{
+	text-align: center;
+  font-size: 160%;
+}
+
+H1nc 
+{
+       font-size: 210%;
+}
+
+H2 
+{
+       font-size: 120%;
+}
+
+H3 
+{
+       font-size: 100%;
+}
+
+CAPTION 
+{ 
+  font-weight: bold 
+}
+
+a
+{
+  color: #000000;
+  text-decoration: none;
+}
+
+div.qindex {
+	width: 97%;
+	color: #FFFFFF;
+	background-color: #177665;
+  border-left: 20px solid #7FACA2;	
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+
+DIV.nav {
+	width: 100%;
+	background-color: #177665;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navtab {
+       background-color: #177665;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+
+a.qindex:link 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindex:visited 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindex:focus 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindex:hover 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindex:active 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+
+a.qindexHL:link 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindexHL:visited 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindexHL:focus 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindexHL:hover 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindexHL:active 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: Fixed, monospace;
+       font-size: 95%;
+}
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+       background-color: #F4F4FB;
+       color: #606060;
+	font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #BFDCD2;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #7FACA2;
+}
+TD.indexvalue {
+	background-color: #BFDCD2;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #7FACA2;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplParams {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+       color: #606060;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #eeeeff;
+}
+TD.tiny      { font-size: 75%;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #b0b0b0;
+}
+TH.dirtab { background: #eeeeff;
+            font-weight: bold;
+}
+HR { height: 1px;
+     border: none;
+     border-top: 1px solid black;
+}
+
+ul {
+  padding-top:0px;
+  padding-bottom:0px;
+  margin:0px;
+}
diff --git a/doc/api/html/doxygen.png b/doc/api/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
Binary files /dev/null and b/doc/api/html/doxygen.png differ
diff --git a/doc/api/html/dynsections.js b/doc/api/html/dynsections.js
new file mode 100644
index 0000000..116542f
--- /dev/null
+++ b/doc/api/html/dynsections.js
@@ -0,0 +1,78 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function(){ 
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.attr('src','ftv2folderopen.png');
+      a.attr('src','ftv2mnode.png');
+      $(this).show();
+    } else if (l==level+1) {
+      i.attr('src','ftv2folderclosed.png');
+      a.attr('src','ftv2pnode.png');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+function toggleFolder(id) 
+{
+  var n = $('[id^=row_'+id+']');
+  var i = $('[id^=img_'+id+']');
+  var a = $('[id^=arr_'+id+']');
+  var c = n.slice(1);
+  if (c.filter(':first').is(':visible')===true) {
+    i.attr('src','ftv2folderclosed.png');
+    a.attr('src','ftv2pnode.png');
+    c.hide();
+  } else {
+    i.attr('src','ftv2folderopen.png');
+    a.attr('src','ftv2mnode.png');
+    c.show();
+  }
+  updateStripes();
+}
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/doc/api/html/error_8c_source.html b/doc/api/html/error_8c_source.html
new file mode 100644
index 0000000..a344dcf
--- /dev/null
+++ b/doc/api/html/error_8c_source.html
@@ -0,0 +1,213 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - error.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">error.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="keyword">static</span> R cnrm1(<span class="keyword">const</span> C *x, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>   INT k;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>   R nrm = K(0.0);</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>   <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>     nrm += CABS(x[k]);</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordflow">return</span> nrm;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">static</span> R nrm1(<span class="keyword">const</span> R *x, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   R nrm = K(0.0);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>     nrm += FABS(x[k]);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordflow">return</span> nrm;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> }</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> R cerr2(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> {</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   R err = K(0.0);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       err += CONJ(x[k]) * x[k];</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   }</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>       err += CONJ(x[k]-y[k]) * (x[k]-y[k]);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordflow">return</span> SQRT(err);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> R err2(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   R err = K(0.0);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       err += x[k]*x[k];</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>       err += (x[k]-y[k]) * (x[k]-y[k]);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordflow">return</span> SQRT(err);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> R cerri(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   R err = K(0.0), t;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       t = CABS(x[k]);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       err = MAX(err, t);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       t = CABS(x[k] - y[k]);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       err = MAX(err, t);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keyword">static</span> R erri(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   R err = K(0.0), t;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       t = FABS(x[k]);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>       err = MAX(err, t);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       t = FABS(x[k] - y[k]);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       err = MAX(err, t);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> R X(error_l_infty_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">return</span> (cerri(x, y, n)/cerri(x, 0, n));</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> R X(error_l_infty_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">return</span> (erri(x, y, n)/erri(x, 0, n));</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> R X(error_l_infty_1_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keyword">const</span> C *z, <span class="keyword">const</span> INT m)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordflow">return</span> (cerri(x, y, n)/cnrm1(z, m));</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> R X(error_l_infty_1_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n, <span class="keyword">const</span> R *z,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keyword">const</span> INT m)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">return</span> (erri(x, y, n)/nrm1(z, m));</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> R X(error_l_2_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">return</span> (cerr2(x, y, n)/cerr2(x, 0, n));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> R X(error_l_2_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">return</span> (err2(x, y, n)/err2(x, NULL, n));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/examples_2doxygen_8c_source.html b/doc/api/html/examples_2doxygen_8c_source.html
new file mode 100644
index 0000000..8c0487a
--- /dev/null
+++ b/doc/api/html/examples_2doxygen_8c_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">examples/doxygen.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/examples_2solver_2doxygen_8h_source.html b/doc/api/html/examples_2solver_2doxygen_8h_source.html
new file mode 100644
index 0000000..7b371ef
--- /dev/null
+++ b/doc/api/html/examples_2solver_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - doxygen.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">examples/solver/doxygen.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastgauss_8c_source.html b/doc/api/html/fastgauss_8c_source.html
new file mode 100644
index 0000000..1939c09
--- /dev/null
+++ b/doc/api/html/fastgauss_8c_source.html
@@ -0,0 +1,518 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastgauss.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html">fastgauss</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastgauss.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fastgauss.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">  #include <complex.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc">   48</a></span> <span class="preprocessor">#define DGT_PRE_CEXP     (1U<< 0)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e">   59</a></span> <span class="preprocessor">#define FGT_NDFT         (1U<< 1)</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga39c3e544a78853e0da2b9a8c66d3054d">   69</a></span> <span class="preprocessor">#define FGT_APPROX_B     (1U<< 2)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="structfgt__plan.html">   72</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">   74</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>;                                </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">   75</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>;                                </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">   77</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>;                </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">   78</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>;                    </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">   80</a></span>   <span class="keywordtype">unsigned</span> flags;                       </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">   83</a></span>   <span class="keywordtype">double</span> _Complex <a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>;                 </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">   85</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>;                            </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">   86</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>;                            </div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">   88</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>;             </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">   90</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>;                                </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">   91</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>;                             </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">   93</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>;                    </div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">   95</a></span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> *<a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>;                    </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">   96</a></span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> *<a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>;                    </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> } <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80">  107</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>[j] = 0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordflow">for</span>(j=0,l=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++,l++)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>[j] += ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>[k]*ths-><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>[l];</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordflow">for</span>(j=0; j<ths->M; j++)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>       <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>[j] += ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>[k]*cexp(-ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>*(ths-><a class= [...]
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>           (ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]-ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[k]));</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0">  132</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e" title="If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform...">FGT_NDFT</a [...]
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       nfft_adjoint_direct(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       <span class="keywordflow">for</span>(l=0; l<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; l++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[l] *= ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion c [...]
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       nfft_trafo_direct(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       nfft_adjoint(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       <span class="keywordflow">for</span>(l=0; l<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; l++)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[l] *= ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion c [...]
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff">  170</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths, <span clas [...]
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>        <span class="keywordtype">double</span> p, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordtype">int</span> j,n_fftw;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   fftw_plan fplan;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a> = M;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a> = N;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a> = sigma;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> = flags;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>*<span class="keyword">sizeof</span>(<span [...]
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*<span class="keyword">sizeof</span>(<span [...]
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>*<span class="keyword">siz [...]
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*<span class="keyword">sizeof</ [...]
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a> = n;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a> = p;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>*<span class="keyword">sizeof</sp [...]
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   n_fftw=X(next_power_of_2)(2*ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   nfft_init_guru(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>, 1, &(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>), ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>, &n_fftw, m, PRE_PH [...]
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                  PRE_PSI| MALLOC_X| MALLOC_F_HAT| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   nfft_init_guru(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>, 1, &(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>), ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, &n_fftw, m, PRE_PH [...]
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                  PRE_PSI| MALLOC_X| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">npl [...]
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga39c3e544a78853e0da2b9a8c66d3054d" title="If this flag is set, the discrete Fourier coefficients of the uniformly sampled Gaussian are used ins...">FGT_APPROX_ [...]
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>       fplan = fftw_plan_dft_1d(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>, ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, FFTW_FORWARD,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                                FFTW_MEASURE);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; j++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>[j] = cexp(-ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt_ [...]
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                           ((<span class="keywordtype">double</span>)ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>*ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>)) / ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degre [...]
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, 1, &ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       fftw_execute(fplan);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, 1, &ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; j++)</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>[j] = 1.0/ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a> * csqrt(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/ths-><a class [...]
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     cexp(-<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*(j-ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>/2)*(j-ths- [...]
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>          (ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65">  240</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths, <span class=" [...]
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordtype">double</span> p;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   p=0.5+sqrt(-log(eps)/creal(sigma));</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   <span class="keywordflow">if</span>(p<1)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     p=1;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   n=2*((int)ceil(p*cabs(sigma)/<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a> * sqrt(-log(eps)/creal(sigma))));</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordflow">if</span>(N*M<=((<span class="keywordtype">int</span>)(1U<<20)))</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(ths, N, M, sigma, n, p, 7, <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(ths, N, M, sigma, n, p, 7, 0);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc">  263</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss t [...]
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>)</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>      ths-><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*ths-><a cla [...]
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>             <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>      <span class="keywordflow">for</span>(j=0,l=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>        <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++,l++)</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>          ths-><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>[l]=cexp(-ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>*(ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]-ths-><a  [...]
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                                 (ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]-ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[k]));</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>    }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[j]/ths-><a class=" [...]
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">for</span>(j=0; j<ths->nplan2->M_total; j++)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]/ths-><a class=" [...]
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     nfft_precompute_psi(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     nfft_precompute_psi(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83">  295</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   nfft_finalize(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   nfft_finalize(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57">  318</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++)</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[k] = (<span class="keywordtype">double</span>)rand()/(2.0*RAND_MAX)-1.0/4.0;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j] = (<span class="keywordtype">double</span>)rand()/(2.0*RAND_MAX)-1.0/4.0;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++)</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>[k] =   (<span class="keywordtype">double</span>)rand()/(RAND_MAX)-1.0/2.0</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>             + _Complex_I*(<span class="keywordtype">double</span>)rand()/(RAND_MAX)-I/2.0;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960">  341</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss trans [...]
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordtype">double</span> t_out;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   <span class="keywordtype">double</span> tau=0.01;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   t_out=0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   r=0;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="keywordflow">while</span>(t_out<tau)</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       r++;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       t0 = getticks();</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       <span class="keywordflow">if</span> (dgt)</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(ths);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(ths);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       t1 = getticks();</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       t_out += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   t_out/=r;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="keywordflow">return</span> t_out;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227">  375</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227" title="Simple example that computes fast and discrete Gauss transforms.">fgt_test_simple</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class [...]
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <a class="code" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a>(&my_plan, N, M, sigma, eps);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>,<span class="stringliteral [...]
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>,<span class="stringliteral [...]
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   printf(<span class="stringliteral">"\n relative error: %1.3e\n"</span>, X(error_l_infty_1_complex)(swap_dgt,</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>          my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>, my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="struct [...]
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_dgt);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f">  410</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f" title="Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree...">fgt_test_andersson</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> {</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <span class="keywordtype">double</span> _Complex sigma=4*(138+ _Complex_I*100);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <span class="keywordtype">int</span> n=128;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordtype">int</span> N_dgt_pre_exp=(int)(1U<<11);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   <span class="keywordtype">int</span> N_dgt=(int)(1U<<19);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   printf(<span class="stringliteral">"n=%d, sigma=%1.3e+i%1.3e\n"</span>,n,creal(sigma),cimag(sigma));</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordflow">for</span>(N=((<span class="keywordtype">int</span>)(1U<<6)); N<((int)(1U<<22)); N=N<<1)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>       printf(<span class="stringliteral">"$%d$\t & "</span>,N);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, N, sigma, n, 1, 7, <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PR [...]
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, N, sigma, n, 1, 7, 0);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                 <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>       <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>       <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>       <span class="keywordflow">if</span>(N<N_dgt)</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>           <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>           <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 1));</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>           <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>           <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   }</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   printf(<span class="stringliteral">"\t\t & "</span>);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 1));</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   printf(<span class="stringliteral">"\t\t & "</span>);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e" title="If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform...">FGT_NDFT</a>;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>       printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 0));</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e" title="If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform...">FGT_NDFT</a>;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 0));</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       printf(<span class="stringliteral">"$%1.1e$\t \\\\ \n"</span>,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>        X(error_l_infty_1_complex)(swap_dgt, my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>, my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>             my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>));</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       fflush(stdout);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_dgt);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>       fftw_cleanup();</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946">  481</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946" title="Compares accuracy of the fast Gauss transform with increasing expansion degree.">fgt_test_error</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   <span class="keywordtype">int</span> n,mi;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   <span class="keywordtype">double</span> _Complex sigma=4*(138+ _Complex_I*100);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   <span class="keywordtype">int</span> N=1000;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   <span class="keywordtype">int</span> M=1000;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   <span class="keywordtype">int</span> m[2]={7,3};</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   printf(<span class="stringliteral">"N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n"</span>,N,M,creal(sigma),cimag(sigma));</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   printf(<span class="stringliteral">"error=[\n"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   <span class="keywordflow">for</span>(n=8; n<=128; n+=4)</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       printf(<span class="stringliteral">"%d\t"</span>,n);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>       <span class="keywordflow">for</span>(mi=0;mi<2;mi++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>           <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, M, sigma, n, 1, m[mi], 0);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>           <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>           <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>           <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>           <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>           <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>           <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>           printf(<span class="stringliteral">"%1.3e\t"</span>, X(error_l_infty_1_complex)(swap_dgt, my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                  my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>));</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>           fflush(stdout);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>           <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>           fftw_cleanup();</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>         }</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   printf(<span class="stringliteral">"];\n"</span>);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_dgt);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b">  532</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b" title="Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodis...">fgt_test_error_p</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   <span class="keywordtype">int</span> n,pi;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   <span class="keywordtype">double</span> _Complex sigma=20+40*_Complex_I;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   <span class="keywordtype">int</span> N=1000;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   <span class="keywordtype">int</span> M=1000;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   <span class="keywordtype">double</span> p[3]={1,1.5,2};</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   printf(<span class="stringliteral">"N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n"</span>,N,M,creal(sigma),cimag(sigma));</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   printf(<span class="stringliteral">"error=[\n"</span>);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   <span class="keywordflow">for</span>(n=8; n<=128; n+=4)</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>       printf(<span class="stringliteral">"%d\t"</span>,n);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       <span class="keywordflow">for</span>(pi=0;pi<3;pi++)</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>           <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, M, sigma, n, p[pi], 7, 0);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>           <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>           <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>           <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>           <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>           <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>           <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>           printf(<span class="stringliteral">"%1.3e\t"</span>, X(error_l_infty_1_complex)(swap_dgt, my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                  my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>));</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>           fflush(stdout);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>           <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>           fftw_cleanup();</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         }</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     }</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   printf(<span class="stringliteral">"];\n"</span>);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> }</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga3c04138a5bfe5d72780bb7e82a18e627">  580</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   <span class="keywordflow">if</span>(argc!=2)</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     {</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>       fprintf(stderr,<span class="stringliteral">"fastgauss type\n"</span>);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>       fprintf(stderr,<span class="stringliteral">" type\n"</span>);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       fprintf(stderr,<span class="stringliteral">"  0 - Simple test.\n"</span>);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       fprintf(stderr,<span class="stringliteral">"  1 - Compares accuracy and execution time.\n"</span>);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       fprintf(stderr,<span class="stringliteral">"      Pipe to output_andersson.tex\n"</span>);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       fprintf(stderr,<span class="stringliteral">"  2 - Compares accuracy.\n"</span>);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>       fprintf(stderr,<span class="stringliteral">"      Pipe to output_error.m\n"</span>);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>       fprintf(stderr,<span class="stringliteral">"  3 - Compares accuracy.\n"</span>);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>       fprintf(stderr,<span class="stringliteral">"      Pipe to output_error_p.m\n"</span>);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     }</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <a class="code" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227" title="Simple example that computes fast and discrete Gauss transforms.">fgt_test_simple</a>(10, 10, 5+3*_Complex_I, 0.001);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     <a class="code" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f" title="Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree...">fgt_test_andersson</a>();</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   <span class="keywordflow">if</span>(atoi(argv[1])==2)</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     <a class="code" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946" title="Compares accuracy of the fast Gauss transform with increasing expansion degree.">fgt_test_error</a>();</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="keywordflow">if</span>(atoi(argv[1])==3)</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     <a class="code" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b" title="Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodis...">fgt_test_error_p</a>();</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsumS2_8c_source.html b/doc/api/html/fastsumS2_8c_source.html
new file mode 100644
index 0000000..b051acc
--- /dev/null
+++ b/doc/api/html/fastsumS2_8c_source.html
@@ -0,0 +1,884 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsumS2.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsumS2.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fastsumS2.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* NFFT3 utilities */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/* Fourier-Legendre coefficients for Abel-Poisson kernel */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#define SYMBOL_ABEL_POISSON(k,h) (pow(h,k))</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* Fourier-Legendre coefficients for singularity kernel */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#define SYMBOL_SINGULARITY(k,h) ((2.0/(2*k+1))*pow(h,k))</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* Flags for the different kernel functions */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e">   53</a></span> <span class="preprocessor">#define KT_ABEL_POISSON (0)</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814">   55</a></span> <span class="preprocessor">#define KT_SINGULARITY  (1)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306">   57</a></span> <span class="preprocessor">#define KT_LOC_SUPP     (2)</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39">   59</a></span> <span class="preprocessor">#define KT_GAUSSIAN     (3)</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#gad09943f93b91eb526d8081a4963eead8">   62</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__fastsumS2__test.html#gad09943f93b91eb526d8081a4963eead8" title="Enumeration type for yes/no/both-type parameters.">pvalue</a> {NO = 0, YES = 1, BOTH = 2};</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93">   78</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the  standard inner product between two vectors on the unit sphere  given in spher [...]
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> phi2, <span class="keyword">const</span> <span class="keywordtype">double</span> theta2)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">double</span> pi2theta1 = PI2*theta1, pi2theta2 = PI2*theta2;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordflow">return</span> (cos(pi2theta1)*cos(pi2theta2)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     + sin(pi2theta1)*sin(pi2theta2)*cos(PI2*(phi1-phi2)));</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314">   97</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314" title="Evaluates the Poisson kernel  at a node .">poissonKernel</a>(<span class="keyword">const</s [...]
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">return</span> (1.0/(PI4))*((1.0-h)*(1.0+h))/pow(sqrt(1.0-2.0*h*x+h*h),3.0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d">  113</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d" title="Evaluates the singularity kernel  at a node .">singularityKernel</a>(<span class="keyword"> [...]
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">return</span> (1.0/(PI2))/sqrt(1.0-2.0*h*x+h*h);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063">  131</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063" title="Evaluates the locally supported kernel  at a node .">locallySupportedKernel</a>(<span class [...]
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordflow">return</span> (x<=h)?(0.0):(pow((x-h),lambda));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7">  149</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7" title="Evaluates the spherical Gaussian kernel  at a node .">gaussianKernel</a>(<span class="keywo [...]
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    <span class="keywordflow">return</span> exp(2.0*sigma*(x-1.0));</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627">  164</a></span> <span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordtype">double</span> **p;                  <span class="comment">/* The array containing the parameter sets     *</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">                                * for the kernel functions                    */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordtype">int</span> *m;                      <span class="comment">/* The array containing the cut-off degrees M  */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordtype">int</span> **ld;                    <span class="comment">/* The array containing the numbers of source  *</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">                                * and target nodes, L and D                   */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordtype">int</span> ip;                      <span class="comment">/* Index variable for p                        */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordtype">int</span> im;                      <span class="comment">/* Index variable for m                        */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordtype">int</span> ild;                     <span class="comment">/* Index variable for l                        */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordtype">int</span> ipp;                     <span class="comment">/* Index for kernel parameters                 */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordtype">int</span> ip_max;                  <span class="comment">/* The maximum index for p                     */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordtype">int</span> im_max;                  <span class="comment">/* The maximum index for m                     */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordtype">int</span> ild_max;                 <span class="comment">/* The maximum index for l                     */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="keywordtype">int</span> ipp_max;                 <span class="comment">/* The maximum index for ip                    */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordtype">int</span> tc_max;                  <span class="comment">/* The number of testcases                     */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordtype">int</span> m_max;                   <span class="comment">/* The maximum cut-off degree M for the        *</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">                                * current dataset                             */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keywordtype">int</span> l_max;                   <span class="comment">/* The maximum number of source nodes L for    *</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">                                * the current dataset                         */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keywordtype">int</span> d_max;                   <span class="comment">/* The maximum number of target nodes D for    *</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">                                * the current dataset                         */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordtype">long</span> ld_max_prec;            <span class="comment">/* The maximum number of source and target     *</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">                                * nodes for precomputation multiplied         */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordtype">long</span> l_max_prec;             <span class="comment">/* The maximum number of source nodes for      *</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">                                * precomputation                              */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordtype">int</span> tc;                      <span class="comment">/* Index variable for testcases                */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="keywordtype">int</span> kt;                      <span class="comment">/* The kernel function                         */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordtype">int</span> cutoff;                  <span class="comment">/* The current NFFT cut-off parameter          */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordtype">double</span> threshold;            <span class="comment">/* The current NFSFT threshold parameter       */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordtype">double</span> t_d;                  <span class="comment">/* Time for direct algorithm in seconds        */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordtype">double</span> t_dp;                 <span class="comment">/* Time for direct algorithm with              *</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">                                  precomputation in seconds                   */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordtype">double</span> t_fd;                 <span class="comment">/* Time for fast direct algorithm in seconds   */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordtype">double</span> t_f;                  <span class="comment">/* Time for fast algorithm in seconds          */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordtype">double</span> temp;                 <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   <span class="keywordtype">double</span> err_f;                <span class="comment">/* Error E_infty for fast algorithm            */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordtype">double</span> err_fd;               <span class="comment">/* Error E_\infty for fast direct algorithm    */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   ticks t0, t1;                <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordtype">int</span> precompute = NO;         <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   fftw_complex *ptr;         <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordtype">double</span>* steed;               <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   fftw_complex *b;           <span class="comment">/* The weights (b_l)_{l=0}^{L-1}               */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   fftw_complex *f_hat;       <span class="comment">/* The spherical Fourier coefficients          */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   fftw_complex *a;           <span class="comment">/* The Fourier-Legendre coefficients           */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordtype">double</span> *xi;                  <span class="comment">/* Target nodes                                */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordtype">double</span> *eta;                 <span class="comment">/* Source nodes                                */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   fftw_complex *f_m;         <span class="comment">/* Approximate function values                 */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   fftw_complex *f;           <span class="comment">/* Exact function values                       */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   fftw_complex *prec = NULL; <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;             <span class="comment">/* NFSFT plan                                  */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan_adjoint;     <span class="comment">/* adjoint NFSFT plan                          */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordtype">int</span> i;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordtype">int</span> k;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordtype">int</span> n;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordtype">int</span> d;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordtype">int</span> l;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordtype">int</span> use_nfsft;               <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordtype">int</span> use_nfft;                <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordtype">int</span> use_fpt;                 <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordtype">int</span> rinc;                    <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordtype">double</span> constant;             <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="comment">/* Read the number of testcases. */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   fscanf(stdin,<span class="stringliteral">"testcases=%d\n"</span>,&tc_max);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   fprintf(stdout,<span class="stringliteral">"%d\n"</span>,tc_max);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordflow">for</span> (tc = 0; tc < tc_max; tc++)</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="comment">/* Check if the fast transform shall be used. */</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     fscanf(stdin,<span class="stringliteral">"nfsft=%d\n"</span>,&use_nfsft);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       <span class="comment">/* Check if the NFFT shall be used. */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       fscanf(stdin,<span class="stringliteral">"nfft=%d\n"</span>,&use_nfft);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfft);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       <span class="keywordflow">if</span> (use_nfft != NO)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         <span class="comment">/* Read the cut-off parameter. */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         fscanf(stdin,<span class="stringliteral">"cutoff=%d\n"</span>,&cutoff);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         fprintf(stdout,<span class="stringliteral">"%d\n"</span>,cutoff);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         cutoff = 1;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="comment">/* Check if the fast polynomial transform shall be used. */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>       fscanf(stdin,<span class="stringliteral">"fpt=%d\n"</span>,&use_fpt);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_fpt);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>       <span class="comment">/* Read the NFSFT threshold parameter. */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       fscanf(stdin,<span class="stringliteral">"threshold=%lf\n"</span>,&threshold);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       fprintf(stdout,<span class="stringliteral">"%lf\n"</span>,threshold);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       <span class="comment">/* Set dummy values. */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>       cutoff = 3;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       threshold = 1000000000000.0;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="comment">/* Initialize bandwidth bound. */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     m_max = 0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="comment">/* Initialize source nodes bound. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     l_max = 0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="comment">/* Initialize target nodes bound. */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     d_max = 0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="comment">/* Initialize source nodes bound for precomputation. */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     l_max_prec = 0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="comment">/* Initialize source and target nodes bound for precomputation. */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     ld_max_prec = 0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="comment">/* Read the kernel type. This is one of KT_ABEL_POISSON, KT_SINGULARITY,</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">     * KT_LOC_SUPP and KT_GAUSSIAN. */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     fscanf(stdin,<span class="stringliteral">"kernel=%d\n"</span>,&kt);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,kt);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="comment">/* Read the number of parameter sets. */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     fscanf(stdin,<span class="stringliteral">"parameter_sets=%d\n"</span>,&ip_max);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ip_max);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="comment">/* Allocate memory for pointers to parameter sets. */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     p = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ip_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="comment">/* We now read in the parameter sets. */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="comment">/* Read number of parameters. */</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     fscanf(stdin,<span class="stringliteral">"parameters=%d\n"</span>,&ipp_max);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ipp_max);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordflow">for</span> (ip = 0; ip < ip_max; ip++)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       <span class="comment">/* Allocate memory for the parameters. */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       p[ip] = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ipp_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>       <span class="comment">/* Read the parameters. */</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       <span class="keywordflow">for</span> (ipp = 0; ipp < ipp_max; ipp++)</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         <span class="comment">/* Read the next parameter. */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         fscanf(stdin,<span class="stringliteral">"%lf\n"</span>,&p[ip][ipp]);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         fprintf(stdout,<span class="stringliteral">"%lf\n"</span>,p[ip][ipp]);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="comment">/* Read the number of cut-off degrees. */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     fscanf(stdin,<span class="stringliteral">"bandwidths=%d\n"</span>,&im_max);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,im_max);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     m = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(im_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="comment">/* Read the cut-off degrees. */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">for</span> (im = 0; im < im_max; im++)</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       <span class="comment">/* Read cut-off degree. */</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       fscanf(stdin,<span class="stringliteral">"%d\n"</span>,&m[im]);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,m[im]);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       m_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(m_max,m[im]);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="comment">/* Read number of node specifications. */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     fscanf(stdin,<span class="stringliteral">"node_sets=%d\n"</span>,&ild_max);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ild_max);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     ld = (<span class="keywordtype">int</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ild_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>*));</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="comment">/* Read the run specification. */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">for</span> (ild = 0; ild < ild_max; ild++)</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>       <span class="comment">/* Allocate memory for the run parameters. */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       ld[ild] = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       <span class="comment">/* Read number of source nodes. */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       fscanf(stdin,<span class="stringliteral">"L=%d "</span>,&ld[ild][0]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][0]);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       l_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(l_max,ld[ild][0]);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       <span class="comment">/* Read number of target nodes. */</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       fscanf(stdin,<span class="stringliteral">"D=%d "</span>,&ld[ild][1]);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][1]);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       d_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(d_max,ld[ild][1]);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>       <span class="comment">/* Determine whether direct and fast algorithm shall be compared. */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       fscanf(stdin,<span class="stringliteral">"compare=%d "</span>,&ld[ild][2]);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][2]);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       <span class="comment">/* Check if precomputation for the direct algorithm is used. */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       <span class="keywordflow">if</span> (ld[ild][2] == YES)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         <span class="comment">/* Read whether the precomputed version shall also be used. */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         fscanf(stdin,<span class="stringliteral">"precomputed=%d\n"</span>,&ld[ild][3]);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][3]);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         <span class="comment">/* Read the number of repetitions over which measurements are</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">         * averaged. */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         fscanf(stdin,<span class="stringliteral">"repetitions=%d\n"</span>,&ld[ild][4]);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>         fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][4]);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         <span class="comment">/* Update ld_max_prec and l_max_prec. */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         <span class="keywordflow">if</span> (ld[ild][3] == YES)</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>           <span class="comment">/* Update ld_max_prec. */</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>           ld_max_prec = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(ld_max_prec,ld[ild][0]*ld[ild][1]);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>           <span class="comment">/* Update l_max_prec. */</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>           l_max_prec = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(l_max_prec,ld[ild][0]);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>           <span class="comment">/* Turn on the precomputation for the direct algorithm. */</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>           precompute = YES;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>       {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         <span class="comment">/* Set default value for the number of repetitions. */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>         ld[ild][4] = 1;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       }</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="comment">/* Allocate memory for data structures. */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     b = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(l_max*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     eta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*l_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     f_hat = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(m_max)*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     a = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((m_max+1)*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     xi = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*d_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     f_m = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d_max*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     f = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d_max*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="comment">/* Allocate memory for precomputed data. */</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordflow">if</span> (precompute == YES)</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>       prec = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ld_max_prec*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     }</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="comment">/* Generate random source nodes and weights. */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">for</span> (l = 0; l < l_max; l++)</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       b[l] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       eta[2*l] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       eta[2*l+1] = acos(2.0*(((<span class="keywordtype">double</span>)rand())/RAND_MAX) - 1.0)/(PI2);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     }</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="comment">/* Generate random target nodes. */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="keywordflow">for</span> (d = 0; d < d_max; d++)</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>       xi[2*d] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>       xi[2*d+1] = acos(2.0*(((<span class="keywordtype">double</span>)rand())/RAND_MAX) - 1.0)/(PI2);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="comment">/* Do precomputation. */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     nfsft_precompute(m_max,threshold,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>       ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U<span class="comment">/*NFSFT_NO_DIRECT_ALGORITHM*/</span>)), 0U);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="comment">/* Process all parameter sets. */</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">for</span> (ip = 0; ip < ip_max; ip++)</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       <span class="comment">/* Compute kernel coeffcients up to the maximum cut-off degree m_max. */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>       <span class="keywordflow">switch</span> (kt)</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>       {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e" title="Abel-Poisson kernel.">KT_ABEL_POISSON</a>:</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>           <span class="comment">/* Compute Fourier-Legendre coefficients for the Poisson kernel. */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>           <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>             a[k] = SYMBOL_ABEL_POISSON(k,p[ip][0]);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814" title="Singularity kernel.">KT_SINGULARITY</a>:</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>           <span class="comment">/* Compute Fourier-Legendre coefficients for the singularity</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="comment">           * kernel. */</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>           <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             a[k] = SYMBOL_SINGULARITY(k,p[ip][0]);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>:</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>           <span class="comment">/* Compute Fourier-Legendre coefficients for the locally supported</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">           * kernel. */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>           a[0] = 1.0;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>           <span class="keywordflow">if</span> (1 <= m_max)</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>             a[1] = ((p[ip][1]+1+p[ip][0])/(p[ip][1]+2.0))*a[0];</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>           <span class="keywordflow">for</span> (k = 2; k <= m_max; k++)</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>             a[k] = (1.0/(k+p[ip][1]+1))*((2*k-1)*p[ip][0]*a[k-1] -</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>               (k-p[ip][1]-2)*a[k-2]);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39" title="Gaussian kernel.">KT_GAUSSIAN</a>:</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>           <span class="comment">/* Fourier-Legendre coefficients */</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>           steed = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((m_max+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>           <a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a" title="Calculates the modified bessel function , possibly scaled by , for real non-negative  with ...">nfft_smbi</a>(2.0*p[ip][0],0.5,m_max+1,2,steed);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>           <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>             a[k] = PI2*(sqrt(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/p[ip][0]))*steed[k];</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(steed);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>       }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>       <span class="comment">/* Normalize Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>       <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>         a[k] *= (2*k+1)/(PI4);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       <span class="comment">/* Process all node sets. */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       <span class="keywordflow">for</span> (ild = 0; ild < ild_max; ild++)</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>         <span class="comment">/* Check if the fast algorithm shall be used. */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>         <span class="keywordflow">if</span> (ld[ild][2] != NO)</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>         {</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>           <span class="comment">/* Check if the direct algorithm with precomputation should be</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="comment">           * tested. */</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>           <span class="keywordflow">if</span> (ld[ild][3] != NO)</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>           {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>             <span class="comment">/* Get pointer to start of data. */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>             ptr = prec;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>             <span class="comment">/* Calculate increment from one row to the next. */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             rinc = l_max_prec-ld[ild][0];</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>             <span class="comment">/* Process al target nodes. */</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>             <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>             {</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>               <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>               <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>               {</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                 <span class="comment">/* Compute inner product between current source and target</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="comment">                 * node. */</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                 temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the  standard inner product between two vectors on the unit sphere  given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                 <span class="comment">/* Switch by the kernel type. */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                 <span class="keywordflow">switch</span> (kt)</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                 {</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                   <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e" title="Abel-Poisson kernel.">KT_ABEL_POISSON</a>:</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                     <span class="comment">/* Evaluate the Poisson kernel for the current value. */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                     *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314" title="Evaluates the Poisson kernel  at a node .">poissonKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                   <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814" title="Singularity kernel.">KT_SINGULARITY</a>:</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                     <span class="comment">/* Evaluate the singularity kernel for the current</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="comment">                     * value. */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                     *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d" title="Evaluates the singularity kernel  at a node .">singularityKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                   <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>:</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                      <span class="comment">/* Evaluate the localized kernel for the current</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="comment">                      * value. */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                     *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063" title="Evaluates the locally supported kernel  at a node .">locallySupportedKernel</a>(temp,p[ip][0],p[ip][1]);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>                     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>                     <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39" title="Gaussian kernel.">KT_GAUSSIAN</a>:</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                        <span class="comment">/* Evaluate the spherical Gaussian kernel for the current</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">                        * value. */</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                       *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7" title="Evaluates the spherical Gaussian kernel  at a node .">gaussianKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                 }</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>               }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>               <span class="comment">/* Increment pointer for next row. */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>               ptr += rinc;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>             }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>             <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>             t_dp = 0.0;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>             <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>             t0 = getticks();</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>             <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>             <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>               <span class="comment">/* Reset pointer to start of precomputed data. */</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>               ptr = prec;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>               <span class="comment">/* Calculate increment from one row to the next. */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>               rinc = l_max_prec-ld[ild][0];</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>               <span class="comment">/* Check if the localized kernel is used. */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>               <span class="keywordflow">if</span> (kt == <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>               {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                 <span class="comment">/* Perform final summation */</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>                 <span class="comment">/* Calculate the multiplicative constant. */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                 constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                 <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                 <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                 {</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                   <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>                   f[d] = 0.0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>                   <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>                   <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>                     f[d] += b[l]*(*ptr++);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                   <span class="comment">/* Multiply with the constant. */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>                   f[d] *= constant;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                   <span class="comment">/* Proceed to next row. */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                   ptr += rinc;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                 }</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>               }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>               <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>               {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>                 <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>                 <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>                 {</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>                   <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>                   f[d] = 0.0;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                   <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                   <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                     f[d] += b[l]*(*ptr++);</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                   <span class="comment">/* Proceed to next row. */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                   ptr += rinc;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                 }</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>               }</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>             }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>             <span class="comment">/* Calculate the time needed. */</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>             t1 = getticks();</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>             t_dp = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>             <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>             t_dp = t_dp/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>           }</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>           {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>             <span class="comment">/* Initialize cumulative time variable with dummy value. */</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>             t_dp = -1.0;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>           }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>           <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>           t_d = 0.0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>           <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>           t0 = getticks();</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>           <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>           <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>           {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>             <span class="comment">/* Switch by the kernel type. */</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>             <span class="keywordflow">switch</span> (kt)</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>             {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>               <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e" title="Abel-Poisson kernel.">KT_ABEL_POISSON</a>:</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                 <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>                 <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                 {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>                   <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>                   f[d] = 0.0;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>                   <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>                   <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                   {</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                     <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">                     * target nodes. */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>                     temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the  standard inner product between two vectors on the unit sphere  given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>                     <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment">                     * to the result. */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>                     f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314" title="Evaluates the Poisson kernel  at a node .">poissonKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>                   }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>                 }</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>               <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814" title="Singularity kernel.">KT_SINGULARITY</a>:</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>                 <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                 <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>                 {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                   <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                   f[d] = 0.0;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                   <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                   <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                   {</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                     <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="comment">                     * target nodes. */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                     temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the  standard inner product between two vectors on the unit sphere  given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                     <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> <span class="comment">                     * to the result. */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                     f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d" title="Evaluates the singularity kernel  at a node .">singularityKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                   }</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                 }</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>               <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>:</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                 <span class="comment">/* Calculate the multiplicative constant. */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                 constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                 <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                 <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                 {</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                   <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                   f[d] = 0.0;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                   <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                   <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                   {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                     <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="comment">                     * target nodes. */</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                     temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the  standard inner product between two vectors on the unit sphere  given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                     <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> <span class="comment">                     * to the result. */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                     f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063" title="Evaluates the locally supported kernel  at a node .">locallySupportedKernel</a>(temp,p[ip][0],p[ip][1]);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                   }</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                   <span class="comment">/* Multiply result with constant. */</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                   f[d] *= constant;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                 }</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                 <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39" title="Gaussian kernel.">KT_GAUSSIAN</a>:</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                   <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                   <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                   {</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                     <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                     f[d] = 0.0;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                     <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                     <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                     {</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                       <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="comment">                       * target nodes. */</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>                       temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the  standard inner product between two vectors on the unit sphere  given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>                       <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">                       * to the result. */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>                       f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7" title="Evaluates the spherical Gaussian kernel  at a node .">gaussianKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>                     }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>                   }</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>             }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>           }</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>           <span class="comment">/* Calculate and add the time needed. */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>           t1 = getticks();</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>           t_d = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>           <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>           t_d = t_d/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>         }</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>         {</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>           <span class="comment">/* Initialize cumulative time variable with dummy value. */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>           t_d = -1.0;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>           t_dp = -1.0;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         <span class="comment">/* Initialize error and cumulative time variables for the fast</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> <span class="comment">         * algorithm. */</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>         err_fd = -1.0;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         err_f = -1.0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>         t_fd = -1.0;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>         t_f = -1.0;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         <span class="comment">/* Process all cut-off bandwidths. */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>         <span class="keywordflow">for</span> (im = 0; im < im_max; im++)</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>         {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>           <span class="comment">/* Init transform plans. */</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>           nfsft_init_guru(&plan_adjoint, m[im],ld[ild][0],</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>             ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>             ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>             PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>             FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>           nfsft_init_guru(&plan,m[im],ld[ild][1],</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>             ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>             ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>             PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>             FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>              cutoff);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>           plan_adjoint.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>           plan_adjoint.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = eta;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>           plan_adjoint.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = b;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>           plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>           plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = xi;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>           plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_m;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>           nfsft_precompute_x(&plan_adjoint);</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>           nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>           <span class="comment">/* Check if direct algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>           <span class="keywordflow">if</span> (use_nfsft == BOTH)</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>           {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>             <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>             t_fd = 0.0;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>             <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>             t0 = getticks();</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>             <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>             <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>             {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>               <span class="comment">/* Execute adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>               nfsft_adjoint_direct(&plan_adjoint);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>               <span class="comment">/* Multiplication with the Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>               <span class="keywordflow">for</span> (k = 0; k <= m[im]; k++)</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>                 <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                   f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>               <span class="comment">/* Execute direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>               nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>             }</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>             <span class="comment">/* Calculate and add the time needed. */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>             t1 = getticks();</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>             t_fd = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>             <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             t_fd = t_fd/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>             <span class="comment">/* Check if error E_infty should be computed. */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>             <span class="keywordflow">if</span> (ld[ild][2] != NO)</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>             {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>               <span class="comment">/* Compute the error E_infinity. */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>               err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                 ld[ild][0]);</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>             }</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>           }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>           <span class="comment">/* Check if the fast NFSFT algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>           <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>           {</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             <span class="comment">/* Initialize cumulative time variable for the NFSFT algorithm. */</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>             t_f = 0.0;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>           }</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>           {</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>             <span class="comment">/* Initialize cumulative time variable for the direct NDSFT</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="comment">             * algorithm. */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>             t_fd = 0.0;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>           }</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>           <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>           t0 = getticks();</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>           <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>           <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>           {</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>             <span class="comment">/* Check if the fast NFSFT algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>             <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>             {</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>               <span class="comment">/* Execute the adjoint NFSFT transformation. */</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>               nfsft_adjoint(&plan_adjoint);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>             }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>             {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>               <span class="comment">/* Execute the adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>               nfsft_adjoint_direct(&plan_adjoint);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>             }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>             <span class="comment">/* Multiplication with the Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>             <span class="keywordflow">for</span> (k = 0; k <= m[im]; k++)</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>               <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>                 f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             <span class="comment">/* Check if the fast NFSFT algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             {</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>               <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>               nfsft_trafo(&plan);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>             }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>             {</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>               <span class="comment">/* Execute the NDSFT transformation. */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>               nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>             }</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>           }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>           <span class="comment">/* Check if the fast NFSFT algorithm has been used. */</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>           t1 = getticks();</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>           <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>             t_f = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>             t_fd = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>           <span class="comment">/* Check if the fast NFSFT algorithm has been used. */</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>           <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>           {</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>             <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>             t_f = t_f/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>           }</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>           {</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>             <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>             t_fd = t_fd/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>           }</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>           <span class="comment">/* Check if error E_infty should be computed. */</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>           <span class="keywordflow">if</span> (ld[ild][2] != NO)</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>           {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>             <span class="comment">/* Check if the fast NFSFT algorithm has been used. */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>             <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>             {</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>               <span class="comment">/* Compute the error E_infinity. */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>               err_f = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>                 ld[ild][0]);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>             }</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>             {</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>               <span class="comment">/* Compute the error E_infinity. */</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>               err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>                 ld[ild][0]);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>             }</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>           }</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>           <span class="comment">/* Print out the error measurements. */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>           fprintf(stdout,<span class="stringliteral">"%e\n%e\n%e\n%e\n%e\n%e\n\n"</span>,t_d,t_dp,t_fd,t_f,err_fd,</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>             err_f);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>           <span class="comment">/* Finalize the NFSFT plans */</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>           nfsft_finalize(&plan_adjoint);</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>           nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>         } <span class="comment">/* for (im = 0; im < im_max; im++) - Process all cut-off</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="comment">           * bandwidths.*/</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>       } <span class="comment">/* for (ild = 0; ild < ild_max; ild++) - Process all node sets. */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     } <span class="comment">/* for (ip = 0; ip < ip_max; ip++) - Process all parameter sets. */</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="comment">/* Delete precomputed data. */</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     nfsft_forget();</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     <span class="comment">/* Check if memory for precomputed data of the matrix K has been</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> <span class="comment">     * allocated. */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="keywordflow">if</span> (precompute == YES)</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>       <span class="comment">/* Free memory for precomputed matrix K. */</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(prec);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     }</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="comment">/* Free data arrays. */</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_m);</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(xi);</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(eta);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a);</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(b);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     <span class="comment">/* Free memory for node sets. */</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     <span class="keywordflow">for</span> (ild = 0; ild < ild_max; ild++)</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ld[ild]);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ld);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     <span class="comment">/* Free memory for cut-off bandwidths. */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(m);</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     <span class="comment">/* Free memory for parameter sets. */</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     <span class="keywordflow">for</span> (ip = 0; ip < ip_max; ip++)</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(p[ip]);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(p);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>   } <span class="comment">/* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   <span class="comment">/* Return exit code for successful run. */</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> }</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum_8c.html b/doc/api/html/fastsum_8c.html
new file mode 100644
index 0000000..1398953
--- /dev/null
+++ b/doc/api/html/fastsum_8c.html
@@ -0,0 +1,138 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Fast NFFT-based summation algorithm.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "<a class="el" href="fastsum_8h_source.html">fastsum.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+</div>
+<p><a href="fastsum_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga37a2a7cb4fb162d6e6e46ea614318a4e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a> (int a, int b)</td></tr>
+<tr class="memdesc:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="mdescLeft"> </td><td class="mdescRight">max <br/></td></tr>
+<tr class="memitem:ga6fd3e84b794684dd1c6236619437bf09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6fd3e84b794684dd1c6236619437bf09"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fak</a> (int n)</td></tr>
+<tr class="memdesc:ga6fd3e84b794684dd1c6236619437bf09"><td class="mdescLeft"> </td><td class="mdescRight">factorial <br/></td></tr>
+<tr class="memitem:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae767db8af0cbe9244cfbd0580b0bb9f4"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">binom</a> (int n, int m)</td></tr>
+<tr class="memdesc:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="mdescLeft"> </td><td class="mdescRight">binomial coefficient <br/></td></tr>
+<tr class="memitem:ga0c4b940daf11ebe201355f43f26cddd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0c4b940daf11ebe201355f43f26cddd0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">BasisPoly</a> (int m, int r, double xx)</td></tr>
+<tr class="memdesc:ga0c4b940daf11ebe201355f43f26cddd0"><td class="mdescLeft"> </td><td class="mdescRight">basis polynomial for regularized kernel <br/></td></tr>
+<tr class="memitem:ga247527ab67657107225fa69882f0208c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga247527ab67657107225fa69882f0208c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">regkern</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga247527ab67657107225fa69882f0208c"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B smooth to zero <br/></td></tr>
+<tr class="memitem:gaf022589be0533270b476edc9b78928f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf022589be0533270b476edc9b78928f1"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">regkern1</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:gaf022589be0533270b476edc9b78928f1"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B periodized (used in 1D) <br/></td></tr>
+<tr class="memitem:ga461376a86ecb935b74e7bfa4c86275d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga461376a86ecb935b74e7bfa4c86275d9"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">regkern2</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga461376a86ecb935b74e7bfa4c86275d9"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored <br/></td></tr>
+<tr class="memitem:ga2077aec7b505fd6bf082c28cc5d59468"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2077aec7b505fd6bf082c28cc5d59468"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">regkern3</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga2077aec7b505fd6bf082c28cc5d59468"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD, d>1) <br/></td></tr>
+<tr class="memitem:gae23df7b1c09c2955895545e164bc9e99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae23df7b1c09c2955895545e164bc9e99"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">linintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gae23df7b1c09c2955895545e164bc9e99"><td class="mdescLeft"> </td><td class="mdescRight">linear spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gabad684b95fbab7d2c039bec72bff712e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabad684b95fbab7d2c039bec72bff712e"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>quadrintkern</b> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memitem:ga67103860c05f7296f7c302e7f0dbfe79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67103860c05f7296f7c302e7f0dbfe79"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">kubintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:ga67103860c05f7296f7c302e7f0dbfe79"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gad527763b180de164610e55a704c69116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad527763b180de164610e55a704c69116"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">kubintkern1</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gad527763b180de164610e55a704c69116"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with arbitrary kernels <br/></td></tr>
+<tr class="memitem:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7d3d3786f2e799dc1fa1704281f4a3fe"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">quicksort</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="mdescLeft"> </td><td class="mdescRight">quicksort algorithm for source knots and associated coefficients <br/></td></tr>
+<tr class="memitem:ga8237ee0c81a2518c4849e71317a479d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8237ee0c81a2518c4849e71317a479d0"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">BuildBox</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga8237ee0c81a2518c4849e71317a479d0"><td class="mdescLeft"> </td><td class="mdescRight">initialize box-based search data structures <br/></td></tr>
+<tr class="memitem:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga15df6167d1d2dd375cb81e81a969cf9d"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">calc_SearchBox</a> (int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)</td></tr>
+<tr class="memdesc:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="mdescLeft"> </td><td class="mdescRight">inner computation function for box-based near field correction <br/></td></tr>
+<tr class="memitem:gae5d00a6d73390cc05d73aeca17028fc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae5d00a6d73390cc05d73aeca17028fc5"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">SearchBox</a> (double *y, <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gae5d00a6d73390cc05d73aeca17028fc5"><td class="mdescLeft"> </td><td class="mdescRight">box-based near field correction <br/></td></tr>
+<tr class="memitem:ga61bae6836e2c586b9de245b664853174"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga61bae6836e2c586b9de245b664853174"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">BuildTree</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga61bae6836e2c586b9de245b664853174"><td class="mdescLeft"> </td><td class="mdescRight">recursive sort of source knots dimension by dimension to get tree structure <br/></td></tr>
+<tr class="memitem:gab5a71f2cd5581bfa121b77aa6c981104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab5a71f2cd5581bfa121b77aa6c981104"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">SearchTree</a> (const int d, const int t, const double *x, const double _Complex *alpha, const double *xmin, const double *xmax, const int N, const kernel k, const double *param, const int Ad, const double _Complex *Add, const int p, const unsigned flags)</td></tr>
+<tr class="memdesc:gab5a71f2cd5581bfa121b77aa6c981104"><td class="mdescLeft"> </td><td class="mdescRight">fast search in tree of source knots for near field computation <br/></td></tr>
+<tr class="memitem:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum_init_guru</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double e [...]
+<tr class="memdesc:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="mdescLeft"> </td><td class="mdescRight">initialization of fastsum plan  <a href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149"></a><br/></td></tr>
+<tr class="memitem:gab989ea4659fe681bd4c025e82756f769"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum_finalize</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab989ea4659fe681bd4c025e82756f769"><td class="mdescLeft"> </td><td class="mdescRight">finalization of fastsum plan  <a href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769"></a><br/></td></tr>
+<tr class="memitem:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum_exact</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="mdescLeft"> </td><td class="mdescRight">direct computation of sums  <a href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd"></a><br/></td></tr>
+<tr class="memitem:ga197c16fcec7935886fc97d140f2b20ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum_precompute</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga197c16fcec7935886fc97d140f2b20ff"><td class="mdescLeft"> </td><td class="mdescRight">precomputation for fastsum  <a href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff"></a><br/></td></tr>
+<tr class="memitem:gaab2cc691ba59064c18d439c9fd2185e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum_trafo</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaab2cc691ba59064c18d439c9fd2185e8"><td class="mdescLeft"> </td><td class="mdescRight">fast NFFT-based summation  <a href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Fast NFFT-based summation algorithm. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2003-2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum_8c_source.html b/doc/api/html/fastsum_8c_source.html
new file mode 100644
index 0000000..9f5e7c4
--- /dev/null
+++ b/doc/api/html/fastsum_8c_source.html
@@ -0,0 +1,1021 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fastsum.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">   49</a></span> <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordflow">return</span> a >= b ? a : b;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">   55</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordflow">if</span> (n<=1) <span class="keywordflow">return</span> 1.0;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">else</span> <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)n*<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(n-1);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">   62</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4" title="binomial coefficient">binom</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">return</span> <a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(n)/<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(m)/<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(n-m);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">   68</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(<span class="keywordtype">int</span> m, <span class="keywordtype">int</span> r, <span class="keywordtype">double</span> xx)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordtype">double</span> sum=0.0;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">for</span> (k=0; k<=m-r; k++) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     sum+=<a class="code" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4" title="binomial coefficient">binom</a>(m+k,k)*pow((xx+1.0)/2.0,(<span class="keywordtype">double</span>)k);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">return</span> sum*pow((xx+1.0),(<span class="keywordtype">double</span>)r)*pow(1.0-xx,(<span class="keywordtype">double</span>)(m+1))/(1<<(m+1))/<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(r); <span class="comment">/* 1<<(m+1) = 2^(m+1) */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">   80</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</span> p, <s [...]
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">if</span> (xx<-0.5)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     xx=-0.5;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordflow">if</span> (xx>0.5)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     xx=0.5;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">if</span> ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b)) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<-0.5+b) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,0,2.0*xx/b+(1.0-b)/b);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       sum+=pow(-b/2.0,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>           *k(-0.5+b,r,param)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>           *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-2.0*xx/b+(b-1.0)/b);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((xx>-a) && (xx<a)) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       sum+=pow(a,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>           *( k(-a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>               +k( a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx>0.5-b) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,0,-2.0*xx/b+(1.0-b)/b);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       sum+=pow(b/2.0,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>           *k(0.5-b,r,param)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>           *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,2.0*xx/b-(1.0-b)/b);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">  126</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</s [...]
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordflow">if</span> (xx<-0.5)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     xx=-0.5;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordflow">if</span> (xx>0.5)</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     xx=0.5;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">if</span> ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b))</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((xx>-a) && (xx<a))</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       sum+=pow(a,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>           *( k(-a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>               +k( a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<-0.5+b)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       sum+=pow(b,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>           *( k(0.5-b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,(xx+0.5)/b)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>               +k(-0.5+b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-(xx+0.5)/b)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx>0.5-b)</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       sum+=pow(b,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           *( k(0.5-b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,(xx-0.5)/b)</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>               +k(-0.5+b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-(xx-0.5)/b)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">  170</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9" title="regularized kernel for even kernels with K_I even and K_B mirrored">regkern2</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</span [...]
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   xx=fabs(xx);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">if</span> (xx>0.5) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       sum+=pow(b,(<span class="keywordtype">double</span>)r)*k(0.5-b,r,param)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>           *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,0)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,0));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((a<=xx) && (xx<=0.5-b)) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<a) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       sum+=pow(-a,(<span class="keywordtype">double</span>)r)*k(a,r,param)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>           *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a));</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((0.5-b<xx) && (xx<=0.5)) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>       sum+=pow(b,(<span class="keywordtype">double</span>)r)*k(0.5-b,r,param)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>           *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,(xx-0.5)/b)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-(xx-0.5)/b));</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">  207</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468" title="regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD...">regkern3</a>(kernel k, <span class="keywordtype">double</span> xx, <sp [...]
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   xx=fabs(xx);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">if</span> (xx>=0.5) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="comment">/*return kern(typ,c,0,0.5);*/</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     xx=0.5;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="comment">/* else */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">if</span> ((a<=xx) && (xx<=0.5-b)) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<a) {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       sum+=pow(-a,(<span class="keywordtype">double</span>)r)*k(a,r,param)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>           *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="comment">/*sum=kern(typ,c,0,xx); */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((0.5-b<xx) && (xx<=0.5)) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     sum=k(0.5,0,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,0,-2.0*xx/b+(1.0-b)/b);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="comment">/* sum=regkern2(typ,c,p,a,b, 0.5)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b); */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       sum+=pow(b/2.0,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>           *k(0.5-b,r,param)</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>           *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,2.0*xx/b-(1.0-b)/b);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">  244</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99" title="linear spline interpolation in near field with even kernels">linintkern</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="key [...]
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   <span class="keywordtype">double</span> c,c1,c3;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="keywordtype">double</span> _Complex f1,f2;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   c=x*Ad/a;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   r=c; r=abs(r);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   f1=Add[r];f2=Add[r+1];</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   c=fabs(c);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   c1=c-r;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   c3=c1-1.0;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordflow">return</span> (-f1*c3+f2*c1);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="keywordtype">double</span> _Complex quadrintkern(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *Add,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="keywordtype">double</span> c,c1,c2,c3;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordtype">double</span> _Complex f0,f1,f2;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   c=x*Ad/a;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   r=c; r=abs(r);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordflow">if</span> (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];}</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">else</span> { f0=Add[r-1];f1=Add[r];f2=Add[r+1];}</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   c=fabs(c);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   c1=c-r;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   c2=c1+1.0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   c3=c1-1.0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordflow">return</span> (f0*c1*c3/2.0-f1*c2*c3+f2*c2*c1/2.0);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">  279</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyw [...]
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordtype">double</span> c,c1,c2,c3,c4;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordtype">double</span> _Complex f0,f1,f2,f3;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   c=x*Ad/a;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   r=c; r=abs(r);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="keywordflow">if</span> (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="keywordflow">else</span> { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   c=fabs(c);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   c1=c-r;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   c2=c1+1.0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   c3=c1-1.0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   c4=c1-2.0;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="comment">/* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">     f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keywordflow">return</span>(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">  300</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116" title="cubic spline interpolation in near field with arbitrary kernels">kubintkern1</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class [...]
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordtype">double</span> c,c1,c2,c3,c4;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordtype">double</span> _Complex f0,f1,f2,f3;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   Add+=2;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   c=(x+a)*Ad/2/a;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   r=c; r=abs(r);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="comment">/*if (r==0) {f0=Add[r];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">  else */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   c=fabs(c);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   c1=c-r;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   c2=c1+1.0;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   c3=c1-1.0;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   c4=c1-2.0;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="comment">/* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">     f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="keywordflow">return</span>(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">  323</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> t, <span class="keywordt [...]
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="keywordtype">int</span> lpos=0;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordtype">int</span> rpos=N-1;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   <span class="comment">/*double pivot=x[((N-1)/2)*d+t];*/</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordtype">double</span> pivot=x[(N/2)*d+t];</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   <span class="keywordtype">double</span> temp1;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="keywordtype">double</span> _Complex temp2;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <span class="keywordflow">while</span> (lpos<=rpos)</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   {</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">while</span> (x[lpos*d+t]<pivot)</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       lpos++;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="keywordflow">while</span> (x[rpos*d+t]>pivot)</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       rpos--;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="keywordflow">if</span> (lpos<=rpos)</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     {</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       <span class="keywordflow">for</span> (k=0; k<d; k++)</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         temp1=x[lpos*d+k];</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         x[lpos*d+k]=x[rpos*d+k];</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         x[rpos*d+k]=temp1;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>       }</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       temp2=alpha[lpos];</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       alpha[lpos]=alpha[rpos];</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       alpha[rpos]=temp2;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       lpos++;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       rpos--;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordflow">if</span> (0<rpos)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(d,t,x,alpha,rpos+1);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   <span class="keywordflow">if</span> (lpos<N-1)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(d,t,x+lpos*d,alpha+lpos,N-lpos);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">  363</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0" title="initialize box-based search data structures">BuildBox</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algori [...]
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="keywordtype">int</span> t, l;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="keywordtype">int</span> *box_index;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <span class="keywordtype">double</span> val[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>];</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   box_index = (<span class="keywordtype">int</span> *) malloc(ths->box_count * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordflow">for</span> (t=0; t < ths->box_count; t++)</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     box_index[t] = 0;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   <span class="keywordflow">for</span> (l=0; l < ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; l++)</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordtype">int</span> ind = 0;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       val[t] = ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * l + t] + 0.25 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps [...]
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       ind *= ths->box_count_per_dim;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       ind += (int) (val[t] / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     box_index[ind]++;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   ths->box_offset[0] = 0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <span class="keywordflow">for</span> (t=1; t<=ths->box_count; t++)</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     ths->box_offset[t] = ths->box_offset[t-1] + box_index[t-1];</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     box_index[t-1] = ths->box_offset[t-1];</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keywordflow">for</span> (l=0; l < ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; l++)</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   {</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordtype">int</span> ind = 0;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>       val[t] = ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * l + t] + 0.25 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps [...]
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       ind *= ths->box_count_per_dim;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       ind += (int) (val[t] / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     ths->box_alpha[box_index[ind]] = ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[l];</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       ths->box_x[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * box_index[ind] + t] = ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</ [...]
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     box_index[ind]++;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   free(box_index);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">  414</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(<span class="ke [...]
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <span class="keywordtype">double</span> _Complex result = 0.0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordtype">int</span> m, l;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   <span class="keywordflow">for</span> (m = start; m < end_lt; m++)</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   {</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>       <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>       {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         r = y[0]-x[m];</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>       }</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>       {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         r=0.0;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         <span class="keywordflow">for</span> (l=0; l<d; l++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>           r+=(y[l]-x[m*d+l])*(y[l]-x[m*d+l]);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         r=sqrt(r);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>       }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>       <span class="keywordflow">if</span> (fabs(r)<a)</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>       {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         result += alpha[m]*k(r,0,param);              <span class="comment">/* alpha*(kern-regkern) */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>           <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(k,r,p,param,a,1.0/16.0); <span class="comment">/* exact value (in 1D)  */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116" title="cubic spline interpolation in near field with arbitrary kernels">kubintkern1</a>(r,Add,Ad,a);               <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>           <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(k,r,p,param,a,1.0/16.0);  <span class="comment">/* exact value (in dD)  */</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor">#if defined(NF_KUB)</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor"></span>            result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(r,Add,Ad,a);                <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="preprocessor"></span>            result -= alpha[m]*quadrintkern(r,Add,Ad,a);                <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="preprocessor"></span>            result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99" title="linear spline interpolation in near field with even kernels">linintkern</a>(r,Add,Ad,a);                <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor"></span><span class="preprocessor">  #error define interpolation method</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor"></span>        }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>       }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">  465</a></span> <span class="keyword">static</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5" title="box-based near field correction">SearchBox</a>(<span class="keywordtype">double</span> *y, <a class="code" href="structfastsum__plan__ [...]
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   <span class="keywordtype">double</span> _Complex val = 0.0;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   <span class="keywordtype">int</span> t, l;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   <span class="keywordtype">int</span> y_multiind[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>];</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   <span class="keywordtype">int</span> multiindex[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>];</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   <span class="keywordtype">int</span> y_ind;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   {</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     y_multiind[t] = ((y[t] + 0.25 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0) / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   }</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="keywordflow">for</span> (y_ind = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[0]-1); y_ind < ths->box_count_per_dim && y_ind <= y_multiind[0]+1; y_ind++){</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       val += <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths-><a clas [...]
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>       }</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   }</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==2)</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     <span class="keywordflow">for</span> (multiindex[0] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>       <span class="keywordflow">for</span> (multiindex[1] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         y_ind = (ths->box_count_per_dim * multiindex[0]) + multiindex[1];</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         val += <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths-><a cl [...]
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   }</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==3)</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>   {</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="keywordflow">for</span> (multiindex[0] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       <span class="keywordflow">for</span> (multiindex[1] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>         <span class="keywordflow">for</span> (multiindex[2] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[2]-1); multiindex[2] < ths->box_count_per_dim && multiindex[2] <= y_multiind[2]+1; multiindex[2]++)</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>           y_ind = ((ths->box_count_per_dim * multiindex[0]) + multiindex[1]) * ths->box_count_per_dim + multiindex[2];</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>           val += <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths-><a  [...]
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         }</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   }</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     exit(-1);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   <span class="keywordflow">return</span> val;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">  510</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> t, <span clas [...]
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   <span class="keywordflow">if</span> (N>1)</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   {</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     <span class="keywordtype">int</span> m=N/2;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(d,t,x,alpha,N);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(d, (t+1)%d, x, alpha, m);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(d, (t+1)%d, x+(m+1)*d, alpha+(m+1), N-m-1);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> }</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">  524</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> d, <span class="key [...]
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *alpha, <span class="keyword">const</span> <span class="keywordtype">double</span> *xmin, <span class="keyword">const</span> <span class="keywordtype">double</span> *xmax,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> kernel k, <span class="keyword">const</span> <span class="keywordtype">double</span> *param, <span class="keyword">const</span> <span class="keywordtype">int</span> Ad,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *Add, <span class="keyword">const</span> <span class="keywordtype">int</span> p, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   <span class="keywordtype">int</span> m=N/2;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   <span class="keywordtype">double</span> Min=xmin[t], Max=xmax[t], Median=x[m*d+t];</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   <span class="keywordtype">double</span> a=fabs(Max-Min)/2;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   <span class="keywordtype">int</span> E=0;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   <span class="keywordflow">if</span> (N==0)</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   <span class="keywordflow">if</span> (Min>Median)</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordflow">return</span> <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Max<Median)</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     <span class="keywordflow">return</span> <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   {</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordtype">double</span> _Complex result = 0.0;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     E=0;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <span class="keywordflow">for</span> (l=0; l<d; l++)</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     {</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>       <span class="keywordflow">if</span> ( x[m*d+l]>xmin[l] && x[m*d+l]<xmax[l] )</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         E++;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="keywordflow">if</span> (E==d)</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     {</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>       <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>       {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         r = xmin[0]+a-x[m];  <span class="comment">/* remember: xmin+a = y */</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>       }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       {</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         r=0.0;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         <span class="keywordflow">for</span> (l=0; l<d; l++)</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>           r+=(xmin[l]+a-x[m*d+l])*(xmin[l]+a-x[m*d+l]);  <span class="comment">/* remember: xmin+a = y */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         r=sqrt(r);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>       }</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>       <span class="keywordflow">if</span> (fabs(r)<a)</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>       {</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         result += alpha[m]*k(r,0,param);                         <span class="comment">/* alpha*(kern-regkern) */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>         {</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>           <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>             result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(k,r,p,param,a,1.0/16.0); <span class="comment">/* exact value (in 1D)  */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>             result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116" title="cubic spline interpolation in near field with arbitrary kernels">kubintkern1</a>(r,Add,Ad,a);               <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         }</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         {</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>           <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>             result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(k,r,p,param,a,1.0/16.0);  <span class="comment">/* exact value (in dD)  */</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">#if defined(NF_KUB)</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor"></span>            result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(r,Add,Ad,a);                <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="preprocessor"></span>            result -= alpha[m]*quadrintkern(r,Add,Ad,a);                <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="preprocessor"></span>            result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99" title="linear spline interpolation in near field with even kernels">linintkern</a>(r,Add,Ad,a);                <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="preprocessor"></span><span class="preprocessor">  #error define interpolation method</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="preprocessor"></span>        }</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>       }</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     result += <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags)</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>       + <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> }</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">  600</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths, <span class= [...]
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="keywordtype">int</span> N[d], n[d];</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="keywordtype">int</span> n_total;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="keywordtype">int</span> sort_flags_trafo = 0;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="keywordtype">int</span> sort_flags_adjoint = 0;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   <span class="keywordflow">if</span> (d > 1)</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   {</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     sort_flags_trafo = NFFT_SORT_NODES;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="preprocessor"></span>    sort_flags_adjoint = NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor"></span>    sort_flags_adjoint = NFFT_SORT_NODES;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> = d;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a> = N_total;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   ths-><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a> = M_total;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a> = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*N_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a> = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*M_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a> = k;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   ths-><a class="code" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34" title="parameters for kernel function">kernel_param</a> = param;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> = flags;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a> = p;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a> = eps_I; <span class="comment">/* =(double)ths->p/(double)nn; */</span>  </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a> = eps_B; <span class="comment">/* =1.0/16.0; */</span>                   </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   <span class="keywordflow">if</span> (!(ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>))</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   {</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     {</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>       ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = 4*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a>)*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization" [...]
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+5)*(<span class="keyword"> [...]
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     }</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     {</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a> == one_over_x)</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         <span class="keywordtype">double</span> delta = 1e-8;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         <span class="keywordflow">switch</span>(p)</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         {</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>           <span class="keywordflow">case</span> 2: delta = 1e-3;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>           <span class="keywordflow">case</span> 3: delta = 1e-4;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>           <span class="keywordflow">case</span> 4: delta = 1e-5;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>           <span class="keywordflow">case</span> 5: delta = 1e-6;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>           <span class="keywordflow">case</span> 6: delta = 1e-6;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>           <span class="keywordflow">case</span> 7: delta = 1e-7;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                   <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>           <span class="keywordflow">default</span>: delta = 1e-8;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         }</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="preprocessor">#if defined(NF_KUB)</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="preprocessor"></span>        ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(10, (<span class="keywordtype">int</span>) ceil(1.4/pow(delta,1.0/4.0)));</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="preprocessor"></span>        ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = (int) ceil(2.2/pow(delta,1.0/3.0));</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="preprocessor"></span>        ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = (int) ceil(1.7/pow(delta,1.0/2.0));</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="preprocessor"></span><span class="preprocessor">  #error define NF_LIN or NF_QUADR or NF_KUB</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="preprocessor"></span>      }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>       {</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = 2*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a>)*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularizatio [...]
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>         ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>       }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     }</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   }</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a> = nn;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   {</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     N[t] = nn;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     n[t] = 2*nn;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   nfft_init_guru(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>), d, N, N_total, n, m,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                    sort_flags_adjoint |</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>                    PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                    FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   nfft_init_guru(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>), d, N, M_total, n, m,</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>                    sort_flags_trafo |</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>                    PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>                    FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   n_total = 1;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     n_total *= nn;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a> = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(n_total*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   ths->fft_plan = fftw_plan_dft(d,N,ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>,ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>,FFTW_FORWARD,FFTW_ESTIMATE);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     ths->box_count_per_dim = floor((0.5 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>) / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>) + 1;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     ths->box_count = 1;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>       ths->box_count *= ths->box_count_per_dim;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     ths->box_offset = (<span class="keywordtype">int</span> *) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths->box_count+1) * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     ths->box_alpha = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     ths->box_x = (<span class="keywordtype">double</span> *) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a> *  <span class=" [...]
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>   }</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> }</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">  742</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> {</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>);</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>);</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>);</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>   <span class="keywordflow">if</span> (!(ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>))</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>);</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>   nfft_finalize(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   nfft_finalize(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="preprocessor"></span>  fftw_destroy_plan(ths->fft_plan);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>);</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   {</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->box_offset);</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->box_alpha);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->box_x);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>   }</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">  775</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> {</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>   <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(j,k,t,r)</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (j=0; j<ths-><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   {</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j]=0.0;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     <span class="keywordflow">for</span> (k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; k++)</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     {</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>       <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>         r = ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[j] - ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k];</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>       {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         r=0.0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>           r += (ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[j*ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>+t]-ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with rad [...]
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         r=sqrt(r);</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>       }</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>       ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j] += ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] * ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a>(r,0,ths-><a class [...]
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   }</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">  802</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>   <span class="keywordtype">int</span> j,k,t;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   <span class="keywordtype">int</span> n_total;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[3] = 0.0;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   {</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <a class="code" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0" title="initialize box-based search data structures">BuildBox</a>(ths);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>,0,ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source kn [...]
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   }</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[3] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   <span class="keywordflow">if</span> (!(ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>))</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   {</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k=-ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>/2-2; k <= ths->Ad/2+2; k++)</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>         ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>[k+ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>/2+2] = <a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized ( [...]
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k=0; k <= ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+2; k++)</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>         ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>[k] = <a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468" title="regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD...">regkern3</a>(ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8 [...]
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>   }</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   <span class="keywordflow">for</span> (k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>       ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" h [...]
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     nfft_precompute_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     nfft_precompute_full_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;k++)</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[k] = ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</ [...]
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> #ifdef MEASURE_TIME</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   t0 = getticks();</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   <span class="keywordflow">for</span> (j=0; j<ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>       ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" h [...]
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     nfft_precompute_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     nfft_precompute_full_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> </div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   n_total = 1;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     n_total *= ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   #pragma omp parallel <span class="keywordflow">for</span> <span class="keywordflow">default</span>(shared) <span class="keyword">private</span>(j,k,t)</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   <span class="keywordflow">for</span> (j=0; j<n_total; j++)</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   {</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>       ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j] = <a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" [...]
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     {</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>       k=j;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>       ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j]=0.0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>       <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>       {</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>         ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j] += ((double)(k % (ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>)) / (ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation." [...]
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         k = k / (ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>);</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>       }</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>       ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j] = <a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468" title="regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD...">regkern3</a>(ths-><a class="code" href="structfastsum__plan__.html#aaf4e [...]
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     }</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   }</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>, ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" [...]
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>   fftw_execute(ths->fft_plan);</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>, ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" [...]
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">  940</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> {</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   <span class="keywordtype">int</span> j,k,t;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[4] = 0.0; </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[5] = 0.0;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[6] = 0.0;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[7] = 0.0;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>   nfft_adjoint(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[4] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion c [...]
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> #ifdef MEASURE_TIME</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   t1 = getticks();</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[5] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[6] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="preprocessor"></span>  t0 = getticks();</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(j,k,t)</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (j=0; j<ths-><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     <span class="keywordtype">double</span> ymin[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>], ymax[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>]; </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     {</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>       ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j] = ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[ [...]
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     }</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     {</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>       <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>       {</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         ymin[t] = ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>*j+t] - ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         ymax[t] = ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>*j+t] + ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>       }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>       ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j] = ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[ [...]
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     }</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     <span class="comment">/* ths->f[j] = ths->mv2.f[j]; */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>     <span class="comment">/* ths->f[j] = SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags); */</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>   }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor"></span>  t1 = getticks();</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[7] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">/* fastsum.c */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum_8h.html b/doc/api/html/fastsum_8h.html
new file mode 100644
index 0000000..16953ac
--- /dev/null
+++ b/doc/api/html/fastsum_8h.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum.h File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for the fast NFFT-based summation algorithm.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="fastsum_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html">fastsum_plan_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm  <a href="structfastsum__plan__.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">NF_KUB</a></td></tr>
+<tr class="memdesc:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="mdescLeft"> </td><td class="mdescRight">Include header for C99 complex datatype.  <a href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8"></a><br/></td></tr>
+<tr class="memitem:gac22376cb30edef9131c592a355d1030d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac22376cb30edef9131c592a355d1030d"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">EXACT_NEARFIELD</a>   (1U<< 0)</td></tr>
+<tr class="memdesc:gac22376cb30edef9131c592a355d1030d"><td class="mdescLeft"> </td><td class="mdescRight">Constant symbols. <br/></td></tr>
+<tr class="memitem:ga90e3c393cc832eec83e9da3b207edb8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga90e3c393cc832eec83e9da3b207edb8c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NEARFIELD_BOXES</b>   (1U<< 1)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga9227ba3791b3360dc4a0d6fbf82034c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9227ba3791b3360dc4a0d6fbf82034c6"></a>
+typedef double _Complex(* </td><td class="memItemRight" valign="bottom"><b>kernel</b> )(double, int, const double *)</td></tr>
+<tr class="memitem:gad953252f6b309404991c4afc7b98b34b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad953252f6b309404991c4afc7b98b34b"></a>
+typedef struct <a class="el" href="structfastsum__plan__.html">fastsum_plan_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a></td></tr>
+<tr class="memdesc:gad953252f6b309404991c4afc7b98b34b"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum_init_guru</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double e [...]
+<tr class="memdesc:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="mdescLeft"> </td><td class="mdescRight">initialization of fastsum plan  <a href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149"></a><br/></td></tr>
+<tr class="memitem:gab989ea4659fe681bd4c025e82756f769"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum_finalize</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab989ea4659fe681bd4c025e82756f769"><td class="mdescLeft"> </td><td class="mdescRight">finalization of fastsum plan  <a href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769"></a><br/></td></tr>
+<tr class="memitem:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum_exact</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="mdescLeft"> </td><td class="mdescRight">direct computation of sums  <a href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd"></a><br/></td></tr>
+<tr class="memitem:ga197c16fcec7935886fc97d140f2b20ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum_precompute</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga197c16fcec7935886fc97d140f2b20ff"><td class="mdescLeft"> </td><td class="mdescRight">precomputation for fastsum  <a href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff"></a><br/></td></tr>
+<tr class="memitem:gaab2cc691ba59064c18d439c9fd2185e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum_trafo</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaab2cc691ba59064c18d439c9fd2185e8"><td class="mdescLeft"> </td><td class="mdescRight">fast NFFT-based summation  <a href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8"></a><br/></td></tr>
+<tr class="memitem:ga247527ab67657107225fa69882f0208c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga247527ab67657107225fa69882f0208c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">regkern</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga247527ab67657107225fa69882f0208c"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B smooth to zero <br/></td></tr>
+<tr class="memitem:ga67103860c05f7296f7c302e7f0dbfe79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67103860c05f7296f7c302e7f0dbfe79"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">kubintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:ga67103860c05f7296f7c302e7f0dbfe79"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with even kernels <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for the fast NFFT-based summation algorithm. </p>
+<p>reference: M. Fenn, G. Steidl, Fast NFFT based summation of radial functions. Sampl. Theory Signal Image Process., 3, 1-28, 2004.</p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2003-2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum_8h_source.html b/doc/api/html/fastsum_8h_source.html
new file mode 100644
index 0000000..513efa2
--- /dev/null
+++ b/doc/api/html/fastsum_8h_source.html
@@ -0,0 +1,154 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fastsum.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#ifndef fastsum_h_inc</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define fastsum_h_inc</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#if !(defined(NF_LIN) || defined(NF_QUADR) || defined(NF_KUB))</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">   53</a></span> <span class="preprocessor"></span><span class="preprocessor">  #define NF_KUB</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">typedef</span> <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">   66</a></span> <span class="preprocessor">#define EXACT_NEARFIELD  (1U<< 0)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#define NEARFIELD_BOXES (1U<< 1)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html">   71</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan_</a></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">   75</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>;                                </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">   77</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>;                          </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">   78</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>;                          </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">   80</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>;                       </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">   81</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>;                           </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">   83</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>;                            </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">   84</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>;                            </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">   86</a></span>   kernel <a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a>;  </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">   87</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34" title="parameters for kernel function">kernel_param</a>;                 </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">   89</a></span>   <span class="keywordtype">unsigned</span> <a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a>;                       </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">   94</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e" title="internal">pre_K</a>;                       </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">   97</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>;                                </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">   98</a></span>   fftw_complex *<a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>;                      </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">  100</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a>;                                </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">  101</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>;                           <span class="comment">/* fixed to p/n so far  */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">  102</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>;                           <span class="comment">/* fixed to 1/16 so far */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">  104</a></span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> <a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>;                        </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">  105</a></span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> <a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>;                        </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">  108</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>;                               </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">  109</a></span>   <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>;                 </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="comment">/* things for computing *b - are they used only once?? */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   fftw_plan fft_plan;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">int</span> box_count;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">int</span> box_count_per_dim;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">int</span> *box_offset;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">double</span> *box_x;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">double</span> _Complex *box_alpha;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">  120</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[8]; </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> } <a class="code" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b" title="plan for fast summation algorithm">fastsum_plan</a>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N_total, <span class="keywordty [...]
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</span> p, <span class="keyword">const</span> <span class="keywordtype">double</span> *param, <span class="ke [...]
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *Add,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor"></span>}  <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor"></span><span class="comment">/* fastsum.h */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__benchomp_8c_source.html b/doc/api/html/fastsum__benchomp_8c_source.html
new file mode 100644
index 0000000..3cd856c
--- /dev/null
+++ b/doc/api/html/fastsum__benchomp_8c_source.html
@@ -0,0 +1,701 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_benchomp.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum_benchomp.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <<a class="code" href="nfft3_8h.html">nfft3.h</a>></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#define NREPEAT 5</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">static</span> FILE* file_out_tex = NULL;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">int</span> get_nthreads_array(<span class="keywordtype">int</span> **arr)</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">int</span> max_threads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> alloc_num = 2;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">int</span> ret_number = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">int</span> max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordflow">if</span> (max_threads <= 5)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     *arr = (<span class="keywordtype">int</span>*) malloc(max_threads*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordflow">for</span> (k = 0; k < max_threads; k++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>       *(*arr + k) = k+1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">return</span> max_threads;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2, alloc_num++);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   *arr = (<span class="keywordtype">int</span>*) malloc(alloc_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads && max_threads_pw2)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>       *(*arr + ret_number) = max_threads/2;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>       ret_number++;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     *(*arr + ret_number) = k;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     ret_number++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       *(*arr + ret_number) = max_threads;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       ret_number++;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     }</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">return</span> ret_number;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> } </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> check_result_value(<span class="keyword">const</span> <span class="keywordtype">int</span> val, <span class="keyword">const</span> <span class="keywordtype">int</span> ok, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">if</span> (val != ok)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     fprintf(stderr, <span class="stringliteral">"ERROR %s: %d not %d\n"</span>, msg, val, ok);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     exit(1);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keywordtype">void</span> run_test_create(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> L, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   snprintf(cmd, 1024, <span class="stringliteral">"./fastsum_benchomp_createdataset %d %d %d > fastsum_benchomp_test.data"</span>, d, L, M);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   check_result_value(system(cmd), 0, <span class="stringliteral">"createdataset"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keywordtype">void</span> run_test_init_output()</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   FILE *f = fopen(<span class="stringliteral">"fastsum_benchomp_test.result"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">if</span> (f!= NULL)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     fclose(f);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordtype">int</span> L;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">int</span> p;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">char</span> *kernel_name;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">double</span> c;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">double</span> eps_I;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">double</span> eps_B;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> } <a class="code" href="structs__param.html">s_param</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">double</span> avg;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> } <a class="code" href="structs__resval.html">s_resval</a>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <a class="code" href="structs__resval.html">s_resval</a> resval[16];</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> } <a class="code" href="structs__result.html">s_result</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <a class="code" href="structs__param.html">s_param</a> param;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <a class="code" href="structs__result.html">s_result</a> *results;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">int</span> nresults;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> } <a class="code" href="structs__testset.html">s_testset</a>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="keywordtype">void</span> run_test(<a class="code" href="structs__resval.html">s_resval</a> *res, <span class="keywordtype">int</span> nrepeat, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> p, <span class="keywordtype">char</span> *kernel_name, <span class="keywordtype">double</span> c, <span class="keywordtype">double</span> eps [...]
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">int</span> r,t;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordflow">if</span> (nthreads < 2)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     snprintf(cmd, 1024, <span class="stringliteral">"./fastsum_benchomp_detail_single %d %d %d %s %lg %lg %lg < fastsum_benchomp_test.data > fastsum_benchomp_test.out"</span>, n, m, p, kernel_name, c, eps_I, eps_B);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     snprintf(cmd, 1024, <span class="stringliteral">"./fastsum_benchomp_detail_threads %d %d %d %s %lg %lg %lg %d < fastsum_benchomp_test.data > fastsum_benchomp_test.out"</span>, n, m, p, kernel_name, c, eps_I, eps_B, nthreads);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">int</span> retval;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">double</span> v[16];</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     FILE *f;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     f = fopen(<span class="stringliteral">"fastsum_benchomp_test.out"</span>, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     retval = fscanf(f, <span class="stringliteral">"%lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg"</span>, v, v+1, v+2, v+3, v+4, v+5, v+6, v+7, v+8, v+9, v+10, v+11, v+12, v+13, v+14, v+15);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     check_result_value(retval, 16, <span class="stringliteral">"read fastsum_benchomp_test.out"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     fclose(f);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       res[t].avg += v[t];</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       <span class="keywordflow">if</span> (res[t].min > v[t])</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         res[t].min = v[t];</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <span class="keywordflow">if</span> (res[t].max < v[t])</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         res[t].max = v[t];</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     res[t].avg /= nrepeat;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   fprintf(stderr, <span class="stringliteral">"%d %d: "</span>, nthreads, nrepeat);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     fprintf(stderr, <span class="stringliteral">"%.3e %.3e %.3e | "</span>, res[t].avg, res[t].min, res[t].max);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_psi_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keywordflow">if</span> (flags & PRE_PSI)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">return</span> <span class="stringliteral">"prepsi"</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (flags & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">return</span> <span class="stringliteral">"unknownPSI"</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordflow">return</span> <span class="stringliteral">"nopsi"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_sort_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordflow">if</span> (flags & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">return</span> <span class="stringliteral">"sorted"</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordflow">return</span> <span class="stringliteral">"unsorted"</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_adjoint_omp_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">return</span> <span class="stringliteral">"blockwise"</span>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">#define MASK_FSUM_D (1U<<0)</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_L (1U<<1)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_M (1U<<2)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_MULTIBW (1U<<3)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_WINM (1U<<4)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_P (1U<<5)</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_KERNEL (1U<<6)</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_EPSI (1U<<7)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_EPSB (1U<<8)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fastsum_determine_different_parameters(<a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = 0;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordflow">if</span> (ntestsets < 2)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="keywordflow">for</span> (t = 1; t < ntestsets; t++)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">if</span> (testsets[t-1].param.d != testsets[t].param.d)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       mask |= MASK_FSUM_D;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordflow">if</span> (testsets[t-1].param.L != testsets[t].param.L)</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       mask |= MASK_FSUM_L;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">if</span> (testsets[t-1].param.M != testsets[t].param.M)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       mask |= MASK_FSUM_M;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">if</span> (testsets[t-1].param.n != testsets[t].param.n)</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       mask |= MASK_FSUM_MULTIBW;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> (testsets[t-1].param.m != testsets[t].param.m)</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       mask |= MASK_FSUM_WINM;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">if</span> (testsets[t-1].param.p != testsets[t].param.p)</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       mask |= MASK_FSUM_P;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">if</span> (strcmp(testsets[t-1].param.kernel_name, testsets[t].param.kernel_name) != 0)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       mask |= MASK_FSUM_KERNEL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="keywordflow">if</span> (testsets[t-1].param.eps_I != testsets[t].param.eps_I)</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       mask |= MASK_FSUM_EPSI;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">if</span> (testsets[t-1].param.eps_B != testsets[t].param.eps_B)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       mask |= MASK_FSUM_EPSB;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <span class="keywordflow">return</span> mask;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="keywordtype">void</span> strEscapeUnderscore(<span class="keywordtype">char</span> *dst, <span class="keywordtype">char</span> *src, <span class="keywordtype">int</span> maxlen)</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordflow">while</span> (src[i] != <span class="charliteral">'\0'</span> && len + offset < maxlen - 1)</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">if</span> (src[i] == <span class="charliteral">'_'</span>)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       len = snprintf(dst+offset, maxlen-offset, <span class="stringliteral">"\\_{}"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       len = snprintf(dst+offset, maxlen-offset, <span class="stringliteral">"%c"</span>, src[i]);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     offset += len;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     i++;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="keywordtype">void</span> fastsum_get_plot_title_minus_indep(<span class="keywordtype">char</span> *outstr, <span class="keywordtype">int</span> maxlen, <span class="keywordtype">char</span> *hostname, <a class="code" href="structs__param.html">s_param</a> param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = ~diff_mask;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   len = snprintf(outstr, maxlen, <span class="stringliteral">"%s"</span>, hostname);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   offset += len;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">if</span> (mask & MASK_FSUM_D)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %dd fastsum"</span>, param.d);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     offset += len;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="keywordflow">if</span> ((mask & (MASK_FSUM_L | MASK_FSUM_M)) && param.L == param.M)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" L=M=%d"</span>, param.L);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     offset += len;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     <span class="keywordflow">if</span> (mask & MASK_FSUM_L)</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" L=%d"</span>, param.L);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       offset += len;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">if</span> (mask & MASK_FSUM_M)</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" M=%d"</span>, param.M);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       offset += len;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   <span class="keywordflow">if</span> (mask & MASK_FSUM_MULTIBW)</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" n=%d"</span>, param.n);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     offset += len;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordflow">if</span> (mask & MASK_FSUM_WINM)</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" m=%d"</span>, param.m);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     offset += len;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   <span class="keywordflow">if</span> (mask & MASK_FSUM_P)</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   {</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" p=%d"</span>, param.p);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     offset += len;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   <span class="keywordflow">if</span> (mask & MASK_FSUM_KERNEL)</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   {</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordtype">char</span> tmp[maxlen];</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     strEscapeUnderscore(tmp, param.kernel_name, maxlen);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, tmp);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     offset += len;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   <span class="keywordflow">if</span> ((mask & (MASK_FSUM_EPSI | MASK_FSUM_EPSB)) && param.eps_I == param.eps_B)</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\varepsilon_\\mathrm{I}$=$\\varepsilon_\\mathrm{B}$=%g"</span>, param.eps_I);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     offset += len;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   {</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">if</span> (mask & MASK_FSUM_EPSI)</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\varepsilon_\\mathrm{I}$=%g"</span>, param.eps_I);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       offset += len;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="keywordflow">if</span> (mask & MASK_FSUM_EPSB)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\varepsilon_\\mathrm{B}$=%g"</span>, param.eps_B);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       offset += len;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="keywordtype">void</span> nfft_adjoint_print_output_histo_DFBRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> {</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   fprintf(out, <span class="stringliteral">" title={%s %dd $\\textrm{NFFT}^\\top$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}"</span>, hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[10].avg);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[11].avg);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[12].avg);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   fprintf(out, <span class="stringliteral">"\\legend{D,$\\textrm{F}^\\top$,$\\textrm{B}^\\top$,prepsi,total}\n"</span>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   fflush(out);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="keywordtype">void</span> nfft_trafo_print_output_histo_DFBRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>       fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   fprintf(out, <span class="stringliteral">" title={%s %dd $\\textrm{NFFT}$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}"</span>, hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[13].avg);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[14].avg);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[15].avg);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[6].avg + testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   fprintf(out, <span class="stringliteral">"\\legend{D,F,B,prepsi,total}\n"</span>);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   fflush(out);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="keywordtype">void</span> fastsum_print_output_histo_PreRfNfT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testset.param, 0);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>       fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg+testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[3].avg);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[5].avg + testset.results[i].resval[6].avg);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[7].avg);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[9].avg - testset.results[i].resval[0].avg);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>   fprintf(out, <span class="stringliteral">"\\legend{prepsi (step 1b),init nearfield (step 1c),far field (steps 2a-c),nearfield (step 2d),total $-$ step 1a}\n"</span>);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   fflush(out);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="keywordtype">void</span> fastsum_print_output_speedup_total_minus_indep(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   <span class="keywordtype">int</span> i, t;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask = fastsum_determine_different_parameters(testsets, ntestsets);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FSUM_WINM);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, "</span>);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <a class="code" href="structs__testset.html">s_testset</a> testset = testsets[t];</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     <span class="keywordtype">double</span> tref = 0.0;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       <span class="keywordflow">if</span> (testset.results[i].nthreads == 1)</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         tref = testset.results[i].resval[9].avg - testset.results[i].resval[0].avg;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>       fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     {</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>       fprintf(stderr, <span class="stringliteral">"%d:%.3f  "</span>, testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     fprintf(stderr, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   }</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   fprintf(out, <span class="stringliteral">"\\legend{{"</span>);</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="keywordflow">if</span> (t > 0)</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>       fprintf(out, <span class="stringliteral">"},{"</span>);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     fastsum_get_plot_title_minus_indep(title, 255, <span class="stringliteral">""</span>, testsets[t].param, ~(diff_mask | MASK_FSUM_WINM));</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     fprintf(out, <span class="stringliteral">"%s"</span>, title);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   fprintf(out, <span class="stringliteral">"}}\n"</span>);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   fflush(out);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> }</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="keywordtype">void</span> run_testset(<a class="code" href="structs__testset.html">s_testset</a> *testset, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> L, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> p, <span class="keywordtype">char</span> *kernel_name, <sp [...]
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   testset->param.d = d;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   testset->param.L = L;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   testset->param.M = M;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   testset->param.n = n;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   testset->param.m = m;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   testset->param.p = p;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   testset->param.kernel_name = kernel_name;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   testset->param.c = c;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   testset->param.eps_I = eps_I;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   testset->param.eps_B = eps_B;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   testset->results = (<a class="code" href="structs__result.html">s_result</a>*) malloc(n_threads_array_size*<span class="keyword">sizeof</span>(<a class="code" href="structs__result.html">s_result</a>));</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   testset->nresults = n_threads_array_size;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   run_test_create(testset->param.d, testset->param.L, testset->param.M);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="keywordflow">for</span> (i = 0; i < n_threads_array_size; i++)</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   {</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     testset->results[i].nthreads = nthreads_array[i];</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     run_test(testset->results[i].resval, NREPEAT, testset->param.n, testset->param.m, testset->param.p, testset->param.kernel_name, testset->param.c, testset->param.eps_I, testset->param.eps_B, testset->results[i].nthreads);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="keywordtype">void</span> test1(<span class="keywordtype">int</span> *nthreads_array, <span class="keywordtype">int</span> n_threads_array_size)</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> {</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   <a class="code" href="structs__testset.html">s_testset</a> testsets[1];</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="preprocessor"></span>  run_testset(&testsets[0], 3, 100000, 100000, 128, 4, 7, <span class="stringliteral">"one_over_x"</span>, 0.0, 0.03125, 0.03125, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   fastsum_print_output_speedup_total_minus_indep(file_out_tex, testsets, 1);</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   fastsum_print_output_histo_PreRfNfT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   nfft_adjoint_print_output_histo_DFBRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   nfft_trafo_print_output_histo_DFBRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> {</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   <span class="keywordtype">int</span> *nthreads_array;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   <span class="keywordtype">int</span> n_threads_array_size = get_nthreads_array(&nthreads_array);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="preprocessor">#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> <span class="preprocessor"></span>  fprintf(stderr, <span class="stringliteral">"WARNING: Detailed time measurements are not activated.\n"</span>);</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   fprintf(stderr, <span class="stringliteral">"Please re-run the configure script with options\n"</span>);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   fprintf(stderr, <span class="stringliteral">"--enable-measure-time --enable-measure-time-fftw --enable-openmp\n"</span>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   fprintf(stderr, <span class="stringliteral">"and run \"make clean all\"\n\n"</span>);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   <span class="keywordflow">for</span> (k = 0; k < n_threads_array_size; k++)</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     fprintf(stderr, <span class="stringliteral">"%d "</span>, nthreads_array[k]);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   file_out_tex = fopen(<span class="stringliteral">"fastsum_benchomp_results_plots.tex"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   test1(nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   fclose(file_out_tex);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__benchomp__createdataset_8c_source.html b/doc/api/html/fastsum__benchomp__createdataset_8c_source.html
new file mode 100644
index 0000000..76b93c1
--- /dev/null
+++ b/doc/api/html/fastsum__benchomp__createdataset_8c_source.html
@@ -0,0 +1,177 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_benchomp_createdataset.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum_benchomp_createdataset.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keywordtype">void</span> fastsum_benchomp_createdataset(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> L, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> t, j, k;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   R *x;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   R *y;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   C *alpha;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   x = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*L*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   y = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*L*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   alpha = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(L*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   k = 0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordflow">while</span> (k < L)</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     <span class="keywordtype">double</span> r_max = 1.0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>       x[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>       r2 += x[k*d+j] * x[k*d+j];</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     <span class="keywordflow">if</span> (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     k++;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(alpha,L);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   k = 0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordtype">double</span> r_max = 1.0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       y[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>       r2 += y[k*d+j] * y[k*d+j];</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">if</span> (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     k++;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   printf(<span class="stringliteral">"%d %d %d\n"</span>, d, L, M);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>       printf(<span class="stringliteral">"%.16e "</span>, x[d*j+t]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(alpha[j]), cimag(alpha[j]));</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       printf(<span class="stringliteral">"%.16e "</span>, y[d*j+t]);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(y);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(alpha);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">int</span> L;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">if</span> (argc < 4) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     fprintf(stderr, <span class="stringliteral">"usage: d L M\n"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   d = atoi(argv[1]);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   L = atoi(argv[2]);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   M = atoi(argv[3]);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   fprintf(stderr, <span class="stringliteral">"d=%d, L=%d, M=%d\n"</span>, d, L, M);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   fastsum_benchomp_createdataset(d, L, M);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__benchomp__detail_8c_source.html b/doc/api/html/fastsum__benchomp__detail_8c_source.html
new file mode 100644
index 0000000..1a68568
--- /dev/null
+++ b/doc/api/html/fastsum__benchomp__detail_8c_source.html
@@ -0,0 +1,236 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_benchomp_detail.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum_benchomp_detail.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keywordtype">int</span> bench_openmp(FILE *infile, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> p, <span class="keywordtype">double</span> _Complex (*kernel)(<span class="keywordtype">double</span> , <span class="keywordtype">int</span> , <span class="keyword">const</span> <span class="keywordtype">double</span> *), <span class [...]
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> my_fastsum_plan;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> d, L, M;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">double</span> re,im;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">double</span> r_max = 0.25 - my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> tt_total;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   fscanf(infile, <span class="stringliteral">"%d %d %d"</span>, &d, &L, &M);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span>  fftw_import_wisdom_from_filename(<span class="stringliteral">"fastsum_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span>  fftw_import_wisdom_from_filename(<span class="stringliteral">"fastsum_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(&my_fastsum_plan, d, L, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span>  fftw_export_wisdom_to_filename(<span class="stringliteral">"fastsum_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span>  fftw_export_wisdom_to_filename(<span class="stringliteral">"fastsum_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       <span class="keywordtype">double</span> v;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       fscanf(infile, <span class="stringliteral">"%lg"</span>, &v);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[d*j+t] = v * r_max;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       <span class="keywordtype">double</span> v;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       fscanf(infile, <span class="stringliteral">"%lg"</span>, &v);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[d*j+t] = v * r_max;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   t0 = getticks();</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   t1 = getticks();</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   tt_total = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#ifndef MEASURE_TIME</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span>  my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[3] = 0.0;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[4] = 0.0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[5] = 0.0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[6] = 0.0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[7] = 0.0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor"></span>  my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   printf(<span class="stringliteral">"%.6e %.6e %.6e %6e %.6e %.6e %.6e %.6e %.6e %6e %.6e %.6e %6e %.6e %.6e %6e\n"</span>, my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0], my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e [...]
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">int</span> n;                                             </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">int</span> m;                                             </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">int</span> p;                                             </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">char</span> *s;                                           </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *);  </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">double</span> c;                                          </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">double</span> eps_I;                                      </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">double</span> eps_B;                                      </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">if</span> (argc != 9)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   nthreads = atoi(argv[8]);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   fftw_init_threads();</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   omp_set_num_threads(nthreads);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span> (argc != 8)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   n=atoi(argv[1]);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   m=atoi(argv[2]);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   p=atoi(argv[3]);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   s=argv[4];</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   c=atof(argv[5]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   eps_I=atof(argv[6]);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   eps_B=atof(argv[7]);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"gaussian"</span>)==0)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     kernel = gaussian;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     kernel = multiquadric;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     kernel = inverse_multiquadric;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"logarithm"</span>)==0)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     kernel = logarithm;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"thinplate_spline"</span>)==0)</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     kernel = thinplate_spline;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_square"</span>)==0)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     kernel = one_over_square;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_modulus"</span>)==0)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     kernel = one_over_modulus;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_x"</span>)==0)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     kernel = one_over_x;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric3"</span>)==0)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     kernel = inverse_multiquadric3;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"sinc_kernel"</span>)==0)</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     kernel = sinc_kernel;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cosc"</span>)==0)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     kernel = cosc;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cot"</span>)==0)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     kernel = kcot;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     s=<span class="stringliteral">"multiquadric"</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     kernel = multiquadric;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   bench_openmp(stdin, n, m, p, kernel, c, eps_I, eps_B);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__matlab_8c.html b/doc/api/html/fastsum__matlab_8c.html
new file mode 100644
index 0000000..be08e57
--- /dev/null
+++ b/doc/api/html/fastsum__matlab_8c.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_matlab.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum_matlab.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="fastsum_8h_source.html">fastsum.h</a>"</code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="fastsum__matlab_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum__matlab_8c_source.html">fastsum_matlab.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__matlab_8c_source.html b/doc/api/html/fastsum__matlab_8c_source.html
new file mode 100644
index 0000000..f0e654f
--- /dev/null
+++ b/doc/api/html/fastsum__matlab_8c_source.html
@@ -0,0 +1,252 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_matlab.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum_matlab.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum__matlab_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fastsum_matlab.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">  #include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordtype">int</span> j,k,t;                                         </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> d;                                             </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">int</span> N;                                             </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordtype">int</span> M;                                             </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordtype">int</span> n;                                             </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span> m;                                             </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">int</span> p;                                             </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">char</span> *s;                                           </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *);  </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">double</span> c;                                          </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> my_fastsum_plan;                      </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordtype">double</span> _Complex *direct;                           </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   ticks t0, t1;                                      </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">double</span> time;                                       </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">double</span> error=0.0;                                  </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">double</span> eps_I;                                      </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">double</span> eps_B;                                      </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   FILE *fid1, *fid2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">if</span> (argc!=11)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     printf(<span class="stringliteral">"\nfastsum_test d N M n m p kernel c\n\n"</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     printf(<span class="stringliteral">"  d       dimension                 \n"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     printf(<span class="stringliteral">"  N       number of source nodes    \n"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     printf(<span class="stringliteral">"  M       number of target nodes    \n"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     printf(<span class="stringliteral">"  n       expansion degree          \n"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     printf(<span class="stringliteral">"  m       cut-off parameter         \n"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     printf(<span class="stringliteral">"  p       degree of smoothness      \n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     printf(<span class="stringliteral">"  kernel  kernel function  (e.g., gaussian)\n"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     printf(<span class="stringliteral">"  c       kernel parameter          \n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     printf(<span class="stringliteral">"  eps_I   inner boundary            \n"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     printf(<span class="stringliteral">"  eps_B   outer boundary            \n\n"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     exit(-1);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     d=atoi(argv[1]);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     N=atoi(argv[2]); c=1.0/pow((<span class="keywordtype">double</span>)N,1.0/(<span class="keywordtype">double</span>)d);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     M=atoi(argv[3]);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     n=atoi(argv[4]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     m=atoi(argv[5]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     p=atoi(argv[6]);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     s=argv[7];</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     c=atof(argv[8]);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     eps_I=atof(argv[9]);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     eps_B=atof(argv[10]);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"gaussian"</span>)==0)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       kernel = gaussian;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       kernel = multiquadric;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       kernel = inverse_multiquadric;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"logarithm"</span>)==0)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       kernel = logarithm;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"thinplate_spline"</span>)==0)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       kernel = thinplate_spline;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_square"</span>)==0)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       kernel = one_over_square;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_modulus"</span>)==0)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       kernel = one_over_modulus;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_x"</span>)==0)</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       kernel = one_over_x;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric3"</span>)==0)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       kernel = inverse_multiquadric3;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"sinc_kernel"</span>)==0)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       kernel = sinc_kernel;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cosc"</span>)==0)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       kernel = cosc;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cot"</span>)==0)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       kernel = kcot;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>       s=<span class="stringliteral">"multiquadric"</span>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       kernel = multiquadric;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   printf(<span class="stringliteral">"d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n"</span>,d,N,M,n,m,p,s,c,eps_I,eps_B);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">/*fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, EXACT_NEARFIELD, n, m, p);*/</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   fid1=fopen(<span class="stringliteral">"x.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   fid2=fopen(<span class="stringliteral">"alpha.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">for</span> (k=0; k<N; k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       fscanf(fid1,<span class="stringliteral">"%le"</span>,&my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+t]);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     fscanf(fid2,<span class="stringliteral">"%le"</span>,&temp); my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] = temp;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     fscanf(fid2,<span class="stringliteral">"%le"</span>,&temp); my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] += temp*_Complex_I;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   fclose(fid1);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   fclose(fid2);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   fid1=fopen(<span class="stringliteral">"y.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       fscanf(fid1,<span class="stringliteral">"%le"</span>,&my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[j*d+t]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   fclose(fid1);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   printf(<span class="stringliteral">"direct computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   t0 = getticks();</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   t1 = getticks();</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   direct = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     direct[j]=my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j];</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   printf(<span class="stringliteral">"pre-computation:    "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   t0 = getticks();</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   t1 = getticks();</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   printf(<span class="stringliteral">"fast computation:   "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   t0 = getticks();</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   t1 = getticks();</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   error=0.0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    <span class="keywordflow">if</span> (cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j])>error)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       error=cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j]);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   printf(<span class="stringliteral">"max relative error: %e\n"</span>,error);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   fid1=fopen(<span class="stringliteral">"f.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   fid2=fopen(<span class="stringliteral">"f_direct.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordflow">if</span> (fid1==NULL)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     printf(<span class="stringliteral">"Fehler!\n"</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     exit(-1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     temp=creal(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j]);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     fprintf(fid1,<span class="stringliteral">"  % .16e"</span>,temp);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     temp=cimag(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j]);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     fprintf(fid1,<span class="stringliteral">"  % .16e\n"</span>,temp);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     temp=creal(direct[j]);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     fprintf(fid2,<span class="stringliteral">"  % .16e"</span>,temp);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     temp=cimag(direct[j]);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     fprintf(fid2,<span class="stringliteral">"  % .16e\n"</span>,temp);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   fclose(fid1);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   fclose(fid2);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__test_8c.html b/doc/api/html/fastsum__test_8c.html
new file mode 100644
index 0000000..8fd6c93
--- /dev/null
+++ b/doc/api/html/fastsum__test_8c.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_test.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Simple test program for the fast NFFT-based summation algorithm.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="fastsum_8h_source.html">fastsum.h</a>"</code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="fastsum__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Simple test program for the fast NFFT-based summation algorithm. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum__test_8c_source.html">fastsum_test.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fastsum__test_8c_source.html b/doc/api/html/fastsum__test_8c_source.html
new file mode 100644
index 0000000..3d19918
--- /dev/null
+++ b/doc/api/html/fastsum__test_8c_source.html
@@ -0,0 +1,300 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fastsum_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fastsum_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">  #include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">  #include <omp.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordtype">int</span> j,k,t;                                         </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span> d;                                             </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">int</span> N;                                             </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">int</span> M;                                             </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">int</span> n;                                             </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">int</span> m;                                             </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">int</span> p;                                             </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordtype">char</span> *s;                                           </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *);  </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">double</span> c;                                          </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> my_fastsum_plan;                      </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">double</span> _Complex *direct;                                   </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   ticks t0, t1;                                      </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">double</span> time;                                       </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordtype">double</span> error=0.0;                                  </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordtype">double</span> eps_I;                                      </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">double</span> eps_B;                                      </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">if</span> (argc!=11)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     printf(<span class="stringliteral">"\nfastsum_test d N M n m p kernel c eps_I eps_B\n\n"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     printf(<span class="stringliteral">"  d       dimension                 \n"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     printf(<span class="stringliteral">"  N       number of source nodes    \n"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     printf(<span class="stringliteral">"  M       number of target nodes    \n"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     printf(<span class="stringliteral">"  n       expansion degree          \n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     printf(<span class="stringliteral">"  m       cut-off parameter         \n"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     printf(<span class="stringliteral">"  p       degree of smoothness      \n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     printf(<span class="stringliteral">"  kernel  kernel function  (e.g., gaussian)\n"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     printf(<span class="stringliteral">"  c       kernel parameter          \n"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     printf(<span class="stringliteral">"  eps_I   inner boundary            \n"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     printf(<span class="stringliteral">"  eps_B   outer boundary            \n\n"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     exit(-1);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     d=atoi(argv[1]);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     N=atoi(argv[2]); c=1.0/pow((<span class="keywordtype">double</span>)N,1.0/(<span class="keywordtype">double</span>)d);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     M=atoi(argv[3]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     n=atoi(argv[4]);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     m=atoi(argv[5]);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     p=atoi(argv[6]);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     s=argv[7];</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     c=atof(argv[8]);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     eps_I=atof(argv[9]);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     eps_B=atof(argv[10]);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"gaussian"</span>)==0)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       kernel = gaussian;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       kernel = multiquadric;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       kernel = inverse_multiquadric;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"logarithm"</span>)==0)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       kernel = logarithm;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"thinplate_spline"</span>)==0)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       kernel = thinplate_spline;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_square"</span>)==0)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       kernel = one_over_square;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_modulus"</span>)==0)</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       kernel = one_over_modulus;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_x"</span>)==0)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       kernel = one_over_x;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric3"</span>)==0)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       kernel = inverse_multiquadric3;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"sinc_kernel"</span>)==0)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       kernel = sinc_kernel;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cosc"</span>)==0)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       kernel = cosc;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cot"</span>)==0)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>       kernel = kcot;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       s=<span class="stringliteral">"multiquadric"</span>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       kernel = multiquadric;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   printf(<span class="stringliteral">"d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n"</span>,d,N,M,n,m,p,s,c,eps_I,eps_B);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">#ifdef NF_KUB</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor"></span>  printf(<span class="stringliteral">"nearfield correction using piecewise cubic Lagrange interpolation\n"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span>  printf(<span class="stringliteral">"nearfield correction using piecewise quadratic Lagrange interpolation\n"</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor"></span>  printf(<span class="stringliteral">"nearfield correction using piecewise linear Lagrange interpolation\n"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor"></span><span class="preprocessor">  #pragma omp parallel</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">    #pragma omp single</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       printf(<span class="stringliteral">"nthreads=%d\n"</span>, omp_get_max_threads());</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   fftw_init_threads();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="comment">//fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">if</span> (my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     printf(<span class="stringliteral">"determination of nearfield candidates based on partitioning into boxes\n"</span>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     printf(<span class="stringliteral">"determination of nearfield candidates based on search tree\n"</span>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   k = 0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">while</span> (k < N)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordtype">double</span> r_max = 0.25 - my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       r2 += my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+j] * my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+j];</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     if (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     k++;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">for</span> (k=0; k<N; k++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*    double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">    my_fastsum_plan.x[k*d+0] = r;</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">    for (j=1; j<d; j++)</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">      double phi=2.0*PI*(double)rand()/(double)RAND_MAX;</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">      my_fastsum_plan.x[k*d+j] = r;</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">      for (t=0; t<j; t++)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">      {</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">        my_fastsum_plan.x[k*d+t] *= cos(phi);</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">      my_fastsum_plan.x[k*d+j] *= sin(phi);</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] = (double)rand()/(double)RAND_MAX + _Complex_I*(<span class="keywordtype">double</span>)rand()/(double)RAND_MAX;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   k = 0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordtype">double</span> r_max = 0.25 - my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       r2 += my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[k*d+j] * my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[k*d+j];</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     if (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     k++;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">/*  for (k=0; k<M; k++)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">  {</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">    double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">    my_fastsum_plan.y[k*d+0] = r;</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">    for (j=1; j<d; j++)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">      double phi=2.0*PI*(double)rand()/(double)RAND_MAX;</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">      my_fastsum_plan.y[k*d+j] = r;</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">      for (t=0; t<j; t++)</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">      {</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">        my_fastsum_plan.y[k*d+t] *= cos(phi);</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">      my_fastsum_plan.y[k*d+j] *= sin(phi);</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">  } */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   printf(<span class="stringliteral">"direct computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   t0 = getticks();</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   t1 = getticks();</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   direct = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     direct[j]=my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j];</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   printf(<span class="stringliteral">"pre-computation:    "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   t0 = getticks();</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   t1 = getticks();</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   printf(<span class="stringliteral">"fast computation:   "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   t0 = getticks();</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   t1 = getticks();</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   error=0.0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">if</span> (cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j])>error)</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       error=cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   printf(<span class="stringliteral">"max relative error: %e\n"</span>,error);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/files.html b/doc/api/html/files.html
new file mode 100644
index 0000000..680fb49
--- /dev/null
+++ b/doc/api/html/files.html
@@ -0,0 +1,148 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - File List
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="accuracy_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>accuracy.c</b></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="include_2api_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>include/api.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="kernel_2nfsft_2api_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>kernel/nfsft/api.h</b></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="bessel__i0_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>bessel_i0.c</b></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>config.h</b></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__2d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_2d.c</b></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__inh__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_inh_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__inh__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_inh_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="cycle_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>cycle.h</b></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="examples_2doxygen_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>examples/doxygen.c</b></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2doxygen_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/doxygen.c</b></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2mri_2doxygen_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/mri/doxygen.c</b></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="examples_2solver_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>examples/solver/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2fastsumS2_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/fastsumS2/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2iterS2_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/iterS2/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2mri_2mri2d_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/mri/mri2d/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2mri_2mri3d_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/mri/mri3d/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2polarFFT_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/polarFFT/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2quadratureS2_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/quadratureS2/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="error_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>error.c</b></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastgauss_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastgauss.c</b></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum_8c.html" target="_self">fastsum.c</a></td><td class="desc">Fast NFFT-based summation algorithm</td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum_8h.html" target="_self">fastsum.h</a></td><td class="desc">Header file for the fast NFFT-based summation algorithm</td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__benchomp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsum_benchomp.c</b></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__benchomp__createdataset_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsum_benchomp_createdataset.c</b></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__benchomp__detail_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsum_benchomp_detail.c</b></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__matlab_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum__matlab_8c.html" target="_self">fastsum_matlab.c</a></td><td class="desc">Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m</td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum__test_8c.html" target="_self">fastsum_test.c</a></td><td class="desc">Simple test program for the fast NFFT-based summation algorithm</td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsumS2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsumS2.c</b></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="flags_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="flags_8c.html" target="_self">flags.c</a></td><td class="desc">Testing the nfft</td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="float_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>float.c</b></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fpt_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fpt_8c.html" target="_self">fpt.c</a></td><td class="desc">Implementation file for the FPT module</td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fpt_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fpt.h</b></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="glacier_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>glacier.c</b></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="infft_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>infft.h</b></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="int_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>int.c</b></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="inverse__radon_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="inverse__radon_8c.html" target="_self">inverse_radon.c</a></td><td class="desc">NFFT-based discrete inverse Radon transform</td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="iterS2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>iterS2.c</b></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="kernels_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="kernels_8c.html" target="_self">kernels.c</a></td><td class="desc">File with predefined kernels for the fast summation algorithm</td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="kernels_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="kernels_8h.html" target="_self">kernels.h</a></td><td class="desc">Header file with predefined kernels for the fast summation algorithm</td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="lambda_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>lambda.c</b></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="legendre_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>legendre.c</b></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="legendre_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>legendre.h</b></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="linogram__fft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="linogram__fft__test_8c.html" target="_self">linogram_fft_test.c</a></td><td class="desc">NFFT-based pseudo-polar FFT and inverse</td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="malloc_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>malloc.c</b></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mpolar__fft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="mpolar__fft__test_8c.html" target="_self">mpolar_fft_test.c</a></td><td class="desc">NFFT-based polar FFT and inverse on modified polar grid</td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mri_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mri.c</b></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ndft__fast_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="ndft__fast_8c.html" target="_self">ndft_fast.c</a></td><td class="desc">Testing ndft, Horner-like ndft, and fully precomputed ndft</td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfct_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfct.c</b></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft3_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="nfft3_8h.html" target="_self">nfft3.h</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft3conf_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft3conf.h</b></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft3util_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="nfft3util_8h.html" target="_self">nfft3util.h</a></td><td class="desc">Header file for utility functions used by the nfft3 library</td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__benchomp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_benchomp.c</b></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__benchomp__createdataset_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_benchomp_createdataset.c</b></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__benchomp__detail_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_benchomp_detail.c</b></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__times_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_times.c</b></td><td class="desc"></td></tr>
+<tr id="row_59_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="nfsft_8c.html" target="_self">nfsft.c</a></td><td class="desc">Implementation file for the NFSFT module</td></tr>
+<tr id="row_60_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft__benchomp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft_benchomp.c</b></td><td class="desc"></td></tr>
+<tr id="row_61_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft__benchomp__createdataset_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft_benchomp_createdataset.c</b></td><td class="desc"></td></tr>
+<tr id="row_62_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft__benchomp__detail_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft_benchomp_detail.c</b></td><td class="desc"></td></tr>
+<tr id="row_63_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsoft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsoft.c</b></td><td class="desc"></td></tr>
+<tr id="row_64_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfst_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfst.c</b></td><td class="desc"></td></tr>
+<tr id="row_65_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nnfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nnfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_66_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nsfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nsfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_67_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nsfft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nsfft_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_68_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="polar__fft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="polar__fft__test_8c.html" target="_self">polar_fft_test.c</a></td><td class="desc">NFFT-based polar FFT and inverse</td></tr>
+<tr id="row_69_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quadratureS2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quadratureS2.c</b></td><td class="desc"></td></tr>
+<tr id="row_70_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="radon_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="radon_8c.html" target="_self">radon.c</a></td><td class="desc">NFFT-based discrete Radon transform</td></tr>
+<tr id="row_71_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__2d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_2d.c</b></td><td class="desc"></td></tr>
+<tr id="row_72_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_73_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_74_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mri2d_2reconstruct__data__gridding_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mri2d/reconstruct_data_gridding.c</b></td><td class="desc"></td></tr>
+<tr id="row_75_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mri3d_2reconstruct__data__gridding_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mri3d/reconstruct_data_gridding.c</b></td><td class="desc"></td></tr>
+<tr id="row_76_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__inh__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_inh_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_77_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__inh__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_inh_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_78_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__inh__nnfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_inh_nnfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_79_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fpt_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fpt/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_80_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfct_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfct/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_81_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_82_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_83_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsoft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsoft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_84_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfst_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfst/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_85_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nnfft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nnfft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_86_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nsfft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nsfft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_87_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="solver_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>solver/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_88_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft_2simple__test__threads_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft/simple_test_threads.c</b></td><td class="desc"></td></tr>
+<tr id="row_89_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft_2simple__test__threads_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft/simple_test_threads.c</b></td><td class="desc"></td></tr>
+<tr id="row_90_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinc_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinc.c</b></td><td class="desc"></td></tr>
+<tr id="row_91_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="solver_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="solver_8c.html" target="_self">solver.c</a></td><td class="desc">Implementation file for the solver module</td></tr>
+<tr id="row_92_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="solver__adjoint_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="solver__adjoint_8h.html" target="_self">solver_adjoint.h</a></td><td class="desc">Header file for adjoint solver</td></tr>
+<tr id="row_93_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="taylor__nfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="taylor__nfft_8c.html" target="_self">taylor_nfft.c</a></td><td class="desc">Testing the nfft againt a Taylor expansion based version</td></tr>
+<tr id="row_94_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ticks_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ticks.h</b></td><td class="desc"></td></tr>
+<tr id="row_95_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="util_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>util.c</b></td><td class="desc"></td></tr>
+<tr id="row_96_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="wigner_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>wigner.c</b></td><td class="desc"></td></tr>
+<tr id="row_97_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="wigner_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="wigner_8h.html" target="_self">wigner.h</a></td><td class="desc">Header file for functions related to Wigner-d/D functions</td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/flags_8c.html b/doc/api/html/flags_8c.html
new file mode 100644
index 0000000..ad67bac
--- /dev/null
+++ b/doc/api/html/flags_8c.html
@@ -0,0 +1,93 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - flags.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">flags.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Testing the nfft.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="flags_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae9b8a68139d23c0923435caccc456d97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9b8a68139d23c0923435caccc456d97"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>flags_cp</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *dst, <a class="el" href="structnfft__plan.html">nfft_plan</a> *src)</td></tr>
+<tr class="memitem:a8a97c72294cf18ba58a3bef876afa38c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a97c72294cf18ba58a3bef876afa38c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>time_accuracy</b> (int d, int N, int M, int n, int m, unsigned test_ndft, unsigned test_pre_full_psi)</td></tr>
+<tr class="memitem:a550dfff6dd252731bf204932e537658e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a550dfff6dd252731bf204932e537658e"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>accuracy_pre_lin_psi</b> (int d, int N, int M, int n, int m, int K)</td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a5d625f0503d2fb7e7a4a2fcb18b80801"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d625f0503d2fb7e7a4a2fcb18b80801"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>test_fg</b> = 0</td></tr>
+<tr class="memitem:a923a2c2945ee7b6a8358d4eb5eb46749"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a923a2c2945ee7b6a8358d4eb5eb46749"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>test_fftw</b> = 0</td></tr>
+<tr class="memitem:a780207296bf31c1ca10a59fb1990a52d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a780207296bf31c1ca10a59fb1990a52d"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>test</b> = 0</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Testing the nfft. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis</dd></dl>
+<p>References: Time and Memory Requirements of the Nonequispaced FFT </p>
+
+<p>Definition in file <a class="el" href="flags_8c_source.html">flags.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/flags_8c_source.html b/doc/api/html/flags_8c_source.html
new file mode 100644
index 0000000..feb0f12
--- /dev/null
+++ b/doc/api/html/flags_8c_source.html
@@ -0,0 +1,377 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - flags.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">flags.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="flags_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: flags.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> test_fg=1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> test_fg=0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#ifdef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> test_fftw=1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> test_fftw=0;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> test=1;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> test=0;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">void</span> flags_cp(<a class="code" href="structnfft__plan.html">nfft_plan</a> *dst, <a class="code" href="structnfft__plan.html">nfft_plan</a> *src)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   dst-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>=src-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   dst-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=src-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   dst-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=src-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   dst-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>=src-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   dst-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>=src-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   dst->my_fftw_plan1=src->my_fftw_plan1;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   dst->my_fftw_plan2=src->my_fftw_plan2;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">void</span> time_accuracy(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> test_ndft,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                    <span class="keywordtype">unsigned</span> test_pre_full_psi)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">int</span> r, NN[d], nn[d];</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">double</span> t_ndft, t, e;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">double</span> _Complex *swapndft = NULL;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_phi_hut;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p_fg_psi;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_lin_psi;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_fg_psi;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_psi;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_full_psi;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   printf(<span class="stringliteral">"%d\t%d\t"</span>, d, N);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordflow">for</span>(r=0; r<d; r++)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       NN[r]=N;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       nn[r]=n;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   nfft_init_guru(&p, d, NN, M, nn, m,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                  MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   nfft_init_guru(&p_pre_phi_hut, d, NN, M, nn, m, PRE_PHI_HUT,0);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   flags_cp(&p_pre_phi_hut, &p);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   nfft_precompute_one_psi(&p_pre_phi_hut);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       nfft_init_guru(&p_fg_psi, d, NN, M, nn, m, FG_PSI,0);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       flags_cp(&p_fg_psi, &p);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       nfft_precompute_one_psi(&p_fg_psi);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   nfft_init_guru(&p_pre_lin_psi, d, NN, M, nn, m, PRE_LIN_PSI,0);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   flags_cp(&p_pre_lin_psi, &p);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   nfft_precompute_one_psi(&p_pre_lin_psi);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       nfft_init_guru(&p_pre_fg_psi, d, NN, M, nn, m, PRE_FG_PSI,0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       flags_cp(&p_pre_fg_psi, &p);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>       nfft_precompute_one_psi(&p_pre_fg_psi);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   nfft_init_guru(&p_pre_psi, d, NN, M, nn, m, PRE_PSI,0);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   flags_cp(&p_pre_psi, &p);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   nfft_precompute_one_psi(&p_pre_psi);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordflow">if</span>(test_pre_full_psi)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       nfft_init_guru(&p_pre_full_psi, d, NN, M, nn, m, PRE_FULL_PSI,0);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       flags_cp(&p_pre_full_psi, &p);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       nfft_precompute_one_psi(&p_pre_full_psi);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       t_ndft=0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       r=0;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       <span class="keywordflow">while</span>(t_ndft<0.01)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>           r++;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>           t0 = getticks();</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>           nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>           t1 = getticks();</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>           t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     t_ndft=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_phi_hut);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_fg_psi);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     p_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_lin_psi);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_fg_psi);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     p_pre_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_psi);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordflow">if</span>(test_pre_full_psi)</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_full_psi);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     p_pre_full_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordflow">if</span>(test_fftw==0)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     e=X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     e=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   printf(<span class="stringliteral">"%.2e\t%d\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n"</span>,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>          t_ndft,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>          m,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>          e,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>          p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0],</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>          p_pre_phi_hut.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0],</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>          p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1],</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>          p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>          p_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>          p_pre_lin_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>          p_pre_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>          p_pre_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>          p_pre_full_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   fflush(stdout);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordflow">if</span>(test_pre_full_psi)</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     nfft_finalize(&p_pre_full_psi);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   nfft_finalize(&p_pre_psi);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     nfft_finalize(&p_pre_fg_psi);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   nfft_finalize(&p_pre_lin_psi);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     nfft_finalize(&p_fg_psi);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   nfft_finalize(&p_pre_phi_hut);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="keyword">static</span> <span class="keywordtype">void</span> accuracy_pre_lin_psi(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> K)</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordtype">int</span> r, NN[d], nn[d];</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordtype">double</span> e;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordtype">double</span> _Complex *swapndft;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">for</span>(r=0; r<d; r++)</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       NN[r]=N;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       nn[r]=n;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   nfft_init_guru(&p, d, NN, M, nn, m,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                  MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                  PRE_PHI_HUT| PRE_LIN_PSI|</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(p.<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   p.<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=K;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   p.<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=(<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((p.<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equisp [...]
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   e=X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="comment">//  printf("%d\t%d\t%d\t%d\t%.2e\n",d,N,m,K,e);</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   printf(<span class="stringliteral">"$%.1e$&\t"</span>,e);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   fflush(stdout);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordtype">int</span> l,m,d,trial,N;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       fprintf(stderr,<span class="stringliteral">"flags type first last trials d m\n"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordflow">if</span>((test==0)&&(atoi(argv[1])<2))</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       fprintf(stderr,<span class="stringliteral">"MEASURE_TIME in nfft3util.h not set\n"</span>);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   fprintf(stderr,<span class="stringliteral">"Testing different precomputation schemes for the nfft.\n"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   fprintf(stderr,<span class="stringliteral">"Columns: d, N=M, t_ndft, e_nfft, t_D, t_pre_phi_hut, "</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   fprintf(stderr,<span class="stringliteral">"t_fftw, t_B, t_fg_psi, t_pre_lin_psi, t_pre_fg_psi, "</span>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   fprintf(stderr,<span class="stringliteral">"t_pre_psi, t_pre_full_psi\n\n"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   d=atoi(argv[5]);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   m=atoi(argv[6]);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="comment">/* time vs. N=M */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordflow">if</span>(l<=20)</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   d=atoi(argv[5]);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   N=atoi(argv[6]);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="comment">/* accuracy vs. time */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordflow">for</span>(m=atoi(argv[2]); m<=atoi(argv[3]); m++)</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         time_accuracy(d, N, (<span class="keywordtype">int</span>)pow(N,d), 2*N, m, 1, 1);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   d=atoi(argv[5]);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   N=atoi(argv[6]);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   m=atoi(argv[7]);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="comment">/* accuracy vs. K for linear interpolation, assumes (m+1)|K */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <span class="keywordflow">if</span>(atoi(argv[1])==2)</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       printf(<span class="stringliteral">"$\\log_2(K/(m+1))$&\t"</span>);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>       <span class="keywordflow">for</span>(l=atoi(argv[2]); l<atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   printf(<span class="stringliteral">"$%d$&\t"</span>,l);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       printf(<span class="stringliteral">"$%d$\\\\\n"</span>,atoi(argv[3]));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       printf(<span class="stringliteral">"$\\tilde E_2$&\t"</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   accuracy_pre_lin_psi(d, N, (<span class="keywordtype">int</span>)pow(N,d), 2*N, m, (m+1)*(1U<< l));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/float_8c_source.html b/doc/api/html/float_8c_source.html
new file mode 100644
index 0000000..132eab5
--- /dev/null
+++ b/doc/api/html/float_8c_source.html
@@ -0,0 +1,140 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - float.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">float.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> R X(float_property)(<span class="keyword">const</span> float_property p)</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>   <span class="keyword">const</span> R base = FLT_RADIX;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>   <span class="keyword">const</span> R eps = EPSILON;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>   <span class="keyword">const</span> R t = MANT_DIG;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>   <span class="keyword">const</span> R emin = MIN_EXP;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>   <span class="keyword">const</span> R emax = MAX_EXP;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>   <span class="keyword">const</span> R prec = eps * base;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keyword">static</span> R rmin = K(1.0);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <span class="keyword">static</span> R rmax = K(1.0);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   <span class="keyword">const</span> R rnd = FLTROUND;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keyword">static</span> R sfmin = K(-1.0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keyword">static</span> <span class="keywordtype">short</span> first = TRUE;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordflow">if</span> (first)</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>     <span class="comment">/* Compute rmin */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>     {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>       <span class="keyword">const</span> INT n = 1 - MIN_EXP;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>       INT i;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>       <span class="keywordflow">for</span> (i = 0; i < n; i++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>         rmin /= base;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     }</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     <span class="comment">/* Compute rmax */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>       INT i;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>       rmax -= eps;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>       <span class="keywordflow">for</span> (i = 0; i < emax; i++)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         rmax *= base;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     }</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="comment">/* Compute sfmin */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>       R small = K(1.0) / rmax;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>       sfmin = rmin;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       <span class="keywordflow">if</span> (small >= sfmin)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         sfmin = small * (eps + K(1.0));</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     first = FALSE;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordflow">if</span> (p == NFFT_EPSILON)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">return</span> eps;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_SAFE_MIN)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordflow">return</span> sfmin;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_BASE)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">return</span> base;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_PRECISION)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordflow">return</span> prec;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_MANT_DIG)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_FLTROUND)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordflow">return</span> rnd;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_E_MIN)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">return</span>  emin;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_R_MIN)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">return</span> rmin;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_E_MAX)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">return</span> emax;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_R_MAX)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">return</span> rmax;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     CK(0 <span class="comment">/* cannot happen */</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">return</span> K(-1.0);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> } <span class="comment">/* dlamch_ */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/form_0.png b/doc/api/html/form_0.png
new file mode 100644
index 0000000..f06b1e7
Binary files /dev/null and b/doc/api/html/form_0.png differ
diff --git a/doc/api/html/form_1.png b/doc/api/html/form_1.png
new file mode 100644
index 0000000..7258515
Binary files /dev/null and b/doc/api/html/form_1.png differ
diff --git a/doc/api/html/form_10.png b/doc/api/html/form_10.png
new file mode 100644
index 0000000..e2a158f
Binary files /dev/null and b/doc/api/html/form_10.png differ
diff --git a/doc/api/html/form_100.png b/doc/api/html/form_100.png
new file mode 100644
index 0000000..3b75231
Binary files /dev/null and b/doc/api/html/form_100.png differ
diff --git a/doc/api/html/form_101.png b/doc/api/html/form_101.png
new file mode 100644
index 0000000..438264f
Binary files /dev/null and b/doc/api/html/form_101.png differ
diff --git a/doc/api/html/form_102.png b/doc/api/html/form_102.png
new file mode 100644
index 0000000..5e0a536
Binary files /dev/null and b/doc/api/html/form_102.png differ
diff --git a/doc/api/html/form_103.png b/doc/api/html/form_103.png
new file mode 100644
index 0000000..996f73a
Binary files /dev/null and b/doc/api/html/form_103.png differ
diff --git a/doc/api/html/form_104.png b/doc/api/html/form_104.png
new file mode 100644
index 0000000..20ee68c
Binary files /dev/null and b/doc/api/html/form_104.png differ
diff --git a/doc/api/html/form_105.png b/doc/api/html/form_105.png
new file mode 100644
index 0000000..519da32
Binary files /dev/null and b/doc/api/html/form_105.png differ
diff --git a/doc/api/html/form_106.png b/doc/api/html/form_106.png
new file mode 100644
index 0000000..a11640d
Binary files /dev/null and b/doc/api/html/form_106.png differ
diff --git a/doc/api/html/form_107.png b/doc/api/html/form_107.png
new file mode 100644
index 0000000..b259813
Binary files /dev/null and b/doc/api/html/form_107.png differ
diff --git a/doc/api/html/form_108.png b/doc/api/html/form_108.png
new file mode 100644
index 0000000..d7b488b
Binary files /dev/null and b/doc/api/html/form_108.png differ
diff --git a/doc/api/html/form_109.png b/doc/api/html/form_109.png
new file mode 100644
index 0000000..f85e586
Binary files /dev/null and b/doc/api/html/form_109.png differ
diff --git a/doc/api/html/form_11.png b/doc/api/html/form_11.png
new file mode 100644
index 0000000..8d74f29
Binary files /dev/null and b/doc/api/html/form_11.png differ
diff --git a/doc/api/html/form_110.png b/doc/api/html/form_110.png
new file mode 100644
index 0000000..d58b824
Binary files /dev/null and b/doc/api/html/form_110.png differ
diff --git a/doc/api/html/form_111.png b/doc/api/html/form_111.png
new file mode 100644
index 0000000..4742c70
Binary files /dev/null and b/doc/api/html/form_111.png differ
diff --git a/doc/api/html/form_112.png b/doc/api/html/form_112.png
new file mode 100644
index 0000000..97fe23b
Binary files /dev/null and b/doc/api/html/form_112.png differ
diff --git a/doc/api/html/form_113.png b/doc/api/html/form_113.png
new file mode 100644
index 0000000..9be9b6c
Binary files /dev/null and b/doc/api/html/form_113.png differ
diff --git a/doc/api/html/form_114.png b/doc/api/html/form_114.png
new file mode 100644
index 0000000..3667f26
Binary files /dev/null and b/doc/api/html/form_114.png differ
diff --git a/doc/api/html/form_115.png b/doc/api/html/form_115.png
new file mode 100644
index 0000000..35809eb
Binary files /dev/null and b/doc/api/html/form_115.png differ
diff --git a/doc/api/html/form_116.png b/doc/api/html/form_116.png
new file mode 100644
index 0000000..1c65677
Binary files /dev/null and b/doc/api/html/form_116.png differ
diff --git a/doc/api/html/form_117.png b/doc/api/html/form_117.png
new file mode 100644
index 0000000..cca2cb8
Binary files /dev/null and b/doc/api/html/form_117.png differ
diff --git a/doc/api/html/form_118.png b/doc/api/html/form_118.png
new file mode 100644
index 0000000..67b4970
Binary files /dev/null and b/doc/api/html/form_118.png differ
diff --git a/doc/api/html/form_119.png b/doc/api/html/form_119.png
new file mode 100644
index 0000000..cc84aa1
Binary files /dev/null and b/doc/api/html/form_119.png differ
diff --git a/doc/api/html/form_12.png b/doc/api/html/form_12.png
new file mode 100644
index 0000000..2f2d622
Binary files /dev/null and b/doc/api/html/form_12.png differ
diff --git a/doc/api/html/form_120.png b/doc/api/html/form_120.png
new file mode 100644
index 0000000..61172b7
Binary files /dev/null and b/doc/api/html/form_120.png differ
diff --git a/doc/api/html/form_121.png b/doc/api/html/form_121.png
new file mode 100644
index 0000000..bfcd3dd
Binary files /dev/null and b/doc/api/html/form_121.png differ
diff --git a/doc/api/html/form_122.png b/doc/api/html/form_122.png
new file mode 100644
index 0000000..ec5f7c9
Binary files /dev/null and b/doc/api/html/form_122.png differ
diff --git a/doc/api/html/form_123.png b/doc/api/html/form_123.png
new file mode 100644
index 0000000..2159692
Binary files /dev/null and b/doc/api/html/form_123.png differ
diff --git a/doc/api/html/form_124.png b/doc/api/html/form_124.png
new file mode 100644
index 0000000..95670aa
Binary files /dev/null and b/doc/api/html/form_124.png differ
diff --git a/doc/api/html/form_125.png b/doc/api/html/form_125.png
new file mode 100644
index 0000000..ca4e040
Binary files /dev/null and b/doc/api/html/form_125.png differ
diff --git a/doc/api/html/form_126.png b/doc/api/html/form_126.png
new file mode 100644
index 0000000..52b5e8b
Binary files /dev/null and b/doc/api/html/form_126.png differ
diff --git a/doc/api/html/form_127.png b/doc/api/html/form_127.png
new file mode 100644
index 0000000..8fd0afc
Binary files /dev/null and b/doc/api/html/form_127.png differ
diff --git a/doc/api/html/form_128.png b/doc/api/html/form_128.png
new file mode 100644
index 0000000..632378b
Binary files /dev/null and b/doc/api/html/form_128.png differ
diff --git a/doc/api/html/form_129.png b/doc/api/html/form_129.png
new file mode 100644
index 0000000..b13b40a
Binary files /dev/null and b/doc/api/html/form_129.png differ
diff --git a/doc/api/html/form_13.png b/doc/api/html/form_13.png
new file mode 100644
index 0000000..b2c64c3
Binary files /dev/null and b/doc/api/html/form_13.png differ
diff --git a/doc/api/html/form_130.png b/doc/api/html/form_130.png
new file mode 100644
index 0000000..4e59b05
Binary files /dev/null and b/doc/api/html/form_130.png differ
diff --git a/doc/api/html/form_131.png b/doc/api/html/form_131.png
new file mode 100644
index 0000000..eb402b0
Binary files /dev/null and b/doc/api/html/form_131.png differ
diff --git a/doc/api/html/form_132.png b/doc/api/html/form_132.png
new file mode 100644
index 0000000..437ca9d
Binary files /dev/null and b/doc/api/html/form_132.png differ
diff --git a/doc/api/html/form_133.png b/doc/api/html/form_133.png
new file mode 100644
index 0000000..4cbf872
Binary files /dev/null and b/doc/api/html/form_133.png differ
diff --git a/doc/api/html/form_134.png b/doc/api/html/form_134.png
new file mode 100644
index 0000000..8b80a7f
Binary files /dev/null and b/doc/api/html/form_134.png differ
diff --git a/doc/api/html/form_135.png b/doc/api/html/form_135.png
new file mode 100644
index 0000000..774e523
Binary files /dev/null and b/doc/api/html/form_135.png differ
diff --git a/doc/api/html/form_136.png b/doc/api/html/form_136.png
new file mode 100644
index 0000000..b56c675
Binary files /dev/null and b/doc/api/html/form_136.png differ
diff --git a/doc/api/html/form_137.png b/doc/api/html/form_137.png
new file mode 100644
index 0000000..8fa4de3
Binary files /dev/null and b/doc/api/html/form_137.png differ
diff --git a/doc/api/html/form_138.png b/doc/api/html/form_138.png
new file mode 100644
index 0000000..fa9b2fc
Binary files /dev/null and b/doc/api/html/form_138.png differ
diff --git a/doc/api/html/form_139.png b/doc/api/html/form_139.png
new file mode 100644
index 0000000..e343fef
Binary files /dev/null and b/doc/api/html/form_139.png differ
diff --git a/doc/api/html/form_14.png b/doc/api/html/form_14.png
new file mode 100644
index 0000000..289ae1b
Binary files /dev/null and b/doc/api/html/form_14.png differ
diff --git a/doc/api/html/form_15.png b/doc/api/html/form_15.png
new file mode 100644
index 0000000..8943508
Binary files /dev/null and b/doc/api/html/form_15.png differ
diff --git a/doc/api/html/form_16.png b/doc/api/html/form_16.png
new file mode 100644
index 0000000..13842bb
Binary files /dev/null and b/doc/api/html/form_16.png differ
diff --git a/doc/api/html/form_17.png b/doc/api/html/form_17.png
new file mode 100644
index 0000000..25ddedf
Binary files /dev/null and b/doc/api/html/form_17.png differ
diff --git a/doc/api/html/form_18.png b/doc/api/html/form_18.png
new file mode 100644
index 0000000..87da112
Binary files /dev/null and b/doc/api/html/form_18.png differ
diff --git a/doc/api/html/form_19.png b/doc/api/html/form_19.png
new file mode 100644
index 0000000..c564494
Binary files /dev/null and b/doc/api/html/form_19.png differ
diff --git a/doc/api/html/form_2.png b/doc/api/html/form_2.png
new file mode 100644
index 0000000..a6bbbc7
Binary files /dev/null and b/doc/api/html/form_2.png differ
diff --git a/doc/api/html/form_20.png b/doc/api/html/form_20.png
new file mode 100644
index 0000000..5107265
Binary files /dev/null and b/doc/api/html/form_20.png differ
diff --git a/doc/api/html/form_21.png b/doc/api/html/form_21.png
new file mode 100644
index 0000000..fe59754
Binary files /dev/null and b/doc/api/html/form_21.png differ
diff --git a/doc/api/html/form_22.png b/doc/api/html/form_22.png
new file mode 100644
index 0000000..bceb5f9
Binary files /dev/null and b/doc/api/html/form_22.png differ
diff --git a/doc/api/html/form_23.png b/doc/api/html/form_23.png
new file mode 100644
index 0000000..d3b0a60
Binary files /dev/null and b/doc/api/html/form_23.png differ
diff --git a/doc/api/html/form_24.png b/doc/api/html/form_24.png
new file mode 100644
index 0000000..c999cbe
Binary files /dev/null and b/doc/api/html/form_24.png differ
diff --git a/doc/api/html/form_25.png b/doc/api/html/form_25.png
new file mode 100644
index 0000000..1e27259
Binary files /dev/null and b/doc/api/html/form_25.png differ
diff --git a/doc/api/html/form_26.png b/doc/api/html/form_26.png
new file mode 100644
index 0000000..ce4366d
Binary files /dev/null and b/doc/api/html/form_26.png differ
diff --git a/doc/api/html/form_27.png b/doc/api/html/form_27.png
new file mode 100644
index 0000000..f4928c6
Binary files /dev/null and b/doc/api/html/form_27.png differ
diff --git a/doc/api/html/form_28.png b/doc/api/html/form_28.png
new file mode 100644
index 0000000..e0a1be3
Binary files /dev/null and b/doc/api/html/form_28.png differ
diff --git a/doc/api/html/form_29.png b/doc/api/html/form_29.png
new file mode 100644
index 0000000..ff81525
Binary files /dev/null and b/doc/api/html/form_29.png differ
diff --git a/doc/api/html/form_3.png b/doc/api/html/form_3.png
new file mode 100644
index 0000000..b0e94c7
Binary files /dev/null and b/doc/api/html/form_3.png differ
diff --git a/doc/api/html/form_30.png b/doc/api/html/form_30.png
new file mode 100644
index 0000000..2fbfaf8
Binary files /dev/null and b/doc/api/html/form_30.png differ
diff --git a/doc/api/html/form_31.png b/doc/api/html/form_31.png
new file mode 100644
index 0000000..95283dc
Binary files /dev/null and b/doc/api/html/form_31.png differ
diff --git a/doc/api/html/form_32.png b/doc/api/html/form_32.png
new file mode 100644
index 0000000..a1b8abc
Binary files /dev/null and b/doc/api/html/form_32.png differ
diff --git a/doc/api/html/form_33.png b/doc/api/html/form_33.png
new file mode 100644
index 0000000..570f79b
Binary files /dev/null and b/doc/api/html/form_33.png differ
diff --git a/doc/api/html/form_34.png b/doc/api/html/form_34.png
new file mode 100644
index 0000000..292158a
Binary files /dev/null and b/doc/api/html/form_34.png differ
diff --git a/doc/api/html/form_35.png b/doc/api/html/form_35.png
new file mode 100644
index 0000000..60bd34c
Binary files /dev/null and b/doc/api/html/form_35.png differ
diff --git a/doc/api/html/form_36.png b/doc/api/html/form_36.png
new file mode 100644
index 0000000..388f9ff
Binary files /dev/null and b/doc/api/html/form_36.png differ
diff --git a/doc/api/html/form_37.png b/doc/api/html/form_37.png
new file mode 100644
index 0000000..f2266aa
Binary files /dev/null and b/doc/api/html/form_37.png differ
diff --git a/doc/api/html/form_38.png b/doc/api/html/form_38.png
new file mode 100644
index 0000000..3408b36
Binary files /dev/null and b/doc/api/html/form_38.png differ
diff --git a/doc/api/html/form_39.png b/doc/api/html/form_39.png
new file mode 100644
index 0000000..12d5096
Binary files /dev/null and b/doc/api/html/form_39.png differ
diff --git a/doc/api/html/form_4.png b/doc/api/html/form_4.png
new file mode 100644
index 0000000..4d6582a
Binary files /dev/null and b/doc/api/html/form_4.png differ
diff --git a/doc/api/html/form_40.png b/doc/api/html/form_40.png
new file mode 100644
index 0000000..ae095b2
Binary files /dev/null and b/doc/api/html/form_40.png differ
diff --git a/doc/api/html/form_41.png b/doc/api/html/form_41.png
new file mode 100644
index 0000000..e967111
Binary files /dev/null and b/doc/api/html/form_41.png differ
diff --git a/doc/api/html/form_42.png b/doc/api/html/form_42.png
new file mode 100644
index 0000000..0641e64
Binary files /dev/null and b/doc/api/html/form_42.png differ
diff --git a/doc/api/html/form_43.png b/doc/api/html/form_43.png
new file mode 100644
index 0000000..75cf1af
Binary files /dev/null and b/doc/api/html/form_43.png differ
diff --git a/doc/api/html/form_44.png b/doc/api/html/form_44.png
new file mode 100644
index 0000000..513f9c9
Binary files /dev/null and b/doc/api/html/form_44.png differ
diff --git a/doc/api/html/form_45.png b/doc/api/html/form_45.png
new file mode 100644
index 0000000..db2aece
Binary files /dev/null and b/doc/api/html/form_45.png differ
diff --git a/doc/api/html/form_46.png b/doc/api/html/form_46.png
new file mode 100644
index 0000000..650f65e
Binary files /dev/null and b/doc/api/html/form_46.png differ
diff --git a/doc/api/html/form_47.png b/doc/api/html/form_47.png
new file mode 100644
index 0000000..c832bb5
Binary files /dev/null and b/doc/api/html/form_47.png differ
diff --git a/doc/api/html/form_48.png b/doc/api/html/form_48.png
new file mode 100644
index 0000000..9f63a36
Binary files /dev/null and b/doc/api/html/form_48.png differ
diff --git a/doc/api/html/form_49.png b/doc/api/html/form_49.png
new file mode 100644
index 0000000..96c5f0b
Binary files /dev/null and b/doc/api/html/form_49.png differ
diff --git a/doc/api/html/form_5.png b/doc/api/html/form_5.png
new file mode 100644
index 0000000..f558ccf
Binary files /dev/null and b/doc/api/html/form_5.png differ
diff --git a/doc/api/html/form_50.png b/doc/api/html/form_50.png
new file mode 100644
index 0000000..5c4a9ba
Binary files /dev/null and b/doc/api/html/form_50.png differ
diff --git a/doc/api/html/form_51.png b/doc/api/html/form_51.png
new file mode 100644
index 0000000..d156539
Binary files /dev/null and b/doc/api/html/form_51.png differ
diff --git a/doc/api/html/form_52.png b/doc/api/html/form_52.png
new file mode 100644
index 0000000..f8a9456
Binary files /dev/null and b/doc/api/html/form_52.png differ
diff --git a/doc/api/html/form_53.png b/doc/api/html/form_53.png
new file mode 100644
index 0000000..83b29ec
Binary files /dev/null and b/doc/api/html/form_53.png differ
diff --git a/doc/api/html/form_54.png b/doc/api/html/form_54.png
new file mode 100644
index 0000000..70259d8
Binary files /dev/null and b/doc/api/html/form_54.png differ
diff --git a/doc/api/html/form_55.png b/doc/api/html/form_55.png
new file mode 100644
index 0000000..2be1e8d
Binary files /dev/null and b/doc/api/html/form_55.png differ
diff --git a/doc/api/html/form_56.png b/doc/api/html/form_56.png
new file mode 100644
index 0000000..8ae7d2c
Binary files /dev/null and b/doc/api/html/form_56.png differ
diff --git a/doc/api/html/form_57.png b/doc/api/html/form_57.png
new file mode 100644
index 0000000..eb53520
Binary files /dev/null and b/doc/api/html/form_57.png differ
diff --git a/doc/api/html/form_58.png b/doc/api/html/form_58.png
new file mode 100644
index 0000000..3d4805a
Binary files /dev/null and b/doc/api/html/form_58.png differ
diff --git a/doc/api/html/form_59.png b/doc/api/html/form_59.png
new file mode 100644
index 0000000..e73edbb
Binary files /dev/null and b/doc/api/html/form_59.png differ
diff --git a/doc/api/html/form_6.png b/doc/api/html/form_6.png
new file mode 100644
index 0000000..dcfadbc
Binary files /dev/null and b/doc/api/html/form_6.png differ
diff --git a/doc/api/html/form_60.png b/doc/api/html/form_60.png
new file mode 100644
index 0000000..f1c8800
Binary files /dev/null and b/doc/api/html/form_60.png differ
diff --git a/doc/api/html/form_61.png b/doc/api/html/form_61.png
new file mode 100644
index 0000000..a433cfa
Binary files /dev/null and b/doc/api/html/form_61.png differ
diff --git a/doc/api/html/form_62.png b/doc/api/html/form_62.png
new file mode 100644
index 0000000..1f26d0e
Binary files /dev/null and b/doc/api/html/form_62.png differ
diff --git a/doc/api/html/form_63.png b/doc/api/html/form_63.png
new file mode 100644
index 0000000..3d4805a
Binary files /dev/null and b/doc/api/html/form_63.png differ
diff --git a/doc/api/html/form_64.png b/doc/api/html/form_64.png
new file mode 100644
index 0000000..f756cd5
Binary files /dev/null and b/doc/api/html/form_64.png differ
diff --git a/doc/api/html/form_65.png b/doc/api/html/form_65.png
new file mode 100644
index 0000000..03438b4
Binary files /dev/null and b/doc/api/html/form_65.png differ
diff --git a/doc/api/html/form_66.png b/doc/api/html/form_66.png
new file mode 100644
index 0000000..a433cfa
Binary files /dev/null and b/doc/api/html/form_66.png differ
diff --git a/doc/api/html/form_67.png b/doc/api/html/form_67.png
new file mode 100644
index 0000000..1f26d0e
Binary files /dev/null and b/doc/api/html/form_67.png differ
diff --git a/doc/api/html/form_68.png b/doc/api/html/form_68.png
new file mode 100644
index 0000000..9afa409
Binary files /dev/null and b/doc/api/html/form_68.png differ
diff --git a/doc/api/html/form_69.png b/doc/api/html/form_69.png
new file mode 100644
index 0000000..3d4805a
Binary files /dev/null and b/doc/api/html/form_69.png differ
diff --git a/doc/api/html/form_7.png b/doc/api/html/form_7.png
new file mode 100644
index 0000000..ff0b031
Binary files /dev/null and b/doc/api/html/form_7.png differ
diff --git a/doc/api/html/form_70.png b/doc/api/html/form_70.png
new file mode 100644
index 0000000..d021395
Binary files /dev/null and b/doc/api/html/form_70.png differ
diff --git a/doc/api/html/form_71.png b/doc/api/html/form_71.png
new file mode 100644
index 0000000..a433cfa
Binary files /dev/null and b/doc/api/html/form_71.png differ
diff --git a/doc/api/html/form_72.png b/doc/api/html/form_72.png
new file mode 100644
index 0000000..1f26d0e
Binary files /dev/null and b/doc/api/html/form_72.png differ
diff --git a/doc/api/html/form_73.png b/doc/api/html/form_73.png
new file mode 100644
index 0000000..435935a
Binary files /dev/null and b/doc/api/html/form_73.png differ
diff --git a/doc/api/html/form_74.png b/doc/api/html/form_74.png
new file mode 100644
index 0000000..a3bd77f
Binary files /dev/null and b/doc/api/html/form_74.png differ
diff --git a/doc/api/html/form_75.png b/doc/api/html/form_75.png
new file mode 100644
index 0000000..025d0ab
Binary files /dev/null and b/doc/api/html/form_75.png differ
diff --git a/doc/api/html/form_76.png b/doc/api/html/form_76.png
new file mode 100644
index 0000000..a28a592
Binary files /dev/null and b/doc/api/html/form_76.png differ
diff --git a/doc/api/html/form_77.png b/doc/api/html/form_77.png
new file mode 100644
index 0000000..d3d8884
Binary files /dev/null and b/doc/api/html/form_77.png differ
diff --git a/doc/api/html/form_78.png b/doc/api/html/form_78.png
new file mode 100644
index 0000000..53a4820
Binary files /dev/null and b/doc/api/html/form_78.png differ
diff --git a/doc/api/html/form_79.png b/doc/api/html/form_79.png
new file mode 100644
index 0000000..29e0831
Binary files /dev/null and b/doc/api/html/form_79.png differ
diff --git a/doc/api/html/form_8.png b/doc/api/html/form_8.png
new file mode 100644
index 0000000..b426d20
Binary files /dev/null and b/doc/api/html/form_8.png differ
diff --git a/doc/api/html/form_80.png b/doc/api/html/form_80.png
new file mode 100644
index 0000000..485518b
Binary files /dev/null and b/doc/api/html/form_80.png differ
diff --git a/doc/api/html/form_81.png b/doc/api/html/form_81.png
new file mode 100644
index 0000000..76a84c7
Binary files /dev/null and b/doc/api/html/form_81.png differ
diff --git a/doc/api/html/form_82.png b/doc/api/html/form_82.png
new file mode 100644
index 0000000..eeeeda9
Binary files /dev/null and b/doc/api/html/form_82.png differ
diff --git a/doc/api/html/form_83.png b/doc/api/html/form_83.png
new file mode 100644
index 0000000..393ceb2
Binary files /dev/null and b/doc/api/html/form_83.png differ
diff --git a/doc/api/html/form_84.png b/doc/api/html/form_84.png
new file mode 100644
index 0000000..6209553
Binary files /dev/null and b/doc/api/html/form_84.png differ
diff --git a/doc/api/html/form_85.png b/doc/api/html/form_85.png
new file mode 100644
index 0000000..aecc315
Binary files /dev/null and b/doc/api/html/form_85.png differ
diff --git a/doc/api/html/form_86.png b/doc/api/html/form_86.png
new file mode 100644
index 0000000..24a2c21
Binary files /dev/null and b/doc/api/html/form_86.png differ
diff --git a/doc/api/html/form_87.png b/doc/api/html/form_87.png
new file mode 100644
index 0000000..9716cb9
Binary files /dev/null and b/doc/api/html/form_87.png differ
diff --git a/doc/api/html/form_88.png b/doc/api/html/form_88.png
new file mode 100644
index 0000000..7dd4b01
Binary files /dev/null and b/doc/api/html/form_88.png differ
diff --git a/doc/api/html/form_89.png b/doc/api/html/form_89.png
new file mode 100644
index 0000000..06f32bc
Binary files /dev/null and b/doc/api/html/form_89.png differ
diff --git a/doc/api/html/form_9.png b/doc/api/html/form_9.png
new file mode 100644
index 0000000..0063477
Binary files /dev/null and b/doc/api/html/form_9.png differ
diff --git a/doc/api/html/form_90.png b/doc/api/html/form_90.png
new file mode 100644
index 0000000..9d9379f
Binary files /dev/null and b/doc/api/html/form_90.png differ
diff --git a/doc/api/html/form_91.png b/doc/api/html/form_91.png
new file mode 100644
index 0000000..21ea066
Binary files /dev/null and b/doc/api/html/form_91.png differ
diff --git a/doc/api/html/form_92.png b/doc/api/html/form_92.png
new file mode 100644
index 0000000..00cb9f0
Binary files /dev/null and b/doc/api/html/form_92.png differ
diff --git a/doc/api/html/form_93.png b/doc/api/html/form_93.png
new file mode 100644
index 0000000..26d8933
Binary files /dev/null and b/doc/api/html/form_93.png differ
diff --git a/doc/api/html/form_94.png b/doc/api/html/form_94.png
new file mode 100644
index 0000000..d07654a
Binary files /dev/null and b/doc/api/html/form_94.png differ
diff --git a/doc/api/html/form_95.png b/doc/api/html/form_95.png
new file mode 100644
index 0000000..0d1c013
Binary files /dev/null and b/doc/api/html/form_95.png differ
diff --git a/doc/api/html/form_96.png b/doc/api/html/form_96.png
new file mode 100644
index 0000000..bb0ccb9
Binary files /dev/null and b/doc/api/html/form_96.png differ
diff --git a/doc/api/html/form_97.png b/doc/api/html/form_97.png
new file mode 100644
index 0000000..5ead9ef
Binary files /dev/null and b/doc/api/html/form_97.png differ
diff --git a/doc/api/html/form_98.png b/doc/api/html/form_98.png
new file mode 100644
index 0000000..d99570e
Binary files /dev/null and b/doc/api/html/form_98.png differ
diff --git a/doc/api/html/form_99.png b/doc/api/html/form_99.png
new file mode 100644
index 0000000..08d72f1
Binary files /dev/null and b/doc/api/html/form_99.png differ
diff --git a/doc/api/html/formula.repository b/doc/api/html/formula.repository
new file mode 100644
index 0000000..5c3eb05
--- /dev/null
+++ b/doc/api/html/formula.repository
@@ -0,0 +1,140 @@
+\form#0:$2\le\sigma<4$
+\form#1:$dM$
+\form#2:$D$
+\form#3:$N_0+\hdots+N_{d-1}$
+\form#4:$B$
+\form#5:$N$
+\form#6:$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$
+\form#7:$m=0,\ldots, M-1$
+\form#8:$M \in \mathbb{N},$
+\form#9:$M_{k,0}\left(x\right)$
+\form#10:$\prod_{t=0}^{d-1} v_t$
+\form#11:$\prod_{t=0}^{d-1} v_t-a$
+\form#12:$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}$
+\form#13:$x^H x$
+\form#14:$x^H (w \odot x)$
+\form#15:$x^H (w1\odot w2\odot w2 \odot x)$
+\form#16:$x^H (w2\odot w2 \odot x)$
+\form#17:$x \leftarrow y$
+\form#18:$x \leftarrow a y$
+\form#19:$x \leftarrow w\odot y$
+\form#20:$x \leftarrow a x + y$
+\form#21:$x \leftarrow x + a y$
+\form#22:$x \leftarrow a x + b y$
+\form#23:$x \leftarrow x + a w\odot y$
+\form#24:$x \leftarrow a x + w\odot y$
+\form#25:$[0,1]\times[0,1]{\rm i}$
+\form#26:$[-1/2,1/2]$
+\form#27:$x_j$
+\form#28:$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)$
+\form#29:$P_k : \mathbb{R} \rightarrow \mathbb{R}$
+\form#30:\[ f(x) = \sum_{k=0}^N a_k P_k(x) \quad (N \in \mathbb{N}_0) \]
+\form#31:\[ P_{k+1}(x) = (alpha_k * x + beta_k)*P_{k}(x) + gamma_k P_{k-1}(x) \quad (alpha_k, beta_k, gamma_k \in \mathbb{R},\; k \ge 0) \]
+\form#32:$P_{-1}(x) := 0$
+\form#33:$P_0(x) := \lambda$
+\form#34:$\left(a_k\right)_{k=0}^N \in \mathbb{C}^{N+1}$
+\form#35:$\left(x_j\right)_{j=0}^M \in \mathbb{R}^{M+1}$
+\form#36:$M \in \mathbb{N}_0$
+\form#37:$B, B^{\rm T}$
+\form#38:$D, D^T$
+\form#39:$\alpha_{k-1}^n$
+\form#40:$k,n = 0,1,\ldots,N$
+\form#41:$(N+1)^2$
+\form#42:$\beta_{k-1}^n$
+\form#43:$\gamma_{k-1}^n$
+\form#44:$P_k^n(x,c)$
+\form#45:$k$
+\form#46:$\alpha_c^n,\ldots,\alpha_{c+k}^n$
+\form#47:$\beta_c^n,\ldots,\beta_{c+k}^n$
+\form#48:$\gamma_c^n,\ldots,\gamma_{c+k}^n$
+\form#49:$N \in \mathbb{N}_0$
+\form#50:$\left(b_k^n\right)_{k=0}^M$
+\form#51:$-M \le n \le M$
+\form#52:\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]
+\form#53:$\left(c_k^n\right)_{k=0}^M$
+\form#54:\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]
+\form#55:$n=-M,\ldots,M$
+\form#56:$\left(b_k^n\right)_{k=0,\ldots,M;n=-M,\ldots,M}$
+\form#57:$\left(c_k^n\right)_{k=-M,\ldots,M;n=-M,\ldots,M}$
+\form#58:$\alpha_l^{km}$
+\form#59:$m$
+\form#60:$l$
+\form#61:$\beta_l^{km}$
+\form#62:$\gamma_l^{km}$
+\form#63:$ \alpha_{l}^{km}$
+\form#64:$ l= 0,\ldots,N $
+\form#65:$(2N+1)^2(N+1)$
+\form#66:$ \beta_{l}^{km}$
+\form#67:$ \gamma_{l}^{km}$
+\form#68:$ m = -N,\ldots,N $
+\form#69:$\alpha_{l}^{km}$
+\form#70:$ k,m = -N,\ldots,N $
+\form#71:$\beta_{l}^{km}$
+\form#72:$\gamma_{l}^{km}$
+\form#73:$d_l^{km}(x,c)$
+\form#74:$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}$
+\form#75:$\beta_c^{km},\ldots,\beta_{c+l}^{km}$
+\form#76:$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}$
+\form#77:$ d^{km}_l(cos(theta)) $
+\form#78:$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} $
+\form#79:$\frac{\|x-y\|_{\infty}}{\|z\|_1} $
+\form#80:$\frac{\|x-y\|_2}{\|x\|_2} $
+\form#81:$x^H (w\odot w2\odot w2 \odot x)$
+\form#82:$I_{n+\alpha}(x)$
+\form#83:$\mathrm{e}^{-x}$
+\form#84:$x,alpha$
+\form#85:$0 \le \alpha < 1$
+\form#86:$n=0,1,\ldots,nb-1$
+\form#87:$|x| \ge exparg$
+\form#88:$\min(nb,0)-1$
+\form#89:$n=0,1,\ldots,ncalc$
+\form#90:$J_{\nu}(x)$
+\form#91:$I_{\nu}(x)$
+\form#92:$x$
+\form#93:$\nu$
+\form#94:\[ f(g_q)=\sum^{N}_{l=0}\sum_{m,n=-l}^l \hat f^{mn}_l D_{mn}^l(\alpha_q,\beta_q,\gamma_q) \]
+\form#95:$[-1/4,1/4]$
+\form#96:$\mathbb{R}^3$
+\form#97:$\mathbb{S}^2$
+\form#98:$\varphi_1 \in [-\pi,\pi)$
+\form#99:$\vartheta_1 \in [0,\pi]$
+\form#100:$\varphi_2 \in [-\pi,\pi)$
+\form#101:$\vartheta_2 \in [0,\pi]$
+\form#102:$\cos \vartheta_1 \cos \vartheta_2 + \sin \vartheta_1 \sin(\vartheta_2 \cos(\varphi_1 - \varphi_2)$
+\form#103:$Q_h: [-1,1] \rightarrow \mathbb{R}$
+\form#104:$x \in [-1,1]$
+\form#105:$h \in (0,1)$
+\form#106:$Q_h(x)$
+\form#107:$S_h: [-1,1] \rightarrow \mathbb{R}$
+\form#108:$S_h(x)$
+\form#109:$L_{h,\lambda}: [-1,1] \rightarrow \mathbb{R}$
+\form#110:$\lambda \in \mathbb{N}_0$
+\form#111:$L_{h,\lambda}(x)$
+\form#112:$G_\sigma: [-1,1] \rightarrow \mathbb{R}$
+\form#113:$\sigma \in \mathbb{R}_+$
+\form#114:$G_\sigma(x)$
+\form#115:$x_{t,j}$
+\form#116:$w_{t,j}$
+\form#117:$T$
+\form#118:$R$
+\form#119:\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,,\qquad (j,t)^{\top}\in I_{\sqrt{2}R}\times I_T\,. \]
+\form#120:$r_j$
+\form#121:$\theta_t$
+\form#122:$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R$
+\form#123:$(j,t)^{\top}\in I_R\times I_T$
+\form#124:$r_j := \frac{j}{R} \in [-\frac{1}{2},\frac{1}{2})$
+\form#125:$\theta_t := \frac{\pi t}{T} \in [-\frac{\pi}{2},\frac{\pi}{2})$
+\form#126:\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,. \]
+\form#127:$M=TR$
+\form#128:$j \ne 0$
+\form#129:\[ w_{t,j} = \frac{\pi}{2TR^2}\left(\left(|j|+\frac{1}{2}\right)^2- \left(|j|-\frac{1}{2}\right)^2\right) = \frac{\pi |j| }{TR^2}\, . \]
+\form#130:$\frac{1}{2R}$
+\form#131:$\frac{\pi}{4R^2}$
+\form#132:$w_{t,0} := \frac{\pi}{4TR^2}$
+\form#133:$\frac{\pi}{4}(1+\frac{1}{R^2})$
+\form#134:\[ R_{\theta_t} f\left(\frac{s}{R}\right) = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k} \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)} \, \mathrm{e}^{2\pi\mathrm{i} r s / R} \qquad(t \in I_T, s \in I_R). \]
+\form#135:$\frac{r}{R}\theta_t$
+\form#136:$w_r$
+\form#137:$f_k$
+\form#138:$k \in I_N^2$
+\form#139:$t \in T$
diff --git a/doc/api/html/fpt_2simple__test_8c_source.html b/doc/api/html/fpt_2simple__test_8c_source.html
new file mode 100644
index 0000000..976a6e8
--- /dev/null
+++ b/doc/api/html/fpt_2simple__test_8c_source.html
@@ -0,0 +1,213 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7bc5b4c2d8fedbf49abc178849c07704.html">fpt</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fpt/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* It is important to include complex.h before nfft3.h. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* Two times Pi */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#define KPI2 6.2831853071795864769252867665590057683943387987502</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="comment">/* This example shows the use of the fast polynomial transform to evaluate a</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">   * finite expansion in Legendre polynomials,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">   *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">   *   f(x) = a_0 P_0(x) + a_1 P_1(x) + ... + a_N P_N(x)                     (1)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   *</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   * at the Chebyshev nodes x_j = cos(j*pi/N), j=0,1,...,N. */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N = 8;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/* An fpt_set is a data structure that contains precomputed data for a number</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   * of different polynomial transforms. Here, we need only one transform. the</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   * second parameter (t) is the exponent of the maximum transform size desired</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   * (2^t), i.e., t = 3 means that N in (1) can be at most N = 8. */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span> = fpt_init(1,lrint(ceil(log2((<span class="keywordtype">double</span>)N))),0U);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="comment">/* Three-term recurrence coefficients for Legendre polynomials */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = malloc((N+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)),</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = malloc((N+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)),</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = malloc((N+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="comment">/* alpha[0] and beta[0] are not referenced. */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   alpha[0] = <a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>[0] = 0.0;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* gamma[0] contains the value of P_0(x) (which is a constant). */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[0] = 1.0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* Actual three-term recurrence coefficients for Legendre polynomials */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       alpha[k+1] = ((double)(2*k+1))/((<span class="keywordtype">double</span>)(k+1));</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>       <a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>[k+1] = 0.0;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       <a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[k+1] = -((double)(k))/((<span class="keywordtype">double</span>)(k+1));</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   printf(</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="stringliteral">"Computing a fast polynomial transform (FPT) and a fast discrete cosine \n"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="stringliteral">"transform (DCT) to evaluate\n\n"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="stringliteral">"  f_j = a_0 P_0(x_j) + a_1 P_1(x_j) + ... + a_N P_N(x_j), j=0,1,...,N,\n\n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="stringliteral">"with N=%d, x_j = cos(j*pi/N), j=0,1,...N, the Chebyshev nodes, a_k,\n"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="stringliteral">"k=0,1,...,N, random Fourier coefficients in [-1,1]x[-1,1]*I, and P_k,\n"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="stringliteral">"k=0,1,...,N, the Legendre polynomials."</span>,N</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   );</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="comment">/* Random seed, makes things reproducible. */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   nfft_srand48(314);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/* The function fpt_repcompute actually does the precomputation for a single</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">   * transform. It needs arrays alpha, beta, and gamma, containing the three-</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">   * term recurrence coefficients, here of the Legendre polynomials. The format</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">   * is explained above. The sixth parameter (k_start) is where the index in the</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">   * linear combination (1) starts, here k_start=0. The seventh parameter</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">   * (kappa) is the threshold which has an influence on the accuracy of the fast</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">   * polynomial transform. Usually, kappa = 1000 is a good choice. */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   fpt_precompute(<span class="keyword">set</span>,0,alpha,<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>,<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coeffic [...]
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="comment">/* Arrays for Fourier coefficients and function values. */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordtype">double</span> _Complex *a = malloc((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordtype">double</span> _Complex *b = malloc((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordtype">double</span> *f = malloc((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="comment">/* Plan for discrete cosine transform */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> NP1 = N + 1;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     fftw_r2r_kind kind = FFTW_REDFT00;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     fftw_plan p = fftw_plan_many_r2r(1, &NP1, 1, (<span class="keywordtype">double</span>*)b, NULL, 2, 1,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       (<span class="keywordtype">double</span>*)f, NULL, 1, 1, &kind, 0U);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="comment">/* random Fourier coefficients */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       printf(<span class="stringliteral">"\n2) Random Fourier coefficients a_k, k=0,1,...,N:\n"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>       {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         a[k] = 2.0*nfft_drand48() - 1.0; <span class="comment">/* for debugging: use k+1 */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         printf(<span class="stringliteral">"   a_%-2d = %+5.3lE\n"</span>,k,creal(a[k]));</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>       }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="comment">/* fast polynomial transform */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     fpt_trafo(<span class="keyword">set</span>,0,a,b,N,0U);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* Renormalize coefficients b_j, j=1,2,...,N-1 owing to how FFTW defines a</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">     * DCT-I; see</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">     * http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">     * for details */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>       <span class="keywordflow">for</span> (j = 1; j < N; j++)</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         b[j] *= 0.5;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="comment">/* discrete cosine transform */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     fftw_execute(p);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       printf(<span class="stringliteral">"\n3) Function values f_j, j=1,1,...,M:\n"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         printf(<span class="stringliteral">"   f_%-2d = %+5.3lE\n"</span>,j,f[j]);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     free(a);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     free(b);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     free(f);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     fftw_destroy_plan(p);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   fpt_finalize(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   free(alpha);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   free(<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   free(<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fpt_8c.html b/doc/api/html/fpt_8c.html
new file mode 100644
index 0000000..4e0e168
--- /dev/null
+++ b/doc/api/html/fpt_8c.html
@@ -0,0 +1,463 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fpt.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fpt.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation file for the FPT module.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdbool.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="fpt_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html">fpt_step_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single multiplication step in the cascade summation.  <a href="structfpt__step__.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html">fpt_data_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single cascade summation.  <a href="structfpt__data__.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html">fpt_set_s_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a set of cascade summations.  <a href="structfpt__set__s__.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a58f899926cc6e95ea54dd68d131979b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58f899926cc6e95ea54dd68d131979b8"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">K_START_TILDE</a>(x, y)   (<a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">NFFT_MAX</a>(<a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(x,y-2),0))</td></tr>
+<tr class="memdesc:a58f899926cc6e95ea54dd68d131979b8"><td class="mdescLeft"> </td><td class="mdescRight">Minimum degree at top of a cascade. <br/></td></tr>
+<tr class="memitem:a769119c8ae45f2a30a62ba802d83139f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a769119c8ae45f2a30a62ba802d83139f"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">K_END_TILDE</a>(x, y)   <a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(x,y-1)</td></tr>
+<tr class="memdesc:a769119c8ae45f2a30a62ba802d83139f"><td class="mdescLeft"> </td><td class="mdescRight">Maximum degree at top of a cascade. <br/></td></tr>
+<tr class="memitem:ac81f7eac1a01b06e91817857f47b9804"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac81f7eac1a01b06e91817857f47b9804"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">FIRST_L</a>(x, y)   (LRINT(floor((x)/(double)y)))</td></tr>
+<tr class="memdesc:ac81f7eac1a01b06e91817857f47b9804"><td class="mdescLeft"> </td><td class="mdescRight">Index of first block of four functions at level. <br/></td></tr>
+<tr class="memitem:ac9f7e1529d635e3357d1e081ddf7e349"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9f7e1529d635e3357d1e081ddf7e349"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">LAST_L</a>(x, y)   (LRINT(ceil(((x)+1)/(double)y))-1)</td></tr>
+<tr class="memdesc:ac9f7e1529d635e3357d1e081ddf7e349"><td class="mdescLeft"> </td><td class="mdescRight">Index of last block of four functions at level. <br/></td></tr>
+<tr class="memitem:a3861f1554af7a46ab4788955bff82e16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3861f1554af7a46ab4788955bff82e16"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>N_TILDE</b>(y)   (y-1)</td></tr>
+<tr class="memitem:a2a3d2e8d45a563c618a6c2b6a292cc64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a3d2e8d45a563c618a6c2b6a292cc64"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>IS_SYMMETRIC</b>(x, y, z)   (x >= ((y-1.0)/z))</td></tr>
+<tr class="memitem:a81f8de5e3b3597d325e47d05d9f1213c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81f8de5e3b3597d325e47d05d9f1213c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_BREAK_EVEN</b>   4</td></tr>
+<tr class="memitem:a0afca80d182fb1abd524bc0a1378dc25"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>ABUVXPWY_SYMMETRIC</b>(NAME, S1, S2)</td></tr>
+<tr class="memitem:a18db89dcff6fae9720e01a0be56fc8f7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>ABUVXPWY_SYMMETRIC_1</b>(NAME, S1)</td></tr>
+<tr class="memitem:ad301783a6575cd0fc132ebaa12d3cf60"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>ABUVXPWY_SYMMETRIC_2</b>(NAME, S1)</td></tr>
+<tr class="memitem:a9fe176f7a67aa76e7d5c101ff5aefe68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe176f7a67aa76e7d5c101ff5aefe68"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_DO_STEP</b>(NAME, M1_FUNCTION, M2_FUNCTION)</td></tr>
+<tr class="memitem:a8cb478c4a27a921310d57427c1e94aa4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>FPT_DO_STEP_TRANSPOSED</b>(NAME, M1_FUNCTION, M2_FUNCTION)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a4c7f62127651d301d4604b3a6519458d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c7f62127651d301d4604b3a6519458d"></a>
+typedef struct <a class="el" href="structfpt__step__.html">fpt_step_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt_step</a></td></tr>
+<tr class="memdesc:a4c7f62127651d301d4604b3a6519458d"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single multiplication step in the cascade summation. <br/></td></tr>
+<tr class="memitem:a5141ba7ff5b14b5fbf7ee769943f1c10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5141ba7ff5b14b5fbf7ee769943f1c10"></a>
+typedef struct <a class="el" href="structfpt__data__.html">fpt_data_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt_data</a></td></tr>
+<tr class="memdesc:a5141ba7ff5b14b5fbf7ee769943f1c10"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single cascade summation. <br/></td></tr>
+<tr class="memitem:a06f7c65536489b0602c70a616e9f1fe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06f7c65536489b0602c70a616e9f1fe8"></a>
+typedef struct <a class="el" href="structfpt__set__s__.html">fpt_set_s_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8">fpt_set_s</a></td></tr>
+<tr class="memdesc:a06f7c65536489b0602c70a616e9f1fe8"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a set of cascade summations. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a736cbc7c2da6a04952583fd49e25e4e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a736cbc7c2da6a04952583fd49e25e4e3"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:aad216e28422c530c4ee4fbf95fd33e1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad216e28422c530c4ee4fbf95fd33e1b"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric1</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:a83f9840e24ce540950b72434c661fde0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83f9840e24ce540950b72434c661fde0"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric2</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:a3b79087d7b531639c88b9e63663d0001"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b79087d7b531639c88b9e63663d0001"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric1_1</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, int n, double *xx)</td></tr>
+<tr class="memitem:a8144ba83b6da484aef595c3d9dacc138"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8144ba83b6da484aef595c3d9dacc138"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric1_2</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, int n, double *xx)</td></tr>
+<tr class="memitem:ab0f8ee56f80660ec5e0f203389d736cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0f8ee56f80660ec5e0f203389d736cc"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric2_1</b> (double a, double b, double _Complex *u, double _Complex *x, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:a0ef6c4c0b701e19dc21041d62882f375"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ef6c4c0b701e19dc21041d62882f375"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric2_2</b> (double a, double b, double _Complex *u, double _Complex *x, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:ab1fe68d8531716c8a5e036baca7a182b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1fe68d8531716c8a5e036baca7a182b"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:afef4734728c0be3266b66352674602e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef4734728c0be3266b66352674602e6"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy_symmetric</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:a8c808df9f2681afd90495d0440773474"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c808df9f2681afd90495d0440773474"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy_symmetric_1</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:ab68e898834538d04a587fb3b47ca9e77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab68e898834538d04a587fb3b47ca9e77"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy_symmetric_2</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:a6eb07ec910d75702e7407e7c33cf3817"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb07ec910d75702e7407e7c33cf3817"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a37851bd35e077d1e38b83030e711640c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37851bd35e077d1e38b83030e711640c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_symmetric</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a2b4990ee477f2cbfecae8c2d10d45ad0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b4990ee477f2cbfecae8c2d10d45ad0"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_symmetric_u</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a80c9f8e8cef9c53fced32b54d9db0527"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80c9f8e8cef9c53fced32b54d9db0527"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_symmetric_l</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:aef54b179ce562d67ede119727d18dfbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef54b179ce562d67ede119727d18dfbf"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a672e9251669c82c40fab19a2c66bd04f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a672e9251669c82c40fab19a2c66bd04f"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t_symmetric</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:af140e4b95bdb5718b30dccb254f4c98e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af140e4b95bdb5718b30dccb254f4c98e"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t_symmetric_u</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a5882ba5488023dbb43a37d69799f9054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5882ba5488023dbb43a37d69799f9054"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t_symmetric_l</b> (double _Complex *a, double _Complex *b, double *a21, double *a22, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:acf8cc85f60664acaf217f3546ccb0cdb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf8cc85f60664acaf217f3546ccb0cdb"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>eval_clenshaw</b> (const double *x, double *y, int size, int k, const double *alpha, const double *beta, const double *gam)</td></tr>
+<tr class="memitem:aa240495a95de302ce4a8da517fbeef6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa240495a95de302ce4a8da517fbeef6e"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>eval_clenshaw2</b> (const double *x, double *z, double *y, int size1, int size, int k, const double *alpha, const double *beta, const double *gam)</td></tr>
+<tr class="memitem:a7286ea3559feea24b14c2905c5ec0a9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7286ea3559feea24b14c2905c5ec0a9d"></a>
+static int </td><td class="memItemRight" valign="bottom"><b>eval_clenshaw_thresh2</b> (const double *x, double *z, double *y, int size, int k, const double *alpha, const double *beta, const double *gam, const double threshold)</td></tr>
+<tr class="memitem:a2e7a261a047fe617e987e83e40032ecf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e7a261a047fe617e987e83e40032ecf"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>eval_sum_clenshaw_fast</b> (const int N, const int M, const double _Complex *a, const double *x, double _Complex *y, const double *alpha, const double *beta, const double *gam, const double lambda)</td></tr>
+<tr class="memitem:a509209ea5b6e210805a37cd80579c2c5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">eval_sum_clenshaw_transposed</a> (int N, int M, double _Complex *a, double *x, double _Complex *y, double _Complex *temp, double *alpha, double *beta, double *gam, double lambda)</td></tr>
+<tr class="memdesc:a509209ea5b6e210805a37cd80579c2c5"><td class="mdescLeft"> </td><td class="mdescRight">Clenshaw algorithm.  <a href="#a509209ea5b6e210805a37cd80579c2c5"></a><br/></td></tr>
+<tr class="memitem:ad103ad18c75ee5dd048392dfd1ca7305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad103ad18c75ee5dd048392dfd1ca7305"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><b>fpt_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:ad3c3b30fda57364c92958cc7390b6378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3c3b30fda57364c92958cc7390b6378"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_precompute</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double *alpha, double *beta, double *gam, int k_start, const double threshold)</td></tr>
+<tr class="memitem:ade78830b02dc8b789992d6c3009c3f6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade78830b02dc8b789992d6c3009c3f6f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a41f2c9ddd39779e60f0431efa67bb560"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f2c9ddd39779e60f0431efa67bb560"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a51ede94663119ef8153dfbd07456badc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51ede94663119ef8153dfbd07456badc"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:aa2084b56c851ff0c58d10bf34a084a38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2084b56c851ff0c58d10bf34a084a38"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a7f2a1b915af8d0e7f2eb2f37ddb6772c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f2a1b915af8d0e7f2eb2f37ddb6772c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_finalize</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Implementation file for the FPT module. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition in file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="a0afca80d182fb1abd524bc0a1378dc25"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ABUVXPWY_SYMMETRIC</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">NAME, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">S1, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">S2 </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, \</div>
+<div class="line">  <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n) \</div>
+<div class="line">{ \</div>
+<div class="line">  const <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line">  int l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</div>
+<div class="line">  double *v_ptr = v, *w_ptr = w; \</div>
+<div class="line">  for (l = 0; l < n2; l++) \</div>
+<div class="line">    *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++)); \</div>
+<div class="line">  v_ptr--; w_ptr--; \</div>
+<div class="line">  for (l = 0; l < n2; l++) \</div>
+<div class="line">    *u_ptr++ = a * (b * S1 * (*v_ptr--) * (*x_ptr++) + S2 * (*w_ptr--) * (*y_ptr++)); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00139">139</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a18db89dcff6fae9720e01a0be56fc8f7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ABUVXPWY_SYMMETRIC_1</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">NAME, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">S1 </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, \</div>
+<div class="line">  <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx) \</div>
+<div class="line">{ \</div>
+<div class="line">  const <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line">  int l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</div>
+<div class="line">  double *v_ptr = v, *xx_ptr = xx; \</div>
+<div class="line">  for (l = 0; l < n2; l++, v_ptr++) \</div>
+<div class="line">    *u_ptr++ = a * (b * (*v_ptr) * (*x_ptr++) + ((*v_ptr)*(1.0+*xx_ptr++)) * (*y_ptr++)); \</div>
+<div class="line">  v_ptr--; \</div>
+<div class="line">  for (l = 0; l < n2; l++, v_ptr--) \</div>
+<div class="line">    *u_ptr++ = a * (b * S1 * (*v_ptr) * (*x_ptr++) + (S1 * (*v_ptr) * (1.0+*xx_ptr++)) * (*y_ptr++)); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00156">156</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad301783a6575cd0fc132ebaa12d3cf60"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define ABUVXPWY_SYMMETRIC_2</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">NAME, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">S1 </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, \</div>
+<div class="line">  <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx) \</div>
+<div class="line">{ \</div>
+<div class="line">  const <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line">  int l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</div>
+<div class="line">  double *w_ptr = w, *xx_ptr = xx; \</div>
+<div class="line">  for (l = 0; l < n2; l++, w_ptr++) \</div>
+<div class="line">    *u_ptr++ = a * (b * (*w_ptr/(1.0+*xx_ptr++)) * (*x_ptr++) + (*w_ptr) * (*y_ptr++)); \</div>
+<div class="line">  w_ptr--; \</div>
+<div class="line">  for (l = 0; l < n2; l++, w_ptr--) \</div>
+<div class="line">    *u_ptr++ = a * (b * (S1 * (*w_ptr)/(1.0+*xx_ptr++) ) * (*x_ptr++) + S1 * (*w_ptr) * (*y_ptr++)); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00173">173</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8cb478c4a27a921310d57427c1e94aa4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FPT_DO_STEP_TRANSPOSED</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">NAME, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">M1_FUNCTION, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">M2_FUNCTION </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> _Complex  *a, <span class="keywordtype">double</span> _Complex *b, <span class="keywordtype">double</span> *a11, \</div>
+<div class="line">  <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22, <span class="keywordtype">double</span> g, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>) \</div>
+<div class="line">{ \ \</div>
+<div class="line">  int length = 1<<(tau+1); \ \</div>
+<div class="line">  double norm = 1.0/(length<<1); \</div>
+<div class="line">  \</div>
+<div class="line">  <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span> \</div>
+<div class="line">  fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a); \</div>
+<div class="line">  fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b); \</div>
+<div class="line">  \</div>
+<div class="line">  <span class="comment">/* Perform matrix multiplication. */</span> \</div>
+<div class="line">  M1_FUNCTION(norm,g,<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>->z,a,a11,b,a21,length); \</div>
+<div class="line">  M2_FUNCTION(norm,g,b,a,a12,b,a22,length); \</div>
+<div class="line">  memcpy(a,<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)); \</div>
+<div class="line">  \</div>
+<div class="line">  <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span> \</div>
+<div class="line">  fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a); \</div>
+<div class="line">  fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00397">397</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a509209ea5b6e210805a37cd80579c2c5"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void eval_sum_clenshaw_transposed </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double _Complex * </td>
+          <td class="paramname"><em>a</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double _Complex * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double _Complex * </td>
+          <td class="paramname"><em>temp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>gam</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>lambda</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Clenshaw algorithm. </p>
+<p>Evaluates a sum of real-valued functions <img class="formulaInl" alt="$P_k : \mathbb{R} \rightarrow \mathbb{R}$" src="form_29.png"/> </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(x) = \sum_{k=0}^N a_k P_k(x) \quad (N \in \mathbb{N}_0) \]" src="form_30.png"/>
+</p>
+<p> obeying a three-term recurrence relation </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ P_{k+1}(x) = (alpha_k * x + beta_k)*P_{k}(x) + gamma_k P_{k-1}(x) \quad (alpha_k, beta_k, gamma_k \in \mathbb{R},\; k \ge 0) \]" src="form_31.png"/>
+</p>
+<p> with initial conditions <img class="formulaInl" alt="$P_{-1}(x) := 0$" src="form_32.png"/>, <img class="formulaInl" alt="$P_0(x) := \lambda$" src="form_33.png"/> for given double _Complex coefficients <img class="formulaInl" alt="$\left(a_k\right)_{k=0}^N \in \mathbb{C}^{N+1}$" src="form_34.png"/> at given nodes <img class="formulaInl" alt="$\left(x_j\right)_{j=0}^M \in \mathbb{R}^{M+1}$" src="form_35.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00715">715</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fpt_8c_source.html b/doc/api/html/fpt_8c_source.html
new file mode 100644
index 0000000..f1991dc
--- /dev/null
+++ b/doc/api/html/fpt_8c_source.html
@@ -0,0 +1,1875 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fpt.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fpt.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="fpt_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fpt.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdbool.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* Macros for index calculation. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">   44</a></span> <span class="preprocessor">#define K_START_TILDE(x,y) (NFFT_MAX(NFFT_MIN(x,y-2),0))</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">   47</a></span> <span class="preprocessor">#define K_END_TILDE(x,y) NFFT_MIN(x,y-1)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">   50</a></span> <span class="preprocessor">#define FIRST_L(x,y) (LRINT(floor((x)/(double)y)))</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">   53</a></span> <span class="preprocessor">#define LAST_L(x,y) (LRINT(ceil(((x)+1)/(double)y))-1)</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#define N_TILDE(y) (y-1)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#define IS_SYMMETRIC(x,y,z) (x >= ((y-1.0)/z))</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#define FPT_BREAK_EVEN 4</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="structfpt__step__.html">   64</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step_</a></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">   66</a></span>   <span class="keywordtype">bool</span> <a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>;                            </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">   69</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>;                                 </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">   70</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>;                                 </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">   71</a></span>   <span class="keywordtype">double</span> **a11,**a12,**a21,**<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>;         </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">   72</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>;                              </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> } <a class="code" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structfpt__data__.html">   78</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data_</a></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">   80</a></span>   <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> **<a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>;                       </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">   81</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>;                            </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">   82</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>;                         </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">   83</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>;                          </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">   84</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>;                         </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">   85</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>;                         </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">   86</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>;                          </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">   87</a></span>   <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>;                        </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="comment">/* Data for direct transform. */</span>        </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">   89</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>;                          </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">   90</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>;                           </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">   91</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a>;                          </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> } <a class="code" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10" title="Holds data for a single cascade summation.">fpt_data</a>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html">   97</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s_</a></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">   99</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758" title="The flags.">flags</a>;                              </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">  100</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804" title="The number of DPT transforms.">M</a>;                                  </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">  101</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81" title="The transform length.">N</a>;                                  </div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">  103</a></span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef" title="The exponent of N.">t</a>;                                  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">  104</a></span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *<a class="code" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760" title="The DPT transform data.">dpt</a>;                          </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">  105</a></span>   <span class="keywordtype">double</span> **<a class="code" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b" title="Array of pointers to arrays containing the Chebyshev nodes.">xcvecs</a>;                        </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">  108</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf" title="Array for Chebychev-nodes.">xc</a>;                             </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">double</span> _Complex *temp;                          </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">double</span> _Complex *work;                          </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">double</span> _Complex *result;                        </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">double</span> _Complex *vec3;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">double</span> _Complex *vec4;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">double</span> _Complex *z;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">  115</a></span>   fftw_plan *<a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>;                  </div>
+<div class="line"><a name="l00117"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">  117</a></span>   fftw_plan *<a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>;                  </div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">  119</a></span>   fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3" title="Transform kinds for fftw library.">kinds</a>;                   </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">  121</a></span>   fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6" title="Transform kinds for fftw library.">kindsr</a>;                  </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">  124</a></span>   <span class="keywordtype">int</span> *<a class="code" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681" title="Transform lengths for fftw library.">lengths</a>; </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="comment">/* Data for slow transforms. */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">double</span> *xc_slow;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> } <a class="code" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8" title="Holds data for a set of cascade summations.">fpt_set_s</a>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> abuvxpwy(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">int</span> l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">for</span> (l = 0; l < n; l++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">#define ABUVXPWY_SYMMETRIC(NAME,S1,S2) \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">  double* v, double _Complex* y, double* w, int n) \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">  const int n2 = n>>1; \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">  double *v_ptr = v, *w_ptr = w; \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">  for (l = 0; l < n2; l++) \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">    *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">  v_ptr--; w_ptr--; \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">  for (l = 0; l < n2; l++) \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">    *u_ptr++ = a * (b * S1 * (*v_ptr--) * (*x_ptr++) + S2 * (*w_ptr--) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric1,1.0,-1.0)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric2,-1.0,1.0)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">#define ABUVXPWY_SYMMETRIC_1(NAME,S1) \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">  double* v, double _Complex* y, int n, double *xx) \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">  const int n2 = n>>1; \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">  double *v_ptr = v, *xx_ptr = xx; \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">  for (l = 0; l < n2; l++, v_ptr++) \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">    *u_ptr++ = a * (b * (*v_ptr) * (*x_ptr++) + ((*v_ptr)*(1.0+*xx_ptr++)) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor">  v_ptr--; \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">  for (l = 0; l < n2; l++, v_ptr--) \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">    *u_ptr++ = a * (b * S1 * (*v_ptr) * (*x_ptr++) + (S1 * (*v_ptr) * (1.0+*xx_ptr++)) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_1,1.0)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_2,-1.0)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">#define ABUVXPWY_SYMMETRIC_2(NAME,S1) \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">  double _Complex* y, double* w, int n, double *xx) \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor">  const int n2 = n>>1; \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">  double *w_ptr = w, *xx_ptr = xx; \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor">  for (l = 0; l < n2; l++, w_ptr++) \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor">    *u_ptr++ = a * (b * (*w_ptr/(1.0+*xx_ptr++)) * (*x_ptr++) + (*w_ptr) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor">  w_ptr--; \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor">  for (l = 0; l < n2; l++, w_ptr--) \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor">    *u_ptr++ = a * (b * (S1 * (*w_ptr)/(1.0+*xx_ptr++) ) * (*x_ptr++) + S1 * (*w_ptr) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_1,1.0)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_2,-1.0)</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> static inline <span class="keywordtype">void</span> auvxpwy(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, <span class="keywordtype">double</span>* v,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordflow">for</span> (l = n; l > 0; l--)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> auvxpwy_symmetric(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   int l;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keywordflow">for</span> (l = n2; l > 0; l--)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   v_ptr--; w_ptr--;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">for</span> (l = n2; l > 0; l--)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     *u_ptr++ = a * ((*v_ptr--) * (*x_ptr++) - (*w_ptr--) * (*y_ptr++));</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> auvxpwy_symmetric_1(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   int l;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w, *xx_ptr = xx;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     *u_ptr++ = a * (((*v_ptr++)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)*(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   v_ptr--; w_ptr--;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     *u_ptr++ = a * (-((*v_ptr--)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)*(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> auvxpwy_symmetric_2(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx)</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   int l;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w, *xx_ptr = xx;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     *u_ptr++ = a * (((*v_ptr++)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)/(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   v_ptr--; w_ptr--;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     *u_ptr++ = a * (-((*v_ptr--)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)/(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor">#define FPT_DO_STEP(NAME,M1_FUNCTION,M2_FUNCTION) \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor">static inline void NAME(double _Complex  *a, double _Complex *b, double *a11, double *a12, \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">  double *a21, double *a22, double g, int tau, fpt_set set) \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="preprocessor">  int length = 1<<(tau+1); \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor">  double norm = 1.0/(length<<1); \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor">  </span><span class="comment">/* Compensate for factors introduced by a raw DCT-III. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor">  a[0] *= 2.0; \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">  b[0] *= 2.0; \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">  </span><span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">  </span><span class="comment">/*for (k = 0; k < length; k++)*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor">  </span><span class="comment">/*{*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor">    </span><span class="comment">/*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor">    </span><span class="comment">/*  a11[k],a12[k],a21[k],a22[k]);*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="preprocessor">  </span><span class="comment">/*}*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="preprocessor">  </span><span class="comment">/* Check, if gamma is zero. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="preprocessor">  if (g == 0.0) \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="preprocessor">    </span><span class="comment">/*fprintf(stderr,"gamma == 0!\n");*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor">    </span><span class="comment">/* Perform multiplication only for second row. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="preprocessor">    M2_FUNCTION(norm,b,b,a22,a,a21,length); \</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="preprocessor">    </span><span class="comment">/*fprintf(stderr,"gamma != 0!\n");*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="preprocessor">    </span><span class="comment">/* Perform multiplication for both rows. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="preprocessor">    M2_FUNCTION(norm,set->z,b,a22,a,a21,length); \</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="preprocessor">    M1_FUNCTION(norm*g,a,a,a11,b,a12,length); \</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="preprocessor">    memcpy(b,set->z,length*sizeof(double _Complex)); \</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="preprocessor">    </span><span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="preprocessor">    fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="preprocessor">    </span><span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="preprocessor">    a[0] *= 0.5; \</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="preprocessor">  </span><span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="preprocessor">  </span><span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="preprocessor">  b[0] *= 0.5; \</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> FPT_DO_STEP(fpt_do_step,auvxpwy,auvxpwy)</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> FPT_DO_STEP(fpt_do_step_symmetric,auvxpwy_symmetric,auvxpwy_symmetric)</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">/*FPT_DO_STEP(fpt_do_step_symmetric_u,auvxpwy_symmetric,auvxpwy)</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">FPT_DO_STEP(fpt_do_step_symmetric_l,auvxpwy,auvxpwy_symmetric)*/</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> static inline <span class="keywordtype">void</span> fpt_do_step_symmetric_u(<span class="keywordtype">double</span> _Complex *a, <span class="keywordtype">double</span> _Complex *b,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="keywordtype">double</span> *a11, <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22, <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> set)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   UNUSED(a21); UNUSED(a22);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="comment">/* Compensate for factors introduced by a raw DCT-III. */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   a[0] *= 2.0;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   b[0] *= 2.0;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="comment">/*for (k = 0; k < length; k++)*/</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   <span class="comment">/*{*/</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="comment">/*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="comment">/*  a11[k],a12[k],a21[k],a22[k]);*/</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="comment">/*}*/</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="comment">/* Check, if gamma is zero. */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordflow">if</span> (gam == 0.0)</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="comment">/*fprintf(stderr,"gamma == 0!\n");*/</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="comment">/* Perform multiplication only for second row. */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     auvxpwy_symmetric_1(norm,b,b,a12,a,a11,length,x);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="comment">/*fprintf(stderr,"gamma != 0!\n");*/</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="comment">/* Perform multiplication for both rows. */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     auvxpwy_symmetric_1(norm,set->z,b,a12,a,a11,length,x);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     auvxpwy_symmetric(norm*gam,a,a,a11,b,a12,length);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     memcpy(b,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     a[0] *= 0.5;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   b[0] *= 0.5;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> }</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> fpt_do_step_symmetric_l(<span class="keywordtype">double</span> _Complex  *a, <span class="keywordtype">double</span> _Complex *b,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordtype">double</span> *a11, <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22, <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations [...]
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   <span class="comment">/* Compensate for factors introduced by a raw DCT-III. */</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   a[0] *= 2.0;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   b[0] *= 2.0;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   UNUSED(a11); UNUSED(a12);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="comment">/*for (k = 0; k < length; k++)*/</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="comment">/*{*/</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="comment">/*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="comment">/*  a11[k],a12[k],a21[k],a22[k]);*/</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="comment">/*}*/</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   <span class="comment">/* Check, if gamma is zero. */</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="keywordflow">if</span> (gam == 0.0)</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="comment">/*fprintf(stderr,"gamma == 0!\n");*/</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* Perform multiplication only for second row. */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     auvxpwy_symmetric(norm,b,b,a22,a,a21,length);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   }</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="comment">/*fprintf(stderr,"gamma != 0!\n");*/</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="comment">/* Perform multiplication for both rows. */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     auvxpwy_symmetric(norm,set->z,b,a22,a,a21,length);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     auvxpwy_symmetric_2(norm*gam,a,a,a21,b,a22,length,x);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     memcpy(b,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     a[0] *= 0.5;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   b[0] *= 0.5;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> }</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="preprocessor">#define FPT_DO_STEP_TRANSPOSED(NAME,M1_FUNCTION,M2_FUNCTION) \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="preprocessor">static inline void NAME(double _Complex  *a, double _Complex *b, double *a11, \</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor">  double *a12, double *a21, double *a22, double g, int tau, fpt_set set) \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor">  int length = 1<<(tau+1); \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor">  double norm = 1.0/(length<<1); \</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor">  </span><span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor">  </span><span class="comment">/* Perform matrix multiplication. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor">  M1_FUNCTION(norm,g,set->z,a,a11,b,a21,length); \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor">  M2_FUNCTION(norm,g,b,a,a12,b,a22,length); \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor">  memcpy(a,set->z,length*sizeof(double _Complex)); \</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor">  \</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="preprocessor">  </span><span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor">  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> FPT_DO_STEP_TRANSPOSED(fpt_do_step_t,abuvxpwy,abuvxpwy)</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric,abuvxpwy_symmetric1,abuvxpwy_symmetric2)</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="comment">/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_u,abuvxpwy_symmetric1_1,abuvxpwy_symmetric1_2)*/</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="comment">/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_l,abuvxpwy_symmetric2_2,abuvxpwy_symmetric2_1)*/</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> static inline <span class="keywordtype">void</span> fpt_do_step_t_symmetric_u(<span class="keywordtype">double</span> _Complex  *a,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="keywordtype">double</span> _Complex *b, <span class="keywordtype">double</span> *a11, <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> set)</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   <span class="comment">/* Perform matrix multiplication. */</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   abuvxpwy_symmetric1_1(norm,gam,set->z,a,a11,b,length,x);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   abuvxpwy_symmetric1_2(norm,gam,b,a,a12,b,length,x);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   memcpy(a,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> fpt_do_step_t_symmetric_l(<span class="keywordtype">double</span> _Complex  *a,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordtype">double</span> _Complex *b, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22,</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>)</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   <span class="comment">/* Perform matrix multiplication. */</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   abuvxpwy_symmetric2_2(norm,gam,set->z,a,b,a21,length,x);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   abuvxpwy_symmetric2_1(norm,gam,b,a,b,a22,length,x);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   memcpy(a,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="keyword">static</span> <span class="keywordtype">void</span> eval_clenshaw(<span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam)</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment">   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   <span class="keywordtype">double</span> a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *x_act;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   <span class="keywordtype">double</span> *y_act;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   x_act = x;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   y_act = y;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     a = 1.0;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     b = 0.0;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     {</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       *y_act = 1.0;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     }</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>       gamma_act = &(gam[k]);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       {</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         a_old = a;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>          b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         alpha_act--;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         beta_act--;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         gamma_act--;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>       }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>       *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     }</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     x_act++;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     y_act++;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="keyword">static</span> <span class="keywordtype">void</span> eval_clenshaw2(<span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *z, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size1, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k, <span class="keyword">const</sp [...]
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam)</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="comment">   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   <span class="keywordtype">double</span> a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *x_act;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <span class="keywordtype">double</span> *y_act, *z_act;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   x_act = x;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   y_act = y;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   z_act = z;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   {</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     a = 1.0;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     b = 0.0;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     {</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>       *y_act = 1.0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>       *z_act = 0.0;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     }</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     {</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>       gamma_act = &(gam[k]);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>       {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         a_old = a;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         alpha_act--;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         beta_act--;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         gamma_act--;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>       }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <span class="keywordflow">if</span> (i < size1)</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         *z_act = a;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     }</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     x_act++;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     y_act++;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     z_act++;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   <span class="comment">/*gamma_act++;</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="comment">  FILE *f = fopen("/Users/keiner/Desktop/nfsft_debug.txt","a");</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="comment">  fprintf(f,"size1: %10d, size: %10d\n",size1,size);</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="comment">  fclose(f);*/</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> }</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="keyword">static</span> <span class="keywordtype">int</span> eval_clenshaw_thresh2(<span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *z, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k,</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha, <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam, <span class="keyword">const</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordtype">double</span> threshold)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="comment">   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   <span class="keywordtype">double</span> a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *x_act;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keywordtype">double</span> *y_act, *z_act;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   R max = -nfft_float_property(NFFT_R_MAX);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   <span class="keyword">const</span> R t = LOG10(FABS(threshold));</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   x_act = x;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   y_act = y;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   z_act = z;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     a = 1.0;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     b = 0.0;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>      *y_act = 1.0;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>      *z_act = 0.0;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     }</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     {</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>       gamma_act = &(gam[k]);</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>       {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>         a_old = a;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>         a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>          b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         alpha_act--;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>         beta_act--;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>         gamma_act--;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>       }</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>       *z_act = a;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>       *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       max = FMAX(max,LOG10(FABS(*y_act)));</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       <span class="keywordflow">if</span> (max > t)</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     }</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     x_act++;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     y_act++;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     z_act++;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> }</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> eval_sum_clenshaw_fast(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *a, <span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> _Complex *y,</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha, <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> {</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   <span class="keywordtype">double</span> _Complex tmp1, tmp2, tmp3;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   <span class="keywordtype">double</span> xc;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   <span class="comment">/*fprintf(stderr, "Executing eval_sum_clenshaw_fast.\n");  </span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> <span class="comment">  fprintf(stderr, "Before transform:\n");  </span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> <span class="comment">  for (j = 0; j < N; j++)</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> <span class="comment">    fprintf(stderr, "a[%4d] = %e.\n", j, a[j]);  </span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> <span class="comment">  for (j = 0; j <= M; j++)</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> <span class="comment">    fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]);*/</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       y[j] = a[0];</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> <span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="preprocessor"></span>      xc = x[j];</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>       tmp2 = a[N];</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>       tmp1 = a[N-1] + (alpha[N-1] * xc + beta[N-1])*tmp2;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>       <span class="keywordflow">for</span> (k = N-1; k > 0; k--)</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>       {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>         tmp3 =   a[k-1]</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                + (alpha[k-1] * xc + beta[k-1]) * tmp1</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                + gam[k] * tmp2;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         tmp2 = tmp1;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         tmp1 = tmp3;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>       }</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>       y[j] = lambda * tmp1;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="preprocessor"></span>      xc = x[j];</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>       tmp1 = a[N-1];</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>       tmp2 = a[N];</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>       <span class="keywordflow">for</span> (k = N-1; k > 0; k--)</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>       {</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>         tmp3 = a[k-1] + tmp2 * gam[k];</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         tmp2 *= (alpha[k] * xc + beta[k]);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         tmp2 += tmp1;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         tmp1 = tmp3;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         <span class="comment">/*if (j == 1515) </span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> <span class="comment">        {</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="comment">          fprintf(stderr, "k = %d, tmp1 = %e, tmp2 = %e.\n", k, tmp1, tmp2);  </span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment">        }*/</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       }</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>       tmp2 *= (alpha[0] * xc + beta[0]);</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         <span class="comment">//fprintf(stderr, "alpha[0] = %e, beta[0] = %e.\n", alpha[0], beta[0]);  </span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>       y[j] = lambda * (tmp2 + tmp1);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         <span class="comment">//fprintf(stderr, "lambda = %e.\n", lambda);  </span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   }</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   <span class="comment">/*fprintf(stderr, "Before transform:\n");  </span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="comment">  for (j = 0; j < N; j++)</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="comment">    fprintf(stderr, "a[%4d] = %e.\n", j, a[j]);  </span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="comment">  for (j = 0; j <= M; j++)</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="comment">    fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]);  */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> }</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno"><a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">  715</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5" title="Clenshaw algorithm.">eval_sum_clenshaw_transposed</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> _Complex* a, <spa [...]
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">double</span> _Complex *temp, <span class="keywordtype">double</span> *alpha, <span class="keywordtype">double</span> *beta, <span class="keywordtype">double</span> *gam,</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> {</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   <span class="keywordtype">double</span> _Complex* it1 = temp;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="keywordtype">double</span> _Complex* it2 = y;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   <span class="keywordtype">double</span> _Complex aux;</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   <span class="comment">/* Compute final result by multiplying with the constant lambda */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   a[0] = 0.0;</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     it2[j] = lambda * y[j];</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     a[0] += it2[j];</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   }</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   <span class="keywordflow">if</span> (N > 0)</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="comment">/* Compute final step. */</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     a[1] = 0.0;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>       it1[j] = it2[j];</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>       it2[j] = it2[j] * (alpha[0] * x[j] + beta[0]);</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>       a[1] += it2[j];</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     }</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     <span class="keywordflow">for</span> (k = 2; k <= N; k++)</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>       a[k] = 0.0;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>       <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>       {</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>         aux = it1[j];</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         it1[j] = it2[j];</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         it2[j] = it2[j]*(alpha[k-1] * x[j] + beta[k-1]) + gam[k-1] * aux;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         a[k] += it2[j];</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>       }</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     }</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> fpt_init(<span class="keyword">const</span> <span class="keywordtype">int</span> M, <span class="keyword">const</span> <span class="keywordtype">int</span> t, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>   <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>   <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>   <span class="comment">/* Allocate memory for new DPT set. */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s</a> *<span class="keyword">set</span> = (<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="s [...]
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>   <span class="comment">/* Save parameters in structure. */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   <span class="keyword">set</span>->flags = flags;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>   <span class="keyword">set</span>->M = M;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   <span class="keyword">set</span>->t = t;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>   <span class="keyword">set</span>->N = 1<<t;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   <span class="comment">/* Allocate memory for M transforms. */</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   <span class="keyword">set</span>->dpt = (<a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a>));</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>   <span class="comment">/* Initialize with NULL pointer. */</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>   <span class="keywordflow">for</span> (m = 0; m < <span class="keyword">set</span>->M; m++)</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     set->dpt[m].steps = 0;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   <span class="comment">/* Create arrays with Chebyshev nodes. */</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="comment">/* Initialize array with Chebyshev coefficients for the polynomial x. This</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="comment">   * would be trivially an array containing a 1 as second entry with all other</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="comment">   * coefficients set to zero. In order to compensate for the multiplicative</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="comment">   * factor 2 introduced by the DCT-III, we set this coefficient to 0.5 here. */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="comment">/* Allocate memory for array of pointers to node arrays. */</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   set->xcvecs = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   <span class="comment">/* For each polynomial length starting with 4, compute the Chebyshev nodes</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="comment">   * using a DCT-III. */</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   plength = 4;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   <span class="keywordflow">for</span> (tau = 1; tau < t+1; tau++)</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   {</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="comment">/* Allocate memory for current array. */</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="keyword">set</span>->xcvecs[tau-1] = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     {</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>       <span class="keyword">set</span>->xcvecs[tau-1][k] = cos(((k+0.5)*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/plength);</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     }</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     plength = plength << 1;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   }</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   <span class="keyword">set</span>->work = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*set->N)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   <span class="keyword">set</span>->result = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*set->N)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   <span class="keyword">set</span>->lengths = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t<span class="comment">/*-1*/</span>)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   <span class="keyword">set</span>->plans_dct2 = (fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_plan)*(<span class="keyword">set</span>->t<span class="comment">/*-1*/</span>));</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   <span class="keyword">set</span>->kindsr     = (fftw_r2r_kind*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(fftw_r2r_kind));</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   <span class="keyword">set</span>->kindsr[0]  = FFTW_REDFT10;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   <span class="keyword">set</span>->kindsr[1]  = FFTW_REDFT10;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   <span class="keywordflow">for</span> (tau = 0, plength = 4; tau < <span class="keyword">set</span>->t<span class="comment">/*-1*/</span>; tau++, plength<<=1)</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <span class="keyword">set</span>->lengths[tau] = plength;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="preprocessor"></span>    <span class="keyword">set</span>->plans_dct2[tau] =</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>       fftw_plan_many_r2r(1, &set->lengths[tau], 2, (<span class="keywordtype">double</span>*)set->work, NULL,</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>                          2, 1, (<span class="keywordtype">double</span>*)set->result, NULL, 2, 1,set->kindsr,</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>                          0);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>   <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   <span class="keywordflow">if</span> (!(set->flags & FPT_NO_FAST_ALGORITHM))</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   {</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     <span class="keyword">set</span>->vec3 = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(set->N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     <span class="keyword">set</span>->vec4 = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(set->N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keyword">set</span>->z = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(set->N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     <span class="keyword">set</span>->plans_dct3 = (fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_plan)*(<span class="keyword">set</span>->t<span class="comment">/*-1*/</span>));</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     <span class="keyword">set</span>->kinds      = (fftw_r2r_kind*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(fftw_r2r_kind));</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     <span class="keyword">set</span>->kinds[0]   = FFTW_REDFT01;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     <span class="keyword">set</span>->kinds[1]   = FFTW_REDFT01;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     <span class="keywordflow">for</span> (tau = 0, plength = 4; tau < <span class="keyword">set</span>->t<span class="comment">/*-1*/</span>; tau++, plength<<=1)</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     {</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>       <span class="keyword">set</span>->lengths[tau] = plength;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="preprocessor"></span>      <span class="keyword">set</span>->plans_dct3[tau] =</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         fftw_plan_many_r2r(1, &set->lengths[tau], 2, (<span class="keywordtype">double</span>*)set->work, NULL,</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>                            2, 1, (<span class="keywordtype">double</span>*)set->result, NULL, 2, 1, set->kinds,</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>                            0);</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->lengths);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->kinds);</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->kindsr);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     <span class="keyword">set</span>->lengths = NULL;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     <span class="keyword">set</span>->kinds = NULL;</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     <span class="keyword">set</span>->kindsr = NULL;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   }</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>   {</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keyword">set</span>->xc_slow = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="keyword">set</span>->temp = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   }</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> </div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   <span class="comment">/* Return the newly created DPT set. */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>   <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> }</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="keywordtype">void</span> fpt_precompute(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> *alpha, <span class="keywordtype">double</span> *beta,</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   <span class="keywordtype">double</span> *gam, <span class="keywordtype">int</span> k_start, <span class="keyword">const</span> <span class="keywordtype">double</span> threshold)</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> {</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   <span class="keywordtype">int</span> tau;          </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="keywordtype">int</span> l;            </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   <span class="keywordtype">int</span> plength;      </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>   <span class="keywordtype">int</span> degree;       </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>   <span class="keywordtype">int</span> firstl;       </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>   <span class="keywordtype">int</span> lastl;        </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   <span class="keywordtype">int</span> plength_stab; </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>   <span class="keywordtype">int</span> degree_stab;  </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   <span class="keywordtype">double</span> *a11;      </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>   <span class="keywordtype">double</span> *a12;      </div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   <span class="keywordtype">double</span> *a21;      </div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>   <span class="keywordtype">double</span> *a22;      </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *calpha;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *cbeta;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> *cgamma;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>   <span class="keywordtype">int</span> needstab = 0; </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   <span class="keywordtype">int</span> N_tilde;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   <span class="keywordtype">int</span> clength;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   <span class="keywordtype">int</span> clength_1;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   <span class="keywordtype">int</span> clength_2;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   <span class="keywordtype">int</span> t_stab, N_stab;</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   <span class="comment">/* Get pointer to DPT data. */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>   data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>   <span class="comment">/* Check, if already precomputed. */</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>   <span class="keywordflow">if</span> (data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> != NULL)</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>   <span class="comment">/* Save k_start. */</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a> = k_start;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a> = gam[0];</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>   <span class="keywordflow">if</span> (!(set->flags & FPT_NO_FAST_ALGORITHM))</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>   {</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     <span class="comment">/* Save recursion coefficients. */</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     <span class="keywordflow">for</span> (tau = 2; tau <= <span class="keyword">set</span>->t; tau++)</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     {</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>       data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>[tau-2] = alpha[1<<tau];</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>       data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>[tau-2] = beta[1<<tau];</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>       data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>[tau-2] = gam[1<<tau];</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     }</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a> = alpha[1];</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a> = beta[1];</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,X(next_power_of_2)(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment [...]
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>       <span class="comment">/*set->N*/</span>);</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     N_tilde = N_TILDE(set->N);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     <span class="comment">/* Allocate memory for the cascade with t = log_2(N) many levels. */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> = (<a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class [...]
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     <span class="comment">/* For tau = 1,...t compute the matrices U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     plength = 4;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     <span class="keywordflow">for</span> (tau = 1; tau < <span class="keyword">set</span>->t; tau++)</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     {</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>       <span class="comment">/* Compute auxilliary values. */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>       degree = plength>>1;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>       <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>       firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>       <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>       lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(N_tilde,plength);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>       <span class="comment">/* Allocate memory for current level. This level will contain 2^{t-tau-1}</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> <span class="comment">       * many matrices. */</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>       data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau] = (<a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a [...]
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>                          * (lastl+1));</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>       <span class="comment">/* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>       <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>       {</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>         {</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>           <span class="comment">//fprintf(stderr,"fpt_precompute(%d): symmetric step\n",m);</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>           <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>           clength = plength/2;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         }</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>         {</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>           clength = plength;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>         }</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         <span class="comment">/* Allocate memory for the components of U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>         <span class="comment">/* Evaluate the associated polynomials at the 2^{tau+1} Chebyshev</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> <span class="comment">         * nodes. */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         <span class="comment">/* Get the pointers to the three-term recurrence coeffcients. */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         calpha = &(alpha[plength*l+1+1]);</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         cbeta = &(beta[plength*l+1+1]);</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         cgamma = &(gam[plength*l+1+1]);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         <span class="keywordflow">if</span> (set->flags & FPT_NO_STABILIZATION)</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         {</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>           <span class="comment">/* Evaluate P_{2^{tau}-2}^n(\cdot,2^{tau+1}l+2). */</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>           calpha--;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>           cbeta--;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>           cgamma--;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>           eval_clenshaw2(set->xcvecs[tau-1], a11, a21, clength, clength, degree-1, calpha, cbeta,</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>             cgamma);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>           eval_clenshaw2(set->xcvecs[tau-1], a12, a22, clength, clength, degree, calpha, cbeta,</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>             cgamma);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>           needstab = 0;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>         }</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         {</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>           calpha--;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>           cbeta--;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>           cgamma--;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>           <span class="comment">/* Evaluate P_{2^{tau}-1}^n(\cdot,2^{tau+1}l+1). */</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>           needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a11, a21, clength,</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>             degree-1, calpha, cbeta, cgamma, threshold);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>           <span class="keywordflow">if</span> (needstab == 0)</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>           {</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>             <span class="comment">/* Evaluate P_{2^{tau}}^n(\cdot,2^{tau+1}l+1). */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>             needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a12, a22, clength,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>               degree, calpha, cbeta, cgamma, threshold);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>           }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         <span class="comment">/* Check if stabilization needed. */</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>         <span class="keywordflow">if</span> (needstab == 0)</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a> = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span cl [...]
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<spa [...]
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>           <span class="comment">/* No stabilization needed. */</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0] = a11;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0] = a12;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0] = a21;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0] = a22;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0] = gam[plength*l+1+1];</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         {</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>           <span class="comment">/* Stabilize. */</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>           degree_stab = degree*(2*l+1);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>           X(next_power_of_2_exp)((l+1)*(1<<(tau+1)),&N_stab,&t_stab);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>           <span class="comment">/* Old arrays are to small. */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a11);</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a12);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a21);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a22);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12 = (<span class="keywordtype">double</span>**)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a> = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span cl [...]
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<spa [...]
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>           plength_stab = N_stab;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>           <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY)</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>           {</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>             <span class="keywordflow">if</span> (m <= 1)</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>             {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>               <span class="comment">/* This should never be executed */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>               clength_1 = plength_stab;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>               clength_2 = plength_stab;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>               <span class="comment">/* Allocate memory for arrays. */</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>               a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>               a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>               a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>               a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>               <span class="comment">/* Get the pointers to the three-term recurrence coeffcients. */</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>               calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>               eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1,</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>                 clength_2, degree_stab-1, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>               eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1,</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>                 clength_2, degree_stab+0, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>             }</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>             {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>               clength = plength_stab/2;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>               <span class="keywordflow">if</span> (m%2 == 0)</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>               {</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>                 a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>                 a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>                 a21 = 0;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>                 a22 = 0;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>                 calpha = &(alpha[2]); cbeta = &(beta[2]); cgamma = &(gam[2]);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>                 eval_clenshaw(set->xcvecs[t_stab-2], a11, clength,</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>                   degree_stab-2, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>                 eval_clenshaw(set->xcvecs[t_stab-2], a12, clength,</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>                   degree_stab-1, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>               }</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>               <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>               {</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>                 a11 = 0;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>                 a12 = 0;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>                 a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>                 a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                 calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                 eval_clenshaw(set->xcvecs[t_stab-2], a21, clength,</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>                   degree_stab-1,calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>                 eval_clenshaw(set->xcvecs[t_stab-2], a22, clength,</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>                   degree_stab+0, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>               }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>             }</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>           }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>           {</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>             clength_1 = plength_stab;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>             clength_2 = plength_stab;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>             a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>             a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>             a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>             a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>             calpha = &(alpha[2]);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>             cbeta = &(beta[2]);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>             cgamma = &(gam[2]);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>             calpha--;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>             cbeta--;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>             cgamma--;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>             eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1, clength_2, degree_stab-1,</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>               calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>             eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1, clength_2, degree_stab+0,</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>               calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> </div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>           }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0] = a11;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0] = a12;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0] = a21;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0] = a22;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0] =  gam[1+1];</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a> = t_stab;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a> = N_stab;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>       }</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>       plength = plength << 1;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     }</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>   }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>   <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>   {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     <span class="comment">/* Check, if recurrence coefficients must be copied. */</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     <span class="keywordflow">if</span> (set->flags & FPT_PERSISTENT_DATA)</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     {</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>       data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a> = (<span class="keywordtype">double</span>*) alpha;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>       data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a> = (<span class="keywordtype">double</span>*) beta;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>       data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a> = (<span class="keywordtype">double</span>*) gam;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     }</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     {</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>       data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>       data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>       data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>       memcpy(data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>,alpha,(set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>       memcpy(data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>,beta,(set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>       memcpy(data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a>,gam,(set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     }</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>   }</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> }</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> </div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordtype">void</span> fpt_trafo_direct(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> _Complex * [...]
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>   <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>   <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>   <span class="keywordtype">double</span> norm;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>   </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     <span class="comment">//fprintf(stderr, "Executing dpt.\n");  </span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>   X(next_power_of_2_exp)(k_end+1,&Nk,&tk);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>   norm = 2.0/(Nk<<1);</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     <span class="comment">//fprintf(stderr, "Norm = %e.\n", norm);  </span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>   <span class="keywordflow">if</span> (set->flags & FPT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>   {</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>   }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>   <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>   {</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="comment">/* Fill array with Chebyshev nodes. */</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     <span class="keywordflow">for</span> (j = 0; j <= k_end; j++)</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     {</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>       <span class="keyword">set</span>->xc_slow[j] = cos((<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*(j+0.5))/(k_end+1));</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         <span class="comment">//fprintf(stderr, "x[%4d] = %e.\n", j, set->xc_slow[j]);  </span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     }</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     memset(set->result,0U,data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     memcpy(&set->result[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],x,(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>     <span class="comment">/*eval_sum_clenshaw(k_end, k_end, set->result, set->xc_slow,</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">      y, set->work, &data->alpha[1], &data->beta[1], &data->gamma[1],</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">      data->gamma_m1);*/</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>     eval_sum_clenshaw_fast(k_end, k_end, set->result, set->xc_slow,</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>       y, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment her [...]
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>   }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>   {</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>     memset(set->temp,0U,data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     memcpy(&set->temp[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],x,(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     eval_sum_clenshaw_fast(k_end, Nk-1, set->temp, set->xcvecs[tk-2],</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>       set->result, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Ad [...]
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>       data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     fftw_execute_r2r(set->plans_dct2[tk-2],(<span class="keywordtype">double</span>*)set->result,</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>       (<span class="keywordtype">double</span>*)set->result);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>     <span class="keyword">set</span>->result[0] *= 0.5;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>     <span class="keywordflow">for</span> (j = 0; j < Nk; j++)</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     {</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>       <span class="keyword">set</span>->result[j] *= norm;</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     memcpy(y,set->result,(k_end+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>   }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordtype">void</span> fpt_trafo(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> _Complex *y,</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>   <span class="comment">/* Get transformation data. */</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>   <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>   <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>   <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>   <span class="keywordtype">int</span> k_end_tilde;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>   <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>   <span class="keywordtype">int</span> firstl;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>   <span class="keywordtype">int</span> lastl;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>   <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>   <span class="keywordtype">int</span> plength_stab;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>   <span class="keywordtype">int</span> t_stab;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>   <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> *step;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>   fftw_plan plan = 0;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>   <span class="keywordtype">int</span> length = k_end+1;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>   fftw_r2r_kind kinds[2] = {FFTW_REDFT01,FFTW_REDFT01};</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>   <span class="keywordtype">double</span> _Complex *work_ptr;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *x_ptr;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>   <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>   <span class="keywordflow">if</span> (k_end < FPT_BREAK_EVEN)</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>   {</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="comment">/* Use NDSFT. */</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>     fpt_trafo_direct(<span class="keyword">set</span>, m, x, y, k_end, flags);</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>   }</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>   X(next_power_of_2_exp)(k_end,&Nk,&tk);</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>   k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,Nk);</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>   k_end_tilde = <a class="code" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f" title="Maximum degree at top of a cascade.">K_END_TILDE</a>(k_end,Nk);</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>   <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>   <span class="keywordflow">if</span> (set->flags & FPT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>   <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>   {</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="preprocessor"></span>    <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="preprocessor"></span>    plan = fftw_plan_many_r2r(1, &length, 2, (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1,</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>       (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1, kinds, 0U);</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>   <span class="comment">/* Initialize working arrays. */</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   memset(set->result,0U,2*Nk*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>   <span class="comment">/* The first step. */</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>   <span class="comment">/* Set the first 2*data->k_start coefficients to zero. */</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>   memset(set->work,0U,2*data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>   work_ptr = &<span class="keyword">set</span>->work[2*data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>   x_ptr = x;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>   <span class="keywordflow">for</span> (k = 0; k <= k_end_tilde-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>; k++)</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>   {</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>     *work_ptr++ = *x_ptr++;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>     *work_ptr++ = K(0.0);</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   }</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>   <span class="comment">/* Set the last 2*(set->N-1-k_end_tilde) coefficients to zero. */</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>   memset(&set->work[2*(k_end_tilde+1)],0U,2*(Nk-1-k_end_tilde)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   <span class="comment">/* If k_end == Nk, use three-term recurrence to map last coefficient x_{Nk} to</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment">   * x_{Nk-1} and x_{Nk-2}. */</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>   <span class="keywordflow">if</span> (k_end == Nk)</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>   {</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>     <span class="keyword">set</span>->work[2*(Nk-2)] += data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>[tk-2]*x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>     set->work[2*(Nk-1)] += data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>[tk-2]*x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>     <span class="keyword">set</span>->work[2*(Nk-1)+1] = data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>[tk-2]*x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>   }</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>   <span class="comment">/* Compute the remaining steps. */</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>   plength = 4;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>   <span class="keywordflow">for</span> (tau = 1; tau < tk; tau++)</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>   {</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>     firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(k_end_tilde,plength);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>     <span class="comment">/* Compute the multiplication steps. */</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>     {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>       <span class="comment">/* Copy vectors to multiply into working arrays zero-padded to twice the length. */</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>       memcpy(set->vec3,&(set->work[(plength/2)*(4*l+2)]),(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>       memcpy(set->vec4,&(set->work[(plength/2)*(4*l+3)]),(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>       memset(&set->vec3[plength/2],0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>       memset(&set->vec4[plength/2],0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>       <span class="comment">/* Copy coefficients into first half. */</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>       memcpy(&(set->work[(plength/2)*(4*l+2)]),&(set->work[(plength/2)*(4*l+1)]),(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>       memset(&(set->work[(plength/2)*(4*l+1)]),0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>       memset(&(set->work[(plength/2)*(4*l+3)]),0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>       <span class="comment">/* Get matrix U_{n,tau,l} */</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>       step = &(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l]);</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>       <span class="comment">/* Check if step is stable. */</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>       <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>)</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>       {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>         <span class="comment">/* Check, if we should do a symmetrizised step. */</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>         <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>         {</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>           <span class="comment">/*for (k = 0; k < plength; k++)</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">          {</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="comment">            fprintf(stderr,"fpt_trafo: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">              step->a11[0][k],step->a12[0][k],step->a21[0][k],step->a22[0][k]);</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment">          }*/</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>           <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>           <span class="comment">//fprintf(stderr,"\nhallo\n");</span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>           fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0],</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>             step->a12[0], step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>         }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>         {</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>           <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>           fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>             step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>         }</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>         <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0] != 0.0)</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>         {</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>           <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>           {</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>             <span class="keyword">set</span>->work[plength*2*l+k] += <span class="keyword">set</span>->vec3[k];</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>           }</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>         }</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>         <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>         {</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>           <span class="keyword">set</span>->work[plength*(2*l+1)+k] += set->vec4[k];</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>         }</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>       }</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>       {</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>         <span class="comment">/* Stabilize. */</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>         <span class="comment">/* The lengh of the polynomials */</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>         plength_stab = step-><a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>         t_stab = step-><a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> </div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>         <span class="comment">/*---------*/</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>         <span class="comment">/*fprintf(stderr,"\nfpt_trafo: stabilizing at tau = %d, l = %d.\n",tau,l);</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment">        fprintf(stderr,"\nfpt_trafo: plength_stab = %d.\n",plength_stab);</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment">        fprintf(stderr,"\nfpt_trafo: tk = %d.\n",tk);</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment">        fprintf(stderr,"\nfpt_trafo: index = %d.\n",tk-tau-1);*/</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>         <span class="comment">/*---------*/</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>         <span class="comment">/* Set rest of vectors explicitely to zero */</span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>         <span class="comment">/*fprintf(stderr,"fpt_trafo: stabilizing: plength = %d, plength_stab = %d\n",</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment">          plength, plength_stab);*/</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>         memset(&set->vec3[plength/2],0U,(plength_stab-plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>         memset(&set->vec4[plength/2],0U,(plength_stab-plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>         <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>         <span class="comment">/* Check for symmetry. */</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>         <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY)</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>         {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>           <span class="keywordflow">if</span> (m <= 1)</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>           {</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>             fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>               step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>           }</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m%2 == 0)</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>           {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>             <span class="comment">/*fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="comment">              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>             fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>               step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0],</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>               set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>             <span class="comment">/*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment">              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>           }</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>           {</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>             <span class="comment">/*fpt_do_step_symmetric_l(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment">              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>             fpt_do_step_symmetric_l(set->vec3, set->vec4,</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>               step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>               step->a21[0],</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>               step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>             <span class="comment">/*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="comment">              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>           }</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>         }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>         {</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>             fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>               step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         }</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> </div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>         <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0] != 0.0)</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>         {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>           <span class="keywordflow">for</span> (k = 0; k < plength_stab; k++)</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>           {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>             <span class="keyword">set</span>->result[k] += <span class="keyword">set</span>->vec3[k];</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>           }</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         }</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> </div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>         <span class="keywordflow">for</span> (k = 0; k < plength_stab; k++)</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>         {</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>           <span class="keyword">set</span>->result[Nk+k] += <span class="keyword">set</span>->vec4[k];</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>         }</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>       }</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     }</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     <span class="comment">/* Double length of polynomials. */</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     plength = plength<<1;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="comment">/*--------*/</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     <span class="comment">/*for (k = 0; k < 2*Nk; k++)</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="comment">      fprintf(stderr,"work[%2d] = %le + I*%le\tresult[%2d] = %le + I*%le\n",</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment">        k,creal(set->work[k]),cimag(set->work[k]),k,creal(set->result[k]),</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment">        cimag(set->result[k]));</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>     <span class="comment">/*--------*/</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>   }</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>   <span class="comment">/* Add the resulting cascade coeffcients to the coeffcients accumulated from</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment">   * the stabilization steps. */</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>   <span class="keywordflow">for</span> (k = 0; k < 2*Nk; k++)</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>   {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>     <span class="keyword">set</span>->result[k] += <span class="keyword">set</span>->work[k];</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>   }</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> </div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>   <span class="comment">/* The last step. Compute the Chebyshev coeffcients c_k^n from the</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment">   * polynomials in front of P_0^n and P_1^n. */</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>   y[0] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[0] + data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk] +</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[Nk+1]*0.5);</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>   y[1] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[1] + data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk+1]+</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>     data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*(<span class="keyword">set</span>->result[Nk]+<span class="keyword">set</span>->result[Nk+2]*0.5));</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>   y[k_end-1] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[k_end-1] +</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk+k_end-1] +</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[Nk+k_end-2]*0.5);</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>   y[k_end] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(0.5*data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[Nk+k_end-1]);</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>   <span class="keywordflow">for</span> (k = 2; k <= k_end-2; k++)</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>   {</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     y[k] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[k] + data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk+k] +</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>       data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*0.5*(<span class="keyword">set</span>->result[Nk+k-1]+<span class="keyword">set</span>->result[Nk+k+1]));</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>   }</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> </div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>   <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>   {</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     y[0] *= 2.0;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     fftw_execute_r2r(plan,(<span class="keywordtype">double</span>*)y,(<span class="keywordtype">double</span>*)y);</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="preprocessor"></span>    fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>     <span class="keywordflow">for</span> (k = 0; k <= k_end; k++)</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     {</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>       y[k] *= 0.5;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>     }</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>   }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> }</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="keywordtype">void</span> fpt_transposed_direct(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> _Complex *x,</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>   <span class="keywordtype">double</span> _Complex *y, <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> {</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>   <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>   <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>   <span class="keywordtype">double</span> norm;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>   X(next_power_of_2_exp)(k_end+1,&Nk,&tk);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>   norm = 2.0/(Nk<<1);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>   <span class="keywordflow">if</span> (set->flags & FPT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>   {</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>   }</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> </div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>   <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>   {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>     <span class="keywordflow">for</span> (j = 0; j <= k_end; j++)</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>     {</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>       <span class="keyword">set</span>->xc_slow[j] = cos((<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*(j+0.5))/(k_end+1));</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     }</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>     <a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5" title="Clenshaw algorithm.">eval_sum_clenshaw_transposed</a>(k_end, k_end, set->result, set->xc_slow,</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>       y, set->work, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO A [...]
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>       data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>);</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> </div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>     memcpy(x,&set->result[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>       <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>   }</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>   {</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     memcpy(set->result,y,(k_end+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>     memset(&set->result[k_end+1],0U,(Nk-k_end-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> </div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>     <span class="keywordflow">for</span> (j = 0; j < Nk; j++)</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>     {</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>       <span class="keyword">set</span>->result[j] *= norm;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>     }</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> </div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>     fftw_execute_r2r(set->plans_dct3[tk-2],(<span class="keywordtype">double</span>*)set->result,</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>       (<span class="keywordtype">double</span>*)set->result);</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> </div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     <a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5" title="Clenshaw algorithm.">eval_sum_clenshaw_transposed</a>(k_end, Nk-1, set->temp, set->xcvecs[tk-2],</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>       set->result, set->work, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc"  [...]
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>       data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>);</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>     memcpy(x,&set->temp[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>   }</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="keywordtype">void</span> fpt_transposed(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> _Complex *x,</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>   <span class="keywordtype">double</span> _Complex *y, <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>   <span class="comment">/* Get transformation data. */</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>   <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>   <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>   <span class="keywordtype">int</span> k_end_tilde;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>   <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>   <span class="keywordtype">int</span> firstl;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>   <span class="keywordtype">int</span> lastl;</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>   <span class="keywordtype">int</span> plength_stab;</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>   <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> *step;</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>   fftw_plan plan;</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>   <span class="keywordtype">int</span> length = k_end+1;</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>   fftw_r2r_kind kinds[2] = {FFTW_REDFT10,FFTW_REDFT10};</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>   <span class="keywordtype">int</span> t_stab;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> </div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>   <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>   <span class="keywordflow">if</span> (k_end < FPT_BREAK_EVEN)</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>   {</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     <span class="comment">/* Use NDSFT. */</span></div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     fpt_transposed_direct(<span class="keyword">set</span>, m, x, y, k_end, flags);</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>   }</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>   X(next_power_of_2_exp)(k_end,&Nk,&tk);</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>   k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,Nk);</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>   k_end_tilde = <a class="code" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f" title="Maximum degree at top of a cascade.">K_END_TILDE</a>(k_end,Nk);</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>   <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>   <span class="keywordflow">if</span> (set->flags & FPT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>   {</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>   }</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>   <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>   {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="preprocessor"></span>    <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="preprocessor"></span>    plan = fftw_plan_many_r2r(1, &length, 2, (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1,</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>       (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1, kinds, 0U);</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <span class="preprocessor"></span>    fftw_execute_r2r(plan,(<span class="keywordtype">double</span>*)y,(<span class="keywordtype">double</span>*)set->result);</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="preprocessor"></span>    fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>     <span class="keywordflow">for</span> (k = 0; k <= k_end; k++)</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>     {</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>       <span class="keyword">set</span>->result[k] *= 0.5;</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>     }</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>   }</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>   {</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     memcpy(set->result,y,(k_end+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>   }</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>   <span class="comment">/* Initialize working arrays. */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>   memset(set->work,0U,2*Nk*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> </div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>   <span class="comment">/* The last step is now the first step. */</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>   <span class="keywordflow">for</span> (k = 0; k <= k_end; k++)</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>   {</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     <span class="keyword">set</span>->work[k] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*<span class="keyword">set</span>->result[k];</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>   }</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>   <span class="comment">//memset(&set->work[k_end+1],0U,(Nk+1-k_end)*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>   <span class="keyword">set</span>->work[Nk] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[0] +</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[1]);</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>   <span class="keywordflow">for</span> (k = 1; k < k_end; k++)</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>   {</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>     <span class="keyword">set</span>->work[Nk+k] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[k] +</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>       data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*0.5*(<span class="keyword">set</span>->result[k-1]+<span class="keyword">set</span>->result[k+1]));</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>   }</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>   <span class="keywordflow">if</span> (k_end<Nk)</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>   {</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>     memset(&set->work[k_end],0U,(Nk-k_end)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>   }</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>   memcpy(set->result,set->work,2*Nk*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> </div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>   <span class="comment">/* Compute the remaining steps. */</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>   plength = Nk;</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>   <span class="keywordflow">for</span> (tau = tk-1; tau >= 1; tau--)</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>   {</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>     lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(k_end_tilde,plength);</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> </div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     <span class="comment">/* Compute the multiplication steps. */</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>     <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     {</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>       <span class="comment">/* Initialize second half of coefficient arrays with zeros. */</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>       memcpy(set->vec3,&(set->work[(plength/2)*(4*l+0)]),plength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>       memcpy(set->vec4,&(set->work[(plength/2)*(4*l+2)]),plength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>       memcpy(&set->work[(plength/2)*(4*l+1)],&(set->work[(plength/2)*(4*l+2)]),</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>         (plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>       <span class="comment">/* Get matrix U_{n,tau,l} */</span></div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>       step = &(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l]);</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>       <span class="comment">/* Check if step is stable. */</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>       <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>)</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>       {</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>         <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>         {</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>           <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>           fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>             step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>         }</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>         {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>           <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>           fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>             step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>         }</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>         memcpy(&(set->vec3[plength/2]), set->vec4,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>         <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>         {</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>           <span class="keyword">set</span>->work[plength*(4*l+2)/2+k] = set->vec3[k];</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>         }</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>       }</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>       {</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>         <span class="comment">/* Stabilize. */</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>         plength_stab = step-><a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>         t_stab = step-><a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> </div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>         memcpy(set->vec3,set->result,plength_stab*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>         memcpy(set->vec4,&(set->result[Nk]),plength_stab*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>         <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>         <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY)</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>         {</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>           <span class="keywordflow">if</span> (m <= 1)</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>           {</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>             fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>               step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>           }</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m%2 == 0)</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>           {</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>             fpt_do_step_t_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>               set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>           }</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>           {</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>             fpt_do_step_t_symmetric_l(set->vec3, set->vec4,</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>               step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>           }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>         }</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>         {</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>             fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>               step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>         }</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>         memcpy(&(set->vec3[plength/2]),set->vec4,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> </div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>         <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>         {</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>           <span class="keyword">set</span>->work[(plength/2)*(4*l+2)+k] = <span class="keyword">set</span>->vec3[k];</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>         }</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>        }</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     }</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>     <span class="comment">/* Half the length of polynomial arrays. */</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>     plength = plength>>1;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>   }</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>   <span class="comment">/* First step */</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>   <span class="keywordflow">for</span> (k = 0; k <= k_end_tilde-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>; k++)</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>   {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     x[k] = <span class="keyword">set</span>->work[2*(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+k)];</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>   }</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>   <span class="keywordflow">if</span> (k_end == Nk)</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>   {</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>     x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>] =</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>         data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>[tk-2]*<span class="keyword">set</span>->work[2*(Nk-2)]</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>       + data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>[tk-2] *set->work[2*(Nk-1)]</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>       + data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>[tk-2]*<span class="keyword">set</span>->work[2*(Nk-1)+1];</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>   }</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> }</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="keywordtype">void</span> fpt_finalize(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>)</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> {</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>   <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data;</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>   <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>   <span class="keywordtype">int</span> N_tilde;</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>   <span class="keywordtype">int</span> firstl, lastl;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>   <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = <span class="keyword">set</span>->M;</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> </div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>   <span class="comment">/* TODO Clean up DPT transform data structures. */</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>   <span class="keywordflow">for</span> (m = 0; m < M; m++)</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>   {</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>     <span class="comment">/* Check if precomputed. */</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     data = &<span class="keyword">set</span>->dpt[m];</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     <span class="keywordflow">if</span> (data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> != (<a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>**)NULL)</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>     {</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>);</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>);</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>);</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>       data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a> = NULL;</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>       data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a> = NULL;</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>       data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a> = NULL;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> </div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>       <span class="comment">/* Free precomputed data. */</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>       k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,X(next_power_of_2)(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comme [...]
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>         <span class="comment">/*set->N*/</span>);</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>       N_tilde = N_TILDE(set->N);</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>       plength = 4;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>       <span class="keywordflow">for</span> (tau = 1; tau < <span class="keyword">set</span>->t; tau++)</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>       {</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>         <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>         firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>         <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>         lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(N_tilde,plength);</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>         <span class="comment">/* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>         <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>         {</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>           <span class="comment">/* Free components. */</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0]);</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0]);</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0]);</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0]);</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0] = NULL;</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0] = NULL;</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0] = NULL;</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0] = NULL;</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>           <span class="comment">/* Free components. */</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11);</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12);</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>);</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>);</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11 = NULL;</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12 = NULL;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21 = NULL;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a> = NULL;</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>           data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a> = NULL;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>         }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>         <span class="comment">/* Free pointers for current level. */</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau]);</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>         data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau] = NULL;</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>         <span class="comment">/* Double length of polynomials. */</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>         plength = plength<<1;</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>       }</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>       <span class="comment">/* Free steps. */</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>       data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> = NULL;</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>     }</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>     <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>     {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>       <span class="comment">/* Check, if recurrence coefficients must be copied. */</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>       <span class="comment">//fprintf(stderr,"\nfpt_finalize: %d\n",set->flags & FPT_PERSISTENT_DATA);</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>       <span class="keywordflow">if</span> (!(set->flags & FPT_PERSISTENT_DATA))</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>       {</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>);</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>);</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a>);</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>       }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>       data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a> = NULL;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>       data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a> = NULL;</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>       data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a> = NULL;</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>     }</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>   }</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> </div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>   <span class="comment">/* Delete array of DPT transform data. */</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->dpt);</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>   <span class="keyword">set</span>->dpt = NULL;</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>   <span class="keywordflow">for</span> (tau = 1; tau < <span class="keyword">set</span>->t+1; tau++)</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>   {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->xcvecs[tau-1]);</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>     <span class="keyword">set</span>->xcvecs[tau-1] = NULL;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>   }</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->xcvecs);</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>   <span class="keyword">set</span>->xcvecs = NULL;</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> </div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>   <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->work);</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->result);</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> </div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>   <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>   <span class="keywordflow">if</span> (!(set->flags & FPT_NO_FAST_ALGORITHM))</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>   {</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>     <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->vec3);</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->vec4);</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->z);</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>     <span class="keyword">set</span>->work = NULL;</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>     <span class="keyword">set</span>->result = NULL;</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>     <span class="keyword">set</span>->vec3 = NULL;</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>     <span class="keyword">set</span>->vec4 = NULL;</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>     <span class="keyword">set</span>->z = NULL;</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>     <span class="comment">/* Free FFTW plans. */</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>     <span class="keywordflow">for</span>(tau = 0; tau < <span class="keyword">set</span>->t<span class="comment">/*-1*/</span>; tau++)</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>     {</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>       fftw_destroy_plan(set->plans_dct3[tau]);</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>       fftw_destroy_plan(set->plans_dct2[tau]);</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> }</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>       <span class="keyword">set</span>->plans_dct3[tau] = NULL;</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>       <span class="keyword">set</span>->plans_dct2[tau] = NULL;</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>     }</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> </div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->plans_dct3);</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->plans_dct2);</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>     <span class="keyword">set</span>->plans_dct3 = NULL;</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>     <span class="keyword">set</span>->plans_dct2 = NULL;</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>   }</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>   <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>   {</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>     <span class="comment">/* Delete arrays of Chebyshev nodes. */</span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->xc_slow);</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>     <span class="keyword">set</span>->xc_slow = NULL;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->temp);</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>     <span class="keyword">set</span>->temp = NULL;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>   }</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>   <span class="comment">/* Free DPT set structure. */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/fpt_8h_source.html b/doc/api/html/fpt_8h_source.html
new file mode 100644
index 0000000..d200a63
--- /dev/null
+++ b/doc/api/html/fpt_8h_source.html
@@ -0,0 +1,123 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fpt.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">fpt.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: fpt.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#ifndef _FPT_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#define _FPT_H_</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step_</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>   <span class="keywordtype">bool</span> <a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>;                            </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>;                                 </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>;                                 </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">double</span> **a11,**a12,**a21,**<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>;         </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title="                             ">g</a>;                              </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> } <a class="code" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data_</a></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> **<a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>;                       </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>;                            </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>;                         </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>;                          </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>;                         </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>;                         </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>;                          </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>;                        </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="comment">/* Data for direct transform. */</span>        </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">   52</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151" title="< TODO Add comment here.">alpha</a>;                          </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">   53</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3" title="TODO Add comment here.">beta</a>;                           </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">   54</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723" title="TODO Add comment here.">gamma</a>;                          </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> } <a class="code" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10" title="Holds data for a single cascade summation.">fpt_data</a>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s_</a></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">   62</a></span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2" title="The flags.">flags</a>;                     </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804" title="The number of DPT transforms.">M</a>;                                  </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81" title="The transform length.">N</a>;                                  </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef" title="The exponent of N.">t</a>;                                  </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *<a class="code" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760" title="The DPT transform data.">dpt</a>;                          </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordtype">double</span> **<a class="code" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b" title="Array of pointers to arrays containing the Chebyshev nodes.">xcvecs</a>;                        </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordtype">double</span> *<a class="code" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf" title="Array for Chebychev-nodes.">xc</a>;                             </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordtype">double</span> _Complex *temp;                          </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordtype">double</span> _Complex *work;                          </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordtype">double</span> _Complex *result;                        </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">double</span> _Complex *vec3;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">double</span> _Complex *vec4;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">double</span> _Complex *z;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   fftw_plan *<a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>;                  </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   fftw_plan *<a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>;                  </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3" title="Transform kinds for fftw library.">kinds</a>;                   </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6" title="Transform kinds for fftw library.">kindsr</a>;                  </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">int</span> *<a class="code" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681" title="Transform lengths for fftw library.">lengths</a>; </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="comment">/* Data for slow transforms. */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordtype">double</span> *xc_slow;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> } <a class="code" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8" title="Holds data for a set of cascade summations.">fpt_set_s</a>;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#endif </span><span class="comment">/*_FPT_H_*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/ftv2blank.png b/doc/api/html/ftv2blank.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2blank.png differ
diff --git a/doc/api/html/ftv2cl.png b/doc/api/html/ftv2cl.png
new file mode 100644
index 0000000..132f657
Binary files /dev/null and b/doc/api/html/ftv2cl.png differ
diff --git a/doc/api/html/ftv2doc.png b/doc/api/html/ftv2doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/doc/api/html/ftv2doc.png differ
diff --git a/doc/api/html/ftv2folderclosed.png b/doc/api/html/ftv2folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/doc/api/html/ftv2folderclosed.png differ
diff --git a/doc/api/html/ftv2folderopen.png b/doc/api/html/ftv2folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/doc/api/html/ftv2folderopen.png differ
diff --git a/doc/api/html/ftv2lastnode.png b/doc/api/html/ftv2lastnode.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2lastnode.png differ
diff --git a/doc/api/html/ftv2link.png b/doc/api/html/ftv2link.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/doc/api/html/ftv2link.png differ
diff --git a/doc/api/html/ftv2mlastnode.png b/doc/api/html/ftv2mlastnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/doc/api/html/ftv2mlastnode.png differ
diff --git a/doc/api/html/ftv2mnode.png b/doc/api/html/ftv2mnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/doc/api/html/ftv2mnode.png differ
diff --git a/doc/api/html/ftv2mo.png b/doc/api/html/ftv2mo.png
new file mode 100644
index 0000000..4bfb80f
Binary files /dev/null and b/doc/api/html/ftv2mo.png differ
diff --git a/doc/api/html/ftv2node.png b/doc/api/html/ftv2node.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2node.png differ
diff --git a/doc/api/html/ftv2ns.png b/doc/api/html/ftv2ns.png
new file mode 100644
index 0000000..72e3d71
Binary files /dev/null and b/doc/api/html/ftv2ns.png differ
diff --git a/doc/api/html/ftv2plastnode.png b/doc/api/html/ftv2plastnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/doc/api/html/ftv2plastnode.png differ
diff --git a/doc/api/html/ftv2pnode.png b/doc/api/html/ftv2pnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/doc/api/html/ftv2pnode.png differ
diff --git a/doc/api/html/ftv2splitbar.png b/doc/api/html/ftv2splitbar.png
new file mode 100644
index 0000000..fe895f2
Binary files /dev/null and b/doc/api/html/ftv2splitbar.png differ
diff --git a/doc/api/html/ftv2vertline.png b/doc/api/html/ftv2vertline.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2vertline.png differ
diff --git a/doc/api/html/functions.html b/doc/api/html/functions.html
new file mode 100644
index 0000000..7fd3bab
--- /dev/null
+++ b/doc/api/html/functions.html
@@ -0,0 +1,90 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_alpha
+: <a class="el" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">fpt_data_</a>
+</li>
+<li>_beta
+: <a class="el" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">fpt_data_</a>
+</li>
+<li>_gamma
+: <a class="el" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x61.html b/doc/api/html/functions_0x61.html
new file mode 100644
index 0000000..1dd5a67
--- /dev/null
+++ b/doc/api/html/functions_0x61.html
@@ -0,0 +1,142 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li class="current"><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>a
+: <a class="el" href="structnnfftf__plan.html#ab0a39deb647f2a862caf5a6cfaf4939b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a41260d5c377bdd918b4952b4730b6908">nnfftl_plan</a>
+</li>
+<li>a22
+: <a class="el" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">fpt_step_</a>
+</li>
+<li>act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a505021fefe68002ba73c78815166a73c">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eeabbe1dbef7ccf1c2b8c683a4b5dc">nsfftl_plan</a>
+</li>
+<li>Ad
+: <a class="el" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">fastsum_plan_</a>
+</li>
+<li>Add
+: <a class="el" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">fastsum_plan_</a>
+</li>
+<li>alpha
+: <a class="el" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">fpt_data_</a>
+, <a class="el" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">nfsft_wisdom</a>
+, <a class="el" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">fastsum_plan_</a>
+</li>
+<li>alpha_0
+: <a class="el" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">fpt_data_</a>
+</li>
+<li>alpha_iter
+: <a class="el" href="structsolverf__plan__double.html#ae1d25f3ba1b23f7d5953991495c91ce3">solverf_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6e7a960d8661f6c459ebac7085e2587f">infct_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad149f66fa5dde187b3ef7860e593de01">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a7ea0b68ab2ccfe01df7a3747a5fed15a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#aad358c99ea10d70c4984bf9898820865">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a9abf5757d92159acfd73366a4c4df7be">infft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#ae202e8af2161d1d64bb32e49fc16f5f0">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae6e228dc1df00e0b3de8873f0de12675">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#aef3f9b375d7e43fbcbea60380c5e9f34">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a740c87ac77f68578613d58e569deedb2">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#ac2ce57e2bfbc31f9262e5ce93562d899">solverf_plan_complex</a>
+</li>
+<li>alphaN
+: <a class="el" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">fpt_data_</a>
+</li>
+<li>aN1
+: <a class="el" href="structnnfftf__plan.html#a405914d88ec36f1bf8438ebfed59f294">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#af262dc79891366e77bb15789aa24f2cd">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb">nnfft_plan</a>
+</li>
+<li>aN1_total
+: <a class="el" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa791fcca6424d42640020e178e8319e7">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a4bfc7abd18935616365f7925b2994e38">nnfftf_plan</a>
+</li>
+<li>aux
+: <a class="el" href="structnfsoftf__plan__.html#a5f7c39509a2403a9bc17824be7a3c3a9">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ae669348fbbb187c8c521f6a89c8f3720">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x62.html b/doc/api/html/functions_0x62.html
new file mode 100644
index 0000000..650d74a
--- /dev/null
+++ b/doc/api/html/functions_0x62.html
@@ -0,0 +1,122 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>b
+: <a class="el" href="structnfftf__plan.html#a3ede2fe9c94e00ec59150ba2971facb2">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a6eb955f63212f63c0ac26894f8355caf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a49927bec2aa96ab8596740011fabb914">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a8378f952b6e05cd58225877eee84f2e7">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#af1c2c2fe35f5b574a39109bb7b176270">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#adbd7faf4a853905d26899885e5ca3b38">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa91e909254c1beb83e2e971df50b96ca">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a80c548cbcc4defbac2b544602a5baa85">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a01287f3f68aff7e5d7ce35d3163021e2">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ada085ec8f6099bfcaa7a193745689c9a">nnfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">fgt_plan</a>
+, <a class="el" href="structnfstf__plan.html#a2ca69cf1b6dea39e81cba93d0d1667d8">nfstf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">fastsum_plan_</a>
+</li>
+<li>beta
+: <a class="el" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">fpt_data_</a>
+</li>
+<li>beta_0
+: <a class="el" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">fpt_data_</a>
+</li>
+<li>beta_iter
+: <a class="el" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#a1c60e5fd15da3722f9b8213d1634c86a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a7714746a66fd3657bd247062c9c5cb24">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a0aa7b8faeab03acb6011b673882282ea">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a444f54274b78ec9162683d2cc9cb3160">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ac622efae9216d5d4335118084c7fcbfa">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#abd007d004fedd5bb4b9eb919d8e928d8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a4b53103abc562b5c603b4b656d1992fa">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ab0f9266a50fc4a3acda9659b2c0920e3">solverl_plan_complex</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3e6ea22841cd010652beb76f554bdf92">infct_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a09f8c30247659fc918d48521ba5ed5e8">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a7f3271035bca7b994475e565ab1ffb22">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>betaN
+: <a class="el" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x63.html b/doc/api/html/functions_0x63.html
new file mode 100644
index 0000000..b681f20
--- /dev/null
+++ b/doc/api/html/functions_0x63.html
@@ -0,0 +1,105 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c_phi_inv
+: <a class="el" href="structnfftf__plan.html#aa71f70b332bbb9868caad1db9f6cda02">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a38d2c1dec96ad6d632133bc1dcbf82cb">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a7fdb409271e18f5dec1ac622af10d32a">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#aa217dda883fc3533b95bf6ab6ccff888">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a89b1d6ef566671d479eaaf4e50f666cb">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ab9b9f0d173b9526d60c1ae8fbec1e1f7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#afdcd5a1259a4fb7e7271efe30a207265">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2b69489da0118e06cba24db6d73ea934">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9d59ca4338fe39f2e22f4e5d3155deba">nfstf_plan</a>
+</li>
+<li>center_nfft_plan
+: <a class="el" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e">nsfft_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa01b9e613b9847fa4cc6278fcb3ae660">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af26a51757ddb28c4bcb37a0426e83fc1">nsfftl_plan</a>
+</li>
+<li>cheby
+: <a class="el" href="structnfsoftf__plan__.html#a73e75b0a9f8ceebffe6923c90c04c312">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a681110b5c15effe7ef2781249e049119">nfsoftl_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x64.html b/doc/api/html/functions_0x64.html
new file mode 100644
index 0000000..caaa50b
--- /dev/null
+++ b/doc/api/html/functions_0x64.html
@@ -0,0 +1,212 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>d
+: <a class="el" href="structnfftf__plan.html#a35ff58e4549b1c5292fd03cb215debac">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a1129b984a15339cca4fbbbc2190d43af">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8">nfst_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a66ac609113d5f8debb056f3c62f6b14b">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae6d3ce66c1d6d2fd0f507d83df91f549">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4c139d72e93078b54f4240ecd7f6454f">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#aa42a9c638dec4cfa622f2e3f7e7c1dc3">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a14dac9d67ed25ff370516f66668a8ec6">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a161e392c8404d11f3237350b23e8c041">nsfftf_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa792b04cd0fa4f09175773aaa48f6a69">nfstf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aca82cd28238f0c1a5171eabd1d301f90">nsfftl_plan</a>
+</li>
+<li>deltax0
+: <a class="el" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">taylor_plan</a>
+</li>
+<li>direct_plan
+: <a class="el" href="structnnfftf__plan.html#a15fe2e694c1b999008600c1f4a5dc2be">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa59e9ff1ad2fe1d90e077451831c6596">nnfftl_plan</a>
+</li>
+<li>dot_p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a3d2a5ea538a77dc4f2da9b53beab9c01">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a2bf2a21b09e47a883f9665b4ec38f3c2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a4941cd9e60935f7e39a0c86a52202c02">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a2f43c87a598dff5b6e87960a07864148">solverl_plan_double</a>
+</li>
+<li>dot_p_iter
+: <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a00c75acfb362339a30d2809520fcd775">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a65805c60e7d3a18d9a8952da80286032">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a108504616c4e19b53638a80710f9308c">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a2ddddb18e229f9d2d4b9eb11c36d0529">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a50526d4b81b2dd8cf90e82ad162af3c5">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a6dfb17d6feade963b31c16e6278aa6ee">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a3d20a53eb3c0158cc401d7b0d640da07">innfft_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a90e95de22380d88f23720ffca653edeb">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#af3de3b55c6ddf2e27ed9fbe7ef164b04">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#adfc3485017bb92e57c229dc7f81e438b">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a3dfbd628846af0683c8fc263f8cf6418">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#aad7bfd0f7561ec252b26b1d183622f12">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a52eec6bb5ee2ae209ed90d44739c8769">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af456205ec418161fe20de523e423bb51">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter_old
+: <a class="el" href="structinfsft__adjoint__plan.html#a228a2a746f7b7958efb3c4a4ef28e6ce">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a38e5e1e241a0a4a54e83266223725ab6">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a98056f05d5a45569899df80b040b9872">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#ae8dfd86274f0e3bba8c01730449d0474">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0a0b243360667886af63d1ac26408f74">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a846d92d450d33e64996d28c2054e3181">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acce4b5401db74c6e9896a78eccc9ca1e">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_iter
+: <a class="el" href="structsolverf__plan__complex.html#a1bb6290598f2f4f1452a2de2c27f54af">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ae52e93514983b50204d70f660e720e04">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa2d90b37bc2a2ae2f9d0c90c9431abf1">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab12b510e093f8ccfaa4c1e51b6cd31c1">solverl_plan_double</a>
+</li>
+<li>dot_r_iter_old
+: <a class="el" href="structsolverf__plan__double.html#a2ee1d6b53c866d65aaa948afcbdd871e">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#afa3e321968bd1773368cebe1339add7c">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a861d76266b51f96c015ed6e33505978d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a6d564c417ab5b11a306e489df80f4e1e">solverl_plan_complex</a>
+</li>
+<li>dot_v_hat_iter
+: <a class="el" href="structinfst__adjoint__plan.html#ab4e8f85dfe25ba2b90f86d7d39362e5c">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5d9a12eacf094e7f9e771add0a3874d5">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aed3f646cabd7b8ab1a480d7607ea45f3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae251b00724c42f9c0f906e823c9e17f8">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a990b893dd142cbc3ade6436bdd603e59">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a1a005f3e97b207a1d42cbc8e2ad3a5e1">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ac1b772ccfa72ce8e522298aeef3b1e1b">infct_adjoint_plan</a>
+</li>
+<li>dot_v_iter
+: <a class="el" href="structsolverf__plan__double.html#aaeae6a2f28ba0ded31baca1aa8c36431">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a46f2243aac9e8e4689ab7f06914d3f97">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a849c4c1c131a333885e581fec5a2dac0">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a14f62c3118e3c1c7a92dd9bf8877250c">solverl_plan_complex</a>
+</li>
+<li>dot_z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#adeec40c2b8450cd7486f8524c6dcc3d4">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#aefacac40db7773101ce75ba8247119b7">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ae487ec619578f4f6d4876d7bc059f22a">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a845482517a34f22d7eb39bf1747e5dd6">solverf_plan_double</a>
+</li>
+<li>dot_z_hat_iter_old
+: <a class="el" href="structsolverf__plan__double.html#aa9672016211508805091ab645b489bbf">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#af4efa34efc92f873c771df52d423f39e">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a71e2482ed0eb34229fb166d6821d1a03">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#aa991891a7df826b77fac977581f9077c">solverl_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee">solver_plan_complex</a>
+</li>
+<li>dot_z_iter
+: <a class="el" href="structinnfft__adjoint__plan.html#aae72bba8cc1a211c1b3931c969f95a85">innfft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a6cca862303d84903e408f5a2ea02aa9c">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a2309d1161fdf96711f3251e41a65eef0">infst_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ad854541f2e09bc978461fff1c323b2a5">infsft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af91db19db24ca1c648d97ea516367f94">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ac3ca8cbbcd9958d69b15b4696e14a2e3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ab848ecc31c17b9cd639e9834ee56816d">infct_adjoint_plan</a>
+</li>
+<li>dot_z_iter_old
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a794d80ffe20e25a4d69340d925d8624c">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#aa78f22f1c5c917f665b2f1af3e7df191">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a9bdd6b4dfcb1b22bd010444ef34b5903">infst_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad2417d37a566a0d26dea57f6f875ca12">infct_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a92ceaf9529a44c28fd3b6d9d63c0c13f">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a669c48fd77d0d04bf0adc4ebedbd699f">innfft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a681a3587b2e42a24f03bac812eb7a60e">infsft_adjoint_plan</a>
+</li>
+<li>dpt
+: <a class="el" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x65.html b/doc/api/html/functions_0x65.html
new file mode 100644
index 0000000..4e96c1e
--- /dev/null
+++ b/doc/api/html/functions_0x65.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eps_B
+: <a class="el" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">fastsum_plan_</a>
+</li>
+<li>eps_I
+: <a class="el" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">fastsum_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x66.html b/doc/api/html/functions_0x66.html
new file mode 100644
index 0000000..f4886ad
--- /dev/null
+++ b/doc/api/html/functions_0x66.html
@@ -0,0 +1,241 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>f
+: <a class="el" href="structnfftf__mv__plan__complex.html#ab3a2f060f60eb88cd268bc1bec2e5310">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a0b25cac2771ce5e3048ddc1b708e9005">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ae6c4a0204a54f2a37a0acf2b3f5a0c0c">nfftl_mv_plan_double</a>
+, <a class="el" href="structnnfftf__plan.html#a458403c21a1083ede0d84a6d25c8cc8c">nnfftf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a62073b403c90aa2b527d5f62f190112e">nfsoftl_plan_</a>
+, <a class="el" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb">nnfft_plan</a>
+, <a class="el" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">fastsum_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a53b53a1222f4acf29c778b933c9f130e">nfftl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a6aaa7904dbee73679d86060f1842a04e">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa2cda7d4bb129ad3dfd6b89682c28cd6">nsfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e">nfft_mv_plan_double</a>
+, <a class="el" href="structnfctf__plan.html#a5c695490725fbd63787fb76548de2908">nfctf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ada472d5a0fb2afc32b4d1683c98185f6">nsfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd">nfct_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a3ab01f8b5f1b1368dbf3d7715ce46997">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#aa762bd3f11d1558e792ff34dc710bcb3">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfftf__plan.html#a1c2e419705d6254801134bffe0695ae1">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5">nfft_plan</a>
+, <a class="el" href="structnfctl__plan.html#ae09e0a759e136ad020a97e6c76efbb30">nfctl_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385">mri_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#a178dae9cc4b5869ef69fd148efe14f93">nfstf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a3e2fef5b1bb862347511209994235597">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#adb03497106fd0a995b70010f9cd9684b">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#adb5c2e9ba052f02fec78e550413aacfa">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931">nfst_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a7cfd191a4353a736bf9045c7e1d46f70">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df">nfsft_plan</a>
+, <a class="el" href="structnfstl__plan.html#ad4f7ff9f286c0203712d5f16b21e9e4e">nfstl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ad27b30233039fea75a9e1bc885324f3d">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a165dc6360c20f9eb19a55872cc29455a">nfsoftf_plan_</a>
+</li>
+<li>f_hat
+: <a class="el" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab9243951baccdf59de326cada1c08853">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa6990fedf1965a967f3f718dd373f543">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ab280522456fe4f49ccb91d4aa195702d">nfsoftl_plan_</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ad55a895ef394e9b74db36d028656b382">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a109229f89032f01e4b2bece93297189c">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#aa967453b5ae5ba9e5b2056c884d2cda5">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#ae4b3786df2416012cf16d7ed4c097791">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#add804289931e55388070ee495c3e5072">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#ad5cf4ad0369bdaf07f6acd801e6b9e5e">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a33bae90d163b1d848efc2c656bac6839">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#aede4fbbe9a7b666d5d5fbd62e62bf103">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ab57019bf0a7274b5a6f401fe2f6bcf2b">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#aa0a56037700b7a3d428c77e353dc209e">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a068de2b177ffaad5b0091b0ecd2ca211">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a97bc689ffe1f4c8eb99ee43cf408c662">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a423d4a1555477e49a7cb3c26a4a5dfd1">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a93d9d361d56e03f44bc6a9d4265b9f43">nsfftl_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a18fb340e9ead654552e45033c81ac637">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac644cb0bbceb7ea8634ea94758da405d">mrif_inh_3d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50">mri_inh_3d_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a70247e89a002d0e7b5c66d1e87b33645">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#ae1f94471fa54c0a172ede3345d0a9a9c">mril_inh_3d_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a840547e30414a41c3751e2b418f76312">nfsftf_plan</a>
+</li>
+<li>f_hat_intern
+: <a class="el" href="structnfsftf__plan.html#aa0a6fb494d6378f656c83f191cd4ed1d">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab3914490d1c4767c0127783cac5098e4">nfsftl_plan</a>
+</li>
+<li>f_hat_iter
+: <a class="el" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#abe0364fe67e48a336fca522a0cf6ee1b">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aab9daf7841a5f6b3a059921713736e3c">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#affba771210ad63dfce92bed9a629e19f">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0c38937dd8ad6734e94e08a2cd700628">solverl_plan_double</a>
+</li>
+<li>f_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a9c5a261251ad90176392b2fafcd961de">infsft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af72ea2aed94d3e789dd064776fdf2919">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b03057778ae78ee06efd6b135e23fb">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74d132853f5b7e0a4b8e3918dae7fe8c">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ae154ca7cd0d7ebc7e0db4b1f415b56fd">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a4207ca1175efe7865d6631ae5a704632">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a0b408ac6ce2906dc57ff0c2ff9d3f0d0">infft_adjoint_plan</a>
+</li>
+<li>fftw_flags
+: <a class="el" href="structnfftf__plan.html#a880c04f5e9d485d84065b3c289cd5729">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#afd3bc700b6adca6d3dde831c9a7aae79">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a407c06575335351e1b720b40f8b4f26c">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#afc96567eba0053563867b8e3a064902b">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0ab6b3ec18b7e0685277d5f6997aa54c">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9da018cd24e707e57ed0c8cac82f5301">nfstf_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4e0df1f491a4aa8f7373d776d705095f">nfftl_plan</a>
+</li>
+<li>FFTW_MANGLE_DOUBLE()
+: <a class="el" href="structnfst__plan.html#abeeca1317cee53206b64c79f3de094c2">nfst_plan</a>
+, <a class="el" href="structnfft__plan.html#a02f777d558f0f4a3417000200472f1a9">nfft_plan</a>
+, <a class="el" href="structnsfft__plan.html#a937d2895eeeaa8aabb92359232498693">nsfft_plan</a>
+, <a class="el" href="structnfct__plan.html#af736d9e6e59e9a91276a48a50979fedb">nfct_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3c18cc4dec9293352c508e9999ebf05">nfst_plan</a>
+, <a class="el" href="structnsfft__plan.html#a979134567e97bfffbc022b8267f98f6d">nsfft_plan</a>
+</li>
+<li>FFTW_MANGLE_FLOAT()
+: <a class="el" href="structnsfftf__plan.html#a5ceb97a548f5a438ad46a12133b1b5e8">nsfftf_plan</a>
+, <a class="el" href="structnfstf__plan.html#a013fbbcfb64ef4d8f0cc7345e584fa92">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#ae2ffec96887c5407fb31063a0139f678">nfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#a18d7721bf6d8ccbc5bb20e2dad30f9a3">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad4f44281f0c352fc630442cb40597983">nfstf_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ac0a9dbecfd535a1c7b2c0cfec5b79925">nsfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#a3aef4c36c692ab0ac6e9ab69b32ac761">nfctf_plan</a>
+</li>
+<li>FFTW_MANGLE_LONG_DOUBLE()
+: <a class="el" href="structnfftl__plan.html#ab17581f82946cc39584acd6b059b7809">nfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a6285132e89913685bc2f7366fd79e769">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a2e9e81a72c786bd7ed4eef099a5f8a5e">nfftl_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa7137e627728ebee120141e78066da51">nsfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ad0a55579cc5f04b0af4cc28abd445083">nfctl_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a9a426f13a97f82a480413cba913b7f2b">nsfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a2c07f20560a3969129916e3d30239227">nfstl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a59134c76d93ffd73a6fc738babf5d443">nfctl_plan</a>
+</li>
+<li>flags
+: <a class="el" href="structnfsftl__plan.html#a15d53809b4f86c20e7fd99ea1b71efcb">nfsftl_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4">solver_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942">solver_plan_complex</a>
+, <a class="el" href="structnfsftf__plan.html#a67898ed2ead6812358feeace004b14fe">nfsftf_plan</a>
+, <a class="el" href="structsolverf__plan__double.html#a28ce886cb705632f8f866bfb5880795b">solverf_plan_double</a>
+, <a class="el" href="structnsfftf__plan.html#acd78e2fcc4a9c29700887aee1517214c">nsfftf_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f236235168535b9f9833bcc7e50e695">nfsoftl_plan_</a>
+, <a class="el" href="structsolverl__plan__double.html#aa95251443f265effb6093d63b6536431">solverl_plan_double</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aadd41183d54818f3e8528affe40769bc">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#adea4e1650ddadc3f0f7c1d833b6b7789">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a2d7642432b4b627a4bf77d1c05216669">solverf_plan_complex</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad913ef9fc7d9bb8ca4f91f1abbf99949">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0d51c3ece7512b04408b5a2b94ee4a05">innfft_adjoint_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a55301d3525d6457aebd0237871dee668">nfsoftf_plan_</a>
+, <a class="el" href="structsolverl__plan__complex.html#abd86575c07d53042297da1c54ebc9e1a">solverl_plan_complex</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6795cda9e0d83c5b5c7935b75d10dc1a">infsft_adjoint_plan</a>
+, <a class="el" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694">nfsft_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">fastsum_plan_</a>
+, <a class="el" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">fpt_set_s_</a>
+, <a class="el" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281">nsfft_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a8771c95bc65a49fe974389825f005ec9">infst_adjoint_plan</a>
+, <a class="el" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">fpt_set_s_</a>
+, <a class="el" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">fgt_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a83f3fc443fbf5c40336a46a8c1bdfaf8">infft_adjoint_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a5c4750f9d7a5f0dbc4d51d06d6be08d3">nsfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x67.html b/doc/api/html/functions_0x67.html
new file mode 100644
index 0000000..570a841
--- /dev/null
+++ b/doc/api/html/functions_0x67.html
@@ -0,0 +1,124 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g
+: <a class="el" href="structnfftf__plan.html#a35e6b39bfe06e5a6e56cde2458cf79a7">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539">nfft_plan</a>
+, <a class="el" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">fpt_step_</a>
+, <a class="el" href="structnfftl__plan.html#aa442607f39ed01885dbeb286b18b1b77">nfftl_plan</a>
+</li>
+<li>g1
+: <a class="el" href="structnfctf__plan.html#a44a225766135ec7d1bbe8e8e7631faa3">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a597e9fd4dddb36748c5e33ee1f058835">nfct_plan</a>
+, <a class="el" href="structnfftf__plan.html#a01420d5d785228ee24a4819d2b0454a2">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#afbe6522294161b247058e61e9ef64d78">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a279687997f16d0fb839928f472307b39">nfstf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ac54e606a9b0c7c6b526fb3d44d28482a">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a71a99cd893a823d1a7edb139650b2afe">nfftl_plan</a>
+</li>
+<li>g2
+: <a class="el" href="structnfftl__plan.html#aea25feca0bccefe267c0a9eb75390ed6">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a4a70d593fb1704dda85e2392c77ea3bc">nfctf_plan</a>
+, <a class="el" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ac4c375e593da728a4e7477f76ff12031">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#a11f05420be226a83aed2e8c41a1b9bd3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0e91b301bcd4ce83aecdda2b0f7712ed">nfstl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a365bf7b6d6fa04bfb4206f8ec647eb14">nfctl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a4fda15d8d9edaa8de0636b2a458bf763">nfftf_plan</a>
+</li>
+<li>g_hat
+: <a class="el" href="structnfftf__plan.html#aad01cb28079405090eaa1fce590c0c09">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#af708c1c479196fb4e3ded3d289085b5e">nfftl_plan</a>
+</li>
+<li>gamma
+: <a class="el" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">fpt_data_</a>
+</li>
+<li>gamma_m1
+: <a class="el" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">fpt_data_</a>
+</li>
+<li>gammaN
+: <a class="el" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x69.html b/doc/api/html/functions_0x69.html
new file mode 100644
index 0000000..8be316f
--- /dev/null
+++ b/doc/api/html/functions_0x69.html
@@ -0,0 +1,102 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>idx0
+: <a class="el" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">taylor_plan</a>
+</li>
+<li>index_sparse_to_full
+: <a class="el" href="structnsfftf__plan.html#a3e6968100cf6a0d5950ccdcb1744788f">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aaaf6f8d00374e91ec3baf983583b51bd">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55">nsfft_plan</a>
+</li>
+<li>index_x
+: <a class="el" href="structnfftf__plan.html#a1dadaac164fe9f9be856d47a53498335">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad98e162c23583ec8f010aacf9ec06767">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735">nfft_plan</a>
+</li>
+<li>initialized
+: <a class="el" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">nfsft_wisdom</a>
+</li>
+<li>internal_fpt_set
+: <a class="el" href="structnfsoftl__plan__.html#a8cf750d58de22209962bd9cb96f48864">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a686809f1397b113322b77ef50c8c0ef7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x6a.html b/doc/api/html/functions_0x6a.html
new file mode 100644
index 0000000..ce37b94
--- /dev/null
+++ b/doc/api/html/functions_0x6a.html
@@ -0,0 +1,86 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_j"></a>- j -</h3><ul>
+<li>J
+: <a class="el" href="structnsfftf__plan.html#a24e51336c8b6f1814932e2bad306179b">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a6e3abb9e765b8f40b0f398a85c07d8af">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52">nsfft_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x6b.html b/doc/api/html/functions_0x6b.html
new file mode 100644
index 0000000..52c0651
--- /dev/null
+++ b/doc/api/html/functions_0x6b.html
@@ -0,0 +1,104 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li class="current"><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>k
+: <a class="el" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">fastsum_plan_</a>
+</li>
+<li>K
+: <a class="el" href="structnfftf__plan.html#aad0836b3e8e4a98b27729d960b593caa">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae6f8a76f202fe1816cfe1004a9ce9a0d">nfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a9d2bd4132187064cf5f6c301f7ce5125">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4">nfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a574648230ce316a55282f362774aa615">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8">nnfft_plan</a>
+</li>
+<li>k_start
+: <a class="el" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">fpt_data_</a>
+</li>
+<li>kernel_param
+: <a class="el" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">fastsum_plan_</a>
+</li>
+<li>kinds
+: <a class="el" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">fpt_set_s_</a>
+</li>
+<li>kindsr
+: <a class="el" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x6c.html b/doc/api/html/functions_0x6c.html
new file mode 100644
index 0000000..b3d245b
--- /dev/null
+++ b/doc/api/html/functions_0x6c.html
@@ -0,0 +1,84 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li class="current"><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lengths
+: <a class="el" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x6d.html b/doc/api/html/functions_0x6d.html
new file mode 100644
index 0000000..ac5a3f6
--- /dev/null
+++ b/doc/api/html/functions_0x6d.html
@@ -0,0 +1,245 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>m
+: <a class="el" href="structnfftf__plan.html#a9002bd9a063311155ae2a8c94c076e9d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a255a1e1526bba8643690e0aa9c5b90c6">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a55a5e4a962d8e01d7c0282f916bacb8c">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a15e9f66b0447148fcce4af9eafa2f9ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#af7f40661f8b29323b5b0f1ad5a7290a4">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ac4741304d0030c88a8244dd1d8171b65">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a0a2a679bf0d1c90511a52c31f5a537f1">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a2082f917534e3a8590d5a19b4377a256">nnfftl_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">fpt_set_s_</a>
+</li>
+<li>m
+: <a class="el" href="structnfstf__plan.html#a6d228a85b702490f205c8983c15e33fe">nfstf_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">fgt_plan</a>
+</li>
+<li>M_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a37eb6ac713dbf1205f2dce0fa39107df">nfftf_mv_plan_double</a>
+, <a class="el" href="structnnfftl__plan.html#a74e7fb29427e5a4d9b383ab278f513a2">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a6a75a26e5d6476595bde5b03d6293a0a">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a3823921949eded81bde776f57eba8052">nfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af95027b3922c48e54dc5e5417d3a45e8">nsfftl_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe">nfft_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#ac9fffb187c8a840eb83939ba4d710f13">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a03c2aa160944a42e0f3116e7545ed20f">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6">nfft_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a241e8def5a65484080b01871c12851b3">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a9a1093b920fb4468b59c7120a7e1ceb5">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#aa0175f63a2b2f5c80bb3153008315871">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsftf__plan.html#a5df19929f38064f36893840388ef975e">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed">nfsft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ac7366d2d09a0b3aed5884b50d10ef478">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#aa1b43495afe03e88e419961428769246">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a6fc89775998b5353b0f674b75b3638ae">nfsoftf_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a95e2db75883c6586f31b8db8c8bf8cf8">nfftl_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a33cddd8977c92ba6641a1c4a18318fd6">nfsoftl_plan_</a>
+, <a class="el" href="structnfctf__plan.html#a86276f6249784d5121d83453818709e9">nfctf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">fastsum_plan_</a>
+, <a class="el" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac4ad3000c4c3293f3d86b90a926410a9">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a936082c69e582e36fb51ae452cd08fc3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ae4d5aeae7ea312bf70720bafd4fb3882">nfstl_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ab437c32f06548b3728bcb2b39681acd8">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnnfftf__plan.html#a6908aa62ea014b3b60e047a99f6adb2b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c">nnfft_plan</a>
+</li>
+<li>MEASURE_TIME_t
+: <a class="el" href="structnfftf__plan.html#afb81143dbd42553ed90440afc406c909">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae8cf45feec672cd7e6f42a1b6a091a5c">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a3621b32cd8ea93b2bcb8db6ce40cd5bb">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#acd69baad39feaa27f34c063960b173f0">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2c6b9d81be06f2e557c410310420809f">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a369d8545639fccbf73f9daf7dcb94fe8">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a74e5be807909e0a443ea9b48e0a7da4b">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a47c6a3aba310b4f18d7ba5a7107fc168">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af36dbcf3d4f12bb85ac6c167aabf8768">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ae2870ad5b902cb4724c2ab47e5e012e1">nfsftl_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">fastsum_plan_</a>
+</li>
+<li>mv
+: <a class="el" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a3da97d0d8d896d9da6a95a68a6f65442">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a56e946ecb94fc633a9d518d347725c4c">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a791fe047a3b45cce8049e83d422b8414">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a320424336d0f74f0d24cc67053dea7ca">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a65d97330deb4cd9de78e4b9aa85afa62">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a02395790ff1d9e7ffc2e3fae3b927df0">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#abb0996d6ed2cd627dc28fb7f5c18007a">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a18f9b22f7f221aedc3dabab2cb07e633">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#afa903e9a436fc17da89b08377a6a733e">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a519286afbd99d020738a92e03c320a18">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aaa4fedc5005e075e7f707770384be114">solverf_plan_double</a>
+</li>
+<li>mv1
+: <a class="el" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">fastsum_plan_</a>
+</li>
+<li>mv2
+: <a class="el" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">fastsum_plan_</a>
+</li>
+<li>mv_adjoint
+: <a class="el" href="structnfsftl__plan.html#a162601fc8aa3248af806908e160d3c14">nfsftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a9f8b111e42ef7ba609879d4a6983695d">nfftf_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#acbff2532fc4d66cf92321be33ef6498f">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a3d0e47cf55f04c89523abd46f361ef91">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfsoftf__plan__.html#a858269faf194eca2137b65f2a5a8c0fb">nfsoftf_plan_</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a804a64f2fb25ad91487fbcc186d784e0">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#a3d343b79e00dbb8cd4984143a03ddf53">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a876dda7208fd0634f426c1e5cb04b77f">nfctf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8">nfsoft_plan_</a>
+, <a class="el" href="structnfctl__plan.html#a99191484b327c3283f3aed8c3e9a3d70">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a604a83ef64c291c6f8b23d45f620f2c7">nfstf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a2d189c2b7f8b5bf635cce01354ef253e">mril_inh_3d_plan</a>
+, <a class="el" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0">nfst_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a6259dd5746b911632df1286d0654eabe">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f7123e0975b4a7cd693d01abf117949">nfsoftl_plan_</a>
+, <a class="el" href="structnnfftf__plan.html#adcff4592ce1838e342b92633e9f8de42">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa6098f51f9c69196ca782a1b0f8feeba">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a8b4c8c903e7b24610e2d2e0c9bb62705">nsfftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12">nfsft_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f">nsfft_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#aea23a3331d423e70f2cbbeee71303906">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfstl__plan.html#a1eca782b8267b78a6effc382c0a5b9f4">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af4deec395e0a4650b1e108677b787900">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#aab8ee071a4e254cbf94a03689ed3127f">nfct_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a658b4a71ff29aa1cc2febc66d6c175bd">nsfftl_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a5f31b4b9a03ac8f9a503c1ae42cad758">nfftl_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac765b0a8797a3fd31b58133be9ff280b">mrif_inh_3d_plan</a>
+</li>
+<li>mv_trafo
+: <a class="el" href="structnfftl__plan.html#a0f05caab33b6f473626e74f44356e3fc">nfftl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a417f0b7f48ab77d5af34ed1da9ba95c9">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#adbe7e6be1061160223c10b6567efda40">nfstl_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a4d573c341aae7a4e034944772478658c">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051">nfsft_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#acdbe3a414d9c87baba03db3d873b864c">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a130252f4a197b65416311097880cff4f">nfftf_mv_plan_double</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#a48e28caf604132d02999d1dc0f5dc9a0">nfftf_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a4763b4f8f1b5f574d601289ab3cbcfa8">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aad46757ac44a32dbb04d0e453454acac">nsfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a7a532e28539e1ac2f49413248ae76a67">nfctf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aea4c2210478af70a540da01e0c0a1c7b">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a39b1bdd9a3eacd4ff3b809eeef01f364">nnfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a42f0c32b080677a57f82ccf23d018da2">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f">nfst_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502">nfsoft_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#aff66252bd97fa6d73d7e137d888bb625">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#ab1a7dae6c0f2b18d4eda2e32195bba95">nfsftl_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a7dbc7cd7b733b5850a59f35aa0f959d1">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__plan.html#ab09b1d93f60895791076e1e41241ecb0">nfftf_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a0291622a1f08aff56cc126ca64364d85">nfsoftf_plan_</a>
+, <a class="el" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5">nsfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a5f9802e95bfc2ae69f22e91c1fe47778">nfct_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#aeab94862046b7688470f3f1d78ca927d">nfsoftl_plan_</a>
+, <a class="el" href="structnsfftf__plan.html#ac698248a376958d67a10beecfdc3aa36">nsfftf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a61eec020c68a2b36cff4acb6dd4dcf96">mril_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa960f82c35501acf5237b5ed49f7fe57">nfstf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e">nfft_mv_plan_complex</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x6e.html b/doc/api/html/functions_0x6e.html
new file mode 100644
index 0000000..4fb4754
--- /dev/null
+++ b/doc/api/html/functions_0x6e.html
@@ -0,0 +1,228 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>N
+: <a class="el" href="structnfftf__plan.html#a27caa84ad525683d89b5963defadc98d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#ade6a750c99253ddfe82c08e439094507">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b">nfst_plan</a>
+, <a class="el" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">fpt_set_s_</a>
+, <a class="el" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">fgt_plan</a>
+, <a class="el" href="structnfstl__plan.html#a83b7013eb7ce3b1743ba45a2546a36c0">nfstl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftf__plan.html#a6971ea46e4044daa773f19c8bd8d4a0b">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae">nfft_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfct__plan.html#ad4d0600d8b0ee9d41bff22a7d63e64cf">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aefd2c40e607f75679bb61926881d4488">nnfftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftl__plan.html#a58140f5f6ea4ca1c0305cbcec55437bd">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a9c8ffbb61c7f5ad5d0a5545bdff83270">nfctf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7">nnfft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfct__plan.html#a0ad3d47d659b3641bb90eca6e56f9047">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a6d0bd4de4d2b90c38010bb4b8d77561b">nfctl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfftl__plan.html#a36e045f670b95d68f5c2e04b55a1c220">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a4497138b087187f70d19f107b1c80204">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a7fb433be8689db7816a3667620a294f3">nnfftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstf__plan.html#ade7cdc871c9633a324774001bd809f49">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2">nfst_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftf__plan.html#a09b711da345edffb8a71b5b8a8bca6d0">nfsftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstl__plan.html#a10456ed98cb22787f2469e1d20903c8c">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae849996a09be847a35be6c1ea018d988">nnfftf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfstf__plan.html#a3c13e4fbc7dba10012ac853e2cde12d0">nfstf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403">nfsft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad8d9bc5c5ae9f1ee6c813839ff831d97">nnfftl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftl__plan.html#a8740f26f76947fcc07a636002217a8db">nfsftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">fastsum_plan_</a>
+</li>
+<li>N1
+: <a class="el" href="structnnfftf__plan.html#a9f6a5274cee5803505df5ad65d4c12fd">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a693c5d648b1781dce21d24636aac6554">nnfftl_plan</a>
+</li>
+<li>N_MAX
+: <a class="el" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">nfsft_wisdom</a>
+</li>
+<li>N_total
+: <a class="el" href="structnnfftl__plan.html#a0e0827be03d503291f4a6d76c7b690d7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2">nnfft_plan</a>
+, <a class="el" href="structnnfftf__plan.html#afd4cb1ff03f227c4e9e1dd9da21ec34e">nnfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505">nsfft_plan</a>
+, <a class="el" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a090c82bf91f18bc68a389c06fb347cec">nfsftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac31afd2bc4a0fc94cd9ec08e302f84ac">nfctl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa3a702dbaed1e34d090e23b75c9949d6">nfsoftf_plan_</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#afad39dcd7d77c81247bcf5e4abc1cdaa">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a397e113cdbedc1e964657131c9a9dea3">nfsoftl_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a63a371e62727c804a195cf2315b79a41">nfftl_mv_plan_double</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">nfftf_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__complex.html#a65ce9742c15bad2711e8f8151bbf941c">nfftf_mv_plan_complex</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">nfftl_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a1df474111c1d61261d53455e05bc6c63">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#a65855ec1dec6f17eb46d6762ad6ff942">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a469c0077659dda97651e075da143a398">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__plan.html#a747b6aee3ae47ad66391027bc13789af">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a618b4315972d4ef612c772649d470ff9">nfctf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a4114df78a52f5e4a1a12a13678a9cb6c">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">mril_inh_3d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a7d51e6be67c5f2bc4d1a996e10228258">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa0e8f48c39f40e781da203659ec018ab">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#afe49ebe4fbbb3bd90b12e939c06adfab">nsfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a87f57bdfd9ba4415370ec796329cc1de">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#aea7fa284fa9aaa4e264c9c07844b5442">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed">nfst_plan</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">nfft_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e">nfsoft_plan_</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a90ee6582e535312ac761e4e6fbaad0c0">nfsftf_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12">mri_inh_3d_plan</a>
+</li>
+<li>nfct_flags
+: <a class="el" href="structnfctl__plan.html#a292db653f04805f907737a480f681888">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a484df328b87ae06b6c47b03298e18dbd">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf">nfct_plan</a>
+</li>
+<li>nfft_flags
+: <a class="el" href="structnfftl__plan.html#a375f14a65c5686803270dbb3cfd1c371">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d">nfft_plan</a>
+, <a class="el" href="structnfftf__plan.html#adaaa66e5b89d9f65ce94b56617574518">nfftf_plan</a>
+</li>
+<li>nfst_flags
+: <a class="el" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a15bb194b8a4fe39aca1b5be9f38d7175">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa23ef32254d98b76dfadbe7fa439f8c3">nfstf_plan</a>
+</li>
+<li>nnfft_flags
+: <a class="el" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a1a9bf1751caf842fb44f70a4cbab8744">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acebd9e667d51a5293f977642f031724e">nnfftf_plan</a>
+</li>
+<li>nplan1
+: <a class="el" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">fgt_plan</a>
+</li>
+<li>nplan2
+: <a class="el" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">fgt_plan</a>
+</li>
+<li>Ns
+: <a class="el" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x70.html b/doc/api/html/functions_0x70.html
new file mode 100644
index 0000000..1e049da
--- /dev/null
+++ b/doc/api/html/functions_0x70.html
@@ -0,0 +1,167 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">taylor_plan</a>
+, <a class="el" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">fastsum_plan_</a>
+</li>
+<li>p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#ac62464d925e739f79c28059cd1e59faa">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa7833544d06eb2d71042da5fa06b9c5c">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a803178524d842ae2944fb5f3ce9d4939">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6987fb320cd6798faabe9dfd92a494f2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677">solver_plan_double</a>
+</li>
+<li>p_iter
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#ade134a86a60d2538595acc2fafb83e41">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6e1fc4f4d7adf8aa89cde17cf002f0f6">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#afa0571b6b2c75979bc6a8ea75dc13efc">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6c81df2130d05bcbbcd6646cd27b671e">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b6ba348be2011c1cfecdb9f16829fd">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74ee726c5c0916fde59e77ca51d319eb">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aafe496b74fca5e5d96ce258bb3da1ffc">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>p_nfft
+: <a class="el" href="structnfsoftf__plan__.html#a1be8436a257f63ab4c27441bf714671d">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ac1230a81665ed7aa68cb7b4bc3a0c0c1">nfsoftl_plan_</a>
+</li>
+<li>plan_nfft
+: <a class="el" href="structnfsftf__plan.html#a87927611482f2fb3421ea2279993f94a">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a2c016b15b6b33c44b8218c43619ef784">nfsftl_plan</a>
+</li>
+<li>plans_dct2
+: <a class="el" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">fpt_set_s_</a>
+</li>
+<li>plans_dct3
+: <a class="el" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">fpt_set_s_</a>
+</li>
+<li>pre_cexp
+: <a class="el" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">fgt_plan</a>
+</li>
+<li>pre_K
+: <a class="el" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">fastsum_plan_</a>
+</li>
+<li>psi
+: <a class="el" href="structnfctl__plan.html#a59712f0b5712ba9020540b7bf355caea">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a96d6ede1036cae0a4df7fbf7ba7b8034">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3fb3fd27fa2c3c907c4f1e05a183598d">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a10747f86b86f7fa64539b46914344877">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ad3886151e655110a1c5ba71a66439e2b">nfct_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a8644e94ccefb0b3001442b4df86dae5d">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a84402b4c947d57abef20e5f2db9110e3">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a33955562ecf9b48f4283f869c77f96ff">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a748631060895d5106d11cdf4fce3ee60">nfctf_plan</a>
+</li>
+<li>psi_index_f
+: <a class="el" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a46d8f0fefc63d3ba6f1811f41bc9a7d8">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad20fa3e6bdb829247c3585639a0b086d">nfstf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2ec8c4542c9fafbaf90b469ab8d06d59">nfctl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a713765bd7f9b488ac995de023de2ead1">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#aa33238f59c2282eea4b81d8ecbba1417">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a59633568fd7d1cb01df5f49f08ad352c">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a3788434fa045ecd49dd89d116bb40c47">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#abf4204a1a31afd35d490ca4ef42bd596">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#ac0073e7c6389e9141d555bf58e2d0b59">nfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d">nnfft_plan</a>
+</li>
+<li>psi_index_g
+: <a class="el" href="structnnfftl__plan.html#a4b53c60fb307d01e01931ef812974a3c">nnfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#adcd209b5cbbfae40c5490a1141b7acda">nfct_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232">nnfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a60f4fbcf2fb3a48a037e5cda4608f535">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#a3ece0ce2dd8ad2e41852ac59df3ad481">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a04f8c8d2075057efa3b41381705084c6">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2e593f732ad26f9d681797a85a7293cf">nfctl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aa6d0ce899b41da6981f6863fc242559d">nnfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a773fbd9160ac14e6972a4b5be1b5113d">nfstl_plan</a>
+, <a class="el" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811">nfst_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad3ff1d5c721f0ec4e81aa341b29abc15">nfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x72.html b/doc/api/html/functions_0x72.html
new file mode 100644
index 0000000..8f4f2a5
--- /dev/null
+++ b/doc/api/html/functions_0x72.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r_act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a844f94caf050adea11133a52dcbaccdc">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a0a1b5e59c9ff83bc7b2d2894f96edd23">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ad40799f013c6b35165c2bc76eb7cb32e">nsfftl_plan</a>
+</li>
+<li>r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a781b1438bf0c8d47f51b30551f982426">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4739f3543d8e4e7af745c017a163516f">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a6088e9949fa966d839e8feadfb34596e">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a314c60168395a677ea88ff67dcaa2ec9">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acbea7a40d34bbca7688da41378140926">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3bb77b67c3779716d767e76b8661efbc">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#abd086bc019b356986e38f3db8039051f">infst_adjoint_plan</a>
+</li>
+<li>r_iter
+: <a class="el" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aec8fcaf36c7ce234e76970dc4b4ec9c9">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a4ca8ff73e59386ea3d5003c1ad27459d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a9715db1a24435d9dd2bc76371d92174e">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6261a160be099d721856fab16f31cf22">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x73.html b/doc/api/html/functions_0x73.html
new file mode 100644
index 0000000..8c91016
--- /dev/null
+++ b/doc/api/html/functions_0x73.html
@@ -0,0 +1,144 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>set
+: <a class="el" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">nfsft_wisdom</a>
+</li>
+<li>set_nfft_plan_1d
+: <a class="el" href="structnsfftf__plan.html#aaadc0908c69e235bc60ec3c7b28bca47">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a89a23c26f73280c5945e62f8966195fb">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc">nsfft_plan</a>
+</li>
+<li>set_nfft_plan_2d
+: <a class="el" href="structnsfftf__plan.html#a4ee3a7ef05c4fdbc161d24db51be3122">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa7ae0c8a9b2f404bd1f8ce4820d7cf43">nsfftl_plan</a>
+</li>
+<li>sigma
+: <a class="el" href="structnfftf__plan.html#a20d669812b6acf9a8bda34cb659d61dd">nfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3c50de01911ed86a66d15ecd79874e21">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a858114a52835ef9cae070f6017625a4c">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a">nfft_plan</a>
+, <a class="el" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a899c16c2e59f2566a9f17d84f64af952">nnfftl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a149fdaed10fafdb3bf414110ad233b7c">nfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ab7b68bdae0872917b559577ac2f53402">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954">nsfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acfc4ccc79c6fa50199500a790cb833b2">nfctf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa55c79623980b8334e9fcb50fa55ecd3">nsfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a56c9f580f79fb7605ae21bcbb729a8b9">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a629ae83677e311095d4c24ad4826e2ab">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a8d8b3093a73c09aac44cd8f55708ef27">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1">nfst_plan</a>
+</li>
+<li>size_psi
+: <a class="el" href="structnnfftf__plan.html#a67aae8bda525717c1628aa53fca9b7de">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aed13a1f152cb6febf2ce643c204d8b9a">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#af2992b9cb57809fb90a68dbaea36d79a">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#a975ebfbce1679c3ad3d8cc06e81c5645">nfstl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a2a01c089b030159c77a9bdcb46d1b183">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ab03d9f17b3fb46eb14439745e8f7994b">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a1b8cf9260caf345c8ecb5e6de726387b">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a4c9f0923fcf290197cee1550dc9a3665">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad">nfst_plan</a>
+</li>
+<li>spline_coeffs
+: <a class="el" href="structnfstl__plan.html#a7abc2fedc757d9b2b5f985377f99bfe7">nfstl_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac3e3c4b14a5227a96b8627faf6933652">nnfft_plan</a>
+, <a class="el" href="structnfstf__plan.html#a64c5addda16e3d789184af183900db21">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a65c65de370e29b24ba0da097d20ee262">nfftf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acb221c7694859d0828bcc1f56154cd69">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a3aaf44c4f0769644075d9fc5ed60afa0">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a971f190366e40c729899ff71d2a60682">nfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#a53242b3a71b8997bdcd173777146c427">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a38de3cc7a337907a01ae2701ea335d75">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a25a3208574495231141c9c407658f0cf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a23bec4401a652efc87ee6781061c9363">nfst_plan</a>
+, <a class="el" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">window_funct_plan_</a>
+, <a class="el" href="structnnfftl__plan.html#a8f364097c04b46c203a4883af90b9eb0">nnfftl_plan</a>
+</li>
+<li>stable
+: <a class="el" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">fpt_step_</a>
+</li>
+<li>steps
+: <a class="el" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x74.html b/doc/api/html/functions_0x74.html
new file mode 100644
index 0000000..edf7dbf
--- /dev/null
+++ b/doc/api/html/functions_0x74.html
@@ -0,0 +1,99 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>t
+: <a class="el" href="structnfsftf__plan.html#ad5d65a033c50d321c6affc677e4f5226">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a59d80818cb9c0dcaccc477954720772c">nfsft_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a21641301ce6613d250e6d683c3fad9c2">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ab0b32ee063950ce38adc6b0e5e40af02">nfsoft_plan_</a>
+, <a class="el" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">fpt_set_s_</a>
+, <a class="el" href="structnfsoftl__plan__.html#acd18e8a2b89aacd8034b49033449f979">nfsoftl_plan_</a>
+, <a class="el" href="structnfsftl__plan.html#af5ba15c85f29ea8ba05a03c2f2fc2611">nfsftl_plan</a>
+</li>
+<li>T_MAX
+: <a class="el" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">nfsft_wisdom</a>
+</li>
+<li>threshold
+: <a class="el" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">nfsft_wisdom</a>
+</li>
+<li>ts
+: <a class="el" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x76.html b/doc/api/html/functions_0x76.html
new file mode 100644
index 0000000..ff13be9
--- /dev/null
+++ b/doc/api/html/functions_0x76.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>v
+: <a class="el" href="structnnfftf__plan.html#a62822fb1596e8eccd6d2edf62096323b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a224d2ba2e9ba30535b394b1375ff0a88">nnfftl_plan</a>
+</li>
+<li>v_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#ae1911bb7b195a6cdc51fc2c9dd5663d5">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5078575d0bf816ed68ce3c762f578887">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#af253d4b292aa7db655ca51dfdf598bf9">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a8f64e1af7dfd3cd41377d79113eb51e3">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ad04d2974dedefdc45e176e5ea5399aab">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af025d6f664c1ccdd552f61e68d58ec97">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a10da470b963e2d631f48e8eb81bad94e">infst_adjoint_plan</a>
+</li>
+<li>v_iter
+: <a class="el" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a79c7f5b84aa9feddeafbcb9bde26de17">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a7e352320832a737577bd9ebe689a50bd">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab469e8fc7e7bc6c4068794cddf69ce26">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6ee0cddd36b16d6b8cc09baf6db05cf9">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x77.html b/doc/api/html/functions_0x77.html
new file mode 100644
index 0000000..9518549
--- /dev/null
+++ b/doc/api/html/functions_0x77.html
@@ -0,0 +1,116 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li class="current"><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="structsolverf__plan__complex.html#a91f7e03dc8509952827333cc61ca9aa4">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a63c0a528c6e9989c7b0fee6c02d1fbff">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500">solver_plan_double</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a67fabb54885946acaaad95a5a472b004">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#add093d84bfb7f6f5d5b5512e000efc68">infct_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#a547382238a57e96f316bac4dd291af0d">solverl_plan_complex</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a5b64034f7c01c3ce0a7ab02fd8477bdc">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a20565dbd14d036eb348ca0276a4f411c">innfft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0f45b9d16576986d6d6d9605f6891f3d">solverl_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a552e0603ee92be729e052bb6028a1fb4">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa4cd6ea3040339a39047978a7c1f1c9d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a9738a7ae6eb6e9ac59018d7fe0b67b32">infsft_adjoint_plan</a>
+</li>
+<li>w_hat
+: <a class="el" href="structinfst__adjoint__plan.html#a00f860d5af6ada0c99a252b5d7548f5b">infst_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ab1cada21b9034edfd3a1b2f77252f3be">solverf_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#aece5ec597b25ea28c945d2559316fad8">solverf_plan_complex</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a76ad0c6eace967391553fd4939e70662">infft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472">solver_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aeb6a8106c1347dc7decf42e4520f70ab">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa53e43e9cd65db3ba08ed275cb62d456">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad4d107f6ef642a2f8173d05d73bde405">solverl_plan_complex</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0545064b15a22a5a3ae285e6aded5f80">innfft_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__double.html#aaa9d07d5f3ec0f7f7f0a6193927e1a94">solverl_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af14d4eb49aee59948ea57d30dbf4d628">infct_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a5830886454142e4825347a703f286c0a">infsft_adjoint_plan</a>
+</li>
+<li>wig_coeffs
+: <a class="el" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a452e16848e81fd0b072d4e3347345455">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a1d6f6e5b95a8f0ff13add5c23b382fb9">nfsoftf_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x78.html b/doc/api/html/functions_0x78.html
new file mode 100644
index 0000000..4624966
--- /dev/null
+++ b/doc/api/html/functions_0x78.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li class="current"><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="structnfftf__plan.html#a4bcaa307f32321459187f8633a946a7e">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acf91ba20ce671a5d4c971465fbd33b03">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8">nfst_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a072fa8dcd38c95bec64c8e82af71afa7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383">nfsoft_plan_</a>
+, <a class="el" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">nfstl_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">nfsoftl_plan_</a>
+, <a class="el" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae3c9275b5cafc753e2762406ba422378">nnfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">fastsum_plan_</a>
+, <a class="el" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">nfftl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">nfsftl_plan</a>
+, <a class="el" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90">nfsft_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a110084c9a750d175c70caa7a24d69ae7">nfsftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">nnfftl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad0d1772e5947f4395cbfa0fc2ed39018">nfstf_plan</a>
+</li>
+<li>x_021
+: <a class="el" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a62e8e58fe1b84f82ac85301a091af3fa">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a0c015fd2deca4e70105f0c68a6a69586">nsfftf_plan</a>
+</li>
+<li>x_transposed
+: <a class="el" href="structnsfftf__plan.html#a4d7e0553a450636fc65816e4977914bd">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6">nsfft_plan</a>
+</li>
+<li>xc
+: <a class="el" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">fpt_set_s_</a>
+</li>
+<li>xcvecs
+: <a class="el" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x79.html b/doc/api/html/functions_0x79.html
new file mode 100644
index 0000000..0b644f6
--- /dev/null
+++ b/doc/api/html/functions_0x79.html
@@ -0,0 +1,100 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li class="current"><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="structsolverf__plan__complex.html#a522b2ad5b572dce6d786b26e221a14d6">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a31aa1269dccbcfad158f31c276b0399e">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18">solver_plan_double</a>
+, <a class="el" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">fastsum_plan_</a>
+, <a class="el" href="structsolverl__plan__complex.html#afbcb92106789225f6d54be521797b97f">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a70307c6e59216c27cb4d78e7f172ab8c">solverl_plan_double</a>
+, <a class="el" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">fgt_plan</a>
+</li>
+<li>y_hat
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a968843771644077babbdd687b6bbdb5d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#ab91fa7e8fa5668148a4cba86a97e415b">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a4a98ec178d9d74dab4e617beebc419a6">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#acd0758c4ed1c79b6d2f2eed33effb539">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aaed8db541ee689c5ec82bb8e18c4c8d1">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ac21eced87cb3a6eafd0d22f27e0eac03">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a52d2b0b0d208e673eada45dff01e9c13">infst_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_0x7a.html b/doc/api/html/functions_0x7a.html
new file mode 100644
index 0000000..3affec2
--- /dev/null
+++ b/doc/api/html/functions_0x7a.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions.html#index__"><span>_</span></a></li>
+      <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+      <li class="current"><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a4c8dbe5d5a4d910b93ae7f84215482c8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aeee7fa961ebdf43e0caf1108e6b5ada7">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#abe468b3b489a8707538f083713962fcc">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">solverl_plan_double</a>
+</li>
+<li>z_iter
+: <a class="el" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">infft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">innfft_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_func.html b/doc/api/html/functions_func.html
new file mode 100644
index 0000000..862ddf9
--- /dev/null
+++ b/doc/api/html/functions_func.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Functions
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>FFTW_MANGLE_DOUBLE()
+: <a class="el" href="structnfft__plan.html#a2310e54f3049b94d2bf08b67f689280c">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a5ae19fdb6ea93d515109229f419c22df">nfct_plan</a>
+, <a class="el" href="structnsfft__plan.html#a937d2895eeeaa8aabb92359232498693">nsfft_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3c18cc4dec9293352c508e9999ebf05">nfst_plan</a>
+, <a class="el" href="structnfct__plan.html#af736d9e6e59e9a91276a48a50979fedb">nfct_plan</a>
+, <a class="el" href="structnfst__plan.html#abeeca1317cee53206b64c79f3de094c2">nfst_plan</a>
+, <a class="el" href="structnsfft__plan.html#a979134567e97bfffbc022b8267f98f6d">nsfft_plan</a>
+</li>
+<li>FFTW_MANGLE_FLOAT()
+: <a class="el" href="structnsfftf__plan.html#a5ceb97a548f5a438ad46a12133b1b5e8">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a17fea72bdd4f446528716400f4522dac">nfftf_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ac0a9dbecfd535a1c7b2c0cfec5b79925">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#ae2ffec96887c5407fb31063a0139f678">nfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#a18d7721bf6d8ccbc5bb20e2dad30f9a3">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad4f44281f0c352fc630442cb40597983">nfstf_plan</a>
+</li>
+<li>FFTW_MANGLE_LONG_DOUBLE()
+: <a class="el" href="structnfstl__plan.html#a2c07f20560a3969129916e3d30239227">nfstl_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a9a426f13a97f82a480413cba913b7f2b">nsfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ad0a55579cc5f04b0af4cc28abd445083">nfctl_plan</a>
+, <a class="el" href="structnfftl__plan.html#ab17581f82946cc39584acd6b059b7809">nfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a6285132e89913685bc2f7366fd79e769">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a2e9e81a72c786bd7ed4eef099a5f8a5e">nfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars.html b/doc/api/html/functions_vars.html
new file mode 100644
index 0000000..3d2ae19
--- /dev/null
+++ b/doc/api/html/functions_vars.html
@@ -0,0 +1,90 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_alpha
+: <a class="el" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">fpt_data_</a>
+</li>
+<li>_beta
+: <a class="el" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">fpt_data_</a>
+</li>
+<li>_gamma
+: <a class="el" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x61.html b/doc/api/html/functions_vars_0x61.html
new file mode 100644
index 0000000..5096185
--- /dev/null
+++ b/doc/api/html/functions_vars_0x61.html
@@ -0,0 +1,142 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li class="current"><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>a
+: <a class="el" href="structnnfftf__plan.html#ab0a39deb647f2a862caf5a6cfaf4939b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a41260d5c377bdd918b4952b4730b6908">nnfftl_plan</a>
+</li>
+<li>a22
+: <a class="el" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">fpt_step_</a>
+</li>
+<li>act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a505021fefe68002ba73c78815166a73c">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eeabbe1dbef7ccf1c2b8c683a4b5dc">nsfftl_plan</a>
+</li>
+<li>Ad
+: <a class="el" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">fastsum_plan_</a>
+</li>
+<li>Add
+: <a class="el" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">fastsum_plan_</a>
+</li>
+<li>alpha
+: <a class="el" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">fpt_data_</a>
+, <a class="el" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">nfsft_wisdom</a>
+, <a class="el" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">fastsum_plan_</a>
+</li>
+<li>alpha_0
+: <a class="el" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">fpt_data_</a>
+</li>
+<li>alpha_iter
+: <a class="el" href="structsolverf__plan__double.html#ae1d25f3ba1b23f7d5953991495c91ce3">solverf_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6e7a960d8661f6c459ebac7085e2587f">infct_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad149f66fa5dde187b3ef7860e593de01">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a7ea0b68ab2ccfe01df7a3747a5fed15a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#aad358c99ea10d70c4984bf9898820865">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a9abf5757d92159acfd73366a4c4df7be">infft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#ae202e8af2161d1d64bb32e49fc16f5f0">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae6e228dc1df00e0b3de8873f0de12675">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#aef3f9b375d7e43fbcbea60380c5e9f34">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a740c87ac77f68578613d58e569deedb2">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#ac2ce57e2bfbc31f9262e5ce93562d899">solverf_plan_complex</a>
+</li>
+<li>alphaN
+: <a class="el" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">fpt_data_</a>
+</li>
+<li>aN1
+: <a class="el" href="structnnfftf__plan.html#a405914d88ec36f1bf8438ebfed59f294">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#af262dc79891366e77bb15789aa24f2cd">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb">nnfft_plan</a>
+</li>
+<li>aN1_total
+: <a class="el" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa791fcca6424d42640020e178e8319e7">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a4bfc7abd18935616365f7925b2994e38">nnfftf_plan</a>
+</li>
+<li>aux
+: <a class="el" href="structnfsoftf__plan__.html#a5f7c39509a2403a9bc17824be7a3c3a9">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ae669348fbbb187c8c521f6a89c8f3720">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x62.html b/doc/api/html/functions_vars_0x62.html
new file mode 100644
index 0000000..7b67780
--- /dev/null
+++ b/doc/api/html/functions_vars_0x62.html
@@ -0,0 +1,122 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>b
+: <a class="el" href="structnfftf__plan.html#a3ede2fe9c94e00ec59150ba2971facb2">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a6eb955f63212f63c0ac26894f8355caf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a49927bec2aa96ab8596740011fabb914">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a8378f952b6e05cd58225877eee84f2e7">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#af1c2c2fe35f5b574a39109bb7b176270">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#adbd7faf4a853905d26899885e5ca3b38">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa91e909254c1beb83e2e971df50b96ca">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a80c548cbcc4defbac2b544602a5baa85">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a01287f3f68aff7e5d7ce35d3163021e2">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ada085ec8f6099bfcaa7a193745689c9a">nnfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">fgt_plan</a>
+, <a class="el" href="structnfstf__plan.html#a2ca69cf1b6dea39e81cba93d0d1667d8">nfstf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">fastsum_plan_</a>
+</li>
+<li>beta
+: <a class="el" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">fpt_data_</a>
+</li>
+<li>beta_0
+: <a class="el" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">fpt_data_</a>
+</li>
+<li>beta_iter
+: <a class="el" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#a1c60e5fd15da3722f9b8213d1634c86a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a7714746a66fd3657bd247062c9c5cb24">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a0aa7b8faeab03acb6011b673882282ea">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a444f54274b78ec9162683d2cc9cb3160">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ac622efae9216d5d4335118084c7fcbfa">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#abd007d004fedd5bb4b9eb919d8e928d8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a4b53103abc562b5c603b4b656d1992fa">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ab0f9266a50fc4a3acda9659b2c0920e3">solverl_plan_complex</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3e6ea22841cd010652beb76f554bdf92">infct_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a09f8c30247659fc918d48521ba5ed5e8">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a7f3271035bca7b994475e565ab1ffb22">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>betaN
+: <a class="el" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x63.html b/doc/api/html/functions_vars_0x63.html
new file mode 100644
index 0000000..349461d
--- /dev/null
+++ b/doc/api/html/functions_vars_0x63.html
@@ -0,0 +1,105 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c_phi_inv
+: <a class="el" href="structnfftf__plan.html#aa71f70b332bbb9868caad1db9f6cda02">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a38d2c1dec96ad6d632133bc1dcbf82cb">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a7fdb409271e18f5dec1ac622af10d32a">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#aa217dda883fc3533b95bf6ab6ccff888">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a89b1d6ef566671d479eaaf4e50f666cb">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ab9b9f0d173b9526d60c1ae8fbec1e1f7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#afdcd5a1259a4fb7e7271efe30a207265">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2b69489da0118e06cba24db6d73ea934">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9d59ca4338fe39f2e22f4e5d3155deba">nfstf_plan</a>
+</li>
+<li>center_nfft_plan
+: <a class="el" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e">nsfft_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa01b9e613b9847fa4cc6278fcb3ae660">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af26a51757ddb28c4bcb37a0426e83fc1">nsfftl_plan</a>
+</li>
+<li>cheby
+: <a class="el" href="structnfsoftf__plan__.html#a73e75b0a9f8ceebffe6923c90c04c312">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a681110b5c15effe7ef2781249e049119">nfsoftl_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x64.html b/doc/api/html/functions_vars_0x64.html
new file mode 100644
index 0000000..b170656
--- /dev/null
+++ b/doc/api/html/functions_vars_0x64.html
@@ -0,0 +1,212 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>d
+: <a class="el" href="structnfftf__plan.html#a35ff58e4549b1c5292fd03cb215debac">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a1129b984a15339cca4fbbbc2190d43af">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8">nfst_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a66ac609113d5f8debb056f3c62f6b14b">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae6d3ce66c1d6d2fd0f507d83df91f549">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4c139d72e93078b54f4240ecd7f6454f">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#aa42a9c638dec4cfa622f2e3f7e7c1dc3">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a14dac9d67ed25ff370516f66668a8ec6">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a161e392c8404d11f3237350b23e8c041">nsfftf_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa792b04cd0fa4f09175773aaa48f6a69">nfstf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aca82cd28238f0c1a5171eabd1d301f90">nsfftl_plan</a>
+</li>
+<li>deltax0
+: <a class="el" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">taylor_plan</a>
+</li>
+<li>direct_plan
+: <a class="el" href="structnnfftf__plan.html#a15fe2e694c1b999008600c1f4a5dc2be">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa59e9ff1ad2fe1d90e077451831c6596">nnfftl_plan</a>
+</li>
+<li>dot_p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a3d2a5ea538a77dc4f2da9b53beab9c01">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a2bf2a21b09e47a883f9665b4ec38f3c2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a4941cd9e60935f7e39a0c86a52202c02">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a2f43c87a598dff5b6e87960a07864148">solverl_plan_double</a>
+</li>
+<li>dot_p_iter
+: <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a00c75acfb362339a30d2809520fcd775">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a65805c60e7d3a18d9a8952da80286032">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a108504616c4e19b53638a80710f9308c">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a2ddddb18e229f9d2d4b9eb11c36d0529">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a50526d4b81b2dd8cf90e82ad162af3c5">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a6dfb17d6feade963b31c16e6278aa6ee">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a3d20a53eb3c0158cc401d7b0d640da07">innfft_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a90e95de22380d88f23720ffca653edeb">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#af3de3b55c6ddf2e27ed9fbe7ef164b04">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#adfc3485017bb92e57c229dc7f81e438b">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a3dfbd628846af0683c8fc263f8cf6418">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#aad7bfd0f7561ec252b26b1d183622f12">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a52eec6bb5ee2ae209ed90d44739c8769">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af456205ec418161fe20de523e423bb51">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter_old
+: <a class="el" href="structinfsft__adjoint__plan.html#a228a2a746f7b7958efb3c4a4ef28e6ce">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a38e5e1e241a0a4a54e83266223725ab6">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a98056f05d5a45569899df80b040b9872">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#ae8dfd86274f0e3bba8c01730449d0474">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0a0b243360667886af63d1ac26408f74">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a846d92d450d33e64996d28c2054e3181">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acce4b5401db74c6e9896a78eccc9ca1e">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_iter
+: <a class="el" href="structsolverf__plan__complex.html#a1bb6290598f2f4f1452a2de2c27f54af">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ae52e93514983b50204d70f660e720e04">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa2d90b37bc2a2ae2f9d0c90c9431abf1">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab12b510e093f8ccfaa4c1e51b6cd31c1">solverl_plan_double</a>
+</li>
+<li>dot_r_iter_old
+: <a class="el" href="structsolverf__plan__double.html#a2ee1d6b53c866d65aaa948afcbdd871e">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#afa3e321968bd1773368cebe1339add7c">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a861d76266b51f96c015ed6e33505978d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a6d564c417ab5b11a306e489df80f4e1e">solverl_plan_complex</a>
+</li>
+<li>dot_v_hat_iter
+: <a class="el" href="structinfst__adjoint__plan.html#ab4e8f85dfe25ba2b90f86d7d39362e5c">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5d9a12eacf094e7f9e771add0a3874d5">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aed3f646cabd7b8ab1a480d7607ea45f3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae251b00724c42f9c0f906e823c9e17f8">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a990b893dd142cbc3ade6436bdd603e59">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a1a005f3e97b207a1d42cbc8e2ad3a5e1">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ac1b772ccfa72ce8e522298aeef3b1e1b">infct_adjoint_plan</a>
+</li>
+<li>dot_v_iter
+: <a class="el" href="structsolverf__plan__double.html#aaeae6a2f28ba0ded31baca1aa8c36431">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a46f2243aac9e8e4689ab7f06914d3f97">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a849c4c1c131a333885e581fec5a2dac0">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a14f62c3118e3c1c7a92dd9bf8877250c">solverl_plan_complex</a>
+</li>
+<li>dot_z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#adeec40c2b8450cd7486f8524c6dcc3d4">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#aefacac40db7773101ce75ba8247119b7">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ae487ec619578f4f6d4876d7bc059f22a">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a845482517a34f22d7eb39bf1747e5dd6">solverf_plan_double</a>
+</li>
+<li>dot_z_hat_iter_old
+: <a class="el" href="structsolverf__plan__double.html#aa9672016211508805091ab645b489bbf">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#af4efa34efc92f873c771df52d423f39e">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a71e2482ed0eb34229fb166d6821d1a03">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#aa991891a7df826b77fac977581f9077c">solverl_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee">solver_plan_complex</a>
+</li>
+<li>dot_z_iter
+: <a class="el" href="structinnfft__adjoint__plan.html#aae72bba8cc1a211c1b3931c969f95a85">innfft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a6cca862303d84903e408f5a2ea02aa9c">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a2309d1161fdf96711f3251e41a65eef0">infst_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ad854541f2e09bc978461fff1c323b2a5">infsft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af91db19db24ca1c648d97ea516367f94">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ac3ca8cbbcd9958d69b15b4696e14a2e3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ab848ecc31c17b9cd639e9834ee56816d">infct_adjoint_plan</a>
+</li>
+<li>dot_z_iter_old
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a794d80ffe20e25a4d69340d925d8624c">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#aa78f22f1c5c917f665b2f1af3e7df191">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a9bdd6b4dfcb1b22bd010444ef34b5903">infst_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad2417d37a566a0d26dea57f6f875ca12">infct_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a92ceaf9529a44c28fd3b6d9d63c0c13f">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a669c48fd77d0d04bf0adc4ebedbd699f">innfft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a681a3587b2e42a24f03bac812eb7a60e">infsft_adjoint_plan</a>
+</li>
+<li>dpt
+: <a class="el" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x65.html b/doc/api/html/functions_vars_0x65.html
new file mode 100644
index 0000000..fd16e48
--- /dev/null
+++ b/doc/api/html/functions_vars_0x65.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eps_B
+: <a class="el" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">fastsum_plan_</a>
+</li>
+<li>eps_I
+: <a class="el" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">fastsum_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x66.html b/doc/api/html/functions_vars_0x66.html
new file mode 100644
index 0000000..a20f920
--- /dev/null
+++ b/doc/api/html/functions_vars_0x66.html
@@ -0,0 +1,214 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>f
+: <a class="el" href="structnfftf__mv__plan__complex.html#ab3a2f060f60eb88cd268bc1bec2e5310">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a0b25cac2771ce5e3048ddc1b708e9005">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ae6c4a0204a54f2a37a0acf2b3f5a0c0c">nfftl_mv_plan_double</a>
+, <a class="el" href="structnnfftf__plan.html#a458403c21a1083ede0d84a6d25c8cc8c">nnfftf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a62073b403c90aa2b527d5f62f190112e">nfsoftl_plan_</a>
+, <a class="el" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb">nnfft_plan</a>
+, <a class="el" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">fastsum_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a53b53a1222f4acf29c778b933c9f130e">nfftl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a6aaa7904dbee73679d86060f1842a04e">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa2cda7d4bb129ad3dfd6b89682c28cd6">nsfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e">nfft_mv_plan_double</a>
+, <a class="el" href="structnfctf__plan.html#a5c695490725fbd63787fb76548de2908">nfctf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ada472d5a0fb2afc32b4d1683c98185f6">nsfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd">nfct_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a3ab01f8b5f1b1368dbf3d7715ce46997">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#aa762bd3f11d1558e792ff34dc710bcb3">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfftf__plan.html#a1c2e419705d6254801134bffe0695ae1">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5">nfft_plan</a>
+, <a class="el" href="structnfctl__plan.html#ae09e0a759e136ad020a97e6c76efbb30">nfctl_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385">mri_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#a178dae9cc4b5869ef69fd148efe14f93">nfstf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a3e2fef5b1bb862347511209994235597">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#adb03497106fd0a995b70010f9cd9684b">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#adb5c2e9ba052f02fec78e550413aacfa">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931">nfst_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a7cfd191a4353a736bf9045c7e1d46f70">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df">nfsft_plan</a>
+, <a class="el" href="structnfstl__plan.html#ad4f7ff9f286c0203712d5f16b21e9e4e">nfstl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ad27b30233039fea75a9e1bc885324f3d">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a165dc6360c20f9eb19a55872cc29455a">nfsoftf_plan_</a>
+</li>
+<li>f_hat
+: <a class="el" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab9243951baccdf59de326cada1c08853">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa6990fedf1965a967f3f718dd373f543">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ab280522456fe4f49ccb91d4aa195702d">nfsoftl_plan_</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ad55a895ef394e9b74db36d028656b382">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a109229f89032f01e4b2bece93297189c">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#aa967453b5ae5ba9e5b2056c884d2cda5">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#ae4b3786df2416012cf16d7ed4c097791">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#add804289931e55388070ee495c3e5072">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#ad5cf4ad0369bdaf07f6acd801e6b9e5e">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a33bae90d163b1d848efc2c656bac6839">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#aede4fbbe9a7b666d5d5fbd62e62bf103">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ab57019bf0a7274b5a6f401fe2f6bcf2b">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#aa0a56037700b7a3d428c77e353dc209e">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a068de2b177ffaad5b0091b0ecd2ca211">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b">nnfft_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a840547e30414a41c3751e2b418f76312">nfsftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a97bc689ffe1f4c8eb99ee43cf408c662">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a423d4a1555477e49a7cb3c26a4a5dfd1">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a93d9d361d56e03f44bc6a9d4265b9f43">nsfftl_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a18fb340e9ead654552e45033c81ac637">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac644cb0bbceb7ea8634ea94758da405d">mrif_inh_3d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50">mri_inh_3d_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a70247e89a002d0e7b5c66d1e87b33645">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#ae1f94471fa54c0a172ede3345d0a9a9c">mril_inh_3d_plan</a>
+</li>
+<li>f_hat_intern
+: <a class="el" href="structnfsftf__plan.html#aa0a6fb494d6378f656c83f191cd4ed1d">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab3914490d1c4767c0127783cac5098e4">nfsftl_plan</a>
+</li>
+<li>f_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#abe0364fe67e48a336fca522a0cf6ee1b">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aab9daf7841a5f6b3a059921713736e3c">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#affba771210ad63dfce92bed9a629e19f">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0c38937dd8ad6734e94e08a2cd700628">solverl_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1">solver_plan_double</a>
+</li>
+<li>f_iter
+: <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ae154ca7cd0d7ebc7e0db4b1f415b56fd">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a0b408ac6ce2906dc57ff0c2ff9d3f0d0">infft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a9c5a261251ad90176392b2fafcd961de">infsft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af72ea2aed94d3e789dd064776fdf2919">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b03057778ae78ee06efd6b135e23fb">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74d132853f5b7e0a4b8e3918dae7fe8c">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a4207ca1175efe7865d6631ae5a704632">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>fftw_flags
+: <a class="el" href="structnfftf__plan.html#a880c04f5e9d485d84065b3c289cd5729">nfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#afd3bc700b6adca6d3dde831c9a7aae79">nfctf_plan</a>
+, <a class="el" href="structnfctl__plan.html#afc96567eba0053563867b8e3a064902b">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8">nfst_plan</a>
+, <a class="el" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a407c06575335351e1b720b40f8b4f26c">nfct_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4e0df1f491a4aa8f7373d776d705095f">nfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0ab6b3ec18b7e0685277d5f6997aa54c">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9da018cd24e707e57ed0c8cac82f5301">nfstf_plan</a>
+</li>
+<li>flags
+: <a class="el" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">fastsum_plan_</a>
+, <a class="el" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">fgt_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6795cda9e0d83c5b5c7935b75d10dc1a">infsft_adjoint_plan</a>
+, <a class="el" href="structnsfftf__plan.html#acd78e2fcc4a9c29700887aee1517214c">nsfftf_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a15d53809b4f86c20e7fd99ea1b71efcb">nfsftl_plan</a>
+, <a class="el" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694">nfsft_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aadd41183d54818f3e8528affe40769bc">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f236235168535b9f9833bcc7e50e695">nfsoftl_plan_</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a83f3fc443fbf5c40336a46a8c1bdfaf8">infft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4">solver_plan_double</a>
+, <a class="el" href="structnfsftf__plan.html#a67898ed2ead6812358feeace004b14fe">nfsftf_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a8771c95bc65a49fe974389825f005ec9">infst_adjoint_plan</a>
+, <a class="el" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">fpt_set_s_</a>
+, <a class="el" href="structsolverf__plan__double.html#a28ce886cb705632f8f866bfb5880795b">solverf_plan_double</a>
+, <a class="el" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281">nsfft_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942">solver_plan_complex</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#adea4e1650ddadc3f0f7c1d833b6b7789">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a55301d3525d6457aebd0237871dee668">nfsoftf_plan_</a>
+, <a class="el" href="structsolverl__plan__double.html#aa95251443f265effb6093d63b6536431">solverl_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad913ef9fc7d9bb8ca4f91f1abbf99949">infct_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a2d7642432b4b627a4bf77d1c05216669">solverf_plan_complex</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0d51c3ece7512b04408b5a2b94ee4a05">innfft_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#abd86575c07d53042297da1c54ebc9e1a">solverl_plan_complex</a>
+, <a class="el" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">fpt_set_s_</a>
+, <a class="el" href="structnsfftl__plan.html#a5c4750f9d7a5f0dbc4d51d06d6be08d3">nsfftl_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x67.html b/doc/api/html/functions_vars_0x67.html
new file mode 100644
index 0000000..25d880e
--- /dev/null
+++ b/doc/api/html/functions_vars_0x67.html
@@ -0,0 +1,124 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g
+: <a class="el" href="structnfftf__plan.html#a35e6b39bfe06e5a6e56cde2458cf79a7">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539">nfft_plan</a>
+, <a class="el" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">fpt_step_</a>
+, <a class="el" href="structnfftl__plan.html#aa442607f39ed01885dbeb286b18b1b77">nfftl_plan</a>
+</li>
+<li>g1
+: <a class="el" href="structnfctf__plan.html#a44a225766135ec7d1bbe8e8e7631faa3">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a597e9fd4dddb36748c5e33ee1f058835">nfct_plan</a>
+, <a class="el" href="structnfftf__plan.html#a01420d5d785228ee24a4819d2b0454a2">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#afbe6522294161b247058e61e9ef64d78">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a279687997f16d0fb839928f472307b39">nfstf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ac54e606a9b0c7c6b526fb3d44d28482a">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a71a99cd893a823d1a7edb139650b2afe">nfftl_plan</a>
+</li>
+<li>g2
+: <a class="el" href="structnfftl__plan.html#aea25feca0bccefe267c0a9eb75390ed6">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a4a70d593fb1704dda85e2392c77ea3bc">nfctf_plan</a>
+, <a class="el" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ac4c375e593da728a4e7477f76ff12031">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#a11f05420be226a83aed2e8c41a1b9bd3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0e91b301bcd4ce83aecdda2b0f7712ed">nfstl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a365bf7b6d6fa04bfb4206f8ec647eb14">nfctl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a4fda15d8d9edaa8de0636b2a458bf763">nfftf_plan</a>
+</li>
+<li>g_hat
+: <a class="el" href="structnfftf__plan.html#aad01cb28079405090eaa1fce590c0c09">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#af708c1c479196fb4e3ded3d289085b5e">nfftl_plan</a>
+</li>
+<li>gamma
+: <a class="el" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">fpt_data_</a>
+</li>
+<li>gamma_m1
+: <a class="el" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">fpt_data_</a>
+</li>
+<li>gammaN
+: <a class="el" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x69.html b/doc/api/html/functions_vars_0x69.html
new file mode 100644
index 0000000..8735559
--- /dev/null
+++ b/doc/api/html/functions_vars_0x69.html
@@ -0,0 +1,102 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>idx0
+: <a class="el" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">taylor_plan</a>
+</li>
+<li>index_sparse_to_full
+: <a class="el" href="structnsfftf__plan.html#a3e6968100cf6a0d5950ccdcb1744788f">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aaaf6f8d00374e91ec3baf983583b51bd">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55">nsfft_plan</a>
+</li>
+<li>index_x
+: <a class="el" href="structnfftf__plan.html#a1dadaac164fe9f9be856d47a53498335">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad98e162c23583ec8f010aacf9ec06767">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735">nfft_plan</a>
+</li>
+<li>initialized
+: <a class="el" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">nfsft_wisdom</a>
+</li>
+<li>internal_fpt_set
+: <a class="el" href="structnfsoftl__plan__.html#a8cf750d58de22209962bd9cb96f48864">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a686809f1397b113322b77ef50c8c0ef7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6a.html b/doc/api/html/functions_vars_0x6a.html
new file mode 100644
index 0000000..7ec2269
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6a.html
@@ -0,0 +1,86 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_j"></a>- j -</h3><ul>
+<li>J
+: <a class="el" href="structnsfftf__plan.html#a24e51336c8b6f1814932e2bad306179b">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a6e3abb9e765b8f40b0f398a85c07d8af">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52">nsfft_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6b.html b/doc/api/html/functions_vars_0x6b.html
new file mode 100644
index 0000000..975f3d8
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6b.html
@@ -0,0 +1,104 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li class="current"><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>k
+: <a class="el" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">fastsum_plan_</a>
+</li>
+<li>K
+: <a class="el" href="structnfftf__plan.html#aad0836b3e8e4a98b27729d960b593caa">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae6f8a76f202fe1816cfe1004a9ce9a0d">nfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a9d2bd4132187064cf5f6c301f7ce5125">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4">nfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a574648230ce316a55282f362774aa615">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8">nnfft_plan</a>
+</li>
+<li>k_start
+: <a class="el" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">fpt_data_</a>
+</li>
+<li>kernel_param
+: <a class="el" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">fastsum_plan_</a>
+</li>
+<li>kinds
+: <a class="el" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">fpt_set_s_</a>
+</li>
+<li>kindsr
+: <a class="el" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6c.html b/doc/api/html/functions_vars_0x6c.html
new file mode 100644
index 0000000..4b09c0c
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6c.html
@@ -0,0 +1,84 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li class="current"><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lengths
+: <a class="el" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6d.html b/doc/api/html/functions_vars_0x6d.html
new file mode 100644
index 0000000..feb7ae2
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6d.html
@@ -0,0 +1,245 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>m
+: <a class="el" href="structnfftf__plan.html#a9002bd9a063311155ae2a8c94c076e9d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a255a1e1526bba8643690e0aa9c5b90c6">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a55a5e4a962d8e01d7c0282f916bacb8c">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a15e9f66b0447148fcce4af9eafa2f9ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#af7f40661f8b29323b5b0f1ad5a7290a4">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ac4741304d0030c88a8244dd1d8171b65">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a0a2a679bf0d1c90511a52c31f5a537f1">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a2082f917534e3a8590d5a19b4377a256">nnfftl_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">fpt_set_s_</a>
+</li>
+<li>m
+: <a class="el" href="structnfstf__plan.html#a6d228a85b702490f205c8983c15e33fe">nfstf_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">fgt_plan</a>
+</li>
+<li>M_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a37eb6ac713dbf1205f2dce0fa39107df">nfftf_mv_plan_double</a>
+, <a class="el" href="structnnfftl__plan.html#a74e7fb29427e5a4d9b383ab278f513a2">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a6a75a26e5d6476595bde5b03d6293a0a">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a3823921949eded81bde776f57eba8052">nfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af95027b3922c48e54dc5e5417d3a45e8">nsfftl_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe">nfft_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#ac9fffb187c8a840eb83939ba4d710f13">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a03c2aa160944a42e0f3116e7545ed20f">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6">nfft_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a241e8def5a65484080b01871c12851b3">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a9a1093b920fb4468b59c7120a7e1ceb5">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#aa0175f63a2b2f5c80bb3153008315871">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsftf__plan.html#a5df19929f38064f36893840388ef975e">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed">nfsft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ac7366d2d09a0b3aed5884b50d10ef478">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#aa1b43495afe03e88e419961428769246">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a6fc89775998b5353b0f674b75b3638ae">nfsoftf_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a95e2db75883c6586f31b8db8c8bf8cf8">nfftl_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a33cddd8977c92ba6641a1c4a18318fd6">nfsoftl_plan_</a>
+, <a class="el" href="structnfctf__plan.html#a86276f6249784d5121d83453818709e9">nfctf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">fastsum_plan_</a>
+, <a class="el" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac4ad3000c4c3293f3d86b90a926410a9">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a936082c69e582e36fb51ae452cd08fc3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ae4d5aeae7ea312bf70720bafd4fb3882">nfstl_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ab437c32f06548b3728bcb2b39681acd8">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnnfftf__plan.html#a6908aa62ea014b3b60e047a99f6adb2b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c">nnfft_plan</a>
+</li>
+<li>MEASURE_TIME_t
+: <a class="el" href="structnfftf__plan.html#afb81143dbd42553ed90440afc406c909">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae8cf45feec672cd7e6f42a1b6a091a5c">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a3621b32cd8ea93b2bcb8db6ce40cd5bb">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#acd69baad39feaa27f34c063960b173f0">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2c6b9d81be06f2e557c410310420809f">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a369d8545639fccbf73f9daf7dcb94fe8">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a74e5be807909e0a443ea9b48e0a7da4b">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a47c6a3aba310b4f18d7ba5a7107fc168">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af36dbcf3d4f12bb85ac6c167aabf8768">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ae2870ad5b902cb4724c2ab47e5e012e1">nfsftl_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">fastsum_plan_</a>
+</li>
+<li>mv
+: <a class="el" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a3da97d0d8d896d9da6a95a68a6f65442">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a56e946ecb94fc633a9d518d347725c4c">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a791fe047a3b45cce8049e83d422b8414">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a320424336d0f74f0d24cc67053dea7ca">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a65d97330deb4cd9de78e4b9aa85afa62">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a02395790ff1d9e7ffc2e3fae3b927df0">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#abb0996d6ed2cd627dc28fb7f5c18007a">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a18f9b22f7f221aedc3dabab2cb07e633">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#afa903e9a436fc17da89b08377a6a733e">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a519286afbd99d020738a92e03c320a18">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aaa4fedc5005e075e7f707770384be114">solverf_plan_double</a>
+</li>
+<li>mv1
+: <a class="el" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">fastsum_plan_</a>
+</li>
+<li>mv2
+: <a class="el" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">fastsum_plan_</a>
+</li>
+<li>mv_adjoint
+: <a class="el" href="structnfsftl__plan.html#a162601fc8aa3248af806908e160d3c14">nfsftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a9f8b111e42ef7ba609879d4a6983695d">nfftf_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#acbff2532fc4d66cf92321be33ef6498f">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a3d0e47cf55f04c89523abd46f361ef91">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfsoftf__plan__.html#a858269faf194eca2137b65f2a5a8c0fb">nfsoftf_plan_</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a804a64f2fb25ad91487fbcc186d784e0">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#a3d343b79e00dbb8cd4984143a03ddf53">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a876dda7208fd0634f426c1e5cb04b77f">nfctf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8">nfsoft_plan_</a>
+, <a class="el" href="structnfctl__plan.html#a99191484b327c3283f3aed8c3e9a3d70">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a604a83ef64c291c6f8b23d45f620f2c7">nfstf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a2d189c2b7f8b5bf635cce01354ef253e">mril_inh_3d_plan</a>
+, <a class="el" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0">nfst_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a6259dd5746b911632df1286d0654eabe">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f7123e0975b4a7cd693d01abf117949">nfsoftl_plan_</a>
+, <a class="el" href="structnnfftf__plan.html#adcff4592ce1838e342b92633e9f8de42">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa6098f51f9c69196ca782a1b0f8feeba">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a8b4c8c903e7b24610e2d2e0c9bb62705">nsfftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12">nfsft_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f">nsfft_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#aea23a3331d423e70f2cbbeee71303906">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfstl__plan.html#a1eca782b8267b78a6effc382c0a5b9f4">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af4deec395e0a4650b1e108677b787900">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#aab8ee071a4e254cbf94a03689ed3127f">nfct_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a658b4a71ff29aa1cc2febc66d6c175bd">nsfftl_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a5f31b4b9a03ac8f9a503c1ae42cad758">nfftl_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac765b0a8797a3fd31b58133be9ff280b">mrif_inh_3d_plan</a>
+</li>
+<li>mv_trafo
+: <a class="el" href="structnfftl__plan.html#a0f05caab33b6f473626e74f44356e3fc">nfftl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a417f0b7f48ab77d5af34ed1da9ba95c9">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#adbe7e6be1061160223c10b6567efda40">nfstl_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a4d573c341aae7a4e034944772478658c">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051">nfsft_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#acdbe3a414d9c87baba03db3d873b864c">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a130252f4a197b65416311097880cff4f">nfftf_mv_plan_double</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#a48e28caf604132d02999d1dc0f5dc9a0">nfftf_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a4763b4f8f1b5f574d601289ab3cbcfa8">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aad46757ac44a32dbb04d0e453454acac">nsfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a7a532e28539e1ac2f49413248ae76a67">nfctf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aea4c2210478af70a540da01e0c0a1c7b">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a39b1bdd9a3eacd4ff3b809eeef01f364">nnfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a42f0c32b080677a57f82ccf23d018da2">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f">nfst_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502">nfsoft_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#aff66252bd97fa6d73d7e137d888bb625">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#ab1a7dae6c0f2b18d4eda2e32195bba95">nfsftl_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a7dbc7cd7b733b5850a59f35aa0f959d1">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__plan.html#ab09b1d93f60895791076e1e41241ecb0">nfftf_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a0291622a1f08aff56cc126ca64364d85">nfsoftf_plan_</a>
+, <a class="el" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5">nsfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a5f9802e95bfc2ae69f22e91c1fe47778">nfct_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#aeab94862046b7688470f3f1d78ca927d">nfsoftl_plan_</a>
+, <a class="el" href="structnsfftf__plan.html#ac698248a376958d67a10beecfdc3aa36">nsfftf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a61eec020c68a2b36cff4acb6dd4dcf96">mril_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa960f82c35501acf5237b5ed49f7fe57">nfstf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e">nfft_mv_plan_complex</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6e.html b/doc/api/html/functions_vars_0x6e.html
new file mode 100644
index 0000000..b4e8522
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6e.html
@@ -0,0 +1,228 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>N
+: <a class="el" href="structnfftf__plan.html#a27caa84ad525683d89b5963defadc98d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#ade6a750c99253ddfe82c08e439094507">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b">nfst_plan</a>
+, <a class="el" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">fpt_set_s_</a>
+, <a class="el" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">fgt_plan</a>
+, <a class="el" href="structnfstl__plan.html#a83b7013eb7ce3b1743ba45a2546a36c0">nfstl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftf__plan.html#a6971ea46e4044daa773f19c8bd8d4a0b">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae">nfft_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfct__plan.html#ad4d0600d8b0ee9d41bff22a7d63e64cf">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aefd2c40e607f75679bb61926881d4488">nnfftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftl__plan.html#a58140f5f6ea4ca1c0305cbcec55437bd">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a9c8ffbb61c7f5ad5d0a5545bdff83270">nfctf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7">nnfft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfct__plan.html#a0ad3d47d659b3641bb90eca6e56f9047">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a6d0bd4de4d2b90c38010bb4b8d77561b">nfctl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfftl__plan.html#a36e045f670b95d68f5c2e04b55a1c220">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a4497138b087187f70d19f107b1c80204">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a7fb433be8689db7816a3667620a294f3">nnfftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstf__plan.html#ade7cdc871c9633a324774001bd809f49">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2">nfst_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftf__plan.html#a09b711da345edffb8a71b5b8a8bca6d0">nfsftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstl__plan.html#a10456ed98cb22787f2469e1d20903c8c">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae849996a09be847a35be6c1ea018d988">nnfftf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfstf__plan.html#a3c13e4fbc7dba10012ac853e2cde12d0">nfstf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403">nfsft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad8d9bc5c5ae9f1ee6c813839ff831d97">nnfftl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftl__plan.html#a8740f26f76947fcc07a636002217a8db">nfsftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">fastsum_plan_</a>
+</li>
+<li>N1
+: <a class="el" href="structnnfftf__plan.html#a9f6a5274cee5803505df5ad65d4c12fd">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a693c5d648b1781dce21d24636aac6554">nnfftl_plan</a>
+</li>
+<li>N_MAX
+: <a class="el" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">nfsft_wisdom</a>
+</li>
+<li>N_total
+: <a class="el" href="structnnfftl__plan.html#a0e0827be03d503291f4a6d76c7b690d7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2">nnfft_plan</a>
+, <a class="el" href="structnnfftf__plan.html#afd4cb1ff03f227c4e9e1dd9da21ec34e">nnfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505">nsfft_plan</a>
+, <a class="el" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a090c82bf91f18bc68a389c06fb347cec">nfsftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac31afd2bc4a0fc94cd9ec08e302f84ac">nfctl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa3a702dbaed1e34d090e23b75c9949d6">nfsoftf_plan_</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#afad39dcd7d77c81247bcf5e4abc1cdaa">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a397e113cdbedc1e964657131c9a9dea3">nfsoftl_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a63a371e62727c804a195cf2315b79a41">nfftl_mv_plan_double</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">nfftf_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__complex.html#a65ce9742c15bad2711e8f8151bbf941c">nfftf_mv_plan_complex</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">nfftl_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a1df474111c1d61261d53455e05bc6c63">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#a65855ec1dec6f17eb46d6762ad6ff942">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a469c0077659dda97651e075da143a398">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__plan.html#a747b6aee3ae47ad66391027bc13789af">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a618b4315972d4ef612c772649d470ff9">nfctf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a4114df78a52f5e4a1a12a13678a9cb6c">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">mril_inh_3d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a7d51e6be67c5f2bc4d1a996e10228258">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa0e8f48c39f40e781da203659ec018ab">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#afe49ebe4fbbb3bd90b12e939c06adfab">nsfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a87f57bdfd9ba4415370ec796329cc1de">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#aea7fa284fa9aaa4e264c9c07844b5442">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed">nfst_plan</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">nfft_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e">nfsoft_plan_</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a90ee6582e535312ac761e4e6fbaad0c0">nfsftf_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12">mri_inh_3d_plan</a>
+</li>
+<li>nfct_flags
+: <a class="el" href="structnfctl__plan.html#a292db653f04805f907737a480f681888">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a484df328b87ae06b6c47b03298e18dbd">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf">nfct_plan</a>
+</li>
+<li>nfft_flags
+: <a class="el" href="structnfftl__plan.html#a375f14a65c5686803270dbb3cfd1c371">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d">nfft_plan</a>
+, <a class="el" href="structnfftf__plan.html#adaaa66e5b89d9f65ce94b56617574518">nfftf_plan</a>
+</li>
+<li>nfst_flags
+: <a class="el" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a15bb194b8a4fe39aca1b5be9f38d7175">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa23ef32254d98b76dfadbe7fa439f8c3">nfstf_plan</a>
+</li>
+<li>nnfft_flags
+: <a class="el" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a1a9bf1751caf842fb44f70a4cbab8744">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acebd9e667d51a5293f977642f031724e">nnfftf_plan</a>
+</li>
+<li>nplan1
+: <a class="el" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">fgt_plan</a>
+</li>
+<li>nplan2
+: <a class="el" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">fgt_plan</a>
+</li>
+<li>Ns
+: <a class="el" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x70.html b/doc/api/html/functions_vars_0x70.html
new file mode 100644
index 0000000..3a5af7f
--- /dev/null
+++ b/doc/api/html/functions_vars_0x70.html
@@ -0,0 +1,167 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">taylor_plan</a>
+, <a class="el" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">fastsum_plan_</a>
+</li>
+<li>p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#ac62464d925e739f79c28059cd1e59faa">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa7833544d06eb2d71042da5fa06b9c5c">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a803178524d842ae2944fb5f3ce9d4939">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6987fb320cd6798faabe9dfd92a494f2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677">solver_plan_double</a>
+</li>
+<li>p_iter
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#ade134a86a60d2538595acc2fafb83e41">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6e1fc4f4d7adf8aa89cde17cf002f0f6">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#afa0571b6b2c75979bc6a8ea75dc13efc">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6c81df2130d05bcbbcd6646cd27b671e">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b6ba348be2011c1cfecdb9f16829fd">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74ee726c5c0916fde59e77ca51d319eb">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aafe496b74fca5e5d96ce258bb3da1ffc">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>p_nfft
+: <a class="el" href="structnfsoftf__plan__.html#a1be8436a257f63ab4c27441bf714671d">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ac1230a81665ed7aa68cb7b4bc3a0c0c1">nfsoftl_plan_</a>
+</li>
+<li>plan_nfft
+: <a class="el" href="structnfsftf__plan.html#a87927611482f2fb3421ea2279993f94a">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a2c016b15b6b33c44b8218c43619ef784">nfsftl_plan</a>
+</li>
+<li>plans_dct2
+: <a class="el" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">fpt_set_s_</a>
+</li>
+<li>plans_dct3
+: <a class="el" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">fpt_set_s_</a>
+</li>
+<li>pre_cexp
+: <a class="el" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">fgt_plan</a>
+</li>
+<li>pre_K
+: <a class="el" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">fastsum_plan_</a>
+</li>
+<li>psi
+: <a class="el" href="structnfctl__plan.html#a59712f0b5712ba9020540b7bf355caea">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a96d6ede1036cae0a4df7fbf7ba7b8034">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3fb3fd27fa2c3c907c4f1e05a183598d">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a10747f86b86f7fa64539b46914344877">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ad3886151e655110a1c5ba71a66439e2b">nfct_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a8644e94ccefb0b3001442b4df86dae5d">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a84402b4c947d57abef20e5f2db9110e3">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a33955562ecf9b48f4283f869c77f96ff">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a748631060895d5106d11cdf4fce3ee60">nfctf_plan</a>
+</li>
+<li>psi_index_f
+: <a class="el" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a46d8f0fefc63d3ba6f1811f41bc9a7d8">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad20fa3e6bdb829247c3585639a0b086d">nfstf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2ec8c4542c9fafbaf90b469ab8d06d59">nfctl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a713765bd7f9b488ac995de023de2ead1">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#aa33238f59c2282eea4b81d8ecbba1417">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a59633568fd7d1cb01df5f49f08ad352c">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a3788434fa045ecd49dd89d116bb40c47">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#abf4204a1a31afd35d490ca4ef42bd596">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#ac0073e7c6389e9141d555bf58e2d0b59">nfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d">nnfft_plan</a>
+</li>
+<li>psi_index_g
+: <a class="el" href="structnnfftl__plan.html#a4b53c60fb307d01e01931ef812974a3c">nnfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#adcd209b5cbbfae40c5490a1141b7acda">nfct_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232">nnfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a60f4fbcf2fb3a48a037e5cda4608f535">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#a3ece0ce2dd8ad2e41852ac59df3ad481">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a04f8c8d2075057efa3b41381705084c6">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2e593f732ad26f9d681797a85a7293cf">nfctl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aa6d0ce899b41da6981f6863fc242559d">nnfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a773fbd9160ac14e6972a4b5be1b5113d">nfstl_plan</a>
+, <a class="el" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811">nfst_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad3ff1d5c721f0ec4e81aa341b29abc15">nfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x72.html b/doc/api/html/functions_vars_0x72.html
new file mode 100644
index 0000000..ed2c9fe
--- /dev/null
+++ b/doc/api/html/functions_vars_0x72.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r_act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a844f94caf050adea11133a52dcbaccdc">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a0a1b5e59c9ff83bc7b2d2894f96edd23">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ad40799f013c6b35165c2bc76eb7cb32e">nsfftl_plan</a>
+</li>
+<li>r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a781b1438bf0c8d47f51b30551f982426">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4739f3543d8e4e7af745c017a163516f">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a6088e9949fa966d839e8feadfb34596e">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a314c60168395a677ea88ff67dcaa2ec9">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acbea7a40d34bbca7688da41378140926">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3bb77b67c3779716d767e76b8661efbc">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#abd086bc019b356986e38f3db8039051f">infst_adjoint_plan</a>
+</li>
+<li>r_iter
+: <a class="el" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aec8fcaf36c7ce234e76970dc4b4ec9c9">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a4ca8ff73e59386ea3d5003c1ad27459d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a9715db1a24435d9dd2bc76371d92174e">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6261a160be099d721856fab16f31cf22">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x73.html b/doc/api/html/functions_vars_0x73.html
new file mode 100644
index 0000000..d205f68
--- /dev/null
+++ b/doc/api/html/functions_vars_0x73.html
@@ -0,0 +1,144 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>set
+: <a class="el" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">nfsft_wisdom</a>
+</li>
+<li>set_nfft_plan_1d
+: <a class="el" href="structnsfftf__plan.html#aaadc0908c69e235bc60ec3c7b28bca47">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a89a23c26f73280c5945e62f8966195fb">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc">nsfft_plan</a>
+</li>
+<li>set_nfft_plan_2d
+: <a class="el" href="structnsfftf__plan.html#a4ee3a7ef05c4fdbc161d24db51be3122">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa7ae0c8a9b2f404bd1f8ce4820d7cf43">nsfftl_plan</a>
+</li>
+<li>sigma
+: <a class="el" href="structnfftf__plan.html#a20d669812b6acf9a8bda34cb659d61dd">nfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3c50de01911ed86a66d15ecd79874e21">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a858114a52835ef9cae070f6017625a4c">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a">nfft_plan</a>
+, <a class="el" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a899c16c2e59f2566a9f17d84f64af952">nnfftl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a149fdaed10fafdb3bf414110ad233b7c">nfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ab7b68bdae0872917b559577ac2f53402">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954">nsfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acfc4ccc79c6fa50199500a790cb833b2">nfctf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa55c79623980b8334e9fcb50fa55ecd3">nsfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a56c9f580f79fb7605ae21bcbb729a8b9">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a629ae83677e311095d4c24ad4826e2ab">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a8d8b3093a73c09aac44cd8f55708ef27">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1">nfst_plan</a>
+</li>
+<li>size_psi
+: <a class="el" href="structnnfftf__plan.html#a67aae8bda525717c1628aa53fca9b7de">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aed13a1f152cb6febf2ce643c204d8b9a">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#af2992b9cb57809fb90a68dbaea36d79a">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#a975ebfbce1679c3ad3d8cc06e81c5645">nfstl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a2a01c089b030159c77a9bdcb46d1b183">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ab03d9f17b3fb46eb14439745e8f7994b">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a1b8cf9260caf345c8ecb5e6de726387b">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a4c9f0923fcf290197cee1550dc9a3665">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad">nfst_plan</a>
+</li>
+<li>spline_coeffs
+: <a class="el" href="structnfstl__plan.html#a7abc2fedc757d9b2b5f985377f99bfe7">nfstl_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac3e3c4b14a5227a96b8627faf6933652">nnfft_plan</a>
+, <a class="el" href="structnfstf__plan.html#a64c5addda16e3d789184af183900db21">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a65c65de370e29b24ba0da097d20ee262">nfftf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acb221c7694859d0828bcc1f56154cd69">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a3aaf44c4f0769644075d9fc5ed60afa0">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a971f190366e40c729899ff71d2a60682">nfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#a53242b3a71b8997bdcd173777146c427">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a38de3cc7a337907a01ae2701ea335d75">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a25a3208574495231141c9c407658f0cf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a23bec4401a652efc87ee6781061c9363">nfst_plan</a>
+, <a class="el" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">window_funct_plan_</a>
+, <a class="el" href="structnnfftl__plan.html#a8f364097c04b46c203a4883af90b9eb0">nnfftl_plan</a>
+</li>
+<li>stable
+: <a class="el" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">fpt_step_</a>
+</li>
+<li>steps
+: <a class="el" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x74.html b/doc/api/html/functions_vars_0x74.html
new file mode 100644
index 0000000..318c7ff
--- /dev/null
+++ b/doc/api/html/functions_vars_0x74.html
@@ -0,0 +1,99 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>t
+: <a class="el" href="structnfsftf__plan.html#ad5d65a033c50d321c6affc677e4f5226">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a59d80818cb9c0dcaccc477954720772c">nfsft_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a21641301ce6613d250e6d683c3fad9c2">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ab0b32ee063950ce38adc6b0e5e40af02">nfsoft_plan_</a>
+, <a class="el" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">fpt_set_s_</a>
+, <a class="el" href="structnfsoftl__plan__.html#acd18e8a2b89aacd8034b49033449f979">nfsoftl_plan_</a>
+, <a class="el" href="structnfsftl__plan.html#af5ba15c85f29ea8ba05a03c2f2fc2611">nfsftl_plan</a>
+</li>
+<li>T_MAX
+: <a class="el" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">nfsft_wisdom</a>
+</li>
+<li>threshold
+: <a class="el" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">nfsft_wisdom</a>
+</li>
+<li>ts
+: <a class="el" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x76.html b/doc/api/html/functions_vars_0x76.html
new file mode 100644
index 0000000..3ce84c8
--- /dev/null
+++ b/doc/api/html/functions_vars_0x76.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>v
+: <a class="el" href="structnnfftf__plan.html#a62822fb1596e8eccd6d2edf62096323b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a224d2ba2e9ba30535b394b1375ff0a88">nnfftl_plan</a>
+</li>
+<li>v_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#ae1911bb7b195a6cdc51fc2c9dd5663d5">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5078575d0bf816ed68ce3c762f578887">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#af253d4b292aa7db655ca51dfdf598bf9">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a8f64e1af7dfd3cd41377d79113eb51e3">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ad04d2974dedefdc45e176e5ea5399aab">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af025d6f664c1ccdd552f61e68d58ec97">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a10da470b963e2d631f48e8eb81bad94e">infst_adjoint_plan</a>
+</li>
+<li>v_iter
+: <a class="el" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a79c7f5b84aa9feddeafbcb9bde26de17">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a7e352320832a737577bd9ebe689a50bd">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab469e8fc7e7bc6c4068794cddf69ce26">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6ee0cddd36b16d6b8cc09baf6db05cf9">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x77.html b/doc/api/html/functions_vars_0x77.html
new file mode 100644
index 0000000..5a8d34c
--- /dev/null
+++ b/doc/api/html/functions_vars_0x77.html
@@ -0,0 +1,116 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li class="current"><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="structsolverf__plan__complex.html#a91f7e03dc8509952827333cc61ca9aa4">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a63c0a528c6e9989c7b0fee6c02d1fbff">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500">solver_plan_double</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a67fabb54885946acaaad95a5a472b004">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#add093d84bfb7f6f5d5b5512e000efc68">infct_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#a547382238a57e96f316bac4dd291af0d">solverl_plan_complex</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a5b64034f7c01c3ce0a7ab02fd8477bdc">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a20565dbd14d036eb348ca0276a4f411c">innfft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0f45b9d16576986d6d6d9605f6891f3d">solverl_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a552e0603ee92be729e052bb6028a1fb4">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa4cd6ea3040339a39047978a7c1f1c9d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a9738a7ae6eb6e9ac59018d7fe0b67b32">infsft_adjoint_plan</a>
+</li>
+<li>w_hat
+: <a class="el" href="structinfst__adjoint__plan.html#a00f860d5af6ada0c99a252b5d7548f5b">infst_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ab1cada21b9034edfd3a1b2f77252f3be">solverf_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#aece5ec597b25ea28c945d2559316fad8">solverf_plan_complex</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a76ad0c6eace967391553fd4939e70662">infft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472">solver_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aeb6a8106c1347dc7decf42e4520f70ab">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa53e43e9cd65db3ba08ed275cb62d456">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad4d107f6ef642a2f8173d05d73bde405">solverl_plan_complex</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0545064b15a22a5a3ae285e6aded5f80">innfft_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__double.html#aaa9d07d5f3ec0f7f7f0a6193927e1a94">solverl_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af14d4eb49aee59948ea57d30dbf4d628">infct_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a5830886454142e4825347a703f286c0a">infsft_adjoint_plan</a>
+</li>
+<li>wig_coeffs
+: <a class="el" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a452e16848e81fd0b072d4e3347345455">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a1d6f6e5b95a8f0ff13add5c23b382fb9">nfsoftf_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x78.html b/doc/api/html/functions_vars_0x78.html
new file mode 100644
index 0000000..121eac6
--- /dev/null
+++ b/doc/api/html/functions_vars_0x78.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li class="current"><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="structnfftf__plan.html#a4bcaa307f32321459187f8633a946a7e">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acf91ba20ce671a5d4c971465fbd33b03">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8">nfst_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a072fa8dcd38c95bec64c8e82af71afa7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383">nfsoft_plan_</a>
+, <a class="el" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">nfstl_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">nfsoftl_plan_</a>
+, <a class="el" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae3c9275b5cafc753e2762406ba422378">nnfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">fastsum_plan_</a>
+, <a class="el" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">nfftl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">nfsftl_plan</a>
+, <a class="el" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90">nfsft_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a110084c9a750d175c70caa7a24d69ae7">nfsftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">nnfftl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad0d1772e5947f4395cbfa0fc2ed39018">nfstf_plan</a>
+</li>
+<li>x_021
+: <a class="el" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a62e8e58fe1b84f82ac85301a091af3fa">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a0c015fd2deca4e70105f0c68a6a69586">nsfftf_plan</a>
+</li>
+<li>x_transposed
+: <a class="el" href="structnsfftf__plan.html#a4d7e0553a450636fc65816e4977914bd">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6">nsfft_plan</a>
+</li>
+<li>xc
+: <a class="el" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">fpt_set_s_</a>
+</li>
+<li>xcvecs
+: <a class="el" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x79.html b/doc/api/html/functions_vars_0x79.html
new file mode 100644
index 0000000..73cea26
--- /dev/null
+++ b/doc/api/html/functions_vars_0x79.html
@@ -0,0 +1,100 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li class="current"><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="structsolverf__plan__complex.html#a522b2ad5b572dce6d786b26e221a14d6">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a31aa1269dccbcfad158f31c276b0399e">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18">solver_plan_double</a>
+, <a class="el" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">fastsum_plan_</a>
+, <a class="el" href="structsolverl__plan__complex.html#afbcb92106789225f6d54be521797b97f">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a70307c6e59216c27cb4d78e7f172ab8c">solverl_plan_double</a>
+, <a class="el" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">fgt_plan</a>
+</li>
+<li>y_hat
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a968843771644077babbdd687b6bbdb5d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#ab91fa7e8fa5668148a4cba86a97e415b">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a4a98ec178d9d74dab4e617beebc419a6">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#acd0758c4ed1c79b6d2f2eed33effb539">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aaed8db541ee689c5ec82bb8e18c4c8d1">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ac21eced87cb3a6eafd0d22f27e0eac03">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a52d2b0b0d208e673eada45dff01e9c13">infst_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x7a.html b/doc/api/html/functions_vars_0x7a.html
new file mode 100644
index 0000000..de3631a
--- /dev/null
+++ b/doc/api/html/functions_vars_0x7a.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Data Fields - Variables
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+      <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+      <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+      <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+      <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+      <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+      <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+      <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+      <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+      <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+      <li class="current"><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a4c8dbe5d5a4d910b93ae7f84215482c8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aeee7fa961ebdf43e0caf1108e6b5ada7">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#abe468b3b489a8707538f083713962fcc">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">solverl_plan_double</a>
+</li>
+<li>z_iter
+: <a class="el" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">infft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">innfft_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/glacier_8c_source.html b/doc/api/html/glacier_8c_source.html
new file mode 100644
index 0000000..db6c5a8
--- /dev/null
+++ b/doc/api/html/glacier_8c_source.html
@@ -0,0 +1,280 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - glacier.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">glacier.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: glacier.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208">   42</a></span> <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(<span class="keywordtype">double</span> z,<span class="keywordtype">double</span> a,<span cl [...]
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     <span class="keywordflow">return</span> pow(0.25-z*z,b)/(c+pow(fabs(z),2*a));</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a">   48</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a" title="Reconstruction routine.">glacier</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> j,k,k0,k1,l,my_N[2],my_n[2];</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">double</span> tmp_y;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> ip;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   FILE* fp;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="comment">/* initialise p */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   my_N[0]=N; my_n[0]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   my_N[1]=N; my_n[1]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   nfft_init_guru(&p, 2, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>      PRE_PHI_HUT| PRE_FULL_PSI|</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>      MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* initialise ip, specific */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   solver_init_advanced_complex(&ip,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&p), CGNE| PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   fprintf(stderr,<span class="stringliteral">"Using the generic solver!"</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="comment">/* init nodes */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   fp=fopen(<span class="stringliteral">"input_data.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">for</span>(j=0;j<p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],&tmp_y);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>       ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=tmp_y;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   fclose(fp);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="comment">/* initialise damping factors */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordflow">if</span>(ip.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordflow">for</span>(k0=0;k0<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       <span class="keywordflow">for</span>(k1=0;k1<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         ip.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[k0*p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k1]=</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k0-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>       <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k1-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   solver_before_loop_complex(&ip);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">for</span>(l=0;l<40;l++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       fprintf(stderr,<span class="stringliteral">"Residual ||r||=%e,\n"</span>,sqrt(ip.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>));</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&ip);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     printf(<span class="stringliteral">"%le %le\n"</span>,creal(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]),cimag(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&ip);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f">  110</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> [...]
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> {</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">int</span> j,k,k0,k1,l,my_N[2],my_n[2];</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">double</span> tmp_y,r;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p,cp;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> ip;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">double</span> _Complex* cp_y;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   FILE* fp;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span> M_re=M-M_cv;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="comment">/* initialise p for reconstruction */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   my_N[0]=N; my_n[0]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   my_N[1]=N; my_n[1]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   nfft_init_guru(&p, 2, my_N, M_re, my_n, 6,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>      PRE_PHI_HUT| PRE_FULL_PSI|</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>      MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">/* initialise ip, specific */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   solver_init_advanced_complex(&ip,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&p), solver_flags);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="comment">/* initialise cp for validation */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cp_y = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   nfft_init_guru(&cp, 2, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>      PRE_PHI_HUT| PRE_FULL_PSI|</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>      MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   cp.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="comment">/* set up data in cp and cp_y */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   fp=fopen(<span class="stringliteral">"input_data.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordflow">for</span>(j=0;j<cp.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],&tmp_y);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       cp_y[j]=tmp_y;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   fclose(fp);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="comment">/* copy part of the data to p and ip */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">for</span>(j=0;j<p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0]=cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0];</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]=cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1];</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=tmp_y;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">if</span>(cp.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     nfft_precompute_one_psi(&cp);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="comment">/* initialise damping factors */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordflow">if</span>(ip.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">for</span>(k0=0;k0<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       <span class="keywordflow">for</span>(k1=0;k1<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         ip.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[k0*p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k1]=</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k0-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k1-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   solver_before_loop_complex(&ip);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="comment">//  fprintf(stderr,"iteration starts,\t");</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">for</span>(l=0;l<40;l++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&ip);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="comment">//fprintf(stderr,"r=%1.2e, ",sqrt(ip.dot_r_iter)/M_re);</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterat [...]
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterat [...]
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,-1,ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a> [...]
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   r=sqrt(<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,M_re)/<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inne [...]
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   fprintf(stderr,<span class="stringliteral">"r=%1.2e, "</span>,r);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   printf(<span class="stringliteral">"$%1.1e$ & "</span>,r);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&cp);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(&cp.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[M_re],-1,&cp_y[M_re],M_cv);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   r=sqrt(<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(&cp.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[M_re],M_cv)/<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Compu [...]
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   fprintf(stderr,<span class="stringliteral">"r_1=%1.2e\t"</span>,r);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   printf(<span class="stringliteral">"$%1.1e$ & "</span>,r);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   nfft_finalize(&cp);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&ip);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#ga3c04138a5bfe5d72780bb7e82a18e627">  209</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordtype">int</span> M_cv;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">if</span>(argc<3)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       fprintf(stderr,<span class="stringliteral">"Call this program from the Matlab script glacier.m!"</span>);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       exit(-1);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">if</span>(argc==3)</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <a class="code" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a" title="Reconstruction routine.">glacier</a>(atoi(argv[1]),atoi(argv[2]));</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">for</span>(M_cv=atoi(argv[3]);M_cv<=atoi(argv[5]);M_cv+=atoi(argv[4]))</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   fprintf(stderr,<span class="stringliteral">"\nM_cv=%d,\t"</span>,M_cv);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   printf(<span class="stringliteral">"$%d$ & "</span>,M_cv);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   fprintf(stderr,<span class="stringliteral">"cgne+damp: "</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE| PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="comment">//fprintf(stderr,"cgne: ");</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="comment">//glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE);</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   fprintf(stderr,<span class="stringliteral">"cgnr: "</span>);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(atoi(argv[1]),atoi(argv[2]),M_cv,CGNR);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   fprintf(stderr,<span class="stringliteral">"cgnr: "</span>);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(atoi(argv[1])/4,atoi(argv[2]),M_cv,CGNR);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   printf(<span class="stringliteral">"XXX \\\\\n"</span>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   fprintf(stderr,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals.html b/doc/api/html/globals.html
new file mode 100644
index 0000000..27d47dc
--- /dev/null
+++ b/doc/api/html/globals.html
@@ -0,0 +1,86 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BasisPoly()
+: <a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">fastsum.c</a>
+</li>
+<li>binom()
+: <a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">fastsum.c</a>
+</li>
+<li>BuildBox()
+: <a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">fastsum.c</a>
+</li>
+<li>BuildTree()
+: <a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x63.html b/doc/api/html/globals_0x63.html
new file mode 100644
index 0000000..95e04f1
--- /dev/null
+++ b/doc/api/html/globals_0x63.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c2e()
+: <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">nfsft.c</a>
+</li>
+<li>c2e_transposed()
+: <a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">nfsft.c</a>
+</li>
+<li>calc_SearchBox()
+: <a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">fastsum.c</a>
+</li>
+<li>comparison_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">linogram_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">mpolar_fft_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x65.html b/doc/api/html/globals_0x65.html
new file mode 100644
index 0000000..b2f5d4d
--- /dev/null
+++ b/doc/api/html/globals_0x65.html
@@ -0,0 +1,86 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li class="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eval_sum_clenshaw_transposed()
+: <a class="el" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">fpt.c</a>
+</li>
+<li>eval_wigner()
+: <a class="el" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">wigner.h</a>
+</li>
+<li>eval_wigner_thresh()
+: <a class="el" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">wigner.h</a>
+</li>
+<li>EXACT_NEARFIELD
+: <a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">fastsum.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x66.html b/doc/api/html/globals_0x66.html
new file mode 100644
index 0000000..4a00c6a
--- /dev/null
+++ b/doc/api/html/globals_0x66.html
@@ -0,0 +1,116 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li class="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fak()
+: <a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fastsum.c</a>
+</li>
+<li>fastsum_exact()
+: <a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum.c</a>
+</li>
+<li>fastsum_finalize()
+: <a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum.c</a>
+</li>
+<li>fastsum_init_guru()
+: <a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum.c</a>
+</li>
+<li>fastsum_plan
+: <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum.h</a>
+</li>
+<li>fastsum_precompute()
+: <a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum.c</a>
+</li>
+<li>fastsum_trafo()
+: <a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum.c</a>
+</li>
+<li>FIRST_L
+: <a class="el" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">fpt.c</a>
+</li>
+<li>fpt_data
+: <a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt.c</a>
+</li>
+<li>fpt_set
+: <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">nfft3.h</a>
+</li>
+<li>fpt_set_s
+: <a class="el" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8">fpt.c</a>
+</li>
+<li>fpt_step
+: <a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt.c</a>
+</li>
+<li>fptf_set
+: <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">nfft3.h</a>
+</li>
+<li>fptl_set
+: <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">nfft3.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x69.html b/doc/api/html/globals_0x69.html
new file mode 100644
index 0000000..135e1eb
--- /dev/null
+++ b/doc/api/html/globals_0x69.html
@@ -0,0 +1,191 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>imri_inh_2d1d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a39cce38619ea8d9ce84326173e2d091b">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a7b403058cdba0d2918690b2d1d577912">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae0f7ba8180888f8f70aff1b041f4ec57">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a61bb41310d86e96ad1912ce486930bea">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a84b7c58708fe95ff8234638689a30302">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a9a8864136de1ff61970eeed934350238">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c6fe11c01d742025c7eb7bf7ac9002">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a6275d93dac2957a4acad3bda978c98cd">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#afb6ade8e78c1dfdc7e513c6e8fa7ffb6">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a7e65b366bd5003cef9c16e640591b972">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a7bfc5594bbdc3d6c58fb10713a03bc40">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c89f97b3f452ee3aedb245d064f24e">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a695c20cc98df4bbd370240bee9703e77">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a4fcee80a5fbbe901b8d51717dc07ae24">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a36eef8da31026b71a865108b095768cc">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a2a31ddf66394b88a4dd1545278e205b5">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a826591281cbec37c2a032eaecbbacf9d">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae93aa72dcb2528111f021c952482c244">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#adf47a7ff42ca521526db42b4d3a68f98">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a219ff15a153205b04eec76860cb4d6eb">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a26dbcae80a2db01144d523cb3d22a01d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#adb479e2343fef9fbafdc5d8d65085aee">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a040cb361de66313ccbad17f746cc748d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a0a162589cc358719488082d0b3e42e0e">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a03fc19c8d3c7b8a49c8751a2a88e0d09">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a4a5720df6bfee236588f38e516e32c90">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a086451cc556027d5e909eb7d1c1249b7">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a332fad4381e89b483482e53fa39604e3">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#ac5ad72ccf1af482d623242389bc154b2">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a57df76147b89e6e204a465fd437fbaae">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a3c7be955a46b3d056b5d38324f2d2068">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a1316a1ad32f611899e446cd98d3b0b0d">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ab4dcbe373e99d9c010034c6eecdfea86">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#aac4fe9056cb5a96170ba6122e20d116a">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a9e80774fcedbd2a50e4146290de9ce3f">solver_adjoint.h</a>
+</li>
+<li>inverse_linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">linogram_fft_test.c</a>
+</li>
+<li>inverse_mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">mpolar_fft_test.c</a>
+</li>
+<li>inverse_polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">polar_fft_test.c</a>
+</li>
+<li>Inverse_Radon_trafo()
+: <a class="el" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">inverse_radon.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x6b.html b/doc/api/html/globals_0x6b.html
new file mode 100644
index 0000000..57b4c5c
--- /dev/null
+++ b/doc/api/html/globals_0x6b.html
@@ -0,0 +1,91 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>K_END_TILDE
+: <a class="el" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">fpt.c</a>
+</li>
+<li>K_START_TILDE
+: <a class="el" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">fpt.c</a>
+</li>
+<li>KERNEL
+: <a class="el" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">radon.c</a>
+, <a class="el" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">inverse_radon.c</a>
+</li>
+<li>kubintkern()
+: <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.h</a>
+, <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.c</a>
+</li>
+<li>kubintkern1()
+: <a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x6c.html b/doc/api/html/globals_0x6c.html
new file mode 100644
index 0000000..da573bd
--- /dev/null
+++ b/doc/api/html/globals_0x6c.html
@@ -0,0 +1,91 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li class="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LAST_L
+: <a class="el" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">fpt.c</a>
+</li>
+<li>linintkern()
+: <a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">fastsum.c</a>
+</li>
+<li>linogram_dft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_fft_test.c</a>
+</li>
+<li>linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft_test.c</a>
+</li>
+<li>linogram_grid()
+: <a class="el" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">radon.c</a>
+, <a class="el" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">inverse_radon.c</a>
+, <a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_fft_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x6d.html b/doc/api/html/globals_0x6d.html
new file mode 100644
index 0000000..de65e6f
--- /dev/null
+++ b/doc/api/html/globals_0x6d.html
@@ -0,0 +1,99 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MACRO_MV_PLAN
+: <a class="el" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">nfft3.h</a>
+</li>
+<li>MACRO_SOLVER_ADJOINT_PLAN
+: <a class="el" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">solver_adjoint.h</a>
+</li>
+<li>main()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">mpolar_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">polar_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">linogram_fft_test.c</a>
+, <a class="el" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">radon.c</a>
+, <a class="el" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">inverse_radon.c</a>
+</li>
+<li>max_i()
+: <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">fastsum.c</a>
+</li>
+<li>mpolar_dft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_grid()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_fft_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x6e.html b/doc/api/html/globals_0x6e.html
new file mode 100644
index 0000000..d1d6791
--- /dev/null
+++ b/doc/api/html/globals_0x6e.html
@@ -0,0 +1,272 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NF_KUB
+: <a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">fastsum.h</a>
+</li>
+<li>nfft_bspline()
+: <a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft3util.h</a>
+</li>
+<li>nfft_bspline_old()
+: <a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_complex()
+: <a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_double()
+: <a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft3util.h</a>
+</li>
+<li>nfft_cp_complex()
+: <a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft3util.h</a>
+</li>
+<li>nfft_cp_double()
+: <a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_complex()
+: <a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_double()
+: <a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft3util.h</a>
+</li>
+<li>nfft_dot_complex()
+: <a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft3util.h</a>
+</li>
+<li>nfft_dot_double()
+: <a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft3util.h</a>
+</li>
+<li>nfft_dot_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_complex()
+: <a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_double()
+: <a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft3util.h</a>
+</li>
+<li>nfft_fftshift_complex()
+: <a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft3util.h</a>
+</li>
+<li>nfft_free()
+: <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft3.h</a>
+</li>
+<li>nfft_free_hook
+: <a class="el" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft3.h</a>
+</li>
+<li>nfft_free_type_function
+: <a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft3.h</a>
+</li>
+<li>nfft_malloc()
+: <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft3.h</a>
+</li>
+<li>nfft_malloc_hook
+: <a class="el" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft3.h</a>
+</li>
+<li>nfft_malloc_type_function
+: <a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft3.h</a>
+</li>
+<li>NFFT_MAX
+: <a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">nfft3util.h</a>
+</li>
+<li>NFFT_MIN
+: <a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">nfft3util.h</a>
+</li>
+<li>nfft_modified_fejer()
+: <a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson2()
+: <a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson4()
+: <a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft3util.h</a>
+</li>
+<li>nfft_modified_multiquadric()
+: <a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft3util.h</a>
+</li>
+<li>nfft_modified_sobolev()
+: <a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft3util.h</a>
+</li>
+<li>nfft_plain_loop()
+: <a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft3util.h</a>
+</li>
+<li>nfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc">nfft3.h</a>
+</li>
+<li>nfft_prod_int()
+: <a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft3util.h</a>
+</li>
+<li>nfft_prod_real()
+: <a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft3util.h</a>
+</li>
+<li>nfft_smbi()
+: <a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_lsdf()
+: <a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_msdf()
+: <a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_complex
+: <a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_double
+: <a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">nfft3util.h</a>
+</li>
+<li>nfft_trafo()
+: <a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421">nfft3.h</a>
+</li>
+<li>nfft_upd_axpby_complex()
+: <a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpby_double()
+: <a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_complex()
+: <a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_double()
+: <a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_complex()
+: <a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_double()
+: <a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_complex()
+: <a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_double()
+: <a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_complex()
+: <a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_double()
+: <a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_1d()
+: <a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_S2()
+: <a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft3util.h</a>
+</li>
+<li>nfft_vpr_complex()
+: <a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft3util.h</a>
+</li>
+<li>nfft_vpr_double()
+: <a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft3util.h</a>
+</li>
+<li>nfft_vpr_int()
+: <a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft3util.h</a>
+</li>
+<li>nfft_vrand_shifted_unit_double()
+: <a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft3util.h</a>
+</li>
+<li>nfft_vrand_unit_complex()
+: <a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft3util.h</a>
+</li>
+<li>NFSFT_BREAK_EVEN
+: <a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_NFFT_CUTOFF
+: <a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_THRESHOLD
+: <a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">nfsft.c</a>
+</li>
+<li>nfst_full_psi()
+: <a class="el" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">nfft3.h</a>
+</li>
+<li>nfst_prod_minus_a_int()
+: <a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfft3util.h</a>
+</li>
+<li>nfst_trafo()
+: <a class="el" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">nfft3.h</a>
+</li>
+<li>nnfft_precompute_full_psi()
+: <a class="el" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">nfft3.h</a>
+</li>
+<li>nnfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">nfft3.h</a>
+</li>
+<li>nnfft_precompute_phi_hut()
+: <a class="el" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">nfft3.h</a>
+</li>
+<li>nnfft_trafo()
+: <a class="el" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">nfft3.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x70.html b/doc/api/html/globals_0x70.html
new file mode 100644
index 0000000..0241fbb
--- /dev/null
+++ b/doc/api/html/globals_0x70.html
@@ -0,0 +1,88 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PI
+: <a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">nfft3util.h</a>
+</li>
+<li>polar_dft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_fft_test.c</a>
+</li>
+<li>polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft_test.c</a>
+</li>
+<li>polar_grid()
+: <a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_fft_test.c</a>
+, <a class="el" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">radon.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x71.html b/doc/api/html/globals_0x71.html
new file mode 100644
index 0000000..02e10af
--- /dev/null
+++ b/doc/api/html/globals_0x71.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>quicksort()
+: <a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x72.html b/doc/api/html/globals_0x72.html
new file mode 100644
index 0000000..c2f9b02
--- /dev/null
+++ b/doc/api/html/globals_0x72.html
@@ -0,0 +1,90 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li class="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>Radon_trafo()
+: <a class="el" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">radon.c</a>
+</li>
+<li>regkern()
+: <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.c</a>
+, <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.h</a>
+</li>
+<li>regkern1()
+: <a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">fastsum.c</a>
+</li>
+<li>regkern2()
+: <a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">fastsum.c</a>
+</li>
+<li>regkern3()
+: <a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x73.html b/doc/api/html/globals_0x73.html
new file mode 100644
index 0000000..f639872
--- /dev/null
+++ b/doc/api/html/globals_0x73.html
@@ -0,0 +1,158 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li class="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SearchBox()
+: <a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">fastsum.c</a>
+</li>
+<li>SearchTree()
+: <a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">fastsum.c</a>
+</li>
+<li>SO3_alpha()
+: <a class="el" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">wigner.h</a>
+</li>
+<li>SO3_alpha_all()
+: <a class="el" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">wigner.h</a>
+</li>
+<li>SO3_alpha_matrix()
+: <a class="el" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">wigner.h</a>
+</li>
+<li>SO3_alpha_row()
+: <a class="el" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">wigner.h</a>
+</li>
+<li>SO3_beta()
+: <a class="el" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">wigner.h</a>
+</li>
+<li>SO3_beta_all()
+: <a class="el" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">wigner.h</a>
+</li>
+<li>SO3_beta_matrix()
+: <a class="el" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">wigner.h</a>
+</li>
+<li>SO3_beta_row()
+: <a class="el" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">wigner.h</a>
+</li>
+<li>SO3_gamma()
+: <a class="el" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">wigner.h</a>
+</li>
+<li>SO3_gamma_all()
+: <a class="el" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">wigner.h</a>
+</li>
+<li>SO3_gamma_matrix()
+: <a class="el" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">wigner.h</a>
+</li>
+<li>SO3_gamma_row()
+: <a class="el" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">wigner.h</a>
+</li>
+<li>solver_finalize_complex()
+: <a class="el" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709">nfft3.h</a>
+</li>
+<li>solver_finalize_double()
+: <a class="el" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">solver.c</a>
+</li>
+<li>solver_init_advanced_double()
+: <a class="el" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80">nfft3.h</a>
+, <a class="el" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_complex()
+: <a class="el" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_double()
+: <a class="el" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_complex()
+: <a class="el" href="solver_8c.html#a376190a64969829c029532fd0957e184">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_double()
+: <a class="el" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">solver.c</a>
+</li>
+<li>solver_loop_one_step_complex()
+: <a class="el" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420">nfft3.h</a>
+</li>
+<li>solver_loop_one_step_double()
+: <a class="el" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_complex()
+: <a class="el" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_double()
+: <a class="el" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_complex()
+: <a class="el" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_double()
+: <a class="el" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">solver.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x74.html b/doc/api/html/globals_0x74.html
new file mode 100644
index 0000000..fe07a6e
--- /dev/null
+++ b/doc/api/html/globals_0x74.html
@@ -0,0 +1,89 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>taylor_finalize()
+: <a class="el" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">taylor_nfft.c</a>
+</li>
+<li>taylor_init()
+: <a class="el" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">taylor_nfft.c</a>
+</li>
+<li>taylor_precompute()
+: <a class="el" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">taylor_nfft.c</a>
+</li>
+<li>taylor_time_accuracy()
+: <a class="el" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">taylor_nfft.c</a>
+</li>
+<li>taylor_trafo()
+: <a class="el" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">taylor_nfft.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_0x77.html b/doc/api/html/globals_0x77.html
new file mode 100644
index 0000000..ef0dae5
--- /dev/null
+++ b/doc/api/html/globals_0x77.html
@@ -0,0 +1,80 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+      <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+      <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+      <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>wigner_start()
+: <a class="el" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">wigner.h</a>
+</li>
+<li>wisdom
+: <a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">nfsft.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_defs.html b/doc/api/html/globals_defs.html
new file mode 100644
index 0000000..38cbda4
--- /dev/null
+++ b/doc/api/html/globals_defs.html
@@ -0,0 +1,105 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li class="current"><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>EXACT_NEARFIELD
+: <a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">fastsum.h</a>
+</li>
+<li>FIRST_L
+: <a class="el" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">fpt.c</a>
+</li>
+<li>K_END_TILDE
+: <a class="el" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">fpt.c</a>
+</li>
+<li>K_START_TILDE
+: <a class="el" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">fpt.c</a>
+</li>
+<li>KERNEL
+: <a class="el" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">radon.c</a>
+</li>
+<li>LAST_L
+: <a class="el" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">fpt.c</a>
+</li>
+<li>MACRO_MV_PLAN
+: <a class="el" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">nfft3.h</a>
+</li>
+<li>MACRO_SOLVER_ADJOINT_PLAN
+: <a class="el" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">solver_adjoint.h</a>
+</li>
+<li>NF_KUB
+: <a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">fastsum.h</a>
+</li>
+<li>NFFT_MAX
+: <a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">nfft3util.h</a>
+</li>
+<li>NFFT_MIN
+: <a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_complex
+: <a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_double
+: <a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">nfft3util.h</a>
+</li>
+<li>NFSFT_BREAK_EVEN
+: <a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_NFFT_CUTOFF
+: <a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_THRESHOLD
+: <a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">nfsft.c</a>
+</li>
+<li>PI
+: <a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">nfft3util.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_func.html b/doc/api/html/globals_func.html
new file mode 100644
index 0000000..b3a6c14
--- /dev/null
+++ b/doc/api/html/globals_func.html
@@ -0,0 +1,633 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_b"><span>b</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_e"><span>e</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_k"><span>k</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_q"><span>q</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_s"><span>s</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_w"><span>w</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ 
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BasisPoly()
+: <a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">fastsum.c</a>
+</li>
+<li>binom()
+: <a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">fastsum.c</a>
+</li>
+<li>BuildBox()
+: <a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">fastsum.c</a>
+</li>
+<li>BuildTree()
+: <a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c2e()
+: <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">nfsft.c</a>
+</li>
+<li>c2e_transposed()
+: <a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">nfsft.c</a>
+</li>
+<li>calc_SearchBox()
+: <a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">fastsum.c</a>
+</li>
+<li>comparison_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">linogram_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">mpolar_fft_test.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eval_sum_clenshaw_transposed()
+: <a class="el" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">fpt.c</a>
+</li>
+<li>eval_wigner()
+: <a class="el" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">wigner.h</a>
+</li>
+<li>eval_wigner_thresh()
+: <a class="el" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">wigner.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fak()
+: <a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fastsum.c</a>
+</li>
+<li>fastsum_exact()
+: <a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum.c</a>
+</li>
+<li>fastsum_finalize()
+: <a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum.c</a>
+</li>
+<li>fastsum_init_guru()
+: <a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum.c</a>
+</li>
+<li>fastsum_precompute()
+: <a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum.c</a>
+</li>
+<li>fastsum_trafo()
+: <a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>imri_inh_2d1d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a39cce38619ea8d9ce84326173e2d091b">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a7b403058cdba0d2918690b2d1d577912">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae0f7ba8180888f8f70aff1b041f4ec57">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a61bb41310d86e96ad1912ce486930bea">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a84b7c58708fe95ff8234638689a30302">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a9a8864136de1ff61970eeed934350238">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c6fe11c01d742025c7eb7bf7ac9002">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a6275d93dac2957a4acad3bda978c98cd">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#afb6ade8e78c1dfdc7e513c6e8fa7ffb6">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a7e65b366bd5003cef9c16e640591b972">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a7bfc5594bbdc3d6c58fb10713a03bc40">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c89f97b3f452ee3aedb245d064f24e">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a695c20cc98df4bbd370240bee9703e77">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a4fcee80a5fbbe901b8d51717dc07ae24">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a36eef8da31026b71a865108b095768cc">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a2a31ddf66394b88a4dd1545278e205b5">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a826591281cbec37c2a032eaecbbacf9d">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae93aa72dcb2528111f021c952482c244">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#adf47a7ff42ca521526db42b4d3a68f98">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a219ff15a153205b04eec76860cb4d6eb">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a26dbcae80a2db01144d523cb3d22a01d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#adb479e2343fef9fbafdc5d8d65085aee">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a040cb361de66313ccbad17f746cc748d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a0a162589cc358719488082d0b3e42e0e">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a03fc19c8d3c7b8a49c8751a2a88e0d09">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a4a5720df6bfee236588f38e516e32c90">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a086451cc556027d5e909eb7d1c1249b7">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a332fad4381e89b483482e53fa39604e3">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#ac5ad72ccf1af482d623242389bc154b2">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a57df76147b89e6e204a465fd437fbaae">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a3c7be955a46b3d056b5d38324f2d2068">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a1316a1ad32f611899e446cd98d3b0b0d">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ab4dcbe373e99d9c010034c6eecdfea86">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#aac4fe9056cb5a96170ba6122e20d116a">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a9e80774fcedbd2a50e4146290de9ce3f">solver_adjoint.h</a>
+</li>
+<li>inverse_linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">linogram_fft_test.c</a>
+</li>
+<li>inverse_mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">mpolar_fft_test.c</a>
+</li>
+<li>inverse_polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">polar_fft_test.c</a>
+</li>
+<li>Inverse_Radon_trafo()
+: <a class="el" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">inverse_radon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kubintkern()
+: <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.c</a>
+, <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.h</a>
+</li>
+<li>kubintkern1()
+: <a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>linintkern()
+: <a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">fastsum.c</a>
+</li>
+<li>linogram_dft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_fft_test.c</a>
+</li>
+<li>linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft_test.c</a>
+</li>
+<li>linogram_grid()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_fft_test.c</a>
+, <a class="el" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">radon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">linogram_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">mpolar_fft_test.c</a>
+, <a class="el" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">radon.c</a>
+, <a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">polar_fft_test.c</a>
+</li>
+<li>max_i()
+: <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">fastsum.c</a>
+</li>
+<li>mpolar_dft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_grid()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_fft_test.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nfft_bspline()
+: <a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft3util.h</a>
+</li>
+<li>nfft_bspline_old()
+: <a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_complex()
+: <a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_double()
+: <a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft3util.h</a>
+</li>
+<li>nfft_cp_complex()
+: <a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft3util.h</a>
+</li>
+<li>nfft_cp_double()
+: <a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_complex()
+: <a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_double()
+: <a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft3util.h</a>
+</li>
+<li>nfft_dot_complex()
+: <a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft3util.h</a>
+</li>
+<li>nfft_dot_double()
+: <a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft3util.h</a>
+</li>
+<li>nfft_dot_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_complex()
+: <a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_double()
+: <a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft3util.h</a>
+</li>
+<li>nfft_fftshift_complex()
+: <a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft3util.h</a>
+</li>
+<li>nfft_free()
+: <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft3.h</a>
+</li>
+<li>nfft_malloc()
+: <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft3.h</a>
+</li>
+<li>nfft_modified_fejer()
+: <a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson2()
+: <a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson4()
+: <a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft3util.h</a>
+</li>
+<li>nfft_modified_multiquadric()
+: <a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft3util.h</a>
+</li>
+<li>nfft_modified_sobolev()
+: <a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft3util.h</a>
+</li>
+<li>nfft_plain_loop()
+: <a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft3util.h</a>
+</li>
+<li>nfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc">nfft3.h</a>
+</li>
+<li>nfft_prod_int()
+: <a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft3util.h</a>
+</li>
+<li>nfft_prod_real()
+: <a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft3util.h</a>
+</li>
+<li>nfft_smbi()
+: <a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_lsdf()
+: <a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_msdf()
+: <a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft3util.h</a>
+</li>
+<li>nfft_trafo()
+: <a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421">nfft3.h</a>
+</li>
+<li>nfft_upd_axpby_complex()
+: <a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpby_double()
+: <a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_complex()
+: <a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_double()
+: <a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_complex()
+: <a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_double()
+: <a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_complex()
+: <a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_double()
+: <a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_complex()
+: <a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_double()
+: <a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_1d()
+: <a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_S2()
+: <a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft3util.h</a>
+</li>
+<li>nfft_vpr_complex()
+: <a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft3util.h</a>
+</li>
+<li>nfft_vpr_double()
+: <a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft3util.h</a>
+</li>
+<li>nfft_vpr_int()
+: <a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft3util.h</a>
+</li>
+<li>nfft_vrand_shifted_unit_double()
+: <a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft3util.h</a>
+</li>
+<li>nfft_vrand_unit_complex()
+: <a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft3util.h</a>
+</li>
+<li>nfst_full_psi()
+: <a class="el" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">nfft3.h</a>
+</li>
+<li>nfst_prod_minus_a_int()
+: <a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfft3util.h</a>
+</li>
+<li>nfst_trafo()
+: <a class="el" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">nfft3.h</a>
+</li>
+<li>nnfft_precompute_full_psi()
+: <a class="el" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">nfft3.h</a>
+</li>
+<li>nnfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">nfft3.h</a>
+</li>
+<li>nnfft_precompute_phi_hut()
+: <a class="el" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">nfft3.h</a>
+</li>
+<li>nnfft_trafo()
+: <a class="el" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">nfft3.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>polar_dft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_fft_test.c</a>
+</li>
+<li>polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft_test.c</a>
+</li>
+<li>polar_grid()
+: <a class="el" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">inverse_radon.c</a>
+, <a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_fft_test.c</a>
+, <a class="el" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">radon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>quicksort()
+: <a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>Radon_trafo()
+: <a class="el" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">radon.c</a>
+</li>
+<li>regkern()
+: <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.c</a>
+, <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.h</a>
+</li>
+<li>regkern1()
+: <a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">fastsum.c</a>
+</li>
+<li>regkern2()
+: <a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">fastsum.c</a>
+</li>
+<li>regkern3()
+: <a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SearchBox()
+: <a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">fastsum.c</a>
+</li>
+<li>SearchTree()
+: <a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">fastsum.c</a>
+</li>
+<li>SO3_alpha()
+: <a class="el" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">wigner.h</a>
+</li>
+<li>SO3_alpha_all()
+: <a class="el" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">wigner.h</a>
+</li>
+<li>SO3_alpha_matrix()
+: <a class="el" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">wigner.h</a>
+</li>
+<li>SO3_alpha_row()
+: <a class="el" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">wigner.h</a>
+</li>
+<li>SO3_beta()
+: <a class="el" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">wigner.h</a>
+</li>
+<li>SO3_beta_all()
+: <a class="el" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">wigner.h</a>
+</li>
+<li>SO3_beta_matrix()
+: <a class="el" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">wigner.h</a>
+</li>
+<li>SO3_beta_row()
+: <a class="el" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">wigner.h</a>
+</li>
+<li>SO3_gamma()
+: <a class="el" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">wigner.h</a>
+</li>
+<li>SO3_gamma_all()
+: <a class="el" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">wigner.h</a>
+</li>
+<li>SO3_gamma_matrix()
+: <a class="el" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">wigner.h</a>
+</li>
+<li>SO3_gamma_row()
+: <a class="el" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">wigner.h</a>
+</li>
+<li>solver_finalize_complex()
+: <a class="el" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709">nfft3.h</a>
+</li>
+<li>solver_finalize_double()
+: <a class="el" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">solver.c</a>
+</li>
+<li>solver_init_advanced_double()
+: <a class="el" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80">nfft3.h</a>
+, <a class="el" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_complex()
+: <a class="el" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_double()
+: <a class="el" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_complex()
+: <a class="el" href="solver_8c.html#a376190a64969829c029532fd0957e184">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_double()
+: <a class="el" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">solver.c</a>
+</li>
+<li>solver_loop_one_step_complex()
+: <a class="el" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420">nfft3.h</a>
+</li>
+<li>solver_loop_one_step_double()
+: <a class="el" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_complex()
+: <a class="el" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_double()
+: <a class="el" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_complex()
+: <a class="el" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_double()
+: <a class="el" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">solver.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>taylor_finalize()
+: <a class="el" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">taylor_nfft.c</a>
+</li>
+<li>taylor_init()
+: <a class="el" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">taylor_nfft.c</a>
+</li>
+<li>taylor_precompute()
+: <a class="el" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">taylor_nfft.c</a>
+</li>
+<li>taylor_time_accuracy()
+: <a class="el" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">taylor_nfft.c</a>
+</li>
+<li>taylor_trafo()
+: <a class="el" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">taylor_nfft.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>wigner_start()
+: <a class="el" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">wigner.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_type.html b/doc/api/html/globals_type.html
new file mode 100644
index 0000000..45e474c
--- /dev/null
+++ b/doc/api/html/globals_type.html
@@ -0,0 +1,80 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>fastsum_plan
+: <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum.h</a>
+</li>
+<li>fpt_data
+: <a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt.c</a>
+</li>
+<li>fpt_set
+: <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">nfft3.h</a>
+</li>
+<li>fpt_set_s
+: <a class="el" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8">fpt.c</a>
+</li>
+<li>fpt_step
+: <a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt.c</a>
+</li>
+<li>fptf_set
+: <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">nfft3.h</a>
+</li>
+<li>fptl_set
+: <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">nfft3.h</a>
+</li>
+<li>nfft_free_type_function
+: <a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft3.h</a>
+</li>
+<li>nfft_malloc_type_function
+: <a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft3.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/globals_vars.html b/doc/api/html/globals_vars.html
new file mode 100644
index 0000000..a63ce0a
--- /dev/null
+++ b/doc/api/html/globals_vars.html
@@ -0,0 +1,62 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Globals
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>nfft_free_hook
+: <a class="el" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft3.h</a>
+</li>
+<li>nfft_malloc_hook
+: <a class="el" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft3.h</a>
+</li>
+<li>wisdom
+: <a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">nfsft.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications.html b/doc/api/html/group__applications.html
new file mode 100644
index 0000000..169fa40
--- /dev/null
+++ b/doc/api/html/group__applications.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Applications
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Applications</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__fastgauss"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html">Fast Gauss transfrom with complex parameter</a></td></tr>
+<tr class="memitem:group__applications__fastsum"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html">Fast summation</a></td></tr>
+<tr class="memdesc:group__applications__fastsum"><td class="mdescLeft"> </td><td class="mdescRight">Required for test if (ths->k == one_over_x) <br/></td></tr>
+<tr class="memitem:group__applications__fastsumS2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2.html">Fast summation of radial functions on the sphere</a></td></tr>
+<tr class="memitem:group__applications__iterS2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2.html">Iterative reconstruction on the sphere S2</a></td></tr>
+<tr class="memitem:group__applications__mri"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri.html">Transforms in magnetic resonance imaging</a></td></tr>
+<tr class="memitem:group__applications__polarFFT"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></td></tr>
+<tr class="memitem:group__applications__quadratureS2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2.html">Fast evaluation of quadrature formulae on the sphere</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__fastgauss.html b/doc/api/html/group__applications__fastgauss.html
new file mode 100644
index 0000000..d7479f9
--- /dev/null
+++ b/doc/api/html/group__applications__fastgauss.html
@@ -0,0 +1,638 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Fast Gauss transfrom with complex parameter
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Fast Gauss transfrom with complex parameter</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html">fgt_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for the Gauss transform.  <a href="structfgt__plan.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga48aa1ec81a29b9f079701246f0b53ccc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc">DGT_PRE_CEXP</a>   (1U<< 0)</td></tr>
+<tr class="memdesc:ga48aa1ec81a29b9f079701246f0b53ccc"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom.  <a href="#ga48aa1ec81a29b9f079701246f0b53ccc"></a><br/></td></tr>
+<tr class="memitem:ga38ab7e1022ff3c5b556ce93078a05d1e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e">FGT_NDFT</a>   (1U<< 1)</td></tr>
+<tr class="memdesc:ga38ab7e1022ff3c5b556ce93078a05d1e"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform.  <a href="#ga38ab7e1022ff3c5b556ce93078a05d1e"></a><br/></td></tr>
+<tr class="memitem:ga39c3e544a78853e0da2b9a8c66d3054d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga39c3e544a78853e0da2b9a8c66d3054d">FGT_APPROX_B</a>   (1U<< 2)</td></tr>
+<tr class="memdesc:ga39c3e544a78853e0da2b9a8c66d3054d"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is set, the discrete Fourier coefficients of the uniformly sampled Gaussian are used instead of the sampled continuous Fourier transform.  <a href="#ga39c3e544a78853e0da2b9a8c66d3054d"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga42f141fc768ced46eb2dac284b063b80"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80">dgt_trafo</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga42f141fc768ced46eb2dac284b063b80"><td class="mdescLeft"> </td><td class="mdescRight">Executes the discrete Gauss transform.  <a href="#ga42f141fc768ced46eb2dac284b063b80"></a><br/></td></tr>
+<tr class="memitem:gab12b6f7c36927db24d8555484dcdfde0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0">fgt_trafo</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab12b6f7c36927db24d8555484dcdfde0"><td class="mdescLeft"> </td><td class="mdescRight">Executes the fast Gauss transform.  <a href="#gab12b6f7c36927db24d8555484dcdfde0"></a><br/></td></tr>
+<tr class="memitem:ga902eb9182c72c3c9293084a70523ebff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff">fgt_init_guru</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths, int N, int M, double _Complex sigma, int n, double p, int m, unsigned flags)</td></tr>
+<tr class="memdesc:ga902eb9182c72c3c9293084a70523ebff"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan, guru.  <a href="#ga902eb9182c72c3c9293084a70523ebff"></a><br/></td></tr>
+<tr class="memitem:ga44cf9a6fb0a16df875f613f343fd5c65"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65">fgt_init</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths, int N, int M, double _Complex sigma, double eps)</td></tr>
+<tr class="memdesc:ga44cf9a6fb0a16df875f613f343fd5c65"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan, simple.  <a href="#ga44cf9a6fb0a16df875f613f343fd5c65"></a><br/></td></tr>
+<tr class="memitem:ga9d8f6229d33bc49f618838b21b3dd7fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc">fgt_init_node_dependent</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga9d8f6229d33bc49f618838b21b3dd7fc"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan, depends on source and target nodes.  <a href="#ga9d8f6229d33bc49f618838b21b3dd7fc"></a><br/></td></tr>
+<tr class="memitem:ga4634fe28b9e1be61106871cf0e61ef83"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83">fgt_finalize</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga4634fe28b9e1be61106871cf0e61ef83"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the transform plan.  <a href="#ga4634fe28b9e1be61106871cf0e61ef83"></a><br/></td></tr>
+<tr class="memitem:ga317a464dbf2df948bb94ef5748710e57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57">fgt_test_init_rand</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga317a464dbf2df948bb94ef5748710e57"><td class="mdescLeft"> </td><td class="mdescRight">Random initialisation of a fgt plan.  <a href="#ga317a464dbf2df948bb94ef5748710e57"></a><br/></td></tr>
+<tr class="memitem:gabebca8cc0714b36c3b47e2a5d0317960"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960">fgt_test_measure_time</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths, unsigned dgt)</td></tr>
+<tr class="memdesc:gabebca8cc0714b36c3b47e2a5d0317960"><td class="mdescLeft"> </td><td class="mdescRight">Compares execution times for the fast and discrete Gauss transform.  <a href="#gabebca8cc0714b36c3b47e2a5d0317960"></a><br/></td></tr>
+<tr class="memitem:ga74b5dd8d6f593462a2b37b290ad4d227"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227">fgt_test_simple</a> (int N, int M, double _Complex sigma, double eps)</td></tr>
+<tr class="memdesc:ga74b5dd8d6f593462a2b37b290ad4d227"><td class="mdescLeft"> </td><td class="mdescRight">Simple example that computes fast and discrete Gauss transforms.  <a href="#ga74b5dd8d6f593462a2b37b290ad4d227"></a><br/></td></tr>
+<tr class="memitem:gaac05fa78924012be74e54ddbd098892f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f">fgt_test_andersson</a> (void)</td></tr>
+<tr class="memdesc:gaac05fa78924012be74e54ddbd098892f"><td class="mdescLeft"> </td><td class="mdescRight">Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree.  <a href="#gaac05fa78924012be74e54ddbd098892f"></a><br/></td></tr>
+<tr class="memitem:gaab0a7e29242524d33269448fc4612946"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946">fgt_test_error</a> (void)</td></tr>
+<tr class="memdesc:gaab0a7e29242524d33269448fc4612946"><td class="mdescLeft"> </td><td class="mdescRight">Compares accuracy of the fast Gauss transform with increasing expansion degree.  <a href="#gaab0a7e29242524d33269448fc4612946"></a><br/></td></tr>
+<tr class="memitem:gab68ea529a033a478a391243d8dacf61b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b">fgt_test_error_p</a> (void)</td></tr>
+<tr class="memdesc:gab68ea529a033a478a391243d8dacf61b"><td class="mdescLeft"> </td><td class="mdescRight">Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodisation lengths.  <a href="#gab68ea529a033a478a391243d8dacf61b"></a><br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">Different tests of the fast Gauss transform.  <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga48aa1ec81a29b9f079701246f0b53ccc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DGT_PRE_CEXP   (1U<< 0)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a> </dd>
+<dd>
+<a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a> </dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00048">48</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00240">fgt_init()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, and <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga38ab7e1022ff3c5b556ce93078a05d1e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FGT_NDFT   (1U<< 1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a> </dd>
+<dd>
+nfft_trafo_direct </dd>
+<dd>
+<a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a> </dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00059">59</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, and <a class="el" href="fastgauss_8c_source.html#l00132">fgt_trafo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga39c3e544a78853e0da2b9a8c66d3054d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FGT_APPROX_B   (1U<< 2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>If this flag is set, the discrete Fourier coefficients of the uniformly sampled Gaussian are used instead of the sampled continuous Fourier transform. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a> </dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00069">69</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga42f141fc768ced46eb2dac284b063b80"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dgt_trafo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Executes the discrete Gauss transform. </p>
+<ul>
+<li>ths The pointer to a fgt plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00107">107</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fgt_plan::flags</a>, <a class="el" href="fastgauss_8c_source.html#l00075">fgt_plan::M</a>, <a class="el" href="fastgauss_8c_source.html#l00074">fgt_plan::N</a>, <a class="el" href="fastgauss_8c_source.html#l000 [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, <a class="el" href="fastgauss_8c_source.html#l00341">fgt_test_measure_time()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab12b6f7c36927db24d8555484dcdfde0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_trafo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Executes the fast Gauss transform. </p>
+<ul>
+<li>ths The pointer to a fgt plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00132">132</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00093">fgt_plan::b</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="fastgauss_8c_source.html#l00059">FGT_NDFT</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fgt_plan::flags</a>, <a class="el" href="fastgauss_8c_source.html#l00090">fgt_plan::n</a>, <a class="el" href="nfft_8c_source.html#l05354">nfft_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00095">fgt_pla [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, <a class="el" href="fastgauss_8c_source.html#l00341">fgt_test_measure_time()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga902eb9182c72c3c9293084a70523ebff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_init_guru </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double _Complex </td>
+          <td class="paramname"><em>sigma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan, guru. </p>
+<ul>
+<li>ths The pointer to a fpt plan </li>
+<li>N The number of source nodes </li>
+<li>M The number of target nodes </li>
+<li>sigma The parameter of the Gaussian </li>
+<li>n The polynomial expansion degree </li>
+<li>p the periodisation length, at least 1 </li>
+<li>m The spatial cut-off of the nfft </li>
+<li>flags FGT flags to use</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00170">170</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00093">fgt_plan::b</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="fastgauss_8c_source.html#l00069">FGT_APPROX_B</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fg [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00240">fgt_init()</a>, <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, and <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga44cf9a6fb0a16df875f613f343fd5c65"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_init </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double _Complex </td>
+          <td class="paramname"><em>sigma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>eps</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan, simple. </p>
+<ul>
+<li>ths The pointer to a fpt plan </li>
+<li>N The number of source nodes </li>
+<li>M The number of target nodes </li>
+<li>sigma The parameter of the Gaussian </li>
+<li>eps The target accuracy</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00240">240</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, and <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9d8f6229d33bc49f618838b21b3dd7fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_init_node_dependent </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan, depends on source and target nodes. </p>
+<ul>
+<li>ths The pointer to a fpt plan <dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+</li>
+</ul>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00263">263</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fgt_plan::flags</a>, <a class="el" href="fastgauss_8c_source.html#l00075">fgt_plan::M</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::M_total</a>, <a class="el" href="fastgauss_8c_source.html#l00074">fgt_plan::N</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::nfft_flags</a>, <a class="el" href="nfft3_8h.html#aafe616743 [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4634fe28b9e1be61106871cf0e61ef83"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_finalize </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the transform plan. </p>
+<ul>
+<li>ths The pointer to the fgt plan <dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+</li>
+</ul>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00295">295</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00093">fgt_plan::b</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="fastgauss_8c_source.html#l00095">fgt_plan::nplan1</a>, <a class="el" href="fastgauss_8c_source.html#l00096">fgt_plan::nplan2</a>, <a class="el" href="fastgaus [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga317a464dbf2df948bb94ef5748710e57"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_test_init_rand </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Random initialisation of a fgt plan. </p>
+<ul>
+<li>ths The pointer to the fgt plan <dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+</li>
+</ul>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00318">318</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00075">fgt_plan::M</a>, <a class="el" href="fastgauss_8c_source.html#l00074">fgt_plan::N</a>, <a class="el" href="fastgauss_8c_source.html#l00085">fgt_plan::x</a>, and <a class="el" href="fastgauss_8c_source.html#l00086">fgt_plan::y</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabebca8cc0714b36c3b47e2a5d0317960"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double fgt_test_measure_time </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>dgt</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compares execution times for the fast and discrete Gauss transform. </p>
+<ul>
+<li>ths The pointer to the fgt plan </li>
+<li>dgt If this parameter is set <a class="el" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80">dgt_trafo</a> is called as well</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00341">341</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, and <a class="el" href="fastgauss_8c_source.html#l00132">fgt_trafo()</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga74b5dd8d6f593462a2b37b290ad4d227"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_test_simple </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double _Complex </td>
+          <td class="paramname"><em>sigma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>eps</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple example that computes fast and discrete Gauss transforms. </p>
+<ul>
+<li>ths The pointer to the fgt plan </li>
+<li>sigma The parameter of the Gaussian </li>
+<li>eps The target accuracy</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00375">375</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00240">fgt_init()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_sourc [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaac05fa78924012be74e54ddbd098892f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_test_andersson </td>
+          <td>(</td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree. </p>
+<p>Similar to the test in F. Andersson and G. Beylkin. The fast Gauss transform with double _Complex parameters. J. Comput. Physics 203 (2005) 274-286</p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00410">410</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaab0a7e29242524d33269448fc4612946"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_test_error </td>
+          <td>(</td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compares accuracy of the fast Gauss transform with increasing expansion degree. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00481">481</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_ [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab68ea529a033a478a391243d8dacf61b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fgt_test_error_p </td>
+          <td>(</td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodisation lengths. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00532">532</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_ [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>argv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Different tests of the fast Gauss transform. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00580">580</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsum.html b/doc/api/html/group__applications__fastsum.html
new file mode 100644
index 0000000..c6c5e26
--- /dev/null
+++ b/doc/api/html/group__applications__fastsum.html
@@ -0,0 +1,417 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Fast summation
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a> |
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Fast summation</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+
+<p>Required for test if (ths->k == one_over_x)  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__fastsum__matlab"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum__matlab.html">fastsum_matlab</a></td></tr>
+<tr class="memitem:group__applications__fastsum__test"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum__test.html">fastsum_test</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html">fastsum_plan_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm  <a href="structfastsum__plan__.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">NF_KUB</a></td></tr>
+<tr class="memdesc:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="mdescLeft"> </td><td class="mdescRight">Include header for C99 complex datatype.  <a href="#gafa2dd15778c93b2eaa42de608fb4d1a8"></a><br/></td></tr>
+<tr class="memitem:gac22376cb30edef9131c592a355d1030d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac22376cb30edef9131c592a355d1030d"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">EXACT_NEARFIELD</a>   (1U<< 0)</td></tr>
+<tr class="memdesc:gac22376cb30edef9131c592a355d1030d"><td class="mdescLeft"> </td><td class="mdescRight">Constant symbols. <br/></td></tr>
+<tr class="memitem:ga90e3c393cc832eec83e9da3b207edb8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga90e3c393cc832eec83e9da3b207edb8c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NEARFIELD_BOXES</b>   (1U<< 1)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga9227ba3791b3360dc4a0d6fbf82034c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9227ba3791b3360dc4a0d6fbf82034c6"></a>
+typedef double _Complex(* </td><td class="memItemRight" valign="bottom"><b>kernel</b> )(double, int, const double *)</td></tr>
+<tr class="memitem:gad953252f6b309404991c4afc7b98b34b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad953252f6b309404991c4afc7b98b34b"></a>
+typedef struct <a class="el" href="structfastsum__plan__.html">fastsum_plan_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a></td></tr>
+<tr class="memdesc:gad953252f6b309404991c4afc7b98b34b"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga37a2a7cb4fb162d6e6e46ea614318a4e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a> (int a, int b)</td></tr>
+<tr class="memdesc:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="mdescLeft"> </td><td class="mdescRight">max <br/></td></tr>
+<tr class="memitem:ga6fd3e84b794684dd1c6236619437bf09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6fd3e84b794684dd1c6236619437bf09"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fak</a> (int n)</td></tr>
+<tr class="memdesc:ga6fd3e84b794684dd1c6236619437bf09"><td class="mdescLeft"> </td><td class="mdescRight">factorial <br/></td></tr>
+<tr class="memitem:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae767db8af0cbe9244cfbd0580b0bb9f4"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">binom</a> (int n, int m)</td></tr>
+<tr class="memdesc:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="mdescLeft"> </td><td class="mdescRight">binomial coefficient <br/></td></tr>
+<tr class="memitem:ga0c4b940daf11ebe201355f43f26cddd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0c4b940daf11ebe201355f43f26cddd0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">BasisPoly</a> (int m, int r, double xx)</td></tr>
+<tr class="memdesc:ga0c4b940daf11ebe201355f43f26cddd0"><td class="mdescLeft"> </td><td class="mdescRight">basis polynomial for regularized kernel <br/></td></tr>
+<tr class="memitem:ga247527ab67657107225fa69882f0208c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga247527ab67657107225fa69882f0208c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">regkern</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga247527ab67657107225fa69882f0208c"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B smooth to zero <br/></td></tr>
+<tr class="memitem:gaf022589be0533270b476edc9b78928f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf022589be0533270b476edc9b78928f1"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">regkern1</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:gaf022589be0533270b476edc9b78928f1"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B periodized (used in 1D) <br/></td></tr>
+<tr class="memitem:ga461376a86ecb935b74e7bfa4c86275d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga461376a86ecb935b74e7bfa4c86275d9"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">regkern2</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga461376a86ecb935b74e7bfa4c86275d9"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored <br/></td></tr>
+<tr class="memitem:ga2077aec7b505fd6bf082c28cc5d59468"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2077aec7b505fd6bf082c28cc5d59468"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">regkern3</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga2077aec7b505fd6bf082c28cc5d59468"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD, d>1) <br/></td></tr>
+<tr class="memitem:gae23df7b1c09c2955895545e164bc9e99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae23df7b1c09c2955895545e164bc9e99"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">linintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gae23df7b1c09c2955895545e164bc9e99"><td class="mdescLeft"> </td><td class="mdescRight">linear spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gabad684b95fbab7d2c039bec72bff712e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabad684b95fbab7d2c039bec72bff712e"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>quadrintkern</b> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memitem:ga67103860c05f7296f7c302e7f0dbfe79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67103860c05f7296f7c302e7f0dbfe79"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">kubintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:ga67103860c05f7296f7c302e7f0dbfe79"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gad527763b180de164610e55a704c69116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad527763b180de164610e55a704c69116"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">kubintkern1</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gad527763b180de164610e55a704c69116"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with arbitrary kernels <br/></td></tr>
+<tr class="memitem:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7d3d3786f2e799dc1fa1704281f4a3fe"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">quicksort</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="mdescLeft"> </td><td class="mdescRight">quicksort algorithm for source knots and associated coefficients <br/></td></tr>
+<tr class="memitem:ga8237ee0c81a2518c4849e71317a479d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8237ee0c81a2518c4849e71317a479d0"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">BuildBox</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga8237ee0c81a2518c4849e71317a479d0"><td class="mdescLeft"> </td><td class="mdescRight">initialize box-based search data structures <br/></td></tr>
+<tr class="memitem:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga15df6167d1d2dd375cb81e81a969cf9d"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">calc_SearchBox</a> (int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)</td></tr>
+<tr class="memdesc:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="mdescLeft"> </td><td class="mdescRight">inner computation function for box-based near field correction <br/></td></tr>
+<tr class="memitem:gae5d00a6d73390cc05d73aeca17028fc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae5d00a6d73390cc05d73aeca17028fc5"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">SearchBox</a> (double *y, <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gae5d00a6d73390cc05d73aeca17028fc5"><td class="mdescLeft"> </td><td class="mdescRight">box-based near field correction <br/></td></tr>
+<tr class="memitem:ga61bae6836e2c586b9de245b664853174"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga61bae6836e2c586b9de245b664853174"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">BuildTree</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga61bae6836e2c586b9de245b664853174"><td class="mdescLeft"> </td><td class="mdescRight">recursive sort of source knots dimension by dimension to get tree structure <br/></td></tr>
+<tr class="memitem:gab5a71f2cd5581bfa121b77aa6c981104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab5a71f2cd5581bfa121b77aa6c981104"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">SearchTree</a> (const int d, const int t, const double *x, const double _Complex *alpha, const double *xmin, const double *xmax, const int N, const kernel k, const double *param, const int Ad, const double _Complex *Add, const int p, const unsigned flags)</td></tr>
+<tr class="memdesc:gab5a71f2cd5581bfa121b77aa6c981104"><td class="mdescLeft"> </td><td class="mdescRight">fast search in tree of source knots for near field computation <br/></td></tr>
+<tr class="memitem:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum_init_guru</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double e [...]
+<tr class="memdesc:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="mdescLeft"> </td><td class="mdescRight">initialization of fastsum plan  <a href="#ga9a053d513b2eb19c5f1c70f16e0ae149"></a><br/></td></tr>
+<tr class="memitem:gab989ea4659fe681bd4c025e82756f769"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum_finalize</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab989ea4659fe681bd4c025e82756f769"><td class="mdescLeft"> </td><td class="mdescRight">finalization of fastsum plan  <a href="#gab989ea4659fe681bd4c025e82756f769"></a><br/></td></tr>
+<tr class="memitem:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum_exact</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="mdescLeft"> </td><td class="mdescRight">direct computation of sums  <a href="#gaaee3dd954ffc99e4330fabe16ccad0fd"></a><br/></td></tr>
+<tr class="memitem:ga197c16fcec7935886fc97d140f2b20ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum_precompute</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga197c16fcec7935886fc97d140f2b20ff"><td class="mdescLeft"> </td><td class="mdescRight">precomputation for fastsum  <a href="#ga197c16fcec7935886fc97d140f2b20ff"></a><br/></td></tr>
+<tr class="memitem:gaab2cc691ba59064c18d439c9fd2185e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum_trafo</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaab2cc691ba59064c18d439c9fd2185e8"><td class="mdescLeft"> </td><td class="mdescRight">fast NFFT-based summation  <a href="#gaab2cc691ba59064c18d439c9fd2185e8"></a><br/></td></tr>
+<tr class="memitem:ga81bf029788afe857325a760743f9fdd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81bf029788afe857325a760743f9fdd3"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>gaussian</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga44a58143a1f5c79b45c538134117e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga44a58143a1f5c79b45c538134117e091"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga889c2a1791e42bb8fa5a594588d68a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga889c2a1791e42bb8fa5a594588d68a5c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga91be4b7bcc7d3a415e6b9b6ccaec39a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga91be4b7bcc7d3a415e6b9b6ccaec39a7"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>logarithm</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga7723414bb26fd9b1cc76686aeca57425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7723414bb26fd9b1cc76686aeca57425"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>thinplate_spline</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gaed5f8559b7b7a24674318cb58856602b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed5f8559b7b7a24674318cb58856602b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_square</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga635ef40090e33b4917a20ab62913ef05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga635ef40090e33b4917a20ab62913ef05"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_modulus</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga6a6096569616d5cf9604c514f925581b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a6096569616d5cf9604c514f925581b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_x</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga221604ef3a42dc2de4f1ce68831e7524"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga221604ef3a42dc2de4f1ce68831e7524"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric3</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga8946fd3f992262c24477b56cba844873"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8946fd3f992262c24477b56cba844873"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>sinc_kernel</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gab7b7015bc5f2946583e7adbecb2cf630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b7015bc5f2946583e7adbecb2cf630"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>cosc</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gac693b76a84e9435efc06c1ef26fc7435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac693b76a84e9435efc06c1ef26fc7435"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>kcot</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga1deb0e10a0d6cf7f11d8b90ee008eb53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1deb0e10a0d6cf7f11d8b90ee008eb53"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_cube</b> (double x, int der, const double *param)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<p>Required for test if (ths->k == one_over_x) </p>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="gafa2dd15778c93b2eaa42de608fb4d1a8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NF_KUB</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Include header for C99 complex datatype. </p>
+<p>Include header for utils from NFFT3 library. Include header for NFFT3 library. </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00053">53</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga9a053d513b2eb19c5f1c70f16e0ae149"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fastsum_init_guru </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>d</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N_total</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M_total</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">kernel </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>param</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>nn</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>eps_I</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>eps_B</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>initialization of fastsum plan </p>
+<p>initialize fast summation plan</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+    <tr><td class="paramname">d</td><td>The dimension of the problem. </td></tr>
+    <tr><td class="paramname">N_total</td><td>The number of source knots x. </td></tr>
+    <tr><td class="paramname">M_total</td><td>The number of target knots y. </td></tr>
+    <tr><td class="paramname">kernel</td><td>The kernel function. </td></tr>
+    <tr><td class="paramname">param</td><td>The parameters for the kernel function. </td></tr>
+    <tr><td class="paramname">flags</td><td>Fastsum flags. </td></tr>
+    <tr><td class="paramname">nn</td><td>The expansion degree. </td></tr>
+    <tr><td class="paramname">m</td><td>The cut-off parameter for the NFFT. </td></tr>
+    <tr><td class="paramname">p</td><td>The degree of smoothness. </td></tr>
+    <tr><td class="paramname">eps_I</td><td>The inner boundary. </td></tr>
+    <tr><td class="paramname">eps_B</td><td>the outer boundary. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00600">600</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00108">fastsum_plan_::Ad</a>, <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8h_source.html#l00075">fastsum_plan_::d</a>, <a class="el" href="fastsum_8h_source.html#l00102">fastsum_plan_::eps_B</a>, <a class="el" href="fastsum_8 [...]
+
+</div>
+</div>
+<a class="anchor" id="gab989ea4659fe681bd4c025e82756f769"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fastsum_finalize </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>finalization of fastsum plan </p>
+<p>finalize plan</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00742">742</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8h_source.html#l00066">EXACT_NEARFIELD</a>, <a class="el" href="fastsum_8h_source.html#l00081">fastsum_plan_::f</a>, <a class="el" href="fastsum_8h_source.html#l00089">fastsum_plan_::flags</a>, <a class="el" href="fastsum_8h_ [...]
+
+</div>
+</div>
+<a class="anchor" id="gaaee3dd954ffc99e4330fabe16ccad0fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fastsum_exact </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>direct computation of sums </p>
+<p>direct summation</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00775">775</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00075">fastsum_plan_::d</a>, <a class="el" href="fastsum_8h_source.html#l00081">fastsum_plan_::f</a>, <a class="el" href="fastsum_8h_source.html#l00086">fastsum_plan_::k</a>, <a class="el" href="fastsum_8h_source.html#l00087">fastsum_plan_::kernel_param</a>, <a class="el" href="fastsum_8h_source.html#l00078">fastsum_plan_::M_total</a>, <a class="el" href= [...]
+
+</div>
+</div>
+<a class="anchor" id="ga197c16fcec7935886fc97d140f2b20ff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fastsum_precompute </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>precomputation for fastsum </p>
+<p>sort source nodes, precompute Fourier coefficients, etc.</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00802">802</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00108">fastsum_plan_::Ad</a>, <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8c_source.html#l00363">BuildBox()</a>, <a class="el" href="fastsum_8c_source.html#l00510">BuildTree()</a>, <a class="el" href="fastsum_8h_source.html#l [...]
+
+</div>
+</div>
+<a class="anchor" id="gaab2cc691ba59064c18d439c9fd2185e8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void fastsum_trafo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>fast NFFT-based summation </p>
+<p>fast NFFT-based summation algorithm</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00940">940</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00108">fastsum_plan_::Ad</a>, <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8h_source.html#l00075">fastsum_plan_::d</a>, <a class="el" href="fastsum_8h_source.html#l00101">fastsum_plan_::eps_I</a>, <a class="el" href="fastsum_8 [...]
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsumS2.html b/doc/api/html/group__applications__fastsumS2.html
new file mode 100644
index 0000000..1c8f80e
--- /dev/null
+++ b/doc/api/html/group__applications__fastsumS2.html
@@ -0,0 +1,48 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Fast summation of radial functions on the sphere
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Fast summation of radial functions on the sphere</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__fastsumS2__test"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html">fastsumS2_matlab</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsumS2__test.html b/doc/api/html/group__applications__fastsumS2__test.html
new file mode 100644
index 0000000..273191c
--- /dev/null
+++ b/doc/api/html/group__applications__fastsumS2__test.html
@@ -0,0 +1,381 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsumS2_matlab
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsumS2_matlab</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__fastsumS2.html">Fast summation of radial functions on the sphere</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga0512f12a35b9bcac68ac0d36cd9b50d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0512f12a35b9bcac68ac0d36cd9b50d5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SYMBOL_ABEL_POISSON</b>(k, h)   (pow(h,k))</td></tr>
+<tr class="memitem:ga580e1a9e3fba99e0750908b58010dc00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga580e1a9e3fba99e0750908b58010dc00"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SYMBOL_SINGULARITY</b>(k, h)   ((2.0/(2*k+1))*pow(h,k))</td></tr>
+<tr class="memitem:ga0452118afd292fc346ed8116915d001e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0452118afd292fc346ed8116915d001e"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e">KT_ABEL_POISSON</a>   (0)</td></tr>
+<tr class="memdesc:ga0452118afd292fc346ed8116915d001e"><td class="mdescLeft"> </td><td class="mdescRight">Abel-Poisson kernel. <br/></td></tr>
+<tr class="memitem:ga814ba1b58f017f7a67a85f68d4719814"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga814ba1b58f017f7a67a85f68d4719814"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814">KT_SINGULARITY</a>   (1)</td></tr>
+<tr class="memdesc:ga814ba1b58f017f7a67a85f68d4719814"><td class="mdescLeft"> </td><td class="mdescRight">Singularity kernel. <br/></td></tr>
+<tr class="memitem:gae2a54d1d59448d9f02697f89a6ec7306"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae2a54d1d59448d9f02697f89a6ec7306"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306">KT_LOC_SUPP</a>   (2)</td></tr>
+<tr class="memdesc:gae2a54d1d59448d9f02697f89a6ec7306"><td class="mdescLeft"> </td><td class="mdescRight">Locally supported kernel. <br/></td></tr>
+<tr class="memitem:ga3a03d7fde39f1ba22a4549e72c8cbf39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3a03d7fde39f1ba22a4549e72c8cbf39"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39">KT_GAUSSIAN</a>   (3)</td></tr>
+<tr class="memdesc:ga3a03d7fde39f1ba22a4549e72c8cbf39"><td class="mdescLeft"> </td><td class="mdescRight">Gaussian kernel. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gad09943f93b91eb526d8081a4963eead8"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#gad09943f93b91eb526d8081a4963eead8">pvalue</a> { <b>NO</b> =  0, 
+<b>YES</b> =  1, 
+<b>BOTH</b> =  2
+ }</td></tr>
+<tr class="memdesc:gad09943f93b91eb526d8081a4963eead8"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration type for yes/no/both-type parameters. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga764f956ac40df99e776155bfa8da2e93"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93">innerProduct</a> (const double phi1, const double theta1, const double phi2, const double theta2)</td></tr>
+<tr class="memdesc:ga764f956ac40df99e776155bfa8da2e93"><td class="mdescLeft"> </td><td class="mdescRight">Computes the <img class="formulaInl" alt="$\mathbb{R}^3$" src="form_96.png"/> standard inner product between two vectors on the unit sphere <img class="formulaInl" alt="$\mathbb{S}^2$" src="form_97.png"/> given in spherical coordinates.  <a href="#ga764f956ac40df99e776155bfa8da2e93"></a><br/></td></tr>
+<tr class="memitem:ga6db9bf5c4ee6ca573d6d08a8202a5314"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314">poissonKernel</a> (const double x, const double h)</td></tr>
+<tr class="memdesc:ga6db9bf5c4ee6ca573d6d08a8202a5314"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the Poisson kernel <img class="formulaInl" alt="$Q_h: [-1,1] \rightarrow \mathbb{R}$" src="form_103.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>.  <a href="#ga6db9bf5c4ee6ca573d6d08a8202a5314"></a><br/></td></tr>
+<tr class="memitem:ga3f82140c739f6fcf9bc17a03a09f580d"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d">singularityKernel</a> (const double x, const double h)</td></tr>
+<tr class="memdesc:ga3f82140c739f6fcf9bc17a03a09f580d"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the singularity kernel <img class="formulaInl" alt="$S_h: [-1,1] \rightarrow \mathbb{R}$" src="form_107.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>.  <a href="#ga3f82140c739f6fcf9bc17a03a09f580d"></a><br/></td></tr>
+<tr class="memitem:ga226aec741614e0a2d2a9305bc2c28063"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063">locallySupportedKernel</a> (const double x, const double h, const double lambda)</td></tr>
+<tr class="memdesc:ga226aec741614e0a2d2a9305bc2c28063"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the locally supported kernel <img class="formulaInl" alt="$L_{h,\lambda}: [-1,1] \rightarrow \mathbb{R}$" src="form_109.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>.  <a href="#ga226aec741614e0a2d2a9305bc2c28063"></a><br/></td></tr>
+<tr class="memitem:ga22bfa09881115e4c4f8fef59538d1ce7"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7">gaussianKernel</a> (const double x, const double sigma)</td></tr>
+<tr class="memdesc:ga22bfa09881115e4c4f8fef59538d1ce7"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the spherical Gaussian kernel <img class="formulaInl" alt="$G_\sigma: [-1,1] \rightarrow \mathbb{R}$" src="form_112.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>.  <a href="#ga22bfa09881115e4c4f8fef59538d1ce7"></a><br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">The main program.  <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga764f956ac40df99e776155bfa8da2e93"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static double innerProduct </td>
+          <td>(</td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>phi1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>theta1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>phi2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>theta2</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Computes the <img class="formulaInl" alt="$\mathbb{R}^3$" src="form_96.png"/> standard inner product between two vectors on the unit sphere <img class="formulaInl" alt="$\mathbb{S}^2$" src="form_97.png"/> given in spherical coordinates. </p>
+<ul>
+<li>phi1 The angle <img class="formulaInl" alt="$\varphi_1 \in [-\pi,\pi)$" src="form_98.png"/> of the first vector </li>
+<li>theta1 The angle <img class="formulaInl" alt="$\vartheta_1 \in [0,\pi]$" src="form_99.png"/> of the first vector </li>
+<li>phi2 The angle <img class="formulaInl" alt="$\varphi_2 \in [-\pi,\pi)$" src="form_100.png"/> of the second vector </li>
+<li>theta2 The angle <img class="formulaInl" alt="$\vartheta_2 \in [0,\pi]$" src="form_101.png"/> of the second vector</li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The inner product <img class="formulaInl" alt="$\cos \vartheta_1 \cos \vartheta_2 + \sin \vartheta_1 \sin(\vartheta_2 \cos(\varphi_1 - \varphi_2)$" src="form_102.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00078">78</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6db9bf5c4ee6ca573d6d08a8202a5314"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static double poissonKernel </td>
+          <td>(</td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>h</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the Poisson kernel <img class="formulaInl" alt="$Q_h: [-1,1] \rightarrow \mathbb{R}$" src="form_103.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>h The parameter <img class="formulaInl" alt="$h \in (0,1)$" src="form_105.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the Poisson kernel <img class="formulaInl" alt="$Q_h(x)$" src="form_106.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00097">97</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3f82140c739f6fcf9bc17a03a09f580d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static double singularityKernel </td>
+          <td>(</td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>h</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the singularity kernel <img class="formulaInl" alt="$S_h: [-1,1] \rightarrow \mathbb{R}$" src="form_107.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>h The parameter <img class="formulaInl" alt="$h \in (0,1)$" src="form_105.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the Poisson kernel <img class="formulaInl" alt="$S_h(x)$" src="form_108.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00113">113</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga226aec741614e0a2d2a9305bc2c28063"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static double locallySupportedKernel </td>
+          <td>(</td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>h</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>lambda</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the locally supported kernel <img class="formulaInl" alt="$L_{h,\lambda}: [-1,1] \rightarrow \mathbb{R}$" src="form_109.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>h The parameter <img class="formulaInl" alt="$h \in (0,1)$" src="form_105.png"/> </li>
+<li>lambda The parameter <img class="formulaInl" alt="$\lambda \in \mathbb{N}_0$" src="form_110.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the locally supported kernel <img class="formulaInl" alt="$L_{h,\lambda}(x)$" src="form_111.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00131">131</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga22bfa09881115e4c4f8fef59538d1ce7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static double gaussianKernel </td>
+          <td>(</td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>sigma</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the spherical Gaussian kernel <img class="formulaInl" alt="$G_\sigma: [-1,1] \rightarrow \mathbb{R}$" src="form_112.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>sigma The parameter <img class="formulaInl" alt="$\sigma \in \mathbb{R}_+$" src="form_113.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the pherical Gaussian kernel <img class="formulaInl" alt="$G_\sigma(x)$" src="form_114.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00149">149</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>argv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The main program. </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">argc</td><td>The number of arguments </td></tr>
+    <tr><td class="paramname">argv</td><td>An array containing the arguments as C-strings</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Exit code</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00164">164</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, <a class="el" href="fastsumS2_8c_source.html#l00149">gaussianKernel()</a>, <a class="el" href="fastsumS2_8c_source.html#l00078">innerProduct()</a>, <a class="el" href="fastsumS2_8c_source.html#l00053">KT_ABEL_POISSON</a>, <a class="el" href="fastsumS2_8c_source.html#l00059">KT_GAUSSIAN</a>, <a class="el" href="fastsumS2_8c_source.html#l [...]
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsum__matlab.html b/doc/api/html/group__applications__fastsum__matlab.html
new file mode 100644
index 0000000..eaa3be2
--- /dev/null
+++ b/doc/api/html/group__applications__fastsum__matlab.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_matlab
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum_matlab</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__fastsum.html">Fast summation</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsum__test.html b/doc/api/html/group__applications__fastsum__test.html
new file mode 100644
index 0000000..e5bf0f7
--- /dev/null
+++ b/doc/api/html/group__applications__fastsum__test.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_test
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum_test</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__fastsum.html">Fast summation</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__iterS2.html b/doc/api/html/group__applications__iterS2.html
new file mode 100644
index 0000000..dc3cec0
--- /dev/null
+++ b/doc/api/html/group__applications__iterS2.html
@@ -0,0 +1,48 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Iterative reconstruction on the sphere S2
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Iterative reconstruction on the sphere S2</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__iterS2__matlab"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2__matlab.html">iterS2_matlab</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__iterS2__matlab.html b/doc/api/html/group__applications__iterS2__matlab.html
new file mode 100644
index 0000000..64b8664
--- /dev/null
+++ b/doc/api/html/group__applications__iterS2__matlab.html
@@ -0,0 +1,101 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - iterS2_matlab
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">iterS2_matlab</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__iterS2.html">Iterative reconstruction on the sphere S2</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga7c6368b321bd9acd0149b030bb8275ed"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2__matlab.html#ga7c6368b321bd9acd0149b030bb8275ed">boolean</a> { <b>NO</b> =  0, 
+<b>YES</b> =  1, 
+<b>NO</b> =  0, 
+<b>YES</b> =  1
+ }</td></tr>
+<tr class="memdesc:ga7c6368b321bd9acd0149b030bb8275ed"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for parameter values. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2__matlab.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">The main program.  <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>argv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The main program. </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">argc</td><td>The number of arguments </td></tr>
+    <tr><td class="paramname">argv</td><td>An array containing the arguments as C-strings</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Exit code</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="iterS2_8c_source.html#l00058">58</a> of file <a class="el" href="iterS2_8c_source.html">iterS2.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00763">solver_plan_complex::dot_r_iter</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00763">solver_plan_complex::f_hat_iter</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::M_total</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N_total</a>, <a class="el" href [...]
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri.html b/doc/api/html/group__applications__mri.html
new file mode 100644
index 0000000..699a940
--- /dev/null
+++ b/doc/api/html/group__applications__mri.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Transforms in magnetic resonance imaging
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Transforms in magnetic resonance imaging</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__mri2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d.html">2D transforms</a></td></tr>
+<tr class="memitem:group__applications__mri3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d.html">3D transforms</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d.html b/doc/api/html/group__applications__mri2d.html
new file mode 100644
index 0000000..f55cc89
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - 2D transforms
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">2D transforms</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri.html">Transforms in magnetic resonance imaging</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__2d.html">construct_data_2d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__inh__2d1d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__2d1d.html">construct_data__inh_2d1d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__inh__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__3d.html">construct_data_inh_3d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__reconstruct__data__2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__2d.html">reconstruct_data_2d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__gridding"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__gridding.html">construct_data_gridding</a></td></tr>
+<tr class="memitem:group__applications__mri2d__reconstruct__data__inh__2d1d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__inh__2d1d.html">reconstruct_data__inh_2d1d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__reconstruct__data__inh__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__inh__3d.html">reconstruct_data_inh_3d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__inh__nnfft"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__nnfft.html">construct_data_inh_nnfft</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__2d.html b/doc/api/html/group__applications__mri2d__construct__data__2d.html
new file mode 100644
index 0000000..41901ef
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__2d.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_2d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data_2d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cad9b408cf07cdd4fa31da9c325dac5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">construct</a> (char *file, int N, int M)</td></tr>
+<tr class="memdesc:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="mdescLeft"> </td><td class="mdescRight">construct makes an 2d-nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__gridding.html b/doc/api/html/group__applications__mri2d__construct__data__gridding.html
new file mode 100644
index 0000000..585e622
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__gridding.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_gridding
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data_gridding</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaafaf486ca8f1725dce039d2e2d150340"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaafaf486ca8f1725dce039d2e2d150340"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340">reconstruct</a> (char *filename, int N, int M, int weight)</td></tr>
+<tr class="memdesc:gaafaf486ca8f1725dce039d2e2d150340"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes a 2d-adjoint-nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__inh__2d1d.html b/doc/api/html/group__applications__mri2d__construct__data__inh__2d1d.html
new file mode 100644
index 0000000..772ce26
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__inh__2d1d.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data__inh_2d1d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data__inh_2d1d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cad9b408cf07cdd4fa31da9c325dac5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">construct</a> (char *file, int N, int M)</td></tr>
+<tr class="memdesc:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="mdescLeft"> </td><td class="mdescRight">construct <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__inh__3d.html b/doc/api/html/group__applications__mri2d__construct__data__inh__3d.html
new file mode 100644
index 0000000..6cf315b
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__inh__3d.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_inh_3d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data_inh_3d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cad9b408cf07cdd4fa31da9c325dac5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">construct</a> (char *file, int N, int M)</td></tr>
+<tr class="memdesc:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="mdescLeft"> </td><td class="mdescRight">construct <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__inh__nnfft.html b/doc/api/html/group__applications__mri2d__construct__data__inh__nnfft.html
new file mode 100644
index 0000000..103c6ae
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__inh__nnfft.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_inh_nnfft
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data_inh_nnfft</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c">reconstruct</a> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memdesc:ga75582a0ebe96f1391e90db0053ee981c"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__reconstruct__data__2d.html b/doc/api/html/group__applications__mri2d__reconstruct__data__2d.html
new file mode 100644
index 0000000..bd6081e
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__reconstruct__data__2d.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_2d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">reconstruct_data_2d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c">reconstruct</a> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memdesc:ga75582a0ebe96f1391e90db0053ee981c"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an inverse 2d nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__reconstruct__data__inh__2d1d.html b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__2d1d.html
new file mode 100644
index 0000000..517f6ee
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__2d1d.html
@@ -0,0 +1,51 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data__inh_2d1d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">reconstruct_data__inh_2d1d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>reconstruct</b> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__reconstruct__data__inh__3d.html b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__3d.html
new file mode 100644
index 0000000..903f911
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__3d.html
@@ -0,0 +1,51 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_inh_3d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">reconstruct_data_inh_3d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>reconstruct</b> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d.html b/doc/api/html/group__applications__mri3d.html
new file mode 100644
index 0000000..6e21c3f
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - 3D transforms
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">3D transforms</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri.html">Transforms in magnetic resonance imaging</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__mri3d__construct__data__1d2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html">construct_data_1d2d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__construct__data__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__3d.html">construct_data_3d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__reconstruct__data__1d2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html">reconstruct_data_1d2d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__reconstruct__data__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__3d.html">reconstruct_data_3d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__reconstruct__data__gridding"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html">reconstruct_data_gridding</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__construct__data__1d2d.html b/doc/api/html/group__applications__mri3d__construct__data__1d2d.html
new file mode 100644
index 0000000..1b75b5f
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__construct__data__1d2d.html
@@ -0,0 +1,58 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_1d2d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data_1d2d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3b7e53294d00c663429518cb2f7c7791"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b7e53294d00c663429518cb2f7c7791"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791">construct</a> (char *file, int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:ga3b7e53294d00c663429518cb2f7c7791"><td class="mdescLeft"> </td><td class="mdescRight">construct makes an 2d-nfft for every slice <br/></td></tr>
+<tr class="memitem:gafa82bf5df93804a1760082b88492b8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafa82bf5df93804a1760082b88492b8d5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5">fft</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gafa82bf5df93804a1760082b88492b8d5"><td class="mdescLeft"> </td><td class="mdescRight">fft makes an 1D-ftt for every knot through all layers <br/></td></tr>
+<tr class="memitem:ga324751353a7eefbe2ad622201dd52d5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga324751353a7eefbe2ad622201dd52d5f"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f">read_data</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:ga324751353a7eefbe2ad622201dd52d5f"><td class="mdescLeft"> </td><td class="mdescRight">read fills the memory with the file input_data_f.dat as the real part of f and with zeros for the imag part of f <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__construct__data__3d.html b/doc/api/html/group__applications__mri3d__construct__data__3d.html
new file mode 100644
index 0000000..de2a591
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__construct__data__3d.html
@@ -0,0 +1,51 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - construct_data_3d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">construct_data_3d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf6e5c02bb968f96600d6f91018b38ee1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6e5c02bb968f96600d6f91018b38ee1"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>construct</b> (char *file, int N, int M, int Z)</td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__reconstruct__data__1d2d.html b/doc/api/html/group__applications__mri3d__reconstruct__data__1d2d.html
new file mode 100644
index 0000000..f39a095
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__reconstruct__data__1d2d.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_1d2d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">reconstruct_data_1d2d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad67335b03b6fec43e0dff3512c8f6d68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad67335b03b6fec43e0dff3512c8f6d68"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68">reconstruct</a> (char *filename, int N, int M, int Z, int iteration, int weight, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gad67335b03b6fec43e0dff3512c8f6d68"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an inverse 2d-nfft for every slice <br/></td></tr>
+<tr class="memitem:gaa30709aaef018deecdd911083fadb877"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa30709aaef018deecdd911083fadb877"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877">print</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gaa30709aaef018deecdd911083fadb877"><td class="mdescLeft"> </td><td class="mdescRight">print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__reconstruct__data__3d.html b/doc/api/html/group__applications__mri3d__reconstruct__data__3d.html
new file mode 100644
index 0000000..7c7160d
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__reconstruct__data__3d.html
@@ -0,0 +1,52 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_3d
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">reconstruct_data_3d</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6a872b7d27169c9b01e09dcf45b9737d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a872b7d27169c9b01e09dcf45b9737d"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d">reconstruct</a> (char *filename, int N, int M, int Z, int iteration, int weight)</td></tr>
+<tr class="memdesc:ga6a872b7d27169c9b01e09dcf45b9737d"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an inverse 3d-nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__reconstruct__data__gridding.html b/doc/api/html/group__applications__mri3d__reconstruct__data__gridding.html
new file mode 100644
index 0000000..228dd74
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__reconstruct__data__gridding.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_gridding
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">reconstruct_data_gridding</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0152e0943d96d847eaaaa8a9f487eb9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0152e0943d96d847eaaaa8a9f487eb9e"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e">reconstruct</a> (char *filename, int N, int M, int Z, int weight, fftw_complex *mem)</td></tr>
+<tr class="memdesc:ga0152e0943d96d847eaaaa8a9f487eb9e"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an 2d-adjoint-nfft for every slice <br/></td></tr>
+<tr class="memitem:gaa30709aaef018deecdd911083fadb877"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa30709aaef018deecdd911083fadb877"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877">print</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gaa30709aaef018deecdd911083fadb877"><td class="mdescLeft"> </td><td class="mdescRight">print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT.html b/doc/api/html/group__applications__polarFFT.html
new file mode 100644
index 0000000..781d407
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT.html
@@ -0,0 +1,50 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Polar FFT
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Polar FFT</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__polarFFT__linogramm"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html">linogram_fft_test</a></td></tr>
+<tr class="memitem:group__applications__polarFFT__mpolar"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html">mpolar_fft_test</a></td></tr>
+<tr class="memitem:group__applications__polarFFT__polar"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html">polar_fft_test</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT__linogramm.html b/doc/api/html/group__applications__polarFFT__linogramm.html
new file mode 100644
index 0000000..599a0fd
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT__linogramm.html
@@ -0,0 +1,71 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - linogram_fft_test
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">linogram_fft_test</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points x with weights w for the linogram grid with T slopes and R offsets. <br/></td></tr>
+<tr class="memitem:ga708f5c41add2af92a97339dee1c068dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga708f5c41add2af92a97339dee1c068dc"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga708f5c41add2af92a97339dee1c068dc"><td class="mdescLeft"> </td><td class="mdescRight">discrete pseudo-polar FFT <br/></td></tr>
+<tr class="memitem:gaea5025fe751ace25f818ecb3cfc16444"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaea5025fe751ace25f818ecb3cfc16444"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaea5025fe751ace25f818ecb3cfc16444"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gaf44988058d3000a477c046c172c26265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf44988058d3000a477c046c172c26265"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">inverse_linogram_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gaf44988058d3000a477c046c172c26265"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based inverse pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gac2a323224e3346e37714575d49c65432"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac2a323224e3346e37714575d49c65432"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:gac2a323224e3346e37714575d49c65432"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, linogram FFT, and inverse linogram FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT__mpolar.html b/doc/api/html/group__applications__polarFFT__mpolar.html
new file mode 100644
index 0000000..27207af
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT__mpolar.html
@@ -0,0 +1,130 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mpolar_fft_test
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">mpolar_fft_test</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga08d0441aceedbcb98b985ee5aa121952"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga08d0441aceedbcb98b985ee5aa121952"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the modified polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets.  <a href="#ga08d0441aceedbcb98b985ee5aa121952"></a><br/></td></tr>
+<tr class="memitem:gaee9902054200ea50d90b5d290bff8c71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee9902054200ea50d90b5d290bff8c71"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaee9902054200ea50d90b5d290bff8c71"><td class="mdescLeft"> </td><td class="mdescRight">discrete mpolar FFT <br/></td></tr>
+<tr class="memitem:ga55b2f979a5c69176a73f59eb0312b53d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga55b2f979a5c69176a73f59eb0312b53d"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga55b2f979a5c69176a73f59eb0312b53d"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga5d0560e898b722ee5fe09acc485bbec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d0560e898b722ee5fe09acc485bbec8"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">inverse_mpolar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:ga5d0560e898b722ee5fe09acc485bbec8"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based mpolar FFT <br/></td></tr>
+<tr class="memitem:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga522ff84df31c08a1f237ad0ec7ce4ac5"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga08d0441aceedbcb98b985ee5aa121952"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int mpolar_grid </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>w</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the modified polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. </p>
+<p>We add more concentric circles to the polar grid and exclude those nodes not located in the unit square, i.e., </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,,\qquad (j,t)^{\top}\in I_{\sqrt{2}R}\times I_T\,. \]" src="form_119.png"/>
+</p>
+<p> with <img class="formulaInl" alt="$r_j$" src="form_120.png"/> and <img class="formulaInl" alt="$\theta_t$" src="form_121.png"/> as for the polar grid. The number of nodes for the modified polar grid can be estimated as <img class="formulaInl" alt="$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R$" src="form_122.png"/>. </p>
+
+<p>Definition at line <a class="el" href="mpolar__fft__test_8c_source.html#l00063">63</a> of file <a class="el" href="mpolar__fft__test_8c_source.html">mpolar_fft_test.c</a>.</p>
+
+<p>References <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="mpolar__fft__test_8c_source.html#l00237">inverse_mpolar_fft()</a>, <a class="el" href="mpolar__fft__test_8c_source.html#l00404">main()</a>, <a class="el" href="mpolar__fft__test_8c_source.html#l00106">mpolar_dft()</a>, and <a class="el" href="mpolar__fft__test_8c_source.html#l00166">mpolar_fft()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT__polar.html b/doc/api/html/group__applications__polarFFT__polar.html
new file mode 100644
index 0000000..f74d7ff
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT__polar.html
@@ -0,0 +1,126 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - polar_fft_test
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">polar_fft_test</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets.  <a href="#ga307b67b4c00a1c756f140c7fa831cdae"></a><br/></td></tr>
+<tr class="memitem:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6ec0d6bb5bfea4829e551c9dc9a656e"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="mdescLeft"> </td><td class="mdescRight">discrete polar FFT <br/></td></tr>
+<tr class="memitem:ga72ebda23ef48b6509833eea9a24fa839"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga72ebda23ef48b6509833eea9a24fa839"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga72ebda23ef48b6509833eea9a24fa839"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT. <br/></td></tr>
+<tr class="memitem:gad996d429207cf198e9027618e081ada0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad996d429207cf198e9027618e081ada0"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">inverse_polar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gad996d429207cf198e9027618e081ada0"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based polar FFT <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga307b67b4c00a1c756f140c7fa831cdae"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int polar_grid </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>w</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. </p>
+<p>The nodes of the polar grid lie on concentric circles around the origin. They are given for <img class="formulaInl" alt="$(j,t)^{\top}\in I_R\times I_T$" src="form_123.png"/> by a signed radius <img class="formulaInl" alt="$r_j := \frac{j}{R} \in [-\frac{1}{2},\frac{1}{2})$" src="form_124.png"/> and an angle <img class="formulaInl" alt="$\theta_t := \frac{\pi t}{T} \in [-\frac{\pi}{2},\frac{\pi}{2})$" src="form_125.png"/> as </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,. \]" src="form_126.png"/>
+</p>
+<p> The total number of nodes is <img class="formulaInl" alt="$M=TR$" src="form_127.png"/>, whereas the origin is included multiple times.</p>
+<p>Weights are introduced to compensate for local sampling density variations. For every point in the sampling set, we associate a small surrounding area. In case of the polar grid, we choose small ring segments. The area of such a ring segment around <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> ( <img class="formulaInl" alt="$j \ne 0$" src="form_128.png"/>) is </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ w_{t,j} = \frac{\pi}{2TR^2}\left(\left(|j|+\frac{1}{2}\right)^2- \left(|j|-\frac{1}{2}\right)^2\right) = \frac{\pi |j| }{TR^2}\, . \]" src="form_129.png"/>
+</p>
+<p> The area of the small circle of radius <img class="formulaInl" alt="$\frac{1}{2R}$" src="form_130.png"/> around the origin is <img class="formulaInl" alt="$\frac{\pi}{4R^2}$" src="form_131.png"/>. Divided by the multiplicity of the origin in the sampling set, we get <img class="formulaInl" alt="$w_{t,0} := \frac{\pi}{4TR^2}$" src="form_132.png"/>. Thus, the sum of all weights is <img class="formulaInl" alt="$\frac{\pi}{4}(1+\frac{1}{R^2})$" src="form_133.png"/> and we divide by this  [...]
+
+<p>Definition at line <a class="el" href="polar__fft__test_8c_source.html#l00078">78</a> of file <a class="el" href="polar__fft__test_8c_source.html">polar_fft_test.c</a>.</p>
+
+<p>References <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="polar__fft__test_8c_source.html#l00218">inverse_polar_fft()</a>, <a class="el" href="polar__fft__test_8c_source.html#l00314">main()</a>, <a class="el" href="polar__fft__test_8c_source.html#l00100">polar_dft()</a>, and <a class="el" href="polar__fft__test_8c_source.html#l00154">polar_fft()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__quadratureS2.html b/doc/api/html/group__applications__quadratureS2.html
new file mode 100644
index 0000000..8efb4ec
--- /dev/null
+++ b/doc/api/html/group__applications__quadratureS2.html
@@ -0,0 +1,48 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Fast evaluation of quadrature formulae on the sphere
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Fast evaluation of quadrature formulae on the sphere</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__quadratureS2__test"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html">quadratureS2_test</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__applications__quadratureS2__test.html b/doc/api/html/group__applications__quadratureS2__test.html
new file mode 100644
index 0000000..1fbaf10
--- /dev/null
+++ b/doc/api/html/group__applications__quadratureS2__test.html
@@ -0,0 +1,130 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - quadratureS2_test
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">quadratureS2_test</div>  </div>
+<div class="ingroups"><a class="el" href="group__applications__quadratureS2.html">Fast evaluation of quadrature formulae on the sphere</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga7c6368b321bd9acd0149b030bb8275ed"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga7c6368b321bd9acd0149b030bb8275ed">boolean</a> { <b>NO</b> =  0, 
+<b>YES</b> =  1, 
+<b>NO</b> =  0, 
+<b>YES</b> =  1
+ }</td></tr>
+<tr class="memdesc:ga7c6368b321bd9acd0149b030bb8275ed"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for parameter values. <br/></td></tr>
+<tr class="memitem:ga47f3fd319121e75dc73cd720c536f3c7"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga47f3fd319121e75dc73cd720c536f3c7">testtype</a> { <b>ERROR</b> =  0, 
+<b>TIMING</b> =  1
+ }</td></tr>
+<tr class="memdesc:ga47f3fd319121e75dc73cd720c536f3c7"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for test modes. <br/></td></tr>
+<tr class="memitem:ga4cf30b0362e85bc0154ca2c52b2bc17e"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e">gridtype</a> { <br/>
+  <b>GRID_GAUSS_LEGENDRE</b> =  0, 
+<b>GRID_CLENSHAW_CURTIS</b> =  1, 
+<b>GRID_HEALPIX</b> =  2, 
+<b>GRID_EQUIDISTRIBUTION</b> =  3, 
+<br/>
+  <b>GRID_EQUIDISTRIBUTION_UNIFORM</b> =  4
+<br/>
+ }</td></tr>
+<tr class="memdesc:ga4cf30b0362e85bc0154ca2c52b2bc17e"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for quadrature grid types. <br/></td></tr>
+<tr class="memitem:gaa7c9498e1664b6773fd8f9d850921e20"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#gaa7c9498e1664b6773fd8f9d850921e20">functiontype</a> { <br/>
+  <b>FUNCTION_RANDOM_BANDLIMITED</b> =  0, 
+<b>FUNCTION_F1</b> =  1, 
+<b>FUNCTION_F2</b> =  2, 
+<b>FUNCTION_F3</b> =  3, 
+<br/>
+  <b>FUNCTION_F4</b> =  4, 
+<b>FUNCTION_F5</b> =  5, 
+<b>FUNCTION_F6</b> =  6
+<br/>
+ }</td></tr>
+<tr class="memdesc:gaa7c9498e1664b6773fd8f9d850921e20"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for test functions. <br/></td></tr>
+<tr class="memitem:ga811fe196a5d9d37857c2f8adeeaac3c6"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga811fe196a5d9d37857c2f8adeeaac3c6">modes</a> { <b>USE_GRID</b> =  0, 
+<b>RANDOM</b> =  1
+ }</td></tr>
+<tr class="memdesc:ga811fe196a5d9d37857c2f8adeeaac3c6"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">The main program.  <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>argv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The main program. </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">argc</td><td>The number of arguments </td></tr>
+    <tr><td class="paramname">argv</td><td>An array containing the arguments as C-strings</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Exit code </dd></dl>
+
+<p>Definition at line <a class="el" href="quadratureS2_8c_source.html#l00072">72</a> of file <a class="el" href="quadratureS2_8c_source.html">quadratureS2.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N_total</a>, <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc()</a>, <a class="el" href="nfft3util_8h_source.html#l00068">NFFT_MAX</a>, <a class="el" href="nff [...]
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__examples.html b/doc/api/html/group__examples.html
new file mode 100644
index 0000000..e23fef3
--- /dev/null
+++ b/doc/api/html/group__examples.html
@@ -0,0 +1,48 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Examples
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Examples</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__examples__solver"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver.html">Solver component</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__examples__solver.html b/doc/api/html/group__examples__solver.html
new file mode 100644
index 0000000..59a913d
--- /dev/null
+++ b/doc/api/html/group__examples__solver.html
@@ -0,0 +1,48 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Solver component
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#groups">Modules</a>  </div>
+  <div class="headertitle">
+<div class="title">Solver component</div>  </div>
+<div class="ingroups"><a class="el" href="group__examples.html">Examples</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__examples__solver__glacier"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html">Reconstruction of a glacier from scattered data</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__examples__solver__glacier.html b/doc/api/html/group__examples__solver__glacier.html
new file mode 100644
index 0000000..f062589
--- /dev/null
+++ b/doc/api/html/group__examples__solver__glacier.html
@@ -0,0 +1,59 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Reconstruction of a glacier from scattered data
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Reconstruction of a glacier from scattered data</div>  </div>
+<div class="ingroups"><a class="el" href="group__examples__solver.html">Solver component</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab4da467610b4e791d41de5b7501fe208"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab4da467610b4e791d41de5b7501fe208"></a>
+static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208">my_weight</a> (double z, double a, double b, double c)</td></tr>
+<tr class="memdesc:gab4da467610b4e791d41de5b7501fe208"><td class="mdescLeft"> </td><td class="mdescRight">Generalised Sobolev weight. <br/></td></tr>
+<tr class="memitem:gae32b7b49ac3d92c70301b2f96ab31e7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae32b7b49ac3d92c70301b2f96ab31e7a"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a">glacier</a> (int N, int M)</td></tr>
+<tr class="memdesc:gae32b7b49ac3d92c70301b2f96ab31e7a"><td class="mdescLeft"> </td><td class="mdescRight">Reconstruction routine. <br/></td></tr>
+<tr class="memitem:ga1503d05480f3e910ffae52b2e6aef34f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1503d05480f3e910ffae52b2e6aef34f"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f">glacier_cv</a> (int N, int M, int M_cv, unsigned solver_flags)</td></tr>
+<tr class="memdesc:ga1503d05480f3e910ffae52b2e6aef34f"><td class="mdescLeft"> </td><td class="mdescRight">Reconstruction routine with cross validation. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">Main routine. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__nfftutil.html b/doc/api/html/group__nfftutil.html
new file mode 100644
index 0000000..8483481
--- /dev/null
+++ b/doc/api/html/group__nfftutil.html
@@ -0,0 +1,478 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Util - Auxilliary functions
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Util - Auxilliary functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Include header for FFTW3 library for its complex type.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4df074728562efbb458f6662e649d1d5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">NFFT_SWAP_complex</a>(x, y)</td></tr>
+<tr class="memdesc:ga4df074728562efbb458f6662e649d1d5"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors.  <a href="#ga4df074728562efbb458f6662e649d1d5"></a><br/></td></tr>
+<tr class="memitem:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">NFFT_SWAP_double</a>(x, y)</td></tr>
+<tr class="memdesc:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors.  <a href="#ga4d8733560ed5e4cc3ff7ecadac62e83e"></a><br/></td></tr>
+<tr class="memitem:ga598a3330b3c21701223ee0ca14316eca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga598a3330b3c21701223ee0ca14316eca"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">PI</a>   3.141592653589793238462643383279502884197169399375105820974944592</td></tr>
+<tr class="memdesc:ga598a3330b3c21701223ee0ca14316eca"><td class="mdescLeft"> </td><td class="mdescRight">Formerly known to be an irrational number. <br/></td></tr>
+<tr class="memitem:ga2750dfdda752269a036f487a4a34b849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2750dfdda752269a036f487a4a34b849"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI2</b>   6.283185307179586476925286766559005768394338798750211641949889185</td></tr>
+<tr class="memitem:gafd17621e12029ff7c53518b74a487c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd17621e12029ff7c53518b74a487c94"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI4</b>   12.56637061435917295385057353311801153678867759750042328389977837</td></tr>
+<tr class="memitem:gad2e3f0e1983de6d70f003545cc556ed3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad2e3f0e1983de6d70f003545cc556ed3"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">NFFT_MAX</a>(a, b)   ((a)>(b)? (a) : (b))</td></tr>
+<tr class="memdesc:gad2e3f0e1983de6d70f003545cc556ed3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum of its two arguments. <br/></td></tr>
+<tr class="memitem:ga9087991411f723f26723b2b26dbf3308"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9087991411f723f26723b2b26dbf3308"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(a, b)   ((a)<(b)? (a) : (b))</td></tr>
+<tr class="memdesc:ga9087991411f723f26723b2b26dbf3308"><td class="mdescLeft"> </td><td class="mdescRight">Mimimum of its two arguments. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga89bd624abdfb13abc10c144a8ff949cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89bd624abdfb13abc10c144a8ff949cd"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft_bspline_old</a> (int k, double x, double *A)</td></tr>
+<tr class="memdesc:ga89bd624abdfb13abc10c144a8ff949cd"><td class="mdescLeft"> </td><td class="mdescRight">To test the new one. <br/></td></tr>
+<tr class="memitem:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2fd48f1f700153c050d27691c4b2a6cc"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft_bspline</a> (int k, double x, double *scratch)</td></tr>
+<tr class="memdesc:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="mdescLeft"> </td><td class="mdescRight">Computes the B-spline <img class="formulaInl" alt="$M_{k,0}\left(x\right)$" src="form_9.png"/>, scratch is used for de Boor's scheme. <br/></td></tr>
+<tr class="memitem:ga2752ca372ee2622f173a706e86e2b116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2752ca372ee2622f173a706e86e2b116"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft_prod_int</a> (int *vec, int d)</td></tr>
+<tr class="memdesc:ga2752ca372ee2622f173a706e86e2b116"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8adc6bf59ec10f16243030ee00ad4a40"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfst_prod_minus_a_int</a> (int *vec, int a, int d)</td></tr>
+<tr class="memdesc:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t-a$" src="form_11.png"/>. <br/></td></tr>
+<tr class="memitem:gad979f626cc8397e26d1bd78a7ba342cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad979f626cc8397e26d1bd78a7ba342cd"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft_plain_loop</a> (int *idx, int *N, int d)</td></tr>
+<tr class="memdesc:gad979f626cc8397e26d1bd78a7ba342cd"><td class="mdescLeft"> </td><td class="mdescRight">Computes <img class="formulaInl" alt="$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}$" src="form_12.png"/>. <br/></td></tr>
+<tr class="memitem:gad7bad7074a695341742f57526f8695eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad7bad7074a695341742f57526f8695eb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft_prod_real</a> (double *vec, int d)</td></tr>
+<tr class="memdesc:gad7bad7074a695341742f57526f8695eb"><td class="mdescLeft"> </td><td class="mdescRight">Computes double <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga135eb6c5a8ae1a84ea64c9099caac004"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft_dot_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:ga02357d8d67d2591573089e49958855a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga02357d8d67d2591573089e49958855a5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft_dot_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:ga02357d8d67d2591573089e49958855a5"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac712b4a91652e20dc53719ce6fc1f9e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft_dot_w_complex</a> (fftw_complex *x, double *w, int n)</td></tr>
+<tr class="memdesc:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga69cceec47679c500072d3d60c6181b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga69cceec47679c500072d3d60c6181b39"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft_dot_w_double</a> (double *x, double *w, int n)</td></tr>
+<tr class="memdesc:ga69cceec47679c500072d3d60c6181b39"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga68268fc9bfad5a7e7383098ac1715674"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68268fc9bfad5a7e7383098ac1715674"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft_dot_w_w2_complex</a> (fftw_complex *x, double *w, double *w2, int n)</td></tr>
+<tr class="memdesc:ga68268fc9bfad5a7e7383098ac1715674"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w1\odot w2\odot w2 \odot x)$" src="form_15.png"/>. <br/></td></tr>
+<tr class="memitem:ga9b59288597d159357fe86395e635a075"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9b59288597d159357fe86395e635a075"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft_dot_w2_complex</a> (fftw_complex *x, double *w2, int n)</td></tr>
+<tr class="memdesc:ga9b59288597d159357fe86395e635a075"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w2\odot w2 \odot x)$" src="form_16.png"/>. <br/></td></tr>
+<tr class="memitem:ga21fd5b4d5f6113538320188306611133"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga21fd5b4d5f6113538320188306611133"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft_cp_complex</a> (fftw_complex *x, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga21fd5b4d5f6113538320188306611133"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:gab220a37bd6e58be7413507b17ca3bfe2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab220a37bd6e58be7413507b17ca3bfe2"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft_cp_double</a> (double *x, double *y, int n)</td></tr>
+<tr class="memdesc:gab220a37bd6e58be7413507b17ca3bfe2"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga33409df91e7ad5e1dca3beaa63e0ef25"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft_cp_a_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga41f20c605269e701b3305e49010e0759"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga41f20c605269e701b3305e49010e0759"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft_cp_a_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga41f20c605269e701b3305e49010e0759"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga630054cb816785d766959a867965f619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga630054cb816785d766959a867965f619"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft_cp_w_complex</a> (fftw_complex *x, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga630054cb816785d766959a867965f619"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga27a75e17d21c508cacf81276ca531099"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga27a75e17d21c508cacf81276ca531099"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft_cp_w_double</a> (double *x, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:ga27a75e17d21c508cacf81276ca531099"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga676395f56bbf1c444d074a21753de8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga676395f56bbf1c444d074a21753de8d5"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft_upd_axpy_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga676395f56bbf1c444d074a21753de8d5"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7610a506bc5ab40a6e1d7937b36921a3"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft_upd_axpy_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1fde8da1b69413398fca44e2ef2fbdb4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft_upd_xpay_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga2389c3b56a484a3f165b7d9203700064"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2389c3b56a484a3f165b7d9203700064"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft_upd_xpay_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga2389c3b56a484a3f165b7d9203700064"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga903a4b3ed369dcfe67b9379a238ed23d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft_upd_axpby_complex</a> (fftw_complex *x, double a, fftw_complex *y, double b, int n)</td></tr>
+<tr class="memdesc:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:ga75e403e92875b0b919a555f8cede0e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75e403e92875b0b919a555f8cede0e8d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft_upd_axpby_double</a> (double *x, double a, double *y, double b, int n)</td></tr>
+<tr class="memdesc:ga75e403e92875b0b919a555f8cede0e8d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:gad8e10773e59818c88a8ea2cb560b936e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad8e10773e59818c88a8ea2cb560b936e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft_upd_xpawy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:gad8e10773e59818c88a8ea2cb560b936e"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac5db5bbc58f772844cf0caf5fd9fafb0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft_upd_xpawy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:ga693919963b51cf396311b15660e04cd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga693919963b51cf396311b15660e04cd8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft_upd_axpwy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga693919963b51cf396311b15660e04cd8"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6777c4b8aa9f575f1600c51e8ae343a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft_upd_axpwy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaa388b5ec231e02ac45e37b60fd62e770"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa388b5ec231e02ac45e37b60fd62e770"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft_fftshift_complex</a> (fftw_complex *x, int d, int *N)</td></tr>
+<tr class="memdesc:gaa388b5ec231e02ac45e37b60fd62e770"><td class="mdescLeft"> </td><td class="mdescRight">Swaps each half over N[d]/2. <br/></td></tr>
+<tr class="memitem:gaa8e0581d802c4b7bb153682a4c156409"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa8e0581d802c4b7bb153682a4c156409"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft_vpr_int</a> (int *x, int n, char *text)</td></tr>
+<tr class="memdesc:gaa8e0581d802c4b7bb153682a4c156409"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of integer numbers. <br/></td></tr>
+<tr class="memitem:ga5021b4c5ea2a24b0014786deb81cca91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5021b4c5ea2a24b0014786deb81cca91"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft_vpr_double</a> (double *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga5021b4c5ea2a24b0014786deb81cca91"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of doubles numbers. <br/></td></tr>
+<tr class="memitem:ga52ad07055e22b83a016bdbf43d3884d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52ad07055e22b83a016bdbf43d3884d0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft_vpr_complex</a> (fftw_complex *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga52ad07055e22b83a016bdbf43d3884d0"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of complex numbers. <br/></td></tr>
+<tr class="memitem:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5f53c8cd0b2f33200fce15ecf75a0685"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft_vrand_unit_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random complex numbers in <img class="formulaInl" alt="$[0,1]\times[0,1]{\rm i}$" src="form_25.png"/>. <br/></td></tr>
+<tr class="memitem:gaa44184ac2c1452221508e7640f391c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa44184ac2c1452221508e7640f391c34"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft_vrand_shifted_unit_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:gaa44184ac2c1452221508e7640f391c34"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random double numbers in <img class="formulaInl" alt="$[-1/2,1/2]$" src="form_26.png"/>. <br/></td></tr>
+<tr class="memitem:ga797e81f55e6379efabf4d98522d1ee9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga797e81f55e6379efabf4d98522d1ee9d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft_voronoi_weights_1d</a> (double *w, double *x, int M)</td></tr>
+<tr class="memdesc:ga797e81f55e6379efabf4d98522d1ee9d"><td class="mdescLeft"> </td><td class="mdescRight">Computes non periodic voronoi weights, assumes ordered nodes <img class="formulaInl" alt="$x_j$" src="form_27.png"/>. <br/></td></tr>
+<tr class="memitem:ga26a4ed487a23e99e01f111113be9f994"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft_voronoi_weights_S2</a> (double *w, double *xi, int M)</td></tr>
+<tr class="memdesc:ga26a4ed487a23e99e01f111113be9f994"><td class="mdescLeft"> </td><td class="mdescRight">Computes voronoi weights for nodes on the sphere S^2.  <a href="#ga26a4ed487a23e99e01f111113be9f994"></a><br/></td></tr>
+<tr class="memitem:gac9b810183abafb668f8aa777c7985256"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac9b810183abafb668f8aa777c7985256"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft_modified_fejer</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gac9b810183abafb668f8aa777c7985256"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Fejer kernel, ie <img class="formulaInl" alt="$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)$" src="form_28.png"/>. <br/></td></tr>
+<tr class="memitem:gab45a6cd3528d3716522a0cf184375aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab45a6cd3528d3716522a0cf184375aaf"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft_modified_jackson2</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gab45a6cd3528d3716522a0cf184375aaf"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Jackson kernel. <br/></td></tr>
+<tr class="memitem:ga126ec2282393435f0d795ac79db8654b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga126ec2282393435f0d795ac79db8654b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft_modified_jackson4</a> (int N, int kk)</td></tr>
+<tr class="memdesc:ga126ec2282393435f0d795ac79db8654b"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified generalised Jackson kernel. <br/></td></tr>
+<tr class="memitem:gaa84cb34c6d368599fb2f997eadb184a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa84cb34c6d368599fb2f997eadb184a7"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft_modified_sobolev</a> (double mu, int kk)</td></tr>
+<tr class="memdesc:gaa84cb34c6d368599fb2f997eadb184a7"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Sobolev kernel. <br/></td></tr>
+<tr class="memitem:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac6201bc2aa806bd25cb14c5f96d644e9"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft_modified_multiquadric</a> (double mu, double c, int kk)</td></tr>
+<tr class="memdesc:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified multiquadric kernel. <br/></td></tr>
+<tr class="memitem:ga2decee6fe50d50797a82737ba82cf97a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft_smbi</a> (const double x, const double alpha, const int nb, const int ize, double *b)</td></tr>
+<tr class="memdesc:ga2decee6fe50d50797a82737ba82cf97a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the modified bessel function <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, possibly scaled by <img class="formulaInl" alt="$\mathrm{e}^{-x}$" src="form_83.png"/>, for real non-negative <img class="formulaInl" alt="$x,alpha$" src="form_84.png"/> with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/>, and <img class="formulaInl" [...]
+<tr class="memitem:ga574571239f7dcf7474736d35a6242bb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga574571239f7dcf7474736d35a6242bb1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfft_drand48</b> (void)</td></tr>
+<tr class="memitem:gaef3ecf626cc0aab6ccdc363fd43ef0d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaef3ecf626cc0aab6ccdc363fd43ef0d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_srand48</b> (long int seed)</td></tr>
+<tr class="memitem:gad93b94e3c7e9149f89819504c2b3c738"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft_sort_node_indices_radix_lsdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:gad93b94e3c7e9149f89819504c2b3c738"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices.  <a href="#gad93b94e3c7e9149f89819504c2b3c738"></a><br/></td></tr>
+<tr class="memitem:ga60a5123a8026a06807e14502d7cedcd5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft_sort_node_indices_radix_msdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:ga60a5123a8026a06807e14502d7cedcd5"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices.  <a href="#ga60a5123a8026a06807e14502d7cedcd5"></a><br/></td></tr>
+<tr class="memitem:gafb4a11b0dff72fc3b827b0fee0a14611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafb4a11b0dff72fc3b827b0fee0a14611"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfft_get_num_threads</b> (void)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<p>Include header for FFTW3 library for its complex type. </p>
+<p>This module implements frequently used utility functions. In particular, this includes simple measurement of resources, evaluation of window functions, vector routines for basic linear algebra tasks, and computation of weights for the inverse transforms. </p>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga4df074728562efbb458f6662e649d1d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NFFT_SWAP_complex</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">x, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">y </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{fftw_complex* NFFT_SWAP_temp__; \</div>
+<div class="line">  NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}</div>
+</div><!-- fragment -->
+<p>Swapping of two vectors. </p>
+
+<p>Definition at line <a class="el" href="nfft3util_8h_source.html#l00052">52</a> of file <a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>, <a class="el" href="glacier_8c_source.html#l00110">glacier_cv()</a>, <a class="el" href="iterS2_8c_source.html#l00058">main()</a>, <a class="el" href="solver_8c_source. [...]
+
+</div>
+</div>
+<a class="anchor" id="ga4d8733560ed5e4cc3ff7ecadac62e83e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NFFT_SWAP_double</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">x, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">y </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{<span class="keywordtype">double</span>* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \</div>
+<div class="line">  (x)=(y); (y)=NFFT_SWAP_temp__;}</div>
+</div><!-- fragment -->
+<p>Swapping of two vectors. </p>
+
+<p>Definition at line <a class="el" href="nfft3util_8h_source.html#l00057">57</a> of file <a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>.</p>
+
+<p>Referenced by <a class="el" href="solver_8c_source.html#l00575">solver_loop_one_step_cgnr_double()</a>, <a class="el" href="solver_8c_source.html#l00471">solver_loop_one_step_landweber_double()</a>, and <a class="el" href="solver_8c_source.html#l00520">solver_loop_one_step_steepest_descent_double()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga26a4ed487a23e99e01f111113be9f994"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void nfft_voronoi_weights_S2 </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>w</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>xi</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Computes voronoi weights for nodes on the sphere S^2. </p>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l00581">581</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc()</a>, and <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="iterS2_8c_source.html#l00058">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2decee6fe50d50797a82737ba82cf97a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nfft_smbi </td>
+          <td>(</td>
+          <td class="paramtype">const R </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const R </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>nb</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>ize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>b</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calculates the modified bessel function <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, possibly scaled by <img class="formulaInl" alt="$\mathrm{e}^{-x}$" src="form_83.png"/>, for real non-negative <img class="formulaInl" alt="$x,alpha$" src="form_84.png"/> with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/>, and <img class="formulaInl" alt="$n=0,1,\ldots,nb-1$" src="form_86.png"/>. </p>
+<ul>
+<li>[in] <code>x</code> non-negative real number in <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/> </li>
+<li>[in] <code>alpha</code> non-negative real number with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/> in <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/> </li>
+<li>[in] <code>nb</code> number of functions to be calculated </li>
+<li>[in] <code>ize</code> switch between no scaling (<code>ize</code> = 1) and exponential scaling (<code>ize</code> = 2) </li>
+<li>[out] <code>b</code> real output vector to contain <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, <img class="formulaInl" alt="$n=0,1,\ldots,nb-1$" src="form_86.png"/> <dl class="section return"><dt>Returns:</dt><dd>error indicator. Only if this value is identical to <code>nb</code>, then all values in <code>b</code> have been calculated to full accuracy. If not, errors are indicated using the following scheme:<ul>
+<li>ncalc < 0: At least one of the arguments was out of range (e.g. nb <= 0, ize neither equals 1 nor 2, <img class="formulaInl" alt="$|x| \ge exparg$" src="form_87.png"/>). In this case, the output vector b is not calculated and <code>ncalc</code> is set to <img class="formulaInl" alt="$\min(nb,0)-1$" src="form_88.png"/>.</li>
+<li>0 < ncalc < nb: Not all requested functions could be calculated to full accuracy. This can occur when nb is much larger than |x|. in this case, the values <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/> are calculated to full accuracy for <img class="formulaInl" alt="$n=0,1,\ldots,ncalc$" src="form_89.png"/>. The rest of the values up to <img class="formulaInl" alt="$n=0,1,\ldots,nb-1$" src="form_86.png"/> is calculated to a lower accuracy.</li>
+</ul>
+</dd></dl>
+</li>
+</ul>
+<p>This program is based on a program written by David J. Sookne [2] that computes values of the Bessel functions <img class="formulaInl" alt="$J_{\nu}(x)$" src="form_90.png"/> or <img class="formulaInl" alt="$I_{\nu}(x)$" src="form_91.png"/> for real argument <img class="formulaInl" alt="$x$" src="form_92.png"/> and integer order <img class="formulaInl" alt="$\nu$" src="form_93.png"/>. modifications include the restriction of the computation to the Bessel function <img class="formulaInl [...]
+<p>References: [1] F. W. J. Olver and D. J. Sookne, A note on backward recurrence algorithms", Math. Comput. (26), 1972, pp 125 &ndash; 132.
+ [2] D. J. Sookne, "Bessel functions of real argument and int order", NBS Jour. of Res. B. (77B), 1973, pp. 125 – 132.</p>
+<p>Modified by W. J. Cody, Applied Mathematics Division, Argonne National Laboratory, Argonne, IL, 60439, USA</p>
+<p>Modified by Jens Keiner, Institute of Mathematics, University of Lübeck, 23560 Lübeck, Germany </p>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l00950">950</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad93b94e3c7e9149f89819504c2b3c738"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void nfft_sort_node_indices_radix_lsdf </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>keys0</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>keys1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>rhigh</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Radix sort for node indices. </p>
+<p>Radix sort for node indices.</p>
+<dl class="section author"><dt>Author:</dt><dd>Michael Hofmann </dd></dl>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l01301">1301</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga60a5123a8026a06807e14502d7cedcd5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void nfft_sort_node_indices_radix_msdf </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>keys0</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>keys1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>rhigh</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Radix sort for node indices. </p>
+<p>Radix sort for node indices.</p>
+<dl class="section author"><dt>Author:</dt><dd>Michael Hofmann </dd></dl>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l01383">1383</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+<p>References <a class="el" href="util_8c_source.html#l01383">nfft_sort_node_indices_radix_msdf()</a>.</p>
+
+<p>Referenced by <a class="el" href="util_8c_source.html#l01383">nfft_sort_node_indices_radix_msdf()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/group__nfsft.html b/doc/api/html/group__nfsft.html
new file mode 100644
index 0000000..70d8f46
--- /dev/null
+++ b/doc/api/html/group__nfsft.html
@@ -0,0 +1,563 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Nfsft
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">Nfsft</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Wisdom structure.  <a href="structnfsft__wisdom.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga6ebc87b6a9996327fdf13c4c3b2f79c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6ebc87b6a9996327fdf13c4c3b2f79c1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>BWEXP_MAX</b>   10</td></tr>
+<tr class="memitem:ga7a05635f8b2f1099a6a57dafbb6a1cb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a05635f8b2f1099a6a57dafbb6a1cb1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>BW_MAX</b>   1024</td></tr>
+<tr class="memitem:ga419a0077c38536976cf6ad9d7fddd9e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga419a0077c38536976cf6ad9d7fddd9e5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>ROW</b>(k)   (k*(wisdom.N_MAX+2))</td></tr>
+<tr class="memitem:ga5c75ea9f4835d9aa1b75dac53622e488"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5c75ea9f4835d9aa1b75dac53622e488"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>ROWK</b>(k)   (k*(wisdom.N_MAX+2)+k)</td></tr>
+<tr class="memitem:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">NFSFT_DEFAULT_NFFT_CUTOFF</a>   6</td></tr>
+<tr class="memdesc:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="mdescLeft"> </td><td class="mdescRight">The default NFFT cutoff parameter.  <a href="#ga206c4faaf800b49dcb14e26148fa9ac6"></a><br/></td></tr>
+<tr class="memitem:gab7d25b80464387893b3c773f92e5c4f3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">NFSFT_DEFAULT_THRESHOLD</a>   1000</td></tr>
+<tr class="memdesc:gab7d25b80464387893b3c773f92e5c4f3"><td class="mdescLeft"> </td><td class="mdescRight">The default threshold for the FPT.  <a href="#gab7d25b80464387893b3c773f92e5c4f3"></a><br/></td></tr>
+<tr class="memitem:ga54b840898df97bcd14af4cb004650ed3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">NFSFT_BREAK_EVEN</a>   5</td></tr>
+<tr class="memdesc:ga54b840898df97bcd14af4cb004650ed3"><td class="mdescLeft"> </td><td class="mdescRight">The break-even bandwidth <img class="formulaInl" alt="$N \in \mathbb{N}_0$" src="form_49.png"/>.  <a href="#ga54b840898df97bcd14af4cb004650ed3"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gaf6a258d8f3ee5206d682d799316314b1"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><b>bool</b> { <b>false</b> =  0, 
+<b>true</b> =  1
+ }</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga579cd4224a1b91605551f9ef36c02570"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga579cd4224a1b91605551f9ef36c02570"></a>
+void </td><td class="memItemRight" valign="bottom"><b>alpha_al_row</b> (R *alpha, const int N, const int n)</td></tr>
+<tr class="memitem:ga701e714a76a30130d1db3394ef199b7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga701e714a76a30130d1db3394ef199b7a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>beta_al_row</b> (R *beta, const int N, const int n)</td></tr>
+<tr class="memitem:gacc014bf577397cff2b508de22a4581bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gacc014bf577397cff2b508de22a4581bb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>gamma_al_row</b> (R *gamma, const int N, const int n)</td></tr>
+<tr class="memitem:ga6b01d5f2e8b3a026906e977118d7b0d2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2">alpha_al_all</a> (R *alpha, const int N)</td></tr>
+<tr class="memdesc:ga6b01d5f2e8b3a026906e977118d7b0d2"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{k-1}^n$" src="form_39.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>.  <a href="#ga6b01d5f2e8b3a026906e977118d7b0d2"></a><br/></td></tr>
+<tr class="memitem:gaf0fb6a3993b3c956bea8fa75e3a71290"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290">beta_al_all</a> (R *beta, const int N)</td></tr>
+<tr class="memdesc:gaf0fb6a3993b3c956bea8fa75e3a71290"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{k-1}^n$" src="form_42.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>.  <a href="#gaf0fb6a3993b3c956bea8fa75e3a71290"></a><br/></td></tr>
+<tr class="memitem:ga88de851c8f9a4c042ad101cb4fb8c51d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d">gamma_al_all</a> (R *gamma, const int N)</td></tr>
+<tr class="memdesc:ga88de851c8f9a4c042ad101cb4fb8c51d"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{k-1}^n$" src="form_43.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>.  <a href="#ga88de851c8f9a4c042ad101cb4fb8c51d"></a><br/></td></tr>
+<tr class="memitem:gac5f2f8c36dc4f8ca65f058af6491f163"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163">eval_al</a> (R *x, R *y, const int size, const int k, R *alpha, R *beta, R *gamma)</td></tr>
+<tr class="memdesc:gac5f2f8c36dc4f8ca65f058af6491f163"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm.  <a href="#gac5f2f8c36dc4f8ca65f058af6491f163"></a><br/></td></tr>
+<tr class="memitem:ga1bc5682379de94e87031afa38e02675d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d">eval_al_thresh</a> (R *x, R *y, const int size, const int k, R *alpha, R *beta, R *gamma, R threshold)</td></tr>
+<tr class="memdesc:ga1bc5682379de94e87031afa38e02675d"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm if it no exceeds a given threshold.  <a href="#ga1bc5682379de94e87031afa38e02675d"></a><br/></td></tr>
+<tr class="memitem:ga47209b28b6561fca7349ed8afa5f9656"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga47209b28b6561fca7349ed8afa5f9656"><td class="mdescLeft"> </td><td class="mdescRight">Converts coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0}^M$" src="form_50.png"/> with <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>, <img class="formulaInl" alt="$-M \le n \le M$" src="form_51.png"/> from a linear combination of Chebyshev polynomials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]" src="form_52.png"/>
+</p>
+<p> to coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=0}^M$" src="form_53.png"/> matching the representation by complex exponentials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]" src="form_54.png"/>
+</p>
+<p> for each order <img class="formulaInl" alt="$n=-M,\ldots,M$" src="form_55.png"/>.  <a href="#ga47209b28b6561fca7349ed8afa5f9656"></a><br/></td></tr>
+<tr class="memitem:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">c2e_transposed</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="mdescLeft"> </td><td class="mdescRight">Transposed version of the function <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a>.  <a href="#ga0e033457136bc0ecb18bb57d3ee5aa37"></a><br/></td></tr>
+<tr class="memitem:ga65cda3f4a3edc5eb39c697cf34b1f0b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65cda3f4a3edc5eb39c697cf34b1f0b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:ga2812aa5beba0eb7efd3072bf323a0155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2812aa5beba0eb7efd3072bf323a0155"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_advanced</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags)</td></tr>
+<tr class="memitem:gafff6158abcefa9a75bcfa41af5a79089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafff6158abcefa9a75bcfa41af5a79089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_guru</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:gabe87aeea1f7cfef9ae8febb16d702f3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe87aeea1f7cfef9ae8febb16d702f3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute</b> (int N, double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:ga3b69bca6c76a63877534f5a9781bf285"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b69bca6c76a63877534f5a9781bf285"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_forget</b> (void)</td></tr>
+<tr class="memitem:gaa63e193a27d84059742ff25ff81e2ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa63e193a27d84059742ff25ff81e2ed1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_finalize</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7628057164579a29cc77487cda6772e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7628057164579a29cc77487cda6772e5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7cfaacc3393dea5c895859fa035e3e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cfaacc3393dea5c895859fa035e3e06"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga5796fc68c432d46dfcab7abd8c56ee22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5796fc68c432d46dfcab7abd8c56ee22"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga813bb48d404c7286310733c99a81a169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga813bb48d404c7286310733c99a81a169"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7a7fa6722d6ba3aade4c69299af86e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a7fa6722d6ba3aade4c69299af86e4e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute_x</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga0af81d81e1b436949ddc46dbd27346e5"><td class="memItemLeft" align="right" valign="top">static struct <a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">wisdom</a> = {false,0U,-1,-1,0,0,0,0,0}</td></tr>
+<tr class="memdesc:ga0af81d81e1b436949ddc46dbd27346e5"><td class="mdescLeft"> </td><td class="mdescRight">The global wisdom structure for precomputed data.  <a href="#ga0af81d81e1b436949ddc46dbd27346e5"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga206c4faaf800b49dcb14e26148fa9ac6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NFSFT_DEFAULT_NFFT_CUTOFF   6</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The default NFFT cutoff parameter. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00065">65</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab7d25b80464387893b3c773f92e5c4f3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NFSFT_DEFAULT_THRESHOLD   1000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The default threshold for the FPT. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00072">72</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga54b840898df97bcd14af4cb004650ed3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NFSFT_BREAK_EVEN   5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The break-even bandwidth <img class="formulaInl" alt="$N \in \mathbb{N}_0$" src="form_49.png"/>. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00079">79</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga6b01d5f2e8b3a026906e977118d7b0d2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void alpha_al_all </td>
+          <td>(</td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>N</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{k-1}^n$" src="form_39.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(N+1)^2$" src="form_41.png"/> where the coefficients will be stored such that alpha[n+(N+1)+k] = <img class="formulaInl" alt="$\alpha_{k-1}^n$" src="form_39.png"/>. </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00091">91</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf0fb6a3993b3c956bea8fa75e3a71290"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void beta_al_all </td>
+          <td>(</td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>N</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{k-1}^n$" src="form_42.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. </p>
+<ul>
+<li>beta A pointer to an array of doubles of size <img class="formulaInl" alt="$(N+1)^2$" src="form_41.png"/> where the coefficients will be stored such that beta[n+(N+1)+k] = <img class="formulaInl" alt="$\beta_{k-1}^n$" src="form_42.png"/>. </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00100">100</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga88de851c8f9a4c042ad101cb4fb8c51d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void gamma_al_all </td>
+          <td>(</td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>gamma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>N</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{k-1}^n$" src="form_43.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. </p>
+<ul>
+<li>beta A pointer to an array of doubles of size <img class="formulaInl" alt="$(N+1)^2$" src="form_41.png"/> where the coefficients will be stored such that gamma[n+(N+1)+k] = <img class="formulaInl" alt="$\gamma_{k-1}^n$" src="form_43.png"/>. </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00109">109</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac5f2f8c36dc4f8ca65f058af6491f163"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void eval_al </td>
+          <td>(</td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>gamma</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>k The index <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^n,\ldots,\alpha_{c+k}^n$" src="form_46.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^n,\ldots,\beta_{c+k}^n$" src="form_47.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^n,\ldots,\gamma_{c+k}^n$" src="form_48.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00118">118</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1bc5682379de94e87031afa38e02675d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int eval_al_thresh </td>
+          <td>(</td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R * </td>
+          <td class="paramname"><em>gamma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">R </td>
+          <td class="paramname"><em>threshold</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm if it no exceeds a given threshold. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>k The index <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^n,\ldots,\alpha_{c+k}^n$" src="form_46.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^n,\ldots,\beta_{c+k}^n$" src="form_47.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^n,\ldots,\gamma_{c+k}^n$" src="form_48.png"/> </li>
+<li>threshold The threshold </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00163">163</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga47209b28b6561fca7349ed8afa5f9656"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void c2e </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td>
+          <td class="paramname"><em>plan</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Converts coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0}^M$" src="form_50.png"/> with <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>, <img class="formulaInl" alt="$-M \le n \le M$" src="form_51.png"/> from a linear combination of Chebyshev polynomials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]" src="form_52.png"/>
+</p>
+<p> to coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=0}^M$" src="form_53.png"/> matching the representation by complex exponentials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]" src="form_54.png"/>
+</p>
+<p> for each order <img class="formulaInl" alt="$n=-M,\ldots,M$" src="form_55.png"/>. </p>
+<ul>
+<li>plan The <code><a class="el" href="structnfsft__plan.html">nfsft_plan</a></code> containing the coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0,\ldots,M;n=-M,\ldots,M}$" src="form_56.png"/></li>
+</ul>
+<dl class="section remark"><dt>Remarks:</dt><dd>The transformation is computed in place.</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00111">111</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat_intern</a>, and <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0e033457136bc0ecb18bb57d3ee5aa37"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void c2e_transposed </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td>
+          <td class="paramname"><em>plan</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transposed version of the function <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a>. </p>
+<ul>
+<li>plan The <code><a class="el" href="structnfsft__plan.html">nfsft_plan</a></code> containing the coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=-M,\ldots,M;n=-M,\ldots,M}$" src="form_57.png"/></li>
+</ul>
+<dl class="section remark"><dt>Remarks:</dt><dd>The transformation is computed in place.</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00189">189</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, and <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="ga0af81d81e1b436949ddc46dbd27346e5"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> wisdom = {false,0U,-1,-1,0,0,0,0,0}</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The global wisdom structure for precomputed data. </p>
+<p><code>wisdom.initialized</code> is set to <code>false</code> and <code>wisdom.flags</code> is set to <code>0U</code>.</p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00087">87</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/images/logo.png b/doc/api/html/images/logo.png
new file mode 100644
index 0000000..b8511af
Binary files /dev/null and b/doc/api/html/images/logo.png differ
diff --git a/doc/api/html/images/sphere.png b/doc/api/html/images/sphere.png
new file mode 100644
index 0000000..42612e1
Binary files /dev/null and b/doc/api/html/images/sphere.png differ
diff --git a/doc/api/html/include_2api_8h_source.html b/doc/api/html/include_2api_8h_source.html
new file mode 100644
index 0000000..d5ea22b
--- /dev/null
+++ b/doc/api/html/include_2api_8h_source.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - api.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">include/api.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: infft.h 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#ifndef __API_H__</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#define __API_H__</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif </span><span class="comment">/* __API_H__ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/index.html b/doc/api/html/index.html
new file mode 100644
index 0000000..c69ddc4
--- /dev/null
+++ b/doc/api/html/index.html
@@ -0,0 +1,40 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Main Page
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">NFFT Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/infft_8h_source.html b/doc/api/html/infft_8h_source.html
new file mode 100644
index 0000000..aab7d6b
--- /dev/null
+++ b/doc/api/html/infft_8h_source.html
@@ -0,0 +1,1430 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - infft.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">infft.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: infft.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/* NFFT internal header file */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#ifndef __INFFT_H__</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span><span class="preprocessor">#define __INFFT_H__</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <stdlib.h></span> <span class="comment">/* size_t */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <stdarg.h></span> <span class="comment">/* va_list */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <stddef.h></span> <span class="comment">/* ptrdiff_t */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#if HAVE_SYS_TYPES_H</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#if HAVE_STDINT_H</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span> <span class="comment">/* uintptr_t, maybe */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#if HAVE_INTTYPES_H</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#include <inttypes.h></span> <span class="comment">/* uintptr_t, maybe */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "ticks.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/* Determine precision and name-mangling scheme. */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define CONCAT(prefix, name) prefix ## name</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">float</span> R;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">typedef</span> <span class="keywordtype">float</span> _Complex C;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#define Y(name) CONCAT(nfftf_,name)</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define Z(name) CONCAT(fftwf_,name)</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT(name) CONCAT(nfsftf_,name)</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> R;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex C;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#define Y(name) CONCAT(nfftl_,name)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define Z(name) CONCAT(fftwl_,name)</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT(name) CONCAT(nfsftl_,name)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">double</span> R;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">typedef</span> <span class="keywordtype">double</span> _Complex C;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#define Y(name) CONCAT(nfft_,name)</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define Z(name) CONCAT(fftw_,name)</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT(name) CONCAT(nfsft_,name)</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) Y(name)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#define STRINGIZEx(x) #x</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define STRINGIZE(x) STRINGIZEx(x)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor">#ifdef NFFT_LDOUBLE</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#  define K(x) ((R) x##L)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#  define K(x) ((R) x)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#define DK(name, value) const R name = K(value)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/* Integral type large enough to contain a stride (what ``int'' should have been</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"> * in the first place) */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">typedef</span> ptrdiff_t INT;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor">#define KPI K(3.1415926535897932384626433832795028841971693993751)</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor"></span><span class="preprocessor">#define K2PI K(6.2831853071795864769252867665590057683943387987502)</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="preprocessor">#define KE K(2.7182818284590452353602874713526624977572470937000)</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">#define IF(x,a,b) ((x)?(a):(b))</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor"></span><span class="preprocessor">#define MIN(a,b) (((a)<(b))?(a):(b))</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX(a,b) (((a)>(b))?(a):(b))</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span><span class="preprocessor">#define ABS(x) (((x)>K(0.0))?(x):(-(x)))</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor"></span><span class="preprocessor">#define SIGN(a) (((a)>=0)?1:-1)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor"></span><span class="preprocessor">#define SIGN(a) (((a)>=0)?1:-1)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor"></span><span class="preprocessor">#define SIGNF(a) IF((a)<K(0.0),K(-1.0),K(1.0))</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/* macros for window functions */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor">#if defined(DIRAC_DELTA)</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI_HUT(k,d) K(1.0)</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI(x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_INIT(d)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_FINALIZE</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_ESTIMATE_m 0</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(GAUSSIAN)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI_HUT(k,d) ((R)EXP(-(POW(KPI*(k)/ths->n[d],K(2.0))*ths->b[d])))</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI(x,d) ((R)EXP(-POW((x)*((R)ths->n[d]),K(2.0)) / \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">    ths->b[d])/SQRT(KPI*ths->b[d]))</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">      int WINDOW_idx; \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">      ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">      for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor">        ths->b[WINDOW_idx]=(K(2.0)*ths->sigma[WINDOW_idx]) / \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">          (K(2.0)*ths->sigma[WINDOW_idx] - K(1.0)) * (((R)ths->m) / KPI); \</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor">    }</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_ESTIMATE_m 12</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(B_SPLINE)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI_HUT(k,d) ((R)(((k) == 0) ? K(1.0) / ths->n[(d)] : \</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor">    POW(SIN((k) * KPI / ths->n[(d)]) / ((k) * KPI / ths->n[(d)]), \</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">      K(2.0) * ths->m)/ths->n[(d)]))</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI(x,d) (Y(bspline)(2*ths->m,((x)*ths->n[(d)]) + \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">    (R)ths->m,ths->spline_coeffs) / ths->n[(d)])</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor">      ths->spline_coeffs= (R*)Y(malloc)(2*ths->m*sizeof(R)); \</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor">    }</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_ESTIMATE_m 11</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(SINC_POWER)</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI_HUT(k,d) (Y(bspline)(2 * ths->m, (K(2.0) * ths->m*(k)) / \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">    ((K(2.0) * ths->sigma[(d)] - 1) * ths->n[(d)] / \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">      ths->sigma[(d)]) + (R)ths->m, ths->spline_coeffs))</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI(x,d) ((R)(ths->n[(d)] / ths->sigma[(d)] * \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">    (K(2.0) * ths->sigma[(d)] - K(1.0))/ (K(2.0)*ths->m) * \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">    POW(Y(sinc)(KPI * ths->n[(d)] / ths->sigma[(d)] * (x) * \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">    (K(2.0) * ths->sigma[(d)] - K(1.0)) / (K(2.0)*ths->m)) , 2*ths->m) / \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">    ths->n[(d)]))</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">      ths->spline_coeffs= (R*)Y(malloc)(2 * ths->m * sizeof(R)); \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">    }</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_ESTIMATE_m 9</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* Kaiser-Bessel is the default. */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI_HUT(k,d) ((R)Y(bessel_i0)(ths->m * SQRT(\</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">    POW((R)(ths->b[d]), K(2.0)) - POW(K(2.0) * KPI * (k) / ths->n[d], K(2.0)))))</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor"></span><span class="preprocessor">  #define PHI(x,d) ((R)((POW((R)(ths->m), K(2.0))\</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">    -POW((x)*ths->n[d],K(2.0))) > 0)? \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">    SINH(ths->b[d] * SQRT(POW((R)(ths->m),K(2.0)) - \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">    POW((x)*ths->n[d],K(2.0))))/(KPI*SQRT(POW((R)(ths->m),K(2.0)) - \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">    POW((x)*ths->n[d],K(2.0)))) : (((POW((R)(ths->m),K(2.0)) - \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">    POW((x)*ths->n[d],K(2.0))) < 0)? SIN(ths->b[d] * \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">    SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m), K(2.0)))) / \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">    (KPI*SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m),K(2.0)))):K(1.0)))</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">      int WINDOW_idx; \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">      ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">      for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor">        ths->b[WINDOW_idx] = ((R)KPI*(K(2.0)-K(1.0) / ths->sigma[WINDOW_idx])); \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">  }</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span><span class="preprocessor">  #define WINDOW_HELP_ESTIMATE_m 6</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COPYSIGNL == 0</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> copysignl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEXTAFTERL == 0</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> nextafterl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NANL == 0</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> nanl(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEILL == 0</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> ceill(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FLOORL == 0</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> floorl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEARBYINTL == 0</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> nearbyintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_RINTL == 0</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> rintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ROUNDL == 0</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> roundl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LRINTL == 0</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lrintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LROUNDL == 0</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lroundl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLRINTL == 0</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llrintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLROUNDL == 0</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llroundl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TRUNCL == 0</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> truncl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMODL == 0</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fmodl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMAINDERL == 0</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> remainderl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMQUOL == 0</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> remquol(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x, <span class="keywordtype">long</span> <span class="keywordtype">double</span> y, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FDIML == 0</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fdiml(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAXL == 0</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fmaxl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMINL == 0</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fminl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAL == 0</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fmal(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x, <span class="keywordtype">long</span> <span class="keywordtype">double</span> y, <span class="keywordtype">long</span> <span class="keywordtype">double</span> z);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FABSL == 0</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fabsl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SQRTL == 0</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> sqrtl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CBRTL == 0</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cbrtl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_HYPOTL == 0</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> hypotl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPL == 0</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> expl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP2L == 0</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> exp2l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPM1L == 0</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> expm1l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGL == 0</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> logl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG2L == 0</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log2l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG10L == 0</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log10l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG1PL == 0</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log1pl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGBL == 0</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> logbl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ILOGBL == 0</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> ilogbl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_MODFL == 0</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> modfl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FREXPL == 0</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> frexpl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LDEXPL == 0</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> ldexpl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBNL == 0</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> scalbnl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBLNL == 0</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> scalblnl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_POWL == 0</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> powl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSL == 0</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINL == 0</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> sinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANL == 0</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> tanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSHL == 0</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> coshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINHL == 0</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> sinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANHL == 0</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> tanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSL == 0</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> acosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINL == 0</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> asinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANL == 0</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN2L == 0</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atan2l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSHL == 0</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> acoshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINHL == 0</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> asinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANHL == 0</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TGAMMAL == 0</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> tgammal(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LGAMMAL == 0</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> lgammal(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J0L == 0</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> j0l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J1L == 0</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> j1l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_JNL == 0</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> jnl(<span class="keywordtype">int</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y0L == 0</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> y0l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y1L == 0</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> y1l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_YNL == 0</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> ynl(<span class="keywordtype">int</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFL == 0</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> erfl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFCL == 0</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> erfcl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CREALL == 0</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> creall(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CIMAGL == 0</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cimagl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CABSL == 0</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cabsl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CARGL == 0</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cargl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CONJL == 0</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex conjl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPROJL == 0</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cprojl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSQRTL == 0</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex csqrtl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEXPL == 0</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cexpl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CLOGL == 0</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex clogl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPOWL == 0</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cpowl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z, <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex w);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINL == 0</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex csinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSL == 0</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ccosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANL == 0</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ctanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINL == 0</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex casinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSL == 0</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cacosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANL == 0</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex catanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINHL == 0</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex csinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSHL == 0</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ccoshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANHL == 0</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ctanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINHL == 0</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex casinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSHL == 0</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cacoshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANHL == 0</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex catanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="preprocessor"></span><span class="preprocessor">#define COPYSIGN copysignl</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="preprocessor"></span><span class="preprocessor">#define NEXTAFTER  nextafterl</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor"></span><span class="preprocessor">#define MKNAN nanl</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="preprocessor"></span><span class="preprocessor">#define CEIL ceill</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="preprocessor"></span><span class="preprocessor">#define FLOOR floorl</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="preprocessor"></span><span class="preprocessor">#define NEARBYINT nearbyintl</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="preprocessor"></span><span class="preprocessor">#define RINT rintl</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="preprocessor"></span><span class="preprocessor">#define ROUND roundl</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="preprocessor"></span><span class="preprocessor">#define LRINT lrintl</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="preprocessor"></span><span class="preprocessor">#define LROUND lroundl</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="preprocessor"></span><span class="preprocessor">#define LLRINT llrintl</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="preprocessor"></span><span class="preprocessor">#define LLROUND llroundl</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="preprocessor"></span><span class="preprocessor">#define TRUNC truncl</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="preprocessor"></span><span class="preprocessor">#define FMOD fmodl</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor"></span><span class="preprocessor">#define REMAINDER remainderl</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor"></span><span class="preprocessor">#define REMQUO remquol</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor"></span><span class="preprocessor">#define FDIM fdiml</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="preprocessor"></span><span class="preprocessor">#define FMAX fmaxl</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="preprocessor"></span><span class="preprocessor">#define FMIN fminl</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="preprocessor"></span><span class="preprocessor">#define FFMA fmal</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="preprocessor"></span><span class="preprocessor">#define FABS fabsl</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor"></span><span class="preprocessor">#define SQRT sqrtl</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor"></span><span class="preprocessor">#define CBRT cbrtl</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor"></span><span class="preprocessor">#define HYPOT hypotl</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP expl</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP2 exp2l</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="preprocessor"></span><span class="preprocessor">#define EXPM1 expm1l</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG logl</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG2 log2l</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG10 log10l</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG1P log1pl</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="preprocessor"></span><span class="preprocessor">#define LOGB logbl</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor"></span><span class="preprocessor">#define ILOGB ilogbl</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor"></span><span class="preprocessor">#define MODF modfl</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor"></span><span class="preprocessor">#define FREXP frexpl</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="preprocessor"></span><span class="preprocessor">#define LDEXP ldexpl</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBN scalbnl</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBLN scalblnl</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="preprocessor"></span><span class="preprocessor">#define POW powl</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="preprocessor"></span><span class="preprocessor">#define COS cosl</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN sinl</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor"></span><span class="preprocessor">#define TAN tanl</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="preprocessor"></span><span class="preprocessor">#define COSH coshl</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor"></span><span class="preprocessor">#define SINH sinhl</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor"></span><span class="preprocessor">#define TANH tanhl</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS acosl</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="preprocessor"></span><span class="preprocessor">#define ASIN asinl</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN atanl</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN2 atan2l</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOSH acoshl</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor"></span><span class="preprocessor">#define ASINH asinhl</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor"></span><span class="preprocessor">#define ATANH atanhl</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor"></span><span class="preprocessor">#define TGAMMA tgammal</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor"></span><span class="preprocessor">#define LGAMMA lgammal</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="preprocessor"></span><span class="preprocessor">#define J0 j0l</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="preprocessor"></span><span class="preprocessor">#define J1 j1l</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor"></span><span class="preprocessor">#define JN jnl</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor"></span><span class="preprocessor">#define Y0 y0l</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor"></span><span class="preprocessor">#define Y1 y1l</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="preprocessor"></span><span class="preprocessor">#define YN ynl</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="preprocessor"></span><span class="preprocessor">#define ERF erfl</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="preprocessor"></span><span class="preprocessor">#define ERFC erfcl</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="preprocessor"></span><span class="preprocessor">#define CREAL creall</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="preprocessor"></span><span class="preprocessor">#define CIMAG cimagl</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="preprocessor"></span><span class="preprocessor">#define CABS cabsl</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor"></span><span class="preprocessor">#define CARG cargl</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor"></span><span class="preprocessor">#define CONJ conjl</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor"></span><span class="preprocessor">#define CPROJ cprojl</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor"></span><span class="preprocessor">#define CSQRT csqrtl</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor"></span><span class="preprocessor">#define CEXP cexpl</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor"></span><span class="preprocessor">#define CLOG clogl</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="preprocessor"></span><span class="preprocessor">#define CPOW cpowl</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="preprocessor"></span><span class="preprocessor">#define CSIN csinl</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOS ccosl</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="preprocessor"></span><span class="preprocessor">#define CTAN ctanl</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="preprocessor"></span><span class="preprocessor">#define CASIN casinl</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOS cacosl</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor"></span><span class="preprocessor">#define CATAN catanl</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor"></span><span class="preprocessor">#define CSINH csinhl</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOSH ccoshl</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="preprocessor"></span><span class="preprocessor">#define CTANH ctanhl</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="preprocessor"></span><span class="preprocessor">#define CASINH casinhl</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOSH cacoshl</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="preprocessor"></span><span class="preprocessor">#define CATANH catanhl</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COPYSIGNF == 0</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> copysignf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEXTAFTERF == 0</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> nextafterf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NANF == 0</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> nanf(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEILF == 0</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> ceilf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FLOORF == 0</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> floorf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEARBYINTF == 0</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> nearbyintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_RINTF == 0</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> rintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ROUNDF == 0</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> roundf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LRINTF == 0</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lrintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LROUNDF == 0</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lroundf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLRINTF == 0</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llrintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLROUNDF == 0</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llroundf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TRUNCF == 0</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> truncf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMODF == 0</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fmodf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMAINDERF == 0</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> remainderf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMQUOF == 0</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> remquof(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FDIMF == 0</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fdimf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAXF == 0</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fmaxf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMINF == 0</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fminf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAF == 0</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fmaf(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FABSF == 0</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fabsf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SQRTF == 0</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> sqrtf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CBRTF == 0</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cbrtf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_HYPOTF == 0</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> hypotf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPF == 0</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> expf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP2F == 0</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> exp2f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPM1F == 0</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> expm1f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGF == 0</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> logf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG2F == 0</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> log2f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG10F == 0</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> log10f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG1PF == 0</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> log1pf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGBF == 0</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> logbf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ILOGBF == 0</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> ilogbf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_MODFF == 0</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> modff(<span class="keywordtype">float</span>, <span class="keywordtype">float</span> *);</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FREXPF == 0</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> frexpf(<span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LDEXPF == 0</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> ldexpf(<span class="keywordtype">float</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBNF == 0</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> scalbnf(<span class="keywordtype">float</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBLNF == 0</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> scalblnf(<span class="keywordtype">float</span>, <span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_POWF == 0</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> powf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSF == 0</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cosf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINF == 0</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> sinf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANF == 0</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> tanf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSHF == 0</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> coshf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINHF == 0</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> sinhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANHF == 0</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> tanhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSF == 0</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> acosf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINF == 0</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> asinf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANF == 0</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> atanf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN2F == 0</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> atan2f(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSHF == 0</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> acoshf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINHF == 0</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> asinhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANHF == 0</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> atanhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TGAMMAF == 0</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> tgammaf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LGAMMAF == 0</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> lgammaf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J0F == 0</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> j0f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J1F == 0</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> j1f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_JNF == 0</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> jnf(<span class="keywordtype">int</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y0F == 0</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> y0f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y1F == 0</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> y1f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_YNF == 0</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> ynf(<span class="keywordtype">int</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFF == 0</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> erff(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFCF == 0</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> erfcf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CREALF == 0</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> crealf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CIMAGF == 0</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cimagf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CABSF == 0</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cabsf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CARGF == 0</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cargf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CONJF == 0</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex conjf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPROJF == 0</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cprojf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSQRTF == 0</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex csqrtf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEXPF == 0</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cexpf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CLOGF == 0</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex clogf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPOWF == 0</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cpowf(<span class="keywordtype">float</span> _Complex z, <span class="keywordtype">float</span> _Complex w);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINF == 0</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex csinf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSF == 0</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ccosf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANF == 0</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ctanf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINF == 0</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex casinf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSF == 0</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cacosf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANF == 0</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex catanf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINHF == 0</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex csinhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSHF == 0</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ccoshf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANHF == 0</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ctanhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINHF == 0</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex casinhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSHF == 0</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cacoshf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANHF == 0</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex catanhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> <span class="preprocessor"></span><span class="preprocessor">#define COPYSIGN copysignf</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> <span class="preprocessor"></span><span class="preprocessor">#define NEXTAFTER  nextafterf</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="preprocessor"></span><span class="preprocessor">#define MKNAN nanf</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="preprocessor"></span><span class="preprocessor">#define CEIL ceilf</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="preprocessor"></span><span class="preprocessor">#define FLOOR floorf</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="preprocessor"></span><span class="preprocessor">#define NEARBYINT nearbyintf</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> <span class="preprocessor"></span><span class="preprocessor">#define RINT rintf</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> <span class="preprocessor"></span><span class="preprocessor">#define ROUND roundf</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> <span class="preprocessor"></span><span class="preprocessor">#define LRINT lrintf</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> <span class="preprocessor"></span><span class="preprocessor">#define LROUND lroundf</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="preprocessor"></span><span class="preprocessor">#define LLRINT llrintf</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> <span class="preprocessor"></span><span class="preprocessor">#define LLROUND llroundf</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> <span class="preprocessor"></span><span class="preprocessor">#define TRUNC truncf</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> <span class="preprocessor"></span><span class="preprocessor">#define FMOD fmodf</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> <span class="preprocessor"></span><span class="preprocessor">#define REMAINDER remainderf</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> <span class="preprocessor"></span><span class="preprocessor">#define REMQUO remquof</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="preprocessor"></span><span class="preprocessor">#define FDIM fdimf</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="preprocessor"></span><span class="preprocessor">#define FMAX fmaxf</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> <span class="preprocessor"></span><span class="preprocessor">#define FMIN fminf</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> <span class="preprocessor"></span><span class="preprocessor">#define FFMA fmaf</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> <span class="preprocessor"></span><span class="preprocessor">#define FABS fabsf</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="preprocessor"></span><span class="preprocessor">#define SQRT sqrtf</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> <span class="preprocessor"></span><span class="preprocessor">#define CBRT cbrtf</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="preprocessor"></span><span class="preprocessor">#define HYPOT hypotf</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP expf</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP2 exp2f</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="preprocessor"></span><span class="preprocessor">#define EXPM1 expm1f</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG logf</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG2 log2f</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG10 log10f</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG1P log1pf</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="preprocessor"></span><span class="preprocessor">#define LOGB logbf</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="preprocessor"></span><span class="preprocessor">#define ILOGB ilogbf</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="preprocessor"></span><span class="preprocessor">#define MODF modff</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="preprocessor"></span><span class="preprocessor">#define FREXP frexpf</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="preprocessor"></span><span class="preprocessor">#define LDEXP ldexpf</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBN scalbnf</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBLN scalblnf</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="preprocessor"></span><span class="preprocessor">#define POW powf</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="preprocessor"></span><span class="preprocessor">#define COS cosf</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN sinf</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> <span class="preprocessor"></span><span class="preprocessor">#define TAN tanf</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> <span class="preprocessor"></span><span class="preprocessor">#define COSH coshf</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> <span class="preprocessor"></span><span class="preprocessor">#define SINH sinhf</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> <span class="preprocessor"></span><span class="preprocessor">#define TANH tanhf</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS acosf</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="preprocessor"></span><span class="preprocessor">#define ASIN asinf</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN atanf</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN2 atan2f</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOSH acoshf</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="preprocessor"></span><span class="preprocessor">#define ASINH asinhf</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="preprocessor"></span><span class="preprocessor">#define ATANH atanhf</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="preprocessor"></span><span class="preprocessor">#define TGAMMA tgammaf</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="preprocessor"></span><span class="preprocessor">#define LGAMMA lgammaf</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="preprocessor"></span><span class="preprocessor">#define J0 j0f</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="preprocessor"></span><span class="preprocessor">#define J1 j1f</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="preprocessor"></span><span class="preprocessor">#define JN jnf</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="preprocessor"></span><span class="preprocessor">#define Y0 y0f</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="preprocessor"></span><span class="preprocessor">#define Y1 y1f</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="preprocessor"></span><span class="preprocessor">#define YN ynf</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="preprocessor"></span><span class="preprocessor">#define ERF erff</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> <span class="preprocessor"></span><span class="preprocessor">#define ERFC erfcf</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> <span class="preprocessor"></span><span class="preprocessor">#define CREAL crealf</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="preprocessor"></span><span class="preprocessor">#define CIMAG cimagf</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> <span class="preprocessor"></span><span class="preprocessor">#define CABS cabsf</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> <span class="preprocessor"></span><span class="preprocessor">#define CARG cargf</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> <span class="preprocessor"></span><span class="preprocessor">#define CONJ conjf</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="preprocessor"></span><span class="preprocessor">#define CPROJ cprojf</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="preprocessor"></span><span class="preprocessor">#define CSQRT csqrtf</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="preprocessor"></span><span class="preprocessor">#define CEXP cexpf</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="preprocessor"></span><span class="preprocessor">#define CLOG clogf</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="preprocessor"></span><span class="preprocessor">#define CPOW cpowf</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="preprocessor"></span><span class="preprocessor">#define CSIN csinf</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOS ccosf</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> <span class="preprocessor"></span><span class="preprocessor">#define CTAN ctanf</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="preprocessor"></span><span class="preprocessor">#define CASIN casinf</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOS cacosf</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="preprocessor"></span><span class="preprocessor">#define CATAN catanf</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> <span class="preprocessor"></span><span class="preprocessor">#define CSINH csinhf</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOSH ccoshf</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="preprocessor"></span><span class="preprocessor">#define CTANH ctanhf</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="preprocessor"></span><span class="preprocessor">#define CASINH casinhf</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOSH cacoshf</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="preprocessor"></span><span class="preprocessor">#define CATANH catanhf</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COPYSIGN == 0</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> copysign(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEXTAFTER == 0</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> nextafter(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NAN == 0</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> nan(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEIL == 0</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> ceil(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FLOOR == 0</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> floor(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEARBYINT == 0</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> nearbyint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_RINT == 0</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> rint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ROUND == 0</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> round(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LRINT == 0</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lrint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LROUND == 0</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lround(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLRINT == 0</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llrint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLROUND == 0</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llround(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TRUNC == 0</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> trunc(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMOD == 0</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fmod(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMAINDER == 0</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> remainder(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMQUO == 0</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> remquo(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FDIM == 0</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fdim(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAX == 0</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fmax(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMIN == 0</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fmin(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMA == 0</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fma(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span> z);</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FABS == 0</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fabs(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SQRT == 0</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> sqrt(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CBRT == 0</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cbrt(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_HYPOT == 0</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> hypot(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP == 0</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> exp(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP2 == 0</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> exp2(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPM1 == 0</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> expm1(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG == 0</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG2 == 0</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log2(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG10 == 0</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log10(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG1P == 0</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log1p(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGB == 0</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> logb(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ILOGB == 0</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> ilogb(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_MODF == 0</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> modf(<span class="keywordtype">double</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FREXP == 0</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> frexp(<span class="keywordtype">double</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LDEXP == 0</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> ldexp(<span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBN == 0</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> scalbn(<span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBLN == 0</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> scalbln(<span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_POW == 0</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> pow(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COS == 0</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cos(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SIN == 0</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> sin(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TAN == 0</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> tan(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSH == 0</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cosh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINH == 0</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> sinh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANH == 0</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> tanh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOS == 0</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> acos(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASIN == 0</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> asin(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN == 0</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> atan(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN2 == 0</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> atan2(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSH == 0</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> acosh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINH == 0</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> asinh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANH == 0</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> atanh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TGAMMA == 0</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> tgamma(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LGAMMA == 0</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> lgamma(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J0 == 0</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> j0(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J1 == 0</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> j1(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_JN == 0</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> jn(<span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y0 == 0</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> y0(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y1 == 0</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> y1(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_YN == 0</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> yn(<span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERF == 0</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> erf(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFC == 0</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> erfc(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CREAL == 0</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> creal(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CIMAG == 0</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cimag(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CABS == 0</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cabs(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CARG == 0</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> carg(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CONJ == 0</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex conj(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPROJ == 0</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cproj(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSQRT == 0</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex csqrt(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEXP == 0</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cexp(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CLOG == 0</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex clog(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPOW == 0</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cpow(<span class="keywordtype">double</span> _Complex z, <span class="keywordtype">double</span> _Complex w);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSIN == 0</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex csin(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOS == 0</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ccos(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTAN == 0</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ctan(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASIN == 0</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex casin(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOS == 0</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cacos(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATAN == 0</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex catan(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINH == 0</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex csinh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSH == 0</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ccosh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANH == 0</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ctanh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINH == 0</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex casinh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSH == 0</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cacosh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANH == 0</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex catanh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="preprocessor"></span><span class="preprocessor">#define COPYSIGN copysign</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="preprocessor"></span><span class="preprocessor">#define NEXTAFTER  nextafter</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="preprocessor"></span><span class="preprocessor">#define MKNAN nan</span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="preprocessor"></span><span class="preprocessor">#define CEIL ceil</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="preprocessor"></span><span class="preprocessor">#define FLOOR floor</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="preprocessor"></span><span class="preprocessor">#define NEARBYINT nearbyint</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="preprocessor"></span><span class="preprocessor">#define RINT rint</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="preprocessor"></span><span class="preprocessor">#define ROUND round</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="preprocessor"></span><span class="preprocessor">#define LRINT lrint</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="preprocessor"></span><span class="preprocessor">#define LROUND lround</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="preprocessor"></span><span class="preprocessor">#define LLRINT llrint</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="preprocessor"></span><span class="preprocessor">#define LLROUND llround</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="preprocessor"></span><span class="preprocessor">#define TRUNC trunc</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="preprocessor"></span><span class="preprocessor">#define FMOD fmod</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="preprocessor"></span><span class="preprocessor">#define REMAINDER remainder</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="preprocessor"></span><span class="preprocessor">#define REMQUO remquo</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="preprocessor"></span><span class="preprocessor">#define FDIM fdim</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="preprocessor"></span><span class="preprocessor">#define FMAX fmax</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="preprocessor"></span><span class="preprocessor">#define FMIN fmin</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="preprocessor"></span><span class="preprocessor">#define FFMA fma</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="preprocessor"></span><span class="preprocessor">#define FABS fabs</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="preprocessor"></span><span class="preprocessor">#define SQRT sqrt</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="preprocessor"></span><span class="preprocessor">#define CBRT cbrt</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="preprocessor"></span><span class="preprocessor">#define HYPOT hypot</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP exp</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP2 exp2</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="preprocessor"></span><span class="preprocessor">#define EXPM1 expm1</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG log</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG2 log2</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG10 log10</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG1P log1p</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="preprocessor"></span><span class="preprocessor">#define LOGB logb</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="preprocessor"></span><span class="preprocessor">#define ILOGB ilogb</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="preprocessor"></span><span class="preprocessor">#define MODF modf</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="preprocessor"></span><span class="preprocessor">#define FREXP frexp</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="preprocessor"></span><span class="preprocessor">#define LDEXP ldexp</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBN scalbn</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBLN scalbln</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="preprocessor"></span><span class="preprocessor">#define POW pow</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="preprocessor"></span><span class="preprocessor">#define COS cos</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN sin</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="preprocessor"></span><span class="preprocessor">#define TAN tan</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="preprocessor"></span><span class="preprocessor">#define COSH cosh</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="preprocessor"></span><span class="preprocessor">#define SINH sinh</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="preprocessor"></span><span class="preprocessor">#define TANH tanh</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS acos</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="preprocessor"></span><span class="preprocessor">#define ASIN asin</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN atan</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN2 atan2</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOSH acosh</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="preprocessor"></span><span class="preprocessor">#define ASINH asinh</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="preprocessor"></span><span class="preprocessor">#define ATANH atanh</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="preprocessor"></span><span class="preprocessor">#define TGAMMA tgamma</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="preprocessor"></span><span class="preprocessor">#define LGAMMA lgamma</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="preprocessor"></span><span class="preprocessor">#define J0 j0</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="preprocessor"></span><span class="preprocessor">#define J1 j1</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="preprocessor"></span><span class="preprocessor">#define JN jn</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="preprocessor"></span><span class="preprocessor">#define Y0 y0</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="preprocessor"></span><span class="preprocessor">#define Y1 y1</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="preprocessor"></span><span class="preprocessor">#define YN yn</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="preprocessor"></span><span class="preprocessor">#define ERF erf</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="preprocessor"></span><span class="preprocessor">#define ERFC erfc</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="preprocessor"></span><span class="preprocessor">#define CREAL creal</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="preprocessor"></span><span class="preprocessor">#define CIMAG cimag</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="preprocessor"></span><span class="preprocessor">#define CABS cabs</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="preprocessor"></span><span class="preprocessor">#define CARG carg</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="preprocessor"></span><span class="preprocessor">#define CONJ conj</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor"></span><span class="preprocessor">#define CPROJ cproj</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"></span><span class="preprocessor">#define CSQRT csqrt</span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="preprocessor"></span><span class="preprocessor">#define CEXP cexp</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="preprocessor"></span><span class="preprocessor">#define CLOG clog</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="preprocessor"></span><span class="preprocessor">#define CPOW cpow</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="preprocessor"></span><span class="preprocessor">#define CSIN csin</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOS ccos</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="preprocessor"></span><span class="preprocessor">#define CTAN ctan</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="preprocessor"></span><span class="preprocessor">#define CASIN casin</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOS cacos</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="preprocessor"></span><span class="preprocessor">#define CATAN catan</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="preprocessor"></span><span class="preprocessor">#define CSINH csinh</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOSH ccosh</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor"></span><span class="preprocessor">#define CTANH ctanh</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="preprocessor"></span><span class="preprocessor">#define CASINH casinh</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOSH cacosh</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="preprocessor"></span><span class="preprocessor">#define CATANH catanh</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="preprocessor"></span><span class="preprocessor">  #define EPSILON LDBL_EPSILON//4.0E-31L</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="preprocessor"></span><span class="preprocessor">  #define MANT_DIG LDBL_MANT_DIG</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="preprocessor"></span><span class="preprocessor">  #define MIN_EXP LDBL_MIN_EXP</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="preprocessor"></span><span class="preprocessor">  #define MAX_EXP LDBL_MAX_EXP</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor"></span><span class="preprocessor">  #define EPSILON FLT_EPSILON</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="preprocessor"></span><span class="preprocessor">  #define MANT_DIG FLT_MANT_DIG</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="preprocessor"></span><span class="preprocessor">  #define MIN_EXP FLT_MIN_EXP</span></div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="preprocessor"></span><span class="preprocessor">  #define MAX_EXP FLT_MAX_EXP</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="preprocessor"></span><span class="preprocessor">  #define EPSILON DBL_EPSILON</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="preprocessor"></span><span class="preprocessor">  #define MANT_DIG DBL_MANT_DIG</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="preprocessor"></span><span class="preprocessor">  #define MIN_EXP DBL_MIN_EXP</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="preprocessor"></span><span class="preprocessor">  #define MAX_EXP DBL_MAX_EXP</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor">#if defined(FLT_ROUND)</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="preprocessor"></span><span class="preprocessor">  #if FLT_ROUND != -1</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="preprocessor"></span><span class="preprocessor">    #define FLTROUND 1.0</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="preprocessor"></span><span class="preprocessor">  #else</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="preprocessor"></span><span class="preprocessor">    #define FLTROUND 0.0</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="preprocessor"></span><span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="preprocessor"></span><span class="preprocessor">  #define FLTROUND 0.0</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="preprocessor">#if HAVE_DECL_DRAND48 == 0</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor"></span>  <span class="keyword">extern</span> <span class="keywordtype">double</span> drand48(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SRAND48 == 0</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="preprocessor"></span>  <span class="keyword">extern</span> <span class="keywordtype">void</span> srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="preprocessor"></span><span class="preprocessor">#define R_RADIX FLT_RADIX</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor"></span><span class="preprocessor">#define II _Complex_I</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">/* format strings */</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="preprocessor"></span><span class="preprocessor">#  define FE "LE"</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="preprocessor"></span><span class="preprocessor">#  define FE_ "% 36.32LE"</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="preprocessor"></span><span class="preprocessor">#  define FFI "%Lf"</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="preprocessor"></span><span class="preprocessor">#  define FE "E"</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor"></span><span class="preprocessor">#  define FE_ "% 12.8E"</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor"></span><span class="preprocessor">#  define FFI "%f"</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="preprocessor"></span><span class="preprocessor">#  define FE "lE"</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="preprocessor"></span><span class="preprocessor">#  define FE_ "% 20.16lE"</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor"></span><span class="preprocessor">#  define FFI "%lf"</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="preprocessor">#define TRUE 1</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="preprocessor"></span><span class="preprocessor">#define FALSE 0</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="preprocessor">#define UNUSED(x) (void)x</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keyword">extern</span> <span class="keywordtype">void</span> nfft_assertion_failed(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span> *file);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">/* always check */</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="preprocessor">#define CK(ex) \</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="preprocessor">  (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="preprocessor">#ifdef NFFT_DEBUG</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="preprocessor"></span>  <span class="comment">/* check only if debug enabled */</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="preprocessor">  #define A(ex) \</span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="preprocessor">    (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="preprocessor"></span><span class="preprocessor">  #define A(ex) </span><span class="comment">/* nothing */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="preprocessor">#ifdef HAVE_ALLOCA</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="preprocessor"></span>  <span class="comment">/* Use alloca if available. */</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="preprocessor">  #ifndef alloca</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="preprocessor"></span><span class="preprocessor">    #ifdef __GNUC__</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="preprocessor"></span>      <span class="comment">/* No alloca defined but can use GCC's builtin version. */</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="preprocessor">      #define alloca __builtin_alloca</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="preprocessor"></span><span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="preprocessor"></span>      <span class="comment">/* No alloca defined and not using GCC. */</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="preprocessor">      #ifdef _MSC_VER</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="preprocessor"></span>        <span class="comment">/* Using Microsoft's C compiler. Include header file and use _alloca</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="comment">         * defined therein. */</span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="preprocessor">        #include <malloc.h></span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="preprocessor">        #define alloca _alloca</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="preprocessor"></span><span class="preprocessor">      #else</span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="preprocessor"></span>        <span class="comment">/* Also not using Microsoft's C compiler. */</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="preprocessor">        #if HAVE_ALLOCA_H</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="preprocessor"></span>          <span class="comment">/* Alloca header is available. */</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="preprocessor">          #include <alloca.h></span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="preprocessor">        #else</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="preprocessor"></span>          <span class="comment">/* No alloca header available. */</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="preprocessor">          #ifdef _AIX</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="preprocessor"></span>            <span class="comment">/* We're using the AIX C compiler. Use pragma. */</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="preprocessor">            #pragma alloca</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="preprocessor"></span><span class="preprocessor">          #else</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="preprocessor"></span>            <span class="comment">/* Not using AIX compiler. */</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="preprocessor">            #ifndef alloca </span><span class="comment">/* HP's cc +Olibcalls predefines alloca. */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="preprocessor"></span>              <span class="keywordtype">void</span> *alloca(<span class="keywordtype">size_t</span>);</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="preprocessor">            #endif</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="preprocessor"></span><span class="preprocessor">          #endif</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="preprocessor"></span><span class="preprocessor">        #endif</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="preprocessor"></span><span class="preprocessor">      #endif</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="preprocessor"></span><span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="preprocessor"></span><span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="preprocessor"></span>  <span class="comment">/* So we have alloca. */</span></div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="preprocessor">  #define STACK_MALLOC(T, p, x) p = (T)alloca(x)</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="preprocessor"></span><span class="preprocessor">  #define STACK_FREE(x) </span><span class="comment">/* Nothing. Cleanup done automatically. */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* ! HAVE_ALLOCA */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="preprocessor"></span>  <span class="comment">/* Use malloc instead of alloca. So we allocate memory on the heap instead of</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">   * on the stack which is slower. */</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="preprocessor">  #define STACK_MALLOC(T, p, x) p = (T)nfft_malloc(x)</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="preprocessor"></span><span class="preprocessor">  #define STACK_FREE(x) nfft_free(x)</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* ! HAVE_ALLOCA */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordtype">double</span> nfft_elapsed_seconds(ticks t1, ticks t0);</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="preprocessor">#define UNUSED(x) (void)x</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> MEASURE_TIME_r;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <span class="keywordtype">double</span> MEASURE_TIME_tt;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  ticks MEASURE_TIME_t0, MEASURE_TIME_t1;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="preprocessor">#define TIC(a)                                                                \</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="preprocessor">  ths->MEASURE_TIME_t[(a)]=0;                                                 \</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="preprocessor">  MEASURE_TIME_r=0;                                                           \</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="preprocessor">  </span><span class="comment">/* DISABLED LOOP due to code blocks causing segfault when repeatedly run */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="preprocessor">  </span><span class="comment">/*while(ths->MEASURE_TIME_t[(a)]<0.01)*/</span><span class="preprocessor">                                    \</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="preprocessor">      MEASURE_TIME_r++;                                                       \</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="preprocessor">      MEASURE_TIME_t0 = getticks();                                           \</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor"></span><span class="comment">/* THE MEASURED FUNCTION IS CALLED REPEATEDLY */</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="preprocessor">#define TOC(a)                                                                \</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="preprocessor">      MEASURE_TIME_t1 = getticks();                                           \</span></div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="preprocessor">      MEASURE_TIME_tt = nfft_elapsed_seconds(MEASURE_TIME_t1,MEASURE_TIME_t0);\</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="preprocessor">      ths->MEASURE_TIME_t[(a)]+=MEASURE_TIME_tt;                              \</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="preprocessor">    }                                                                         \</span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="preprocessor">  ths->MEASURE_TIME_t[(a)]/=MEASURE_TIME_r;                                   \</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="preprocessor"></span><span class="preprocessor">#define TIC(a)</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="preprocessor"></span><span class="preprocessor">#define TOC(a)</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="preprocessor">#ifdef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="preprocessor"></span><span class="preprocessor">#define TIC_FFTW(a) TIC(a)</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="preprocessor"></span><span class="preprocessor">#define TOC_FFTW(a) TOC(a)</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="preprocessor"></span><span class="preprocessor">#define TIC_FFTW(a)</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="preprocessor"></span><span class="preprocessor">#define TOC_FFTW(a)</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">/* sinc.c: */</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> </div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="comment">/* Sinus cardinalis. */</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> R X(sinc)(R x);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment">/* lambda.c: */</span></div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> </div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment">/* lambda(z, eps) = gamma(z + eps) / gamma(z + 1) */</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> R X(lambda)(R z, R eps);</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> </div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">/* lambda2(mu, nu) = sqrt(gamma(mu + nu + 1) / (gamma(mu + 1) * gamma(nu + 1))) */</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> R X(lambda2)(R mu, R nu);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment">/* bessel_i0.c: */</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> R X(bessel_i0)(R x);</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> </div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">/* float.c: */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {NFFT_EPSILON = 0, NFFT_SAFE_MIN = 1, NFFT_BASE = 2,</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>   NFFT_PRECISION = 3, NFFT_MANT_DIG = 4, NFFT_FLTROUND = 5, NFFT_E_MIN = 6,</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>   NFFT_R_MIN = 7, NFFT_E_MAX = 8, NFFT_R_MAX = 9} float_property;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> </div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> R X(float_property)(float_property);</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> </div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="comment">/* int.c: */</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="keywordtype">int</span> X(exp2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> a);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordtype">int</span> X(log2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> m);</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordtype">int</span> X(next_power_of_2)(<span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="keywordtype">void</span> X(next_power_of_2_exp)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> *N2, <span class="keywordtype">int</span> *t);</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> </div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment">/* error.c: */</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> R X(error_l_infty_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">/* not used */</span> R X(error_l_infty_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> R X(error_l_infty_1_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n,</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>   <span class="keyword">const</span> C *z, <span class="keyword">const</span> INT m);</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">/* not used */</span> R X(error_l_infty_1_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n, <span class="keyword">const</span> R *z,</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>   <span class="keyword">const</span> INT m);</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> R X(error_l_2_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">/* not used */</span> R X(error_l_2_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/int_8c_source.html b/doc/api/html/int_8c_source.html
new file mode 100644
index 0000000..cfd4636
--- /dev/null
+++ b/doc/api/html/int_8c_source.html
@@ -0,0 +1,157 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - int.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">int.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="keywordtype">int</span> X(exp2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> a)</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>   <span class="keywordflow">return</span> (1U << a);</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> }</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="keywordtype">int</span> X(log2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>   <span class="keywordtype">int</span> l = 0;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordtype">int</span> mm = m;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   <span class="keywordflow">while</span> (mm > 0)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>     mm = (mm >> 1);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>     l++;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   }</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordflow">return</span> (l-1);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">int</span> X(next_power_of_2)(<span class="keyword">const</span> <span class="keywordtype">int</span> N)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">int</span> n,i,logn;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordtype">int</span> N_is_not_power_of_2=0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     n = N;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     logn = 0;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">while</span> (n != 1)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>       <span class="keywordflow">if</span> (n%2 == 1)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         N_is_not_power_of_2=1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>       n = n/2;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       logn++;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <span class="keywordflow">if</span> (!N_is_not_power_of_2)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>       logn--;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordflow">for</span> (i = 0; i <= logn; i++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       n = n*2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="keywordflow">return</span> n;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">void</span> X(next_power_of_2_exp)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> *N2, <span class="keywordtype">int</span> *t)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">int</span> n,i,logn;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span> N_is_not_power_of_2=0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     *N2 = 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     *t = 0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     n=N;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     logn=0;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="keywordflow">while</span> (n != 1)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       <span class="keywordflow">if</span> (n%2 == 1)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>           N_is_not_power_of_2=1;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>       n = n/2;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       logn++;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">if</span> (!N_is_not_power_of_2)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       logn--;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordflow">for</span> (i = 0; i <= logn; i++)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       n = n*2;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     *N2 = n;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     *t = logn+1;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/inverse__radon_8c.html b/doc/api/html/inverse__radon_8c.html
new file mode 100644
index 0000000..09a83fa
--- /dev/null
+++ b/doc/api/html/inverse__radon_8c.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - inverse_radon.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">inverse_radon.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based discrete inverse Radon transform.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="inverse__radon_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0091bbc07c9570a2ab0dac372c2104f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0091bbc07c9570a2ab0dac372c2104f1"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">KERNEL</a>(r)   (1.0-fabs((double)(r))/((double)R/2))</td></tr>
+<tr class="memdesc:a0091bbc07c9570a2ab0dac372c2104f1"><td class="mdescLeft"> </td><td class="mdescRight">define weights of kernel function for discrete Radon transform <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307b67b4c00a1c756f140c7fa831cdae"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the polar grid with T angles and R offsets <br/></td></tr>
+<tr class="memitem:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the linogram grid with T slopes and R offsets <br/></td></tr>
+<tr class="memitem:a298e52a05aeac043f9b35e8ae60a13e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a298e52a05aeac043f9b35e8ae60a13e4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">Inverse_Radon_trafo</a> (int(*gridfcn)(), int T, int R, double *Rf, int NN, double *f, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>)</td></tr>
+<tr class="memdesc:a298e52a05aeac043f9b35e8ae60a13e4"><td class="mdescLeft"> </td><td class="mdescRight">computes the inverse discrete Radon transform of Rf on the grid given by gridfcn() with T angles and R offsets by a NFFT-based CG-type algorithm <br/></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:a3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">simple test program for the inverse discrete Radon transform <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based discrete inverse Radon transform. </p>
+<p>Computes the inverse of the discrete Radon transform </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ R_{\theta_t} f\left(\frac{s}{R}\right) = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k} \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)} \, \mathrm{e}^{2\pi\mathrm{i} r s / R} \qquad(t \in I_T, s \in I_R). \]" src="form_134.png"/>
+</p>
+<p> given at the points <img class="formulaInl" alt="$\frac{r}{R}\theta_t$" src="form_135.png"/> of the polar or linogram grid and where <img class="formulaInl" alt="$w_r$" src="form_136.png"/> are the weights of the Dirichlet- or Fejer-kernel by 1D-FFTs and the 2D-iNFFT. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2005 </dd></dl>
+
+<p>Definition in file <a class="el" href="inverse__radon_8c_source.html">inverse_radon.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/inverse__radon_8c_source.html b/doc/api/html/inverse__radon_8c_source.html
new file mode 100644
index 0000000..ea3e33e
--- /dev/null
+++ b/doc/api/html/inverse__radon_8c_source.html
@@ -0,0 +1,295 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - inverse_radon.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">inverse_radon.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="inverse__radon_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: inverse_radon.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*#define KERNEL(r) 1.0 */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">   54</a></span> <span class="preprocessor">#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">   59</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtype">int [...]
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">   83</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtyp [...]
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       <span class="keywordflow">if</span>(t<0)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)4*(t+T/4)/T*r/R;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         x[2*((t+T/2)*R+(r+R/2))+0] = -(<span class="keywordtype">double</span>)4*(t-T/4)/T*r/R;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>       <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">  116</a></span> <span class="keywordtype">int</span> <a class="code" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4" title="computes the inverse discrete Radon transform of Rf on the grid given by gridfcn() with T angles and ...">Inverse_Radon_trafo</a>(<span class="keywordtype">int</span> (*gridfcn)(), <span class="keywordtype" [...]
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan;             </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   fftw_complex *<a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>;                    </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   fftw_plan my_fftw_plan;               </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">int</span> t,r;                              </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">int</span> l;                                </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> M=T*R;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   N[0]=NN; n[0]=2*N[0];</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   N[1]=NN; n[1]=2*N[1];</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   fft = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(R*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_FORWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   gridfcn(T,R,x,w);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordflow">if</span> (j%R)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]    = w[j];</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]    = 0.0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">for</span>(t=0; t<T; t++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*    for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">       fft[r] = cexp(I*PI*r)*Rf[t*R+(r+R/2)];</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">      for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">       fft[r+R/2] = cexp(I*PI*r)*Rf[t*R+r];</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">for</span>(r=0; r<R; r++)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       fft[r] = Rf[t*R+r] + _Complex_I*0.0;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[t*R] = 0.0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">for</span>(r=-R/2+1; r<R/2; r++)</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[t*R+(r+R/2)] = fft[r+R/2]/<a class="code" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1" title="define weights of kernel function for discrete Radon transform">KERNEL</a>(r);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     l=1;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       <span class="comment">/*if (sqrt(my_infft_plan.dot_r_iter)<=1e-12) break;*/</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="comment">/*printf("after %d iteration(s): weighted 2-norm of original residual vector = %g\n",l-1,sqrt(my_infft_plan.dot_r_iter));*/</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     f[k] = creal(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   fftw_destroy_plan(my_fftw_plan);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(fft);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">  236</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   int (*gridfcn)();                     </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordtype">int</span> T, R;                             </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   FILE *fp;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordtype">int</span> N;                                </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordtype">double</span> *Rf, *iRf;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;                            </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="keywordflow">if</span>( argc!=6 )</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     printf(<span class="stringliteral">"inverse_radon gridfcn N T R max_i\n"</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     printf(<span class="stringliteral">"gridfcn    \"polar\" or \"linogram\" \n"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     printf(<span class="stringliteral">"N          image size NxN            \n"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     printf(<span class="stringliteral">"T          number of slopes          \n"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     printf(<span class="stringliteral">"R          number of offsets         \n"</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     printf(<span class="stringliteral">"max_i      number of iterations      \n"</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     exit(-1);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordflow">if</span> (strcmp(argv[1],<span class="stringliteral">"polar"</span>) == 0)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     gridfcn = <a class="code" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     gridfcn = <a class="code" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   N = atoi(argv[2]);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   T = atoi(argv[3]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   R = atoi(argv[4]);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="comment">/*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   max_i = atoi(argv[5]);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   Rf  = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   iRf = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*N*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   fp=fopen(<span class="stringliteral">"sinogram_data.bin"</span>,<span class="stringliteral">"rb"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   fread(Rf,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),T*R,fp);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   fclose(fp);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <a class="code" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4" title="computes the inverse discrete Radon transform of Rf on the grid given by gridfcn() with T angles and ...">Inverse_Radon_trafo</a>(gridfcn,T,R,Rf,N,iRf,max_i);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   fp=fopen(<span class="stringliteral">"output_data.bin"</span>,<span class="stringliteral">"wb+"</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   fwrite(iRf,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),N*N,fp);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   fclose(fp);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(Rf);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(iRf);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/iterS2_8c_source.html b/doc/api/html/iterS2_8c_source.html
new file mode 100644
index 0000000..4976896
--- /dev/null
+++ b/doc/api/html/iterS2_8c_source.html
@@ -0,0 +1,474 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - iterS2.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">iterS2.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: iterS2.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/* iterS2 - Iterative reconstruction on the sphere S2 */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* Include NFFT 3 utilities headers. */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* Include NFFT3 library header. */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "legendre.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="group__applications__iterS2__matlab.html#ga7c6368b321bd9acd0149b030bb8275ed">   46</a></span> <span class="keyword">enum</span> <span class="keywordtype">boolean</span> {NO = 0, YES = 1};</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="group__applications__iterS2__matlab.html#ga3c04138a5bfe5d72780bb7e82a18e627">   58</a></span> <span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordtype">int</span> T;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">int</span> M2;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">int</span> t;                       <span class="comment">/* Index variable for testcases                */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;             <span class="comment">/* NFSFT plan                                  */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan2;            <span class="comment">/* NFSFT plan                                  */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> iplan;           <span class="comment">/* NFSFT plan                                  */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">int</span> j;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordtype">int</span> k;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordtype">int</span> m;                       <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordtype">int</span> use_nfsft;               <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordtype">int</span> use_nfft;                <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordtype">int</span> use_fpt;                 <span class="comment">/*                                             */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">int</span> cutoff;                  </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">double</span> threshold;            </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">double</span> re;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordtype">double</span> im;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordtype">double</span> a;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordtype">double</span> *scratch;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">double</span> xs;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordtype">double</span> *ys;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordtype">double</span> *temp;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordtype">double</span> _Complex *temp2;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordtype">int</span> qlength;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordtype">double</span> *qweights;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   fftw_plan fplan;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordtype">int</span> npt;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordtype">int</span> npt_exp;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">double</span> *alpha, *beta, *gamma;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="comment">/* Read the number of testcases. */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   fscanf(stdin,<span class="stringliteral">"testcases=%d\n"</span>,&T);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   fprintf(stderr,<span class="stringliteral">"%d\n"</span>,T);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordflow">for</span> (t = 0; t < T; t++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="comment">/* Check if the fast transform shall be used. */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     fscanf(stdin,<span class="stringliteral">"nfsft=%d\n"</span>,&use_nfsft);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     fprintf(stderr,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       <span class="comment">/* Check if the NFFT shall be used. */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       fscanf(stdin,<span class="stringliteral">"nfft=%d\n"</span>,&use_nfft);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       fprintf(stderr,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>       <span class="keywordflow">if</span> (use_nfft != NO)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         <span class="comment">/* Read the cut-off parameter. */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         fscanf(stdin,<span class="stringliteral">"cutoff=%d\n"</span>,&cutoff);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         fprintf(stderr,<span class="stringliteral">"%d\n"</span>,cutoff);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         cutoff = 1;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>       <span class="comment">/* Check if the fast polynomial transform shall be used. */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>       fscanf(stdin,<span class="stringliteral">"fpt=%d\n"</span>,&use_fpt);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>       fprintf(stderr,<span class="stringliteral">"%d\n"</span>,use_fpt);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       <span class="keywordflow">if</span> (use_fpt != NO)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         <span class="comment">/* Read the NFSFT threshold parameter. */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         fscanf(stdin,<span class="stringliteral">"threshold=%lf\n"</span>,&threshold);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         fprintf(stderr,<span class="stringliteral">"%lf\n"</span>,threshold);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>       }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         threshold = 1000.0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       <span class="comment">/* Set dummy values. */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       use_nfft = NO;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       use_fpt = NO;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       cutoff = 3;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       threshold = 1000.0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="comment">/* Read the bandwidth. */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     fscanf(stdin,<span class="stringliteral">"bandwidth=%d\n"</span>,&N);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     fprintf(stderr,<span class="stringliteral">"%d\n"</span>,N);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="comment">/* Do precomputation. */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     nfsft_precompute(N,threshold,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U<span class="comment">/*NFSFT_NO_DIRECT_ALGORITHM*/</span>)), 0U);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/* Read the number of nodes. */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     fscanf(stdin,<span class="stringliteral">"nodes=%d\n"</span>,&M);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     fprintf(stderr,<span class="stringliteral">"%d\n"</span>,M);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="comment">/* */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       X(next_power_of_2_exp)(N, &npt, &npt_exp);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       fprintf(stderr, <span class="stringliteral">"npt = %d, npt_exp = %d\n"</span>, npt, npt_exp);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       fprintf(stderr,<span class="stringliteral">"Optimal interpolation!\n"</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       scratch = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(4*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       ys = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       temp = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       temp2 = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       a = 0.0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         xs = 2.0 + (2.0*j)/(N+1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         ys[j] = (2.0-((j == 0)?(1.0):(0.0)))*4.0*<a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc" title="Computes the B-spline , scratch is used for de Boor's scheme.">nfft_bspline</a>(4,xs,scratch);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>         <span class="comment">//fprintf(stdout,"%3d: g(%le) = %le\n",j,xs,ys[j]);</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         a += ys[j];</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       <span class="comment">//fprintf(stdout,"a = %le\n",a);</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         ys[j] *= 1.0/a;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       qlength = 2*N+1;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       qweights = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(qlength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       fplan = fftw_plan_r2r_1d(N+1, qweights, qweights, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       <span class="keywordflow">for</span> (j = 0; j < N+1; j++)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         qweights[j] = -2.0/(4*j*j-1);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       fftw_execute(fplan);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       qweights[0] *= 0.5;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       <span class="keywordflow">for</span> (j = 0; j < N+1; j++)</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         qweights[j] *= 1.0/(2.0*N+1.0);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         qweights[2*N+1-1-j] = qweights[j];</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       fplan = fftw_plan_r2r_1d(2*N+1, temp, temp, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         temp[j] = ((j==0 || j == 2*N)?(1.0):(0.5))*ys[j];</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       <span class="keywordflow">for</span> (j = N+1; j < 2*N+1; j++)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         temp[j] = 0.0;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       fftw_execute(fplan);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       <span class="keywordflow">for</span> (j = 0; j < 2*N+1; j++)</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         temp[j] *= qweights[j];</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       fftw_execute(fplan);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       <span class="keywordflow">for</span> (j = 0; j < 2*N+1; j++)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         temp[j] *= ((j==0 || j == 2*N)?(1.0):(0.5));</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         <span class="keywordflow">if</span> (j <= N)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>           temp2[j] = temp[j];</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <span class="keyword">set</span> = fpt_init(1, npt_exp, 0U);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       alpha = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       beta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       gamma = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       alpha_al_row(alpha, N, 0);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       beta_al_row(beta, N, 0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       gamma_al_row(gamma, N, 0);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       fpt_precompute(<span class="keyword">set</span>, 0, alpha, beta, gamma, 0, 1000.0);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       fpt_transposed(<span class="keyword">set</span>,0, temp2, temp2, N, 0U);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       fpt_finalize(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(alpha);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(beta);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(gamma);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(scratch);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(qweights);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ys);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(temp);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="comment">/* Init transform plans. */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     nfsft_init_guru(&plan, N, M,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>       ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>       FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       cutoff);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       solver_init_advanced_complex(&iplan, (<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&plan), CGNE | PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       solver_init_advanced_complex(&iplan, (<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&plan), CGNR | PRECOMPUTE_WEIGHT | PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="comment">/* Read the nodes and function values. */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       fscanf(stdin,<span class="stringliteral">"%le %le %le %le\n"</span>,&plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1],&plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j],&re,&im);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>       plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1] = plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>       plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] = plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       <span class="keywordflow">if</span> (plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] >= 0.5)</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] = plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] - 1;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>       fprintf(stderr,<span class="stringliteral">"%le %le %le %le\n"</span>,plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1],plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j],</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         creal(iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]),cimag(iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]));</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="comment">/* Read the number of nodes. */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     fscanf(stdin,<span class="stringliteral">"nodes_eval=%d\n"</span>,&M2);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     fprintf(stderr,<span class="stringliteral">"%d\n"</span>,M2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="comment">/* Init transform plans. */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     nfsft_init_guru(&plan2, N, M2,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>       ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>       ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       cutoff);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="comment">/* Read the nodes and function values. */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">for</span> (j = 0; j < M2; j++)</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       fscanf(stdin,<span class="stringliteral">"%le %le\n"</span>,&plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1],&plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j]);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1] = plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] = plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       <span class="keywordflow">if</span> (plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] >= 0.5)</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] = plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j] - 1;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       fprintf(stderr,<span class="stringliteral">"%le %le\n"</span>,plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1],plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j]);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     nfsft_precompute_x(&plan2);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="comment">/* Frequency weights. */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       <span class="comment">/* Compute Voronoi weights. */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       <span class="comment">//nfft_voronoi_weights_S2(iplan.w, plan.x, M);</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>       <span class="comment">/* Print out Voronoi weights. */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       <span class="comment">/*a = 0.0;</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">      for (j = 0; j < plan.M_total; j++)</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">      {</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">        fprintf(stderr,"%le\n",iplan.w[j]);</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">        a += iplan.w[j];</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">      fprintf(stderr,"sum = %le\n",a);*/</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>       {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j] = 0.0;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>       }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         <span class="keywordflow">for</span> (j = -k; j <= k; j++)</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         {</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>           iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[NFSFT_INDEX(k,j,&plan)] = 1.0/(pow(k+1.0,2.0)); <span class="comment">/*temp2[j]*/</span>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>       }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     }</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j] = 0.0;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       {</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         <span class="keywordflow">for</span> (j = -k; j <= k; j++)</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>           iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[NFSFT_INDEX(k,j,&plan)] = 1/(pow(k+1.0,2.5));</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       <span class="comment">/* Compute Voronoi weights. */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       <a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994" title="Computes voronoi weights for nodes on the sphere S^2.">nfft_voronoi_weights_S2</a>(iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>, plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , " [...]
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       <span class="comment">/* Print out Voronoi weights. */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       a = 0.0;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>       {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         fprintf(stderr,<span class="stringliteral">"%le\n"</span>,iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         a += iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j];</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>       }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>       fprintf(stderr,<span class="stringliteral">"sum = %le\n"</span>,a);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     fprintf(stderr, <span class="stringliteral">"N_total = %d\n"</span>, plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     fprintf(stderr, <span class="stringliteral">"M_total = %d\n"</span>, plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">for</span> (k = 0; k < plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     solver_before_loop_complex(&iplan);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="comment">/*for (k = 0; k < plan.M_total; k++)</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">      printf("%le %le\n",creal(iplan.r_iter[k]),cimag(iplan.r_iter[k]));</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordflow">for</span> (m = 0; m < 29; m++)</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>       fprintf(stderr,<span class="stringliteral">"Residual ||r||=%e,\n"</span>,sqrt(iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&iplan);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     }</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="comment">/*NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">    nfsft_trafo(&plan);</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">    NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment"></span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">    a = 0.0;</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="comment">    b = 0.0;</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">    for (k = 0; k < plan.M_total; k++)</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">      printf("%le %le %le\n",cabs(iplan.y[k]),cabs(plan.f[k]),</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="comment">        cabs(iplan.y[k]-plan.f[k]));</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="comment">      a += cabs(iplan.y[k]-plan.f[k])*cabs(iplan.y[k]-plan.f[k]);</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="comment">      b += cabs(iplan.y[k])*cabs(iplan.y[k]);</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment"></span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">    fprintf(stderr,"relative error in 2-norm: %le\n",a/b);*/</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, plan2.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_to [...]
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     nfsft_trafo(&plan2);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, plan2.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_to [...]
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">for</span> (k = 0; k < plan2.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       fprintf(stdout,<span class="stringliteral">"%le\n"</span>,cabs(plan2.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[k]));</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&iplan);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     nfsft_finalize(&plan2);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     <span class="comment">/* Delete precomputed data. */</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     nfsft_forget();</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(temp2);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   } <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="comment">/* Return exit code for successful run. */</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/jquery.js b/doc/api/html/jquery.js
new file mode 100644
index 0000000..63939e7
--- /dev/null
+++ b/doc/api/html/jquery.js
@@ -0,0 +1,8 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement( [...]
+{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=argumen [...]
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]| [...]
+&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsBy [...]
+f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replac [...]
+{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m, [...]
diff --git a/doc/api/html/kernel_2nfsft_2api_8h_source.html b/doc/api/html/kernel_2nfsft_2api_8h_source.html
new file mode 100644
index 0000000..d245cd1
--- /dev/null
+++ b/doc/api/html/kernel_2nfsft_2api_8h_source.html
@@ -0,0 +1,122 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - api.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">kernel/nfsft/api.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: api.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef API_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define API_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* "Default exponent of maximum bandwidth" */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#define BWEXP_MAX 10</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* "Default maximum bandwidth" */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#define BW_MAX 1024</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define ROW(k) (k*(wisdom.N_MAX+2))</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define ROWK(k) (k*(wisdom.N_MAX+2)+k)</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#ifdef HAVE_STDBOOL_H</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">  #include <stdbool.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span>  <span class="keyword">typedef</span> <span class="keyword">enum</span> {<span class="keyword">false</span> = 0,<span class="keyword">true</span> = 1} bool;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">//#define FIRST_L (int)floor(ntilde/(double)plength)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">//#define LAST_L (int)ceil((Mtilde+1)/(double)plength)-1</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html">   58</a></span> <span class="keyword">struct </span><a class="code" href="structnfsft__wisdom.html" title="Wisdom structure.">nfsft_wisdom</a></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">   61</a></span>   <span class="keywordtype">bool</span> <a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a>;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">   65</a></span>   <span class="keywordtype">int</span> <a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">   67</a></span>   <span class="keywordtype">int</span> <a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t =  N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="comment">/* Data for the direct algorithms */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">   76</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">   82</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">   88</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="comment">/* Data for fast algorithms. */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">   93</a></span>   <span class="keywordtype">double</span> <a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b" title="The threshold /f$/f$.">threshold</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> *set_threads;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">   99</a></span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor"></span>};</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/kernels_8c.html b/doc/api/html/kernels_8c.html
new file mode 100644
index 0000000..891536c
--- /dev/null
+++ b/doc/api/html/kernels_8c.html
@@ -0,0 +1,96 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernels.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">kernels.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>File with predefined kernels for the fast summation algorithm.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <float.h></code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+</div>
+<p><a href="kernels_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga81bf029788afe857325a760743f9fdd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81bf029788afe857325a760743f9fdd3"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>gaussian</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga44a58143a1f5c79b45c538134117e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga44a58143a1f5c79b45c538134117e091"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga889c2a1791e42bb8fa5a594588d68a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga889c2a1791e42bb8fa5a594588d68a5c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga91be4b7bcc7d3a415e6b9b6ccaec39a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga91be4b7bcc7d3a415e6b9b6ccaec39a7"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>logarithm</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga7723414bb26fd9b1cc76686aeca57425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7723414bb26fd9b1cc76686aeca57425"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>thinplate_spline</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gaed5f8559b7b7a24674318cb58856602b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed5f8559b7b7a24674318cb58856602b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_square</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga635ef40090e33b4917a20ab62913ef05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga635ef40090e33b4917a20ab62913ef05"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_modulus</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga6a6096569616d5cf9604c514f925581b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a6096569616d5cf9604c514f925581b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_x</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga221604ef3a42dc2de4f1ce68831e7524"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga221604ef3a42dc2de4f1ce68831e7524"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric3</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga8946fd3f992262c24477b56cba844873"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8946fd3f992262c24477b56cba844873"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>sinc_kernel</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gab7b7015bc5f2946583e7adbecb2cf630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b7015bc5f2946583e7adbecb2cf630"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>cosc</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gac693b76a84e9435efc06c1ef26fc7435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac693b76a84e9435efc06c1ef26fc7435"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>kcot</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga1deb0e10a0d6cf7f11d8b90ee008eb53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1deb0e10a0d6cf7f11d8b90ee008eb53"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_cube</b> (double x, int der, const double *param)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>File with predefined kernels for the fast summation algorithm. </p>
+
+<p>Definition in file <a class="el" href="kernels_8c_source.html">kernels.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/kernels_8c_source.html b/doc/api/html/kernels_8c_source.html
new file mode 100644
index 0000000..ecccda5
--- /dev/null
+++ b/doc/api/html/kernels_8c_source.html
@@ -0,0 +1,447 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernels.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">kernels.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="kernels_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: kernels.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">double</span> _Complex gaussian(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x)=exp(-x^2/c^2) */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   {</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     <span class="keywordflow">case</span>  0 : value=exp(-x*x/(c*c)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     <span class="keywordflow">case</span>  1 : value=-2.0*x/(c*c)*exp(-x*x/(c*c)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     <span class="keywordflow">case</span>  2 : value=2.0*exp(-x*x/(c*c))*(-c*c+2.0*x*x)/(c*c*c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     <span class="keywordflow">case</span>  3 : value=-4.0*x*exp(-x*x/(c*c))*(-3.0*c*c+2.0*x*x)/(c*c*c*c*c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordflow">case</span>  4 : value=4.0*exp(-x*x/(c*c))*(3.0*c*c*c*c-12.0*c*c*x*x+4.0*x*x*x*x)/(c*c*c*c*c*c*c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keywordflow">case</span>  5 : value=-8.0*x*exp(-x*x/(c*c))*(15.0*c*c*c*c-20.0*c*c*x*x+4.0*x*x*x*x)/pow(c,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     <span class="keywordflow">case</span>  6 : value=8.0*exp(-x*x/(c*c))*(-15.0*c*c*c*c*c*c+90.0*x*x*c*c*c*c-60.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">case</span>  7 : value=-16.0*x*exp(-x*x/(c*c))*(-105.0*c*c*c*c*c*c+210.0*x*x*c*c*c*c-84.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordflow">case</span>  8 : value=16.0*exp(-x*x/(c*c))*(105.0*c*c*c*c*c*c*c*c-840.0*x*x*c*c*c*c*c*c+840.0*x*x*x*x*c*c*c*c-224.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,16.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">case</span>  9 : value=-32.0*x*exp(-x*x/(c*c))*(945.0*c*c*c*c*c*c*c*c-2520.0*x*x*c*c*c*c*c*c+1512.0*x*x*x*x*c*c*c*c-288.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,18.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     <span class="keywordflow">case</span> 10 : value=32.0*exp(-x*x/(c*c))*(-945.0*pow(c,10.0)+9450.0*x*x*c*c*c*c*c*c*c*c-12600.0*x*x*x*x*c*c*c*c*c*c+5040.0*x*x*x*x*x*x*c*c*c*c-720.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,20.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">case</span> 11 : value=-64.0*x*exp(-x*x/(c*c))*(-10395.0*pow(c,10.0)+34650.0*x*x*c*c*c*c*c*c*c*c-27720.0*x*x*x*x*c*c*c*c*c*c+7920.0*x*x*x*x*x*x*c*c*c*c-880.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,22.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <span class="keywordflow">case</span> 12 : value=64.0*exp(-x*x/(c*c))*(10395.0*pow(c,12.0)-124740.0*x*x*pow(c,10.0)+207900.0*x*x*x*x*c*c*c*c*c*c*c*c-110880.0*x*x*x*x*x*x*c*c*c*c*c*c+23760.0*x*x*x*x*x*x*x*x*c*c*c*c-2112.0*pow(x,10.0)*c*c+64.0*pow(x,12.0))/pow(c,24.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">double</span> _Complex multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x)=sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordflow">case</span>  0 : value=sqrt(x*x+c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordflow">case</span>  1 : value=1.0/(sqrt(x*x+c*c))*x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordflow">case</span>  2 : value=c*c/sqrt(pow(x*x+c*c,3.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">case</span>  3 : value=-3.0*x*c*c/sqrt(pow(x*x+c*c,5.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordflow">case</span>  4 : value=3.0*c*c*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">case</span>  5 : value=-15.0*x*c*c*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">case</span>  6 : value=45.0*c*c*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordflow">case</span>  7 : value=-315.0*x*c*c*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">case</span>  8 : value=315.0*c*c*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">case</span>  9 : value=-2835.0*x*c*c*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">case</span> 10 : value=14175.0*c*c*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordflow">case</span> 11 : value=-155925.0*x*c*c*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">case</span> 12 : value=467775.0*c*c*(1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0)+512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,23.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x)=1/sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordflow">case</span>  0 : value=1.0/sqrt(x*x+c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordflow">case</span>  1 : value=-1.0/(sqrt(pow(x*x+c*c,3.0)))*x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">case</span>  2 : value=(2.0*x*x-c*c)/sqrt(pow(x*x+c*c,5.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">case</span>  3 : value=-3.0*x*(2.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,7.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordflow">case</span>  4 : value=3.0*(8.0*x*x*x*x-24.0*x*x*c*c+3.0*c*c*c*c)/sqrt(pow(x*x+c*c,9.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordflow">case</span>  5 : value=-15.0*x*(8.0*x*x*x*x-40.0*x*x*c*c+15.0*c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordflow">case</span>  6 : value=45.0*(16.0*x*x*x*x*x*x-120.0*x*x*x*x*c*c+90.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">case</span>  7 : value=-315.0*x*(16.0*x*x*x*x*x*x-168.0*x*x*x*x*c*c+210.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">case</span>  8 : value=315.0*(128.0*x*x*x*x*x*x*x*x-1792.0*x*x*x*x*x*x*c*c+3360.0*x*x*x*x*c*c*c*c-1120.0*x*x*c*c*c*c*c*c+35.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">case</span>  9 : value=-2835.0*x*(128.0*x*x*x*x*x*x*x*x-2304.0*x*x*x*x*x*x*c*c+6048.0*x*x*x*x*c*c*c*c-3360.0*x*x*c*c*c*c*c*c+315.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">case</span> 10 : value=14175.0*(256.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+20160.0*x*x*x*x*x*x*c*c*c*c-16800.0*x*x*x*x*c*c*c*c*c*c+3150.0*x*x*c*c*c*c*c*c*c*c-63.0*pow(c,10.0))/sqrt(pow(x*x+c*c,21.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordflow">case</span> 11 : value=-155925.0*x*(256.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+31680.0*x*x*x*x*x*x*c*c*c*c-36960.0*x*x*x*x*c*c*c*c*c*c+11550.0*x*x*c*c*c*c*c*c*c*c-693.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordflow">case</span> 12 : value=467775.0*(231.0*pow(c,12.0)+190080.0*x*x*x*x*x*x*x*x*c*c*c*c-16632.0*x*x*pow(c,10.0)-295680.0*x*x*x*x*x*x*c*c*c*c*c*c+138600.0*x*x*x*x*c*c*c*c*c*c*c*c+1024.0*pow(x,12.0)-33792.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,25.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keywordtype">double</span> _Complex logarithm(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x)=log |x| */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   (void)param;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">case</span>  0 : value=log(fabs(x)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">case</span>  1 : value=(x<0 ? -1 : 1)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">case</span>  2 : value=-1/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">case</span>  3 : value=2.0*(x<0 ? -1 : 1)/pow(fabs(x),3.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordflow">case</span>  4 : value=-6.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordflow">case</span>  5 : value=24.0*(x<0 ? -1 : 1)/pow(fabs(x),5.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">case</span>  6 : value=-120.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordflow">case</span>  7 : value=720.0*(x<0 ? -1 : 1)/pow(fabs(x),7.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">case</span>  8 : value=-5040.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">case</span>  9 : value=40320.0*(x<0 ? -1 : 1)/pow(fabs(x),9.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">case</span> 10 : value=-362880.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">case</span> 11 : value=3628800.0*(x<0 ? -1 : 1)/pow(fabs(x),11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">case</span> 12 : value=-39916800.0/pow(x,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordflow">case</span> 13 : value=479001600.0/pow(x,13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordflow">case</span> 14 : value=-6227020800.0/pow(x,14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">case</span> 15 : value=87178291200.0/pow(x,15.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">case</span> 16 : value=-1307674368000.0/pow(x,16.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">case</span> 17 : value=20922789888000.0/pow(x,17.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keywordtype">double</span> _Complex thinplate_spline(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = x^2 log |x| */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   (void)param;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordflow">case</span>  0 : value=x*x*log(fabs(x)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">case</span>  1 : value=2.0*x*log(fabs(x))+x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">case</span>  2 : value=2.0*log(fabs(x))+3.0; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">case</span>  3 : value=2.0/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">case</span>  4 : value=-2.0/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">case</span>  5 : value=4.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordflow">case</span>  6 : value=-12.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">case</span>  7 : value=48.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">case</span>  8 : value=-240.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">case</span>  9 : value=1440.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">case</span> 10 : value=-10080.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordflow">case</span> 11 : value=80640.0/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">case</span> 12 : value=-725760.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keywordtype">double</span> _Complex one_over_square(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = 1/x^2 */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   (void)param;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">case</span>  0 : value=1.0/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">case</span>  1 : value=-2.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">case</span>  2 : value=6.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">case</span>  3 : value=-24.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">case</span>  4 : value=120.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">case</span>  5 : value=-720.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">case</span>  6 : value=5040.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">case</span>  7 : value=-40320.0/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">case</span>  8 : value=362880.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">case</span>  9 : value=-3628800.0/pow(x,11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">case</span> 10 : value=39916800.0/pow(x,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">case</span> 11 : value=-479001600.0/pow(x,13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">case</span> 12 : value=6227020800.0/pow(x,14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keywordtype">double</span> _Complex one_over_modulus(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = 1/|x| */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   (void)param;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordflow">case</span>  0 : value=1.0/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordflow">case</span>  1 : value=-1/x/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">case</span>  2 : value=2.0/pow(fabs(x),3.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordflow">case</span>  3 : value=-6.0/(x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">case</span>  4 : value=24.0/pow(fabs(x),5.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">case</span>  5 : value=-120.0/(x*x*x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">case</span>  6 : value=720.0/pow(fabs(x),7.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordflow">case</span>  7 : value=-5040.0/(x*x*x*x*x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordflow">case</span>  8 : value=40320.0/pow(fabs(x),9.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">case</span>  9 : value=-362880.0/(x*x*x*x*x*x*x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">case</span> 10 : value=3628800.0/pow(fabs(x),11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordflow">case</span> 11 : value=-39916800.0/pow(x,11.0)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">case</span> 12 : value=479001600.0/pow(fabs(x),13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="keywordtype">double</span> _Complex one_over_x(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = 1/x */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   (void)param;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="keywordflow">case</span>  0 : value=1.0/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">case</span>  1 : value=-1.0/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">case</span>  2 : value=2.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordflow">case</span>  3 : value=-6.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordflow">case</span>  4 : value=24.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">case</span>  5 : value=-120.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">case</span>  6 : value=720.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordflow">case</span>  7 : value=-5040.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordflow">case</span>  8 : value=40320.0/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">case</span>  9 : value=-362880.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordflow">case</span> 10 : value=3628800.0/pow(x,11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">case</span> 11 : value=-39916800.0/pow(x,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordflow">case</span> 12 : value=479001600.0/pow(x,13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric3(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = 1/sqrt(x^2+c^2)^3 */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordflow">case</span>  0 : value=1.0/(sqrt(pow(x*x+c*c,3.0))); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="keywordflow">case</span>  1 : value=-3.0/sqrt(pow(x*x+c*c,5.0))*x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordflow">case</span>  2 : value=3.0*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="keywordflow">case</span>  3 : value=-15.0*x*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">case</span>  4 : value=45.0*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="keywordflow">case</span>  5 : value=-315.0*x*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">case</span>  6 : value=315.0*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">case</span>  7 : value=-2835.0*x*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="keywordflow">case</span>  8 : value=14175.0*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordflow">case</span>  9 : value=-155925.0*x*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordflow">case</span> 10 : value=467775.0*(512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c+1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">case</span> 11 : value=-6081075.0*x*(512.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+21120.0*x*x*x*x*x*x*c*c*c*c-18480.0*x*x*x*x*c*c*c*c*c*c+4620.0*x*x*c*c*c*c*c*c*c*c-231.0*pow(c,10.0))/sqrt(pow(x*x+c*c,25.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordflow">case</span> 12 : value=42567525.0*(1024.0*pow(x,12.0)+27720.0*x*x*x*x*c*c*c*c*c*c*c*c+33.0*pow(c,12.0)-2772.0*x*x*pow(c,10.0)-73920.0*x*x*x*x*x*x*c*c*c*c*c*c+63360.0*x*x*x*x*x*x*x*x*c*c*c*c-16896.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,27.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="keywordtype">double</span> _Complex sinc_kernel(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = sin(cx)/x */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">case</span>  0 : value=sin(c*x)/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordflow">case</span>  1 : value=(cos(c*x)*c*x-sin(c*x))/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordflow">case</span>  2 : value=-(sin(c*x)*c*c*x*x+2.0*cos(c*x)*c*x-2.0*sin(c*x))/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordflow">case</span>  3 : value=-(cos(c*x)*c*c*c*x*x*x-3.0*sin(c*x)*c*c*x*x-6.0*cos(c*x)*c*x+6.0*sin(c*x))/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordflow">case</span>  4 : value=(sin(c*x)*c*c*c*c*x*x*x*x+4.0*cos(c*x)*c*c*c*x*x*x-12.0*sin(c*x)*c*c*x*x-24.0*cos(c*x)*c*x+24.0*sin(c*x))/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">case</span>  5 : value=(cos(c*x)*c*c*c*c*c*x*x*x*x*x-5.0*sin(c*x)*c*c*c*c*x*x*x*x-20.0*cos(c*x)*c*c*c*x*x*x+60.0*sin(c*x)*c*c*x*x+120.0*cos(c*x)*c*x-120.0*sin(c*x))/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordflow">case</span>  6 : value=-(sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+6.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*sin(c*x)*c*c*c*c*x*x*x*x-120.0*cos(c*x)*c*c*c*x*x*x+360.0*sin(c*x)*c*c*x*x+720.0*cos(c*x)*c*x-720.0*sin(c*x))/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordflow">case</span>  7 : value=-(cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-7.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+210.0*sin(c*x)*c*c*c*c*x*x*x*x+840.0*cos(c*x)*c*c*c*x*x*x-2520.0*sin(c*x)*c*c*x*x-5040.0*cos(c*x)*c*x+5040.0*sin(c*x))/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordflow">case</span>  8 : value=(sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+8.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-336.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*sin(c*x)*c*c*c*c*x*x*x*x+6720.0*cos(c*x)*c*c*c*x*x*x-20160.0*sin(c*x)*c*c*x*x-40320.0*cos(c*x)*c*x+40320.0*sin(c*x))/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordflow">case</span>  9 : value=(cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-9.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+504.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-15120.0*sin(c*x)*c*c*c*c*x*x*x*x-60480.0*cos(c*x)*c*c*c*x*x*x+181440.0*sin(c*x)*c*c*x*x+362880.0*cos(c*x)*c*x-362880.0*sin(c*x))/pow(x,10.0); <span class [...]
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">case</span> 10 : value=-(sin(c*x)*pow(c,10.0)*pow(x,10.0)+10.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-720.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+30240.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*sin(c*x)*c*c*c*c*x*x*x*x-604800.0*cos(c*x)*c*c*c*x*x*x+1814400.0*sin(c*x)*c*c*x*x+3628800.0*cos(c*x)* [...]
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordflow">case</span> 11 : value=-(cos(c*x)*pow(c,11.0)*pow(x,11.0)-11.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+990.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-55440.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1663200.0*sin(c*x)*c*c*c*c*x*x*x*x+6652800.0*cos(c*x)*c*c*c*x*x*x-1 [...]
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">case</span> 12 : value=(sin(c*x)*pow(c,12.0)*pow(x,12.0)+12.0*cos(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-1320.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+95040.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-3991680.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*sin(c*x)*c*c [...]
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="keywordtype">double</span> _Complex cosc(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)    <span class="comment">/* K(x) = cos(cx)/x */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordtype">double</span> sign;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordflow">if</span> (x<0) sign=-1.0; <span class="keywordflow">else</span> sign=1.0;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   x=fabs(x);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="keywordflow">case</span>  0 : value=cos(c*x)/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordflow">case</span>  1 : value=-(sin(c*x)*c*x+cos(c*x))/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">case</span>  2 : value=(-cos(c*x)*c*c*x*x+2.0*sin(c*x)*c*x+2.0*cos(c*x))/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="keywordflow">case</span>  3 : value=(sin(c*x)*c*c*c*x*x*x+3.0*cos(c*x)*c*c*x*x-6.0*sin(c*x)*c*x-6.0*cos(c*x))/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">case</span>  4 : value=(cos(c*x)*c*c*c*c*x*x*x*x-4.0*sin(c*x)*c*c*c*x*x*x-12.0*cos(c*x)*c*c*x*x+24.0*sin(c*x)*c*x+24.0*cos(c*x))/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordflow">case</span>  5 : value=-(sin(c*x)*c*c*c*c*c*x*x*x*x*x+5.0*cos(c*x)*c*c*c*c*x*x*x*x-20.0*sin(c*x)*c*c*c*x*x*x-60.0*cos(c*x)*c*c*x*x+120.0*sin(c*x)*c*x+120.0*cos(c*x))/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <span class="keywordflow">case</span>  6 : value=-(cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-6.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*cos(c*x)*c*c*c*c*x*x*x*x+120.0*sin(c*x)*c*c*c*x*x*x+360.0*cos(c*x)*c*c*x*x-720.0*sin(c*x)*c*x-720.0*cos(c*x))/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="keywordflow">case</span>  7 : value=(sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+7.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-210.0*cos(c*x)*c*c*c*c*x*x*x*x+840.0*sin(c*x)*c*c*c*x*x*x+2520.0*cos(c*x)*c*c*x*x-5040.0*sin(c*x)*c*x-5040.0*cos(c*x))/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">case</span>  8 : value=(cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-8.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+336.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*cos(c*x)*c*c*c*c*x*x*x*x-6720.0*sin(c*x)*c*c*c*x*x*x-20160.0*cos(c*x)*c*c*x*x+40320.0*sin(c*x)*c*x+40320.0*cos(c*x))/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">case</span>  9 : value=-(sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+9.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-504.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+15120.0*cos(c*x)*c*c*c*c*x*x*x*x-60480.0*sin(c*x)*c*c*c*x*x*x-181440.0*cos(c*x)*c*c*x*x+362880.0*sin(c*x)*c*x+362880.0*cos(c*x))/pow(x,10.0); <span clas [...]
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="keywordflow">case</span> 10 : value=-(cos(c*x)*pow(c,10.0)*pow(x,10.0)-10.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+720.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-30240.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*cos(c*x)*c*c*c*c*x*x*x*x+604800.0*sin(c*x)*c*c*c*x*x*x+1814400.0*cos(c*x)*c*c*x*x-3628800.0*sin(c*x)* [...]
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     <span class="keywordflow">case</span> 11 : value=(sin(c*x)*pow(c,11.0)*pow(x,11.0)+11.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-990.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+55440.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-1663200.0*cos(c*x)*c*c*c*c*x*x*x*x+6652800.0*sin(c*x)*c*c*c*x*x*x+19 [...]
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="keywordflow">case</span> 12 : value=(cos(c*x)*pow(c,12.0)*pow(x,12.0)-12.0*sin(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)+1320.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-95040.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3991680.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*cos(c*x)*c*c [...]
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   value*=pow(sign,der);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="keywordtype">double</span> _Complex kcot(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)   <span class="comment">/* K(x) = cot(cx) */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="keywordflow">case</span>  0 : value = 1.0/tan(c * x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordflow">case</span>  1 : value = -(1.0 + pow(1.0/tan(c * x), 2.0)) * c; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="keywordflow">case</span>  2 : value = 2.0 * 1.0/tan(c * x) * (1.0 + pow(1.0/tan(c * x), 2.0)) * c * c; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">case</span>  3 : value = -2.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 3.0) * (1.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keywordflow">case</span>  4 : value = 8.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 4.0) * 1.0/tan(c * x) * (2.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keywordflow">case</span>  5 : value = -0.8e1 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.5e1) * (0.15e2 * pow(1.0/tan(c * x), 0.2e1) + 0.15e2 * pow(1.0/tan(c * x), 0.4e1) + 0.2e1); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordflow">case</span>  6 : value = 0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.6e1) * 1.0/tan(c * x) * (0.60e2 * pow(1.0/tan(c * x), 0.2e1) + 0.45e2 * pow(1.0/tan(c * x), 0.4e1) + 0.17e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keywordflow">case</span>  7 : value = -0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.7e1) * (0.525e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.231e3 * pow(1.0/tan(c * x), 0.2e1) + 0.17e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="keywordflow">case</span>  8 : value = 0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.8e1) * 1.0/tan(c * x) * (0.630e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.378e3 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">case</span>  9 : value = -0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.9e1) * (0.6615e4 * pow(1.0/tan(c * x), 0.6e1) + 0.2835e4 * pow(1.0/tan(c * x), 0.8e1) + 0.5040e4 * pow(1.0/tan(c * x), 0.4e1) + 0.1320e4 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordflow">case</span> 10 : value = 0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.10e2) * 1.0/tan(c * x) * (0.37800e5 * pow(1.0/tan(c * x), 0.6e1) + 0.14175e5 * pow(1.0/tan(c * x), 0.8e1) + 0.34965e5 * pow(1.0/tan(c * x), 0.4e1) + 0.12720e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordflow">case</span> 11 : value = -0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.11e2) * (0.467775e6 * pow(1.0/tan(c * x), 0.8e1) + 0.155925e6 * pow(1.0/tan(c * x), 0.10e2) + 0.509355e6 * pow(1.0/tan(c * x), 0.6e1) + 0.238425e6 * pow(1.0/tan(c * x), 0.4e1) + 0.42306e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordflow">case</span> 12 : value = 0.1024e4 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.12e2) * 1.0/tan(c * x) * (0.1559250e7 * pow(1.0/tan(c * x), 0.8e1) + 0.467775e6 * pow(1.0/tan(c * x), 0.10e2) + 0.1954260e7 * pow(1.0/tan(c * x), 0.6e1) + 0.1121670e7 * pow(1.0/tan(c * x), 0.4e1) + 0.280731e6 * pow(1.0/tan(c * x), 0.2e1) + 0.21844e5); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="keywordtype">double</span> _Complex one_over_cube(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   {</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="keywordflow">case</span>  0 : value = 1.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">case</span>  1 : value = -3.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="keywordflow">case</span>  2 : value = 12.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="keywordflow">case</span>  3 : value = -60.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordflow">case</span>  4 : value = 360.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">case</span>  5 : value = -2520.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">case</span>  6 : value = 20160.0/pow(x, 9.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="keywordflow">case</span>  7 : value = -181440.0/pow(x, 10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordflow">case</span>  8 : value = 1814400.0/pow(x, 11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     <span class="keywordflow">case</span>  9 : value = -19958400.0/pow(x, 12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     <span class="keywordflow">case</span>  10 : value = 239500800.0/pow(x, 13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordflow">case</span>  11 : value = -3113510400.0/pow(x, 14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordflow">case</span>  12 : value = 43589145600.0/pow(x, 15.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   }</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">/* kernels.c */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/kernels_8h.html b/doc/api/html/kernels_8h.html
new file mode 100644
index 0000000..d7be7dd
--- /dev/null
+++ b/doc/api/html/kernels_8h.html
@@ -0,0 +1,92 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernels.h File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">kernels.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file with predefined kernels for the fast summation algorithm.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+</div>
+<p><a href="kernels_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga81bf029788afe857325a760743f9fdd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81bf029788afe857325a760743f9fdd3"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>gaussian</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga44a58143a1f5c79b45c538134117e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga44a58143a1f5c79b45c538134117e091"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga889c2a1791e42bb8fa5a594588d68a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga889c2a1791e42bb8fa5a594588d68a5c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga91be4b7bcc7d3a415e6b9b6ccaec39a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga91be4b7bcc7d3a415e6b9b6ccaec39a7"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>logarithm</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga7723414bb26fd9b1cc76686aeca57425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7723414bb26fd9b1cc76686aeca57425"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>thinplate_spline</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gaed5f8559b7b7a24674318cb58856602b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed5f8559b7b7a24674318cb58856602b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_square</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga635ef40090e33b4917a20ab62913ef05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga635ef40090e33b4917a20ab62913ef05"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_modulus</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga6a6096569616d5cf9604c514f925581b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a6096569616d5cf9604c514f925581b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_x</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga221604ef3a42dc2de4f1ce68831e7524"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga221604ef3a42dc2de4f1ce68831e7524"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric3</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga8946fd3f992262c24477b56cba844873"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8946fd3f992262c24477b56cba844873"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>sinc_kernel</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gab7b7015bc5f2946583e7adbecb2cf630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b7015bc5f2946583e7adbecb2cf630"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>cosc</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gac693b76a84e9435efc06c1ef26fc7435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac693b76a84e9435efc06c1ef26fc7435"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>kcot</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga1deb0e10a0d6cf7f11d8b90ee008eb53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1deb0e10a0d6cf7f11d8b90ee008eb53"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_cube</b> (double x, int der, const double *param)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file with predefined kernels for the fast summation algorithm. </p>
+
+<p>Definition in file <a class="el" href="kernels_8h_source.html">kernels.h</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/kernels_8h_source.html b/doc/api/html/kernels_8h_source.html
new file mode 100644
index 0000000..9eb0bc9
--- /dev/null
+++ b/doc/api/html/kernels_8h_source.html
@@ -0,0 +1,105 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - kernels.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">kernels.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="kernels_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: kernels.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifndef KERNELS_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#define KERNELS_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">double</span> _Complex gaussian(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);              <span class="comment">/* K(x)=exp(-x^2/c^2) */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="keywordtype">double</span> _Complex multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);          <span class="comment">/* K(x)=sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);  <span class="comment">/* K(x)=1/sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keywordtype">double</span> _Complex logarithm(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);             <span class="comment">/* K(x)=log |x| */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">double</span> _Complex thinplate_spline(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);      <span class="comment">/* K(x) = x^2 log |x| */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">double</span> _Complex one_over_square(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);       <span class="comment">/* K(x) = 1/x^2 */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">double</span> _Complex one_over_modulus(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);      <span class="comment">/* K(x) = 1/|x| */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">double</span> _Complex one_over_x(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);            <span class="comment">/* K(x) = 1/x */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric3(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = 1/sqrt(x^2+c^2)^3 */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">double</span> _Complex sinc_kernel(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);           <span class="comment">/* K(x) = sin(cx)/x */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keywordtype">double</span> _Complex cosc(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);                  <span class="comment">/* K(x) = cos(cx)/x */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">double</span> _Complex kcot(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);                   <span class="comment">/* K(x) = cot(cx) */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">double</span> _Complex one_over_cube(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param);                <span class="comment">/* K(x) = 1/x^3 */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span>}  <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="comment">/* kernels.h */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/lambda_8c_source.html b/doc/api/html/lambda_8c_source.html
new file mode 100644
index 0000000..f205cdc
--- /dev/null
+++ b/doc/api/html/lambda_8c_source.html
@@ -0,0 +1,297 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - lambda.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">lambda.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* Coefficients for Lanzcos's approximation to the Gamma function. Can be</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * regenerated with Mathematica from file lambda.nb. */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">  #if LDBL_MANT_DIG > 64</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span>    <span class="comment">/* long double 128 bit wide */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">    #define N 24</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> R num[24] =</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>     {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>       K(3.035162425359883494754028782232869726547E21),</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>       K(3.4967568944064301036001605717507506346E21),</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>       K(1.9266526566893208886540195401514595829E21),</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>       K(6.755170664882727663160830237424406199E20),</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>       K(1.691728531049187527800862627495648317E20),</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>       K(3.21979351672256057856444116302160246E19),</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>       K(4.8378495427140832493758744745481812E18),</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>       K(5.8843103809049324230843820398664955E17),</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>       K(5.893958514163405862064178891925630E16),</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>       K(4.919561837722192829918665308020810E15),</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>       K(3.449165802442404074427531228315120E14),</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>       K(2.041330296068782505988459692384726E13),</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>       K(1.022234822943784007524609706893119E12),</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>       K(4.33137871919821354846952908076307E10),</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>       K(1.54921950559667418528481770869280E9),</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>       K(4.6544421199876191938054157935810E7),</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>       K(1.16527806807504975090675074910053E6),</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>       K(24024.759267256769471083727721827),</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>       K(400.96500811342195582435806376976),</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>       K(5.2829901565447826961703902917085),</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>       K(0.05289990244125101024092566765994),</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       K(0.0003783467106547406854542665695934),</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>       K(1.7219414217921113919596660801124E-6),</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>       K(3.747999317071488557713812635427084359354E-9)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     };</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*    static const R denom[24] =</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">      K(0.0),</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">      K(1124000727777607680000.0),</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">      K(4148476779335454720000.0),</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">      K(6756146673770930688000.0),</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">      K(6548684852703068697600.0),</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">      K(4280722865357147142912.0),</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">      K(2021687376910682741568.0),</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">      K(720308216440924653696.0),</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">      K(199321978221066137360.0),</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">      K(43714229649594412832.0),</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">      K(7707401101297361068.0),</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">      K(1103230881185949736.0),</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">      K(129006659818331295.0),</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">      K(12363045847086207.0),</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">      K(971250460939913.0),</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">      K(62382416421941.0),</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">      K(3256091103430.0),</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">      K(136717357942.0),</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">      K(4546047198.0),</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">      K(116896626.0),</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">      K(2240315.0),</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">      K(30107.0),</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">      K(253.0),</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">      K(1.0L)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">    };*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keyword">static</span> <span class="keyword">const</span> R g = K(20.32098218798637390136718750000000000000);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">  #elif LDBL_MANT_DIG == 64</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span>    <span class="comment">/* long double 96 bit wide */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor">    #define N 17</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keyword">const</span> R num[17] =</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       K(2.715894658327717377557655133124376674911E12),</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       K(3.59017952609791210503852552872112955043E12),</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       K(2.22396659973781496931212735323581871017E12),</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       K(8.5694083451895624818099258668254858834E11),</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>       K(2.2988587166874907293359744645339939547E11),</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       K(4.552617168754610815813502794395753410E10),</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       K(6.884887713165178784550917647709216425E9),</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       K(8.11048596140753186476028245385237278E8),</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       K(7.52139159654082231449961362311950170E7),</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       K(5.50924541722426515169752795795495283E6),</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       K(317673.536843541912671493184218236957),</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       K(14268.2798984503552014701437332033752),</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>       K(489.361872040326367021390908360178781),</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       K(12.3894133003845444929588321786545861),</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       K(0.218362738950461496394157450728168315),</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       K(0.00239374952205844918669062799606398310),</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       K(0.00001229541408909435212800785616808830746135)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     };</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/*    static const R denom[17] =</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">      K(0.0),</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">      K(1307674368000.0),</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">      K(4339163001600.0),</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">      K(6165817614720.0),</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">      K(5056995703824.0),</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">      K(2706813345600.0),</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">      K(1009672107080.0),</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">      K(272803210680.0),</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">      K(54631129553.0),</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">      K(8207628000.0),</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">      K(928095740.0),</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">      K(78558480.0),</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">      K(4899622.0),</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">      K(218400.0),</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">      K(6580.0),</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">      K(120.0),</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">      K(1.0L)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">    };*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keyword">static</span> <span class="keyword">const</span> R g = K(12.22522273659706115722656250000000000000);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">  #else</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor"></span><span class="preprocessor">    #error Unsupported size of long double</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor"></span><span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor"></span>  <span class="comment">/* float */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor">  #define N 6</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span>  <span class="keyword">static</span> <span class="keyword">const</span> R num[6] =</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     K(14.02614328749964766195705772850038393570),</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     K(43.74732405540314316089531289293124360129),</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     K(50.59547402616588964511581430025589038612),</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     K(26.90456680562548195593733429204228910299),</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     K(6.595765571169314946316366571954421695196),</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     K(0.6007854010515290065101128585795542383721)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   };</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">/*  static const R denom[6] =</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">  {</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">    K(0.0),</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">    K(24.0),</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">    K(50.0),</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">    K(35.0),</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">    K(10.0),</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">    K(1.0)</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">  };*/</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keyword">static</span> <span class="keyword">const</span> R g = K(1.428456135094165802001953125000000000000);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor"></span>  <span class="comment">/* double */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">  #define N 13</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor"></span>  <span class="keyword">static</span> <span class="keyword">const</span> R num[13] =</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     K(5.690652191347156388090791033559122686859E7),</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     K(1.037940431163445451906271053616070238554E8),</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     K(8.63631312881385914554692728897786842234E7),</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     K(4.33388893246761383477372374059053331609E7),</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     K(1.46055780876850680841416998279135921857E7),</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     K(3.48171215498064590882071018964774556468E6),</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     K(601859.61716810987866702265336993523025),</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     K(75999.293040145426498753034435989091371),</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     K(6955.9996025153761403563101155151989875),</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     K(449.944556906316811944685860765098840962),</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     K(19.5199278824761748284786096623565213621),</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     K(0.509841665565667618812517864480469450999),</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     K(0.006061842346248906525783753964555936883222)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   };</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/*  static const R denom[13] =</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">  {</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">    K(0.0),</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">    K(39916800.0),</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">    K(120543840.0),</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">    K(150917976.0),</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">    K(105258076.0),</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">    K(45995730.0),</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">    K(13339535.0),</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">    K(2637558.0),</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">    K(357423.0),</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">    K(32670.0),</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">    K(1925.0),</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">    K(66.0),</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">    K(1.0)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">  };*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keyword">static</span> <span class="keyword">const</span> R g = K(6.024680040776729583740234375000000000000);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keyword">static</span> <span class="keyword">inline</span> R evaluate_rational(<span class="keyword">const</span> R z_)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   R z = z_, s1, s2;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordflow">if</span> (z <= K(1.0))</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     s1 = num[N - 1];</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     s2 = K(1.0);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">for</span> (i = N - 2; i >= 0; --i)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       s1 *= z;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       s2 *= (z + i);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       s1 += num[i];</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     z = K(1.0)/z;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     s1 = num[0];</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     s2 = K(1.0);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">for</span> (i = 1; i < N; ++i)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       s1 *= z;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       s2 *= K(1.0) + (i-1)*z;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       s1 += num[i];</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">return</span> s1 / s2;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> R X(lambda)(<span class="keyword">const</span> R z, <span class="keyword">const</span> R eps)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keyword">const</span> R d = K(1.0) - eps, zpg = z + g, emh = eps - K(0.5);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">return</span> EXP(-LOG1P(d / (zpg + emh)) * (z + emh)) *</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     POW(KE / (zpg + K(0.5)),d) *</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     (evaluate_rational(z + eps) / evaluate_rational(z + K(1.0)));</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> R X(lambda2)(<span class="keyword">const</span> R mu, <span class="keyword">const</span> R nu)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordflow">if</span> (mu == K(0.0))</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nu == K(0.0))</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">return</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       SQRT(</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         POW((mu + nu + g + K(0.5)) / (K(1.0) * (mu + g + K(0.5))), mu) *</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         POW((mu + nu + g + K(0.5)) / (K(1.0) * (nu + g + K(0.5))), nu) *</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         SQRT(KE * (mu + nu + g + K(0.5)) /</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           ((mu + g + K(0.5)) * (nu + g + K(0.5)))) *</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         (evaluate_rational(mu + nu + K(1.0)) /</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>           (evaluate_rational(mu + K(1.0)) * evaluate_rational(nu + K(1.0))))</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       );</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/legendre_8c_source.html b/doc/api/html/legendre_8c_source.html
new file mode 100644
index 0000000..79b1b2b
--- /dev/null
+++ b/doc/api/html/legendre_8c_source.html
@@ -0,0 +1,261 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - legendre.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">legendre.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: legendre.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "legendre.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/* One over sqrt(pi) */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> DK(KSQRTPII,0.56418958354775628694807945156077258584405062932900);</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">static</span> <span class="keyword">inline</span> R alpha_al(<span class="keyword">const</span> <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>     <span class="keywordflow">if</span> (k < n)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>       <span class="keywordflow">return</span> IF(k%2,K(1.0),K(-1.0));</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>       <span class="keywordflow">return</span> SQRT(((R)(2*k+1))/((R)(k-n+1)))*SQRT((((R)(2*k+1))/((R)(k+n+1))));</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   }</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>     <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>       <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>       <span class="keywordflow">return</span> IF(n%2,K(0.0),K(-1.0));</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   }</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keyword">inline</span> R beta_al(<span class="keyword">const</span> <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordflow">if</span> (0 <= k && k < n)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keyword">inline</span> R gamma_al(<span class="keyword">const</span> <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">if</span> (k == -1)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">return</span> SQRT(KSQRTPII*nfft_lambda((R)(n),K(0.5)));</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (k <= n)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <span class="keywordflow">return</span> -SQRT(((R)(k-n))/((R)(k-n+1))*((R)(k+n))/((R)(k+n+1)));</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">void</span> alpha_al_row(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   R *p = alpha;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     *p++ = alpha_al(j,n);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> beta_al_row(R *beta, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   R *p = beta;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     *p++ = beta_al(j,n);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keywordtype">void</span> gamma_al_row(R *gamma, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   R *p = gamma;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     *p++ = gamma_al(j,n);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2">   91</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">alpha_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   R *p = alpha;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordflow">for</span> (i = 0; i <= N; i++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       *p++ = alpha_al(j,i);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290">  100</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">beta_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</s [...]
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   R *p = alpha;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordflow">for</span> (i = 0; i <= N; i++)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       *p++ = beta_al(j,i);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d">  109</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">gamma_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   R *p = alpha;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordflow">for</span> (i = 0; i <= N; i++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       *p++ = gamma_al(j,i);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="code" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163">  118</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163" title="Evaluates an associated Legendre polynomials  using the Clenshaw-algorithm.">eval_al</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, <span class="keyword">const</span> [...]
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   R *beta, R *gamma)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   R a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   R *x_act, *y_act;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   R *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   x_act = x;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   y_act = y;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     a = 1.0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     b = 0.0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       *y_act = 1.0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         a_old = a;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>          b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         alpha_act--;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         beta_act--;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         gamma_act--;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     x_act++;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     y_act++;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d">  163</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d" title="Evaluates an associated Legendre polynomials  using the Clenshaw-algorithm if it no exceeds a given t...">eval_al_thresh</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, [...]
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   R *beta, R *gamma, R threshold)</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   R a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   R *x_act, *y_act;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   R *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   x_act = x;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   y_act = y;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     a = 1.0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     b = 0.0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>      *y_act = 1.0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         a_old = a;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>          b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         alpha_act--;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         beta_act--;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         gamma_act--;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       <span class="keywordflow">if</span> (fabs(*y_act) > threshold)</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     x_act++;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     y_act++;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/legendre_8h_source.html b/doc/api/html/legendre_8h_source.html
new file mode 100644
index 0000000..cf140b5
--- /dev/null
+++ b/doc/api/html/legendre_8h_source.html
@@ -0,0 +1,92 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - legendre.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">legendre.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: legendre.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifndef LEGENDRE_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#define LEGENDRE_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keywordtype">void</span> alpha_al_row(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keywordtype">void</span> beta_al_row(R *beta, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">void</span> gamma_al_row(R *gamma, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">alpha_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">beta_al_all</a>(R *beta, <span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">gamma_al_all</a>(R *gamma, <span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163" title="Evaluates an associated Legendre polynomials  using the Clenshaw-algorithm.">eval_al</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, <span class="keyword">const</span> <span class="keywordtype">int</span> k, R *alpha,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   R *beta, R *gamma);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="keywordtype">int</span> <a class="code" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d" title="Evaluates an associated Legendre polynomials  using the Clenshaw-algorithm if it no exceeds a given t...">eval_al_thresh</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, <span class="keyword">const</span> <span class="keywordtype">int</span> k, R *a [...]
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   R *beta, R *gamma, R threshold);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/linogram__fft__test_8c.html b/doc/api/html/linogram__fft__test_8c.html
new file mode 100644
index 0000000..24f3d3f
--- /dev/null
+++ b/doc/api/html/linogram__fft__test_8c.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - linogram_fft_test.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">linogram_fft_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based pseudo-polar FFT and inverse.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="linogram__fft__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points x with weights w for the linogram grid with T slopes and R offsets. <br/></td></tr>
+<tr class="memitem:ga708f5c41add2af92a97339dee1c068dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga708f5c41add2af92a97339dee1c068dc"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga708f5c41add2af92a97339dee1c068dc"><td class="mdescLeft"> </td><td class="mdescRight">discrete pseudo-polar FFT <br/></td></tr>
+<tr class="memitem:gaea5025fe751ace25f818ecb3cfc16444"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaea5025fe751ace25f818ecb3cfc16444"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaea5025fe751ace25f818ecb3cfc16444"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gaf44988058d3000a477c046c172c26265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf44988058d3000a477c046c172c26265"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">inverse_linogram_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gaf44988058d3000a477c046c172c26265"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based inverse pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gac2a323224e3346e37714575d49c65432"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac2a323224e3346e37714575d49c65432"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:gac2a323224e3346e37714575d49c65432"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, linogram FFT, and inverse linogram FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based pseudo-polar FFT and inverse. </p>
+<p>Computes the NFFT-based pseudo-polar FFT and its inverse. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="linogram__fft__test_8c_source.html">linogram_fft_test.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/linogram__fft__test_8c_source.html b/doc/api/html/linogram__fft__test_8c_source.html
new file mode 100644
index 0000000..c1d5981
--- /dev/null
+++ b/doc/api/html/linogram__fft__test_8c_source.html
@@ -0,0 +1,472 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - linogram_fft_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">linogram_fft_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="linogram__fft__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: linogram_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">double</span> GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">   52</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(<span class="k [...]
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>       <span class="keywordflow">if</span>(t<0)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>       {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)4*(t+T/4)/T*r/R;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         x[2*((t+T/2)*R+(r+R/2))+0] = -(<span class="keywordtype">double</span>)4*(t-T/4)/T*r/R;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">return</span> T*R;                           </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">   82</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc" title="discrete pseudo-polar FFT">linogram_dft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, [...]
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">int</span> M=T*R;                            </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   }</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   t0 = getticks();</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   nfft_trafo_direct(&my_nfft_plan);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   t1 = getticks();</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">  141</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444" title="NFFT-based pseudo-polar FFT.">linogram_fft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex  [...]
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordtype">int</span> M=T*R;                            </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   t0 = getticks();</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   t1 = getticks();</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">  209</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265" title="NFFT-based inverse pseudo-polar FFT.">inverse_linogram_fft</a>(fftw_complex *f, <span class="keywordtype">int</span> T, <s [...]
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan;             </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordtype">int</span> l;                                </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordtype">int</span> M=T*R;                            </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]    = f[j];</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]    = w[j];</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keywordflow">if</span>(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];j++)</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k++)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k]=</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         (sqrt(pow(j-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2,2)+pow(k-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2,2))>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0 [...]
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   t0 = getticks();</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     l=1;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   t1 = getticks();</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     f_hat[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">  309</a></span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(FILE *fp, <span class="keywordtype">int</span> N, <span class="keywordtype [...]
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   fftw_plan my_fftw_plan;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   fftw_complex *f_hat,*f;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="keywordtype">int</span> m,k;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="keywordtype">double</span> t_fft, t_dft_linogram;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   f     = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*(T*R/4)*5);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordflow">for</span>(k=0; k<N*N; k++)</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     f_hat[k] = (((<span class="keywordtype">double</span>)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   t0 = getticks();</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordflow">for</span>(m=0;m<65536/N;m++)</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       <span class="comment">/* touch */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       f_hat[2]=2*f_hat[0];</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   t1 = getticks();</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   t_fft=N*GLOBAL_elapsed_time/65536;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="keywordflow">if</span>(N<256)</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       <a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc" title="discrete pseudo-polar FFT">linogram_dft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       t_dft_linogram=GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>       <span class="keywordflow">if</span>((m==3)&&(N<256))</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t"</span>,N,t_fft,t_dft_linogram,m);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>         <span class="keywordflow">if</span>(m==3)</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t       &\t%d\t"</span>,N,t_fft,m);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     fprintf(fp,<span class="stringliteral">"  \t&\t&\t       &\t       &\t%d\t"</span>,m);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       printf(<span class="stringliteral">"N=%d\tt_fft=%1.1e\tt_dft_linogram=%1.1e\tm=%d\t"</span>,N,t_fft,t_dft_linogram,m);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       <a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444" title="NFFT-based pseudo-polar FFT.">linogram_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       fprintf(fp,<span class="stringliteral">"%1.1e&\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>       printf(<span class="stringliteral">"t_linogram=%1.1e\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>       <a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265" title="NFFT-based inverse pseudo-polar FFT.">inverse_linogram_fft</a>(f,T,R,f_hat,N,m+3,m);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       <span class="keywordflow">if</span>(m==9)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   fprintf(fp,<span class="stringliteral">"%1.1e\\\\\\hline\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   fprintf(fp,<span class="stringliteral">"%1.1e\\\\\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       printf(<span class="stringliteral">"t_ilinogram=%1.1e\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   fflush(fp);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">  374</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <span class="keywordtype">int</span> N;                                </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="keywordtype">int</span> T, R;                             </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordtype">int</span> M;                                </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   fftw_complex *f_hat, *f, *f_direct, *f_tilde;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;                            </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   <span class="keywordtype">double</span> temp1, temp2, E_max=0.0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   FILE *fp1, *fp2;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <span class="keywordtype">char</span> filename[30];</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="keywordtype">int</span> logN;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordflow">if</span>( argc!=4 )</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     printf(<span class="stringliteral">"linogram_fft_test N T R \n"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     printf(<span class="stringliteral">"N          linogram FFT of size NxN    \n"</span>);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     printf(<span class="stringliteral">"T          number of slopes          \n"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     printf(<span class="stringliteral">"R          number of offsets         \n"</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     printf(<span class="stringliteral">"\nHence, comparison FFTW, linogram FFT and inverse linogram FFT\n"</span>);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     fp1=fopen(<span class="stringliteral">"linogram_comparison_fft.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="keywordflow">if</span> (fp1==NULL)</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordflow">for</span> (logN=4; logN<=8; logN++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     fclose(fp1);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     exit(-1);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   N = atoi(argv[1]);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   T = atoi(argv[2]);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   R = atoi(argv[3]);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   printf(<span class="stringliteral">"N=%d, linogram grid with T=%d, R=%d => "</span>,N,T,R);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   f_hat    = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   f        = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*5*T*R/4);  <span class="comment">/* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   f_direct = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*5*T*R/4);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   f_tilde  = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   M=<a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w); printf(<span class="stringliteral">"M=%d.\n"</span>,M);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   fp1=fopen(<span class="stringliteral">"input_data_r.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   fp2=fopen(<span class="stringliteral">"input_data_i.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <span class="keywordflow">if</span> ((fp1==NULL) || (fp2==NULL))</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     fscanf(fp1,<span class="stringliteral">"%le "</span>,&temp1);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     fscanf(fp2,<span class="stringliteral">"%le "</span>,&temp2);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     f_hat[k]=temp1+_Complex_I*temp2;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   fclose(fp1);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   fclose(fp2);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       <a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc" title="discrete pseudo-polar FFT">linogram_dft</a>(f_hat,N,f_direct,T,R,1);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   <span class="comment">//  linogram_fft(f_hat,N,f_direct,T,R,12);</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   printf(<span class="stringliteral">"\nTest of the linogram FFT: \n"</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   fp1=fopen(<span class="stringliteral">"linogram_fft_error.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   <span class="keywordflow">for</span> (m=1; m<=12; m++)</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   {</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444" title="NFFT-based pseudo-polar FFT.">linogram_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     E_max=X(error_l_infty_complex)(f_direct,f,M);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="comment">//E_max=X(error_l_2_complex)(f_direct,f,M);</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     printf(<span class="stringliteral">"m=%2d: E_max = %e\n"</span>,m,E_max);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   fclose(fp1);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     printf(<span class="stringliteral">"\nTest of the inverse linogram FFT for m=%d: \n"</span>,m);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     sprintf(filename,<span class="stringliteral">"linogram_ifft_error%d.dat"</span>,m);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     fp1=fopen(filename,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     <span class="keywordflow">for</span> (max_i=0; max_i<=20; max_i+=2)</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       <a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265" title="NFFT-based inverse pseudo-polar FFT.">inverse_linogram_fft</a>(f_direct,T,R,f_tilde,N,max_i,m);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>       E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>       printf(<span class="stringliteral">"%3d iterations: E_max = %e\n"</span>,max_i,E_max);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>       fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     fclose(fp1);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_direct);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_tilde);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/malloc_8c_source.html b/doc/api/html/malloc_8c_source.html
new file mode 100644
index 0000000..4bfed74
--- /dev/null
+++ b/doc/api/html/malloc_8c_source.html
@@ -0,0 +1,116 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - malloc.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">malloc.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include<stdlib.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "api.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> X(malloc_type_function) X(malloc_hook) = 0;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> X(free_type_function) X(free_hook) = 0;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> X(die_type_function) X(die_hook) = 0;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="keywordtype">void</span> *X(malloc)(<span class="keywordtype">size_t</span> n)</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordtype">void</span> *p;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   <span class="keywordflow">if</span> (X(malloc_hook))</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>     <span class="keywordflow">return</span> <a class="code" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft_malloc_hook</a>(n);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>     n = 1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   p = Z(malloc)(n);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordflow">if</span> (!p)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     X(die)(STRINGIZE(X(malloc)) <span class="stringliteral">": out of memory\n"</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">return</span> p;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">void</span> X(free)(<span class="keywordtype">void</span> *p)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">if</span> (p)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordflow">if</span> (X(free_hook))</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       X(free_hook)(p);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     Z(free)(p);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keywordtype">void</span> X(die)(<span class="keywordtype">char</span> *s)</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">if</span> (X(die_hook))</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     X(die_hook)(s);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   exit(EXIT_FAILURE);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/modules.html b/doc/api/html/modules.html
new file mode 100644
index 0000000..ebb24aa
--- /dev/null
+++ b/doc/api/html/modules.html
@@ -0,0 +1,80 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - Modules
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__nfftutil.html" target="_self">Util - Auxilliary functions</a></td><td class="desc">Include header for FFTW3 library for its complex type</td></tr>
+<tr id="row_1_"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><a class="el" href="group__examples.html" target="_self">Examples</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_0_')"/><a class="el" href="group__examples__solver.html" target="_self">Solver component</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__examples__solver__glacier.html" target="_self">Reconstruction of a glacier from scattered data</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><a class="el" href="group__applications.html" target="_self">Applications</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__fastgauss.html" target="_self">Fast Gauss transfrom with complex parameter</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_1_')"/><a class="el" href="group__applications__fastsum.html" target="_self">Fast summation</a></td><td class="desc">Required for test if (ths->k == one_over_x)</td></tr>
+<tr id="row_2_1_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__fastsum__matlab.html" target="_self">fastsum_matlab</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__fastsum__test.html" target="_self">fastsum_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_2_')"/><a class="el" href="group__applications__fastsumS2.html" target="_self">Fast summation of radial functions on the sphere</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__fastsumS2__test.html" target="_self">fastsumS2_matlab</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_3_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_3_')"/><a class="el" href="group__applications__iterS2.html" target="_self">Iterative reconstruction on the sphere S2</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__iterS2__matlab.html" target="_self">iterS2_matlab</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_4_')"/><a class="el" href="group__applications__mri.html" target="_self">Transforms in magnetic resonance imaging</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_4_0_')"/><a class="el" href="group__applications__mri2d.html" target="_self">2D transforms</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__2d.html" target="_self">construct_data_2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__inh__2d1d.html" target="_self">construct_data__inh_2d1d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__inh__3d.html" target="_self">construct_data_inh_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__reconstruct__data__2d.html" target="_self">reconstruct_data_2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__gridding.html" target="_self">construct_data_gridding</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__reconstruct__data__inh__2d1d.html" target="_self">reconstruct_data__inh_2d1d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__reconstruct__data__inh__3d.html" target="_self">reconstruct_data_inh_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__inh__nnfft.html" target="_self">construct_data_inh_nnfft</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_1_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_4_1_')"/><a class="el" href="group__applications__mri3d.html" target="_self">3D transforms</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__construct__data__1d2d.html" target="_self">construct_data_1d2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__construct__data__3d.html" target="_self">construct_data_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html" target="_self">reconstruct_data_1d2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_3_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__reconstruct__data__3d.html" target="_self">reconstruct_data_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_4_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html" target="_self">reconstruct_data_gridding</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_5_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_5_')"/><a class="el" href="group__applications__polarFFT.html" target="_self">Polar FFT</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__polarFFT__linogramm.html" target="_self">linogram_fft_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__polarFFT__mpolar.html" target="_self">mpolar_fft_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__polarFFT__polar.html" target="_self">polar_fft_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_6_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_6_')"/><a class="el" href="group__applications__quadratureS2.html" target="_self">Fast evaluation of quadrature formulae on the sphere</a></td><td class="desc"></td></tr>
+<tr id="row_2_6_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__quadratureS2__test.html" target="_self">quadratureS2_test</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__nfsft.html" target="_self">Nfsft</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/mpolar__fft__test_8c.html b/doc/api/html/mpolar__fft__test_8c.html
new file mode 100644
index 0000000..fd24b78
--- /dev/null
+++ b/doc/api/html/mpolar__fft__test_8c.html
@@ -0,0 +1,97 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mpolar_fft_test.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">mpolar_fft_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based polar FFT and inverse on modified polar grid.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="mpolar__fft__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga08d0441aceedbcb98b985ee5aa121952"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga08d0441aceedbcb98b985ee5aa121952"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the modified polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets.  <a href="group__applications__polarFFT__mpolar.html#ga08d0441 [...]
+<tr class="memitem:gaee9902054200ea50d90b5d290bff8c71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee9902054200ea50d90b5d290bff8c71"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaee9902054200ea50d90b5d290bff8c71"><td class="mdescLeft"> </td><td class="mdescRight">discrete mpolar FFT <br/></td></tr>
+<tr class="memitem:ga55b2f979a5c69176a73f59eb0312b53d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga55b2f979a5c69176a73f59eb0312b53d"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga55b2f979a5c69176a73f59eb0312b53d"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga5d0560e898b722ee5fe09acc485bbec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d0560e898b722ee5fe09acc485bbec8"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">inverse_mpolar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:ga5d0560e898b722ee5fe09acc485bbec8"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based mpolar FFT <br/></td></tr>
+<tr class="memitem:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga522ff84df31c08a1f237ad0ec7ce4ac5"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based polar FFT and inverse on modified polar grid. </p>
+<p>Computes the NFFT-based polar FFT and its inverse on a modified polar grid for various parameters. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="mpolar__fft__test_8c_source.html">mpolar_fft_test.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/mpolar__fft__test_8c_source.html b/doc/api/html/mpolar__fft__test_8c_source.html
new file mode 100644
index 0000000..bbeb25d
--- /dev/null
+++ b/doc/api/html/mpolar__fft__test_8c_source.html
@@ -0,0 +1,487 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mpolar_fft_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mpolar_fft_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="mpolar__fft__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: mpolar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">double</span> GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">   63</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points  with weights  for the modified polar grid with  angles and  offsets...">mpolar_grid</a>(<span class="keywo [...]
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordtype">int</span> R2=2*ceil(sqrt(2.0)*R/2);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordtype">double</span> xx, yy;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">int</span> M=0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordflow">for</span>(r=-R2/2; r<R2/2; r++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       xx = (double)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>       yy = (double)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>       <span class="keywordflow">if</span> ( ((-0.5-1.0/(<span class="keywordtype">double</span>)R)<=xx) & (xx<=(0.5+1.0/(<span class="keywordtype">double</span>)R)) &</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         ((-0.5-1.0/(<span class="keywordtype">double</span>)R)<=yy) & (yy<=(0.5+1.0/(<span class="keywordtype">double</span>)R)) )</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         x[2*M+0] = xx;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         x[2*M+1] = yy;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>           w[M] = 1.0/4.0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>           w[M] = fabs((<span class="keywordtype">double</span>)r);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         M++; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       }</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>    W=0.0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>    <span class="keywordflow">for</span> (t=0; t<M; t++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       W+=w[t];</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>    <span class="keywordflow">for</span> (t=0; t<M; t++)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     w[t]/=W;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordflow">return</span> M;                             </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">  106</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71" title="discrete mpolar FFT">mpolar_dft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span class=" [...]
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">int</span> M;                                </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*(T/2)*R*(<span class="keyword">sizeof</span>(double)));</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*(T*R)/4*(<span class="keyword">sizeof</span>(double)));</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points  with weights  for the modified polar grid with  angles and  offsets...">mpolar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   t0 = getticks();</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   nfft_trafo_direct(&my_nfft_plan);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   t1 = getticks();</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">  166</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d" title="NFFT-based mpolar FFT.">mpolar_fft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span clas [...]
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordtype">int</span> M;                                </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points  with weights  for the modified polar grid with  angles and  offsets...">mpolar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   t0 = getticks();</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   t1 = getticks();</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">  237</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8" title="inverse NFFT-based mpolar FFT">inverse_mpolar_fft</a>(fftw_complex *f, <span class="keywordtype">int</span> T, <span class="keyw [...]
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan;             </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="keywordtype">int</span> l;                                </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordtype">int</span> M;                                </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points  with weights  for the modified polar grid with  angles and  offsets...">mpolar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]    = f[j];</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]    = w[j];</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>  <span class="keywordflow">if</span>(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>    <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];j++)</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>      <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k++)</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>      {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k]=</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>           (sqrt(pow(j-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2,2)+pow(k-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2,2))>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a> [...]
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>      }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   t0 = getticks();</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     l=1;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   t1 = getticks();</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     f_hat[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">  339</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(FILE *fp, <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   fftw_plan my_fftw_plan;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   fftw_complex *f_hat,*f;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   <span class="keywordtype">int</span> m,k;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordtype">double</span> t_fft, t_dft_mpolar;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   f     = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*(T*R/4)*5);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordflow">for</span>(k=0; k<N*N; k++)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     f_hat[k] = (((<span class="keywordtype">double</span>)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   t0 = getticks();</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordflow">for</span>(m=0;m<65536/N;m++)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <span class="comment">/* touch */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       f_hat[2]=2*f_hat[0];</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   t1 = getticks();</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   t_fft=N*GLOBAL_elapsed_time/65536;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="keywordflow">if</span>(N<256)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       <a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71" title="discrete mpolar FFT">mpolar_dft</a>(f_hat,N,f,T,R,1);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       t_dft_mpolar=GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       <span class="keywordflow">if</span>((m==3)&&(N<256))</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t"</span>,N,t_fft,t_dft_mpolar,m);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>         <span class="keywordflow">if</span>(m==3)</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t       &\t%d\t"</span>,N,t_fft,m);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     fprintf(fp,<span class="stringliteral">"  \t&\t&\t       &\t       &\t%d\t"</span>,m);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       printf(<span class="stringliteral">"N=%d\tt_fft=%1.1e\tt_dft_mpolar=%1.1e\tm=%d\t"</span>,N,t_fft,t_dft_mpolar,m);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>       <a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d" title="NFFT-based mpolar FFT.">mpolar_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       fprintf(fp,<span class="stringliteral">"%1.1e&\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       printf(<span class="stringliteral">"t_mpolar=%1.1e\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       <a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8" title="inverse NFFT-based mpolar FFT">inverse_mpolar_fft</a>(f,T,R,f_hat,N,2*m,m);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       <span class="keywordflow">if</span>(m==9)</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   fprintf(fp,<span class="stringliteral">"%1.1e\\\\\\hline\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   fprintf(fp,<span class="stringliteral">"%1.1e\\\\\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>       printf(<span class="stringliteral">"t_impolar=%1.1e\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   fflush(fp);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">  404</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="keywordtype">int</span> N;                                </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   <span class="keywordtype">int</span> T, R;                             </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordtype">int</span> M;                                </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   fftw_complex *f_hat, *f, *f_direct, *f_tilde;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;                            </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <span class="keywordtype">double</span> temp1, temp2, E_max=0.0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   FILE *fp1, *fp2;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <span class="keywordtype">char</span> filename[30];</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <span class="keywordtype">int</span> logN;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   <span class="keywordflow">if</span>( argc!=4 )</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     printf(<span class="stringliteral">"mpolar_fft_test N T R \n"</span>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     printf(<span class="stringliteral">"N          mpolar FFT of size NxN    \n"</span>);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     printf(<span class="stringliteral">"T          number of slopes          \n"</span>);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     printf(<span class="stringliteral">"R          number of offsets         \n"</span>);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     printf(<span class="stringliteral">"\nHence, comparison FFTW, mpolar FFT and inverse mpolar FFT\n"</span>);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     fp1=fopen(<span class="stringliteral">"mpolar_comparison_fft.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordflow">if</span> (fp1==NULL)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     <span class="keywordflow">for</span> (logN=4; logN<=8; logN++)</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     fclose(fp1);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     exit(-1);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   }</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   N = atoi(argv[1]);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   T = atoi(argv[2]);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   R = atoi(argv[3]);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   printf(<span class="stringliteral">"N=%d, modified polar grid with T=%d, R=%d => "</span>,N,T,R);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   f_hat    = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   f        = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*1.25*T*R);  <span class="comment">/* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   f_direct = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*1.25*T*R);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   f_tilde  = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points  with weights  for the modified polar grid with  angles and  offsets...">mpolar_grid</a>(T,R,x,w); printf(<span class="stringliteral">"M=%d.\n"</span>,M);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   fp1=fopen(<span class="stringliteral">"input_data_r.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   fp2=fopen(<span class="stringliteral">"input_data_i.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   <span class="keywordflow">if</span> ((fp1==NULL) || (fp2==NULL))</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   {</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     fscanf(fp1,<span class="stringliteral">"%le "</span>,&temp1);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     fscanf(fp2,<span class="stringliteral">"%le "</span>,&temp2);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     f_hat[k]=temp1+ _Complex_I*temp2;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   }</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   fclose(fp1);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   fclose(fp2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       <a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71" title="discrete mpolar FFT">mpolar_dft</a>(f_hat,N,f_direct,T,R,1);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   <span class="comment">//  mpolar_fft(f_hat,N,f_direct,T,R,12);</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   printf(<span class="stringliteral">"\nTest of the mpolar FFT: \n"</span>);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   fp1=fopen(<span class="stringliteral">"mpolar_fft_error.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   <span class="keywordflow">for</span> (m=1; m<=12; m++)</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   {</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d" title="NFFT-based mpolar FFT.">mpolar_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     E_max=X(error_l_infty_complex)(f_direct,f,M);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     printf(<span class="stringliteral">"m=%2d: E_max = %e\n"</span>,m,E_max);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   fclose(fp1);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     printf(<span class="stringliteral">"\nTest of the inverse mpolar FFT for m=%d: \n"</span>,m);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     sprintf(filename,<span class="stringliteral">"mpolar_ifft_error%d.dat"</span>,m);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     fp1=fopen(filename,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keywordflow">for</span> (max_i=0; max_i<=20; max_i+=2)</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>       <a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8" title="inverse NFFT-based mpolar FFT">inverse_mpolar_fft</a>(f_direct,T,R,f_tilde,N,max_i,m);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>       E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       printf(<span class="stringliteral">"%3d iterations: E_max = %e\n"</span>,max_i,E_max);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>       fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     fclose(fp1);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_direct);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_tilde);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/mri2d_2reconstruct__data__gridding_8c_source.html b/doc/api/html/mri2d_2reconstruct__data__gridding_8c_source.html
new file mode 100644
index 0000000..3ee6537
--- /dev/null
+++ b/doc/api/html/mri2d_2reconstruct__data__gridding_8c_source.html
@@ -0,0 +1,153 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_gridding.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri2d/reconstruct_data_gridding.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340">   40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340" title="reconstruct makes a 2d-adjoint-nfft">reconstruct</a>(<span class="keywordtype">char</span>* fil [...]
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">int</span> j;                   <span class="comment">/* some variables  */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> weights;          <span class="comment">/* store one weight temporary */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> real,imag;        <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;       <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   FILE* fin;               <span class="comment">/* input file  */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   FILE* fweight;           <span class="comment">/* input file for the weights */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE *fout_real;         <span class="comment">/* output file  */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   FILE *fout_imag;         <span class="comment">/* output file  */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> my_N[2],my_n[2];</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   my_N[0]=N; my_n[0]=ceil(N*1.2);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   nfft_init_guru(&my_plan, 2, my_N, M, my_n, 6,flags,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   fweight=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     fscanf(fweight,<span class="stringliteral">"%le "</span>,&weights);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     fscanf(fin,<span class="stringliteral">"%le %le %le %le"</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],&real,&amp [...]
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * weights;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   fclose(fweight);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="comment">/* precompute full psi */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="comment">/* compute the adjoint nfft */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   nfft_adjoint(&my_plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]));</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]));</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   fclose(fin);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     printf(<span class="stringliteral">"usage: ./reconstruct_data_gridding FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <a class="code" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340" title="reconstruct makes a 2d-adjoint-nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[5]));</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/mri3d_2reconstruct__data__gridding_8c_source.html b/doc/api/html/mri3d_2reconstruct__data__gridding_8c_source.html
new file mode 100644
index 0000000..cc5dc10
--- /dev/null
+++ b/doc/api/html/mri3d_2reconstruct__data__gridding_8c_source.html
@@ -0,0 +1,204 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_gridding.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri3d/reconstruct_data_gridding.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e">   40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e" title="reconstruct makes an 2d-adjoint-nfft for every slice">reconstruct</a>(<span class="keywordt [...]
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">int</span> j,k,z;               <span class="comment">/* some variables  */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> weights;          <span class="comment">/* store one weight temporary */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> tmp;              <span class="comment">/* tmp to read the obsolent z from the input file */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> real,imag;        <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;       <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordtype">int</span> my_N[2],my_n[2];     <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE* fin;               <span class="comment">/* input file  */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   FILE* fweight;           <span class="comment">/* input file for the weights */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   my_N[0]=N; my_n[0]=ceil(N*1.2);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                         MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                         FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                         FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">for</span>(z=0;z<Z;z++) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     fweight=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       fscanf(fweight,<span class="stringliteral">"%le "</span>,&weights);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       fscanf(fin,<span class="stringliteral">"%le %le %le %le %le"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>              &my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],&tmp,&real,&imag);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       <span class="keywordflow">if</span>(weight)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * weights;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     fclose(fweight);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="comment">/* precompute psi if set just one time because the knots equal each slice */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="comment">/* precompute full psi if set just one time because the knots equal each slice */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="comment">/* compute the adjoint nfft */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     nfft_adjoint(&my_plan);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       <span class="comment">/* write every slice in the memory.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">      here we make an fftshift direct */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k];</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   fclose(fin);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877">  104</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.da [...]
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   FILE* fout_real;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   FILE* fout_imag;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">for</span>(i=0;i<Z;i++) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     fprintf(fout_real,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     fprintf(fout_imag,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   fftw_complex *mem;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   fftw_plan plan;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> N,M,Z;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">if</span> (argc <= 6) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     printf(<span class="stringliteral">"usage: ./reconstruct_data_gridding FILENAME N M Z ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   N=atoi(argv[2]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   M=atoi(argv[3]);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   Z=atoi(argv[4]);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="comment">/* Allocate memory to hold every slice in memory after the</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">  2D-infft */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   mem = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="comment">/* Create plan for the 1d-ifft */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   plan = fftw_plan_many_dft(1, &Z, N*N,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                   mem, NULL,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                   N*N, 1,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                   mem, NULL,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                   N*N,1 ,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                   FFTW_BACKWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="comment">/* execute the 2d-nfft's */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e" title="reconstruct makes an 2d-adjoint-nfft for every slice">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[6]),mem);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="comment">/* execute the 1d-fft's */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   fftw_execute(plan);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="comment">/* write the memory back in files */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part">print</a>(N,M,Z, mem);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(mem);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/mri_8c_source.html b/doc/api/html/mri_8c_source.html
new file mode 100644
index 0000000..a29cd69
--- /dev/null
+++ b/doc/api/html/mri_8c_source.html
@@ -0,0 +1,316 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mri.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a6d8c0f9045568178601abc26c60f91f.html">mri</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mri.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: mri.c 3965 2013-04-22 12:12:31Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="structwindow__funct__plan__.html">   37</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan_</a> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">int</span> n[1];</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">double</span> sigma[1];</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">double</span> *b;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">   43</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304" title="input for de Boor algorithm, if B_SPLINE or SINC_2m is defined">spline_coeffs</a>;                </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> } <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">void</span> window_funct_init(<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>* ths, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> sigma) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   ths->d=1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   ths->m=m;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   ths->n[0]=n;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   ths->sigma[0]=sigma;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   WINDOW_HELP_INIT</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> * mri_inh_2d1d</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">void</span> mri_inh_2d1d_trafo(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *that) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">double</span> _Complex *f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>  [...]
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">double</span> _Complex *f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtyp [...]
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="comment">/* the pointers that->f and that->f_hat have been modified by the solver */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   memset(f,0,that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     f_hat[j]=that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j];</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]*=cexp(-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*that->w[j]*((<span class="keywordtype">double</span>)l)) [...]
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&that->plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++){</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>       <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       <span class="keywordflow">if</span>(fabs(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>/((<span class="key [...]
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>       {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">double</span> phi_val = PHI(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]),0);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         f[j]+=that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]*phi_val;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">// the line below causes internal compiler error for gcc 4.7.1</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">//        f[j]+=that->f[j]*PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=f_hat[j];</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=f;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="keywordtype">void</span> mri_inh_2d1d_adjoint(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *that) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">double</span> _Complex *f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>  [...]
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">double</span> _Complex *f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtyp [...]
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   memset(f_hat,0,that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">/* the pointers that->f and that->f_hat have been modified by the solver */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     f[j]=that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>       <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       <span class="keywordflow">if</span>(fabs(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>/((<span class="key [...]
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]*=PHI(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]),0);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]=0.0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     nfft_adjoint(&that->plan);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       f_hat[j]+=that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]*cexp(2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*that->w[j]*((<span class="keywordtype">double</s [...]
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]=f[j];</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     f_hat[j] /= PHI_HUT(ths->n[0]*that->w[j],0);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=f_hat;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="keywordtype">void</span> mri_inh_2d1d_init_guru(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                     <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   nfft_init_guru(&ths->plan,2,N,M,n,m,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   ths->N3=N[2];</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   ths->sigma3=sigma;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   ths-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a> = ths->plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   ths-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a> = ths->plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   ths-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   ths-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   ths->t = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   ths->w = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   ths-><a class="code" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_2d1d_trafo;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   ths-><a class="code" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_2d1d_adjoint;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keywordtype">void</span> mri_inh_2d1d_finalize(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->t);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->w);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="comment">/* the pointers ths->f and ths->f_hat have been modified by the solver */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   ths->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   ths->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   nfft_finalize(&ths->plan);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment"> * mri_inh_3d</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="keywordtype">void</span> mri_inh_3d_trafo(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *that) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="comment">/* the pointers that->f has been modified by the solver */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> =that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>;j++) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<ths->n[0]/2;l++)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>       <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       <span class="keywordflow">if</span>(fabs(that->w[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<ths->m/((<span class="keywordtype">double</span>)ths->n[0]))</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j*ths->n[0]+(l+ths->n[0]/2)]= that-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> [...]
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j*ths->n[0]+(l+ths->n[0]/2)]=0.0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&that->plan);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] /= PHI_HUT(ths->n[0]*that->plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2],0);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="keywordtype">void</span> mri_inh_3d_adjoint(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *that) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="comment">/* the pointers that->f has been modified by the solver */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> =that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] /= PHI_HUT(ths->n[0]*that->plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2],0);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   nfft_adjoint(&that->plan);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>;j++) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     that-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=0.0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<ths->n[0]/2;l++)</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       <span class="keywordflow">if</span>(fabs(that->w[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<ths->m/((<span class="keywordtype">double</span>)ths->n[0]))</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         that-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]+= that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j*ths->n[0]+(l+ths->n[0] [...]
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="keywordtype">void</span> mri_inh_3d_init_guru(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                     <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   ths->N3=N[2];</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   ths->sigma3=sigma;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   nfft_init_guru(&ths->plan,3,N,M,n,m,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   ths-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a> = N[0]*N[1];</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   ths-><a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a> = ths->plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   ths-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   ths-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb [...]
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   ths->w = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   ths-><a class="code" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_3d_trafo;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   ths-><a class="code" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_3d_adjoint;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="keywordtype">void</span> mri_inh_3d_finalize(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths) {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->w);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   nfft_finalize(&ths->plan);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nav_f.png b/doc/api/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
Binary files /dev/null and b/doc/api/html/nav_f.png differ
diff --git a/doc/api/html/nav_g.png b/doc/api/html/nav_g.png
new file mode 100644
index 0000000..2093a23
Binary files /dev/null and b/doc/api/html/nav_g.png differ
diff --git a/doc/api/html/nav_h.png b/doc/api/html/nav_h.png
new file mode 100644
index 0000000..33389b1
Binary files /dev/null and b/doc/api/html/nav_h.png differ
diff --git a/doc/api/html/ndft__fast_8c.html b/doc/api/html/ndft__fast_8c.html
new file mode 100644
index 0000000..3920466
--- /dev/null
+++ b/doc/api/html/ndft__fast_8c.html
@@ -0,0 +1,84 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - ndft_fast.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">ndft_fast.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Testing ndft, Horner-like ndft, and fully precomputed ndft.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="ndft__fast_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab816d27cbbc27e40180686dfdf092c18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab816d27cbbc27e40180686dfdf092c18"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_horner_trafo</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a53bb2cec77c49aa5c95da563cb8e8006"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53bb2cec77c49aa5c95da563cb8e8006"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_pre_full_trafo</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, double _Complex *A)</td></tr>
+<tr class="memitem:afcad1528e5264964ab523b110c62d6b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcad1528e5264964ab523b110c62d6b4"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_pre_full_init</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, double _Complex *A)</td></tr>
+<tr class="memitem:a5aca0b75e5ca5f147c210b23c507cd00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5aca0b75e5ca5f147c210b23c507cd00"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_time</b> (int N, int M, unsigned test_ndft, unsigned test_pre_full)</td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Testing ndft, Horner-like ndft, and fully precomputed ndft. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition in file <a class="el" href="ndft__fast_8c_source.html">ndft_fast.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/ndft__fast_8c_source.html b/doc/api/html/ndft__fast_8c_source.html
new file mode 100644
index 0000000..0719d54
--- /dev/null
+++ b/doc/api/html/ndft__fast_8c_source.html
@@ -0,0 +1,260 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - ndft_fast.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ndft_fast.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="ndft__fast_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: ndft_fast.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_horner_trafo(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> _Complex *f_hat_k, *f_j;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> _Complex exp_omega_0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     (*f_j) =0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>       exp_omega_0 = cexp(+2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       <span class="keywordflow">for</span>(k=0, f_hat_k= ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<ths->N[0]; k++, f_hat_k++)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>           (*f_j)+=(*f_hat_k);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>           (*f_j)*=exp_omega_0;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>       (*f_j)*=cexp(-<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, si [...]
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> } <span class="comment">/* ndft_horner_trafo */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_pre_full_trafo(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">double</span> _Complex *A)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">double</span> _Complex *f_hat_k, *f_j;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">double</span> _Complex *A_local;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     (*f_j) =0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, A_local=A; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordflow">for</span>(k=0, f_hat_k= ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<ths->N[0]; k++, f_hat_k++, A_local++)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       (*f_j) += (*f_hat_k)*(*A_local);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> } <span class="comment">/* ndft_pre_full_trafo */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_pre_full_init(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">double</span> _Complex *A)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordtype">double</span> _Complex *f_hat_k, *f_j, *A_local;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, A_local=A; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">for</span>(k=0, f_hat_k= ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<ths->N[0]; k++, f_hat_k++, A_local++)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       (*A_local) = cexp(-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*(k-ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spati [...]
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> } <span class="comment">/* ndft_pre_full_init */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_time(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">unsigned</span> test_ndft, <span class="keywordtype">unsigned</span> test_pre_full)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordtype">double</span> t, t_ndft, t_horner, t_pre_full, t_nfft;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">double</span> _Complex *A = NULL;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> np;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   printf(<span class="stringliteral">"%d\t%d\t"</span>,N, M);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   nfft_init_1d(&np, N, M);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total numbe [...]
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span>(test_pre_full)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>      A=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>      ndft_pre_full_init(&np, A);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>    }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(np.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, np.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0 [...]
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       t_ndft=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       r=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>           r++;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>           t0 = getticks();</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>           nfft_trafo_direct(&np);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>           t1 = getticks();</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>           t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>       printf(<span class="stringliteral">"%.2e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   t_horner=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   r=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">while</span>(t_horner<0.1)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       r++;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       t0 = getticks();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       ndft_horner_trafo(&np);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       t1 = getticks();</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       t_horner+=t;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   t_horner/=r;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   printf(<span class="stringliteral">"%.2e\t"</span>, t_horner);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordflow">if</span>(test_pre_full)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       t_pre_full=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       r=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       <span class="keywordflow">while</span>(t_pre_full<0.1)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>           r++;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>           t0 = getticks();</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           ndft_pre_full_trafo(&np,A);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           t1 = getticks();</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           t_pre_full+=t;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       t_pre_full/=r;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       printf(<span class="stringliteral">"%.2e\t"</span>, t_pre_full);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   t_nfft=0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   r=0;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       r++;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       t0 = getticks();</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&np);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       t1 = getticks();</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   printf(<span class="stringliteral">"%.2e\n"</span>, t_nfft);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   fflush(stdout);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">if</span>(test_pre_full)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(A);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   nfft_finalize(&np);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordtype">int</span> l,trial;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       fprintf(stderr,<span class="stringliteral">"ndft_fast type first last trials\n"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   fprintf(stderr,<span class="stringliteral">"Testing ndft, Horner-like ndft, fully precomputed ndft.\n"</span>);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   fprintf(stderr,<span class="stringliteral">"Columns: N, M, t_ndft, t_horner, t_pre_full, t_nfft\n\n"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">/* time vs. N=M */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>           <span class="keywordflow">if</span>(l<=13)</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>             ndft_time((1U<< l), (1U<< l), 1, 1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>             <span class="keywordflow">if</span>(l<=15)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>               ndft_time((1U<< l), (1U<< l), 1, 0);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>               ndft_time((1U<< l), (1U<< l), 0, 0);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfct_2simple__test_8c_source.html b/doc/api/html/nfct_2simple__test_8c_source.html
new file mode 100644
index 0000000..e4053c6
--- /dev/null
+++ b/doc/api/html/nfct_2simple__test_8c_source.html
@@ -0,0 +1,123 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d4f17a3806fad624168c14bf0ea2fb4.html">nfct</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfct/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfct_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <a class="code" href="structnfct__plan.html">nfct_plan</a> p;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">int</span> N=14;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> M=19;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   nfct_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordflow">for</span>(j = 0; j < p.<a class="code" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63" title="dimension, rank">d</a>*p.<a class="code" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     p.<a class="code" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed" title="nodes (in time/spatial domain)">x</a>[j] = 0.5 * ((<span class="keywordtype">double</span>)rand()) / RAND_MAX;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordflow">if</span>( p.<a class="code" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf" title="flags for precomputation, malloc">nfct_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     nfct_precompute_psi( &p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">for</span>(k = 0; k < p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>[k] = (<span class="keywordtype">double</span>)rand() / RAND_MAX;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of [...]
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   nfct_trafo_direct(&p);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   nfct_trafo(&p);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   nfct_adjoint(&p);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of [...]
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   nfct_adjoint_direct(&p);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of [...]
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   nfct_finalize(&p);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   printf(<span class="stringliteral">"computing one dimensional ndct, nfct and adjoint ndct, nfct\n\n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   simple_test_nfct_1d();</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   printf(<span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfct_8c_source.html b/doc/api/html/nfct_8c_source.html
new file mode 100644
index 0000000..bc63e70
--- /dev/null
+++ b/doc/api/html/nfct_8c_source.html
@@ -0,0 +1,944 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfct.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_6409bbb6ca4d9fdb6de069951c273365.html">nfct</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfct.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfct.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/* Nonequispaced fast cosine transform</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#undef X</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) CONCAT(nfctf_, name)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) CONCAT(nfctl_, name)</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) CONCAT(nfct_, name)</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> fftw_2N(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">return</span> 2 * (n - 1);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> fftw_2N_rev(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">return</span> (LRINT(K(0.5) * n) + 1);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> prod_int(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span> t, prod = 1;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     prod *= vec[t];</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/* handy shortcuts */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#define NFCT_DEFAULT_FLAGS PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | \</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">  MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#define NFCT_SUMMANDS (2 * ths->m + 2)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define NODE(p,r) (ths->x[(p) * ths->d + (r)])</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#define MACRO_ndct_init_result_trafo \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">  memset(f, 0, ths->M_total * sizeof(R));</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndct_init_result_adjoint \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">  memset(f_hat, 0, ths->N_total * sizeof(R));</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#define MACRO_nfct_D_init_result_A \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">  memset(g_hat, 0, prod_int(ths->n, ths->d) * sizeof(R));</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfct_D_init_result_T \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">  memset(f_hat, 0, ths->N_total * sizeof(R));</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor">#define MACRO_nfct_B_init_result_A \</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor">  memset(f, 0, ths->M_total * sizeof(R));</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfct_B_init_result_T \</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">  memset(g, 0, prod_int(ths->n, ths->d) * sizeof(R));</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#define NFCT_PRE_WINFUN(d) ths->N[d] = 2 * ths->N[d]; \</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor">  ths->n[d] = fftw_2N(ths->n[d]);</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">#define NFCT_POST_WINFUN(d) ths->N[d] = LRINT(K(0.5) * ths->N[d]); \</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor">  ths->n[d] = fftw_2N_rev(ths->n[d]);</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor">#define NFCT_WINDOW_HELP_INIT WINDOW_HELP_INIT</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> R X(phi_hut)(X(plan) *ths, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   NFCT_PRE_WINFUN(d);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   R phi_hut_tmp = PHI_HUT(k, d);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   NFCT_POST_WINFUN(d);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordflow">return</span> phi_hut_tmp;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> R X(phi)(X(plan) *ths, R x, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   NFCT_PRE_WINFUN(d);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   R phi_tmp = PHI(x, d);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   NFCT_POST_WINFUN(d);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordflow">return</span> phi_tmp;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">#define MACRO_with_cos_vec cos_vec[t][ka[t]]</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_without_cos_vec COS(K(2.0) * KPI * ka[t] * NODE(j,t))</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PHI_HUT_INV (K(1.0) / (X(phi_hut)(ths, kg[t], t)))</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]]</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PSI X(phi)(ths, NODE(j,t) - ((R)(lc[t] + lb[t])) / (K(2.0)*((R)(ths->n[t])-K(1.0))</span><span class="comment">/*(R)(fftw_2N(ths->n[t]))*/</span><span class="preprocessor">), t)</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor">#define MACRO_ndct_malloc__cos_vec \</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">  R **cos_vec; \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor">  cos_vec = (R**)Y(malloc)(ths->d * sizeof(R*)); \</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">  for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">    cos_vec[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">#define MACRO_ndct_free__cos_vec \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">  </span><span class="comment">/* free allocated memory */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">  for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">    Y(free)(cos_vec[t]); \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">  Y(free)(cos_vec); \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">#define MACRO_ndct_init__cos_vec \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">  for(t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">    cos_vec[t][0] = K(1.0); \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">    cos_vec[t][1] = COS(K(2.0) * KPI * NODE(j,t)); \</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">    for (k = 2; k < ths->N[t]; k++) \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">      cos_vec[t][k] = K(2.0) * cos_vec[t][1] * cos_vec[t][k-1] - \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">        cos_vec[t][k-2]; \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">#define MACRO_ndct_init__k__cos_k(which_one) \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">  cos_k[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor">  for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">    ka[t] = 0; \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">  for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">    cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">#define MACRO_ndct_count__k__cos_k(which_one) \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">  ka[ths->d-1]++; \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor">  i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">  while ((ka[i] == ths->N[i]) && (i > 0)) \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor">    ka[i - 1]++; \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor">    ka[i] = 0; \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor">    i--; \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor">  for (t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor">    cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor">#define MACRO_ndct_compute__trafo \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">  f[j] += f_hat[k] * cos_k[ths->d]; \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">#define MACRO_ndct_compute__adjoint \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor">  f_hat[k] += f[j] * cos_k[ths->d]; \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">/* slow (trafo) transform */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">#define MACRO_ndct(which_one) \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor">  void X(which_one ## _direct) (X(plan) *ths) \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">    int j, k, t, i; \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor">    int ka[ths->d]; \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor">    R cos_k[ths->d+1]; \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor">    R *f = ths->f; \</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor">    R *f_hat = ths->f_hat; \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor">    MACRO_ndct_init_result_ ## which_one; \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor">    if (ths->d == 1) \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">      for (j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor">      { \</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor">        for (k = 0; k < ths->N[0]; k++) \</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor">        { \</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">          cos_k[ths->d] = COS(K(2.0) * KPI * k * NODE(j,0)); \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">          MACRO_ndct_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">        } \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">      } \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor">    else \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor">      </span><span class="comment">/* fast nfct_trafo_direct */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">      MACRO_ndct_malloc__cos_vec; \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">      for (j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor">      { \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="preprocessor">        MACRO_ndct_init__cos_vec; \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="preprocessor">        MACRO_ndct_init__k__cos_k(with_cos_vec); \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor">        for (k = 0; k < ths->N_total; k++) \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="preprocessor">        { \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">          MACRO_ndct_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor">          MACRO_ndct_count__k__cos_k(with_cos_vec); \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">        } \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor">      } \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">      MACRO_ndct_free__cos_vec; \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">    } \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">} </span><span class="comment">/* ndct_{trafo, adjoint} */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> MACRO_ndct(trafo)</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> MACRO_ndct(adjoint)</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">#define MACRO_nfct__lower_boundary(j,act_dim) \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">  lb[(act_dim)] = \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">    LRINT(NODE((j),(act_dim)) * fftw_2N(ths->n[(act_dim)])) - ths->m; \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor">#define MACRO_nfct_D_compute_A \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="preprocessor">  g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="preprocessor">#define MACRO_nfct_D_compute_T \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="preprocessor">  f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor">#define MACRO_init__kg \</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="preprocessor">  for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="preprocessor">    kg[t] = 0; \</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="preprocessor">  i = 0; \</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="preprocessor">#define MACRO_count__kg \</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="preprocessor">  kg[ths->d - 1]++; \</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="preprocessor">  i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="preprocessor">  while ((kg[i] == ths->N[i]) && (i > 0)) \</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="preprocessor">    kg[i - 1]++; \</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="preprocessor">    kg[i] = 0; \</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="preprocessor">    i--; \</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="preprocessor">#define MACRO_update__phi_inv_k__kg_plain(what_kind, which_phi) \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="preprocessor">  for (t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="preprocessor">    MACRO__c_phi_inv_k__ ## what_kind(which_phi); \</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="preprocessor">    kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="preprocessor">#define MACRO__c_phi_inv_k__A(which_phi) \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor">  if (kg[t] == 0) \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="preprocessor">    c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor">    c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="preprocessor">#define MACRO__c_phi_inv_k__T(which_phi) \</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="preprocessor">  c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="preprocessor">#define MACRO_nfct_D(which_one) \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="preprocessor">static inline void D_ ## which_one (X(plan) *ths) \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="preprocessor">  int k_L; </span><span class="comment">/* plain index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="preprocessor">  int i, t; \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="preprocessor">  int kg[ths->d]; </span><span class="comment">/* multi index in g_hat,c_phi */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor">  R c_phi_inv_k[ths->d+1]; </span><span class="comment">/* postfix product of PHI_HUT_INV */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor">  int kg_plain[ths->d+1]; </span><span class="comment">/* postfix plain index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor">  R *g_hat, *f_hat; </span><span class="comment">/* local copy */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor">  g_hat = ths->g_hat; \</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="preprocessor">  f_hat = ths->f_hat; \</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="preprocessor">  MACRO_nfct_D_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="preprocessor">  c_phi_inv_k[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="preprocessor">  kg_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="preprocessor">  MACRO_init__kg; \</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="preprocessor">  if (ths->nfct_flags & PRE_PHI_HUT) \</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="preprocessor">    for (k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="preprocessor">      MACRO_update__phi_inv_k__kg_plain(which_one, with_PRE_PHI_HUT); \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="preprocessor">      MACRO_nfct_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="preprocessor">      MACRO_count__kg; \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="preprocessor">    } </span><span class="comment">/* for (k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="preprocessor">    for (k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="preprocessor">      MACRO_update__phi_inv_k__kg_plain(which_one,compute_PHI_HUT_INV); \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="preprocessor">      MACRO_nfct_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="preprocessor">      MACRO_count__kg; \</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="preprocessor">    } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="preprocessor">} </span><span class="comment">/* nfct_D */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> MACRO_nfct_D(A)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> MACRO_nfct_D(T)</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="preprocessor">#define MACRO_nfct_B_PRE_FULL_PSI_compute_A \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="preprocessor">  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor">#define MACRO_nfct_B_PRE_FULL_PSI_compute_T \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="preprocessor">  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="preprocessor">#define MACRO_nfct_B_compute_A \</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="preprocessor">  (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="preprocessor">#define MACRO_nfct_B_compute_T \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor">  g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="preprocessor">#define MACRO_compute_lg_offset__count_lg(i0) \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor">  </span><span class="comment">/* determine index in g-array corresponding to lb[(i0)] */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="preprocessor">  if (lb[(i0)] < 0) \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor">    lg_offset[(i0)] = \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="preprocessor">      (lb[(i0)] % fftw_2N(ths->n[(i0)])) + fftw_2N(ths->n[(i0)]); \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="preprocessor">    lg_offset[(i0)] = lb[(i0)] % (fftw_2N(ths->n[(i0)])); \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="preprocessor">    if (lg_offset[(i0)] >= ths->n[(i0)]) \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="preprocessor">      lg_offset[(i0)] = -(fftw_2N(ths->n[(i0)]) - lg_offset[(i0)]); \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="preprocessor">#define MACRO_set__lg__to__lg_offset \</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="preprocessor">  if (lg_offset[i] <= 0) \</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="preprocessor">    lg[i] = -lg_offset[i]; \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="preprocessor">    count_lg[i] = -1; \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="preprocessor">    lg[i] = +lg_offset[i]; \</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor">    count_lg[i] = +1; \</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor">#define MACRO_count__lg(dim) \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="preprocessor">  </span><span class="comment">/* turn around if we hit one of the boundaries */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor">  if ((lg[(dim)] == 0) || (lg[(dim)] == ths->n[(dim)]-1)) \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor">    count_lg[(dim)] *= -1; \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor">  </span><span class="comment">/* move array index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor">  lg[(dim)] += count_lg[(dim)]; \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor">#define MACRO_init_lb_lg_lc \</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="preprocessor">  for (i = 0; i < ths->d; i++) \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor">    MACRO_nfct__lower_boundary(j, i); \</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="preprocessor">    MACRO_compute_lg_offset__count_lg(i); \</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor">    MACRO_set__lg__to__lg_offset; \</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor">    </span><span class="comment">/* counter for lg */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="preprocessor">    lc[i] = 0; \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="preprocessor">   } \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor">   i = 0; \</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="preprocessor">#define MACRO_count__lg_lc \</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="preprocessor">  MACRO_count__lg(ths->d-1); \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor">  lc[ths->d - 1]++; \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="preprocessor">  i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="preprocessor">  while ((lc[i] == NFCT_SUMMANDS) && (i > 0)) \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="preprocessor">    lc[i - 1]++; \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="preprocessor">    lc[i] = 0; \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="preprocessor">    </span><span class="comment">/* ansonsten lg[i-1] verschieben */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="preprocessor">    MACRO_count__lg(i - 1); \</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="preprocessor">    </span><span class="comment">/* lg[i] = anfangswert */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="preprocessor">    MACRO_set__lg__to__lg_offset; \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="preprocessor">    i--; \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor">#define  MACRO_update_phi_tilde_lg_plain(which_one, which_psi) \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="preprocessor">  for (t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="preprocessor">    MACRO__phi_tilde__ ## which_one(which_psi); \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor">    lg_plain[t+1]  = lg_plain[t]  * ths->n[t] + lg[t]; \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="preprocessor">#define MACRO__phi_tilde__A(which_psi) \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="preprocessor">  phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor">#define MACRO__phi_tilde__T(which_psi) \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">  if(lg[t] == 0 || lg[t] == ths->n[t] - 1) \</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor">    phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="preprocessor">    phi_tilde[t+1] = K(0.5) * phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="preprocessor">#define MACRO_nfct_B(which_one) \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor">static inline void B_ ## which_one (nfct_plan *ths) \</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor">{ </span><span class="comment">/* MACRO_nfct_B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="preprocessor">  int lb[ths->d]; </span><span class="comment">/* multi band with respect to x_j */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="preprocessor">  int j, t, i; </span><span class="comment">/* index nodes, help vars */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="preprocessor">  int lprod, l_L, ix; </span><span class="comment">/* index one row of B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor">  int lc[ths->d]; </span><span class="comment">/* multi index 0<=lc<2m+2 */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor">  int lg[ths->d]; </span><span class="comment">/* real index of g in array */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor">  int lg_offset[ths->d]; </span><span class="comment">/* offset in g according to u */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor">  int count_lg[ths->d]; </span><span class="comment">/* count summands (2m+2) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor">  int lg_plain[ths->d+1]; </span><span class="comment">/* index of g in multi_array */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor">  R *f, *g; </span><span class="comment">/* local copy */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="preprocessor">  R phi_tilde[ths->d+1]; </span><span class="comment">/* holds values for psi */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="preprocessor">  R *fj; </span><span class="comment">/* pointer to final result */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor">  f = ths->f; g = ths->g; \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="preprocessor">  MACRO_nfct_B_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="preprocessor">  </span><span class="comment">/* both flags are set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="preprocessor">  if ((ths->nfct_flags & PRE_PSI)&&(ths->nfct_flags & PRE_FULL_PSI)) \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="preprocessor">    for (ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor">      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor">      { \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor">        MACRO_nfct_B_PRE_FULL_PSI_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor">      } \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor">  } \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor">  else \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="preprocessor">    phi_tilde[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor">    lg_plain[0]  = 0; \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="preprocessor">    for (t = 0, lprod = 1; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="preprocessor">      lprod *= NFCT_SUMMANDS; \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor">    </span><span class="comment">/* PRE_PSI flag is set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="preprocessor">    if (ths->nfct_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="preprocessor">      for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="preprocessor">        { \</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="preprocessor">          MACRO_init_lb_lg_lc; \</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="preprocessor">          for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="preprocessor">          { \</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="preprocessor">            MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="preprocessor">            MACRO_nfct_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="preprocessor">            MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="preprocessor">          } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor">        } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="preprocessor">    </span><span class="comment">/* no PSI flag is set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="preprocessor">    else \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="preprocessor">      for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor">      { \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="preprocessor">        MACRO_init_lb_lg_lc; \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="preprocessor">        for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="preprocessor">        { \</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="preprocessor">          MACRO_update_phi_tilde_lg_plain(which_one,compute_PSI); \</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="preprocessor">          MACRO_nfct_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="preprocessor">          MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="preprocessor">        } </span><span class="comment">/* for (l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="preprocessor">      } </span><span class="comment">/* for (j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="preprocessor">  } </span><span class="comment">/* else (PRE_PSI && FULL_PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="preprocessor">} </span><span class="comment">/* nfct_B */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> MACRO_nfct_B(A)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> MACRO_nfct_B(T)</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">/* more memory, but faster */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="preprocessor">#define MACRO_nfct_full_psi(which_one) \</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="preprocessor">static inline void full_psi__ ## which_one(nfct_plan *ths) \</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor">  int t, i; </span><span class="comment">/* index over all dimensions */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="preprocessor">  int j; </span><span class="comment">/* node index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="preprocessor">  int l_L; </span><span class="comment">/* plain index 0 <= l_L < lprod */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="preprocessor">  int lc[ths->d]; </span><span class="comment">/* multi index 0<=lj<u+o+1 */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="preprocessor">  int lg_plain[ths->d+1]; </span><span class="comment">/* postfix plain index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="preprocessor">  int count_lg[ths->d]; \</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="preprocessor">  int lg_offset[ths->d]; \</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor">  int lg[ths->d]; \</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="preprocessor">  int lprod; </span><span class="comment">/* 'bandwidth' of matrix B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="preprocessor">  int lb[ths->d]; </span><span class="comment">/* depends on x_j */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="preprocessor">  R phi_tilde[ths->d+1]; \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="preprocessor">  R eps = ths->nfct_full_psi_eps; \</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="preprocessor">  int *index_g, *index_f; \</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="preprocessor">  R *new_psi; \</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor">  int ix, ix_old, size_psi; \</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="preprocessor">  phi_tilde[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="preprocessor">  lg_plain[0]  =   0; \</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="preprocessor">  if (ths->nfct_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="preprocessor">  { \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="preprocessor">    size_psi = ths->M_total; \</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="preprocessor">    index_f = (int*)Y(malloc)(ths->M_total  * sizeof(int)); \</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <span class="preprocessor">    index_g = (int*)Y(malloc)(size_psi * sizeof(int)); \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="preprocessor">    new_psi = (R*)Y(malloc)(size_psi * sizeof(R)); \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="preprocessor">    for (t = 0,lprod = 1; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="preprocessor">      lprod *= NFCT_SUMMANDS; \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="preprocessor">      eps *= nfct_phi(ths, K(0.0), t); \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="preprocessor">    } \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="preprocessor">    for (ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="preprocessor">    { \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="preprocessor">      MACRO_init_lb_lg_lc; \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="preprocessor">      for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="preprocessor">      { \</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">        MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="preprocessor">        if (phi_tilde[ths->d] > eps) \</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="preprocessor">        { \</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="preprocessor">          index_g[ix] = lg_plain[ths->d]; \</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="preprocessor">          new_psi[ix] = phi_tilde[ths->d]; \</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="preprocessor">          ix++; \</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="preprocessor">          if (ix == size_psi) \</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="preprocessor">          { \</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="preprocessor">            size_psi += ths->M_total; \</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="preprocessor">            index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="preprocessor">            new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="preprocessor">          } \</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="preprocessor">        } \</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="preprocessor">        MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor">      } </span><span class="comment">/* for (l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="preprocessor">      index_f[j] = ix - ix_old; \</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="preprocessor">      ix_old = ix; \</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="preprocessor">    } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="preprocessor">    Y(free)(ths->psi); \</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="preprocessor">    size_psi = ix; \</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="preprocessor">    ths->size_psi = size_psi; \</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="preprocessor">    index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="preprocessor">    new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="preprocessor">    ths->psi = new_psi; \</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="preprocessor">    ths->psi_index_g = index_g; \</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="preprocessor">    ths->psi_index_f = index_f; \</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor">  } </span><span class="comment">/* if(PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> MACRO_nfct_full_psi(A)</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> MACRO_nfct_full_psi(T)</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment">/* user routines */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="keywordtype">void</span> X(trafo)(X(plan) *ths)</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   <span class="comment">/* use ths->my_fftw_r2r_plan */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   ths->g_hat = ths->g1;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   ths->g = ths->g2;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   <span class="comment">/* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="comment">   * k \in I_N \f$ */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   TIC(0)</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   D_A(ths);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   TOC(0)</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   <span class="comment">/* Compute by d-variate discrete Fourier transform</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="comment">   * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> <span class="comment">   * \text{ for } l \in I_n \f$ */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   TIC(1)</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   Z(execute)(ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   TOC(1)</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   if (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     full_psi__A(ths);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   <span class="comment">/* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> <span class="comment">   * \text{ for } j=0,\hdots,M-1 \f$ */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   TIC(2)</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   B_A(ths);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   TOC(2)</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   if (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     Y(free)(ths->psi_index_g);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     Y(free)(ths->psi_index_f);</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>   }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> } <span class="comment">/* nfct_trafo */</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> <span class="keywordtype">void</span> X(adjoint)(X(plan) *ths)</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> {</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   <span class="comment">/* use ths->my_fftw_plan */</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   ths->g_hat = ths->g2;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>   ths->g = ths->g1;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>   <span class="keywordflow">if</span> (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     full_psi__T(ths);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   <span class="comment">/* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="comment">   * \text{ for } l \in I_n,m(x_j) \f$ */</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   TIC(2)</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   B_T(ths);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   TOC(2)</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   if (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>   {</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     Y(free)(ths->psi_index_g);</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     Y(free)(ths->psi_index_f);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   }</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   <span class="comment">/* Compute by d-variate discrete cosine transform</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="comment">   * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">   * \text{ for }  k \in I_N\f$ */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   TIC(1)</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   Z(execute)(ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   TOC(1)</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   <span class="comment">/* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="comment">   * k \in I_N \f$ */</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   TIC(0)</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   D_T(ths);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   TOC(0)</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> } <span class="comment">/* nfct_adjoint */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> static inline <span class="keywordtype">void</span> precompute_phi_hut(X(plan) *ths)</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> {</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <span class="keywordtype">int</span> kg[ths->d]; <span class="comment">/* index over all frequencies */</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   ths->c_phi_inv = (R**)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(R*));</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   {</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     ths->c_phi_inv[t] = (R*)Y(malloc)(ths->N[t] * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordflow">for</span> (kg[t] = 0; kg[t] < ths->N[t]; kg[t]++)</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>       ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> } <span class="comment">/* nfct_phi_hut */</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="keywordtype">void</span> X(precompute_psi)(X(plan) *ths)</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   <span class="keywordtype">int</span> j; <span class="comment">/* index over all nodes */</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   <span class="keywordtype">int</span> lc[ths->d]; <span class="comment">/* index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   <span class="keywordtype">int</span> lb[ths->d]; <span class="comment">/* depends on x_j */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   {</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="keywordflow">for</span> (j = 0; j < ths->M_total; j++)</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>       MACRO_nfct__lower_boundary(j, t);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>       <span class="keywordflow">for</span>(lc[t] = 0; lc[t] < NFCT_SUMMANDS; lc[t]++)</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]] = MACRO_compute_PSI;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     } <span class="comment">/* for (j) */</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   } <span class="comment">/* for (t) */</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> } <span class="comment">/* nfct_precompute_psi */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> init_help(X(plan) *ths)</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   ths->N_total = prod_int(ths->N, ths->d);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   ths->sigma = (R*)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>   <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     ths->sigma[t] = ((R)(ths->n[t] - 1)) / ths->N[t];</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   <span class="comment">/* Assign r2r transform kinds for each dimension */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   ths->r2r_kind = (Z(r2r_kind)*)Y(malloc)(ths->d * <span class="keyword">sizeof</span> (Z(r2r_kind)));</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     ths->r2r_kind[t] = FFTW_REDFT00;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   NFCT_WINDOW_HELP_INIT;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>   if (ths->nfct_flags & MALLOC_X)</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     ths->x = (R*)Y(malloc)(ths->d * ths->M_total * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>   <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     ths->f_hat = (R*)Y(malloc)(ths->N_total * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>   <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_F)</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     ths->f = (R*)Y(malloc)(ths->M_total * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>   <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     precompute_phi_hut(ths);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>   <span class="comment">/* NO FFTW_MALLOC HERE */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>   <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PSI)</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>   {</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     ths->psi =</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>       (R*)Y(malloc)(ths->M_total * ths->d * NFCT_SUMMANDS * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     <span class="comment">/* Set default for full_psi_eps */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     ths->nfct_full_psi_eps = POW(K(10.0), K(-10.0));</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>   }</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>   <span class="keywordflow">if</span> (ths->nfct_flags & FFTW_INIT)</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   {</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     ths->g1 =</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>       (R*)Y(malloc)(prod_int(ths->n, ths->d) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     <span class="keywordflow">if</span> (ths->nfct_flags & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>       ths->g2 =</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         (R*) Y(malloc)(prod_int(ths->n, ths->d) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>       ths->g2 = ths->g1;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     ths->my_fftw_r2r_plan =</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>       Z(plan_r2r)(ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind,</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>         ths->fftw_flags);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>   }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>   ths->mv_trafo = (void (*) (<span class="keywordtype">void</span>* ))X(trafo);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   ths->mv_adjoint = (void (*) (<span class="keywordtype">void</span>* ))X(adjoint);</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> }</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> </div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="keywordtype">void</span> X(init)(X(plan) *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   ths->d = d;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   ths->M_total = M_total;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   ths->N = (<span class="keywordtype">int</span>*) Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="keywordflow">for</span> (t = 0;t < d; t++)</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     ths->N[t] = N[t];</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>   ths->n = (<span class="keywordtype">int</span>*) Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>   <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     ths->n[t] = fftw_2N(Y(next_power_of_2)(ths->N[t]));</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> <span class="comment">/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> <span class="comment"></span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> <span class="comment">  WINDOW_HELP_ESTIMATE_m;</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   ths->nfct_flags = NFCT_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   ths->fftw_flags = FFTW_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   init_help(ths);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> }</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="comment">/* Was macht diese Funktion. Wird sie gebraucht? Bei NFST ist sie auch in</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="comment"> * nfft3.h deklariert.</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="comment">void nfct_init_m(nfct_plan *ths, int d, int *N, int M_total, int m)</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="comment">{</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">  int t, n[d];</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="comment"></span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="comment">  for(t = 0; t < d; t++)</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="comment">    n[t] = fftw_2N(X(next_power_of_2)(N[t]));</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="comment"></span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> <span class="comment">  nfct_init_guru(ths, d, N, M_total, n, m, NFCT_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> <span class="comment">}</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> <span class="keywordtype">void</span> X(init_guru)(X(plan) *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *n, <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="keywordtype">unsigned</span> nfct_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>   <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>   ths->d = d;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>   ths->M_total = M_total;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   ths->N = (<span class="keywordtype">int</span>*)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>   <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     ths->N[t] = N[t];</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   ths->n = (<span class="keywordtype">int</span>*)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     ths->n[t] = n[t];</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>   ths->m = m;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>   ths->nfct_flags = nfct_flags;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   ths->fftw_flags = fftw_flags;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   init_help(ths);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="keywordtype">void</span> X(init_1d)(X(plan) *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> {</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>   <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>   N[0] = N0;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>   X(init)(ths, 1, N, M_total);</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> }</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="keywordtype">void</span> X(init_2d)(X(plan) *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> {</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>   N[0] = N0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>   N[1] = N1;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   X(init)(ths, 2, N, M_total);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="keywordtype">void</span> X(init_3d)(X(plan) *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> {</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>   <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>   N[0] = N0;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   N[1] = N1;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>   N[2] = N2;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   X(init)(ths, 3, N, M_total);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="keywordtype">void</span> X(finalize)(X(plan) *ths)</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   <span class="keywordtype">int</span> t; <span class="comment">/* dimension index*/</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>   <span class="keywordflow">if</span> (ths->nfct_flags & FFTW_INIT)</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   {</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     Z(destroy_plan)(ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <span class="keywordflow">if</span> (ths->nfct_flags & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>       Y(free)(ths->g2);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     Y(free)(ths->g1);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>   }</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>   <span class="comment">/* NO FFTW_FREE HERE */</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>   <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PSI)</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   {</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     Y(free)(ths->psi);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   }</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>   <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>     <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>       Y(free)(ths->c_phi_inv[t]);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>     Y(free)(ths->c_phi_inv);</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   }</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>   <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_F)</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     Y(free)(ths->f);</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   <span class="keywordflow">if</span>(ths->nfct_flags & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     Y(free)(ths->f_hat);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_X)</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     Y(free)(ths->x);</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>   WINDOW_HELP_FINALIZE;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>   Y(free)(ths->N);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>   Y(free)(ths->n);</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>   Y(free)(ths->sigma);</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>   Y(free)(ths->r2r_kind);</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> } <span class="comment">/* nfct_finalize */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft3_8h.html b/doc/api/html/nfft3_8h.html
new file mode 100644
index 0000000..6d1f936
--- /dev/null
+++ b/doc/api/html/nfft3_8h.html
@@ -0,0 +1,1543 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft3.h File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">nfft3.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "nfft3conf.h"</code><br/>
+<code>#include <fftw3.h></code><br/>
+</div>
+<p><a href="nfft3_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html">nfftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html">nfft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html">nfftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html">nfctf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html">nfct_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html">nfctl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html">nfstf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html">nfst_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html">nfstl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html">nnfftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html">nnfft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html">nnfftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html">nsfftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html">nsfft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html">nsfftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html">nfsftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html">nfsft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html">nfsftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan_</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html">nfsoft_plan_</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan_</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html">solver_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ae517f6bde0ab33b87890bb20a018546a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae517f6bde0ab33b87890bb20a018546a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_CONCAT</b>(prefix, name)   prefix ## name</td></tr>
+<tr class="memitem:a3aee7f9abb803d4208e483d24ce23847"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aee7f9abb803d4208e483d24ce23847"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_EXTERN</b>   extern</td></tr>
+<tr class="memitem:a0d1eb31c2f64e41fa0399b1eb7b5ddd4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">MACRO_MV_PLAN</a>(RC)</td></tr>
+<tr class="memdesc:a0d1eb31c2f64e41fa0399b1eb7b5ddd4"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint.  <a href="#a0d1eb31c2f64e41fa0399b1eb7b5ddd4"></a><br/></td></tr>
+<tr class="memitem:abb27e11cf00ef4d6c30c8bcedf7da849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb27e11cf00ef4d6c30c8bcedf7da849"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nfft_, name)</td></tr>
+<tr class="memitem:acace1e2cd22c39b9b6f0fee89315e092"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acace1e2cd22c39b9b6f0fee89315e092"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nfftf_, name)</td></tr>
+<tr class="memitem:a2cf83ec3ae466fbda3fa01f5cf6263fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cf83ec3ae466fbda3fa01f5cf6263fe"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nfftl_, name)</td></tr>
+<tr class="memitem:a038f615fdd7fd2ef683924657745121a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a038f615fdd7fd2ef683924657745121a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:ada3a356fdaf5840f98374a0a7aaf3e9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada3a356fdaf5840f98374a0a7aaf3e9c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_PHI_HUT</b>   (1U<< 0)</td></tr>
+<tr class="memitem:a01ebac2d2071639df189f083fc9f24eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01ebac2d2071639df189f083fc9f24eb"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FG_PSI</b>   (1U<< 1)</td></tr>
+<tr class="memitem:abb1ad048b695cb806baf010c5d1b2caf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb1ad048b695cb806baf010c5d1b2caf"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_LIN_PSI</b>   (1U<< 2)</td></tr>
+<tr class="memitem:a9c5a5ab61009a801082897ca40a1658c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c5a5ab61009a801082897ca40a1658c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_FG_PSI</b>   (1U<< 3)</td></tr>
+<tr class="memitem:a959463a5c7723ccef5057ddcb784b40c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a959463a5c7723ccef5057ddcb784b40c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_PSI</b>   (1U<< 4)</td></tr>
+<tr class="memitem:a7ad8a7e19519b16340dabec48899c6a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ad8a7e19519b16340dabec48899c6a4"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_FULL_PSI</b>   (1U<< 5)</td></tr>
+<tr class="memitem:a353185384f87de0dc4320a82652ef724"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a353185384f87de0dc4320a82652ef724"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_X</b>   (1U<< 6)</td></tr>
+<tr class="memitem:a02d52cb02b6cfdbc3e4d5fd4de1aef9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02d52cb02b6cfdbc3e4d5fd4de1aef9e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_F_HAT</b>   (1U<< 7)</td></tr>
+<tr class="memitem:aa7b5098f4136080bbe0dd989973e2a69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7b5098f4136080bbe0dd989973e2a69"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_F</b>   (1U<< 8)</td></tr>
+<tr class="memitem:a9193f768d5839892d0e303080c370eaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9193f768d5839892d0e303080c370eaf"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FFT_OUT_OF_PLACE</b>   (1U<< 9)</td></tr>
+<tr class="memitem:ad3fe6867a3351441c6f44dd5a3746f5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3fe6867a3351441c6f44dd5a3746f5b"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FFTW_INIT</b>   (1U<< 10)</td></tr>
+<tr class="memitem:a4915d42afc8200ce7e0bf3c60f5a5164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4915d42afc8200ce7e0bf3c60f5a5164"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_SORT_NODES</b>   (1U<< 11)</td></tr>
+<tr class="memitem:a0dc58c2f9ab115527fce4553e523fe65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0dc58c2f9ab115527fce4553e523fe65"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_OMP_BLOCKWISE_ADJOINT</b>   (1U<<12)</td></tr>
+<tr class="memitem:a44c85197c6bdcf4b632aeff5e94d5329"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44c85197c6bdcf4b632aeff5e94d5329"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_ONE_PSI</b>   (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)</td></tr>
+<tr class="memitem:a8aca2e82cc4aad289d766e9081db2342"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aca2e82cc4aad289d766e9081db2342"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nfct_, name)</td></tr>
+<tr class="memitem:aae454c5f4fb644fc43fcbcb38aa2ad21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae454c5f4fb644fc43fcbcb38aa2ad21"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nfctf_, name)</td></tr>
+<tr class="memitem:ac5f221d2bdedda863256ad71afb59aa8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5f221d2bdedda863256ad71afb59aa8"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nfctl_, name)</td></tr>
+<tr class="memitem:acc3e466d456fb09b49d1419c700b17a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc3e466d456fb09b49d1419c700b17a8"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a31de74e769995b389a073cc1a11a635d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31de74e769995b389a073cc1a11a635d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nfst_, name)</td></tr>
+<tr class="memitem:a2179856efcede20ea65f4258a0d0d733"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2179856efcede20ea65f4258a0d0d733"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nfstf_, name)</td></tr>
+<tr class="memitem:ac580ff2588b8c11fe4afff54283f59f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac580ff2588b8c11fe4afff54283f59f5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nfstl_, name)</td></tr>
+<tr class="memitem:a903d25a4862e94e5f89cda05c6e37b91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a903d25a4862e94e5f89cda05c6e37b91"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a47809430feb060b7a83995abd8a1463e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47809430feb060b7a83995abd8a1463e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nnfft_, name)</td></tr>
+<tr class="memitem:a3ad081c46c1cab2db96655b39606c35d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ad081c46c1cab2db96655b39606c35d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nnfftf_, name)</td></tr>
+<tr class="memitem:a42846731d87023ee66232e72c613ad41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42846731d87023ee66232e72c613ad41"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nnfftl_, name)</td></tr>
+<tr class="memitem:a8700e802f404ffbc5c550435fc424cad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8700e802f404ffbc5c550435fc424cad"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_DEFINE_API</b>(X, Y, Z, R, C)</td></tr>
+<tr class="memitem:abfc80597fb6dcd28f3b9728bd7082642"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfc80597fb6dcd28f3b9728bd7082642"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_V</b>   (1U<< 11)</td></tr>
+<tr class="memitem:adf3e9bfac19f91b9ddc0b4d7e6a6d058"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf3e9bfac19f91b9ddc0b4d7e6a6d058"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nsfft_, name)</td></tr>
+<tr class="memitem:a3c980c7d23c9e5613e89f6e9eeb61522"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c980c7d23c9e5613e89f6e9eeb61522"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nsfftf_, name)</td></tr>
+<tr class="memitem:abf287fadc0bd736d90c31cbf94403765"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf287fadc0bd736d90c31cbf94403765"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nsfftl_, name)</td></tr>
+<tr class="memitem:a84826a12df920d845086a31bd4256c7b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_DEFINE_API</b>(X, Y, Z, R, C)</td></tr>
+<tr class="memitem:a3a5a1f8be42adf0575f0e0c4b8e0a32a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a5a1f8be42adf0575f0e0c4b8e0a32a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSDFT</b>   (1U<< 12)</td></tr>
+<tr class="memitem:aa0c7f7ad1ad1f371eef969d543b57fb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0c7f7ad1ad1f371eef969d543b57fb8"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MRI_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(mri_, name)</td></tr>
+<tr class="memitem:a73bcb00b7f86d1862cd1fb121e3d5924"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73bcb00b7f86d1862cd1fb121e3d5924"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MRI_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(mrif_, name)</td></tr>
+<tr class="memitem:a2af03d945f2809254dfda35ce8ce933f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2af03d945f2809254dfda35ce8ce933f"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MRI_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(mril_, name)</td></tr>
+<tr class="memitem:a50af9dcbe46f6cc4fee5141873098415"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>MRI_DEFINE_API</b>(X, Z, R, C)</td></tr>
+<tr class="memitem:aadd481b947f7d9c24f54b386e3579da1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadd481b947f7d9c24f54b386e3579da1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nfsft_, name)</td></tr>
+<tr class="memitem:a02786180402d502acfa410bc0c0f5c6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02786180402d502acfa410bc0c0f5c6b"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nfsftf_, name)</td></tr>
+<tr class="memitem:ab05ba2d6ff05bf13a77a0a26d0adedb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab05ba2d6ff05bf13a77a0a26d0adedb2"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nfsftl_, name)</td></tr>
+<tr class="memitem:a80ade6852f7c1215d2ebc936a734250e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80ade6852f7c1215d2ebc936a734250e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DEFINE_API</b>(X, Z, R, C)</td></tr>
+<tr class="memitem:a65036f479a7421863956c02aa78bc9be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65036f479a7421863956c02aa78bc9be"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_NORMALIZED</b>   (1U << 0)</td></tr>
+<tr class="memitem:aba029560a4a506c8f2dad185511db827"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba029560a4a506c8f2dad185511db827"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_USE_NDFT</b>   (1U << 1)</td></tr>
+<tr class="memitem:a6b9eed1e7bcf862dcc3111509075fcbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b9eed1e7bcf862dcc3111509075fcbb"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_USE_DPT</b>   (1U << 2)</td></tr>
+<tr class="memitem:a02e4313d15b24c79e6802f853d452454"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02e4313d15b24c79e6802f853d452454"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MALLOC_X</b>   (1U << 3)</td></tr>
+<tr class="memitem:ab76dcf8db948f18cc87403dac804fc68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab76dcf8db948f18cc87403dac804fc68"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MALLOC_F_HAT</b>   (1U << 5)</td></tr>
+<tr class="memitem:af3bc3ab774cda0c1c765e97066893d30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3bc3ab774cda0c1c765e97066893d30"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MALLOC_F</b>   (1U << 6)</td></tr>
+<tr class="memitem:ac8a292845f0bdec6b0d8ef6eb693a00e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8a292845f0bdec6b0d8ef6eb693a00e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_PRESERVE_F_HAT</b>   (1U << 7)</td></tr>
+<tr class="memitem:acf7d73753b74dbf148167c3d46226f09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf7d73753b74dbf148167c3d46226f09"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_PRESERVE_X</b>   (1U << 8)</td></tr>
+<tr class="memitem:a45962e763c2c551c1ea764a68b686b5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45962e763c2c551c1ea764a68b686b5c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_PRESERVE_F</b>   (1U << 9)</td></tr>
+<tr class="memitem:aa808899fc4db422c7b23470e6baad904"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa808899fc4db422c7b23470e6baad904"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DESTROY_F_HAT</b>   (1U << 10)</td></tr>
+<tr class="memitem:a6f22df0b292db920d795b3e3569181f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f22df0b292db920d795b3e3569181f2"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DESTROY_X</b>   (1U << 11)</td></tr>
+<tr class="memitem:a2b32e2eabd33bf0886f6df45365d04c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b32e2eabd33bf0886f6df45365d04c0"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DESTROY_F</b>   (1U << 12)</td></tr>
+<tr class="memitem:a9ed987164acf6e362ab2878506fbca95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ed987164acf6e362ab2878506fbca95"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_NO_DIRECT_ALGORITHM</b>   (1U << 13)</td></tr>
+<tr class="memitem:aa228bbed7ddbbb4a15f1cd11ec27b415"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa228bbed7ddbbb4a15f1cd11ec27b415"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_NO_FAST_ALGORITHM</b>   (1U << 14)</td></tr>
+<tr class="memitem:a7797dfe75149e88ee680fc2579c31505"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7797dfe75149e88ee680fc2579c31505"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_ZERO_F_HAT</b>   (1U << 16)</td></tr>
+<tr class="memitem:a8be22087991e0a82cfa59a3f0f2a5e86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8be22087991e0a82cfa59a3f0f2a5e86"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_INDEX</b>(k, n, plan)   ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)</td></tr>
+<tr class="memitem:ad426bf64ff72d6e3c2450fbb56146a44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad426bf64ff72d6e3c2450fbb56146a44"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_F_HAT_SIZE</b>(N)   ((2*N+2)*(2*N+2))</td></tr>
+<tr class="memitem:a44d97472ab10ca3b256fd0c33cb3737e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44d97472ab10ca3b256fd0c33cb3737e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(fpt_, name)</td></tr>
+<tr class="memitem:a80067368d7e171b07bfa417af75775d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80067368d7e171b07bfa417af75775d3"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(fptf_, name)</td></tr>
+<tr class="memitem:aa27ec6913fe46da3571d2080c6d722d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa27ec6913fe46da3571d2080c6d722d5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(fptl_, name)</td></tr>
+<tr class="memitem:a8bfac1df57d74c1d7bed37487e241bcd"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>FPT_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a43cffc40fea4280ae0bcbe948109a3be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43cffc40fea4280ae0bcbe948109a3be"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_NO_STABILIZATION</b>   (1U << 0)</td></tr>
+<tr class="memitem:a33b9330253f419a91ef09a1b0d7a2667"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33b9330253f419a91ef09a1b0d7a2667"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_NO_FAST_ALGORITHM</b>   (1U << 2)</td></tr>
+<tr class="memitem:adbf3440a08ccd763556ff4caa36693d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf3440a08ccd763556ff4caa36693d9"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_NO_DIRECT_ALGORITHM</b>   (1U << 3)</td></tr>
+<tr class="memitem:a1ee771544214aba96ee012095feeead1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ee771544214aba96ee012095feeead1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_PERSISTENT_DATA</b>   (1U << 4)</td></tr>
+<tr class="memitem:ad5594ac14b8a368f0103761361af5691"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5594ac14b8a368f0103761361af5691"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_FUNCTION_VALUES</b>   (1U << 5)</td></tr>
+<tr class="memitem:aba75cd704c2ca4153c1733b4cb3c977f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba75cd704c2ca4153c1733b4cb3c977f"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_AL_SYMMETRY</b>   (1U << 6)</td></tr>
+<tr class="memitem:ab40821fed9fe63e42e2ee665f0dae7ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab40821fed9fe63e42e2ee665f0dae7ef"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(nfsoft_, name)</td></tr>
+<tr class="memitem:a4e387b12df84d52678c2734f5b94d217"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e387b12df84d52678c2734f5b94d217"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(nfsoftf_, name)</td></tr>
+<tr class="memitem:a492d027375c61b20ee5ad37d61ddb6a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a492d027375c61b20ee5ad37d61ddb6a9"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(nfsoftl_, name)</td></tr>
+<tr class="memitem:ab64e7dca068fc797700ea5a1f294430f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DEFINE_API</b>(X, Y, Z, R, C)</td></tr>
+<tr class="memitem:a8c53e32dd194bda4a828c15ad044d44a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c53e32dd194bda4a828c15ad044d44a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_NORMALIZED</b>   (1U << 0)</td></tr>
+<tr class="memitem:a14cae92f8ee539b4a41aebdf913ef2c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14cae92f8ee539b4a41aebdf913ef2c5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_USE_NDFT</b>   (1U << 1)</td></tr>
+<tr class="memitem:a619b249b5d4b4675d2ce9a17d7817590"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a619b249b5d4b4675d2ce9a17d7817590"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_USE_DPT</b>   (1U << 2)</td></tr>
+<tr class="memitem:abe0d04599c1b06144e9a66fc2ac7b09d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe0d04599c1b06144e9a66fc2ac7b09d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MALLOC_X</b>   (1U << 3)</td></tr>
+<tr class="memitem:a379d5bf88e399cf492d86090ce47d47d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a379d5bf88e399cf492d86090ce47d47d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_REPRESENT</b>   (1U << 4)</td></tr>
+<tr class="memitem:a846e8298ed59219f7072230bd61c7a2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a846e8298ed59219f7072230bd61c7a2a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MALLOC_F_HAT</b>   (1U << 5)</td></tr>
+<tr class="memitem:ac65bdc42b4c11296197dc991bbebbd12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac65bdc42b4c11296197dc991bbebbd12"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MALLOC_F</b>   (1U << 6)</td></tr>
+<tr class="memitem:a83119b0d4e62f7cd83e0f74c5ef08dec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83119b0d4e62f7cd83e0f74c5ef08dec"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_PRESERVE_F_HAT</b>   (1U << 7)</td></tr>
+<tr class="memitem:a2650cbfde4c8259e5059d6e9b91e0ec3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2650cbfde4c8259e5059d6e9b91e0ec3"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_PRESERVE_X</b>   (1U << 8)</td></tr>
+<tr class="memitem:a629a86dd29a3cf09872755cd82bf7062"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a629a86dd29a3cf09872755cd82bf7062"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_PRESERVE_F</b>   (1U << 9)</td></tr>
+<tr class="memitem:ad324d67114a4f52a9fc86d2639745acd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad324d67114a4f52a9fc86d2639745acd"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DESTROY_F_HAT</b>   (1U << 10)</td></tr>
+<tr class="memitem:ab7ca87a4bb214bcc25d544aa0b6dd503"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7ca87a4bb214bcc25d544aa0b6dd503"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DESTROY_X</b>   (1U << 11)</td></tr>
+<tr class="memitem:a93ab283dcb14d5b37b130e2556bb6e7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93ab283dcb14d5b37b130e2556bb6e7d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DESTROY_F</b>   (1U << 12)</td></tr>
+<tr class="memitem:ae6c22599d21b5d8a8f144a39b49d3677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c22599d21b5d8a8f144a39b49d3677"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_NO_STABILIZATION</b>   (1U << 13)</td></tr>
+<tr class="memitem:a43ce16ed2d1893df2b997e637ccde4d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43ce16ed2d1893df2b997e637ccde4d4"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_CHOOSE_DPT</b>   (1U << 14)</td></tr>
+<tr class="memitem:a07ad8a429e8451bd153563eedc3ef0bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ad8a429e8451bd153563eedc3ef0bf"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_SOFT</b>   (1U << 15)</td></tr>
+<tr class="memitem:adaa4a4436a6a9e8b491660bb5fc54f8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaa4a4436a6a9e8b491660bb5fc54f8e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_ZERO_F_HAT</b>   (1U << 16)</td></tr>
+<tr class="memitem:a796e2f298278bbed00bf0704b553be98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a796e2f298278bbed00bf0704b553be98"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_INDEX</b>(m, n, l, B)   (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))</td></tr>
+<tr class="memitem:a67274491cbbbca79a4170608dec640ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67274491cbbbca79a4170608dec640ce"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_INDEX_TWO</b>(m, n, l, B)   ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))</td></tr>
+<tr class="memitem:ad214901ec9451e6076e05d22eb734d49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad214901ec9451e6076e05d22eb734d49"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_F_HAT_SIZE</b>(B)   (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)</td></tr>
+<tr class="memitem:a2e779defec2c348c6d8a8c6f8421a242"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e779defec2c348c6d8a8c6f8421a242"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_MANGLE_DOUBLE</b>(name)   NFFT_CONCAT(solver_, name)</td></tr>
+<tr class="memitem:acca5f1d40d99c32b16eb8096b1339d50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acca5f1d40d99c32b16eb8096b1339d50"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_MANGLE_FLOAT</b>(name)   NFFT_CONCAT(solverf_, name)</td></tr>
+<tr class="memitem:acd9b2356a04e9b982826211c51c600c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd9b2356a04e9b982826211c51c600c6"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_MANGLE_LONG_DOUBLE</b>(name)   NFFT_CONCAT(solverl_, name)</td></tr>
+<tr class="memitem:a582e092f0b5e3b447e1a884e8495c99b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a582e092f0b5e3b447e1a884e8495c99b"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a84bae5d48296d5a0d1e548ed58b9e495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84bae5d48296d5a0d1e548ed58b9e495"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>LANDWEBER</b>   (1U<< 0)</td></tr>
+<tr class="memitem:a1f016d06d661c80eacb5182d80813cd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f016d06d661c80eacb5182d80813cd9"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>STEEPEST_DESCENT</b>   (1U<< 1)</td></tr>
+<tr class="memitem:a5716b96b5141dfb52b747a78b11defa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5716b96b5141dfb52b747a78b11defa7"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>CGNR</b>   (1U<< 2)</td></tr>
+<tr class="memitem:aae8290aa6a83fd56699a98cc0a55baf5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae8290aa6a83fd56699a98cc0a55baf5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>CGNE</b>   (1U<< 3)</td></tr>
+<tr class="memitem:a6be0dda24e7cbd9f3f1d1b299e815973"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6be0dda24e7cbd9f3f1d1b299e815973"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NORMS_FOR_LANDWEBER</b>   (1U<< 4)</td></tr>
+<tr class="memitem:aa59267dba2cd3247c5ee4eb493d31c2d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa59267dba2cd3247c5ee4eb493d31c2d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRECOMPUTE_WEIGHT</b>   (1U<< 5)</td></tr>
+<tr class="memitem:a9ccacd28b2d441a797a5c0d9e6c17fa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ccacd28b2d441a797a5c0d9e6c17fa7"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRECOMPUTE_DAMP</b>   (1U<< 6)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ae2db105c02d4b63d1962dc94d4e7a4c2"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> )(size_t n)</td></tr>
+<tr class="memitem:acdec9723f6ea0ea162d5f3fc6f1f1906"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> )(void *p)</td></tr>
+<tr class="memitem:a79fa7003e5077adf8ad168bff9c8c986"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79fa7003e5077adf8ad168bff9c8c986"></a>
+typedef void(* </td><td class="memItemRight" valign="bottom"><b>nfft_die_type_function</b> )(const char *errString)</td></tr>
+<tr class="memitem:a74cbbcba4b36c9272b3e1b309f574308"><td class="memItemLeft" align="right" valign="top">typedef struct fptf_set_s_ * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a></td></tr>
+<tr class="memdesc:a74cbbcba4b36c9272b3e1b309f574308"><td class="mdescLeft"> </td><td class="mdescRight">A set of precomputed data for a set of DPT transforms of equal maximum length.  <a href="#a74cbbcba4b36c9272b3e1b309f574308"></a><br/></td></tr>
+<tr class="memitem:a73d630ac21d6474ba0693f124d465e15"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structfpt__set__s__.html">fpt_set_s_</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a></td></tr>
+<tr class="memdesc:a73d630ac21d6474ba0693f124d465e15"><td class="mdescLeft"> </td><td class="mdescRight">A set of precomputed data for a set of DPT transforms of equal maximum length.  <a href="#a73d630ac21d6474ba0693f124d465e15"></a><br/></td></tr>
+<tr class="memitem:afa0a822edf2abbd8e1ab2cd0afd72efa"><td class="memItemLeft" align="right" valign="top">typedef struct fptl_set_s_ * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a></td></tr>
+<tr class="memdesc:afa0a822edf2abbd8e1ab2cd0afd72efa"><td class="mdescLeft"> </td><td class="mdescRight">A set of precomputed data for a set of DPT transforms of equal maximum length.  <a href="#afa0a822edf2abbd8e1ab2cd0afd72efa"></a><br/></td></tr>
+<tr class="memitem:ad09d4f327f3d1510be6bcf4375906176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad09d4f327f3d1510be6bcf4375906176"></a>
+typedef struct <a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan_</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftf_plan</b></td></tr>
+<tr class="memitem:aa862e783e0563487b2c8e0e83b9dc742"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa862e783e0563487b2c8e0e83b9dc742"></a>
+typedef struct <a class="el" href="structnfsoft__plan__.html">nfsoft_plan_</a> </td><td class="memItemRight" valign="bottom"><b>nfsoft_plan</b></td></tr>
+<tr class="memitem:a6d67c17c3744095b57a3c4491d0a3109"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d67c17c3744095b57a3c4491d0a3109"></a>
+typedef struct <a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan_</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftl_plan</b></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aafe6167438c5de4d3d4c509f66a6694e"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a> (size_t n)</td></tr>
+<tr class="memitem:ab8a0db03dda1317a8a3d922e0e4e8aaa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a> (void *p)</td></tr>
+<tr class="memitem:ace7c4a800755f1c9a8e7479c64665733"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace7c4a800755f1c9a8e7479c64665733"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_die</b> (char *s)</td></tr>
+<tr class="memitem:aa97b8219dc23517c274ee9951af5ae8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa97b8219dc23517c274ee9951af5ae8b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_direct</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a13b36ffc5ad4dea0501da86b4ea93f9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13b36ffc5ad4dea0501da86b4ea93f9c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_direct</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a6a99e8e25843bf6f3b503a5030ebcfcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a99e8e25843bf6f3b503a5030ebcfcb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a71e3ddb963596b177c9f3d94b8961cc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71e3ddb963596b177c9f3d94b8961cc8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_1d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a062bd142005b5fc523db95e41c665f24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a062bd142005b5fc523db95e41c665f24"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_2d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a501a0b91c433ed4857943dd777e7e16a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a501a0b91c433ed4857943dd777e7e16a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_3d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a7bfe9f714ceb6a9d3911de1eb140f5dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bfe9f714ceb6a9d3911de1eb140f5dd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:aaeec2252ee63c95ab2471fe59f341c01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeec2252ee63c95ab2471fe59f341c01"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_1d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a214d4e491256491ae71b2c66767b5db5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a214d4e491256491ae71b2c66767b5db5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_2d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:adc41672222d378897caaa87b0b70fa2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc41672222d378897caaa87b0b70fa2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_3d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a6ff5563bc1f9c37250cced03ed21d961"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff5563bc1f9c37250cced03ed21d961"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_1d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int N1, int M)</td></tr>
+<tr class="memitem:ab5cc14480a2380acaa8433dcde2e7b70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5cc14480a2380acaa8433dcde2e7b70"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_2d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int N1, int N2, int M)</td></tr>
+<tr class="memitem:a00c248803a48939d9d5c8c78365d1bac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00c248803a48939d9d5c8c78365d1bac"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_3d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int N1, int N2, int N3, int M)</td></tr>
+<tr class="memitem:a1ca11660915a2e57e4ca2134465bd179"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ca11660915a2e57e4ca2134465bd179"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int d, int *N, int M)</td></tr>
+<tr class="memitem:a3a7bbd8652f6be0d955a9685400dfa89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a7bbd8652f6be0d955a9685400dfa89"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_guru</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int d, int *N, int M, int *n, int m, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a85210f098260b748aa3da2d37bfd5ce6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85210f098260b748aa3da2d37bfd5ce6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_one_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a1aa91a41f8c652a5b82bc013f234adcd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1aa91a41f8c652a5b82bc013f234adcd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_full_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:afe253a9f00f666f7d99e6276f25fe70a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe253a9f00f666f7d99e6276f25fe70a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a4a931f44a44954ab94576e6d4554182f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a931f44a44954ab94576e6d4554182f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_lin_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a95688574035044784d8179168561f176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95688574035044784d8179168561f176"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>nfftf_check</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a991e56a61be1686499777e6cf97ac08e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a991e56a61be1686499777e6cf97ac08e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_finalize</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a76a2441388702c7cf232ffb3ec69d826"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76a2441388702c7cf232ffb3ec69d826"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_direct</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a6d259124ce68da237671a667db8367ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d259124ce68da237671a667db8367ff"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_direct</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a9f1e6bd9f7f956a8679e6b413c97b421"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f1e6bd9f7f956a8679e6b413c97b421"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421">nfft_trafo</a> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memdesc:a9f1e6bd9f7f956a8679e6b413c97b421"><td class="mdescLeft"> </td><td class="mdescRight">user routines <br/></td></tr>
+<tr class="memitem:ae6dff0553d273fc53a15ce4535df8087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6dff0553d273fc53a15ce4535df8087"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_1d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ac05ae265993ff8e1396ac6c801c47ffe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac05ae265993ff8e1396ac6c801c47ffe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_2d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a503e48334b8cdefb63f55941460354bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a503e48334b8cdefb63f55941460354bf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_3d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a4b44c1dd52026dcb494dc735f0fa5b08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b44c1dd52026dcb494dc735f0fa5b08"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a13f8052bab72ec8994354cdd6ccb6982"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13f8052bab72ec8994354cdd6ccb6982"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_1d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ada6d6c809694e08aac88fa0204192325"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada6d6c809694e08aac88fa0204192325"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_2d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a4469a1fc88e71eaff7b6912a15079195"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4469a1fc88e71eaff7b6912a15079195"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_3d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a01dbd2cfc9cc8577fc097e607e3c845f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01dbd2cfc9cc8577fc097e607e3c845f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_1d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int N1, int M)</td></tr>
+<tr class="memitem:a54ab08124f47fe412b2979abdc28cc16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54ab08124f47fe412b2979abdc28cc16"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_2d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int N1, int N2, int M)</td></tr>
+<tr class="memitem:a67493342a23bdbb4301063f96e13fd88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67493342a23bdbb4301063f96e13fd88"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_3d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int N1, int N2, int N3, int M)</td></tr>
+<tr class="memitem:a1dfeaf18f3735f035afa62ca768d99c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1dfeaf18f3735f035afa62ca768d99c4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int d, int *N, int M)</td></tr>
+<tr class="memitem:a406f05717c6299b918261c61aaa9de23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a406f05717c6299b918261c61aaa9de23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_guru</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int d, int *N, int M, int *n, int m, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:afd7b278b6ed04d929212b4807dd195f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd7b278b6ed04d929212b4807dd195f0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_precompute_one_psi</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aee7a88956c66b2113014084d6dd04b3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee7a88956c66b2113014084d6dd04b3a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_precompute_full_psi</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ae6a8367b03fd75b2af42dbbaccb78bf2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6a8367b03fd75b2af42dbbaccb78bf2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_precompute_psi</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a3f91a7a005cc31a8b05f33fea0507ddc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f91a7a005cc31a8b05f33fea0507ddc"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc">nfft_precompute_lin_psi</a> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memdesc:a3f91a7a005cc31a8b05f33fea0507ddc"><td class="mdescLeft"> </td><td class="mdescRight">create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assumes an EVEN window function <br/></td></tr>
+<tr class="memitem:a9fe3dd8c48b139fa813d89aea9305191"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe3dd8c48b139fa813d89aea9305191"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>nfft_check</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a614f9f7af5b0d5491afa9495393c4dc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a614f9f7af5b0d5491afa9495393c4dc3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_finalize</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aade98b08a1764d934fc1e3328ca4748c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aade98b08a1764d934fc1e3328ca4748c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_direct</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a749f21a124ee46334eb7ec688dfa907b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a749f21a124ee46334eb7ec688dfa907b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_direct</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a239d94aa7ede469acccd137b816632c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a239d94aa7ede469acccd137b816632c8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a7a7438f1eda9c46ab2378e94317c2b6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a7438f1eda9c46ab2378e94317c2b6c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_1d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a5a08729af6bfae8bdcdd23a948303678"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a08729af6bfae8bdcdd23a948303678"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_2d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:aeef91bc707567a4da86d5d7d8813b654"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeef91bc707567a4da86d5d7d8813b654"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_3d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:acc437673282c8cbbdc057d1f447df412"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc437673282c8cbbdc057d1f447df412"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:aaf80f8f97f566ce6bf814590fff412ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf80f8f97f566ce6bf814590fff412ab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_1d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a79cb762faa374f897c63784654178ba3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79cb762faa374f897c63784654178ba3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_2d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ac67b1fa2c19e23ae4cdf40ce6fc22c54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac67b1fa2c19e23ae4cdf40ce6fc22c54"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_3d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a44f2703f03552f3282f64ebcbbc4d10e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44f2703f03552f3282f64ebcbbc4d10e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_1d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int N1, int M)</td></tr>
+<tr class="memitem:a5a23efb04a7efe72618970c1c38833a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a23efb04a7efe72618970c1c38833a7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_2d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int N1, int N2, int M)</td></tr>
+<tr class="memitem:ad3f182c73964739a8d37aa53a6b3f08e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3f182c73964739a8d37aa53a6b3f08e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_3d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int N1, int N2, int N3, int M)</td></tr>
+<tr class="memitem:ac1bb75bcc340c22a5cf743bf1f9e5173"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1bb75bcc340c22a5cf743bf1f9e5173"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int d, int *N, int M)</td></tr>
+<tr class="memitem:af01ca4593fe6f4a76e981428529ef683"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af01ca4593fe6f4a76e981428529ef683"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_guru</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int d, int *N, int M, int *n, int m, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a5fac8d29d45f72e44cd89cab07d0d059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fac8d29d45f72e44cd89cab07d0d059"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_one_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a797c4d47a0932fef1724da790901ad31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a797c4d47a0932fef1724da790901ad31"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_full_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ad60f5459cde8f650a09ccab58daa702b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad60f5459cde8f650a09ccab58daa702b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ac3dd031c004b1e36add9996d7d27fe07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3dd031c004b1e36add9996d7d27fe07"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_lin_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a9a88020d6fdf2f0e71e59d2d46351acc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a88020d6fdf2f0e71e59d2d46351acc"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>nfftl_check</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a4c53403d49c55788fc7d7f16fbeb0294"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c53403d49c55788fc7d7f16fbeb0294"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_finalize</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ad1b85989c8f6296202c5ead97b2a4d3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1b85989c8f6296202c5ead97b2a4d3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_1d</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a54475a045421b8c7d4a2e284ac98b68e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54475a045421b8c7d4a2e284ac98b68e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_2d</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:adadcd59ed27befb417baf6f23d92903b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adadcd59ed27befb417baf6f23d92903b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_3d</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a948aec7c8b620bda3580d3d073be54b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a948aec7c8b620bda3580d3d073be54b6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:a2d8c4f072d7c12eac56d9314b1d795a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d8c4f072d7c12eac56d9314b1d795a6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_guru</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfct_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:acd09b8596fa9aa4c6809a4ce6ade4d2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd09b8596fa9aa4c6809a4ce6ade4d2a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_precompute_psi</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:af407452ab0b930263950cd9432c0a3de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af407452ab0b930263950cd9432c0a3de"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_trafo</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a4f03bebbb59e69446af3c94c80c48e99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f03bebbb59e69446af3c94c80c48e99"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_trafo_direct</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a8a7e3c8c2f47b2c215a9f43419c41218"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a7e3c8c2f47b2c215a9f43419c41218"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_adjoint</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:acc707e1afd6bc01e212112199f8f10d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc707e1afd6bc01e212112199f8f10d0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_adjoint_direct</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a7d1f18e46748f9cfe0d5f26ee8c58610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d1f18e46748f9cfe0d5f26ee8c58610"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_finalize</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ad1948b714bc3c82b53f99d4e54e818ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1948b714bc3c82b53f99d4e54e818ea"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfctf_phi_hut</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:a4a0a312fbe21abb26702af072b9fe8e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a0a312fbe21abb26702af072b9fe8e2"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfctf_phi</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, float x, int d)</td></tr>
+<tr class="memitem:acdaa71ef0c4ea05c55a09a08845b3043"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdaa71ef0c4ea05c55a09a08845b3043"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_1d</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a84c8a611ea11546b90a7db424ebced7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84c8a611ea11546b90a7db424ebced7c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_2d</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:a7894f72320bda7850ccf43b9a227fe09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7894f72320bda7850ccf43b9a227fe09"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_3d</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a69ac40972c84cfd04909723da056004b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac40972c84cfd04909723da056004b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:aa2f86c85130172f1151a85996ea1bfa3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2f86c85130172f1151a85996ea1bfa3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_guru</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfct_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a2792eada84d4d363e308825dc40c2e6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2792eada84d4d363e308825dc40c2e6d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_precompute_psi</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a73327e4f32328dcae3e9f86572a0e15a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73327e4f32328dcae3e9f86572a0e15a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_trafo</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:adbf865fd9ccfdadc5b7b86e58f092d16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf865fd9ccfdadc5b7b86e58f092d16"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_trafo_direct</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:abc14753b2aa4ae8af85fc9632720514e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc14753b2aa4ae8af85fc9632720514e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_adjoint</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a1e797dc0f4e07c62342f28e4dc3f7fe0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e797dc0f4e07c62342f28e4dc3f7fe0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_adjoint_direct</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a5613906eb739a977bd862fbdb25224f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5613906eb739a977bd862fbdb25224f6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_finalize</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a10982ac173900c44e0317a8fb01e53c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10982ac173900c44e0317a8fb01e53c1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfct_phi_hut</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:a825ccf26ddeddc330f320146d3d223de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a825ccf26ddeddc330f320146d3d223de"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfct_phi</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, double x, int d)</td></tr>
+<tr class="memitem:a2b2c7c01bf971f33edc3acb1139bf161"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b2c7c01bf971f33edc3acb1139bf161"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_1d</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:aed79e0497c45176f43d8fa911d6f069a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed79e0497c45176f43d8fa911d6f069a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_2d</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:ad637a73bde08d33d9c30381d16d4ba3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad637a73bde08d33d9c30381d16d4ba3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_3d</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a2b3eb969859db7cf581a54541445ffb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b3eb969859db7cf581a54541445ffb0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:aa20eb0ade7b3c4ff2ffe241f4452fd35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa20eb0ade7b3c4ff2ffe241f4452fd35"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_guru</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfct_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a3657c9e044b54cb7b2a3d5717b68e030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3657c9e044b54cb7b2a3d5717b68e030"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_precompute_psi</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ade7830710d428e89f9fa01ef364e6378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade7830710d428e89f9fa01ef364e6378"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_trafo</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a4f153794f61f2cfc711f67134db52226"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f153794f61f2cfc711f67134db52226"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_trafo_direct</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ae292cc7d0b3c315f0d5a26ec4fe711c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae292cc7d0b3c315f0d5a26ec4fe711c5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_adjoint</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aa5a922b6a88ead364e577c2341713036"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5a922b6a88ead364e577c2341713036"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_adjoint_direct</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:adf343b3aa0408dff9907dfaf5e44a916"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf343b3aa0408dff9907dfaf5e44a916"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_finalize</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aff1f9664971c98bb2acf9bc71fb2c221"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff1f9664971c98bb2acf9bc71fb2c221"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfctl_phi_hut</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:a0c74d0bbb03b7da2208f1c004b39d968"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c74d0bbb03b7da2208f1c004b39d968"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfctl_phi</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, long double x, int d)</td></tr>
+<tr class="memitem:a436cf366c1bf5124fec4a48affe5ed33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a436cf366c1bf5124fec4a48affe5ed33"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_1d</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a28f62d4f47f327bbcd814c5f8881269d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28f62d4f47f327bbcd814c5f8881269d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_2d</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:a4bad3dcbf566247ce521d2b836f19cd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bad3dcbf566247ce521d2b836f19cd9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_3d</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:aa535ec3a94b56443c9ac6a770e242cc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa535ec3a94b56443c9ac6a770e242cc9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:acc15a1f1877aa558add661788043b4eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc15a1f1877aa558add661788043b4eb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_m</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int d, int *N, int M_total, int m)</td></tr>
+<tr class="memitem:a975ee87801a379f4cff0d8951cae3146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a975ee87801a379f4cff0d8951cae3146"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_guru</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfst_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a30852f312cc13c7937d1762fd338227a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30852f312cc13c7937d1762fd338227a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_precompute_psi</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a479977674224d07ba369e2005ccae29e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a479977674224d07ba369e2005ccae29e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_trafo</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:afa7cbae602aa715a494d1d4c753c5b02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa7cbae602aa715a494d1d4c753c5b02"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_trafo_direct</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aa5c75d98de3086bb0c8d0b9f56f2daee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5c75d98de3086bb0c8d0b9f56f2daee"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_adjoint</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aa7a5510270b8ac3949b7e16d4eeb9d66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7a5510270b8ac3949b7e16d4eeb9d66"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_adjoint_direct</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a0759e77328bfaac4e7fe5022cf1cfd55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0759e77328bfaac4e7fe5022cf1cfd55"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_finalize</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a41f08418f5b56c55f68bf5bb2217fcc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f08418f5b56c55f68bf5bb2217fcc0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_full_psi</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, float eps)</td></tr>
+<tr class="memitem:a4465e8694d9574b47f40e7b6bbd5e542"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4465e8694d9574b47f40e7b6bbd5e542"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfstf_phi_hut</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:ad5ea11822143256d19d4b8acde7b7ffe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5ea11822143256d19d4b8acde7b7ffe"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfstf_phi</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, float x, int d)</td></tr>
+<tr class="memitem:a01dfe8ac1efd2655f17f0ce08136d4b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01dfe8ac1efd2655f17f0ce08136d4b1"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstf_fftw_2N</b> (int n)</td></tr>
+<tr class="memitem:a6ea4d9088aa79c66f5d7cd4df43b8e46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ea4d9088aa79c66f5d7cd4df43b8e46"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstf_fftw_2N_rev</b> (int n)</td></tr>
+<tr class="memitem:ac13a4c85f5cd43cfc3b5c3895021a9a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac13a4c85f5cd43cfc3b5c3895021a9a9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_1d</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a44eff771382180419936a6dbf51505fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44eff771382180419936a6dbf51505fa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_2d</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:af1dd972b1831e75d3cfba0a0a2671711"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1dd972b1831e75d3cfba0a0a2671711"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_3d</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:ae4043a9926de23326b21b8722648bafa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4043a9926de23326b21b8722648bafa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:a8a48a14e97780c89216d09bdb75f513a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a48a14e97780c89216d09bdb75f513a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_m</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int d, int *N, int M_total, int m)</td></tr>
+<tr class="memitem:a052efac9f85424d50ceb77279c4e8cc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a052efac9f85424d50ceb77279c4e8cc3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_guru</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfst_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a0580a0aa2d426835b618b564b5ef3387"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0580a0aa2d426835b618b564b5ef3387"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_precompute_psi</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac80b86521428ec2191919cc96c82f416"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">nfst_trafo</a> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:ac80b86521428ec2191919cc96c82f416"><td class="mdescLeft"> </td><td class="mdescRight">user routines  <a href="#ac80b86521428ec2191919cc96c82f416"></a><br/></td></tr>
+<tr class="memitem:ab32c2626ee801b86707fdacf3d432732"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab32c2626ee801b86707fdacf3d432732"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_trafo_direct</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a0ae3871b80dda28e7aabe541a48d34e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ae3871b80dda28e7aabe541a48d34e2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_adjoint</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac61e39a2328268b6cd214ecc9233561a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac61e39a2328268b6cd214ecc9233561a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_adjoint_direct</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ab5d03eeff969c872061d96998f9f0405"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d03eeff969c872061d96998f9f0405"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_finalize</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a02d072e80ccaca6482b396540eaef585"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02d072e80ccaca6482b396540eaef585"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">nfst_full_psi</a> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, double eps)</td></tr>
+<tr class="memdesc:a02d072e80ccaca6482b396540eaef585"><td class="mdescLeft"> </td><td class="mdescRight">more memory usage, a bit faster <br/></td></tr>
+<tr class="memitem:aa2862de70644887849e0bc1df618a018"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2862de70644887849e0bc1df618a018"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfst_phi_hut</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:aec803ab48734df96a9f21d66cbb71e23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec803ab48734df96a9f21d66cbb71e23"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfst_phi</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, double x, int d)</td></tr>
+<tr class="memitem:ae2f6c7dd71f57ba413df7f9e0d9c8c6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2f6c7dd71f57ba413df7f9e0d9c8c6d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfst_fftw_2N</b> (int n)</td></tr>
+<tr class="memitem:ad31424393fa4e91a19cd9a82776f2d74"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad31424393fa4e91a19cd9a82776f2d74"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfst_fftw_2N_rev</b> (int n)</td></tr>
+<tr class="memitem:a85ac488c78b0ba84aeb87b0fcf72b0f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85ac488c78b0ba84aeb87b0fcf72b0f0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_1d</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a1f222ef8f5d4882d61bc2b6754f2ffc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f222ef8f5d4882d61bc2b6754f2ffc7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_2d</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:aed4a64b8c12141a35943abbbdbe12d9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed4a64b8c12141a35943abbbdbe12d9d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_3d</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a3fbc166b35241c5d64631b082f013045"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fbc166b35241c5d64631b082f013045"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:a862b3337532e586616524e6768691495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a862b3337532e586616524e6768691495"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_m</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int d, int *N, int M_total, int m)</td></tr>
+<tr class="memitem:a0b87f3a5e41aee11cf0173b91a5b7a00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b87f3a5e41aee11cf0173b91a5b7a00"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_guru</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfst_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a7dd1d42a1c265c29c4d9fa8b30176ff8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dd1d42a1c265c29c4d9fa8b30176ff8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_precompute_psi</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a720da4873a2b621c04137f5c9a631e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a720da4873a2b621c04137f5c9a631e4a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_trafo</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aec700716b804a98ff486f14eb51cfdfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec700716b804a98ff486f14eb51cfdfe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_trafo_direct</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac00306a2df327d5b38e39ee4d555e81d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac00306a2df327d5b38e39ee4d555e81d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_adjoint</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a7c92e221c13aacd52d6365922b9e43ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c92e221c13aacd52d6365922b9e43ca"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_adjoint_direct</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a6f1de42997582d6acaed4749d27dc945"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f1de42997582d6acaed4749d27dc945"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_finalize</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a447769fb78cd7f9510471e02b5ac1a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a447769fb78cd7f9510471e02b5ac1a5e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_full_psi</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, long double eps)</td></tr>
+<tr class="memitem:a701a71b754f9e3d588bfc21306c156ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a701a71b754f9e3d588bfc21306c156ae"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfstl_phi_hut</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:ab6a612b1061bbd991b57d5a220462ab1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6a612b1061bbd991b57d5a220462ab1"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfstl_phi</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, long double x, int d)</td></tr>
+<tr class="memitem:a66118abf0bb2273087acbf081224123d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66118abf0bb2273087acbf081224123d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstl_fftw_2N</b> (int n)</td></tr>
+<tr class="memitem:afc9ad7537ca27d07f9ba33e7271da2d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc9ad7537ca27d07f9ba33e7271da2d6"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstl_fftw_2N_rev</b> (int n)</td></tr>
+<tr class="memitem:a0853e9518eca0ab78beb72447d9bcac7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0853e9518eca0ab78beb72447d9bcac7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_init</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan, int d, int N_total, int M_total, int *N)</td></tr>
+<tr class="memitem:a1db7790fab59cd8e7ae7ee4103fcf179"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1db7790fab59cd8e7ae7ee4103fcf179"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_init_guru</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)</td></tr>
+<tr class="memitem:a9ef01f6b9c0c562bf0ad784bf3c9dd02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ef01f6b9c0c562bf0ad784bf3c9dd02"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_trafo_direct</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a81208f117a1ff58be4b2f7bde83284a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81208f117a1ff58be4b2f7bde83284a3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_adjoint_direct</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac46acd46be18dc621cfa9db06e5a6904"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac46acd46be18dc621cfa9db06e5a6904"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_trafo</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ae6fbd48312d1f898bc815d9d24ab997b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6fbd48312d1f898bc815d9d24ab997b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_adjoint</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:af6d97c9d5c11383330c1eb4a8af7845e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6d97c9d5c11383330c1eb4a8af7845e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_lin_psi</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac088286367ae957d1d1b86702d730602"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac088286367ae957d1d1b86702d730602"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_psi</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a95da6a6d7c9c46c4452ceb89030be07f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95da6a6d7c9c46c4452ceb89030be07f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_full_psi</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a18026c7f9d32b1b726713359105e81e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18026c7f9d32b1b726713359105e81e4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_phi_hut</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac767d45622f34b7182b9ee3ed955023d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac767d45622f34b7182b9ee3ed955023d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_finalize</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a03fa16df51ea6c10e65baf058f109c52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03fa16df51ea6c10e65baf058f109c52"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_init</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan, int d, int N_total, int M_total, int *N)</td></tr>
+<tr class="memitem:a75a2cb786f4cc4c87082c87a2c32046a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a2cb786f4cc4c87082c87a2c32046a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_init_guru</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)</td></tr>
+<tr class="memitem:a7a1000e0d0302bb33c70b63464d4b065"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a1000e0d0302bb33c70b63464d4b065"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_trafo_direct</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ad35e9f7ca7bf1c7451a554c2592fddb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad35e9f7ca7bf1c7451a554c2592fddb4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_adjoint_direct</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a994c1748ebe1371c53dd2cb437054d4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a994c1748ebe1371c53dd2cb437054d4f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">nnfft_trafo</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a994c1748ebe1371c53dd2cb437054d4f"><td class="mdescLeft"> </td><td class="mdescRight">user routines <br/></td></tr>
+<tr class="memitem:ad4f536f3aee7e85acc75c5fcad307b7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f536f3aee7e85acc75c5fcad307b7d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_adjoint</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a65983eef73b9f5740214bf720f62fcd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65983eef73b9f5740214bf720f62fcd6"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">nnfft_precompute_lin_psi</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a65983eef73b9f5740214bf720f62fcd6"><td class="mdescLeft"> </td><td class="mdescRight">create a lookup table <br/></td></tr>
+<tr class="memitem:a962d6f449cbad4faf81e20328a911c46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a962d6f449cbad4faf81e20328a911c46"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_precompute_psi</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a78cf7bac65f6de46182ea1ff509c2af9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78cf7bac65f6de46182ea1ff509c2af9"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">nnfft_precompute_full_psi</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a78cf7bac65f6de46182ea1ff509c2af9"><td class="mdescLeft"> </td><td class="mdescRight">computes all entries of B explicitly <br/></td></tr>
+<tr class="memitem:a9e4663c2cdbff65da327400657528580"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e4663c2cdbff65da327400657528580"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">nnfft_precompute_phi_hut</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a9e4663c2cdbff65da327400657528580"><td class="mdescLeft"> </td><td class="mdescRight">initialisation of direct transform <br/></td></tr>
+<tr class="memitem:a9b5bcde6c436f8fe0e8d8dc4fa7a4230"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b5bcde6c436f8fe0e8d8dc4fa7a4230"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_finalize</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a010a880c1cdc5901fc568774e8117380"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a010a880c1cdc5901fc568774e8117380"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_init</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan, int d, int N_total, int M_total, int *N)</td></tr>
+<tr class="memitem:af291f15fa5efec136c99f7a74f6f333b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af291f15fa5efec136c99f7a74f6f333b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_init_guru</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)</td></tr>
+<tr class="memitem:a31789d574c1ce35f6c2726b55b9c3e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31789d574c1ce35f6c2726b55b9c3e4a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_trafo_direct</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a69f0e2320028ddb45ab12a3be7ca6f3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69f0e2320028ddb45ab12a3be7ca6f3e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_adjoint_direct</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a81228a2d7d5d54aba3cffe5fbd1866d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81228a2d7d5d54aba3cffe5fbd1866d3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_trafo</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a7b3e34dfc295bd18d9a8fe5a43dc0736"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b3e34dfc295bd18d9a8fe5a43dc0736"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_adjoint</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:afd5503eff636fcfd4b731b4d6bfc2119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd5503eff636fcfd4b731b4d6bfc2119"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_lin_psi</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a011e2cf68784c0015eecfd23443067f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a011e2cf68784c0015eecfd23443067f5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_psi</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ae7b90ce759730f0b0ac3e4e35379f7e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7b90ce759730f0b0ac3e4e35379f7e6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_full_psi</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a5ffb3e0c715973be44b71f55c425668a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ffb3e0c715973be44b71f55c425668a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_phi_hut</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a05483e8f729f280b755ebe038425969c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05483e8f729f280b755ebe038425969c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_finalize</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aae08f8a7b735787dbd5eb8ded76ce619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae08f8a7b735787dbd5eb8ded76ce619"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_trafo_direct</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a150a780df08f4548980af604e3bf2f03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a150a780df08f4548980af604e3bf2f03"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_adjoint_direct</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a813b32fc4e3df02faf046b8145b7ec04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a813b32fc4e3df02faf046b8145b7ec04"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_trafo</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:ae2a73ce3575102670d5fd4075fd60299"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2a73ce3575102670d5fd4075fd60299"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_adjoint</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a8b730993c5a578afa78f2c69413e477a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b730993c5a578afa78f2c69413e477a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_cp</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths, <a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths_nfft)</td></tr>
+<tr class="memitem:a3363adf9baa0f8b37468db82b6d03286"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3363adf9baa0f8b37468db82b6d03286"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_init_random_nodes_coeffs</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a466e274abdf984c5b5621fd9dc43f6af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a466e274abdf984c5b5621fd9dc43f6af"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_init</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths, int d, int J, int M, int m, unsigned flags)</td></tr>
+<tr class="memitem:a82bbeb139266dc60fb5fcd2089b3f9fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82bbeb139266dc60fb5fcd2089b3f9fe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_finalize</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a5d7a89ea903b670bc790a08ea37f073c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d7a89ea903b670bc790a08ea37f073c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_trafo_direct</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a816b55033620b857ff80b6315400c448"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a816b55033620b857ff80b6315400c448"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_adjoint_direct</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aee06e4a864e22e2c41f71606a8e2644e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee06e4a864e22e2c41f71606a8e2644e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_trafo</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ab3de4bceeffaea05a29daf75cad04d38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3de4bceeffaea05a29daf75cad04d38"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_adjoint</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aa90a04e2110e52bedb70382704f3f004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa90a04e2110e52bedb70382704f3f004"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_cp</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths, <a class="el" href="structnfft__plan.html">nfft_plan</a> *ths_nfft)</td></tr>
+<tr class="memitem:a7cbc20c44eeecadc5c30f4159616f30a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cbc20c44eeecadc5c30f4159616f30a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_init_random_nodes_coeffs</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a1b7f87f960cb22420a933e915c539aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b7f87f960cb22420a933e915c539aaf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_init</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths, int d, int J, int M, int m, unsigned flags)</td></tr>
+<tr class="memitem:aef170ad12eff8fde1c78bc6071142b36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef170ad12eff8fde1c78bc6071142b36"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_finalize</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a8f34911d7f056c5206ce9efe81477774"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f34911d7f056c5206ce9efe81477774"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_trafo_direct</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:af08a9578e5926022bfd2032f14f78b15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af08a9578e5926022bfd2032f14f78b15"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_adjoint_direct</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ad13e87c32603d30c0fcfabf017feac6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad13e87c32603d30c0fcfabf017feac6f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_trafo</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a1ac447e3fb8ccb5a7b50a5af8709f33e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ac447e3fb8ccb5a7b50a5af8709f33e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_adjoint</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a78f38bd6d8f554ef1c8e318234ca0f3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78f38bd6d8f554ef1c8e318234ca0f3e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_cp</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths, <a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths_nfft)</td></tr>
+<tr class="memitem:af6d3d908336159a4be2f16966c70ebc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6d3d908336159a4be2f16966c70ebc0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_init_random_nodes_coeffs</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a64c1bf471a36994117e7e660d7ba99d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64c1bf471a36994117e7e660d7ba99d2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_init</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths, int d, int J, int M, int m, unsigned flags)</td></tr>
+<tr class="memitem:ab243ff1dc03d549b6ee72a986a905386"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab243ff1dc03d549b6ee72a986a905386"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_finalize</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a5651ec188110aa7615f2342f0e50ea52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5651ec188110aa7615f2342f0e50ea52"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_trafo</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a92cb0fe77b9cf4c4c61af21a207262b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92cb0fe77b9cf4c4c61af21a207262b6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_adjoint</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:abc16967817cccb9f22c42d65541907b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc16967817cccb9f22c42d65541907b3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_init_guru</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths, int *N, int M, int *n, int m, float sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a2ae8486acde371aec1c5f6e7d9b39703"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ae8486acde371aec1c5f6e7d9b39703"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_finalize</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:acf24e20c973caf86bfeb1929b67034fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf24e20c973caf86bfeb1929b67034fa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_trafo</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:addb2caf1322371cee040f80d9c6d86b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addb2caf1322371cee040f80d9c6d86b5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_adjoint</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:ac133e266d5c1887ddc374a52cd86ba51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac133e266d5c1887ddc374a52cd86ba51"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_init_guru</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths, int *N, int M, int *n, int m, float sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a823d3b63a31d3e320a42c94f7d4c760e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a823d3b63a31d3e320a42c94f7d4c760e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_finalize</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:a0dad1c9466615a5791b5037ab2f85373"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0dad1c9466615a5791b5037ab2f85373"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_trafo</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:ae431fe3e0ef4dc056f58d827f804d0a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae431fe3e0ef4dc056f58d827f804d0a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_adjoint</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a8010f0f3bd86f3bd6516751b876e6b14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8010f0f3bd86f3bd6516751b876e6b14"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_init_guru</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths, int *N, int M, int *n, int m, double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:aaa9aa7ca6642fde2d6926a6430149fa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa9aa7ca6642fde2d6926a6430149fa1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_finalize</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:ad95016880bd9ad2af3e59185c5312d99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad95016880bd9ad2af3e59185c5312d99"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_trafo</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:ac385874f7e751acd9120537ac58069b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac385874f7e751acd9120537ac58069b8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_adjoint</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:adaab02ce08e45dab866fd5f841700afb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaab02ce08e45dab866fd5f841700afb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_init_guru</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths, int *N, int M, int *n, int m, double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:adcf8b78420d90797f43abb15be1d9cf5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcf8b78420d90797f43abb15be1d9cf5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_finalize</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:a3979a630f875c2548e7e7860fa2a4234"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3979a630f875c2548e7e7860fa2a4234"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_trafo</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:aed8d14ef64bb1702965856d648bb0e81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed8d14ef64bb1702965856d648bb0e81"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_adjoint</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a51539d9bdb03bc862c172f4553310006"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51539d9bdb03bc862c172f4553310006"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_init_guru</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths, int *N, int M, int *n, int m, long double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:af00281fab7999742510498d0235027c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af00281fab7999742510498d0235027c9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_finalize</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a9a935b5e070c44bb7ef68cfd166ed818"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a935b5e070c44bb7ef68cfd166ed818"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_trafo</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:ae40e4f02cdb2fadeac9f4663d2e72a9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae40e4f02cdb2fadeac9f4663d2e72a9e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_adjoint</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:af29e97397fd45aebea1cc6a17f344aae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af29e97397fd45aebea1cc6a17f344aae"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_init_guru</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths, int *N, int M, int *n, int m, long double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a5e3f5c6460102eaf60170aa832cd6b20"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e3f5c6460102eaf60170aa832cd6b20"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_finalize</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:a3aff93c37d515728069bf5be55130f61"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aff93c37d515728069bf5be55130f61"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_init</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:a43209c6040e32b10470f814734fddbd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43209c6040e32b10470f814734fddbd9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_init_advanced</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan, int N, int M, unsigned int nfsft_flags)</td></tr>
+<tr class="memitem:a708f132f101d3e5281d5e55db2b0fbc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a708f132f101d3e5281d5e55db2b0fbc0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_init_guru</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan, int N, int M, unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:a9adc8da9ffdeb957aa2df5807d12172e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9adc8da9ffdeb957aa2df5807d12172e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_precompute</b> (int N, float kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:a5401f9eb13507d7f9bf9f95300380268"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5401f9eb13507d7f9bf9f95300380268"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_forget</b> (void)</td></tr>
+<tr class="memitem:a18ee188d7021103bdd1589b802a7e407"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18ee188d7021103bdd1589b802a7e407"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_trafo_direct</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:a52a2acd6b761ce7a884a136524a18584"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52a2acd6b761ce7a884a136524a18584"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_adjoint_direct</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:ab50b55785a02c4ffd0b3b1399cb9ccf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab50b55785a02c4ffd0b3b1399cb9ccf1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_trafo</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:acfa6e095a34d2045182ea22cde56ed24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfa6e095a34d2045182ea22cde56ed24"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_adjoint</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:a70ff7515207398223d232d0687dee80c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70ff7515207398223d232d0687dee80c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_finalize</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:adce47b633284c7b29e644a4e16230ed3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adce47b633284c7b29e644a4e16230ed3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_precompute_x</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:ga65cda3f4a3edc5eb39c697cf34b1f0b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65cda3f4a3edc5eb39c697cf34b1f0b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:ga2812aa5beba0eb7efd3072bf323a0155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2812aa5beba0eb7efd3072bf323a0155"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_advanced</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int nfsft_flags)</td></tr>
+<tr class="memitem:gafff6158abcefa9a75bcfa41af5a79089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafff6158abcefa9a75bcfa41af5a79089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_guru</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:gabe87aeea1f7cfef9ae8febb16d702f3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe87aeea1f7cfef9ae8febb16d702f3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute</b> (int N, double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:ga3b69bca6c76a63877534f5a9781bf285"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b69bca6c76a63877534f5a9781bf285"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_forget</b> (void)</td></tr>
+<tr class="memitem:ga7628057164579a29cc77487cda6772e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7628057164579a29cc77487cda6772e5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7cfaacc3393dea5c895859fa035e3e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cfaacc3393dea5c895859fa035e3e06"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga5796fc68c432d46dfcab7abd8c56ee22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5796fc68c432d46dfcab7abd8c56ee22"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga813bb48d404c7286310733c99a81a169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga813bb48d404c7286310733c99a81a169"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:gaa63e193a27d84059742ff25ff81e2ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa63e193a27d84059742ff25ff81e2ed1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_finalize</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7a7fa6722d6ba3aade4c69299af86e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a7fa6722d6ba3aade4c69299af86e4e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute_x</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:a7ba9fe6d07ea6928286876aaad517edf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba9fe6d07ea6928286876aaad517edf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_init</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:a7cf6938e64d62373ecfb94bfe9dce8ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cf6938e64d62373ecfb94bfe9dce8ef"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_init_advanced</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan, int N, int M, unsigned int nfsft_flags)</td></tr>
+<tr class="memitem:a2b186aa674c4c3a923bcb3b15109f7cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b186aa674c4c3a923bcb3b15109f7cf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_init_guru</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan, int N, int M, unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:a9759900e56cb74834b01e57e34218a4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9759900e56cb74834b01e57e34218a4f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_precompute</b> (int N, long double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:a3d09a53a36a1ca79748ee6f0852cd77c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d09a53a36a1ca79748ee6f0852cd77c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_forget</b> (void)</td></tr>
+<tr class="memitem:abe5f98e7b22b8aebe56f79bd84d2c43a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe5f98e7b22b8aebe56f79bd84d2c43a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_trafo_direct</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a2540dc3f9b3cf3d117e7282bb91cbe2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2540dc3f9b3cf3d117e7282bb91cbe2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_adjoint_direct</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:aa6c645664adc5fc32e0ad4ad2c39ad8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6c645664adc5fc32e0ad4ad2c39ad8c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_trafo</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a3d1b4b881054aee1d006f2de008a28ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d1b4b881054aee1d006f2de008a28ca"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_adjoint</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:ab5d37f72aa8caef32a3b664df1aff334"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d37f72aa8caef32a3b664df1aff334"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_finalize</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a7b20b3319d95c11edb6703976c97d5aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b20b3319d95c11edb6703976c97d5aa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_precompute_x</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a99ed7214bd4ac2629f025c418de4cce6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99ed7214bd4ac2629f025c418de4cce6"></a>
+<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> </td><td class="memItemRight" valign="bottom"><b>fptf_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:af6fd137ff8a9d4e4bfadbdd286fed22c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6fd137ff8a9d4e4bfadbdd286fed22c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_precompute</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, float *alpha, float *beta, float *gam, int k_start, const float threshold)</td></tr>
+<tr class="memitem:a006e0ccb6b9cb6f93cf65943104cb526"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a006e0ccb6b9cb6f93cf65943104cb526"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_trafo_direct</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, const fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:ab9088c2cface913de972e5fda67b7318"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9088c2cface913de972e5fda67b7318"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_trafo</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, const fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a0047f35347e74bf2d37e1329697532f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0047f35347e74bf2d37e1329697532f2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_transposed_direct</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a739fb9ad942ef7112f99801cb88b2a8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739fb9ad942ef7112f99801cb88b2a8b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_transposed</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a5b986d2fd4647b0d42df6f593ba3245e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b986d2fd4647b0d42df6f593ba3245e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_finalize</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set)</td></tr>
+<tr class="memitem:ad103ad18c75ee5dd048392dfd1ca7305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad103ad18c75ee5dd048392dfd1ca7305"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><b>fpt_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:ad3c3b30fda57364c92958cc7390b6378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3c3b30fda57364c92958cc7390b6378"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_precompute</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double *alpha, double *beta, double *gam, int k_start, const double threshold)</td></tr>
+<tr class="memitem:a9cf316f764ebe8fc8c323ee8e25575c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cf316f764ebe8fc8c323ee8e25575c4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a16d416e80a919ac119d5cea13fce79d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16d416e80a919ac119d5cea13fce79d0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:ac0236446f79ad475c1cdc2b44c6dcc09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0236446f79ad475c1cdc2b44c6dcc09"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:abacb4c41365ca6f32b72688376aa86e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abacb4c41365ca6f32b72688376aa86e1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a7f2a1b915af8d0e7f2eb2f37ddb6772c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f2a1b915af8d0e7f2eb2f37ddb6772c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_finalize</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a29a588fe645ac374090459950d9a6670"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29a588fe645ac374090459950d9a6670"></a>
+<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> </td><td class="memItemRight" valign="bottom"><b>fptl_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:a5bec17cbb38bc370251f2c0c837fdeb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bec17cbb38bc370251f2c0c837fdeb0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_precompute</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, long double *alpha, long double *beta, long double *gam, int k_start, const long double threshold)</td></tr>
+<tr class="memitem:a192094ff3bd8fa9c2dfee9bb760c5218"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a192094ff3bd8fa9c2dfee9bb760c5218"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_trafo_direct</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, const fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a783431b575e6823de7cb2ba9536917d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a783431b575e6823de7cb2ba9536917d4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_trafo</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, const fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a02a45978d9d953a365c400c6a3a7d872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02a45978d9d953a365c400c6a3a7d872"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_transposed_direct</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a55a8bcd4d06045f1bd40265e181d0d31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55a8bcd4d06045f1bd40265e181d0d31"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_transposed</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:ac9f254034246b927eaa45f8398da096a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9f254034246b927eaa45f8398da096a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_finalize</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set)</td></tr>
+<tr class="memitem:a126dc23ff74589bf7717f0d5eb92934d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a126dc23ff74589bf7717f0d5eb92934d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_precompute</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan)</td></tr>
+<tr class="memitem:aab919ac542ffa0c99c311ff8a0787e5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab919ac542ffa0c99c311ff8a0787e5c"></a>
+<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftf_SO3_single_fpt_init</b> (int l, int k, int m, unsigned int flags, int kappa)</td></tr>
+<tr class="memitem:ab85f7c141114c260127f0e8a507c295d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab85f7c141114c260127f0e8a507c295d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_SO3_fpt</b> (fftwf_complex *coeffs, <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a0cfd79f6121c052cfa2e8e07d76dd92c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cfd79f6121c052cfa2e8e07d76dd92c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_SO3_fpt_transposed</b> (fftwf_complex *coeffs, <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:aff3382f0ef7121a0877d678b1cfeb3a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff3382f0ef7121a0877d678b1cfeb3a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_init</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:aee344825ad78ff13375f194b3533f3f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee344825ad78ff13375f194b3533f3f4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_init_advanced</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan, int N, int M, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:ae3bb027d4ec83a8a0b92ea96bc5cabad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3bb027d4ec83a8a0b92ea96bc5cabad"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_init_guru</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan, int N, int M, unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff, int fpt_kappa)</td></tr>
+<tr class="memitem:ad44ae4f31e450bd5757b6498d668d02f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad44ae4f31e450bd5757b6498d668d02f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_trafo</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:ab6701999f8f6cc4c115a6b780eea9d77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6701999f8f6cc4c115a6b780eea9d77"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_adjoint</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:ac19e7732a4ffd5f9a31a121c040370a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac19e7732a4ffd5f9a31a121c040370a5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_finalize</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan)</td></tr>
+<tr class="memitem:a40f362a2e5589c83315cec24d42af7f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40f362a2e5589c83315cec24d42af7f9"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsoftf_posN</b> (int n, int m, int B)</td></tr>
+<tr class="memitem:a123df5d17a0d43fe5e061ac0fb8c1d23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a123df5d17a0d43fe5e061ac0fb8c1d23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_precompute</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan)</td></tr>
+<tr class="memitem:ad8bf7646fcf34c3cda08123798ca5c95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8bf7646fcf34c3cda08123798ca5c95"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><b>nfsoft_SO3_single_fpt_init</b> (int l, int k, int m, unsigned int flags, int kappa)</td></tr>
+<tr class="memitem:a112f47515a696db8b9c5fd15b6b9232b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a112f47515a696db8b9c5fd15b6b9232b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_SO3_fpt</b> (fftw_complex *coeffs, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a3f64d6d2a6b3e9f52a2090aa51867c03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f64d6d2a6b3e9f52a2090aa51867c03"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_SO3_fpt_transposed</b> (fftw_complex *coeffs, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a31c884458165fa204073c6c16c10775e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31c884458165fa204073c6c16c10775e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_init</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:af4aec4ee2a2a5d56ca27c4f1a7f90b18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4aec4ee2a2a5d56ca27c4f1a7f90b18"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_init_advanced</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, int N, int M, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a1c13cdd3f82f48fa41acdd313cdc2052"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c13cdd3f82f48fa41acdd313cdc2052"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_init_guru</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, int N, int M, unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff, int fpt_kappa)</td></tr>
+<tr class="memitem:ae243cd75d7571a99eae53818e32355fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae243cd75d7571a99eae53818e32355fb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_trafo</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:a08395b1dd90f9a2565685d17460afc5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a08395b1dd90f9a2565685d17460afc5b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_adjoint</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:a30b5c6ae1ff496680f11ddcaad2d5a47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30b5c6ae1ff496680f11ddcaad2d5a47"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_finalize</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan)</td></tr>
+<tr class="memitem:a7a81dd322c0de63c61c238e32bd8969d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a81dd322c0de63c61c238e32bd8969d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsoft_posN</b> (int n, int m, int B)</td></tr>
+<tr class="memitem:a85ade4ba1f835c82bcb2acbd9adc24b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85ade4ba1f835c82bcb2acbd9adc24b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_precompute</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan)</td></tr>
+<tr class="memitem:ab3a39f78ce9698d55f368e3df7fb0198"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3a39f78ce9698d55f368e3df7fb0198"></a>
+<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftl_SO3_single_fpt_init</b> (int l, int k, int m, unsigned int flags, int kappa)</td></tr>
+<tr class="memitem:a3d51082ff48d917c2c8aa485a01810d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d51082ff48d917c2c8aa485a01810d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_SO3_fpt</b> (fftwl_complex *coeffs, <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:acdaa6dd5d2fe9cba39e41c9553ed8cae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdaa6dd5d2fe9cba39e41c9553ed8cae"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_SO3_fpt_transposed</b> (fftwl_complex *coeffs, <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a1ad37a52b2fa051bb5fe92d37cf0bf84"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ad37a52b2fa051bb5fe92d37cf0bf84"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_init</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:a7547538a90a8d41999e2546c667e7102"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7547538a90a8d41999e2546c667e7102"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_init_advanced</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan, int N, int M, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:af3ce458721f4e5b420b61613525137e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3ce458721f4e5b420b61613525137e0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_init_guru</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan, int N, int M, unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff, int fpt_kappa)</td></tr>
+<tr class="memitem:ad2c5c958d3c13b0cd9527025af0f6e29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2c5c958d3c13b0cd9527025af0f6e29"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_trafo</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:af440be0c56d2d1953cf5316582b84ede"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af440be0c56d2d1953cf5316582b84ede"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_adjoint</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:af0805495fc6c08955599186bf721cf13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0805495fc6c08955599186bf721cf13"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_finalize</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a51ad8bfaa076e695c082a7cfa60f3f12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51ad8bfaa076e695c082a7cfa60f3f12"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsoftl_posN</b> (int n, int m, int B)</td></tr>
+<tr class="memitem:ae23d5ef292fbe751bc0d5ed6cfcae2b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae23d5ef292fbe751bc0d5ed6cfcae2b5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_init_advanced_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths, <a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a76250063357080589a41db463e113dab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76250063357080589a41db463e113dab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_init_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths, <a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:a49fae3a25f94a5e8b04c41205e942ea5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49fae3a25f94a5e8b04c41205e942ea5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_before_loop_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:aac2301a124b586c1fba6363edc152872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac2301a124b586c1fba6363edc152872"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_loop_one_step_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:ae481120286ed0c292151ce62c6b3d2f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae481120286ed0c292151ce62c6b3d2f1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_finalize_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a7aab180f1d34c63103c98cb1335b621e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aab180f1d34c63103c98cb1335b621e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_init_advanced_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths, <a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:ab9cfdca5f92d0c296e067ab2e47a7128"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9cfdca5f92d0c296e067ab2e47a7128"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_init_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths, <a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:ad52d3e6444d5bd54cc3f599b1473c8cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad52d3e6444d5bd54cc3f599b1473c8cf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_before_loop_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths)</td></tr>
+<tr class="memitem:ac9bacf478095bc5055af479bc16d9475"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9bacf478095bc5055af479bc16d9475"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_loop_one_step_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a1ee053c9bb4ddec8e117081c7442ba9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ee053c9bb4ddec8e117081c7442ba9b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_finalize_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths)</td></tr>
+<tr class="memitem:ad8962fc79683a67a84b10593d8e0103c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8962fc79683a67a84b10593d8e0103c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_advanced_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a6662c51f86e40ded7773d1954ec77ca2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6662c51f86e40ded7773d1954ec77ca2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:a54498806e5ab4046a2ef8fc426e5b141"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54498806e5ab4046a2ef8fc426e5b141"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_before_loop_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a3b80b04ee3429b04c310992fb0a12420"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b80b04ee3429b04c310992fb0a12420"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420">solver_loop_one_step_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a3b80b04ee3429b04c310992fb0a12420"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step <br/></td></tr>
+<tr class="memitem:a2f44c78734390e47d72578f4c9cbe709"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f44c78734390e47d72578f4c9cbe709"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709">solver_finalize_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a2f44c78734390e47d72578f4c9cbe709"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:a1a4544ab96d14c812e3b330c439c3d80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a4544ab96d14c812e3b330c439c3d80"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80">solver_init_advanced_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memdesc:a1a4544ab96d14c812e3b330c439c3d80"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:a5f0f420b9eea82330931a0cc9b0b6b54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f0f420b9eea82330931a0cc9b0b6b54"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_init_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:ae57f41c91d348569e0108042b4d6e518"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae57f41c91d348569e0108042b4d6e518"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_before_loop_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a4249ae5081906e8af8c04885e9da470f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4249ae5081906e8af8c04885e9da470f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_loop_one_step_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:aa85b6edbe1a34d5cfaf4c65e62549ff5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa85b6edbe1a34d5cfaf4c65e62549ff5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_finalize_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a3d083e820487819be320c29e6f453a2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d083e820487819be320c29e6f453a2c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_init_advanced_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths, <a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a739e47736aee0e65ad64f7e3c2c78575"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739e47736aee0e65ad64f7e3c2c78575"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_init_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths, <a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:aac9042f700453c4730f3a015d502e5dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac9042f700453c4730f3a015d502e5dd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_before_loop_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a09a9110704ce69fda1fb556c0bcd223d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09a9110704ce69fda1fb556c0bcd223d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_loop_one_step_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:af3e16a8e0b7c37c162797e469d5da57d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3e16a8e0b7c37c162797e469d5da57d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_finalize_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a76d058dd91d4cd6399c3b1c68687f900"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76d058dd91d4cd6399c3b1c68687f900"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_init_advanced_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths, <a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:aac3933f52d2db95054c9141dc15c1973"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac3933f52d2db95054c9141dc15c1973"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_init_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths, <a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:aae2ec8317e9deada5bc1794296736f50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae2ec8317e9deada5bc1794296736f50"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_before_loop_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a0d7767264a59d24000e4e900addb010e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d7767264a59d24000e4e900addb010e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_loop_one_step_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a9f29c9c96f62842c11d49ab0c0f392df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f29c9c96f62842c11d49ab0c0f392df"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_finalize_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:aa578dec914d95bda5a2fad3fbd90c76f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft_malloc_hook</a></td></tr>
+<tr class="memitem:a5b4d02593a82ded7c1d3c3c868e72347"><td class="memItemLeft" align="right" valign="top"><a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft_free_hook</a></td></tr>
+<tr class="memitem:a7bd67de0993700f3ff4ed9d6475bc105"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bd67de0993700f3ff4ed9d6475bc105"></a>
+nfft_die_type_function </td><td class="memItemRight" valign="bottom"><b>nfft_die_hook</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for NFFT3 </p>
+
+<p>Definition in file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="a0d1eb31c2f64e41fa0399b1eb7b5ddd4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MACRO_MV_PLAN</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">RC</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keywordtype">int</span> N_total; \</div>
+<div class="line">  int M_total; \</div>
+<div class="line">  RC *f_hat; \</div>
+<div class="line">  RC *f; \</div>
+<div class="line">  void (*mv_trafo)(<span class="keywordtype">void</span>*); \</div>
+<div class="line">  void (*mv_adjoint)(<span class="keywordtype">void</span>*);</div>
+</div><!-- fragment -->
+<p>Pointer to the own adjoint. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00069">69</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a84826a12df920d845086a31bd4256c7b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NSFFT_DEFINE_API</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">X, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">Y, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">Z, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">R, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">C </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span>\</div>
+<div class="line">{\</div>
+<div class="line">  MACRO_MV_PLAN(C)\</div>
+<div class="line">\</div>
+<div class="line">  int d; \</div>
+<div class="line">  int J; \</div>
+<div class="line">  int sigma; \</div>
+<div class="line">  unsigned flags; \</div>
+<div class="line">  int *index_sparse_to_full; \</div>
+<div class="line">  int r_act_nfft_plan; \</div>
+<div class="line">  Z(plan) *act_nfft_plan; \</div>
+<div class="line">  Z(plan) *center_nfft_plan; \</div>
+<div class="line">  Y(plan) *set_fftw_plan1; \</div>
+<div class="line">  Y(plan) *set_fftw_plan2; \</div>
+<div class="line">  Z(plan) *set_nfft_plan_1d; \</div>
+<div class="line">  Z(plan) *set_nfft_plan_2d; \</div>
+<div class="line">  R *x_transposed; \</div>
+<div class="line">  R *x_102,*x_201,*x_120,*x_021; \</div>
+<div class="line">} X(plan);\</div>
+<div class="line">\</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo_direct)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(adjoint_direct)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(adjoint)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(cp)(X(plan) *ths, Z(plan) *ths_nfft); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init_random_nodes_coeffs)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init)(X(plan) *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(finalize)(X(plan) *ths);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00419">419</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a50af9dcbe46f6cc4fee5141873098415"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MRI_DEFINE_API</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">X, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">Z, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">R, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">C </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span>\</div>
+<div class="line">{\</div>
+<div class="line">  MACRO_MV_PLAN(C)\</div>
+<div class="line">  Z(plan) plan;\</div>
+<div class="line">  <span class="keywordtype">int</span> N3;\</div>
+<div class="line">  R sigma3;\</div>
+<div class="line">  R *t;\</div>
+<div class="line">  R *w;\</div>
+<div class="line">} X(inh_2d1d_plan);\</div>
+<div class="line">\</div>
+<div class="line">typedef struct\</div>
+<div class="line">{\</div>
+<div class="line">  MACRO_MV_PLAN(C)\</div>
+<div class="line">  Z(plan) plan;\</div>
+<div class="line">  <span class="keywordtype">int</span> N3;\</div>
+<div class="line">  R sigma3;\</div>
+<div class="line">  R *t;\</div>
+<div class="line">  R *w;\</div>
+<div class="line">} X(inh_3d_plan);\</div>
+<div class="line">\</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_trafo)(X(inh_2d1d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_init_guru)(X(inh_2d1d_plan) *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n, \</div>
+<div class="line">  <span class="keywordtype">int</span> m, R sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_finalize)(X(inh_2d1d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_trafo)(X(inh_3d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_adjoint)(X(inh_3d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_init_guru)(X(inh_3d_plan) *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n, \</div>
+<div class="line">  <span class="keywordtype">int</span> m, R sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_finalize)(X(inh_3d_plan) *ths);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00470">470</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8bfac1df57d74c1d7bed37487e241bcd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FPT_DEFINE_API</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">X, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">Y, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">R, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">C </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>X(set_s_) *X(<span class="keyword">set</span>); \</div>
+<div class="line">\</div>
+<div class="line">NFFT_EXTERN X(<span class="keyword">set</span>) X(init)(const <span class="keywordtype">int</span> M, const <span class="keywordtype">int</span> t, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(precompute)(X(set) set, const <span class="keywordtype">int</span> m, R *alpha, R *beta, \</div>
+<div class="line">  R *gam, <span class="keywordtype">int</span> k_start, const R threshold); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo_direct)(X(set) set, const <span class="keywordtype">int</span> m, const C *x, C *y, \</div>
+<div class="line">  const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo)(X(set) set, const <span class="keywordtype">int</span> m, const C *x, C *y, \</div>
+<div class="line">  const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(transposed_direct)(X(set) set, const <span class="keywordtype">int</span> m, C *x, \</div>
+<div class="line">  C *y, const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(transposed)(X(set) set, const <span class="keywordtype">int</span> m, C *x, \</div>
+<div class="line">  C *y, const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(finalize)(X(set) set);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00589">589</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab64e7dca068fc797700ea5a1f294430f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NFSOFT_DEFINE_API</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">X, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">Y, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">Z, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">R, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">C </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>X(plan_)\</div>
+<div class="line">{\</div>
+<div class="line">  MACRO_MV_PLAN(C) \</div>
+<div class="line">  R *x; \</div>
+<div class="line">  C *wig_coeffs; \</div>
+<div class="line">  C *cheby; \</div>
+<div class="line">  C *aux; \</div>
+<div class="line">  <span class="comment">/* internal use only */</span>\</div>
+<div class="line">  int t; \</div>
+<div class="line">  unsigned <span class="keywordtype">int</span> flags; \</div>
+<div class="line">  Y(plan) p_nfft; \</div>
+<div class="line">  Z(set) internal_fpt_set; \</div>
+<div class="line">  <span class="keywordtype">int</span> fpt_kappa; \</div>
+<div class="line">} X(plan);\</div>
+<div class="line">\</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(precompute)(X(plan) *plan); \</div>
+<div class="line">NFFT_EXTERN Z(set) X(SO3_single_fpt_init)(<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kappa); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(SO3_fpt)(C *coeffs, Z(set) set, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(SO3_fpt_transposed)(C *coeffs, Z(set) set,<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init)(X(plan) *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init_advanced)(X(plan) *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init_guru)(X(plan) *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfft_flags,<span class="keywordtype">int</span> nfft_cutoff,<span class="keywordtype">int</span> fpt_kappa); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo)(X(plan) *plan_nfsoft); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(adjoint)(X(plan) *plan_nfsoft); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(finalize)(X(plan) *plan); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">int</span> X(posN)(<span class="keywordtype">int</span> n,<span class="keywordtype">int</span> m, <span class="keywordtype">int</span> B);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00633">633</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ae2db105c02d4b63d1962dc94d4e7a4c2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void *(* nfft_malloc_type_function)(size_t n)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A <code>malloc</code> type function </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00061">61</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acdec9723f6ea0ea162d5f3fc6f1f1906"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void(* nfft_free_type_function)(void *p)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>A <code>free</code> type function </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00062">62</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a74cbbcba4b36c9272b3e1b309f574308"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct fptf_set_s_* <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A set of precomputed data for a set of DPT transforms of equal maximum length. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00607">607</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a73d630ac21d6474ba0693f124d465e15"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structfpt__set__s__.html">fpt_set_s_</a>* <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A set of precomputed data for a set of DPT transforms of equal maximum length. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00607">607</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa0a822edf2abbd8e1ab2cd0afd72efa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct fptl_set_s_* <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A set of precomputed data for a set of DPT transforms of equal maximum length. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00607">607</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aafe6167438c5de4d3d4c509f66a6694e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void * nfft_malloc </td>
+          <td>(</td>
+          <td class="paramtype">size_t </td>
+          <td class="paramname"><em>n</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Our <code>malloc</code> function </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">n</td><td>The number of bytes to allocate </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="linogram__fft__test_8c_source.html#l00309">comparison_fft()</a>, <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a [...]
+
+</div>
+</div>
+<a class="anchor" id="ab8a0db03dda1317a8a3d922e0e4e8aaa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void nfft_free </td>
+          <td>(</td>
+          <td class="paramtype">void * </td>
+          <td class="paramname"><em>p</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Our <code>free</code> function </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Pointer to the memory region to free </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="linogram__fft__test_8c_source.html#l00309">comparison_fft()</a>, <a class="el" href="fastsum_8c_source.html#l00742">fastsum_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>, <a class="el [...]
+
+</div>
+</div>
+<a class="anchor" id="ac80b86521428ec2191919cc96c82f416"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void nfst_trafo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structnfst__plan.html">nfst_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>user routines </p>
+
+<p>Definition at line <a class="el" href="nfst_8c_source.html#l00647">647</a> of file <a class="el" href="nfst_8c_source.html">nfst.c</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="aa578dec914d95bda5a2fad3fbd90c76f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> nfft_malloc_hook</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Hook for <code>nfft_malloc</code> </p>
+
+</div>
+</div>
+<a class="anchor" id="a5b4d02593a82ded7c1d3c3c868e72347"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> nfft_free_hook</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Hook for <code>nfft_free</code> </p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft3_8h_source.html b/doc/api/html/nfft3_8h_source.html
new file mode 100644
index 0000000..26f4516
--- /dev/null
+++ b/doc/api/html/nfft3_8h_source.html
@@ -0,0 +1,853 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft3.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft3.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="nfft3_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfft3.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#ifndef __NFFT3_H__</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#define __NFFT3_H__</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">/* module configuration */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "nfft3conf.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/* fftw_complex */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#define NFFT_CONCAT(prefix, name) prefix ## name</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* IMPORTANT: for Windows compilers, you should add a line</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> *   #define FFTW_DLL</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * here and in kernel/infft.h if you are compiling/using NFFT as a DLL, in order</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * to do the proper importing/exporting, or alternatively compile with</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * -DNFFT_DLL or the equivalent command-line flag. This is not necessary under</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * MinGW/Cygwin, where libtool does the imports/exports automatically. */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#if defined(NFFT_DLL) && (defined(_WIN32) || defined(__WIN32__))</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span>  <span class="comment">/* annoying Windows syntax for shared-library declarations */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#  if defined(COMPILING_NFFT) </span><span class="comment">/* defined in api.h when compiling NFFT */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#    define NFFT_EXTERN extern __declspec(dllexport)</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#  else </span><span class="comment">/* user is calling NFFT; import symbol */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#    define NFFT_EXTERN extern __declspec(dllimport)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#  endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#  define NFFT_EXTERN extern</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/* our own memory allocation and exit functions */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> NFFT_EXTERN <span class="keywordtype">void</span> *<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keywordtype">size_t</span> n);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> NFFT_EXTERN <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(<span class="keywordtype">void</span> *p);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> NFFT_EXTERN <span class="keywordtype">void</span> nfft_die(<span class="keywordtype">char</span> *s);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/* You can replace the hooks with your own, functions if necessary. We need this</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> * for the Matlab interfaces etc. */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="code" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">   61</a></span> <span class="keyword">typedef</span> <span class="keywordtype">void</span> *(*nfft_malloc_type_function) (<span class="keywordtype">size_t</span> n);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">   62</a></span> <span class="keyword">typedef</span> void  (*<a class="code" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a>) (<span class="keywordtype">void</span> *p);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">typedef</span> void  (*nfft_die_type_function) (<span class="keyword">const</span> <span class="keywordtype">char</span> *errString);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> NFFT_EXTERN <a class="code" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> <a class="code" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft_malloc_hook</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> NFFT_EXTERN <a class="code" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> <a class="code" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft_free_hook</a>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> NFFT_EXTERN nfft_die_type_function nfft_die_hook;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/* members inherited by all plans */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">   69</a></span> <span class="preprocessor">#define MACRO_MV_PLAN(RC) \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">  int N_total; \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">  int M_total; \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">  RC *f_hat; \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">  RC *f; \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">  void (*mv_trafo)(void*); \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">  void (*mv_adjoint)(void*); </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="comment">/* nfft */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor">#define NFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfft_, name)</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfftf_, name)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfftl_, name)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfft API functions.</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> *   X: nfft name-mangling macro</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"> *   Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor">#define NFFT_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">typedef struct \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">  MACRO_MV_PLAN(C) \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">} X(mv_plan_complex); \</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">typedef struct \</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor">  MACRO_MV_PLAN(R) \</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor">} X(mv_plan_double); \</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor">  MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">  int d; \</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor">  int *N; \</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">  R *sigma; \</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">  int *n; \</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">  int n_total; \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">  int m; \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">  R *b; \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">  int K; \</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">  unsigned nfft_flags; \</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor">  unsigned fftw_flags; \</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor">  R *x; \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor">  double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor">  </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor">  Y(plan)  my_fftw_plan1; \</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">  Y(plan)  my_fftw_plan2; \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">  R **c_phi_inv; \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">  R *psi; \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">  int *psi_index_g; \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">  int *psi_index_f; \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">  C *g; \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">  C *g_hat; \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">  C *g1; \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">  C *g2; \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor">  R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">  int *index_x; \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">} X(plan); \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_1d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_2d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_3d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_1d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_2d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_3d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">NFFT_EXTERN void X(init_1d)(X(plan) *ths, int N1, int M);\</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">NFFT_EXTERN void X(init_2d)(X(plan) *ths, int N1, int N2, int M);\</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">NFFT_EXTERN void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M);\</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths, int d, int *N, int M);\</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths, int d, int *N, int M, int *n, \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor">  int m, unsigned nfft_flags, unsigned fftw_flags);\</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"><a class="code" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">  173</a></span> <span class="preprocessor">NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">NFFT_EXTERN const char* X(check)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths);</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/* nfft api */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> NFFT_DEFINE_API(NFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> NFFT_DEFINE_API(NFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> NFFT_DEFINE_API(NFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">/* flags for init */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor">#define PRE_PHI_HUT      (1U<< 0)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor"></span><span class="preprocessor">#define FG_PSI           (1U<< 1)</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_LIN_PSI      (1U<< 2)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_FG_PSI       (1U<< 3)</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_PSI          (1U<< 4)</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_FULL_PSI     (1U<< 5)</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor"></span><span class="preprocessor">#define MALLOC_X         (1U<< 6)</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor"></span><span class="preprocessor">#define MALLOC_F_HAT     (1U<< 7)</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor"></span><span class="preprocessor">#define MALLOC_F         (1U<< 8)</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor"></span><span class="preprocessor">#define FFT_OUT_OF_PLACE (1U<< 9)</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor"></span><span class="preprocessor">#define FFTW_INIT        (1U<< 10)</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_SORT_NODES  (1U<< 11)</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_OMP_BLOCKWISE_ADJOINT (1U<<12)</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_ONE_PSI (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">/* nfct */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor">#define NFCT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfct_, name)</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor"></span><span class="preprocessor">#define NFCT_MANGLE_FLOAT(name) NFFT_CONCAT(nfctf_, name)</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor"></span><span class="preprocessor">#define NFCT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfctl_, name)</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfct API functions.</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment"> *   X: nfct name-mangling macro</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment"> *   Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">#define NFCT_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor">  </span><span class="comment">/* api */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor">  MACRO_MV_PLAN(R)\</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">  int d; \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor">  int *N; \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">  int *n; \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor">  R *sigma; \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="preprocessor">  int m; \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor">  R nfct_full_psi_eps;\</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor">  R *b; \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">  unsigned nfct_flags; \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor">  unsigned fftw_flags; \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor">  R *x; \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">  double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor">  </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="preprocessor">  Y(plan)  my_fftw_r2r_plan; \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="preprocessor">  Y(r2r_kind) *r2r_kind; \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="preprocessor">  R **c_phi_inv; \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor">  R *psi; \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor">  int size_psi; \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">  int *psi_index_g; \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor">  int *psi_index_f; \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="preprocessor">  R *g;\</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor">  R *g_hat;\</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor">  R *g1; \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor">  R *g2; \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor">  R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor">  int m, unsigned nfct_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"><a class="code" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">  261</a></span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="preprocessor">NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="preprocessor">NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d);</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="preprocessor">#if defined(HAVE_NFCT)</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor"></span><span class="comment">/* nfct api */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> NFCT_DEFINE_API(NFCT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> NFCT_DEFINE_API(NFCT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> NFCT_DEFINE_API(NFCT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/* nfst */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="preprocessor">#define NFST_MANGLE_DOUBLE(name) NFFT_CONCAT(nfst_, name)</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="preprocessor"></span><span class="preprocessor">#define NFST_MANGLE_FLOAT(name) NFFT_CONCAT(nfstf_, name)</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="preprocessor"></span><span class="preprocessor">#define NFST_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfstl_, name)</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfct API functions.</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment"> *   X: nfst name-mangling macro</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment"> *   Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="preprocessor">#define NFST_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="preprocessor">  </span><span class="comment">/* api */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="preprocessor">  MACRO_MV_PLAN(R)\</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor">  int d; \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor">  int *N; \</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor">  int *n; \</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="preprocessor">  R *sigma; \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="preprocessor">  int m; \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="preprocessor">  R nfst_full_psi_eps;\</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="preprocessor">  R *b; \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="preprocessor">  unsigned nfst_flags; \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="preprocessor">  unsigned fftw_flags; \</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="preprocessor">  R *x; \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="preprocessor">  double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="preprocessor">  </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="preprocessor">  Y(plan)  my_fftw_r2r_plan; \</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor">  Y(r2r_kind) *r2r_kind; \</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="preprocessor">  R **c_phi_inv; \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="preprocessor">  R *psi; \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="preprocessor">  int size_psi; \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="preprocessor">  int *psi_index_g; \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="preprocessor">  int *psi_index_f; \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor">  R *g;\</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor">  R *g_hat;\</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor">  R *g1; \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor">  R *g2; \</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="preprocessor">  R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="preprocessor">NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="preprocessor">NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="preprocessor">NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="preprocessor">NFFT_EXTERN void X(init_m)(X(plan) *ths_plan, int d, int *N, int M_total, int m);\</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="preprocessor">  int m, unsigned nfst_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"><a class="code" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">  338</a></span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="preprocessor">NFFT_EXTERN void X(full_psi)(X(plan) *ths_plan, R eps); \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="preprocessor">NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="preprocessor">NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d); \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="preprocessor">NFFT_EXTERN int X(fftw_2N)(int n); \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="preprocessor">NFFT_EXTERN int X(fftw_2N_rev)(int n);</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="preprocessor">#ifdef HAVE_NFST</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="preprocessor"></span><span class="comment">/* nfst api */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> NFST_DEFINE_API(NFST_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> NFST_DEFINE_API(NFST_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> NFST_DEFINE_API(NFST_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">/* nnfft */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="preprocessor">#define NNFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nnfft_, name)</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="preprocessor"></span><span class="preprocessor">#define NNFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nnfftf_, name)</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="preprocessor"></span><span class="preprocessor">#define NNFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nnfftl_, name)</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfst API functions.</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment"> *   X: nnfft name-mangling macro</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment"> *   Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment"> *   Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor">#define NNFFT_DEFINE_API(X,Y,Z,R,C) \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor">  </span><span class="comment">/* api */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor">  MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="preprocessor">  int d; \</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="preprocessor">  R *sigma; \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor">  R *a; \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor">  int *N; \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="preprocessor">  int *N1; \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor">  int *aN1; \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="preprocessor">  int m; \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="preprocessor">  R *b; \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="preprocessor">  int K; \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="preprocessor">  int aN1_total; \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="preprocessor">  Z(plan) *direct_plan; \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor">  unsigned nnfft_flags; \</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="preprocessor">  int *n; \</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="preprocessor">  R *x; \</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="preprocessor">  R *v; \</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="preprocessor">  R *c_phi_inv; \</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="preprocessor">  R *psi; \</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="preprocessor">  int size_psi; \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="preprocessor">  int *psi_index_g; \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="preprocessor">  int *psi_index_f; \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="preprocessor">  C *F;\</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor">  R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"><a class="code" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">  400</a></span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int N_total, int M_total, int *N); \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int N_total, int M_total, \</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor">  int *N, int *N1, int m, unsigned nnfft_flags); \</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_phi_hut)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths_plan);</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="preprocessor">#ifdef HAVE_NNFFT</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="preprocessor"></span><span class="comment">/* nnfft api */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> NNFFT_DEFINE_API(NNFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> NNFFT_DEFINE_API(NNFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> NNFFT_DEFINE_API(NNFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="comment">/* additional init flags */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="preprocessor">#define MALLOC_V         (1U<< 11)</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="comment">/* nsfft */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="preprocessor">#define NSFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nsfft_, name)</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="preprocessor"></span><span class="preprocessor">#define NSFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nsfftf_, name)</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="preprocessor"></span><span class="preprocessor">#define NSFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nsfftl_, name)</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="comment">/* huge second-order macro that defines prototypes for all nnfft API functions.</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment"> *   X: nnfft name-mangling macro</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="comment"> *   Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment"> *   Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="preprocessor">#define NSFFT_DEFINE_API(X,Y,Z,R,C) \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor">  MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor">  int d; \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="preprocessor">  int J; \</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="preprocessor">  int sigma; \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor">  unsigned flags; \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor">  int *index_sparse_to_full; \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"><a class="code" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">  451</a></span> <span class="preprocessor">  int r_act_nfft_plan; \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="preprocessor">  Z(plan) *act_nfft_plan; \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="preprocessor">  Z(plan) *center_nfft_plan; \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="preprocessor">  Y(plan) *set_fftw_plan1; \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="preprocessor">  Y(plan) *set_fftw_plan2; \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">  Z(plan) *set_nfft_plan_1d; \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor">  Z(plan) *set_nfft_plan_2d; \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor">  R *x_transposed; \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="preprocessor">  R *x_102,*x_201,*x_120,*x_021; \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="preprocessor">NFFT_EXTERN void X(cp)(X(plan) *ths, Z(plan) *ths_nfft); \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="preprocessor">NFFT_EXTERN void X(init_random_nodes_coeffs)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths, int d, int J, int M, int m, unsigned flags); \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths);</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor">#ifdef HAVE_NSFFT</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor"></span><span class="comment">/* nsfft api */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> NSFFT_DEFINE_API(NSFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> NSFFT_DEFINE_API(NSFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> NSFFT_DEFINE_API(NSFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">/* additional init flags */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor">#define NSDFT            (1U<< 12)</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="comment">/* mri */</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor">#define MRI_MANGLE_DOUBLE(name) NFFT_CONCAT(mri_, name)</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor"></span><span class="preprocessor">#define MRI_MANGLE_FLOAT(name) NFFT_CONCAT(mrif_, name)</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor"></span><span class="preprocessor">#define MRI_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(mril_, name)</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment">/* huge second-order macro that defines prototypes for all mri API functions.</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="comment"> *   X: mri name-mangling macro</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment"> *   Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor">#define MRI_DEFINE_API(X,Z,R,C) \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor">  MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="preprocessor">  Z(plan) plan;\</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="preprocessor">  int N3;\</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor">  R sigma3;\</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="preprocessor">  R *t;\</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="preprocessor">  R *w;\</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"><a class="code" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">  504</a></span> <span class="preprocessor">} X(inh_2d1d_plan);\</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="preprocessor">  MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="preprocessor">  Z(plan) plan;\</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="preprocessor">  int N3;\</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="preprocessor">  R sigma3;\</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="preprocessor">  R *t;\</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="preprocessor">  R *w;\</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="preprocessor">} X(inh_3d_plan);\</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="preprocessor">void X(inh_2d1d_trafo)(X(inh_2d1d_plan) *ths); \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor">void X(inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths); \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor">void X(inh_2d1d_init_guru)(X(inh_2d1d_plan) *ths, int *N, int M, int *n, \</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="preprocessor">  int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="preprocessor">void X(inh_2d1d_finalize)(X(inh_2d1d_plan) *ths); \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="preprocessor">void X(inh_3d_trafo)(X(inh_3d_plan) *ths); \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor">void X(inh_3d_adjoint)(X(inh_3d_plan) *ths); \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="preprocessor">void X(inh_3d_init_guru)(X(inh_3d_plan) *ths, int *N, int M, int *n, \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="preprocessor">  int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="preprocessor">void X(inh_3d_finalize)(X(inh_3d_plan) *ths);</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="preprocessor">#ifdef HAVE_MRI</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="preprocessor"></span>  <span class="comment">/* mri api */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> MRI_DEFINE_API(MRI_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> MRI_DEFINE_API(MRI_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> MRI_DEFINE_API(MRI_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="comment">/* nfsft */</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="preprocessor">#define NFSFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsft_, name)</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsftf_, name)</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsftl_, name)</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfsft API functions.</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="comment"> *   X: nfsft name-mangling macro</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="comment"> *   Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor">#define NFSFT_DEFINE_API(X,Z,R,C) \</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"><a class="code" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">  551</a></span> <span class="preprocessor">  MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="preprocessor">  int N; \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="preprocessor">  R *x; \</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="preprocessor">  </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor">  int t; \</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="preprocessor">  unsigned int flags; \</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="preprocessor">  Z(plan) plan_nfft; \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="preprocessor">  C *f_hat_intern; \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="preprocessor">  double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced)(X(plan)* plan, int N, int M, unsigned int \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="preprocessor">  nfsft_flags); \</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M, \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="preprocessor">  unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff); \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="preprocessor">NFFT_EXTERN void X(precompute)(int N, R kappa, unsigned int nfsft_flags, \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="preprocessor">  unsigned int fpt_flags); \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="preprocessor">NFFT_EXTERN void X(forget)(void); \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *plan); \</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_x)(X(plan) *plan);</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">#ifdef HAVE_NFSFT</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor"></span><span class="comment">/* nfsft api */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> NFSFT_DEFINE_API(NFSFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> NFSFT_DEFINE_API(NFSFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> NFSFT_DEFINE_API(NFSFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="preprocessor">#define NFSFT_NORMALIZED     (1U << 0)</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_USE_NDFT       (1U << 1)</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_USE_DPT        (1U << 2)</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MALLOC_X       (1U << 3)</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MALLOC_F_HAT   (1U << 5)</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MALLOC_F       (1U << 6)</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_PRESERVE_F_HAT (1U << 7)</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_PRESERVE_X     (1U << 8)</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_PRESERVE_F     (1U << 9)</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_DESTROY_F_HAT  (1U << 10)</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_DESTROY_X      (1U << 11)</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_DESTROY_F      (1U << 12)</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="comment">/* precompute flags */</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="preprocessor">#define NFSFT_NO_DIRECT_ALGORITHM (1U << 13)</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_NO_FAST_ALGORITHM   (1U << 14)</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_ZERO_F_HAT          (1U << 16)</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"><a class="code" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">  607</a></span> <span class="comment">/* helper macros */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="preprocessor">#define NFSFT_INDEX(k,n,plan) ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_F_HAT_SIZE(N) ((2*N+2)*(2*N+2))</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">/* fpt */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="preprocessor">#define FPT_MANGLE_DOUBLE(name) NFFT_CONCAT(fpt_, name)</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_MANGLE_FLOAT(name) NFFT_CONCAT(fptf_, name)</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(fptl_, name)</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="comment">/* huge second-order macro that defines prototypes for all fpt API functions.</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="comment"> *   X: fpt name-mangling macro</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> <span class="preprocessor">#define FPT_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="preprocessor">typedef struct X(set_s_) *X(set); \</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> <span class="preprocessor">NFFT_EXTERN X(set) X(init)(const int M, const int t, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="preprocessor">NFFT_EXTERN void X(precompute)(X(set) set, const int m, R *alpha, R *beta, \</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> <span class="preprocessor">  R *gam, int k_start, const R threshold); \</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(set) set, const int m, const C *x, C *y, \</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="preprocessor">  const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(set) set, const int m, const C *x, C *y, \</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> <span class="preprocessor">  const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> <span class="preprocessor">NFFT_EXTERN void X(transposed_direct)(X(set) set, const int m, C *x, \</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> <span class="preprocessor">  C *y, const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="preprocessor">NFFT_EXTERN void X(transposed)(X(set) set, const int m, C *x, \</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="preprocessor">  C *y, const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(set) set);</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> <span class="preprocessor">#ifdef HAVE_FPT</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> <span class="preprocessor"></span><span class="comment">/* fpt api */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> FPT_DEFINE_API(FPT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> FPT_DEFINE_API(FPT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> FPT_DEFINE_API(FPT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> <span class="preprocessor">#define FPT_NO_STABILIZATION    (1U << 0)</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_NO_FAST_ALGORITHM   (1U << 2)</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_NO_DIRECT_ALGORITHM (1U << 3)</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_PERSISTENT_DATA     (1U << 4)</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> <span class="comment">/* transform flags */</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> <span class="preprocessor">#define FPT_FUNCTION_VALUES     (1U << 5)</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_AL_SYMMETRY         (1U << 6)</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> <span class="comment">/* nfsoft*/</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> <span class="preprocessor">#define NFSOFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsoft_, name)</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsoftf_, name)</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"><a class="code" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">  663</a></span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsoftl_, name)</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfsoft API functions.</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="comment"> *   X: nfsoft name-mangling macro</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="comment"> *   Y: nfft name-mangling macro</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="comment"> *   Z: fpt name-mangling macro</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> <span class="preprocessor">#define NFSOFT_DEFINE_API(X,Y,Z,R,C) \</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="preprocessor">typedef struct X(plan_)\</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> <span class="preprocessor">  MACRO_MV_PLAN(C) \</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="preprocessor">  R *x; \</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="preprocessor">  C *wig_coeffs; \</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="preprocessor">  C *cheby; \</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="preprocessor">  C *aux; \</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="preprocessor">  </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="preprocessor">  int t; \</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> <span class="preprocessor">  unsigned int flags; \</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="preprocessor">  Y(plan) p_nfft; \</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="preprocessor">  Z(set) internal_fpt_set; \</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="preprocessor">  int fpt_kappa; \</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="preprocessor">NFFT_EXTERN void X(precompute)(X(plan) *plan); \</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="preprocessor">NFFT_EXTERN Z(set) X(SO3_single_fpt_init)(int l, int k, int m, unsigned int flags, int kappa); \</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="preprocessor">NFFT_EXTERN void X(SO3_fpt)(C *coeffs, Z(set) set, int l, int k, int m, unsigned int nfsoft_flags); \</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="preprocessor">NFFT_EXTERN void X(SO3_fpt_transposed)(C *coeffs, Z(set) set,int l, int k, int m,unsigned int nfsoft_flags); \</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags); \</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags,unsigned int nfft_flags,int nfft_cutoff,int fpt_kappa); \</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *plan_nfsoft); \</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *plan_nfsoft); \</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *plan); \</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> <span class="preprocessor">NFFT_EXTERN int X(posN)(int n,int m, int B);</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> <span class="preprocessor">#ifdef HAVE_NFSOFT</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> <span class="preprocessor"></span><span class="comment">/* nfsoft api */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> NFSOFT_DEFINE_API(NFSOFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,FPT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> NFSOFT_DEFINE_API(NFSOFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,FPT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> NFSOFT_DEFINE_API(NFSOFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,FPT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> <span class="preprocessor">#define NFSOFT_NORMALIZED     (1U << 0)</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_USE_NDFT       (1U << 1)</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_USE_DPT        (1U << 2)</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MALLOC_X       (1U << 3)</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_REPRESENT      (1U << 4)</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MALLOC_F_HAT   (1U << 5)</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MALLOC_F       (1U << 6)</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_PRESERVE_F_HAT (1U << 7)</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_PRESERVE_X     (1U << 8)</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_PRESERVE_F     (1U << 9)</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_DESTROY_F_HAT  (1U << 10)</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_DESTROY_X      (1U << 11)</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_DESTROY_F      (1U << 12)</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="comment">/* precompute flags */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="preprocessor">#define NFSOFT_NO_STABILIZATION (1U << 13)</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_CHOOSE_DPT       (1U << 14)</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_SOFT             (1U << 15)</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_ZERO_F_HAT       (1U << 16)</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> <span class="comment">/* helper macros */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> <span class="preprocessor">#define NFSOFT_INDEX(m,n,l,B) (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_INDEX_TWO(m,n,l,B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_F_HAT_SIZE(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="comment">/*solver */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="preprocessor">#define SOLVER_MANGLE_DOUBLE(name) NFFT_CONCAT(solver_, name)</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="preprocessor"></span><span class="preprocessor">#define SOLVER_MANGLE_FLOAT(name) NFFT_CONCAT(solverf_, name)</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> <span class="preprocessor"></span><span class="preprocessor">#define SOLVER_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(solverl_, name)</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfsoft API functions.</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> <span class="comment"> *   X: nfsoft name-mangling macro</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> <span class="comment"> *   Y: nfft name-mangling macro</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> <span class="comment"> *   R: real data type</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> <span class="comment"> *   C: complex data type</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> <span class="preprocessor">#define SOLVER_DEFINE_API(X,Y,R,C)\</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> <span class="preprocessor">  Y(mv_plan_complex) *mv; \</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="preprocessor">  unsigned flags; \</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="preprocessor">  R *w; \</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="preprocessor">  R *w_hat; \</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="preprocessor">  C *y; \</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="preprocessor">  C *f_hat_iter; \</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="preprocessor">  C *r_iter; \</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="preprocessor">  C *z_hat_iter; \</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="preprocessor">  C *p_hat_iter; \</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"><a class="code" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">  763</a></span> <span class="preprocessor">  C *v_iter; \</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> <span class="preprocessor">  R alpha_iter; \</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> <span class="preprocessor">  R beta_iter; \</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> <span class="preprocessor">  R dot_r_iter; \</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="preprocessor">  R dot_r_iter_old; \</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="preprocessor">  R dot_z_hat_iter; \</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="preprocessor">  R dot_z_hat_iter_old; \</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="preprocessor">  R dot_p_hat_iter; \</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> <span class="preprocessor">  R dot_v_iter; \</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> <span class="preprocessor">} X(plan_complex);\</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv, unsigned flags);\</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="preprocessor">NFFT_EXTERN void X(init_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv);\</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> <span class="preprocessor">NFFT_EXTERN void X(before_loop_complex)(X(plan_complex)* ths);\</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> <span class="preprocessor">NFFT_EXTERN void X(loop_one_step_complex)(X(plan_complex) *ths);\</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> <span class="preprocessor">NFFT_EXTERN void X(finalize_complex)(X(plan_complex) *ths);\</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="preprocessor">  Y(mv_plan_double) *mv; \</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> <span class="preprocessor">  unsigned flags; \</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> <span class="preprocessor">  R *w; \</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> <span class="preprocessor">  R *w_hat; \</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="preprocessor">  R *y; \</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> <span class="preprocessor">  R *f_hat_iter; \</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="preprocessor">  R *r_iter; \</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="preprocessor">  R *z_hat_iter; \</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="preprocessor">  R *p_hat_iter; \</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="preprocessor">  R *v_iter; \</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="preprocessor">  R alpha_iter; \</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="preprocessor">  R beta_iter; \</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="preprocessor">  R dot_r_iter; \</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="preprocessor">  R dot_r_iter_old; \</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="preprocessor">  R dot_z_hat_iter; \</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="preprocessor">  R dot_z_hat_iter_old; \</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="preprocessor">  R dot_p_hat_iter; \</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="preprocessor">  R dot_v_iter; \</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="preprocessor">} X(plan_double);\</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced_double)(X(plan_double)* ths, Y(mv_plan_double) *mv, unsigned flags);\</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="preprocessor">NFFT_EXTERN void X(solver_init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv);\</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="preprocessor">NFFT_EXTERN void X(solver_before_loop_double)(X(plan_double)* ths);\</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> <span class="preprocessor">NFFT_EXTERN void X(solver_loop_one_step_double)(X(plan_double) *ths);\</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> <span class="preprocessor">NFFT_EXTERN void X(solver_finalize_double)(X(plan_double) *ths);</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> <span class="comment">/* solver api */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> SOLVER_DEFINE_API(SOLVER_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> SOLVER_DEFINE_API(SOLVER_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> SOLVER_DEFINE_API(SOLVER_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="preprocessor">#define LANDWEBER             (1U<< 0)</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="preprocessor"></span><span class="preprocessor">#define STEEPEST_DESCENT      (1U<< 1)</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="preprocessor"></span><span class="preprocessor">#define CGNR                  (1U<< 2)</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="preprocessor"></span><span class="preprocessor">#define CGNE                  (1U<< 3)</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="preprocessor"></span><span class="preprocessor">#define NORMS_FOR_LANDWEBER   (1U<< 4)</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="preprocessor"></span><span class="preprocessor">#define PRECOMPUTE_WEIGHT     (1U<< 5)</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="preprocessor"></span><span class="preprocessor">#define PRECOMPUTE_DAMP       (1U<< 6)</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="preprocessor"></span>}  <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> <span class="preprocessor">#endif </span><span class="comment">/* defined(__NFFT3_H__) */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft3conf_8h_source.html b/doc/api/html/nfft3conf_8h_source.html
new file mode 100644
index 0000000..e6868f0
--- /dev/null
+++ b/doc/api/html/nfft3conf_8h_source.html
@@ -0,0 +1,95 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft3conf.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft3conf.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id$ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/* include/nfftconf.h.in.  Generated from configure.ac by autoheader.  */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* Define to enable FPT module. */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#define HAVE_FPT 1</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">/* Define to enable MRI module. */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#define HAVE_MRI 1</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/* Define to enable NFCT module. */</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#define HAVE_NFCT 1</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/* Define to enable NFSFT module. */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#define HAVE_NFSFT 1</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/* Define to enable NFSOFT module. */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#define HAVE_NFSOFT 1</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* Define to enable NFST module. */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#define HAVE_NFST 1</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* Define to enable NNFFT module. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define HAVE_NNFFT 1</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/* Define to enable NSFFT module. */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#define HAVE_NSFFT 1</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft3util_8h.html b/doc/api/html/nfft3util_8h.html
new file mode 100644
index 0000000..e16eb93
--- /dev/null
+++ b/doc/api/html/nfft3util_8h.html
@@ -0,0 +1,221 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft3util.h File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">nfft3util.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for utility functions used by the nfft3 library.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <fftw3.h></code><br/>
+</div>
+<p><a href="nfft3util_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4df074728562efbb458f6662e649d1d5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">NFFT_SWAP_complex</a>(x, y)</td></tr>
+<tr class="memdesc:ga4df074728562efbb458f6662e649d1d5"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors.  <a href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5"></a><br/></td></tr>
+<tr class="memitem:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">NFFT_SWAP_double</a>(x, y)</td></tr>
+<tr class="memdesc:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors.  <a href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e"></a><br/></td></tr>
+<tr class="memitem:ga598a3330b3c21701223ee0ca14316eca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga598a3330b3c21701223ee0ca14316eca"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">PI</a>   3.141592653589793238462643383279502884197169399375105820974944592</td></tr>
+<tr class="memdesc:ga598a3330b3c21701223ee0ca14316eca"><td class="mdescLeft"> </td><td class="mdescRight">Formerly known to be an irrational number. <br/></td></tr>
+<tr class="memitem:ga2750dfdda752269a036f487a4a34b849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2750dfdda752269a036f487a4a34b849"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI2</b>   6.283185307179586476925286766559005768394338798750211641949889185</td></tr>
+<tr class="memitem:gafd17621e12029ff7c53518b74a487c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd17621e12029ff7c53518b74a487c94"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI4</b>   12.56637061435917295385057353311801153678867759750042328389977837</td></tr>
+<tr class="memitem:gad2e3f0e1983de6d70f003545cc556ed3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad2e3f0e1983de6d70f003545cc556ed3"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">NFFT_MAX</a>(a, b)   ((a)>(b)? (a) : (b))</td></tr>
+<tr class="memdesc:gad2e3f0e1983de6d70f003545cc556ed3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum of its two arguments. <br/></td></tr>
+<tr class="memitem:ga9087991411f723f26723b2b26dbf3308"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9087991411f723f26723b2b26dbf3308"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(a, b)   ((a)<(b)? (a) : (b))</td></tr>
+<tr class="memdesc:ga9087991411f723f26723b2b26dbf3308"><td class="mdescLeft"> </td><td class="mdescRight">Mimimum of its two arguments. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga89bd624abdfb13abc10c144a8ff949cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89bd624abdfb13abc10c144a8ff949cd"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft_bspline_old</a> (int k, double x, double *A)</td></tr>
+<tr class="memdesc:ga89bd624abdfb13abc10c144a8ff949cd"><td class="mdescLeft"> </td><td class="mdescRight">To test the new one. <br/></td></tr>
+<tr class="memitem:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2fd48f1f700153c050d27691c4b2a6cc"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft_bspline</a> (int k, double x, double *scratch)</td></tr>
+<tr class="memdesc:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="mdescLeft"> </td><td class="mdescRight">Computes the B-spline <img class="formulaInl" alt="$M_{k,0}\left(x\right)$" src="form_9.png"/>, scratch is used for de Boor's scheme. <br/></td></tr>
+<tr class="memitem:ga2752ca372ee2622f173a706e86e2b116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2752ca372ee2622f173a706e86e2b116"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft_prod_int</a> (int *vec, int d)</td></tr>
+<tr class="memdesc:ga2752ca372ee2622f173a706e86e2b116"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8adc6bf59ec10f16243030ee00ad4a40"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfst_prod_minus_a_int</a> (int *vec, int a, int d)</td></tr>
+<tr class="memdesc:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t-a$" src="form_11.png"/>. <br/></td></tr>
+<tr class="memitem:gad979f626cc8397e26d1bd78a7ba342cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad979f626cc8397e26d1bd78a7ba342cd"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft_plain_loop</a> (int *idx, int *N, int d)</td></tr>
+<tr class="memdesc:gad979f626cc8397e26d1bd78a7ba342cd"><td class="mdescLeft"> </td><td class="mdescRight">Computes <img class="formulaInl" alt="$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}$" src="form_12.png"/>. <br/></td></tr>
+<tr class="memitem:gad7bad7074a695341742f57526f8695eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad7bad7074a695341742f57526f8695eb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft_prod_real</a> (double *vec, int d)</td></tr>
+<tr class="memdesc:gad7bad7074a695341742f57526f8695eb"><td class="mdescLeft"> </td><td class="mdescRight">Computes double <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga135eb6c5a8ae1a84ea64c9099caac004"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft_dot_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:ga02357d8d67d2591573089e49958855a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga02357d8d67d2591573089e49958855a5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft_dot_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:ga02357d8d67d2591573089e49958855a5"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac712b4a91652e20dc53719ce6fc1f9e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft_dot_w_complex</a> (fftw_complex *x, double *w, int n)</td></tr>
+<tr class="memdesc:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga69cceec47679c500072d3d60c6181b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga69cceec47679c500072d3d60c6181b39"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft_dot_w_double</a> (double *x, double *w, int n)</td></tr>
+<tr class="memdesc:ga69cceec47679c500072d3d60c6181b39"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga68268fc9bfad5a7e7383098ac1715674"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68268fc9bfad5a7e7383098ac1715674"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft_dot_w_w2_complex</a> (fftw_complex *x, double *w, double *w2, int n)</td></tr>
+<tr class="memdesc:ga68268fc9bfad5a7e7383098ac1715674"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w1\odot w2\odot w2 \odot x)$" src="form_15.png"/>. <br/></td></tr>
+<tr class="memitem:ga9b59288597d159357fe86395e635a075"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9b59288597d159357fe86395e635a075"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft_dot_w2_complex</a> (fftw_complex *x, double *w2, int n)</td></tr>
+<tr class="memdesc:ga9b59288597d159357fe86395e635a075"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w2\odot w2 \odot x)$" src="form_16.png"/>. <br/></td></tr>
+<tr class="memitem:ga21fd5b4d5f6113538320188306611133"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga21fd5b4d5f6113538320188306611133"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft_cp_complex</a> (fftw_complex *x, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga21fd5b4d5f6113538320188306611133"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:gab220a37bd6e58be7413507b17ca3bfe2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab220a37bd6e58be7413507b17ca3bfe2"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft_cp_double</a> (double *x, double *y, int n)</td></tr>
+<tr class="memdesc:gab220a37bd6e58be7413507b17ca3bfe2"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga33409df91e7ad5e1dca3beaa63e0ef25"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft_cp_a_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga41f20c605269e701b3305e49010e0759"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga41f20c605269e701b3305e49010e0759"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft_cp_a_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga41f20c605269e701b3305e49010e0759"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga630054cb816785d766959a867965f619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga630054cb816785d766959a867965f619"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft_cp_w_complex</a> (fftw_complex *x, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga630054cb816785d766959a867965f619"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga27a75e17d21c508cacf81276ca531099"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga27a75e17d21c508cacf81276ca531099"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft_cp_w_double</a> (double *x, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:ga27a75e17d21c508cacf81276ca531099"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga676395f56bbf1c444d074a21753de8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga676395f56bbf1c444d074a21753de8d5"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft_upd_axpy_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga676395f56bbf1c444d074a21753de8d5"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7610a506bc5ab40a6e1d7937b36921a3"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft_upd_axpy_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1fde8da1b69413398fca44e2ef2fbdb4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft_upd_xpay_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga2389c3b56a484a3f165b7d9203700064"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2389c3b56a484a3f165b7d9203700064"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft_upd_xpay_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga2389c3b56a484a3f165b7d9203700064"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga903a4b3ed369dcfe67b9379a238ed23d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft_upd_axpby_complex</a> (fftw_complex *x, double a, fftw_complex *y, double b, int n)</td></tr>
+<tr class="memdesc:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:ga75e403e92875b0b919a555f8cede0e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75e403e92875b0b919a555f8cede0e8d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft_upd_axpby_double</a> (double *x, double a, double *y, double b, int n)</td></tr>
+<tr class="memdesc:ga75e403e92875b0b919a555f8cede0e8d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:gad8e10773e59818c88a8ea2cb560b936e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad8e10773e59818c88a8ea2cb560b936e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft_upd_xpawy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:gad8e10773e59818c88a8ea2cb560b936e"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac5db5bbc58f772844cf0caf5fd9fafb0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft_upd_xpawy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:ga693919963b51cf396311b15660e04cd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga693919963b51cf396311b15660e04cd8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft_upd_axpwy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga693919963b51cf396311b15660e04cd8"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6777c4b8aa9f575f1600c51e8ae343a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft_upd_axpwy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaa388b5ec231e02ac45e37b60fd62e770"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa388b5ec231e02ac45e37b60fd62e770"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft_fftshift_complex</a> (fftw_complex *x, int d, int *N)</td></tr>
+<tr class="memdesc:gaa388b5ec231e02ac45e37b60fd62e770"><td class="mdescLeft"> </td><td class="mdescRight">Swaps each half over N[d]/2. <br/></td></tr>
+<tr class="memitem:gaa8e0581d802c4b7bb153682a4c156409"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa8e0581d802c4b7bb153682a4c156409"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft_vpr_int</a> (int *x, int n, char *text)</td></tr>
+<tr class="memdesc:gaa8e0581d802c4b7bb153682a4c156409"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of integer numbers. <br/></td></tr>
+<tr class="memitem:ga5021b4c5ea2a24b0014786deb81cca91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5021b4c5ea2a24b0014786deb81cca91"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft_vpr_double</a> (double *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga5021b4c5ea2a24b0014786deb81cca91"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of doubles numbers. <br/></td></tr>
+<tr class="memitem:ga52ad07055e22b83a016bdbf43d3884d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52ad07055e22b83a016bdbf43d3884d0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft_vpr_complex</a> (fftw_complex *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga52ad07055e22b83a016bdbf43d3884d0"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of complex numbers. <br/></td></tr>
+<tr class="memitem:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5f53c8cd0b2f33200fce15ecf75a0685"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft_vrand_unit_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random complex numbers in <img class="formulaInl" alt="$[0,1]\times[0,1]{\rm i}$" src="form_25.png"/>. <br/></td></tr>
+<tr class="memitem:gaa44184ac2c1452221508e7640f391c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa44184ac2c1452221508e7640f391c34"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft_vrand_shifted_unit_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:gaa44184ac2c1452221508e7640f391c34"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random double numbers in <img class="formulaInl" alt="$[-1/2,1/2]$" src="form_26.png"/>. <br/></td></tr>
+<tr class="memitem:ga797e81f55e6379efabf4d98522d1ee9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga797e81f55e6379efabf4d98522d1ee9d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft_voronoi_weights_1d</a> (double *w, double *x, int M)</td></tr>
+<tr class="memdesc:ga797e81f55e6379efabf4d98522d1ee9d"><td class="mdescLeft"> </td><td class="mdescRight">Computes non periodic voronoi weights, assumes ordered nodes <img class="formulaInl" alt="$x_j$" src="form_27.png"/>. <br/></td></tr>
+<tr class="memitem:ga26a4ed487a23e99e01f111113be9f994"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft_voronoi_weights_S2</a> (double *w, double *xi, int M)</td></tr>
+<tr class="memdesc:ga26a4ed487a23e99e01f111113be9f994"><td class="mdescLeft"> </td><td class="mdescRight">Computes voronoi weights for nodes on the sphere S^2.  <a href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994"></a><br/></td></tr>
+<tr class="memitem:gac9b810183abafb668f8aa777c7985256"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac9b810183abafb668f8aa777c7985256"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft_modified_fejer</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gac9b810183abafb668f8aa777c7985256"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Fejer kernel, ie <img class="formulaInl" alt="$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)$" src="form_28.png"/>. <br/></td></tr>
+<tr class="memitem:gab45a6cd3528d3716522a0cf184375aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab45a6cd3528d3716522a0cf184375aaf"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft_modified_jackson2</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gab45a6cd3528d3716522a0cf184375aaf"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Jackson kernel. <br/></td></tr>
+<tr class="memitem:ga126ec2282393435f0d795ac79db8654b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga126ec2282393435f0d795ac79db8654b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft_modified_jackson4</a> (int N, int kk)</td></tr>
+<tr class="memdesc:ga126ec2282393435f0d795ac79db8654b"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified generalised Jackson kernel. <br/></td></tr>
+<tr class="memitem:gaa84cb34c6d368599fb2f997eadb184a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa84cb34c6d368599fb2f997eadb184a7"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft_modified_sobolev</a> (double mu, int kk)</td></tr>
+<tr class="memdesc:gaa84cb34c6d368599fb2f997eadb184a7"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Sobolev kernel. <br/></td></tr>
+<tr class="memitem:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac6201bc2aa806bd25cb14c5f96d644e9"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft_modified_multiquadric</a> (double mu, double c, int kk)</td></tr>
+<tr class="memdesc:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified multiquadric kernel. <br/></td></tr>
+<tr class="memitem:ga2decee6fe50d50797a82737ba82cf97a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft_smbi</a> (const double x, const double alpha, const int nb, const int ize, double *b)</td></tr>
+<tr class="memdesc:ga2decee6fe50d50797a82737ba82cf97a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the modified bessel function <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, possibly scaled by <img class="formulaInl" alt="$\mathrm{e}^{-x}$" src="form_83.png"/>, for real non-negative <img class="formulaInl" alt="$x,alpha$" src="form_84.png"/> with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/>, and <img class="formulaInl" [...]
+<tr class="memitem:ga574571239f7dcf7474736d35a6242bb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga574571239f7dcf7474736d35a6242bb1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfft_drand48</b> (void)</td></tr>
+<tr class="memitem:gaef3ecf626cc0aab6ccdc363fd43ef0d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaef3ecf626cc0aab6ccdc363fd43ef0d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_srand48</b> (long int seed)</td></tr>
+<tr class="memitem:gad93b94e3c7e9149f89819504c2b3c738"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft_sort_node_indices_radix_lsdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:gad93b94e3c7e9149f89819504c2b3c738"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices.  <a href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738"></a><br/></td></tr>
+<tr class="memitem:ga60a5123a8026a06807e14502d7cedcd5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft_sort_node_indices_radix_msdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:ga60a5123a8026a06807e14502d7cedcd5"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices.  <a href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5"></a><br/></td></tr>
+<tr class="memitem:gafb4a11b0dff72fc3b827b0fee0a14611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafb4a11b0dff72fc3b827b0fee0a14611"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfft_get_num_threads</b> (void)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for utility functions used by the nfft3 library. </p>
+
+<p>Definition in file <a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft3util_8h_source.html b/doc/api/html/nfft3util_8h_source.html
new file mode 100644
index 0000000..db7cf01
--- /dev/null
+++ b/doc/api/html/nfft3util_8h_source.html
@@ -0,0 +1,214 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft3util.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft3util.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="nfft3util_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfft3util.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifndef __UTIL_H__</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#define __UTIL_H__</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*###########################################################################*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*###########################################################################*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*###########################################################################*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">   52</a></span> <span class="preprocessor">#define NFFT_SWAP_complex(x,y) {fftw_complex* NFFT_SWAP_temp__; \</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">  NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">   57</a></span> <span class="preprocessor">#define NFFT_SWAP_double(x,y) {double* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">  (x)=(y); (y)=NFFT_SWAP_temp__;}</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">   62</a></span> <span class="preprocessor">#define PI 3.141592653589793238462643383279502884197169399375105820974944592</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define PI2 6.283185307179586476925286766559005768394338798750211641949889185</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define PI4 12.56637061435917295385057353311801153678867759750042328389977837</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">   68</a></span> <span class="preprocessor">#define NFFT_MAX(a,b) ((a)>(b)? (a) : (b))</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">   72</a></span> <span class="preprocessor">#define NFFT_MIN(a,b) ((a)<(b)? (a) : (b))</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/* ########## Window function related ###################################### */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd" title="To test the new one.">nfft_bspline_old</a>(<span class="keywordtype">int</span> k,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> *A);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc" title="Computes the B-spline , scratch is used for de Boor's scheme.">nfft_bspline</a>(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> *scratch);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/* ########## Vector routines ############################################## */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> a, <span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd" title="Computes .">nfft_plain_loop</a>(<span class="keywordtype">int</span> *idx,<span class="keywordtype">int</span> *N,<span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb" title="Computes double .">nfft_prod_real</a>(<span class="keywordtype">double</span> *vec,<span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(fftw_complex* x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674" title="Computes the weighted inner/dot product .">nfft_dot_w_w2_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>* w2, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075" title="Computes the weighted inner/dot product .">nfft_dot_w2_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w2, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(fftw_complex* x, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span>*  y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25" title="Copies .">nfft_cp_a_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759" title="Copies .">nfft_cp_a_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>*  y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>*  y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>*  y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d" title="Updates .">nfft_upd_axpby_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">double</span> b, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d" title="Updates .">nfft_upd_axpby_double</a>(  <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>*  y, <span class="keywordtype">double</span> b, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>*  y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8" title="Updates .">nfft_upd_axpwy_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a" title="Updates .">nfft_upd_axpwy_double</a>( <span class="keywordtype">double</span>*  x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>*  y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fftw_complex *x, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span>* N);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409" title="Prints a vector of integer numbers.">nfft_vpr_int</a>(<span class="keywordtype">int</span> *x, <span class="keywordtype">int</span> n, <span class="keywordtype">char</span> *text);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(fftw_complex *x, <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(fftw_complex *x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/* ########## Helpers for inverse transforms ############################### */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d" title="Computes non periodic voronoi weights, assumes ordered nodes .">nfft_voronoi_weights_1d</a>(<span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> M);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994" title="Computes voronoi weights for nodes on the sphere S^2.">nfft_voronoi_weights_S2</a>(<span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *xi, <span class="keywordtype">int</span> M);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256" title="Computes the damping factor for the modified Fejer kernel, ie .">nfft_modified_fejer</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf" title="Computes the damping factor for the modified Jackson kernel.">nfft_modified_jackson2</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b" title="Computes the damping factor for the modified generalised Jackson kernel.">nfft_modified_jackson4</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7" title="Computes the damping factor for the modified Sobolev kernel.">nfft_modified_sobolev</a>(<span class="keywordtype">double</span> mu,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9" title="Computes the damping factor for the modified multiquadric kernel.">nfft_modified_multiquadric</a>(<span class="keywordtype">double</span> mu,<span class="keywordtype">double</span> c,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a" title="Calculates the modified bessel function , possibly scaled by , for real non-negative  with ...">nfft_smbi</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> alpha, <span class="keyword" [...]
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <span class="keywordtype">double</span> *b);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="keywordtype">double</span> nfft_drand48(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="keywordtype">void</span> nfft_srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span> seed);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738" title="Radix sort for node indices.">nfft_sort_node_indices_radix_lsdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span class="keywordtype">int</span> rhigh);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5" title="Radix sort for node indices.">nfft_sort_node_indices_radix_msdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span class="keywordtype">int</span> rhigh);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="keywordtype">int</span> nfft_get_num_threads(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="preprocessor"></span><span class="keywordtype">int</span> nfft_get_omp_num_threads(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="preprocessor"></span>}  <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft_2simple__test_8c_source.html b/doc/api/html/nfft_2simple__test_8c_source.html
new file mode 100644
index 0000000..55a18ca
--- /dev/null
+++ b/doc/api/html/nfft_2simple__test_8c_source.html
@@ -0,0 +1,196 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> N=14;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">int</span> M=19;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   nfft_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number o [...]
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>       nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22 [...]
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total nu [...]
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   t0 = getticks();</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   t1 = getticks();</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples." [...]
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples." [...]
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total nu [...]
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   nfft_adjoint(&p);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total nu [...]
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfft_2d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordtype">int</span> K,N[2],n[2],M;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   N[0]=32; n[0]=64;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   N[1]=14; n[1]=32;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   M=N[0]*N[1];</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   K=16;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   t0 = getticks();</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   nfft_init_guru(&p, 2, N, M, n, 7,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>      PRE_PHI_HUT| PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>      FFTW_ESTIMATE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka  [...]
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22 [...]
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   t1 = getticks();</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,K,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>               <span class="stringliteral">"given Fourier coefficients, vector f_hat (first few entries)"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   printf(<span class="stringliteral">" ... initialisation took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   t0 = getticks();</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   t1 = getticks();</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,K,<span class="stringliteral">"ndft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   t0 = getticks();</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   t1 = getticks();</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,K,<span class="stringliteral">"nfft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   t0 = getticks();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   t1 = getticks();</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,K,<span class="stringliteral">"adjoint ndft, vector f_hat (first few entries)"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   t0 = getticks();</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   nfft_adjoint(&p);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   t1 = getticks();</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,K,<span class="stringliteral">"adjoint nfft, vector f_hat (first few entries)"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   printf(<span class="stringliteral">"1) computing a one dimensional ndft, nfft and an adjoint nfft\n\n"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   simple_test_nfft_1d();</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   getc(stdin);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   printf(<span class="stringliteral">"2) computing a two dimensional ndft, nfft and an adjoint nfft\n\n"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   simple_test_nfft_2d();</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft_2simple__test__threads_8c_source.html b/doc/api/html/nfft_2simple__test__threads_8c_source.html
new file mode 100644
index 0000000..c601d7e
--- /dev/null
+++ b/doc/api/html/nfft_2simple__test__threads_8c_source.html
@@ -0,0 +1,128 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test_threads.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft/simple_test_threads.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3198 2009-05-27 14:16:50Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">//#include <time.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N = 1000000;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = 1000000;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   printf(<span class="stringliteral">"nthreads = %d\n"</span>, nfft_get_num_threads());</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="comment">/* init */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   fftw_init_threads();</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   nfft_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="comment">/* pseudo random nodes */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number o [...]
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="comment">/* precompute psi, that is, the entries of the matrix B */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   t0 = getticks();</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>       nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   t1 = getticks();</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   fprintf(stderr,<span class="stringliteral">"precompute elapsed time: %.3f seconds\n"</span>,t);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="comment">/* pseudo random Fourier coefficients */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22 [...]
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="comment">/* transformation */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   t0 = getticks();</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   t1 = getticks();</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   fprintf(stderr,<span class="stringliteral">"compute    elapsed time: %.3f seconds\n"</span>,t);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   fflush(stderr);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">//  nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   fftw_cleanup_threads();</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft_8c_source.html b/doc/api/html/nfft_8c_source.html
new file mode 100644
index 0000000..abdcedd
--- /dev/null
+++ b/doc/api/html/nfft_8c_source.html
@@ -0,0 +1,5727 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7eb6ea3471917cbff788e1046aaeac44.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/* Nonequispaced FFT */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* Authors: D. Potts, S. Kunis 2002-2009, Jens Keiner 2009, Toni Volkmer 2012 */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">/* configure header */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* complex datatype (maybe) */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include<complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/* NFFT headers */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_nodes_for_better_cache_handle(<span class="keywordtype">int</span> d,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> *n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> local_x_num, <span class="keyword">const</span> R *local_x, <span class="keywordtype">int</span> *ar_x)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">int</span> u_j[d], i, j, help, rhigh;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">int</span> *ar_x_temp;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">int</span> nprod;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">for</span>(i = 0; i < local_x_num; i++) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     ar_x[2*i] = 0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     ar_x[2*i+1] = i;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">for</span>(j = 0; j < d; j++) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       help = (int) floor( n[j]*local_x[d*i+j] - m);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       u_j[j] = (help%n[j]+n[j])%n[j];</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       ar_x[2*i] += u_j[j];</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>       <span class="keywordflow">if</span> (j+1 < d)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         ar_x[2*i] *= n[j+1];</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">for</span> (j = 0, nprod = 1; j < d; j++)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     nprod *= n[j];</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   rhigh = (int) ceil(log2(nprod)) - 1;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   ar_x_temp = (<span class="keywordtype">int</span> *) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*local_x_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738" title="Radix sort for node indices.">nfft_sort_node_indices_radix_lsdf</a>(local_x_num, ar_x, ar_x_temp, rhigh);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (i = 1; i < local_x_num; i++)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     assert(ar_x[2*(i-1)] <= ar_x[2*i]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span>  <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ar_x_temp);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_nodes(<span class="keyword">const</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     nfft_sort_nodes_for_better_cache_handle(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a544 [...]
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/* some macros to initialize arrays before executing a transformation */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">#define MACRO_ndft_init_result_trafo memset(f,0,ths->M_total*sizeof(C));</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_init_result_conjugated MACRO_ndft_init_result_trafo</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(C));</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_init_result_transposed MACRO_ndft_init_result_adjoint</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/* exponent of complex exponentials */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">#define MACRO_ndft_sign_trafo K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_sign_conjugated -K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_sign_adjoint K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_sign_transposed -K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">#define MACRO_init_k_N_Omega_x(which_one)                                     \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">  for (t = 0; t < ths->d; t++)                                                \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">    k[t] = -ths->N[t]/2;                                                      \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">    x[t] = MACRO_ndft_sign_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">    Omega[t+1] = k[t]*x[t] + Omega[t];                                        \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">  omega = Omega[ths->d];                                                      \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor">}                                                                             \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_count_k_N_Omega                                                 \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">  for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)                \</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">    k[t]-= ths->N[t]-1;                                                       \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">  k[t]++;                                                                     \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">  for (t2 = t; t2 < ths->d; t2++)                                             \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">    Omega[t2+1] = k[t2]*x[t2] + Omega[t2];                                    \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">  omega = Omega[ths->d];                                                      \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">#define MACRO_ndft_compute_trafo f[j] += f_hat[k_L]*CEXP(-II*omega);</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_compute_conjugated MACRO_ndft_compute_trafo</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_compute_adjoint f_hat[k_L] += f[j]*CEXP(+II*omega);</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_compute_transposed MACRO_ndft_compute_adjoint</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor">#define MACRO_ndft(which_one)                                                 \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor">void nfft_ ## which_one ## _direct (nfft_plan *ths)                           \</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">  C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;                                 \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">  MACRO_ndft_init_result_ ## which_one                                        \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">  if (ths->d == 1)                                                            \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor">    </span><span class="comment">/* specialize for univariate case, rationale: faster */</span><span class="preprocessor">                   \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor">    const int t = 0;                                                          \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor">    int j;                                                                    \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor">    for (j = 0; j < ths->M_total; j++)                                        \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor">      int k_L;                                                                \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor">      for(k_L = 0; k_L < ths->N_total; k_L++)                                 \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor">        R omega = (k_L - (ths->N_total/2)) * MACRO_ndft_sign_ ## which_one;   \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor">        MACRO_ndft_compute_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor">    }                                                                         \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">  else                                                                        \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor">    </span><span class="comment">/* multivariate case */</span><span class="preprocessor">                                                   \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">    int j;                                                                    \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor">    for (j = 0; j < ths->M_total; j++)                                        \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">      R x[ths->d], omega, Omega[ths->d+1];                                    \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor">      int t, t2, k_L, k[ths->d];                                              \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">      Omega[0] = K(0.0);                                                      \</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">      MACRO_init_k_N_Omega_x(which_one);                                      \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor">      for(k_L = 0; k_L < ths->N_total; k_L++)                                 \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor">        MACRO_ndft_compute_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor">        MACRO_count_k_N_Omega;                                                \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor">    }                                                                         \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">// macro expanded for OpenMP parallelization</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">//MACRO_ndft(trafo)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="keywordtype">void</span> nfft_trafo_direct (<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   C *f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, *f = (C*)ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   memset(f,0,ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> == 1)</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="comment">/* specialize for univariate case, rationale: faster */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(j)</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         R omega = (k_L - ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2) * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j];</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="comment">/* multivariate case */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(j)</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       R x[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], omega, Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       <span class="keywordtype">int</span> t, t2, k_L, k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       Omega[0] = ((R) 0.0);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         k[t] = -ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         x[t] = K2PI*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t];</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         Omega[t+1] = k[t]*x[t] + Omega[t];</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>           <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; (t >= 1) && (k[t] == ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2-1); t--)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>             k[t]-= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]-1;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>           k[t]++;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>           <span class="keywordflow">for</span> (t2 = t; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>             Omega[t2+1] = k[t2]*x[t2] + Omega[t2];</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>           omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">// macro expanded for OpenMP parallelization since parallel calculation</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">// requires outer loop over frequencies and inner loop over nodes.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">//MACRO_ndft(adjoint)</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="keywordtype">void</span> nfft_adjoint_direct (<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   C *f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, *f = (C*)ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   memset(f_hat,0,ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> == 1)</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="comment">/* specialize for univariate case, rationale: faster */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="preprocessor"></span>      <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         {</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>           R omega = (k_L - (ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2)) * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j];</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>           f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>       }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor"></span>      <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>           R omega = (k_L - (ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2)) * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j];</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>           f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="comment">/* multivariate case */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordtype">int</span> j, k_L;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="preprocessor"></span><span class="preprocessor">    #pragma omp parallel for default(shared) private(j, k_L)</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     {</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>       <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], k_temp, t;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       k_temp = k_L;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>         k[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         R omega = 0.0;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>           omega += k[t] * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t];</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>         f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       R x[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], omega, Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       <span class="keywordtype">int</span> t, t2, k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       Omega[0] = ((R) 0.0);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         k[t] = -ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         x[t] = K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t];</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         Omega[t+1] = k[t]*x[t] + Omega[t];</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>       }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>       omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; (t >= 1) && (k[t] == ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2-1); t--)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>           k[t]-= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]-1;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         k[t]++;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         <span class="keywordflow">for</span> (t2 = t; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>           Omega[t2+1] = k[t2]*x[t2] + Omega[t2];</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_uo(<span class="keyword">const</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keyword">const</span> <span class="keywordtype">int</span> j, <span class="keywordtype">int</span> *up, <span class="keywordtype">int</span> *op,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> act_dim)</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   <span class="keyword">const</span> R xj = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j * ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> + act_dim];</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordtype">int</span> c = LRINT(FLOOR(xj * ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[act_dim]));</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   (*up) = c - (ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   (*op) = c + 1 + (ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_uo2(<span class="keywordtype">int</span> *u, <span class="keywordtype">int</span> *o, <span class="keyword">const</span> R x, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   <span class="keywordtype">int</span> c = LRINT(FLOOR(x * n));</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   *u = (c - m + n) % n;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   *o = (c + 1 + m + n) % n;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor">#define MACRO_nfft_D_compute_A                                                \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor">  g_hat[k_plain[ths->d]] = f_hat[ks_plain[ths->d]] * c_phi_inv_k[ths->d];     \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="preprocessor">#define MACRO_nfft_D_compute_T                                                \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor">  f_hat[ks_plain[ths->d]] = g_hat[k_plain[ths->d]] * c_phi_inv_k[ths->d];     \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor">#define MACRO_nfft_D_init_result_A memset(g_hat,0,ths->n_total*sizeof(C));</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="preprocessor">#define MACRO_nfft_D_init_result_T memset(f_hat,0,ths->N_total*sizeof(C));</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor">#define MACRO_with_PRE_PHI_HUT * ths->c_phi_inv[t2][ks[t2]];</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="preprocessor">#define MACRO_without_PRE_PHI_HUT / (PHI_HUT(ks[t2]-(ths->N[t2]/2),t2));</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="preprocessor">#define MACRO_init_k_ks                                                       \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor">  for (t = ths->d-1; 0 <= t; t--)                                             \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="preprocessor">    kp[t] = k[t] = 0;                                                         \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="preprocessor">    ks[t] = ths->N[t]/2;                                                      \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="preprocessor">  t++;                                                                        \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="preprocessor">#define MACRO_update_c_phi_inv_k(which_one) \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="preprocessor">  for (t2 = t; t2 < ths->d; t2++)                                             \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor">    c_phi_inv_k[t2+1] = c_phi_inv_k[t2] MACRO_ ##which_one;                   \</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor">    ks_plain[t2+1] = ks_plain[t2]*ths->N[t2] + ks[t2];                        \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor">    k_plain[t2+1] = k_plain[t2]*ths->n[t2] + k[t2];                           \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="preprocessor">#define MACRO_count_k_ks                                                      \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor">  for (t = ths->d-1; (t > 0) && (kp[t] == ths->N[t]-1); t--)                  \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="preprocessor">    kp[t] = k[t] = 0;                                                         \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="preprocessor">    ks[t]= ths->N[t]/2;                                                       \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">  kp[t]++; k[t]++; ks[t]++;                                                   \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor">  if(kp[t] == ths->N[t]/2)                                                    \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="preprocessor">    k[t] = ths->n[t] - ths->N[t]/2;                                           \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">    ks[t] = 0;                                                                \</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor">}                                                                             \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor">#define MACRO_nfft_D(which_one)                                               \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor">static inline void nfft_D_serial_ ## which_one (nfft_plan *ths)               \</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor">  C *f_hat, *g_hat;                     \</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor">  R c_phi_inv_k[ths->d+1];              \</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="preprocessor">  int t, t2;                            \</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="preprocessor">  int k_L;                              \</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="preprocessor">  int kp[ths->d];                       \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor">  int k[ths->d];                        \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor">  int ks[ths->d];                       \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor">  int k_plain[ths->d+1];                \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor">  int ks_plain[ths->d+1];               \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor">  f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;                             \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="preprocessor">  MACRO_nfft_D_init_result_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor">  c_phi_inv_k[0] = K(1.0);                                                    \</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor">  k_plain[0] = 0;                                                             \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor">  ks_plain[0] = 0;                                                            \</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="preprocessor">  if (ths->nfft_flags & PRE_PHI_HUT)                                          \</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="preprocessor">    MACRO_init_k_ks;                                                          \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="preprocessor">    for (k_L = 0; k_L < ths->N_total; k_L++)                                  \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor">      MACRO_update_c_phi_inv_k(with_PRE_PHI_HUT);                             \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor">      MACRO_nfft_D_compute_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor">      MACRO_count_k_ks;                                                       \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor">    } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor">                                                          \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor">  } </span><span class="comment">/* if(PRE_PHI_HUT) */</span><span class="preprocessor">                                                     \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="preprocessor">  else                                                                        \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor">    MACRO_init_k_ks;                                                          \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="preprocessor">    for (k_L = 0; k_L < ths->N_total; k_L++)                                  \</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="preprocessor">      MACRO_update_c_phi_inv_k(without_PRE_PHI_HUT);                          \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor">      MACRO_nfft_D_compute_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor">      MACRO_count_k_ks;                                                       \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="preprocessor">    } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor">                                                          \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="preprocessor">  } </span><span class="comment">/* else(PRE_PHI_HUT) */</span><span class="preprocessor">                                                   \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="preprocessor">} </span><span class="comment">/* nfft_D */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_openmp_A(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> {</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   C *f_hat, *g_hat;                     </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>   <span class="keywordtype">int</span> k_L;                              </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; g_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>   memset(g_hat,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>       <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>       <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>       <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                       </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>       R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>       <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>       <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>       <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>       <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>       {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>           k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>           k[t] = kp[t];</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>       }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>       <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>       {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         c_phi_inv_k_val *= ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[t][ks[t]];</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>       }</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>       g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   } <span class="comment">/* if(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     {</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>       <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                       </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>       <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>       <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>       <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>       <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>       {</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>           k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>           k[t] = kp[t];</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>       }</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>       <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2),t));</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>         k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>       }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   } <span class="comment">/* else(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> }</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="preprocessor"></span>MACRO_nfft_D(A)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_A(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor"></span>  nfft_D_openmp_A(ths);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="preprocessor"></span>  nfft_D_serial_A(ths);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_openmp_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   C *f_hat, *g_hat;                     </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   <span class="keywordtype">int</span> k_L;                              </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; g_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   memset(f_hat,0,ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>       <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                       </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>       R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>       <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>       <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>       <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>       <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>       <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>       {</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>           k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>           k[t] = kp[t];</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>         ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>       }</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>       <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>       {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>         c_phi_inv_k_val *= ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[t][ks[t]];</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>       }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   } <span class="comment">/* if(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   {</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>       <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>       <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                       </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>       R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>       <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>       <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>       <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>       <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>       <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>       {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>         <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>           k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>           k[t] = kp[t];</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>       }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>       <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>       {</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2),t));</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>       }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   } <span class="comment">/* else(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="preprocessor"></span>MACRO_nfft_D(T)</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="preprocessor"></span>  nfft_D_openmp_T(ths);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> <span class="preprocessor"></span>  nfft_D_serial_T(ths);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> <span class="preprocessor">#define MACRO_nfft_B_init_result_A  memset(f,0,ths->M_total*sizeof(C));</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_B_init_result_T memset(g,0,ths->n_total*sizeof(C));</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="preprocessor">#define MACRO_nfft_B_PRE_FULL_PSI_compute_A                                   \</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> <span class="preprocessor">  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                            \</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> <span class="preprocessor">#define MACRO_nfft_B_PRE_FULL_PSI_compute_T                                   \</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="preprocessor">  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                            \</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> <span class="preprocessor">#define MACRO_nfft_B_compute_A                                                \</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="preprocessor">  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]];                            \</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="preprocessor">#define MACRO_nfft_B_compute_T                                                \</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="preprocessor">  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj);                            \</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="preprocessor">#define MACRO_with_FG_PSI fg_psi[t2][lj[t2]]</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> <span class="preprocessor">#define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2) * (2*ths->m+2)+lj[t2]]</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> <span class="preprocessor">#define MACRO_without_PRE_PSI  PHI(ths->x[j*ths->d+t2]                        \</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="preprocessor">  - ((R)l[t2])/((R)ths->n[t2]), t2)</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> <span class="preprocessor">#define MACRO_init_uo_l_lj_t                                                  \</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> <span class="preprocessor">  for (t = ths->d-1; t >= 0; t--)                                             \</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> <span class="preprocessor">    nfft_uo(ths,j,&u[t],&o[t],t);                                             \</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="preprocessor">    l[t] = u[t];                                                              \</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="preprocessor">    lj[t] = 0;                                                                \</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="preprocessor">  } </span><span class="comment">/* for(t) */</span><span class="preprocessor">                                                              \</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> <span class="preprocessor">  t++;                                                                        \</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> <span class="preprocessor">#define MACRO_update_phi_prod_ll_plain(which_one) {                           \</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> <span class="preprocessor">  for(t2=t; t2<ths->d; t2++)                                                  \</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> <span class="preprocessor">      phi_prod[t2+1] = phi_prod[t2]* MACRO_ ## which_one;                     \</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> <span class="preprocessor">      ll_plain[t2+1] = ll_plain[t2]*ths->n[t2] +(l[t2]+ths->n[t2])%ths->n[t2];\</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> <span class="preprocessor">    } </span><span class="comment">/* for(t2) */</span><span class="preprocessor">                                                           \</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> <span class="preprocessor">#define MACRO_count_uo_l_lj_t {                                               \</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> <span class="preprocessor">  for(t = ths->d-1; (t > 0) && (l[t] == o[t]); t--)                           \</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="preprocessor">      l[t] = u[t];                                                            \</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="preprocessor">      lj[t] = 0;                                                              \</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="preprocessor">    } </span><span class="comment">/* for(t) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="preprocessor">  l[t]++;                                                                     \</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="preprocessor">  lj[t]++;                                                                    \</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> <span class="preprocessor">#define MACRO_nfft_B(which_one)                                               \</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> <span class="preprocessor">static inline void nfft_B_serial_ ## which_one (nfft_plan *ths)               \</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="preprocessor">  int lprod; </span><span class="comment">/* 'regular bandwidth' of matrix B  */</span><span class="preprocessor">                           \</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="preprocessor">  int u[ths->d], o[ths->d]; </span><span class="comment">/* multi band with respect to x_j */</span><span class="preprocessor">              \</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="preprocessor">  int t, t2; </span><span class="comment">/* index dimensions */</span><span class="preprocessor">                                           \</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="preprocessor">  int j; </span><span class="comment">/* index nodes */</span><span class="preprocessor">                                                    \</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> <span class="preprocessor">  int l_L, ix; </span><span class="comment">/* index one row of B */</span><span class="preprocessor">                                       \</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> <span class="preprocessor">  int l[ths->d]; </span><span class="comment">/* multi index u<=l<=o */</span><span class="preprocessor">                                    \</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> <span class="preprocessor">  int lj[ths->d]; </span><span class="comment">/* multi index 0<=lj<u+o+1 */</span><span class="preprocessor">                               \</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> <span class="preprocessor">  int ll_plain[ths->d+1]; </span><span class="comment">/* postfix plain index in g */</span><span class="preprocessor">                      \</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="preprocessor">  R phi_prod[ths->d+1]; </span><span class="comment">/* postfix product of PHI */</span><span class="preprocessor">                          \</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> <span class="preprocessor">  C *f, *g; </span><span class="comment">/* local copy */</span><span class="preprocessor">                                                  \</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> <span class="preprocessor">  C *fj; </span><span class="comment">/* local copy */</span><span class="preprocessor">                                                     \</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> <span class="preprocessor">  R y[ths->d];                                                                \</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> <span class="preprocessor">  R fg_psi[ths->d][2*ths->m+2];                                               \</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> <span class="preprocessor">  R fg_exp_l[ths->d][2*ths->m+2];                                             \</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="preprocessor">  int l_fg,lj_fg;                                                             \</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="preprocessor">  R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3;                            \</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> <span class="preprocessor">  R ip_w;                                                                     \</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> <span class="preprocessor">  int ip_u;                                                                   \</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> <span class="preprocessor">  int ip_s = ths->K/(ths->m+2);                                               \</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> <span class="preprocessor">  f = (C*)ths->f; g = (C*)ths->g;                                             \</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="preprocessor">  MACRO_nfft_B_init_result_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="preprocessor">  if (ths->nfft_flags & PRE_FULL_PSI)                                         \</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="preprocessor">    for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++)                  \</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="preprocessor">      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++)                   \</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="preprocessor">        MACRO_nfft_B_PRE_FULL_PSI_compute_ ## which_one;                      \</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="preprocessor">    return;                                                                   \</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="preprocessor">  }                                                                           \</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="preprocessor">  phi_prod[0] = K(1.0);                                                       \</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="preprocessor">  ll_plain[0] = 0;                                                            \</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="preprocessor">  for (t = 0, lprod = 1; t < ths->d; t++)                                     \</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="preprocessor">    lprod *= (2*ths->m+2);                                                    \</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> <span class="preprocessor">  if (ths->nfft_flags & PRE_PSI)                                              \</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> <span class="preprocessor">    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> <span class="preprocessor">      MACRO_init_uo_l_lj_t;                                                   \</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="preprocessor">      for (l_L = 0; l_L < lprod; l_L++)                                       \</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="preprocessor">        MACRO_update_phi_prod_ll_plain(with_PRE_PSI);                         \</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="preprocessor">        MACRO_nfft_B_compute_ ## which_one;                                   \</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="preprocessor">        MACRO_count_uo_l_lj_t;                                                \</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="preprocessor">      } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="preprocessor">    } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="preprocessor">    return;                                                                   \</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="preprocessor">  } </span><span class="comment">/* if(PRE_PSI) */</span><span class="preprocessor">                                                         \</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="preprocessor">  if (ths->nfft_flags & PRE_FG_PSI)                                           \</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="preprocessor">    for(t2 = 0; t2 < ths->d; t2++)                                            \</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> <span class="preprocessor">      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);                                      \</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="preprocessor">      tmpEXP2sq = tmpEXP2*tmpEXP2;                                            \</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> <span class="preprocessor">      tmp2 = K(1.0);                                                          \</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> <span class="preprocessor">      tmp3 = K(1.0);                                                          \</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> <span class="preprocessor">      fg_exp_l[t2][0] = K(1.0);                                               \</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="preprocessor">      for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)                          \</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="preprocessor">        tmp3 = tmp2*tmpEXP2;                                                  \</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="preprocessor">        tmp2 *= tmpEXP2sq;                                                    \</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="preprocessor">        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;                     \</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="preprocessor">    }                                                                         \</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> <span class="preprocessor">    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="preprocessor">      MACRO_init_uo_l_lj_t;                                                   \</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> <span class="preprocessor">      for (t2 = 0; t2 < ths->d; t2++)                                         \</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="preprocessor">        fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];                            \</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="preprocessor">        tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];                                \</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="preprocessor">        tmp1 = K(1.0);                                                        \</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="preprocessor">        for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)       \</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> <span class="preprocessor">          tmp1 *= tmpEXP1;                                                    \</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="preprocessor">          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];         \</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="preprocessor">      for (l_L= 0; l_L < lprod; l_L++)                                        \</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="preprocessor">        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="preprocessor">        MACRO_nfft_B_compute_ ## which_one;                                   \</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> <span class="preprocessor">        MACRO_count_uo_l_lj_t;                                                \</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="preprocessor">      } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> <span class="preprocessor">    } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="preprocessor">    return;                                                                   \</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="preprocessor">  } </span><span class="comment">/* if(PRE_FG_PSI) */</span><span class="preprocessor">                                                      \</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="preprocessor">  if (ths->nfft_flags & FG_PSI)                                               \</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> <span class="preprocessor">    for (t2 = 0; t2 < ths->d; t2++)                                           \</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> <span class="preprocessor">      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);                                      \</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="preprocessor">      tmpEXP2sq = tmpEXP2*tmpEXP2;                                            \</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="preprocessor">      tmp2 = K(1.0);                                                          \</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="preprocessor">      tmp3 = K(1.0);                                                          \</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="preprocessor">      fg_exp_l[t2][0] = K(1.0);                                               \</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="preprocessor">      for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)                         \</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> <span class="preprocessor">        tmp3 = tmp2*tmpEXP2;                                                  \</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="preprocessor">        tmp2 *= tmpEXP2sq;                                                    \</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> <span class="preprocessor">        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;                     \</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> <span class="preprocessor">    }                                                                         \</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="preprocessor">    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="preprocessor">      MACRO_init_uo_l_lj_t;                                                   \</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="preprocessor">      for (t2 = 0; t2 < ths->d; t2++)                                         \</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="preprocessor">        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));\</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="preprocessor">        tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])         \</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="preprocessor">          /ths->b[t2]);                                                       \</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> <span class="preprocessor">        tmp1 = K(1.0);                                                        \</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> <span class="preprocessor">        for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)     \</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> <span class="preprocessor">          tmp1 *= tmpEXP1;                                                    \</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="preprocessor">          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];         \</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> <span class="preprocessor">      for (l_L = 0; l_L < lprod; l_L++)                                       \</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="preprocessor">        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="preprocessor">        MACRO_nfft_B_compute_ ## which_one;                                   \</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="preprocessor">        MACRO_count_uo_l_lj_t;                                                \</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> <span class="preprocessor">      } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> <span class="preprocessor">    } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> <span class="preprocessor">    return;                                                                   \</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> <span class="preprocessor">  } </span><span class="comment">/* if(FG_PSI) */</span><span class="preprocessor">                                                          \</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> <span class="preprocessor">  if (ths->nfft_flags & PRE_LIN_PSI)                                          \</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> <span class="preprocessor">    for (j = 0, fj=f; j<ths->M_total; j++, fj++)                              \</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> <span class="preprocessor">      MACRO_init_uo_l_lj_t;                                                   \</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> <span class="preprocessor">      for (t2 = 0; t2 < ths->d; t2++)                                         \</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="preprocessor">        y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])                    \</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="preprocessor">          * ((R)ths->K))/(ths->m+2);                                          \</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="preprocessor">        ip_u  = LRINT(FLOOR(y[t2]));                                          \</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> <span class="preprocessor">        ip_w  = y[t2]-ip_u;                                                   \</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="preprocessor">        for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)         \</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="preprocessor">          fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]  \</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="preprocessor">            * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]     \</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="preprocessor">            * (ip_w);                                                         \</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> <span class="preprocessor">      }                                                                       \</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="preprocessor">      for (l_L = 0; l_L < lprod; l_L++)                                       \</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="preprocessor">        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="preprocessor">        MACRO_nfft_B_compute_ ## which_one;                                   \</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> <span class="preprocessor">        MACRO_count_uo_l_lj_t;                                                \</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> <span class="preprocessor">      } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> <span class="preprocessor">    } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> <span class="preprocessor">    return;                                                                   \</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> <span class="preprocessor">  } </span><span class="comment">/* if(PRE_LIN_PSI) */</span><span class="preprocessor">                                                     \</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> <span class="preprocessor">  </span><span class="comment">/* no precomputed psi at all */</span><span class="preprocessor">                                             \</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> <span class="preprocessor">  for (j = 0, fj = f; j < ths->M_total; j++, fj++)                            \</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> <span class="preprocessor">    MACRO_init_uo_l_lj_t;                                                     \</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> <span class="preprocessor">    for (l_L = 0; l_L < lprod; l_L++)                                         \</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> <span class="preprocessor">      MACRO_update_phi_prod_ll_plain(without_PRE_PSI);                        \</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> <span class="preprocessor">      MACRO_nfft_B_compute_ ## which_one;                                     \</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="preprocessor">      MACRO_count_uo_l_lj_t;                                                  \</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> <span class="preprocessor">    } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                          \</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> <span class="preprocessor">  } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                              \</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> <span class="preprocessor">} </span><span class="comment">/* nfft_B */</span><span class="preprocessor">                                                                \</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="preprocessor"></span>MACRO_nfft_B(A)</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_B_openmp_A (<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> {</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>   <span class="keywordtype">int</span> lprod; <span class="comment">/* 'regular bandwidth' of matrix B  */</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>   memset(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,0,ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>   <span class="keywordflow">for</span> (k = 0, lprod = 1; k < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; k++)</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     lprod *= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>   {</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>       <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*lprod+l] * ths-><a class="code" href="structnfft__p [...]
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     }</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>   }</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     {</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>       <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>       <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>       <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>       {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>         MACRO_update_phi_prod_ll_plain(with_PRE_PSI);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>   {</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     <span class="keywordflow">for</span>(t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>     {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>       <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>       R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>       R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>       R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>       R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>       fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>       <span class="keywordflow">for</span>(lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>       {</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>       }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     }</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> </div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     {</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>       R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>       R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>       <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>       <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>       <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>       {</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         fg_psi[t2][0] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)];</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>         tmpEXP1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)+1];</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>         tmp1 = K(1.0);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>         <span class="keywordflow">for</span> (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>         {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>           tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>           fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>         }</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>       }</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>       <span class="keywordflow">for</span> (l_L= 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>       {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>         MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>   {</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     {</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>       <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>       R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>       R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>       R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>       R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>       fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>       <span class="keywordflow">for</span> (lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>       {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>         tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>       }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>     {</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>       R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>       R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>       <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>       <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>       <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>       {</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         fg_psi[t2][0] = (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2]-((R)u[t2])/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW [...]
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         tmpEXP1 = EXP(K(2.0)*(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d48 [...]
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>           /ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         tmp1 = K(1.0);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         <span class="keywordflow">for</span> (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>           tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>           fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         }</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       }</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>       <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>       {</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>         MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>   {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>       <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>       <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>       R y[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>       R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>       <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>       R ip_w;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>       <span class="keywordtype">int</span> ip_s = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B [...]
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> </div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>       <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>       {</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>         y[t2] = ((ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96a [...]
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>           * ((R)ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>))/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2 [...]
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>         ip_u  = LRINT(FLOOR(y[t2]));</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>         ip_w  = y[t2]-ip_u;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>         <span class="keywordflow">for</span> (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         {</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>           fg_psi[t2][lj_fg] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s)]</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>             * (1-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>             * (ip_w);</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>         }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>       }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>       <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>       {</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>         MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>   {</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>     <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>     <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> </div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>     ll_plain[0] = 0;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> </div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>     MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>     <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     {</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>       MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vec [...]
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>       MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_B_A(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="preprocessor"></span>  nfft_B_openmp_A(ths);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="preprocessor"></span>  nfft_B_serial_A(ths);</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> index_x_binary_search(<span class="keyword">const</span> <span class="keywordtype">int</span> *ar_x, <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">int</span> key)</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> {</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>   <span class="keywordtype">int</span> left = 0, right = len - 1;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>   <span class="keywordflow">if</span> (len == 1)</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>   <span class="keywordflow">while</span> (left < right - 1)</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>   {</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     <span class="keywordtype">int</span> i = (left + right) / 2;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     <span class="keywordflow">if</span> (ar_x[2*i] >= key)</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>       right = i;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ar_x[2*i] < key)</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>       left = i;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>   }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>   <span class="keywordflow">if</span> (ar_x[2*left] < key && left != len-1)</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     <span class="keywordflow">return</span> left+1;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>   <span class="keywordflow">return</span> left;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> }</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_B_omp_blockwise_init(<span class="keywordtype">int</span> *my_u0, <span class="keywordtype">int</span> *my_o0, <span class="keywordtype">int</span> *min_u_a, <span class="keywordtype">int</span> *max_u_a, <span class="keywordtype">int</span> *min_u_b, <span class="keywordtype">int</span> *max_u_b, <span class="keyword">const< [...]
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> {</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = n[0];</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>   <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>   <span class="keywordtype">int</span> nthreads_used = MIN(nthreads, n0);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>   <span class="keywordtype">int</span> size_per_thread = n0 / nthreads_used;</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>   <span class="keywordtype">int</span> size_left = n0 - size_per_thread * nthreads_used;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>   <span class="keywordtype">int</span> size_g[nthreads_used];</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>   <span class="keywordtype">int</span> offset_g[nthreads_used];</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>   <span class="keywordtype">int</span> my_id = omp_get_thread_num();</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>   <span class="keywordtype">int</span> n_prod_rest = 1;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>   <span class="keywordflow">for</span> (k = 1; k < d; k++)</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>     n_prod_rest *= n[k];</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>   *min_u_a = -1;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   *max_u_a = -1;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>   *min_u_b = -1;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>   *max_u_b = -1;</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>   *my_u0 = -1;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>   *my_o0 = -1;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>   <span class="keywordflow">if</span> (my_id < nthreads_used)</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>   {</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> m22 = 2 * m + 2;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>     offset_g[0] = 0;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>     <span class="keywordflow">for</span> (k = 0; k < nthreads_used; k++)</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>     {</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>       <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>         offset_g[k] = offset_g[k-1] + size_g[k-1];</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>       size_g[k] = size_per_thread;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>       <span class="keywordflow">if</span> (size_left > 0)</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>       {</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>         size_g[k]++;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>         size_left--;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>       }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     }</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>     *my_u0 = offset_g[my_id];</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     *my_o0 = offset_g[my_id] + size_g[my_id] - 1;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     <span class="keywordflow">if</span> (nthreads_used > 1)</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     {</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>       *max_u_a = n_prod_rest*(offset_g[my_id] + size_g[my_id]) - 1;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>       *min_u_a = n_prod_rest*(offset_g[my_id] - m22 + 1);</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>     }</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>     {</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>       *min_u_a = 0;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>       *max_u_a = n_prod_rest * n0 - 1;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>     }</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>     <span class="keywordflow">if</span> (*min_u_a < 0)</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>     {</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>       *min_u_b = n_prod_rest * (offset_g[my_id] - m22 + 1 + n0);</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>       *max_u_b = n_prod_rest * n0 - 1;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>       *min_u_a = 0;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>     }</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     <span class="keywordflow">if</span> (*min_u_b != -1 && *min_u_b <= *max_u_a)</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>     {</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>       *max_u_a = *max_u_b;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>       *min_u_b = -1;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>       *max_u_b = -1;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> <span class="preprocessor"></span>    assert(*min_u_a <= *max_u_a);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>     assert(*min_u_b <= *max_u_b);</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     assert(*min_u_b == -1 || *max_u_a < *min_u_b);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> }</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_B_compute_full_psi(</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>     C *g, <span class="keyword">const</span> <span class="keywordtype">int</span> *psi_index_g, <span class="keyword">const</span> R *psi, <span class="keyword">const</span> C *f,</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> M, <span class="keyword">const</span> <span class="keywordtype">int</span> d, <span class="keyword">const</span> <span class="keywordtype">int</span> *n, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">int</span> nfft_flags, <span class="keyword">con [...]
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> {</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>   <span class="keywordtype">int</span> lprod, lprod_m1;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>   {</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>     <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     <span class="keywordflow">for</span>(t = 0, lprod = 1; t < d; t++)</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>         lprod *= 2 * m + 2;</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>   }</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>   lprod_m1 = lprod / (2 * m + 2);</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span> (nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>   {</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="preprocessor">    #pragma omp parallel private(k)</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>       <span class="keywordtype">int</span> my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>       <span class="keyword">const</span> <span class="keywordtype">int</span> *ar_x = index_x;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>       <span class="keywordtype">int</span> n_prod_rest = 1;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>       <span class="keywordflow">for</span> (k = 1; k < d; k++)</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>         n_prod_rest *= n[k];</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>       nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, &min_u_b, &max_u_b, d, n, m);</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>       <span class="keywordflow">if</span> (min_u_a != -1)</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>       {</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>         k = index_x_binary_search(ar_x, M, min_u_a);</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="preprocessor"></span>        assert(ar_x[2*k] >= min_u_a || k == M-1);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>         <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>           assert(ar_x[2*k-2] < min_u_a);</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="preprocessor"></span>        <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>         {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>           <span class="keywordtype">int</span> l0, lrest;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>           <span class="keywordtype">int</span> u_prod = ar_x[2*k];</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>           <span class="keywordtype">int</span> j = ar_x[2*k+1];</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> </div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>           <span class="keywordflow">if</span> (u_prod < min_u_a || u_prod > max_u_a)</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>           <span class="keywordflow">for</span> (l0 = 0; l0 < 2 * m + 2; l0++)</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>           {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> start_index = psi_index_g[j * lprod + l0 * lprod_m1];</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>             <span class="keywordflow">if</span> (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>               <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>             <span class="keywordflow">for</span> (lrest = 0; lrest < lprod_m1; lrest++)</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>             {</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> l = l0 * lprod_m1 + lrest;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>               g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>             }</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>           }</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>           k++;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>         }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>       }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> </div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>       <span class="keywordflow">if</span> (min_u_b != -1)</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>       {</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         k = index_x_binary_search(ar_x, M, min_u_b);</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="preprocessor"></span>        assert(ar_x[2*k] >= min_u_b || k == M-1);</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>         <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>           assert(ar_x[2*k-2] < min_u_b);</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="preprocessor"></span>        <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         {</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>           <span class="keywordtype">int</span> l0, lrest;</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>           <span class="keywordtype">int</span> u_prod = ar_x[2*k];</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>           <span class="keywordtype">int</span> j = ar_x[2*k+1];</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> </div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>           <span class="keywordflow">if</span> (u_prod < min_u_b || u_prod > max_u_b)</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>           <span class="keywordflow">for</span> (l0 = 0; l0 < 2 * m + 2; l0++)</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>           {</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> start_index = psi_index_g[j * lprod + l0 * lprod_m1];</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>             <span class="keywordflow">if</span> (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>               <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>             <span class="keywordflow">for</span> (lrest = 0; lrest < lprod_m1; lrest++)</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>             {</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> l = l0 * lprod_m1 + lrest;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>               g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>             }</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>           }</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> </div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>           k++;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>         }</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>       }</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     } <span class="comment">/* omp parallel */</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>   } <span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>   {</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>     <span class="keywordtype">int</span> j = (nfft_flags & NFFT_SORT_NODES) ? index_x[2*k+1] : k;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> </div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     {</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="preprocessor"></span>      C val = psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>       C *gref = g + psi_index_g[j * lprod + l];</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>       R *gref_real = (R*) gref;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> </div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="preprocessor">      #pragma omp atomic</span></div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="preprocessor"></span>      gref_real[0] += creal(val);</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> </div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="preprocessor">      #pragma omp atomic</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="preprocessor"></span>      gref_real[1] += cimag(val);</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> <span class="preprocessor"></span>      g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>   }</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> }</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="preprocessor"></span>MACRO_nfft_B(T)</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_B_openmp_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> {</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>   <span class="keywordtype">int</span> lprod; <span class="comment">/* 'regular bandwidth' of matrix B  */</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>   memset(ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>   <span class="keywordflow">for</span> (k = 0, lprod = 1; k < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; k++)</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     lprod *= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>   {</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>     nfft_adjoint_B_compute_full_psi(ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html [...]
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>             ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off paramete [...]
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>   }</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>   {</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     {</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>       <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>       <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> </div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> </div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>       <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>       {</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>         C *lhs;</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>         R *lhs_real;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>         C val;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> </div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>         MACRO_update_phi_prod_ll_plain(with_PRE_PSI);</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>         lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>         lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>         val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> <span class="preprocessor"></span>        lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="preprocessor"></span>        lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> </div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   {</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>     <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>     R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>     <span class="keywordflow">for</span>(t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>     {</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>       <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>       R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>       R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>       R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>       R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>       fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>       <span class="keywordflow">for</span>(lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>       {</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>         tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>         tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>         fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>       }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>     }</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>     {</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>       R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>       R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>       <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>       <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> </div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>       <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>       {</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>         fg_psi[t2][0] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)];</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>         tmpEXP1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)+1];</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>         tmp1 = K(1.0);</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>         <span class="keywordflow">for</span> (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>         {</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>           tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>           fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>         }</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>       }</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>       <span class="keywordflow">for</span> (l_L= 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>       {</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>         C *lhs;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>         R *lhs_real;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>         C val;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> </div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>         MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>         lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>         lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>         val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> <span class="preprocessor"></span>        lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> </div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> <span class="preprocessor"></span>        lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> </div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> </div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>   {</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>     R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>     {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>       <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>       R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>       R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>       R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>       R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>       fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>       <span class="keywordflow">for</span> (lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>       {</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>         tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>         tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>         fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>       }</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>     }</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> </div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     {</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>       R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>       R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>       <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>       <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> </div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>       <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>       {</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>         fg_psi[t2][0] = (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2]-((R)u[t2])/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW [...]
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> </div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>         tmpEXP1 = EXP(K(2.0)*(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d48 [...]
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>           /ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>         tmp1 = K(1.0);</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>         <span class="keywordflow">for</span> (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>         {</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>           tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>           fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>         }</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>       }</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> </div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>       <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>       {</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>         C *lhs;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>         R *lhs_real;</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>         C val;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> </div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>         MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> </div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>         lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>         lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>         val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> </div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="preprocessor"></span>        lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> </div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="preprocessor"></span>        lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> </div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>   {</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>     {</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>       <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>       <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>       R y[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>       R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>       <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>       R ip_w;</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>       <span class="keywordtype">int</span> ip_s = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B [...]
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> </div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>       phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>       ll_plain[0] = 0;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> </div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>       <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>       {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>         y[t2] = ((ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96a [...]
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>           * ((R)ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>))/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2 [...]
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>         ip_u  = LRINT(FLOOR(y[t2]));</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>         ip_w  = y[t2]-ip_u;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>         <span class="keywordflow">for</span> (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>         {</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>           fg_psi[t2][lj_fg] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s)]</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>             * (1-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>             * (ip_w);</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>         }</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>       }</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> </div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>       <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>       {</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>         C *lhs;</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>         R *lhs_real;</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>         C val;</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> </div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>         MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>         lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>         lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>         val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> </div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="preprocessor"></span>        lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> </div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="preprocessor"></span>        lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> </div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> </div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> </div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>   {</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>     <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>     <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>     <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>     <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>     <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>     <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>     R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> </div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>     phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>     ll_plain[0] = 0;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>     MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>     <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     {</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>       C *lhs;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>       R *lhs_real;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>       C val;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>       MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> </div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>       lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>       lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>       val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> </div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="preprocessor">      #pragma omp atomic</span></div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="preprocessor"></span>      lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> </div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="preprocessor">      #pragma omp atomic</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="preprocessor"></span>      lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> </div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>       MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>     } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>   } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_B_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> {</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> <span class="preprocessor"></span>  nfft_B_openmp_T(ths);</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="preprocessor"></span>  nfft_B_serial_T(ths);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment">/* ## specialized version for d=1  ########################################### */</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> </div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_1d_init_fg_exp_l(R *fg_exp_l, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> R b)</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> {</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> tmp2 = 2*m+2;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>   R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> </div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>   fg_exp_b0 = EXP(K(-1.0)/b);</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>   fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>   fg_exp_b1 = fg_exp_b2 =fg_exp_l[0] = K(1.0);</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>   <span class="keywordflow">for</span> (l = 1; l < tmp2; l++)</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>   {</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>     fg_exp_b2 = fg_exp_b1*fg_exp_b0;</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>     fg_exp_b1 *= fg_exp_b0_sq;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>     fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>   }</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> }</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_1d_compute(C *fj, <span class="keyword">const</span> C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>   <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> {</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>   <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>   <span class="keyword">const</span> C *gj;</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>   <span class="keyword">const</span> R *psij;</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>   psij = psij_const;</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> </div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>   nfft_uo2(&u, &o, *xj, n, m);</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> </div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>   <span class="keywordflow">if</span> (u < o)</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>   {</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>     <span class="keywordflow">for</span> (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l <= 2*m+1; l++)</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>       (*fj) += (*psij++) * (*gj++);</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>   }</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>   {</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>     <span class="keywordflow">for</span> (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l < 2*m+1 - o; l++)</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>       (*fj) += (*psij++) * (*gj++);</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>     <span class="keywordflow">for</span> (l = 0, gj = g; l <= o; l++)</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>       (*fj) += (*psij++) * (*gj++);</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>   }</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> }</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_compute_serial(<span class="keyword">const</span> C *fj, C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>   <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> {</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>   <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>   C *gj;</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>   <span class="keyword">const</span> R *psij;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>   psij=psij_const;</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> </div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>   nfft_uo2(&u,&o,*xj, n, m);</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>   <span class="keywordflow">if</span>(u<o)</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>   {</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>     <span class="keywordflow">for</span> (l = 0, gj = g+u; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>       (*gj++) += (*psij++) * (*fj);</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>   }</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>   {</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>     <span class="keywordflow">for</span> (l = 0, gj = g+u; l < 2*m+1-o; l++)</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>       (*gj++) += (*psij++) * (*fj);</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>     <span class="keywordflow">for</span> (l = 0, gj = g; l <= o; l++)</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>       (*gj++) += (*psij++) * (*fj);</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>   }</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> }</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="preprocessor"></span><span class="comment">/* adjoint NFFT one-dimensional case with OpenMP atomic operations */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_compute_omp_atomic(<span class="keyword">const</span> C f, C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>   <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> {</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>   <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>   C *gj;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>   <span class="keywordtype">int</span> index_temp[2*m+2];</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>   nfft_uo2(&u,&o,*xj, n, m);</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> </div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>   <span class="keywordflow">for</span> (l=0; l<=2*m+1; l++)</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     index_temp[l] = (l+u)%n;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> </div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>   <span class="keywordflow">for</span> (l = 0, gj = g+u; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>   {</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     <span class="keywordtype">int</span> i = index_temp[l];</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>     C *lhs = g+i;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>     R *lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>     C val = psij_const[l] * f;</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="preprocessor">    #pragma omp atomic</span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="preprocessor"></span>    lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="preprocessor">    #pragma omp atomic</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="preprocessor"></span>    lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>   }</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> }</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_compute_omp_blockwise(<span class="keyword">const</span> C f, C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>   <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">int</span> my_u0, <span class="keyword">const</span> <span class="keywordtype">int</span> my_o0)</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> {</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>   <span class="keywordtype">int</span> ar_u,ar_o,l;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> </div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>   nfft_uo2(&ar_u,&ar_o,*xj, n, m);</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> </div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>   <span class="keywordflow">if</span>(ar_u<ar_o)</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>   {</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>     <span class="keywordtype">int</span> u = MAX(my_u0,ar_u);</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>     <span class="keywordtype">int</span> o = MIN(my_o0,ar_o);</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>     <span class="keywordtype">int</span> offset_psij = u-ar_u;</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="preprocessor"></span>    assert(offset_psij >= 0);</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>     assert(o-u <= 2*m+1);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     assert(offset_psij+o-u <= 2*m+1);</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>     <span class="keywordflow">for</span> (l = 0; l <= o-u; l++)</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>       g[u+l] += psij_const[offset_psij+l] * f;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>   }</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>   {</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>     <span class="keywordtype">int</span> u = MAX(my_u0,ar_u);</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>     <span class="keywordtype">int</span> o = my_o0;</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>     <span class="keywordtype">int</span> offset_psij = u-ar_u;</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="preprocessor"></span>    assert(offset_psij >= 0);</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>     assert(o-u <= 2*m+1);</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>     assert(offset_psij+o-u <= 2*m+1);</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>     <span class="keywordflow">for</span> (l = 0; l <= o-u; l++)</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>       g[u+l] += psij_const[offset_psij+l] * f;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>     u = my_u0;</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>     o = MIN(my_o0,ar_o);</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>     offset_psij += my_u0-ar_u+n;</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (u<=o)</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>     {</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>       assert(o-u <= 2*m+1);</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>       <span class="keywordflow">if</span> (offset_psij+o-u > 2*m+1)</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>       {</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>         fprintf(stderr, <span class="stringliteral">"ERR: %d %d %d %d %d %d %d\n"</span>, ar_u, ar_o, my_u0, my_o0, u, o, offset_psij);</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>       }</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>       assert(offset_psij+o-u <= 2*m+1);</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>     }</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (l = 0; l <= o-u; l++)</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>       g[u+l] += psij_const[offset_psij+l] * f;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>   }</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> }</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_1d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> {</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0], M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>, m = ths-><a class="cod [...]
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>   <span class="keyword">const</span> C *g = (C*)ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> </div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>   if (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>   {</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>     {</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>       <span class="keywordflow">for</span> (l = 0; l < m2p2; l++)</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*m2p2+l] * g[ths-><a class="code" href="structnfft__ [...]
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>     }</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>   } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>   {</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>     {</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>       nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> + j * (2 * m + 2),</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>         &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>     }</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> </div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>   {</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     R fg_exp_l[m2p2];</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> </div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> </div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>     {</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>       <span class="keyword">const</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2 * j], fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomp [...]
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>       R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>       R psij_const[m2p2];</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> </div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> </div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>       <span class="keywordflow">for</span> (l = 1; l < m2p2; l++)</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>       {</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>         psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>       }</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> </div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>       nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>     }</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> </div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>   {</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>     R fg_exp_l[m2p2];</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> </div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> </div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> </div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     {</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>       R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>       R psij_const[m2p2];</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> </div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>       nfft_uo(ths, (<span class="keywordtype">int</span>)j, &u, &o, 0);</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]-((R)u)/n,0));</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>       fg_psij1 = EXP(K(2.0) * (n * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] - u) / ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>       fg_psij2  = K(1.0);</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> </div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> </div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>       <span class="keywordflow">for</span> (l = 1; l < m2p2; l++)</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>       {</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>         psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>       }</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> </div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>       nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>     }</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> </div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>   {</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>, ip_s = K / (m + 2);</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> </div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> </div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>     {</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>       R ip_y, ip_w;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>       R psij_const[m2p2];</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> </div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>       nfft_uo(ths, (<span class="keywordtype">int</span>)j, &u, &o, 0);</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span> </div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>       ip_y = FABS(n * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] - u) * ((R)ip_s);</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>       ip_w = ip_y - ip_u;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> </div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>       <span class="keywordflow">for</span> (l = 0; l < m2p2; l++)</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>         psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>           + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)] * (ip_w);</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> </div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>       nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>     }</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>   {</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>     <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> </div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> </div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>     {</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>       R psij_const[m2p2];</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> </div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>       nfft_uo(ths, (<span class="keywordtype">int</span>)j, &u, &o, 0);</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> </div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>       <span class="keywordflow">for</span> (l = 0; l < m2p2; l++)</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>         psij_const[l] = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]-((R)((u+l)))/n,0));</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> </div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>       nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>     }</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>   }</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> }</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> </div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> </div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A                        \</span></div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> <span class="preprocessor">          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \</span></div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> <span class="preprocessor">          if (k > 0)                                                          \</span></div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> <span class="preprocessor">            assert(ar_x[2*k-2] < min_u_a);                                    \</span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A</span></div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B                        \</span></div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> <span class="preprocessor">          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \</span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <span class="preprocessor">          if (k > 0)                                                          \</span></div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="preprocessor">            assert(ar_x[2*k-2] < min_u_b);                                    \</span></div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B</span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \</span></div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> <span class="preprocessor">            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> <span class="preprocessor">                ths->psi + j * (2 * m + 2), ths->x + j, n, m, my_u0, my_o0);  \</span></div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> <span class="preprocessor">            R psij_const[2 * m + 2];                                          \</span></div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="preprocessor">            R fg_psij0 = ths->psi[2 * j];                                     \</span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> <span class="preprocessor">            R fg_psij1 = ths->psi[2 * j + 1];                                 \</span></div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> <span class="preprocessor">            R fg_psij2 = K(1.0);                                              \</span></div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> <span class="preprocessor">            psij_const[0] = fg_psij0;                                         \</span></div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> <span class="preprocessor">            for (l = 1; l <= 2 * m + 1; l++)                                  \</span></div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="preprocessor">              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];              \</span></div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="preprocessor">            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \</span></div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <span class="preprocessor">                ths->x + j, n, m, my_u0, my_o0);                              \</span></div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \</span></div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="preprocessor">            R psij_const[2 * m + 2];                                          \</span></div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> <span class="preprocessor">            R fg_psij0, fg_psij1, fg_psij2;                                   \</span></div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="preprocessor">            nfft_uo(ths, j, &u, &o, 0);                                       \</span></div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="preprocessor">            fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));                           \</span></div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="preprocessor">            fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]);       \</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> <span class="preprocessor">            psij_const[0] = fg_psij0;                                         \</span></div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> <span class="preprocessor">            for (l = 1; l <= 2 * m + 1; l++)                                  \</span></div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> <span class="preprocessor">              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];              \</span></div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="preprocessor">            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \</span></div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> <span class="preprocessor">                ths->x + j, n, m, my_u0, my_o0);                              \</span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \</span></div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="preprocessor">            R psij_const[2 * m + 2];                                          \</span></div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <span class="preprocessor">            int ip_u;                                                         \</span></div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="preprocessor">            R ip_y, ip_w;                                                     \</span></div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="preprocessor">            nfft_uo(ths, j, &u, &o, 0);                                       \</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="preprocessor">            ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);                       \</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="preprocessor">            ip_u = LRINT(FLOOR(ip_y));                                        \</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="preprocessor">            ip_w = ip_y - ip_u;                                               \</span></div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> <span class="preprocessor">            for (l = 0; l < 2 * m + 2; l++)                                   \</span></div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="preprocessor">              psij_const[l]                                                   \</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="preprocessor">                  = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)              \</span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> <span class="preprocessor">                      + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);                \</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> <span class="preprocessor">            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \</span></div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> <span class="preprocessor">                ths->x + j, n, m, my_u0, my_o0);                              \</span></div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \</span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="preprocessor">            R psij_const[2 * m + 2];                                          \</span></div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="preprocessor">            nfft_uo(ths, j, &u, &o, 0);                                       \</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="preprocessor">            for (l = 0; l <= 2 * m + 1; l++)                                  \</span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="preprocessor">              psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));              \</span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="preprocessor">            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \</span></div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> <span class="preprocessor">                ths->x + j, n, m, my_u0, my_o0);                              \</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(whichone)                       \</span></div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="preprocessor">    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \</span></div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="preprocessor">      _Pragma("omp parallel private(k)")                                      \</span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="preprocessor">        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \</span></div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> <span class="preprocessor">        int *ar_x = ths->index_x;                                             \</span></div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="preprocessor">        nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \</span></div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> <span class="preprocessor">                                      &min_u_b, &max_u_b, 1, &n, m);      \</span></div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="preprocessor">        if (min_u_a != -1)                                                    \</span></div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <span class="preprocessor">          k = index_x_binary_search(ar_x, M, min_u_a);                        \</span></div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="preprocessor">          MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A                      \</span></div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="preprocessor">          while (k < M)                                                       \</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> <span class="preprocessor">          {                                                                   \</span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="preprocessor">            int u_prod = ar_x[2*k];                                           \</span></div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="preprocessor">            int j = ar_x[2*k+1];                                              \</span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="preprocessor">            if (u_prod < min_u_a || u_prod > max_u_a)                         \</span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="preprocessor">              break;                                                          \</span></div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="preprocessor">            MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> <span class="preprocessor">            k++;                                                              \</span></div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> <span class="preprocessor">          }                                                                   \</span></div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> <span class="preprocessor">        if (min_u_b != -1)                                                    \</span></div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="preprocessor">          k = index_x_binary_search(ar_x, M, min_u_b);                        \</span></div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <span class="preprocessor">          MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B                      \</span></div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="preprocessor">          while (k < M)                                                       \</span></div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> <span class="preprocessor">          {                                                                   \</span></div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> <span class="preprocessor">            int u_prod = ar_x[2*k];                                           \</span></div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> <span class="preprocessor">            int j = ar_x[2*k+1];                                              \</span></div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> <span class="preprocessor">            if (u_prod < min_u_b || u_prod > max_u_b)                         \</span></div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> <span class="preprocessor">              break;                                                          \</span></div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="preprocessor">            MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \</span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="preprocessor">            k++;                                                              \</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> <span class="preprocessor">          }                                                                   \</span></div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <span class="preprocessor">      } </span><span class="comment">/* omp parallel */</span><span class="preprocessor">                                                    \</span></div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> <span class="preprocessor">      return;                                                                 \</span></div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> <span class="preprocessor">    } </span><span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span><span class="preprocessor">                                    \</span></div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> {</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0], M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>, m = ths-><a class="cod [...]
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>   C *g = (C*)ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>   memset(g,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>   {</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>     nfft_adjoint_B_compute_full_psi(g, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>, ths-><a class="code" href= [...]
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>         1, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, m, ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>, ths-><a cl [...]
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>   } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> </div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>   {</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_PSI)</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>     {</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> #ifdef _OPENMP</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>       nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> + j * (2 * m + 2), ths [...]
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme." [...]
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> </div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> </div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>   {</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>     R fg_exp_l[2 * m + 2];</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> </div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> </div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_FG_PSI)</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> </div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>     {</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>       R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>       R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2 * j];</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>       R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2 * j + 1];</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>       R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>       <span class="keywordflow">for</span> (l = 1; l <= 2 * m + 1; l++)</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>       {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>         psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>       }</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> </div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> </div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> </div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>   {</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>     R fg_exp_l[2 * m + 2];</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> </div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> </div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(FG_PSI)</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>     {</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>       <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>       R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>       R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> </div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>       nfft_uo(ths, j, &u, &o, 0);</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]-((R)u)/n,0));</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>       fg_psij1 = EXP(K(2.0) * (n * (ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]) - u) / ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>       <span class="keywordflow">for</span> (l = 1; l <= 2 * m + 1; l++)</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>       {</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>         psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>       }</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> </div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> </div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>   {</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> ip_s = K / (m + 2);</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> </div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> </div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_LIN_PSI)</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> <span class="preprocessor">    #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>     {</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>       <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>       R ip_y, ip_w;</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>       R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> </div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>       nfft_uo(ths, j, &u, &o, 0);</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> </div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>       ip_y = FABS(n * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] - u) * ((R)ip_s);</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>       ip_w = ip_y - ip_u;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>       <span class="keywordflow">for</span> (l = 0; l < 2 * m + 2; l++)</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>         psij_const[l]</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>             = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>                 + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)] * (ip_w);</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> </div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="preprocessor"></span>      nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> </div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> </div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> <span class="preprocessor"></span>  MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(NO_PSI)</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>   {</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>     <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>     R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> </div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>     nfft_uo(ths, j, &u, &o, 0);</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> </div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>     <span class="keywordflow">for</span> (l = 0; l <= 2 * m + 1; l++)</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>       psij_const[l] = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]-((R)((u+l)))/n,0));</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> </div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="preprocessor"></span>    nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> <span class="preprocessor"></span>    nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> }</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> </div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> <span class="keywordtype">void</span> nfft_trafo_1d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span> {</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0], N2 = N/2, n = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>   C *f_hat1 = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, *f_hat2 = (C*)&ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[N2];</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> </div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>   ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a> = ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>   ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> = ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> </div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>   {</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>     C *g_hat1 = (C*)&ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[n-N/2], *g_hat2 = (C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>     R *c_phi_inv1, *c_phi_inv2;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> </div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>     TIC(0)</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>       <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k++)</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>         ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[k] = 0.0;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>     }</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> <span class="preprocessor"></span>    memset(ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>, 0, ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>     {</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>       <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>       c_phi_inv1 = ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[0];</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>       c_phi_inv2 = &ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[0][N2];</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> </div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k = 0; k < N2; k++)</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>       {</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>         g_hat1[k] = f_hat1[k] * c_phi_inv1[k];</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>         g_hat2[k] = f_hat2[k] * c_phi_inv2[k];</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>       }</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>     }</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>     {</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>       <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k = 0; k < N2; k++)</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>       {</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>         g_hat1[k] = f_hat1[k] / (PHI_HUT(k-N2,0));</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>         g_hat2[k] = f_hat2[k] / (PHI_HUT(k,0));</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>       }</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>     }</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>     TOC(0)</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> </div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>     TIC_FFTW(1)</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>     fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>     TOC_FFTW(1);</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> </div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>     TIC(2);</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>     nfft_trafo_1d_B(ths);</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>     TOC(2);</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>   }</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> }</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> </div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> <span class="keywordtype">void</span> nfft_adjoint_1d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> {</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>   <span class="keywordtype">int</span> n,N;</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>   C *g_hat1,*g_hat2,*f_hat1,*f_hat2;</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>   R *c_phi_inv1, *c_phi_inv2;</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> </div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>   N=ths->N[0];</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>   n=ths->n[0];</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> </div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>   ths->g_hat=ths->g1;</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>   ths->g=ths->g2;</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> </div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>   f_hat1=(C*)ths->f_hat;</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>   f_hat2=(C*)&ths->f_hat[N/2];</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>   g_hat1=(C*)&ths->g_hat[n-N/2];</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>   g_hat2=(C*)ths->g_hat;</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> </div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>   TIC(2)</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>   nfft_adjoint_1d_B(ths);</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>   TOC(2)</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> </div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>   TIC_FFTW(1)</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>   fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>   TOC_FFTW(1);</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> </div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>   TIC(0)</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>   if(ths->nfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>   {</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>     c_phi_inv1=ths->c_phi_inv[0];</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>     c_phi_inv2=&ths->c_phi_inv[0][N/2];</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < N/2; k++)</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>     {</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>       f_hat1[k] = g_hat1[k] * c_phi_inv1[k];</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>       f_hat2[k] = g_hat2[k] * c_phi_inv2[k];</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>     }</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>   }</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>   {</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>     <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> </div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < N/2; k++)</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>     {</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>       f_hat1[k] = g_hat1[k] / (PHI_HUT(k-N/2,0));</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>       f_hat2[k] = g_hat2[k] / (PHI_HUT(k,0));</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>     }</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>   }</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>   TOC(0)</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span> }</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> </div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> </div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span> <span class="comment">/* ############################################################ SPECIFIC VERSIONS FOR d=2 */</span></div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> </div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_2d_init_fg_exp_l(R *fg_exp_l, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> R b)</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span> {</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>   R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span> </div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>   fg_exp_b0 = EXP(K(-1.0)/b);</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>   fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>   fg_exp_b1 = K(1.0);</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>   fg_exp_b2 = K(1.0);</div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>   fg_exp_l[0] = K(1.0);</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>   <span class="keywordflow">for</span>(l=1; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>     {</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>       fg_exp_b2 = fg_exp_b1*fg_exp_b0;</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>       fg_exp_b1 *= fg_exp_b0_sq;</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>       fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>     }</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> }</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> </div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_2d_compute(C *fj, <span class="keyword">const</span> C *g,</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>           <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>           <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>           <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> {</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>   <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>   <span class="keyword">const</span> C *gj;</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>   <span class="keyword">const</span> R *psij0,*psij1;</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> </div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>   psij0=psij_const0;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>   psij1=psij_const1;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span> </div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>   nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span> </div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>   *fj=0;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span> </div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>   <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>       <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>     <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>     {</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>     }</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>     <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>     {</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>         gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>     }</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>       <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>       {</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>     {</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>     }</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>     {</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>         gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     }</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>       }</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>       {</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>     {</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>         gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>     }</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>     {</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>         gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>         gj=g+l0*n1;</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>       (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>     }</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>       }</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span> }</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span> </div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span> <span class="preprocessor"></span><span class="comment">/* adjoint NFFT two-dimensional case with OpenMP atomic operations */</span></div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_compute_omp_atomic(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>             <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>             <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span> {</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>   <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2); </div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span> </div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp0[2*m+2];</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> </div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>   nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span> </div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>   <span class="keywordflow">for</span> (l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>     index_temp0[l0] = (u0+l0)%n0;</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span> </div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>   <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>     index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span> </div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>   {</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>     <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>     {</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i = index_temp0[l0] * n1 + index_temp1[l1];</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>       C *lhs = g+i;</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>       R *lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>       C val = psij_const0[l0] * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span> </div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span> <span class="preprocessor">      #pragma omp atomic</span></div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span> <span class="preprocessor"></span>      lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span> </div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> <span class="preprocessor">      #pragma omp atomic</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span> <span class="preprocessor"></span>      lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>     }</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>   }</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span> }</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_compute_omp_blockwise(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>             <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>             <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>       <span class="keyword">const</span> <span class="keywordtype">int</span> my_u0, <span class="keyword">const</span> <span class="keywordtype">int</span> my_o0)</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> {</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>   <span class="keywordtype">int</span> ar_u0,ar_o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2); </div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span> </div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>   nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span> </div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>   <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>     index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> </div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>   <span class="keywordflow">if</span>(ar_u0<ar_o0)</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>   {</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>     <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>     <span class="keywordtype">int</span> o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>     <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> <span class="preprocessor"></span>    assert(offset_psij >= 0);</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>     assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>     assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>     <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>     {</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>       <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span> </div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>         g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>     }</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>   }</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>   {</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>     <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>     <span class="keywordtype">int</span> o0 = my_o0;</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>     <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> <span class="preprocessor"></span>    assert(offset_psij >= 0);</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>     assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>     assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>     <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>     {</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>       <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span> </div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>         g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>     }</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span> </div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>     u0 = my_u0;</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>     o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>     offset_psij += my_u0-ar_u0+n0;</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> </div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (u0<=o0)</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>     {</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>       assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>       assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>     }</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>     <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>     {</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>       <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span> </div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>         g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>     }</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>   }</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span> }</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_compute_serial(<span class="keyword">const</span> C *fj, C *g,</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>             <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>             <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> {</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>   <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>   C *gj;</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>   <span class="keyword">const</span> R *psij0,*psij1;</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span> </div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>   psij0=psij_const0;</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>   psij1=psij_const1;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span> </div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>   nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span> </div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>   <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>       <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>     <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>     {</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>     (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>     }</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>     <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>     {</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>         gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>     }</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>       <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>       {</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>     {</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>     }</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>     {</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>         gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>     }</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>       }</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>       {</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>     {</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>         gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>         gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>     }</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>     {</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>         gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>         gj=g+l0*n1;</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>       (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>     }</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>       }</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span> }</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_2d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> {</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>   <span class="keyword">const</span> C *g = (C*)ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span> </div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span> </div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>   {</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>     {</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>       <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*lprod+l] * g[ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>     }</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>   } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> </div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>   {</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>     {</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>       nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*2*(2*m+2), ths-><a class="code" [...]
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>     }</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span> </div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span> </div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>   {</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>     R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> </div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> </div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>     {</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>       R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>       R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2];</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>       R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2+1];</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>       R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> </div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>       {</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>       }</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> </div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>       fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)];</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>       fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)+1];</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>       {</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>       }</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> </div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>       nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+2*j, ths-><a class="code" href="struc [...]
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>     }</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> </div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span> </div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>   {</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>     R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> </div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> </div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span> </div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>     {</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>       R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>       R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> </div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>       fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>       {</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>       }</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> </div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>       fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>       {</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>       }</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span> </div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>       nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+2*j, ths-><a class="code" href="struc [...]
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>     }</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> </div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> </div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>   {</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>, ip_s = K / (m + 2);</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span> </div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span> </div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>     {</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>       R ip_y, ip_w;</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>       R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span> </div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>       ip_y = FABS(n0*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j] - u)*((R)ip_s);</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>         psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme. [...]
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span> </div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>       ip_y = FABS(n1*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] - u)*((R)ip_s);</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>         psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputa [...]
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span> </div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>       nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+2*j, ths-><a class="code" href="struc [...]
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>     }</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span> </div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span> </div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span> </div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>   {</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>     R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>     <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span> </div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>     nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>       psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span> </div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>     nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>       psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span> </div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>     nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+2*j, ths-><a class="code" href="structn [...]
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>   }</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span> }</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span> </div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A                        \</span></div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span> <span class="preprocessor">          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \</span></div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> <span class="preprocessor">          if (k > 0)                                                          \</span></div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span> <span class="preprocessor">            assert(ar_x[2*k-2] < min_u_a);                                    \</span></div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A</span></div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B                        \</span></div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span> <span class="preprocessor">          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \</span></div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span> <span class="preprocessor">          if (k > 0)                                                          \</span></div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span> <span class="preprocessor">            assert(ar_x[2*k-2] < min_u_b);                                    \</span></div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B</span></div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \</span></div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span> <span class="preprocessor">            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span> <span class="preprocessor">                ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2),               \</span></div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span> <span class="preprocessor">                ths->x+2*j, ths->x+2*j+1, n0, n1, m, my_u0, my_o0);</span></div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \</span></div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span> <span class="preprocessor">            R psij_const[2*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span> <span class="preprocessor">            R fg_psij0 = ths->psi[2*j*2];                                     \</span></div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span> <span class="preprocessor">            R fg_psij1 = ths->psi[2*j*2+1];                                   \</span></div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span> <span class="preprocessor">            R fg_psij2 = K(1.0);                                              \</span></div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span> <span class="preprocessor">            psij_const[0] = fg_psij0;                                         \</span></div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span> <span class="preprocessor">              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \</span></div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span> <span class="preprocessor">            fg_psij0 = ths->psi[2*(j*2+1)];                                   \</span></div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span> <span class="preprocessor">            fg_psij1 = ths->psi[2*(j*2+1)+1];                                 \</span></div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span> <span class="preprocessor">            psij_const[2*m+2] = fg_psij0;                                     \</span></div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span> <span class="preprocessor">              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \</span></div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span> <span class="preprocessor">            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \</span></div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span> <span class="preprocessor">                n0, n1, m, my_u0, my_o0);                                     \</span></div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \</span></div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span> <span class="preprocessor">            R psij_const[2*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> <span class="preprocessor">            R fg_psij0, fg_psij1, fg_psij2;                                   \</span></div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,0);                                           \</span></div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span> <span class="preprocessor">            fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));                        \</span></div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span> <span class="preprocessor">            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);          \</span></div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span> <span class="preprocessor">            psij_const[0] = fg_psij0;                                         \</span></div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span> <span class="preprocessor">              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \</span></div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,1);                                           \</span></div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span> <span class="preprocessor">            fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));                      \</span></div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span> <span class="preprocessor">            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);        \</span></div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> <span class="preprocessor">            psij_const[2*m+2] = fg_psij0;                                     \</span></div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span> <span class="preprocessor">              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \</span></div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span> <span class="preprocessor">            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \</span></div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span> <span class="preprocessor">                n0, n1, m, my_u0, my_o0);                                     \</span></div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \</span></div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span> <span class="preprocessor">            R psij_const[2*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span> <span class="preprocessor">            int ip_u;                                                         \</span></div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span> <span class="preprocessor">            R ip_y, ip_w;                                                     \</span></div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,0);                                           \</span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span> <span class="preprocessor">            ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s);                      \</span></div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span> <span class="preprocessor">            ip_u = LRINT(FLOOR(ip_y));                                        \</span></div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span> <span class="preprocessor">            ip_w = ip_y-ip_u;                                                 \</span></div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span> <span class="preprocessor">            for(l=0; l < 2*m+2; l++)                                          \</span></div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span> <span class="preprocessor">              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +      \</span></div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span> <span class="preprocessor">                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);                          \</span></div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,1);                                           \</span></div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span> <span class="preprocessor">            ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s);                    \</span></div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span> <span class="preprocessor">            ip_u = LRINT(FLOOR(ip_y));                                        \</span></div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span> <span class="preprocessor">            ip_w = ip_y-ip_u;                                                 \</span></div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span> <span class="preprocessor">            for(l=0; l < 2*m+2; l++)                                          \</span></div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span> <span class="preprocessor">              psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +  \</span></div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span> <span class="preprocessor">                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                    \</span></div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span> <span class="preprocessor">            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \</span></div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span> <span class="preprocessor">                n0, n1, m, my_u0, my_o0);                                     \</span></div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \</span></div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span> <span class="preprocessor">            R psij_const[2*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,0);                                           \</span></div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span> <span class="preprocessor">            for(l=0;l<=2*m+1;l++)                                             \</span></div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span> <span class="preprocessor">              psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));             \</span></div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,1);                                           \</span></div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> <span class="preprocessor">            for(l=0;l<=2*m+1;l++)                                             \</span></div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> <span class="preprocessor">              psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));     \</span></div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> <span class="preprocessor">            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \</span></div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span> <span class="preprocessor">                n0, n1, m, my_u0, my_o0);                                     \</span></div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(whichone)                       \</span></div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span> <span class="preprocessor">    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \</span></div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span> <span class="preprocessor">      _Pragma("omp parallel private(k)")                                      \</span></div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span> <span class="preprocessor">        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \</span></div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> <span class="preprocessor">        int *ar_x = ths->index_x;                                             \</span></div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> <span class="preprocessor">        nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \</span></div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span> <span class="preprocessor">            &min_u_b, &max_u_b, 2, ths->n, m);                                \</span></div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span> <span class="preprocessor">        if (min_u_a != -1)                                                    \</span></div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span> <span class="preprocessor">          k = index_x_binary_search(ar_x, M, min_u_a);                        \</span></div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span> <span class="preprocessor">          MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A                      \</span></div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span> <span class="preprocessor">          while (k < M)                                                       \</span></div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span> <span class="preprocessor">          {                                                                   \</span></div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span> <span class="preprocessor">            int u_prod = ar_x[2*k];                                           \</span></div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span> <span class="preprocessor">            int j = ar_x[2*k+1];                                              \</span></div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> <span class="preprocessor">            if (u_prod < min_u_a || u_prod > max_u_a)                         \</span></div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span> <span class="preprocessor">              break;                                                          \</span></div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span> <span class="preprocessor">            MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \</span></div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span> <span class="preprocessor">            k++;                                                              \</span></div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span> <span class="preprocessor">          }                                                                   \</span></div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span> <span class="preprocessor">        if (min_u_b != -1)                                                    \</span></div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span> <span class="preprocessor">          int k = index_x_binary_search(ar_x, M, min_u_b);                    \</span></div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span> <span class="preprocessor">          MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B                      \</span></div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span> <span class="preprocessor">          while (k < M)                                                       \</span></div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span> <span class="preprocessor">          {                                                                   \</span></div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> <span class="preprocessor">            int u_prod = ar_x[2*k];                                           \</span></div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span> <span class="preprocessor">            int j = ar_x[2*k+1];                                              \</span></div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span> <span class="preprocessor">            if (u_prod < min_u_b || u_prod > max_u_b)                         \</span></div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span> <span class="preprocessor">              break;                                                          \</span></div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span> <span class="preprocessor">            MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \</span></div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span> <span class="preprocessor">            k++;                                                              \</span></div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span> <span class="preprocessor">          }                                                                   \</span></div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> <span class="preprocessor">      } </span><span class="comment">/* omp parallel */</span><span class="preprocessor">                                                    \</span></div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span> <span class="preprocessor">      return;                                                                 \</span></div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span> <span class="preprocessor">    } </span><span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span><span class="preprocessor">                                    \</span></div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span> </div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span> {</div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>   C* g = (C*) ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span> </div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>   memset(g,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span> </div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>   {</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>     nfft_adjoint_B_compute_full_psi(g, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>, ths-><a class="code" href= [...]
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>         2, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, m, ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>, ths-><a cl [...]
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>   } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> </div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>   {</div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_PSI)</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>     {</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span> #ifdef _OPENMP</div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>       nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*2*(2*m+2), ths->< [...]
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">p [...]
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>   {</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>     R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span> </div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span> </div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_FG_PSI)</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span> </div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>     {</div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>       R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>       R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2];</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>       R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2+1];</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>       R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span> </div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>       {</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>       }</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span> </div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>       fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)];</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>       fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)+1];</div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>       {</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>       }</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span> </div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles. [...]
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</ [...]
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span> </div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> </div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>   {</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>     R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span> </div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span> </div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span> </div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(FG_PSI)</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>     {</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>       R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>       R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span> </div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>       fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>       {</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>       }</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span> </div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>       fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>       {</div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>       }</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span> </div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles. [...]
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</ [...]
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span> </div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span> </div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>   {</div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;</div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> ip_s = K / (m + 2);</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span> </div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span> </div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_LIN_PSI)</div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span> <span class="preprocessor">    #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>     {</div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>       <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>       R ip_y, ip_w;</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>       R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span> </div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>       ip_y = FABS(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]) - u)*((R)ip_s);</div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>         psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span> </div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>       ip_y = FABS(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]) - u)*((R)ip_s);</div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>         psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span> </div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles. [...]
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span> <span class="preprocessor"></span>      nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</ [...]
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>     } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span> </div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span> </div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span> <span class="preprocessor"></span>  MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(NO_PSI)</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>   {</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>     <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>     R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span> </div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>     nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>       psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span> </div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>     nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>       psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span> </div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span> <span class="preprocessor"></span>    nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles."> [...]
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span> <span class="preprocessor"></span>    nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> [...]
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span> }</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span> </div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span> </div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span> <span class="keywordtype">void</span> nfft_trafo_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span> {</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>   <span class="keywordtype">int</span> k0,k1,n0,n1,N0,N1;</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>   C *g_hat,*f_hat;</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;</div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>   R ck01, ck02, ck11, ck12;</div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>   C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span> </div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>   ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>   ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span> </div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>   N0=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>   N1=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>   n0=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>   n1=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span> </div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>   f_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>   g_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> </div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>   TIC(0)</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span> <span class="preprocessor"></span><span class="preprocessor">  #pragma omp parallel for default(shared) private(k0)</span></div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k0 = 0; k0 < ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k0++)</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>     ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[k0] = 0.0;</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span> #<span class="keywordflow">else</span></div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>   memset(ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>     {</div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>       c_phi_inv01=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[0];</div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>       c_phi_inv02=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[0][N0/2];</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span> </div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)</span></div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>       {</div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>         ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>         ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span> </div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>         c_phi_inv11=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[1];</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>         c_phi_inv12=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[1][N1/2];</div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span> </div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>         g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>         f_hat11=f_hat + k0*N1;</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>         g_hat21=g_hat + k0*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>         f_hat21=f_hat + ((N0/2)+k0)*N1;</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>         g_hat12=g_hat + (n0-(N0/2)+k0)*n1;</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>         f_hat12=f_hat + k0*N1+(N1/2);</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>         g_hat22=g_hat + k0*n1;</div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>         f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);</div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span> </div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>         <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>         {</div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>           ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>           ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span> </div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>           g_hat11[k1] = f_hat11[k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>           g_hat21[k1] = f_hat21[k1] * ck02 * ck11;</div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>           g_hat12[k1] = f_hat12[k1] * ck01 * ck12;</div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>           g_hat22[k1] = f_hat22[k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>         }</div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>       }</div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>     }</div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)</span></div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>       {</div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>   ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>   ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>   <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>     {</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>       ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>       ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>       g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] = f_hat[k0*N1+k1]             * ck01 * ck11;</div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>       g_hat[k0*n1+n1-N1/2+k1]           = f_hat[(N0/2+k0)*N1+k1]      * ck02 * ck11;</div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>       g_hat[(n0-N0/2+k0)*n1+k1]         = f_hat[k0*N1+N1/2+k1]        * ck01 * ck12;</div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>       g_hat[k0*n1+k1]                   = f_hat[(N0/2+k0)*N1+N1/2+k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>     }</div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>       }</div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span> </div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>   TOC(0)</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span> </div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>   TIC_FFTW(1)</div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>   fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>   TOC_FFTW(1);</div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span> </div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>   TIC(2);</div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>   nfft_trafo_2d_B(ths);</div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>   TOC(2);</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span> }</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span> </div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span> <span class="keywordtype">void</span> nfft_adjoint_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span> {</div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>   <span class="keywordtype">int</span> k0,k1,n0,n1,N0,N1;</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>   C *g_hat,*f_hat;</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>   R ck01, ck02, ck11, ck12;</div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>   C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;</div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span> </div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>   ths->g_hat=ths->g1;</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>   ths->g=ths->g2;</div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span> </div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>   N0=ths->N[0];</div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>   N1=ths->N[1];</div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>   n0=ths->n[0];</div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>   n1=ths->n[1];</div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span> </div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>   f_hat=(C*)ths->f_hat;</div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>   g_hat=(C*)ths->g_hat;</div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span> </div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>   TIC(2);</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>   nfft_adjoint_2d_B(ths);</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>   TOC(2);</div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span> </div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>   TIC_FFTW(1)</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>   fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>   TOC_FFTW(1);</div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span> </div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>   TIC(0)</div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>   if(ths->nfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>     {</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>       c_phi_inv01=ths->c_phi_inv[0];</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>       c_phi_inv02=&ths->c_phi_inv[0][N0/2];</div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span> </div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)</span></div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>       {</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>         ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>         ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span> </div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>         c_phi_inv11=ths->c_phi_inv[1];</div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>         c_phi_inv12=&ths->c_phi_inv[1][N1/2];</div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span> </div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>         g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>         f_hat11=f_hat + k0*N1;</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>         g_hat21=g_hat + k0*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>         f_hat21=f_hat + ((N0/2)+k0)*N1;</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>         g_hat12=g_hat + (n0-(N0/2)+k0)*n1;</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>         f_hat12=f_hat + k0*N1+(N1/2);</div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>         g_hat22=g_hat + k0*n1;</div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>         f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);</div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span> </div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>         <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>         {</div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>           ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>           ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span> </div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>           f_hat11[k1] = g_hat11[k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>           f_hat21[k1] = g_hat21[k1] * ck02 * ck11;</div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>           f_hat12[k1] = g_hat12[k1] * ck01 * ck12;</div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>           f_hat22[k1] = g_hat22[k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>         }</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>       }</div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>     }</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)</span></div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>       {</div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>   ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>   ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>   <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>     {</div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>       ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>       ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>       f_hat[k0*N1+k1]             = g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>       f_hat[(N0/2+k0)*N1+k1]      = g_hat[k0*n1+n1-N1/2+k1]           * ck02 * ck11;</div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>       f_hat[k0*N1+N1/2+k1]        = g_hat[(n0-N0/2+k0)*n1+k1]         * ck01 * ck12;</div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>       f_hat[(N0/2+k0)*N1+N1/2+k1] = g_hat[k0*n1+k1]                   * ck02 * ck12;</div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>     }</div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>       }</div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>   TOC(0)</div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span> }</div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span> </div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span> <span class="comment">/* ############################################################ SPECIFIC VERSIONS FOR d=3 */</span></div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span> </div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_3d_init_fg_exp_l(R *fg_exp_l, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> R b)</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span> {</div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>   <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>   R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;</div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span> </div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>   fg_exp_b0 = EXP(-1.0/b);</div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>   fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;</div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>   fg_exp_b1 = K(1.0);</div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>   fg_exp_b2 = K(1.0);</div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>   fg_exp_l[0] = K(1.0);</div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>   <span class="keywordflow">for</span>(l=1; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>     {</div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>       fg_exp_b2 = fg_exp_b1*fg_exp_b0;</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>       fg_exp_b1 *= fg_exp_b0_sq;</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>       fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>     }</div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span> }</div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span> </div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_3d_compute(C *fj, <span class="keyword">const</span> C *g,</div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>           <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>           <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>           <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span> {</div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>   <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>   <span class="keyword">const</span> C *gj;</div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>   <span class="keyword">const</span> R *psij0,*psij1,*psij2;</div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span> </div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>   psij0=psij_const0;</div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>   psij1=psij_const1;</div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>   psij2=psij_const2;</div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span> </div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>   nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>   nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span> </div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>   *fj=0;</div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span> </div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>   <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>     <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>     {</div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>       psij1=psij_const1;</div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>         {</div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>     <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>       (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>         }</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>     }</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2)*/</span></div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>     {</div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>       psij1=psij_const1;</div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>         {</div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>     <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>       (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>     <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>       (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>         }</div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>     }</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>     <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1)*/</span></div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>     {</div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>       psij1=psij_const1;</div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>       <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>         {</div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>     <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>       (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>         }</div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>       <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>         {</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>     gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>     <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>       (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>         }</div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>     }</div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>   {</div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>     <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>       {</div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>     {</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>     }</div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>     {</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>       gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>       gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>     }</div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>       }</div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>   }</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>   <span class="keywordflow">else</span><span class="comment">/* asserts (u0>o0) */</span></div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>     <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>   {</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>       {</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>     {</div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>     }</div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>       }</div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span> </div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>       {</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>     {</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>     }</div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>       }</div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>   }</div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>   {</div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>       {</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>     {</div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>     }</div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>       }</div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span> </div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>       {</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>     {</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>       gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>     }</div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>       }</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>   }</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>     <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1) */</span></div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>   {</div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>       {</div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>     {</div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>     }</div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>     {</div>
+<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>       gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>     }</div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>       }</div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>       {</div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>     {</div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>     }</div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>     {</div>
+<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>       gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>     }</div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>       }</div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>   }</div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>   {</div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>       {</div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>     {</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>     }</div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>     {</div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>       gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>       gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>     }</div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>       }</div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span> </div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>       {</div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>     {</div>
+<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>       gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>     }</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>     {</div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>       gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>       gj=g+(l0*n1+l1)*n2;</div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>         (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>     }</div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>       }</div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>   }</div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span> }</div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span> </div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_compute_omp_blockwise(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>             <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>             <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>       <span class="keyword">const</span> <span class="keywordtype">int</span> my_u0, <span class="keyword">const</span> <span class="keywordtype">int</span> my_o0)</div>
+<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span> {</div>
+<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>   <span class="keywordtype">int</span> ar_u0,ar_o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span> </div>
+<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp2[2*m+2];</div>
+<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span> </div>
+<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>   nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);</div>
+<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>   nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span> </div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>   <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>     index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span> </div>
+<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>   <span class="keywordflow">for</span> (l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>     index_temp2[l2] = (u2+l2)%n2;</div>
+<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span> </div>
+<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>   <span class="keywordflow">if</span>(ar_u0<ar_o0)</div>
+<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>   {</div>
+<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>     <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>     <span class="keywordtype">int</span> o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>     <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span> <span class="preprocessor"></span>    assert(offset_psij >= 0);</div>
+<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>     assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>     assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span>     <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span>     {</div>
+<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span>       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>       <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span> </div>
+<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>       {</div>
+<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i1 = (i0 + index_temp1[l1]) * n2;</div>
+<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>         <span class="keyword">const</span> C val1 = psij_const1[l1];</div>
+<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span> </div>
+<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>         <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>           g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>       }</div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>     }  </div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>   }</div>
+<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>   {</div>
+<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>     <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>     <span class="keywordtype">int</span> o0 = my_o0;</div>
+<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>     <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span> <span class="preprocessor"></span>    assert(offset_psij >= 0);</div>
+<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>     assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>     assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>     <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>     {</div>
+<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>       <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span> </div>
+<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>       {</div>
+<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i1 = (i0 + index_temp1[l1]) * n2;</div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>         <span class="keyword">const</span> C val1 = psij_const1[l1];</div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span> </div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>         <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>           g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>       }</div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>     }</div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span> </div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>     u0 = my_u0;</div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>     o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>     offset_psij += my_u0-ar_u0+n0;</div>
+<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span> </div>
+<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (u0<=o0)</div>
+<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>     {</div>
+<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>       assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>       assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>     }</div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>     {</div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>       <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span> </div>
+<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>       {</div>
+<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i1 = (i0 + index_temp1[l1]) * n2;</div>
+<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>         <span class="keyword">const</span> C val1 = psij_const1[l1];</div>
+<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span> </div>
+<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>         <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>           g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>       }</div>
+<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>     }</div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>   }</div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span> }</div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span> <span class="preprocessor"></span><span class="comment">/* adjoint NFFT three-dimensional case with OpenMP atomic operations */</span></div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_compute_omp_atomic(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>             <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>             <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span> {</div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>   <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span> </div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp0[2*m+2];</div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp2[2*m+2];</div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span> </div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>   nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>   nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span> </div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>   <span class="keywordflow">for</span> (l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>     index_temp0[l0] = (u0+l0)%n0;</div>
+<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span> </div>
+<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>   <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>     index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span> </div>
+<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>   <span class="keywordflow">for</span> (l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>     index_temp2[l2] = (u2+l2)%n2;</div>
+<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span> </div>
+<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>   {</div>
+<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>     <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>     {</div>
+<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>       {</div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i = (index_temp0[l0] * n1 + index_temp1[l1]) * n2 + index_temp2[l2];</div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>         C *lhs = g+i;</div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>         R *lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>         C val = psij_const0[l0] * psij_const1[l1] * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span> </div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span> <span class="preprocessor"></span>        lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span> </div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span> <span class="preprocessor">        #pragma omp atomic</span></div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span> <span class="preprocessor"></span>        lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>       }</div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>     }</div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>   }</div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span> }</div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_compute_serial(<span class="keyword">const</span> C *fj, C *g,</div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>             <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>             <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span> {</div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>   <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>   C *gj;</div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>   <span class="keyword">const</span> R *psij0,*psij1,*psij2;</div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span> </div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>   psij0=psij_const0;</div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>   psij1=psij_const1;</div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>   psij2=psij_const2;</div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span> </div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>   nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>   nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>   nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span> </div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>   <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>     <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>     {</div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>       psij1=psij_const1;</div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>         {</div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>     <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>       (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>         }</div>
+<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>     }</div>
+<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2)*/</span></div>
+<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>     {</div>
+<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>       psij1=psij_const1;</div>
+<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>       <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>         {</div>
+<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>     <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>       (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>     <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>       (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>         }</div>
+<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>     }</div>
+<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>     <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1)*/</span></div>
+<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>   <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>     {</div>
+<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>       psij1=psij_const1;</div>
+<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>       <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>         {</div>
+<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>     gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>     <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>       (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>         }</div>
+<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>       <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>         {</div>
+<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>     psij2=psij_const2;</div>
+<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>     gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>     <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>       (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>         }</div>
+<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>     }</div>
+<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>   {</div>
+<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>     <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>       {</div>
+<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>     {</div>
+<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>     }</div>
+<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>     {</div>
+<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>       gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>       gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>     }</div>
+<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>       }</div>
+<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>   }</div>
+<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>   <span class="keywordflow">else</span><span class="comment">/* asserts (u0>o0) */</span></div>
+<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>     <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>   {</div>
+<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>       {</div>
+<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>     {</div>
+<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>     }</div>
+<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span>       }</div>
+<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span> </div>
+<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>       {</div>
+<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>     {</div>
+<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>     }</div>
+<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>       }</div>
+<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>   }</div>
+<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>   {</div>
+<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>       {</div>
+<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>     {</div>
+<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>     }</div>
+<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>       }</div>
+<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span> </div>
+<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span>       {</div>
+<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>         <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span>     {</div>
+<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>       gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>     }</div>
+<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>       }</div>
+<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>   }</div>
+<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>     <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1) */</span></div>
+<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>       <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>   {</div>
+<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>       {</div>
+<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>     {</div>
+<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>     }</div>
+<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>     {</div>
+<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>       gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>     }</div>
+<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>       }</div>
+<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>       {</div>
+<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>     {</div>
+<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>     }</div>
+<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>     {</div>
+<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>       gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>       <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>     }</div>
+<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>       }</div>
+<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>   }</div>
+<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>       <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>   {</div>
+<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>     <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>       {</div>
+<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>     {</div>
+<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>       gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>     }</div>
+<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>     {</div>
+<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>       gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>       gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span>     }</div>
+<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span>       }</div>
+<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span> </div>
+<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span>     <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>       {</div>
+<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span>         psij1=psij_const1;</div>
+<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>         <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>     {</div>
+<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>       gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>       gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>     }</div>
+<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>         <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>     {</div>
+<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>       psij2=psij_const2;</div>
+<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>       gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>       <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>       gj=g+(l0*n1+l1)*n2;</div>
+<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>       <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>         (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>     }</div>
+<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>       }</div>
+<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>   }</div>
+<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span> }</div>
+<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_3d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span> {</div>
+<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N2 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2];</div>
+<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2];</div>
+<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span> </div>
+<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>   <span class="keyword">const</span> C* g = (C*) ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span> </div>
+<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span> </div>
+<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>   {</div>
+<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>     {</div>
+<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>       <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>         ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*lprod+l] * g[ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>     }</div>
+<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>   } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span> </div>
+<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>   {</div>
+<div class="line"><a name="l04432"></a><span class="lineno"> 4432</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>     {</div>
+<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>       nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*3*(2*m+2), ths-><a class="code" [...]
+<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>     }</div>
+<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span> </div>
+<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>   {</div>
+<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>     R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span> </div>
+<div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>     nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04448"></a><span class="lineno"> 4448</span> </div>
+<div class="line"><a name="l04449"></a><span class="lineno"> 4449</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04450"></a><span class="lineno"> 4450</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>     {</div>
+<div class="line"><a name="l04452"></a><span class="lineno"> 4452</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>       R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>       R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3];</div>
+<div class="line"><a name="l04456"></a><span class="lineno"> 4456</span>       R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3+1];</div>
+<div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>       R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04458"></a><span class="lineno"> 4458</span> </div>
+<div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04460"></a><span class="lineno"> 4460</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04461"></a><span class="lineno"> 4461</span>       {</div>
+<div class="line"><a name="l04462"></a><span class="lineno"> 4462</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04463"></a><span class="lineno"> 4463</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>       }</div>
+<div class="line"><a name="l04465"></a><span class="lineno"> 4465</span> </div>
+<div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>       fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)];</div>
+<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span>       fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)+1];</div>
+<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span>       {</div>
+<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>       }</div>
+<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span> </div>
+<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>       fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)];</div>
+<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>       fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)+1];</div>
+<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span>       psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>       {</div>
+<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>         psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>       }</div>
+<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span> </div>
+<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>       nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+3*j, ths-><a cl [...]
+<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>     }</div>
+<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span> </div>
+<div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l04491"></a><span class="lineno"> 4491</span> </div>
+<div class="line"><a name="l04492"></a><span class="lineno"> 4492</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l04493"></a><span class="lineno"> 4493</span>   {</div>
+<div class="line"><a name="l04494"></a><span class="lineno"> 4494</span>     R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04495"></a><span class="lineno"> 4495</span> </div>
+<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>     nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span> </div>
+<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span> </div>
+<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>     {</div>
+<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>       R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>       R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span> </div>
+<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>       fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>       {</div>
+<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>       }</div>
+<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span> </div>
+<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span>       fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04526"></a><span class="lineno"> 4526</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04527"></a><span class="lineno"> 4527</span>       {</div>
+<div class="line"><a name="l04528"></a><span class="lineno"> 4528</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04529"></a><span class="lineno"> 4529</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04530"></a><span class="lineno"> 4530</span>       }</div>
+<div class="line"><a name="l04531"></a><span class="lineno"> 4531</span> </div>
+<div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>       nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04533"></a><span class="lineno"> 4533</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]-((R)u)/n2,2));</div>
+<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>       fg_psij1 = EXP(K(2.0)*(n2*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span>       psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>       {</div>
+<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>         psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>       }</div>
+<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span> </div>
+<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>       nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+3*j, ths-><a cl [...]
+<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>     }</div>
+<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span> </div>
+<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span> </div>
+<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>   {</div>
+<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>, ip_s = K / (m + 2);</div>
+<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span> </div>
+<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span> </div>
+<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span>     {</div>
+<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>       <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span>       R ip_y, ip_w;</div>
+<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span>       R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span> </div>
+<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span>       ip_y = FABS(n0*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0] - u)*((R)ip_s);</div>
+<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>         psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span> </div>
+<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span>       ip_y = FABS(n1*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1] - u)*((R)ip_s);</div>
+<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>         psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span> </div>
+<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>       nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span>       ip_y = FABS(n2*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2] - u)*((R)ip_s);</div>
+<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>         psij_const[2*(2*m+2)+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span> </div>
+<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>       nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+3*j, ths-><a cl [...]
+<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>     }</div>
+<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span> </div>
+<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span> </div>
+<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span> </div>
+<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>   {</div>
+<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>     R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>     <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span> </div>
+<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>     nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>       psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l04607"></a><span class="lineno"> 4607</span> </div>
+<div class="line"><a name="l04608"></a><span class="lineno"> 4608</span>     nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04609"></a><span class="lineno"> 4609</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l04610"></a><span class="lineno"> 4610</span>       psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l04611"></a><span class="lineno"> 4611</span> </div>
+<div class="line"><a name="l04612"></a><span class="lineno"> 4612</span>     nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04613"></a><span class="lineno"> 4613</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l04614"></a><span class="lineno"> 4614</span>       psij_const[2*(2*m+2)+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]-((R)((u+l)))/n2,2));</div>
+<div class="line"><a name="l04615"></a><span class="lineno"> 4615</span> </div>
+<div class="line"><a name="l04616"></a><span class="lineno"> 4616</span>     nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+3*j, ths-><a clas [...]
+<div class="line"><a name="l04617"></a><span class="lineno"> 4617</span>   }</div>
+<div class="line"><a name="l04618"></a><span class="lineno"> 4618</span> }</div>
+<div class="line"><a name="l04619"></a><span class="lineno"> 4619</span> </div>
+<div class="line"><a name="l04620"></a><span class="lineno"> 4620</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04621"></a><span class="lineno"> 4621</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A                        \</span></div>
+<div class="line"><a name="l04622"></a><span class="lineno"> 4622</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04623"></a><span class="lineno"> 4623</span> <span class="preprocessor">          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \</span></div>
+<div class="line"><a name="l04624"></a><span class="lineno"> 4624</span> <span class="preprocessor">          if (k > 0)                                                          \</span></div>
+<div class="line"><a name="l04625"></a><span class="lineno"> 4625</span> <span class="preprocessor">            assert(ar_x[2*k-2] < min_u_a);                                    \</span></div>
+<div class="line"><a name="l04626"></a><span class="lineno"> 4626</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04627"></a><span class="lineno"> 4627</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04628"></a><span class="lineno"> 4628</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A</span></div>
+<div class="line"><a name="l04629"></a><span class="lineno"> 4629</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04630"></a><span class="lineno"> 4630</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04631"></a><span class="lineno"> 4631</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04632"></a><span class="lineno"> 4632</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B                        \</span></div>
+<div class="line"><a name="l04633"></a><span class="lineno"> 4633</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04634"></a><span class="lineno"> 4634</span> <span class="preprocessor">          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \</span></div>
+<div class="line"><a name="l04635"></a><span class="lineno"> 4635</span> <span class="preprocessor">          if (k > 0)                                                          \</span></div>
+<div class="line"><a name="l04636"></a><span class="lineno"> 4636</span> <span class="preprocessor">            assert(ar_x[2*k-2] < min_u_b);                                    \</span></div>
+<div class="line"><a name="l04637"></a><span class="lineno"> 4637</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04638"></a><span class="lineno"> 4638</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04639"></a><span class="lineno"> 4639</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B</span></div>
+<div class="line"><a name="l04640"></a><span class="lineno"> 4640</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04641"></a><span class="lineno"> 4641</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04642"></a><span class="lineno"> 4642</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \</span></div>
+<div class="line"><a name="l04643"></a><span class="lineno"> 4643</span> <span class="preprocessor">            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l04644"></a><span class="lineno"> 4644</span> <span class="preprocessor">                ths->psi+j*3*(2*m+2),                                         \</span></div>
+<div class="line"><a name="l04645"></a><span class="lineno"> 4645</span> <span class="preprocessor">                ths->psi+(j*3+1)*(2*m+2),                                     \</span></div>
+<div class="line"><a name="l04646"></a><span class="lineno"> 4646</span> <span class="preprocessor">                ths->psi+(j*3+2)*(2*m+2),                                     \</span></div>
+<div class="line"><a name="l04647"></a><span class="lineno"> 4647</span> <span class="preprocessor">                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \</span></div>
+<div class="line"><a name="l04648"></a><span class="lineno"> 4648</span> <span class="preprocessor">                n0, n1, n2, m, my_u0, my_o0);</span></div>
+<div class="line"><a name="l04649"></a><span class="lineno"> 4649</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04650"></a><span class="lineno"> 4650</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \</span></div>
+<div class="line"><a name="l04651"></a><span class="lineno"> 4651</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04652"></a><span class="lineno"> 4652</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l04653"></a><span class="lineno"> 4653</span> <span class="preprocessor">            R psij_const[3*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l04654"></a><span class="lineno"> 4654</span> <span class="preprocessor">            R fg_psij0 = ths->psi[2*j*3];                                     \</span></div>
+<div class="line"><a name="l04655"></a><span class="lineno"> 4655</span> <span class="preprocessor">            R fg_psij1 = ths->psi[2*j*3+1];                                   \</span></div>
+<div class="line"><a name="l04656"></a><span class="lineno"> 4656</span> <span class="preprocessor">            R fg_psij2 = K(1.0);                                              \</span></div>
+<div class="line"><a name="l04657"></a><span class="lineno"> 4657</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04658"></a><span class="lineno"> 4658</span> <span class="preprocessor">            psij_const[0] = fg_psij0;                                         \</span></div>
+<div class="line"><a name="l04659"></a><span class="lineno"> 4659</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l04660"></a><span class="lineno"> 4660</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l04661"></a><span class="lineno"> 4661</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l04662"></a><span class="lineno"> 4662</span> <span class="preprocessor">              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \</span></div>
+<div class="line"><a name="l04663"></a><span class="lineno"> 4663</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l04664"></a><span class="lineno"> 4664</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04665"></a><span class="lineno"> 4665</span> <span class="preprocessor">            fg_psij0 = ths->psi[2*(j*3+1)];                                   \</span></div>
+<div class="line"><a name="l04666"></a><span class="lineno"> 4666</span> <span class="preprocessor">            fg_psij1 = ths->psi[2*(j*3+1)+1];                                 \</span></div>
+<div class="line"><a name="l04667"></a><span class="lineno"> 4667</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l04668"></a><span class="lineno"> 4668</span> <span class="preprocessor">            psij_const[2*m+2] = fg_psij0;                                     \</span></div>
+<div class="line"><a name="l04669"></a><span class="lineno"> 4669</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l04670"></a><span class="lineno"> 4670</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l04671"></a><span class="lineno"> 4671</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l04672"></a><span class="lineno"> 4672</span> <span class="preprocessor">              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \</span></div>
+<div class="line"><a name="l04673"></a><span class="lineno"> 4673</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l04674"></a><span class="lineno"> 4674</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04675"></a><span class="lineno"> 4675</span> <span class="preprocessor">            fg_psij0 = ths->psi[2*(j*3+2)];                                   \</span></div>
+<div class="line"><a name="l04676"></a><span class="lineno"> 4676</span> <span class="preprocessor">            fg_psij1 = ths->psi[2*(j*3+2)+1];                                 \</span></div>
+<div class="line"><a name="l04677"></a><span class="lineno"> 4677</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l04678"></a><span class="lineno"> 4678</span> <span class="preprocessor">            psij_const[2*(2*m+2)] = fg_psij0;                                 \</span></div>
+<div class="line"><a name="l04679"></a><span class="lineno"> 4679</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l04680"></a><span class="lineno"> 4680</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l04681"></a><span class="lineno"> 4681</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l04682"></a><span class="lineno"> 4682</span> <span class="preprocessor">              psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \</span></div>
+<div class="line"><a name="l04683"></a><span class="lineno"> 4683</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l04684"></a><span class="lineno"> 4684</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04685"></a><span class="lineno"> 4685</span> <span class="preprocessor">            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l04686"></a><span class="lineno"> 4686</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \</span></div>
+<div class="line"><a name="l04687"></a><span class="lineno"> 4687</span> <span class="preprocessor">                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \</span></div>
+<div class="line"><a name="l04688"></a><span class="lineno"> 4688</span> <span class="preprocessor">                n0, n1, n2, m, my_u0, my_o0);                                 \</span></div>
+<div class="line"><a name="l04689"></a><span class="lineno"> 4689</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04690"></a><span class="lineno"> 4690</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04691"></a><span class="lineno"> 4691</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \</span></div>
+<div class="line"><a name="l04692"></a><span class="lineno"> 4692</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04693"></a><span class="lineno"> 4693</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l04694"></a><span class="lineno"> 4694</span> <span class="preprocessor">            R psij_const[3*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l04695"></a><span class="lineno"> 4695</span> <span class="preprocessor">            R fg_psij0, fg_psij1, fg_psij2;                                   \</span></div>
+<div class="line"><a name="l04696"></a><span class="lineno"> 4696</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04697"></a><span class="lineno"> 4697</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,0);                                           \</span></div>
+<div class="line"><a name="l04698"></a><span class="lineno"> 4698</span> <span class="preprocessor">            fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));                        \</span></div>
+<div class="line"><a name="l04699"></a><span class="lineno"> 4699</span> <span class="preprocessor">            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);          \</span></div>
+<div class="line"><a name="l04700"></a><span class="lineno"> 4700</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l04701"></a><span class="lineno"> 4701</span> <span class="preprocessor">            psij_const[0] = fg_psij0;                                         \</span></div>
+<div class="line"><a name="l04702"></a><span class="lineno"> 4702</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l04703"></a><span class="lineno"> 4703</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l04704"></a><span class="lineno"> 4704</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l04705"></a><span class="lineno"> 4705</span> <span class="preprocessor">              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \</span></div>
+<div class="line"><a name="l04706"></a><span class="lineno"> 4706</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l04707"></a><span class="lineno"> 4707</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04708"></a><span class="lineno"> 4708</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,1);                                           \</span></div>
+<div class="line"><a name="l04709"></a><span class="lineno"> 4709</span> <span class="preprocessor">            fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));                      \</span></div>
+<div class="line"><a name="l04710"></a><span class="lineno"> 4710</span> <span class="preprocessor">            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);        \</span></div>
+<div class="line"><a name="l04711"></a><span class="lineno"> 4711</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l04712"></a><span class="lineno"> 4712</span> <span class="preprocessor">            psij_const[2*m+2] = fg_psij0;                                     \</span></div>
+<div class="line"><a name="l04713"></a><span class="lineno"> 4713</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l04714"></a><span class="lineno"> 4714</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l04715"></a><span class="lineno"> 4715</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l04716"></a><span class="lineno"> 4716</span> <span class="preprocessor">              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \</span></div>
+<div class="line"><a name="l04717"></a><span class="lineno"> 4717</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l04718"></a><span class="lineno"> 4718</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04719"></a><span class="lineno"> 4719</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,2);                                           \</span></div>
+<div class="line"><a name="l04720"></a><span class="lineno"> 4720</span> <span class="preprocessor">            fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));                      \</span></div>
+<div class="line"><a name="l04721"></a><span class="lineno"> 4721</span> <span class="preprocessor">            fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);        \</span></div>
+<div class="line"><a name="l04722"></a><span class="lineno"> 4722</span> <span class="preprocessor">            fg_psij2 = K(1.0);                                                \</span></div>
+<div class="line"><a name="l04723"></a><span class="lineno"> 4723</span> <span class="preprocessor">            psij_const[2*(2*m+2)] = fg_psij0;                                 \</span></div>
+<div class="line"><a name="l04724"></a><span class="lineno"> 4724</span> <span class="preprocessor">            for(l=1; l<=2*m+1; l++)                                           \</span></div>
+<div class="line"><a name="l04725"></a><span class="lineno"> 4725</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l04726"></a><span class="lineno"> 4726</span> <span class="preprocessor">              fg_psij2 *= fg_psij1;                                           \</span></div>
+<div class="line"><a name="l04727"></a><span class="lineno"> 4727</span> <span class="preprocessor">              psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \</span></div>
+<div class="line"><a name="l04728"></a><span class="lineno"> 4728</span> <span class="preprocessor">            }                                                                 \</span></div>
+<div class="line"><a name="l04729"></a><span class="lineno"> 4729</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04730"></a><span class="lineno"> 4730</span> <span class="preprocessor">            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l04731"></a><span class="lineno"> 4731</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \</span></div>
+<div class="line"><a name="l04732"></a><span class="lineno"> 4732</span> <span class="preprocessor">                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \</span></div>
+<div class="line"><a name="l04733"></a><span class="lineno"> 4733</span> <span class="preprocessor">                n0, n1, n2, m, my_u0, my_o0);                                 \</span></div>
+<div class="line"><a name="l04734"></a><span class="lineno"> 4734</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04735"></a><span class="lineno"> 4735</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04736"></a><span class="lineno"> 4736</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \</span></div>
+<div class="line"><a name="l04737"></a><span class="lineno"> 4737</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04738"></a><span class="lineno"> 4738</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l04739"></a><span class="lineno"> 4739</span> <span class="preprocessor">            R psij_const[3*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l04740"></a><span class="lineno"> 4740</span> <span class="preprocessor">            int ip_u;                                                         \</span></div>
+<div class="line"><a name="l04741"></a><span class="lineno"> 4741</span> <span class="preprocessor">            R ip_y, ip_w;                                                     \</span></div>
+<div class="line"><a name="l04742"></a><span class="lineno"> 4742</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04743"></a><span class="lineno"> 4743</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,0);                                           \</span></div>
+<div class="line"><a name="l04744"></a><span class="lineno"> 4744</span> <span class="preprocessor">            ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);                      \</span></div>
+<div class="line"><a name="l04745"></a><span class="lineno"> 4745</span> <span class="preprocessor">            ip_u = LRINT(FLOOR(ip_y));                                        \</span></div>
+<div class="line"><a name="l04746"></a><span class="lineno"> 4746</span> <span class="preprocessor">            ip_w = ip_y-ip_u;                                                 \</span></div>
+<div class="line"><a name="l04747"></a><span class="lineno"> 4747</span> <span class="preprocessor">            for(l=0; l < 2*m+2; l++)                                          \</span></div>
+<div class="line"><a name="l04748"></a><span class="lineno"> 4748</span> <span class="preprocessor">              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +      \</span></div>
+<div class="line"><a name="l04749"></a><span class="lineno"> 4749</span> <span class="preprocessor">                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);                          \</span></div>
+<div class="line"><a name="l04750"></a><span class="lineno"> 4750</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04751"></a><span class="lineno"> 4751</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,1);                                           \</span></div>
+<div class="line"><a name="l04752"></a><span class="lineno"> 4752</span> <span class="preprocessor">            ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);                      \</span></div>
+<div class="line"><a name="l04753"></a><span class="lineno"> 4753</span> <span class="preprocessor">            ip_u = LRINT(FLOOR(ip_y));                                        \</span></div>
+<div class="line"><a name="l04754"></a><span class="lineno"> 4754</span> <span class="preprocessor">            ip_w = ip_y-ip_u;                                                 \</span></div>
+<div class="line"><a name="l04755"></a><span class="lineno"> 4755</span> <span class="preprocessor">            for(l=0; l < 2*m+2; l++)                                          \</span></div>
+<div class="line"><a name="l04756"></a><span class="lineno"> 4756</span> <span class="preprocessor">              psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l04757"></a><span class="lineno"> 4757</span> <span class="preprocessor">                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                    \</span></div>
+<div class="line"><a name="l04758"></a><span class="lineno"> 4758</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04759"></a><span class="lineno"> 4759</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,2);                                           \</span></div>
+<div class="line"><a name="l04760"></a><span class="lineno"> 4760</span> <span class="preprocessor">            ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);                      \</span></div>
+<div class="line"><a name="l04761"></a><span class="lineno"> 4761</span> <span class="preprocessor">            ip_u = LRINT(FLOOR(ip_y));                                        \</span></div>
+<div class="line"><a name="l04762"></a><span class="lineno"> 4762</span> <span class="preprocessor">            ip_w = ip_y-ip_u;                                                 \</span></div>
+<div class="line"><a name="l04763"></a><span class="lineno"> 4763</span> <span class="preprocessor">            for(l=0; l < 2*m+2; l++)                                          \</span></div>
+<div class="line"><a name="l04764"></a><span class="lineno"> 4764</span> <span class="preprocessor">              psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l04765"></a><span class="lineno"> 4765</span> <span class="preprocessor">                ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                  \</span></div>
+<div class="line"><a name="l04766"></a><span class="lineno"> 4766</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04767"></a><span class="lineno"> 4767</span> <span class="preprocessor">            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l04768"></a><span class="lineno"> 4768</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \</span></div>
+<div class="line"><a name="l04769"></a><span class="lineno"> 4769</span> <span class="preprocessor">                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \</span></div>
+<div class="line"><a name="l04770"></a><span class="lineno"> 4770</span> <span class="preprocessor">                n0, n1, n2, m, my_u0, my_o0);                                 \</span></div>
+<div class="line"><a name="l04771"></a><span class="lineno"> 4771</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04772"></a><span class="lineno"> 4772</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04773"></a><span class="lineno"> 4773</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \</span></div>
+<div class="line"><a name="l04774"></a><span class="lineno"> 4774</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04775"></a><span class="lineno"> 4775</span> <span class="preprocessor">            int u, o, l;                                                      \</span></div>
+<div class="line"><a name="l04776"></a><span class="lineno"> 4776</span> <span class="preprocessor">            R psij_const[3*(2*m+2)];                                          \</span></div>
+<div class="line"><a name="l04777"></a><span class="lineno"> 4777</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04778"></a><span class="lineno"> 4778</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,0);                                           \</span></div>
+<div class="line"><a name="l04779"></a><span class="lineno"> 4779</span> <span class="preprocessor">            for(l=0;l<=2*m+1;l++)                                             \</span></div>
+<div class="line"><a name="l04780"></a><span class="lineno"> 4780</span> <span class="preprocessor">              psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));             \</span></div>
+<div class="line"><a name="l04781"></a><span class="lineno"> 4781</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04782"></a><span class="lineno"> 4782</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,1);                                           \</span></div>
+<div class="line"><a name="l04783"></a><span class="lineno"> 4783</span> <span class="preprocessor">            for(l=0;l<=2*m+1;l++)                                             \</span></div>
+<div class="line"><a name="l04784"></a><span class="lineno"> 4784</span> <span class="preprocessor">              psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));     \</span></div>
+<div class="line"><a name="l04785"></a><span class="lineno"> 4785</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04786"></a><span class="lineno"> 4786</span> <span class="preprocessor">            nfft_uo(ths,j,&u,&o,2);                                           \</span></div>
+<div class="line"><a name="l04787"></a><span class="lineno"> 4787</span> <span class="preprocessor">            for(l=0;l<=2*m+1;l++)                                             \</span></div>
+<div class="line"><a name="l04788"></a><span class="lineno"> 4788</span> <span class="preprocessor">              psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2)); \</span></div>
+<div class="line"><a name="l04789"></a><span class="lineno"> 4789</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04790"></a><span class="lineno"> 4790</span> <span class="preprocessor">            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \</span></div>
+<div class="line"><a name="l04791"></a><span class="lineno"> 4791</span> <span class="preprocessor">                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \</span></div>
+<div class="line"><a name="l04792"></a><span class="lineno"> 4792</span> <span class="preprocessor">                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \</span></div>
+<div class="line"><a name="l04793"></a><span class="lineno"> 4793</span> <span class="preprocessor">                n0, n1, n2, m, my_u0, my_o0);                                 \</span></div>
+<div class="line"><a name="l04794"></a><span class="lineno"> 4794</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04795"></a><span class="lineno"> 4795</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04796"></a><span class="lineno"> 4796</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(whichone)                       \</span></div>
+<div class="line"><a name="l04797"></a><span class="lineno"> 4797</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l04798"></a><span class="lineno"> 4798</span> <span class="preprocessor">    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \</span></div>
+<div class="line"><a name="l04799"></a><span class="lineno"> 4799</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l04800"></a><span class="lineno"> 4800</span> <span class="preprocessor">      _Pragma("omp parallel private(k)")                                      \</span></div>
+<div class="line"><a name="l04801"></a><span class="lineno"> 4801</span> <span class="preprocessor">      {                                                                       \</span></div>
+<div class="line"><a name="l04802"></a><span class="lineno"> 4802</span> <span class="preprocessor">        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \</span></div>
+<div class="line"><a name="l04803"></a><span class="lineno"> 4803</span> <span class="preprocessor">        int *ar_x = ths->index_x;                                             \</span></div>
+<div class="line"><a name="l04804"></a><span class="lineno"> 4804</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04805"></a><span class="lineno"> 4805</span> <span class="preprocessor">        nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \</span></div>
+<div class="line"><a name="l04806"></a><span class="lineno"> 4806</span> <span class="preprocessor">            &min_u_b, &max_u_b, 3, ths->n, m);                                \</span></div>
+<div class="line"><a name="l04807"></a><span class="lineno"> 4807</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04808"></a><span class="lineno"> 4808</span> <span class="preprocessor">        if (min_u_a != -1)                                                    \</span></div>
+<div class="line"><a name="l04809"></a><span class="lineno"> 4809</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l04810"></a><span class="lineno"> 4810</span> <span class="preprocessor">          k = index_x_binary_search(ar_x, M, min_u_a);                        \</span></div>
+<div class="line"><a name="l04811"></a><span class="lineno"> 4811</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04812"></a><span class="lineno"> 4812</span> <span class="preprocessor">          MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A                      \</span></div>
+<div class="line"><a name="l04813"></a><span class="lineno"> 4813</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04814"></a><span class="lineno"> 4814</span> <span class="preprocessor">          while (k < M)                                                       \</span></div>
+<div class="line"><a name="l04815"></a><span class="lineno"> 4815</span> <span class="preprocessor">          {                                                                   \</span></div>
+<div class="line"><a name="l04816"></a><span class="lineno"> 4816</span> <span class="preprocessor">            int u_prod = ar_x[2*k];                                           \</span></div>
+<div class="line"><a name="l04817"></a><span class="lineno"> 4817</span> <span class="preprocessor">            int j = ar_x[2*k+1];                                              \</span></div>
+<div class="line"><a name="l04818"></a><span class="lineno"> 4818</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04819"></a><span class="lineno"> 4819</span> <span class="preprocessor">            if (u_prod < min_u_a || u_prod > max_u_a)                         \</span></div>
+<div class="line"><a name="l04820"></a><span class="lineno"> 4820</span> <span class="preprocessor">              break;                                                          \</span></div>
+<div class="line"><a name="l04821"></a><span class="lineno"> 4821</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04822"></a><span class="lineno"> 4822</span> <span class="preprocessor">            MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \</span></div>
+<div class="line"><a name="l04823"></a><span class="lineno"> 4823</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04824"></a><span class="lineno"> 4824</span> <span class="preprocessor">            k++;                                                              \</span></div>
+<div class="line"><a name="l04825"></a><span class="lineno"> 4825</span> <span class="preprocessor">          }                                                                   \</span></div>
+<div class="line"><a name="l04826"></a><span class="lineno"> 4826</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l04827"></a><span class="lineno"> 4827</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04828"></a><span class="lineno"> 4828</span> <span class="preprocessor">        if (min_u_b != -1)                                                    \</span></div>
+<div class="line"><a name="l04829"></a><span class="lineno"> 4829</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l04830"></a><span class="lineno"> 4830</span> <span class="preprocessor">          int k = index_x_binary_search(ar_x, M, min_u_b);                    \</span></div>
+<div class="line"><a name="l04831"></a><span class="lineno"> 4831</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04832"></a><span class="lineno"> 4832</span> <span class="preprocessor">          MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B                      \</span></div>
+<div class="line"><a name="l04833"></a><span class="lineno"> 4833</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04834"></a><span class="lineno"> 4834</span> <span class="preprocessor">          while (k < M)                                                       \</span></div>
+<div class="line"><a name="l04835"></a><span class="lineno"> 4835</span> <span class="preprocessor">          {                                                                   \</span></div>
+<div class="line"><a name="l04836"></a><span class="lineno"> 4836</span> <span class="preprocessor">            int u_prod = ar_x[2*k];                                           \</span></div>
+<div class="line"><a name="l04837"></a><span class="lineno"> 4837</span> <span class="preprocessor">            int j = ar_x[2*k+1];                                              \</span></div>
+<div class="line"><a name="l04838"></a><span class="lineno"> 4838</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04839"></a><span class="lineno"> 4839</span> <span class="preprocessor">            if (u_prod < min_u_b || u_prod > max_u_b)                         \</span></div>
+<div class="line"><a name="l04840"></a><span class="lineno"> 4840</span> <span class="preprocessor">              break;                                                          \</span></div>
+<div class="line"><a name="l04841"></a><span class="lineno"> 4841</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04842"></a><span class="lineno"> 4842</span> <span class="preprocessor">            MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \</span></div>
+<div class="line"><a name="l04843"></a><span class="lineno"> 4843</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l04844"></a><span class="lineno"> 4844</span> <span class="preprocessor">            k++;                                                              \</span></div>
+<div class="line"><a name="l04845"></a><span class="lineno"> 4845</span> <span class="preprocessor">          }                                                                   \</span></div>
+<div class="line"><a name="l04846"></a><span class="lineno"> 4846</span> <span class="preprocessor">        }                                                                     \</span></div>
+<div class="line"><a name="l04847"></a><span class="lineno"> 4847</span> <span class="preprocessor">      } </span><span class="comment">/* omp parallel */</span><span class="preprocessor">                                                    \</span></div>
+<div class="line"><a name="l04848"></a><span class="lineno"> 4848</span> <span class="preprocessor">      return;                                                                 \</span></div>
+<div class="line"><a name="l04849"></a><span class="lineno"> 4849</span> <span class="preprocessor">    } </span><span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span><span class="preprocessor">                                    \</span></div>
+<div class="line"><a name="l04850"></a><span class="lineno"> 4850</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04851"></a><span class="lineno"> 4851</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04852"></a><span class="lineno"> 4852</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l04853"></a><span class="lineno"> 4853</span> {</div>
+<div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l04856"></a><span class="lineno"> 4856</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l04857"></a><span class="lineno"> 4857</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l04858"></a><span class="lineno"> 4858</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N2 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2];</div>
+<div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2];</div>
+<div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l04862"></a><span class="lineno"> 4862</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l04863"></a><span class="lineno"> 4863</span> </div>
+<div class="line"><a name="l04864"></a><span class="lineno"> 4864</span>   C* g = (C*) ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l04865"></a><span class="lineno"> 4865</span> </div>
+<div class="line"><a name="l04866"></a><span class="lineno"> 4866</span>   memset(g,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l04867"></a><span class="lineno"> 4867</span> </div>
+<div class="line"><a name="l04868"></a><span class="lineno"> 4868</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l04869"></a><span class="lineno"> 4869</span>   {</div>
+<div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>     nfft_adjoint_B_compute_full_psi(g, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>, ths-><a class="code" href= [...]
+<div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>         3, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, m, ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>, ths-><a cl [...]
+<div class="line"><a name="l04872"></a><span class="lineno"> 4872</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04873"></a><span class="lineno"> 4873</span>   } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l04874"></a><span class="lineno"> 4874</span> </div>
+<div class="line"><a name="l04875"></a><span class="lineno"> 4875</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l04876"></a><span class="lineno"> 4876</span>   {</div>
+<div class="line"><a name="l04877"></a><span class="lineno"> 4877</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04878"></a><span class="lineno"> 4878</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_PSI)</div>
+<div class="line"><a name="l04879"></a><span class="lineno"> 4879</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04880"></a><span class="lineno"> 4880</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04881"></a><span class="lineno"> 4881</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04882"></a><span class="lineno"> 4882</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04883"></a><span class="lineno"> 4883</span>     {</div>
+<div class="line"><a name="l04884"></a><span class="lineno"> 4884</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04885"></a><span class="lineno"> 4885</span> #ifdef _OPENMP</div>
+<div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>       nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*3*(2*m+2), ths->< [...]
+<div class="line"><a name="l04887"></a><span class="lineno"> 4887</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04888"></a><span class="lineno"> 4888</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">p [...]
+<div class="line"><a name="l04889"></a><span class="lineno"> 4889</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04890"></a><span class="lineno"> 4890</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l04891"></a><span class="lineno"> 4891</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04892"></a><span class="lineno"> 4892</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l04893"></a><span class="lineno"> 4893</span> </div>
+<div class="line"><a name="l04894"></a><span class="lineno"> 4894</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l04895"></a><span class="lineno"> 4895</span>   {</div>
+<div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>     R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04897"></a><span class="lineno"> 4897</span> </div>
+<div class="line"><a name="l04898"></a><span class="lineno"> 4898</span>     nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04899"></a><span class="lineno"> 4899</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04900"></a><span class="lineno"> 4900</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04901"></a><span class="lineno"> 4901</span> </div>
+<div class="line"><a name="l04902"></a><span class="lineno"> 4902</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04903"></a><span class="lineno"> 4903</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_FG_PSI)</div>
+<div class="line"><a name="l04904"></a><span class="lineno"> 4904</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04905"></a><span class="lineno"> 4905</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04906"></a><span class="lineno"> 4906</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04907"></a><span class="lineno"> 4907</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>     {</div>
+<div class="line"><a name="l04909"></a><span class="lineno"> 4909</span>       R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04910"></a><span class="lineno"> 4910</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>       <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l04912"></a><span class="lineno"> 4912</span>       R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3];</div>
+<div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>       R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3+1];</div>
+<div class="line"><a name="l04914"></a><span class="lineno"> 4914</span>       R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04915"></a><span class="lineno"> 4915</span> </div>
+<div class="line"><a name="l04916"></a><span class="lineno"> 4916</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04917"></a><span class="lineno"> 4917</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>       {</div>
+<div class="line"><a name="l04919"></a><span class="lineno"> 4919</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04920"></a><span class="lineno"> 4920</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04921"></a><span class="lineno"> 4921</span>       }</div>
+<div class="line"><a name="l04922"></a><span class="lineno"> 4922</span> </div>
+<div class="line"><a name="l04923"></a><span class="lineno"> 4923</span>       fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)];</div>
+<div class="line"><a name="l04924"></a><span class="lineno"> 4924</span>       fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)+1];</div>
+<div class="line"><a name="l04925"></a><span class="lineno"> 4925</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04926"></a><span class="lineno"> 4926</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04927"></a><span class="lineno"> 4927</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04928"></a><span class="lineno"> 4928</span>       {</div>
+<div class="line"><a name="l04929"></a><span class="lineno"> 4929</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04931"></a><span class="lineno"> 4931</span>       }</div>
+<div class="line"><a name="l04932"></a><span class="lineno"> 4932</span> </div>
+<div class="line"><a name="l04933"></a><span class="lineno"> 4933</span>       fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)];</div>
+<div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>       fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)+1];</div>
+<div class="line"><a name="l04935"></a><span class="lineno"> 4935</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>       psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04938"></a><span class="lineno"> 4938</span>       {</div>
+<div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>         psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l04941"></a><span class="lineno"> 4941</span>       }</div>
+<div class="line"><a name="l04942"></a><span class="lineno"> 4942</span> </div>
+<div class="line"><a name="l04943"></a><span class="lineno"> 4943</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04944"></a><span class="lineno"> 4944</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial dom [...]
+<div class="line"><a name="l04945"></a><span class="lineno"> 4945</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04946"></a><span class="lineno"> 4946</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain,  [...]
+<div class="line"><a name="l04947"></a><span class="lineno"> 4947</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04948"></a><span class="lineno"> 4948</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l04949"></a><span class="lineno"> 4949</span> </div>
+<div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04951"></a><span class="lineno"> 4951</span>   } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l04952"></a><span class="lineno"> 4952</span> </div>
+<div class="line"><a name="l04953"></a><span class="lineno"> 4953</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>   {</div>
+<div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>     R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04956"></a><span class="lineno"> 4956</span> </div>
+<div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>     nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04958"></a><span class="lineno"> 4958</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04959"></a><span class="lineno"> 4959</span>     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04960"></a><span class="lineno"> 4960</span> </div>
+<div class="line"><a name="l04961"></a><span class="lineno"> 4961</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04962"></a><span class="lineno"> 4962</span> </div>
+<div class="line"><a name="l04963"></a><span class="lineno"> 4963</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04964"></a><span class="lineno"> 4964</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(FG_PSI)</div>
+<div class="line"><a name="l04965"></a><span class="lineno"> 4965</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04966"></a><span class="lineno"> 4966</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04967"></a><span class="lineno"> 4967</span> <span class="preprocessor">    #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04968"></a><span class="lineno"> 4968</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04969"></a><span class="lineno"> 4969</span>     {</div>
+<div class="line"><a name="l04970"></a><span class="lineno"> 4970</span>       <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l04971"></a><span class="lineno"> 4971</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04972"></a><span class="lineno"> 4972</span>       R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04973"></a><span class="lineno"> 4973</span>       R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l04974"></a><span class="lineno"> 4974</span> </div>
+<div class="line"><a name="l04975"></a><span class="lineno"> 4975</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04976"></a><span class="lineno"> 4976</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l04977"></a><span class="lineno"> 4977</span>       fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04978"></a><span class="lineno"> 4978</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>       psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04981"></a><span class="lineno"> 4981</span>       {</div>
+<div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04983"></a><span class="lineno"> 4983</span>         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>       }</div>
+<div class="line"><a name="l04985"></a><span class="lineno"> 4985</span> </div>
+<div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04987"></a><span class="lineno"> 4987</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l04988"></a><span class="lineno"> 4988</span>       fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>       psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>       {</div>
+<div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>       }</div>
+<div class="line"><a name="l04996"></a><span class="lineno"> 4996</span> </div>
+<div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>       nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04998"></a><span class="lineno"> 4998</span>       fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]-((R)u)/n2,2));</div>
+<div class="line"><a name="l04999"></a><span class="lineno"> 4999</span>       fg_psij1 = EXP(K(2.0)*(n2*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>       fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>       psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>       <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l05003"></a><span class="lineno"> 5003</span>       {</div>
+<div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>         fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>         psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l05006"></a><span class="lineno"> 5006</span>       }</div>
+<div class="line"><a name="l05007"></a><span class="lineno"> 5007</span> </div>
+<div class="line"><a name="l05008"></a><span class="lineno"> 5008</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05009"></a><span class="lineno"> 5009</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial dom [...]
+<div class="line"><a name="l05010"></a><span class="lineno"> 5010</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05011"></a><span class="lineno"> 5011</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain,  [...]
+<div class="line"><a name="l05012"></a><span class="lineno"> 5012</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05013"></a><span class="lineno"> 5013</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l05014"></a><span class="lineno"> 5014</span> </div>
+<div class="line"><a name="l05015"></a><span class="lineno"> 5015</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05016"></a><span class="lineno"> 5016</span>   } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l05017"></a><span class="lineno"> 5017</span> </div>
+<div class="line"><a name="l05018"></a><span class="lineno"> 5018</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05019"></a><span class="lineno"> 5019</span>   {</div>
+<div class="line"><a name="l05020"></a><span class="lineno"> 5020</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;</div>
+<div class="line"><a name="l05021"></a><span class="lineno"> 5021</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> ip_s = K / (m + 2);</div>
+<div class="line"><a name="l05022"></a><span class="lineno"> 5022</span> </div>
+<div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>     nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05024"></a><span class="lineno"> 5024</span> </div>
+<div class="line"><a name="l05025"></a><span class="lineno"> 5025</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05026"></a><span class="lineno"> 5026</span> <span class="preprocessor"></span>    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_LIN_PSI)</div>
+<div class="line"><a name="l05027"></a><span class="lineno"> 5027</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05028"></a><span class="lineno"> 5028</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05029"></a><span class="lineno"> 5029</span> <span class="preprocessor">    #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l05030"></a><span class="lineno"> 5030</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l05031"></a><span class="lineno"> 5031</span>     {</div>
+<div class="line"><a name="l05032"></a><span class="lineno"> 5032</span>       <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l05033"></a><span class="lineno"> 5033</span>       <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>       R ip_y, ip_w;</div>
+<div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>       <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>       R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l05037"></a><span class="lineno"> 5037</span> </div>
+<div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>       nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l05039"></a><span class="lineno"> 5039</span>       ip_y = FABS(n0*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0] - u)*((R)ip_s);</div>
+<div class="line"><a name="l05040"></a><span class="lineno"> 5040</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>         psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l05045"></a><span class="lineno"> 5045</span> </div>
+<div class="line"><a name="l05046"></a><span class="lineno"> 5046</span>       nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l05047"></a><span class="lineno"> 5047</span>       ip_y = FABS(n1*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1] - u)*((R)ip_s);</div>
+<div class="line"><a name="l05048"></a><span class="lineno"> 5048</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l05049"></a><span class="lineno"> 5049</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l05050"></a><span class="lineno"> 5050</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l05051"></a><span class="lineno"> 5051</span>         psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l05053"></a><span class="lineno"> 5053</span> </div>
+<div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>       nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l05055"></a><span class="lineno"> 5055</span>       ip_y = FABS(n2*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2] - u)*((R)ip_s);</div>
+<div class="line"><a name="l05056"></a><span class="lineno"> 5056</span>       ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l05057"></a><span class="lineno"> 5057</span>       ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l05058"></a><span class="lineno"> 5058</span>       <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l05059"></a><span class="lineno"> 5059</span>         psij_const[2*(2*m+2)+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l05060"></a><span class="lineno"> 5060</span>           ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l05061"></a><span class="lineno"> 5061</span> </div>
+<div class="line"><a name="l05062"></a><span class="lineno"> 5062</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05063"></a><span class="lineno"> 5063</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial dom [...]
+<div class="line"><a name="l05064"></a><span class="lineno"> 5064</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05065"></a><span class="lineno"> 5065</span> <span class="preprocessor"></span>      nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain,  [...]
+<div class="line"><a name="l05066"></a><span class="lineno"> 5066</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05067"></a><span class="lineno"> 5067</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l05068"></a><span class="lineno"> 5068</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05069"></a><span class="lineno"> 5069</span>   } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l05070"></a><span class="lineno"> 5070</span> </div>
+<div class="line"><a name="l05071"></a><span class="lineno"> 5071</span>   <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l05072"></a><span class="lineno"> 5072</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05073"></a><span class="lineno"> 5073</span> </div>
+<div class="line"><a name="l05074"></a><span class="lineno"> 5074</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05075"></a><span class="lineno"> 5075</span> <span class="preprocessor"></span>  MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(NO_PSI)</div>
+<div class="line"><a name="l05076"></a><span class="lineno"> 5076</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05077"></a><span class="lineno"> 5077</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05078"></a><span class="lineno"> 5078</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l05079"></a><span class="lineno"> 5079</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>   {</div>
+<div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>     <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l05082"></a><span class="lineno"> 5082</span>     R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l05083"></a><span class="lineno"> 5083</span>     <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when  [...]
+<div class="line"><a name="l05084"></a><span class="lineno"> 5084</span> </div>
+<div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>     nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>       psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l05088"></a><span class="lineno"> 5088</span> </div>
+<div class="line"><a name="l05089"></a><span class="lineno"> 5089</span>     nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l05091"></a><span class="lineno"> 5091</span>       psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l05092"></a><span class="lineno"> 5092</span> </div>
+<div class="line"><a name="l05093"></a><span class="lineno"> 5093</span>     nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l05094"></a><span class="lineno"> 5094</span>     <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>       psij_const[2*(2*m+2)+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]-((R)((u+l)))/n2,2));</div>
+<div class="line"><a name="l05096"></a><span class="lineno"> 5096</span> </div>
+<div class="line"><a name="l05097"></a><span class="lineno"> 5097</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05098"></a><span class="lineno"> 5098</span> <span class="preprocessor"></span>    nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domai [...]
+<div class="line"><a name="l05099"></a><span class="lineno"> 5099</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05100"></a><span class="lineno"> 5100</span> <span class="preprocessor"></span>    nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, si [...]
+<div class="line"><a name="l05101"></a><span class="lineno"> 5101</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05102"></a><span class="lineno"> 5102</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l05103"></a><span class="lineno"> 5103</span> }</div>
+<div class="line"><a name="l05104"></a><span class="lineno"> 5104</span> </div>
+<div class="line"><a name="l05105"></a><span class="lineno"> 5105</span> </div>
+<div class="line"><a name="l05106"></a><span class="lineno"> 5106</span> <span class="keywordtype">void</span> nfft_trafo_3d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05107"></a><span class="lineno"> 5107</span> {</div>
+<div class="line"><a name="l05108"></a><span class="lineno"> 5108</span>   <span class="keywordtype">int</span> k0,k1,k2,n0,n1,n2,N0,N1,N2;</div>
+<div class="line"><a name="l05109"></a><span class="lineno"> 5109</span>   C *g_hat,*f_hat;</div>
+<div class="line"><a name="l05110"></a><span class="lineno"> 5110</span>   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;</div>
+<div class="line"><a name="l05111"></a><span class="lineno"> 5111</span>   R ck01, ck02, ck11, ck12, ck21, ck22;</div>
+<div class="line"><a name="l05112"></a><span class="lineno"> 5112</span>   C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;</div>
+<div class="line"><a name="l05113"></a><span class="lineno"> 5113</span>   C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;</div>
+<div class="line"><a name="l05114"></a><span class="lineno"> 5114</span> </div>
+<div class="line"><a name="l05115"></a><span class="lineno"> 5115</span>   ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05116"></a><span class="lineno"> 5116</span>   ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l05117"></a><span class="lineno"> 5117</span> </div>
+<div class="line"><a name="l05118"></a><span class="lineno"> 5118</span>   N0=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l05119"></a><span class="lineno"> 5119</span>   N1=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l05120"></a><span class="lineno"> 5120</span>   N2=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2];</div>
+<div class="line"><a name="l05121"></a><span class="lineno"> 5121</span>   n0=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l05122"></a><span class="lineno"> 5122</span>   n1=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l05123"></a><span class="lineno"> 5123</span>   n2=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2];</div>
+<div class="line"><a name="l05124"></a><span class="lineno"> 5124</span> </div>
+<div class="line"><a name="l05125"></a><span class="lineno"> 5125</span>   f_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l05126"></a><span class="lineno"> 5126</span>   g_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l05127"></a><span class="lineno"> 5127</span> </div>
+<div class="line"><a name="l05128"></a><span class="lineno"> 5128</span>   TIC(0)</div>
+<div class="line"><a name="l05129"></a><span class="lineno"> 5129</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05130"></a><span class="lineno"> 5130</span> <span class="preprocessor"></span><span class="preprocessor">  #pragma omp parallel for default(shared) private(k0)</span></div>
+<div class="line"><a name="l05131"></a><span class="lineno"> 5131</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span> (k0 = 0; k0 < ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k0++)</div>
+<div class="line"><a name="l05132"></a><span class="lineno"> 5132</span>     ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[k0] = 0.0;</div>
+<div class="line"><a name="l05133"></a><span class="lineno"> 5133</span> #<span class="keywordflow">else</span></div>
+<div class="line"><a name="l05134"></a><span class="lineno"> 5134</span>   memset(ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l05135"></a><span class="lineno"> 5135</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05136"></a><span class="lineno"> 5136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05137"></a><span class="lineno"> 5137</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05138"></a><span class="lineno"> 5138</span>     {</div>
+<div class="line"><a name="l05139"></a><span class="lineno"> 5139</span>       c_phi_inv01=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[0];</div>
+<div class="line"><a name="l05140"></a><span class="lineno"> 5140</span>       c_phi_inv02=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[0][N0/2];</div>
+<div class="line"><a name="l05141"></a><span class="lineno"> 5141</span> </div>
+<div class="line"><a name="l05142"></a><span class="lineno"> 5142</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)</span></div>
+<div class="line"><a name="l05143"></a><span class="lineno"> 5143</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05144"></a><span class="lineno"> 5144</span>   {</div>
+<div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>     ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>     ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>     c_phi_inv11=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[1];</div>
+<div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>     c_phi_inv12=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[1][N1/2];</div>
+<div class="line"><a name="l05149"></a><span class="lineno"> 5149</span> </div>
+<div class="line"><a name="l05150"></a><span class="lineno"> 5150</span>     <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>       {</div>
+<div class="line"><a name="l05152"></a><span class="lineno"> 5152</span>         ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>         ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>         c_phi_inv21=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[2];</div>
+<div class="line"><a name="l05155"></a><span class="lineno"> 5155</span>         c_phi_inv22=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[2][N2/2];</div>
+<div class="line"><a name="l05156"></a><span class="lineno"> 5156</span> </div>
+<div class="line"><a name="l05157"></a><span class="lineno"> 5157</span>         g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05158"></a><span class="lineno"> 5158</span>         f_hat111=f_hat + (k0*N1+k1)*N2;</div>
+<div class="line"><a name="l05159"></a><span class="lineno"> 5159</span>         g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05160"></a><span class="lineno"> 5160</span>         f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;</div>
+<div class="line"><a name="l05161"></a><span class="lineno"> 5161</span>         g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>         f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05163"></a><span class="lineno"> 5163</span>         g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05164"></a><span class="lineno"> 5164</span>         f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05165"></a><span class="lineno"> 5165</span> </div>
+<div class="line"><a name="l05166"></a><span class="lineno"> 5166</span>         g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05167"></a><span class="lineno"> 5167</span>         f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05168"></a><span class="lineno"> 5168</span>         g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05169"></a><span class="lineno"> 5169</span>         f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05170"></a><span class="lineno"> 5170</span>         g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;</div>
+<div class="line"><a name="l05171"></a><span class="lineno"> 5171</span>         f_hat122=f_hat + (k0*N1+N1/2+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05172"></a><span class="lineno"> 5172</span>         g_hat222=g_hat + (k0*n1+k1)*n2;</div>
+<div class="line"><a name="l05173"></a><span class="lineno"> 5173</span>         f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05174"></a><span class="lineno"> 5174</span> </div>
+<div class="line"><a name="l05175"></a><span class="lineno"> 5175</span>         <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05176"></a><span class="lineno"> 5176</span>     {</div>
+<div class="line"><a name="l05177"></a><span class="lineno"> 5177</span>       ck21=c_phi_inv21[k2];</div>
+<div class="line"><a name="l05178"></a><span class="lineno"> 5178</span>       ck22=c_phi_inv22[k2];</div>
+<div class="line"><a name="l05179"></a><span class="lineno"> 5179</span> </div>
+<div class="line"><a name="l05180"></a><span class="lineno"> 5180</span>       g_hat111[k2] = f_hat111[k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05181"></a><span class="lineno"> 5181</span>       g_hat211[k2] = f_hat211[k2] * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05182"></a><span class="lineno"> 5182</span>       g_hat121[k2] = f_hat121[k2] * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05183"></a><span class="lineno"> 5183</span>       g_hat221[k2] = f_hat221[k2] * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05184"></a><span class="lineno"> 5184</span> </div>
+<div class="line"><a name="l05185"></a><span class="lineno"> 5185</span>       g_hat112[k2] = f_hat112[k2] * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05186"></a><span class="lineno"> 5186</span>       g_hat212[k2] = f_hat212[k2] * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05187"></a><span class="lineno"> 5187</span>       g_hat122[k2] = f_hat122[k2] * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>       g_hat222[k2] = f_hat222[k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>     }</div>
+<div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>       }</div>
+<div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>   }</div>
+<div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>     }</div>
+<div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05194"></a><span class="lineno"> 5194</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)</span></div>
+<div class="line"><a name="l05195"></a><span class="lineno"> 5195</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>       {</div>
+<div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>   ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>   ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>   <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>     {</div>
+<div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>       ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>       ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l05203"></a><span class="lineno"> 5203</span> </div>
+<div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>       <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05205"></a><span class="lineno"> 5205</span>         {</div>
+<div class="line"><a name="l05206"></a><span class="lineno"> 5206</span>     ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));</div>
+<div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>     ck22=K(1.0)/(PHI_HUT(k2,2));</div>
+<div class="line"><a name="l05208"></a><span class="lineno"> 5208</span> </div>
+<div class="line"><a name="l05209"></a><span class="lineno"> 5209</span>     g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+k1)*N2+k2]                  * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>     g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2]           = f_hat[((N0/2+k0)*N1+k1)*N2+k2]           * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>     g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2]         = f_hat[(k0*N1+N1/2+k1)*N2+k2]             * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>     g_hat[(k0*n1+k1)*n2+n2-N2/2+k2]                   = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2]      * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05213"></a><span class="lineno"> 5213</span> </div>
+<div class="line"><a name="l05214"></a><span class="lineno"> 5214</span>     g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2]         = f_hat[(k0*N1+k1)*N2+N2/2+k2]             * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>     g_hat[(k0*n1+n1-N1/2+k1)*n2+k2]                   = f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2]      * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>     g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2]                 = f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2]        * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>     g_hat[(k0*n1+k1)*n2+k2]                           = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05218"></a><span class="lineno"> 5218</span>         }</div>
+<div class="line"><a name="l05219"></a><span class="lineno"> 5219</span>     }</div>
+<div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>       }</div>
+<div class="line"><a name="l05221"></a><span class="lineno"> 5221</span> </div>
+<div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>   TOC(0)</div>
+<div class="line"><a name="l05223"></a><span class="lineno"> 5223</span> </div>
+<div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>   TIC_FFTW(1)</div>
+<div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>   fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>   TOC_FFTW(1);</div>
+<div class="line"><a name="l05227"></a><span class="lineno"> 5227</span> </div>
+<div class="line"><a name="l05228"></a><span class="lineno"> 5228</span>   TIC(2);</div>
+<div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>   nfft_trafo_3d_B(ths);</div>
+<div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>   TOC(2);</div>
+<div class="line"><a name="l05231"></a><span class="lineno"> 5231</span> }</div>
+<div class="line"><a name="l05232"></a><span class="lineno"> 5232</span> </div>
+<div class="line"><a name="l05233"></a><span class="lineno"> 5233</span> <span class="keywordtype">void</span> nfft_adjoint_3d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05234"></a><span class="lineno"> 5234</span> {</div>
+<div class="line"><a name="l05235"></a><span class="lineno"> 5235</span>   <span class="keywordtype">int</span> k0,k1,k2,n0,n1,n2,N0,N1,N2;</div>
+<div class="line"><a name="l05236"></a><span class="lineno"> 5236</span>   C *g_hat,*f_hat;</div>
+<div class="line"><a name="l05237"></a><span class="lineno"> 5237</span>   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;</div>
+<div class="line"><a name="l05238"></a><span class="lineno"> 5238</span>   R ck01, ck02, ck11, ck12, ck21, ck22;</div>
+<div class="line"><a name="l05239"></a><span class="lineno"> 5239</span>   C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;</div>
+<div class="line"><a name="l05240"></a><span class="lineno"> 5240</span>   C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;</div>
+<div class="line"><a name="l05241"></a><span class="lineno"> 5241</span> </div>
+<div class="line"><a name="l05242"></a><span class="lineno"> 5242</span>   ths->g_hat=ths->g1;</div>
+<div class="line"><a name="l05243"></a><span class="lineno"> 5243</span>   ths->g=ths->g2;</div>
+<div class="line"><a name="l05244"></a><span class="lineno"> 5244</span> </div>
+<div class="line"><a name="l05245"></a><span class="lineno"> 5245</span>   N0=ths->N[0];</div>
+<div class="line"><a name="l05246"></a><span class="lineno"> 5246</span>   N1=ths->N[1];</div>
+<div class="line"><a name="l05247"></a><span class="lineno"> 5247</span>   N2=ths->N[2];</div>
+<div class="line"><a name="l05248"></a><span class="lineno"> 5248</span>   n0=ths->n[0];</div>
+<div class="line"><a name="l05249"></a><span class="lineno"> 5249</span>   n1=ths->n[1];</div>
+<div class="line"><a name="l05250"></a><span class="lineno"> 5250</span>   n2=ths->n[2];</div>
+<div class="line"><a name="l05251"></a><span class="lineno"> 5251</span> </div>
+<div class="line"><a name="l05252"></a><span class="lineno"> 5252</span>   f_hat=(C*)ths->f_hat;</div>
+<div class="line"><a name="l05253"></a><span class="lineno"> 5253</span>   g_hat=(C*)ths->g_hat;</div>
+<div class="line"><a name="l05254"></a><span class="lineno"> 5254</span> </div>
+<div class="line"><a name="l05255"></a><span class="lineno"> 5255</span>   TIC(2);</div>
+<div class="line"><a name="l05256"></a><span class="lineno"> 5256</span>   nfft_adjoint_3d_B(ths);</div>
+<div class="line"><a name="l05257"></a><span class="lineno"> 5257</span>   TOC(2);</div>
+<div class="line"><a name="l05258"></a><span class="lineno"> 5258</span> </div>
+<div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>   TIC_FFTW(1)</div>
+<div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>   fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>   TOC_FFTW(1);</div>
+<div class="line"><a name="l05262"></a><span class="lineno"> 5262</span> </div>
+<div class="line"><a name="l05263"></a><span class="lineno"> 5263</span>   TIC(0)</div>
+<div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>   if(ths->nfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>     {</div>
+<div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>       c_phi_inv01=ths->c_phi_inv[0];</div>
+<div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>       c_phi_inv02=&ths->c_phi_inv[0][N0/2];</div>
+<div class="line"><a name="l05268"></a><span class="lineno"> 5268</span> </div>
+<div class="line"><a name="l05269"></a><span class="lineno"> 5269</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)</span></div>
+<div class="line"><a name="l05270"></a><span class="lineno"> 5270</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05271"></a><span class="lineno"> 5271</span>   {</div>
+<div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>     ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>     ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>     c_phi_inv11=ths->c_phi_inv[1];</div>
+<div class="line"><a name="l05275"></a><span class="lineno"> 5275</span>     c_phi_inv12=&ths->c_phi_inv[1][N1/2];</div>
+<div class="line"><a name="l05276"></a><span class="lineno"> 5276</span> </div>
+<div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>     <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>       {</div>
+<div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>         ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l05280"></a><span class="lineno"> 5280</span>         ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>         c_phi_inv21=ths->c_phi_inv[2];</div>
+<div class="line"><a name="l05282"></a><span class="lineno"> 5282</span>         c_phi_inv22=&ths->c_phi_inv[2][N2/2];</div>
+<div class="line"><a name="l05283"></a><span class="lineno"> 5283</span> </div>
+<div class="line"><a name="l05284"></a><span class="lineno"> 5284</span>         g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05285"></a><span class="lineno"> 5285</span>         f_hat111=f_hat + (k0*N1+k1)*N2;</div>
+<div class="line"><a name="l05286"></a><span class="lineno"> 5286</span>         g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>         f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;</div>
+<div class="line"><a name="l05288"></a><span class="lineno"> 5288</span>         g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>         f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05290"></a><span class="lineno"> 5290</span>         g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05291"></a><span class="lineno"> 5291</span>         f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05292"></a><span class="lineno"> 5292</span> </div>
+<div class="line"><a name="l05293"></a><span class="lineno"> 5293</span>         g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05294"></a><span class="lineno"> 5294</span>         f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05295"></a><span class="lineno"> 5295</span>         g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05296"></a><span class="lineno"> 5296</span>         f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05297"></a><span class="lineno"> 5297</span>         g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;</div>
+<div class="line"><a name="l05298"></a><span class="lineno"> 5298</span>         f_hat122=f_hat + (k0*N1+(N1/2)+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05299"></a><span class="lineno"> 5299</span>         g_hat222=g_hat + (k0*n1+k1)*n2;</div>
+<div class="line"><a name="l05300"></a><span class="lineno"> 5300</span>         f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05301"></a><span class="lineno"> 5301</span> </div>
+<div class="line"><a name="l05302"></a><span class="lineno"> 5302</span>         <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05303"></a><span class="lineno"> 5303</span>     {</div>
+<div class="line"><a name="l05304"></a><span class="lineno"> 5304</span>       ck21=c_phi_inv21[k2];</div>
+<div class="line"><a name="l05305"></a><span class="lineno"> 5305</span>       ck22=c_phi_inv22[k2];</div>
+<div class="line"><a name="l05306"></a><span class="lineno"> 5306</span> </div>
+<div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>       f_hat111[k2] = g_hat111[k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>       f_hat211[k2] = g_hat211[k2] * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>       f_hat121[k2] = g_hat121[k2] * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>       f_hat221[k2] = g_hat221[k2] * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05311"></a><span class="lineno"> 5311</span> </div>
+<div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>       f_hat112[k2] = g_hat112[k2] * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>       f_hat212[k2] = g_hat212[k2] * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05314"></a><span class="lineno"> 5314</span>       f_hat122[k2] = g_hat122[k2] * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05315"></a><span class="lineno"> 5315</span>       f_hat222[k2] = g_hat222[k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05316"></a><span class="lineno"> 5316</span>     }</div>
+<div class="line"><a name="l05317"></a><span class="lineno"> 5317</span>       }</div>
+<div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>   }</div>
+<div class="line"><a name="l05319"></a><span class="lineno"> 5319</span>     }</div>
+<div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05321"></a><span class="lineno"> 5321</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)</span></div>
+<div class="line"><a name="l05322"></a><span class="lineno"> 5322</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05323"></a><span class="lineno"> 5323</span>       {</div>
+<div class="line"><a name="l05324"></a><span class="lineno"> 5324</span>   ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l05325"></a><span class="lineno"> 5325</span>   ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l05326"></a><span class="lineno"> 5326</span>   <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05327"></a><span class="lineno"> 5327</span>     {</div>
+<div class="line"><a name="l05328"></a><span class="lineno"> 5328</span>       ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l05329"></a><span class="lineno"> 5329</span>       ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l05330"></a><span class="lineno"> 5330</span> </div>
+<div class="line"><a name="l05331"></a><span class="lineno"> 5331</span>       <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05332"></a><span class="lineno"> 5332</span>         {</div>
+<div class="line"><a name="l05333"></a><span class="lineno"> 5333</span>     ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));</div>
+<div class="line"><a name="l05334"></a><span class="lineno"> 5334</span>     ck22=K(1.0)/(PHI_HUT(k2,2));</div>
+<div class="line"><a name="l05335"></a><span class="lineno"> 5335</span> </div>
+<div class="line"><a name="l05336"></a><span class="lineno"> 5336</span>     f_hat[(k0*N1+k1)*N2+k2]                  = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05337"></a><span class="lineno"> 5337</span>     f_hat[((N0/2+k0)*N1+k1)*N2+k2]           = g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2]           * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05338"></a><span class="lineno"> 5338</span>     f_hat[(k0*N1+N1/2+k1)*N2+k2]             = g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2]         * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05339"></a><span class="lineno"> 5339</span>     f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2]      = g_hat[(k0*n1+k1)*n2+n2-N2/2+k2]                   * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05340"></a><span class="lineno"> 5340</span> </div>
+<div class="line"><a name="l05341"></a><span class="lineno"> 5341</span>     f_hat[(k0*N1+k1)*N2+N2/2+k2]             = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2]         * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05342"></a><span class="lineno"> 5342</span>     f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2]      = g_hat[(k0*n1+n1-N1/2+k1)*n2+k2]                   * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05343"></a><span class="lineno"> 5343</span>     f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2]        = g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2]                 * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05344"></a><span class="lineno"> 5344</span>     f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] = g_hat[(k0*n1+k1)*n2+k2]                           * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05345"></a><span class="lineno"> 5345</span>         }</div>
+<div class="line"><a name="l05346"></a><span class="lineno"> 5346</span>     }</div>
+<div class="line"><a name="l05347"></a><span class="lineno"> 5347</span>       }</div>
+<div class="line"><a name="l05348"></a><span class="lineno"> 5348</span> </div>
+<div class="line"><a name="l05349"></a><span class="lineno"> 5349</span>   TOC(0)</div>
+<div class="line"><a name="l05350"></a><span class="lineno"> 5350</span> }</div>
+<div class="line"><a name="l05351"></a><span class="lineno"> 5351</span> </div>
+<div class="line"><a name="l05354"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421"> 5354</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05355"></a><span class="lineno"> 5355</span> {</div>
+<div class="line"><a name="l05356"></a><span class="lineno"> 5356</span>   <span class="keywordflow">switch</span>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>)</div>
+<div class="line"><a name="l05357"></a><span class="lineno"> 5357</span>     {</div>
+<div class="line"><a name="l05358"></a><span class="lineno"> 5358</span>     <span class="keywordflow">case</span> 1: nfft_trafo_1d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05359"></a><span class="lineno"> 5359</span>     <span class="keywordflow">case</span> 2: nfft_trafo_2d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05360"></a><span class="lineno"> 5360</span>     <span class="keywordflow">case</span> 3: nfft_trafo_3d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05361"></a><span class="lineno"> 5361</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l05362"></a><span class="lineno"> 5362</span>     <span class="comment">/* use ths->my_fftw_plan1 */</span></div>
+<div class="line"><a name="l05363"></a><span class="lineno"> 5363</span>     ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05364"></a><span class="lineno"> 5364</span>     ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l05365"></a><span class="lineno"> 5365</span> </div>
+<div class="line"><a name="l05369"></a><span class="lineno"> 5369</span>     TIC(0)</div>
+<div class="line"><a name="l05370"></a><span class="lineno"> 5370</span>     nfft_D_A(ths);</div>
+<div class="line"><a name="l05371"></a><span class="lineno"> 5371</span>     TOC(0)</div>
+<div class="line"><a name="l05372"></a><span class="lineno"> 5372</span> </div>
+<div class="line"><a name="l05373"></a><span class="lineno"> 5373</span>     </div>
+<div class="line"><a name="l05377"></a><span class="lineno"> 5377</span>     TIC_FFTW(1)</div>
+<div class="line"><a name="l05378"></a><span class="lineno"> 5378</span>     fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l05379"></a><span class="lineno"> 5379</span>     TOC_FFTW(1)</div>
+<div class="line"><a name="l05380"></a><span class="lineno"> 5380</span> </div>
+<div class="line"><a name="l05381"></a><span class="lineno"> 5381</span>     </div>
+<div class="line"><a name="l05384"></a><span class="lineno"> 5384</span>     TIC(2)</div>
+<div class="line"><a name="l05385"></a><span class="lineno"> 5385</span>     nfft_B_A(ths);</div>
+<div class="line"><a name="l05386"></a><span class="lineno"> 5386</span>     TOC(2)</div>
+<div class="line"><a name="l05387"></a><span class="lineno"> 5387</span>     }</div>
+<div class="line"><a name="l05388"></a><span class="lineno"> 5388</span> } <span class="comment">/* nfft_trafo */</span></div>
+<div class="line"><a name="l05389"></a><span class="lineno"> 5389</span> </div>
+<div class="line"><a name="l05390"></a><span class="lineno"> 5390</span> <span class="keywordtype">void</span> nfft_adjoint(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05391"></a><span class="lineno"> 5391</span> {</div>
+<div class="line"><a name="l05392"></a><span class="lineno"> 5392</span>   <span class="keywordflow">switch</span>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>)</div>
+<div class="line"><a name="l05393"></a><span class="lineno"> 5393</span>     {</div>
+<div class="line"><a name="l05394"></a><span class="lineno"> 5394</span>     <span class="keywordflow">case</span> 1: nfft_adjoint_1d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05395"></a><span class="lineno"> 5395</span>     <span class="keywordflow">case</span> 2: nfft_adjoint_2d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05396"></a><span class="lineno"> 5396</span>     <span class="keywordflow">case</span> 3: nfft_adjoint_3d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05397"></a><span class="lineno"> 5397</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l05398"></a><span class="lineno"> 5398</span>       <span class="comment">/* use ths->my_fftw_plan2 */</span></div>
+<div class="line"><a name="l05399"></a><span class="lineno"> 5399</span>       ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05400"></a><span class="lineno"> 5400</span>       ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l05401"></a><span class="lineno"> 5401</span>       </div>
+<div class="line"><a name="l05405"></a><span class="lineno"> 5405</span>       TIC(2)</div>
+<div class="line"><a name="l05406"></a><span class="lineno"> 5406</span>       nfft_B_T(ths);</div>
+<div class="line"><a name="l05407"></a><span class="lineno"> 5407</span>       TOC(2)</div>
+<div class="line"><a name="l05408"></a><span class="lineno"> 5408</span> </div>
+<div class="line"><a name="l05413"></a><span class="lineno"> 5413</span>       TIC_FFTW(1)</div>
+<div class="line"><a name="l05414"></a><span class="lineno"> 5414</span>       fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l05415"></a><span class="lineno"> 5415</span>       TOC_FFTW(1)</div>
+<div class="line"><a name="l05416"></a><span class="lineno"> 5416</span> </div>
+<div class="line"><a name="l05420"></a><span class="lineno"> 5420</span>       TIC(0)</div>
+<div class="line"><a name="l05421"></a><span class="lineno"> 5421</span>       nfft_D_T(ths);</div>
+<div class="line"><a name="l05422"></a><span class="lineno"> 5422</span>       TOC(0)</div>
+<div class="line"><a name="l05423"></a><span class="lineno"> 5423</span>     }</div>
+<div class="line"><a name="l05424"></a><span class="lineno"> 5424</span> } <span class="comment">/* nfft_adjoint */</span></div>
+<div class="line"><a name="l05425"></a><span class="lineno"> 5425</span> </div>
+<div class="line"><a name="l05426"></a><span class="lineno"> 5426</span> </div>
+<div class="line"><a name="l05429"></a><span class="lineno"> 5429</span> static <span class="keywordtype">void</span> nfft_precompute_phi_hut(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05430"></a><span class="lineno"> 5430</span> {</div>
+<div class="line"><a name="l05431"></a><span class="lineno"> 5431</span>   <span class="keywordtype">int</span> ks[ths->d];                       </div>
+<div class="line"><a name="l05432"></a><span class="lineno"> 5432</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05434"></a><span class="lineno"> 5434</span>   ths->c_phi_inv = (R**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths->d*<span class="keyword">sizeof</span>(R*));</div>
+<div class="line"><a name="l05435"></a><span class="lineno"> 5435</span> </div>
+<div class="line"><a name="l05436"></a><span class="lineno"> 5436</span>   <span class="keywordflow">for</span>(t=0; t<ths->d; t++)</div>
+<div class="line"><a name="l05437"></a><span class="lineno"> 5437</span>     {</div>
+<div class="line"><a name="l05438"></a><span class="lineno"> 5438</span>       ths->c_phi_inv[t]= (R*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths->N[t]*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l05439"></a><span class="lineno"> 5439</span>       <span class="keywordflow">for</span>(ks[t]=0; ks[t]<ths->N[t]; ks[t]++)</div>
+<div class="line"><a name="l05440"></a><span class="lineno"> 5440</span>   ths->c_phi_inv[t][ks[t]]= K(1.0)/(PHI_HUT(ks[t]-ths->N[t]/2,t));</div>
+<div class="line"><a name="l05441"></a><span class="lineno"> 5441</span>     }</div>
+<div class="line"><a name="l05442"></a><span class="lineno"> 5442</span> } <span class="comment">/* nfft_phi_hut */</span></div>
+<div class="line"><a name="l05443"></a><span class="lineno"> 5443</span> </div>
+<div class="line"><a name="l05449"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc"> 5449</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05450"></a><span class="lineno"> 5450</span> {</div>
+<div class="line"><a name="l05451"></a><span class="lineno"> 5451</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05452"></a><span class="lineno"> 5452</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l05453"></a><span class="lineno"> 5453</span>   R step;                          </div>
+<div class="line"><a name="l05455"></a><span class="lineno"> 5455</span>   <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05456"></a><span class="lineno"> 5456</span>     {</div>
+<div class="line"><a name="l05457"></a><span class="lineno"> 5457</span>       step=((R)(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2))/(((R)ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K [...]
+<div class="line"><a name="l05458"></a><span class="lineno"> 5458</span>       <span class="keywordflow">for</span>(j=0;j<=ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;j++)</div>
+<div class="line"><a name="l05459"></a><span class="lineno"> 5459</span>   {</div>
+<div class="line"><a name="l05460"></a><span class="lineno"> 5460</span>     ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t + j] = PHI(j*step,t);</div>
+<div class="line"><a name="l05461"></a><span class="lineno"> 5461</span>   } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05462"></a><span class="lineno"> 5462</span>     } <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l05463"></a><span class="lineno"> 5463</span> }</div>
+<div class="line"><a name="l05464"></a><span class="lineno"> 5464</span> </div>
+<div class="line"><a name="l05465"></a><span class="lineno"> 5465</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_precompute_fg_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05466"></a><span class="lineno"> 5466</span> {</div>
+<div class="line"><a name="l05467"></a><span class="lineno"> 5467</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05468"></a><span class="lineno"> 5468</span>   <span class="keywordtype">int</span> u, o;                             </div>
+<div class="line"><a name="l05470"></a><span class="lineno"> 5470</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05471"></a><span class="lineno"> 5471</span> </div>
+<div class="line"><a name="l05472"></a><span class="lineno"> 5472</span>   <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05473"></a><span class="lineno"> 5473</span>   {</div>
+<div class="line"><a name="l05474"></a><span class="lineno"> 5474</span>     <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l05475"></a><span class="lineno"> 5475</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(j,u,o)</span></div>
+<div class="line"><a name="l05476"></a><span class="lineno"> 5476</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l05477"></a><span class="lineno"> 5477</span>       {</div>
+<div class="line"><a name="l05478"></a><span class="lineno"> 5478</span>   nfft_uo(ths,j,&u,&o,t);</div>
+<div class="line"><a name="l05479"></a><span class="lineno"> 5479</span> </div>
+<div class="line"><a name="l05480"></a><span class="lineno"> 5480</span>         ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t)]=</div>
+<div class="line"><a name="l05481"></a><span class="lineno"> 5481</span>             (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t]-((R)u)/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to [...]
+<div class="line"><a name="l05482"></a><span class="lineno"> 5482</span> </div>
+<div class="line"><a name="l05483"></a><span class="lineno"> 5483</span>         ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t)+1]=</div>
+<div class="line"><a name="l05484"></a><span class="lineno"> 5484</span>             EXP(K(2.0)*(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac94 [...]
+<div class="line"><a name="l05485"></a><span class="lineno"> 5485</span>       } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05486"></a><span class="lineno"> 5486</span>   }</div>
+<div class="line"><a name="l05487"></a><span class="lineno"> 5487</span>   <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l05488"></a><span class="lineno"> 5488</span> } <span class="comment">/* nfft_precompute_fg_psi */</span></div>
+<div class="line"><a name="l05489"></a><span class="lineno"> 5489</span> </div>
+<div class="line"><a name="l05490"></a><span class="lineno"> 5490</span> <span class="keywordtype">void</span> nfft_precompute_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05491"></a><span class="lineno"> 5491</span> {</div>
+<div class="line"><a name="l05492"></a><span class="lineno"> 5492</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05493"></a><span class="lineno"> 5493</span>   <span class="keywordtype">int</span> l;                                </div>
+<div class="line"><a name="l05494"></a><span class="lineno"> 5494</span>   <span class="keywordtype">int</span> lj;                               </div>
+<div class="line"><a name="l05495"></a><span class="lineno"> 5495</span>   <span class="keywordtype">int</span> u, o;                             </div>
+<div class="line"><a name="l05497"></a><span class="lineno"> 5497</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05498"></a><span class="lineno"> 5498</span> </div>
+<div class="line"><a name="l05499"></a><span class="lineno"> 5499</span>   <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05500"></a><span class="lineno"> 5500</span>   {</div>
+<div class="line"><a name="l05501"></a><span class="lineno"> 5501</span>     <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l05502"></a><span class="lineno"> 5502</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(j,l,lj,u,o)</span></div>
+<div class="line"><a name="l05503"></a><span class="lineno"> 5503</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l05504"></a><span class="lineno"> 5504</span>       {</div>
+<div class="line"><a name="l05505"></a><span class="lineno"> 5505</span>   nfft_uo(ths,j,&u,&o,t);</div>
+<div class="line"><a name="l05506"></a><span class="lineno"> 5506</span> </div>
+<div class="line"><a name="l05507"></a><span class="lineno"> 5507</span>   <span class="keywordflow">for</span>(l=u, lj=0; l <= o; l++, lj++)</div>
+<div class="line"><a name="l05508"></a><span class="lineno"> 5508</span>     ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t)*(2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut- [...]
+<div class="line"><a name="l05509"></a><span class="lineno"> 5509</span>       (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t]-((R)l)/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma [...]
+<div class="line"><a name="l05510"></a><span class="lineno"> 5510</span>       } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05511"></a><span class="lineno"> 5511</span>   }</div>
+<div class="line"><a name="l05512"></a><span class="lineno"> 5512</span>   <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l05513"></a><span class="lineno"> 5513</span> } <span class="comment">/* nfft_precompute_psi */</span></div>
+<div class="line"><a name="l05514"></a><span class="lineno"> 5514</span> </div>
+<div class="line"><a name="l05515"></a><span class="lineno"> 5515</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05516"></a><span class="lineno"> 5516</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_precompute_full_psi_omp(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05517"></a><span class="lineno"> 5517</span> {</div>
+<div class="line"><a name="l05518"></a><span class="lineno"> 5518</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l05519"></a><span class="lineno"> 5519</span>   <span class="keywordtype">int</span> lprod;                            </div>
+<div class="line"><a name="l05521"></a><span class="lineno"> 5521</span>   {</div>
+<div class="line"><a name="l05522"></a><span class="lineno"> 5522</span>     <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l05523"></a><span class="lineno"> 5523</span>     <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05524"></a><span class="lineno"> 5524</span>         lprod *= 2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2;</div>
+<div class="line"><a name="l05525"></a><span class="lineno"> 5525</span>   }</div>
+<div class="line"><a name="l05526"></a><span class="lineno"> 5526</span> </div>
+<div class="line"><a name="l05527"></a><span class="lineno"> 5527</span> <span class="preprocessor">  #pragma omp parallel for default(shared) private(j)</span></div>
+<div class="line"><a name="l05528"></a><span class="lineno"> 5528</span> <span class="preprocessor"></span>  <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l05529"></a><span class="lineno"> 5529</span>     {</div>
+<div class="line"><a name="l05530"></a><span class="lineno"> 5530</span>       <span class="keywordtype">int</span> t,t2;                             </div>
+<div class="line"><a name="l05531"></a><span class="lineno"> 5531</span>       <span class="keywordtype">int</span> l_L;                              </div>
+<div class="line"><a name="l05532"></a><span class="lineno"> 5532</span>       <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        </div>
+<div class="line"><a name="l05533"></a><span class="lineno"> 5533</span>       <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                       </div>
+<div class="line"><a name="l05534"></a><span class="lineno"> 5534</span>       <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];               </div>
+<div class="line"><a name="l05536"></a><span class="lineno"> 5536</span>       <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];             </div>
+<div class="line"><a name="l05538"></a><span class="lineno"> 5538</span>       R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l05539"></a><span class="lineno"> 5539</span>       <span class="keywordtype">int</span> ix = j*lprod;</div>
+<div class="line"><a name="l05540"></a><span class="lineno"> 5540</span> </div>
+<div class="line"><a name="l05541"></a><span class="lineno"> 5541</span>       phi_prod[0]=1;</div>
+<div class="line"><a name="l05542"></a><span class="lineno"> 5542</span>       ll_plain[0]=0;</div>
+<div class="line"><a name="l05543"></a><span class="lineno"> 5543</span> </div>
+<div class="line"><a name="l05544"></a><span class="lineno"> 5544</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l05545"></a><span class="lineno"> 5545</span> </div>
+<div class="line"><a name="l05546"></a><span class="lineno"> 5546</span>       <span class="keywordflow">for</span>(l_L=0; l_L<lprod; l_L++, ix++)</div>
+<div class="line"><a name="l05547"></a><span class="lineno"> 5547</span>       {</div>
+<div class="line"><a name="l05548"></a><span class="lineno"> 5548</span>         MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l05549"></a><span class="lineno"> 5549</span> </div>
+<div class="line"><a name="l05550"></a><span class="lineno"> 5550</span>         ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>[ix]=ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05551"></a><span class="lineno"> 5551</span>         ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ix]=phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05552"></a><span class="lineno"> 5552</span> </div>
+<div class="line"><a name="l05553"></a><span class="lineno"> 5553</span>         MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l05554"></a><span class="lineno"> 5554</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l05555"></a><span class="lineno"> 5555</span> </div>
+<div class="line"><a name="l05556"></a><span class="lineno"> 5556</span>       ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a>[j]=lprod;</div>
+<div class="line"><a name="l05557"></a><span class="lineno"> 5557</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05558"></a><span class="lineno"> 5558</span> }</div>
+<div class="line"><a name="l05559"></a><span class="lineno"> 5559</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05560"></a><span class="lineno"> 5560</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05561"></a><span class="lineno"> 5561</span> <span class="keywordtype">void</span> nfft_precompute_full_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05562"></a><span class="lineno"> 5562</span> {</div>
+<div class="line"><a name="l05563"></a><span class="lineno"> 5563</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05564"></a><span class="lineno"> 5564</span> <span class="preprocessor"></span>  nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05565"></a><span class="lineno"> 5565</span> </div>
+<div class="line"><a name="l05566"></a><span class="lineno"> 5566</span>   nfft_precompute_full_psi_omp(ths);</div>
+<div class="line"><a name="l05567"></a><span class="lineno"> 5567</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05568"></a><span class="lineno"> 5568</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> t,t2;                             </div>
+<div class="line"><a name="l05569"></a><span class="lineno"> 5569</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l05570"></a><span class="lineno"> 5570</span>   <span class="keywordtype">int</span> l_L;                              </div>
+<div class="line"><a name="l05571"></a><span class="lineno"> 5571</span>   <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                        </div>
+<div class="line"><a name="l05572"></a><span class="lineno"> 5572</span>   <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];                       </div>
+<div class="line"><a name="l05573"></a><span class="lineno"> 5573</span>   <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];               </div>
+<div class="line"><a name="l05574"></a><span class="lineno"> 5574</span>   <span class="keywordtype">int</span> lprod;                            </div>
+<div class="line"><a name="l05575"></a><span class="lineno"> 5575</span>   <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];             </div>
+<div class="line"><a name="l05577"></a><span class="lineno"> 5577</span>   R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l05578"></a><span class="lineno"> 5578</span> </div>
+<div class="line"><a name="l05579"></a><span class="lineno"> 5579</span>   <span class="keywordtype">int</span> ix,ix_old;</div>
+<div class="line"><a name="l05580"></a><span class="lineno"> 5580</span> </div>
+<div class="line"><a name="l05581"></a><span class="lineno"> 5581</span>   nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05582"></a><span class="lineno"> 5582</span> </div>
+<div class="line"><a name="l05583"></a><span class="lineno"> 5583</span>   phi_prod[0]=1;</div>
+<div class="line"><a name="l05584"></a><span class="lineno"> 5584</span>   ll_plain[0]=0;</div>
+<div class="line"><a name="l05585"></a><span class="lineno"> 5585</span> </div>
+<div class="line"><a name="l05586"></a><span class="lineno"> 5586</span>   <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05587"></a><span class="lineno"> 5587</span>       lprod *= 2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2;</div>
+<div class="line"><a name="l05588"></a><span class="lineno"> 5588</span> </div>
+<div class="line"><a name="l05589"></a><span class="lineno"> 5589</span>   <span class="keywordflow">for</span>(j=0,ix=0,ix_old=0; j<ths->M_total; j++)</div>
+<div class="line"><a name="l05590"></a><span class="lineno"> 5590</span>     {</div>
+<div class="line"><a name="l05591"></a><span class="lineno"> 5591</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l05592"></a><span class="lineno"> 5592</span> </div>
+<div class="line"><a name="l05593"></a><span class="lineno"> 5593</span>       <span class="keywordflow">for</span>(l_L=0; l_L<lprod; l_L++, ix++)</div>
+<div class="line"><a name="l05594"></a><span class="lineno"> 5594</span>   {</div>
+<div class="line"><a name="l05595"></a><span class="lineno"> 5595</span>     MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l05596"></a><span class="lineno"> 5596</span> </div>
+<div class="line"><a name="l05597"></a><span class="lineno"> 5597</span>     ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>[ix]=ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05598"></a><span class="lineno"> 5598</span>     ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ix]=phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05599"></a><span class="lineno"> 5599</span> </div>
+<div class="line"><a name="l05600"></a><span class="lineno"> 5600</span>     MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l05601"></a><span class="lineno"> 5601</span>   } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l05602"></a><span class="lineno"> 5602</span> </div>
+<div class="line"><a name="l05603"></a><span class="lineno"> 5603</span> </div>
+<div class="line"><a name="l05604"></a><span class="lineno"> 5604</span>       ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a>[j]=ix-ix_old;</div>
+<div class="line"><a name="l05605"></a><span class="lineno"> 5605</span>       ix_old=ix;</div>
+<div class="line"><a name="l05606"></a><span class="lineno"> 5606</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05607"></a><span class="lineno"> 5607</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05608"></a><span class="lineno"> 5608</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l05609"></a><span class="lineno"> 5609</span> </div>
+<div class="line"><a name="l05610"></a><span class="lineno"> 5610</span> <span class="keywordtype">void</span> nfft_precompute_one_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05611"></a><span class="lineno"> 5611</span> {</div>
+<div class="line"><a name="l05612"></a><span class="lineno"> 5612</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05613"></a><span class="lineno"> 5613</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(ths);</div>
+<div class="line"><a name="l05614"></a><span class="lineno"> 5614</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l05615"></a><span class="lineno"> 5615</span>     nfft_precompute_fg_psi(ths);</div>
+<div class="line"><a name="l05616"></a><span class="lineno"> 5616</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l05617"></a><span class="lineno"> 5617</span>     nfft_precompute_psi(ths);</div>
+<div class="line"><a name="l05618"></a><span class="lineno"> 5618</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l05619"></a><span class="lineno"> 5619</span>     nfft_precompute_full_psi(ths);</div>
+<div class="line"><a name="l05620"></a><span class="lineno"> 5620</span> }</div>
+<div class="line"><a name="l05621"></a><span class="lineno"> 5621</span> </div>
+<div class="line"><a name="l05622"></a><span class="lineno"> 5622</span> </div>
+<div class="line"><a name="l05623"></a><span class="lineno"> 5623</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_init_help(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05624"></a><span class="lineno"> 5624</span> {</div>
+<div class="line"><a name="l05625"></a><span class="lineno"> 5625</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05626"></a><span class="lineno"> 5626</span>   <span class="keywordtype">int</span> lprod;                            </div>
+<div class="line"><a name="l05628"></a><span class="lineno"> 5628</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l05629"></a><span class="lineno"> 5629</span>     ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> |= NFFT_SORT_NODES;</div>
+<div class="line"><a name="l05630"></a><span class="lineno"> 5630</span> </div>
+<div class="line"><a name="l05631"></a><span class="lineno"> 5631</span>   ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>=<a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>, ths-><a class="code" h [...]
+<div class="line"><a name="l05632"></a><span class="lineno"> 5632</span>   ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>=<a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that  [...]
+<div class="line"><a name="l05633"></a><span class="lineno"> 5633</span> </div>
+<div class="line"><a name="l05634"></a><span class="lineno"> 5634</span>   ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l05635"></a><span class="lineno"> 5635</span>   <span class="keywordflow">for</span>(t = 0;t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05636"></a><span class="lineno"> 5636</span>     ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a>[t] = ((R)ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t])/ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-ba [...]
+<div class="line"><a name="l05637"></a><span class="lineno"> 5637</span> </div>
+<div class="line"><a name="l05638"></a><span class="lineno"> 5638</span>   WINDOW_HELP_INIT;</div>
+<div class="line"><a name="l05639"></a><span class="lineno"> 5639</span> </div>
+<div class="line"><a name="l05640"></a><span class="lineno"> 5640</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l05641"></a><span class="lineno"> 5641</span>     ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> = (R*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*ths-><a class="code" href="structnfft__plan.h [...]
+<div class="line"><a name="l05642"></a><span class="lineno"> 5642</span> </div>
+<div class="line"><a name="l05643"></a><span class="lineno"> 5643</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l05644"></a><span class="lineno"> 5644</span>     ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficien [...]
+<div class="line"><a name="l05645"></a><span class="lineno"> 5645</span> </div>
+<div class="line"><a name="l05646"></a><span class="lineno"> 5646</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l05647"></a><span class="lineno"> 5647</span>     ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class=" [...]
+<div class="line"><a name="l05648"></a><span class="lineno"> 5648</span> </div>
+<div class="line"><a name="l05649"></a><span class="lineno"> 5649</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05650"></a><span class="lineno"> 5650</span>     nfft_precompute_phi_hut(ths);</div>
+<div class="line"><a name="l05651"></a><span class="lineno"> 5651</span> </div>
+<div class="line"><a name="l05652"></a><span class="lineno"> 5652</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05653"></a><span class="lineno"> 5653</span>   {</div>
+<div class="line"><a name="l05654"></a><span class="lineno"> 5654</span>       ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=(1U<< 10)*(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</ [...]
+<div class="line"><a name="l05655"></a><span class="lineno"> 5655</span>       ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the  [...]
+<div class="line"><a name="l05656"></a><span class="lineno"> 5656</span>   }</div>
+<div class="line"><a name="l05657"></a><span class="lineno"> 5657</span> </div>
+<div class="line"><a name="l05658"></a><span class="lineno"> 5658</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l05659"></a><span class="lineno"> 5659</span>     ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*t [...]
+<div class="line"><a name="l05660"></a><span class="lineno"> 5660</span> </div>
+<div class="line"><a name="l05661"></a><span class="lineno"> 5661</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l05662"></a><span class="lineno"> 5662</span>     ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*t [...]
+<div class="line"><a name="l05663"></a><span class="lineno"> 5663</span>              (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2)*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l05664"></a><span class="lineno"> 5664</span> </div>
+<div class="line"><a name="l05665"></a><span class="lineno"> 5665</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l05666"></a><span class="lineno"> 5666</span>   {</div>
+<div class="line"><a name="l05667"></a><span class="lineno"> 5667</span>       <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05668"></a><span class="lineno"> 5668</span>     lprod *= 2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2;</div>
+<div class="line"><a name="l05669"></a><span class="lineno"> 5669</span> </div>
+<div class="line"><a name="l05670"></a><span class="lineno"> 5670</span>       ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a> [...]
+<div class="line"><a name="l05671"></a><span class="lineno"> 5671</span> </div>
+<div class="line"><a name="l05672"></a><span class="lineno"> 5672</span>       ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples. [...]
+<div class="line"><a name="l05673"></a><span class="lineno"> 5673</span>       ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples. [...]
+<div class="line"><a name="l05674"></a><span class="lineno"> 5674</span>   }</div>
+<div class="line"><a name="l05675"></a><span class="lineno"> 5675</span> </div>
+<div class="line"><a name="l05676"></a><span class="lineno"> 5676</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l05677"></a><span class="lineno"> 5677</span>   {</div>
+<div class="line"><a name="l05678"></a><span class="lineno"> 5678</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05679"></a><span class="lineno"> 5679</span> <span class="preprocessor"></span>    <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l05680"></a><span class="lineno"> 5680</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05681"></a><span class="lineno"> 5681</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05682"></a><span class="lineno"> 5682</span>     ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>=(fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l05683"></a><span class="lineno"> 5683</span> </div>
+<div class="line"><a name="l05684"></a><span class="lineno"> 5684</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l05685"></a><span class="lineno"> 5685</span>       ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a> = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l05686"></a><span class="lineno"> 5686</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05687"></a><span class="lineno"> 5687</span>       ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a> = ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05688"></a><span class="lineno"> 5688</span> </div>
+<div class="line"><a name="l05689"></a><span class="lineno"> 5689</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05690"></a><span class="lineno"> 5690</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l05691"></a><span class="lineno"> 5691</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l05692"></a><span class="lineno"> 5692</span>     fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l05693"></a><span class="lineno"> 5693</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05694"></a><span class="lineno"> 5694</span> <span class="preprocessor"></span>    ths->my_fftw_plan1 = fftw_plan_dft(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan [...]
+<div class="line"><a name="l05695"></a><span class="lineno"> 5695</span>     ths->my_fftw_plan2 = fftw_plan_dft(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43 [...]
+<div class="line"><a name="l05696"></a><span class="lineno"> 5696</span>       FFTW_BACKWARD, ths-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l05697"></a><span class="lineno"> 5697</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05698"></a><span class="lineno"> 5698</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l05699"></a><span class="lineno"> 5699</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05700"></a><span class="lineno"> 5700</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l05701"></a><span class="lineno"> 5701</span> </div>
+<div class="line"><a name="l05702"></a><span class="lineno"> 5702</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l05703"></a><span class="lineno"> 5703</span>     ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when flag NFFT_SORT_NODES is set.">index_x</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)*2*ths-><a class="code" href="struc [...]
+<div class="line"><a name="l05704"></a><span class="lineno"> 5704</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05705"></a><span class="lineno"> 5705</span>     ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when flag NFFT_SORT_NODES is set.">index_x</a> = NULL;</div>
+<div class="line"><a name="l05706"></a><span class="lineno"> 5706</span> </div>
+<div class="line"><a name="l05707"></a><span class="lineno"> 5707</span>   ths-><a class="code" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))<a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>;</div>
+<div class="line"><a name="l05708"></a><span class="lineno"> 5708</span>   ths-><a class="code" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfft_adjoint;</div>
+<div class="line"><a name="l05709"></a><span class="lineno"> 5709</span> }</div>
+<div class="line"><a name="l05710"></a><span class="lineno"> 5710</span> </div>
+<div class="line"><a name="l05711"></a><span class="lineno"> 5711</span> <span class="keywordtype">void</span> nfft_init(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05712"></a><span class="lineno"> 5712</span> {</div>
+<div class="line"><a name="l05713"></a><span class="lineno"> 5713</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05715"></a><span class="lineno"> 5715</span>   ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> = d;</div>
+<div class="line"><a name="l05716"></a><span class="lineno"> 5716</span> </div>
+<div class="line"><a name="l05717"></a><span class="lineno"> 5717</span>   ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>=(<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l05718"></a><span class="lineno"> 5718</span> </div>
+<div class="line"><a name="l05719"></a><span class="lineno"> 5719</span>   <span class="keywordflow">for</span> (t = 0;t < d; t++)</div>
+<div class="line"><a name="l05720"></a><span class="lineno"> 5720</span>     ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] = N[t];</div>
+<div class="line"><a name="l05721"></a><span class="lineno"> 5721</span> </div>
+<div class="line"><a name="l05722"></a><span class="lineno"> 5722</span>   ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l05723"></a><span class="lineno"> 5723</span> </div>
+<div class="line"><a name="l05724"></a><span class="lineno"> 5724</span>   ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l05725"></a><span class="lineno"> 5725</span>   <span class="keywordflow">for</span> (t = 0;t < d; t++)</div>
+<div class="line"><a name="l05726"></a><span class="lineno"> 5726</span>     ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] = 2*X(next_power_of_2)(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]);</div>
+<div class="line"><a name="l05727"></a><span class="lineno"> 5727</span> </div>
+<div class="line"><a name="l05728"></a><span class="lineno"> 5728</span>   ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a> = WINDOW_HELP_ESTIMATE_m;</div>
+<div class="line"><a name="l05729"></a><span class="lineno"> 5729</span> </div>
+<div class="line"><a name="l05730"></a><span class="lineno"> 5730</span>   <span class="keywordflow">if</span> (d > 1)</div>
+<div class="line"><a name="l05731"></a><span class="lineno"> 5731</span>   {</div>
+<div class="line"><a name="l05732"></a><span class="lineno"> 5732</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05733"></a><span class="lineno"> 5733</span> <span class="preprocessor"></span>    ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |</div>
+<div class="line"><a name="l05734"></a><span class="lineno"> 5734</span>                       FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |</div>
+<div class="line"><a name="l05735"></a><span class="lineno"> 5735</span>           NFFT_OMP_BLOCKWISE_ADJOINT;</div>
+<div class="line"><a name="l05736"></a><span class="lineno"> 5736</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05737"></a><span class="lineno"> 5737</span> <span class="preprocessor"></span>    ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |</div>
+<div class="line"><a name="l05738"></a><span class="lineno"> 5738</span>                       FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;</div>
+<div class="line"><a name="l05739"></a><span class="lineno"> 5739</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05740"></a><span class="lineno"> 5740</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l05741"></a><span class="lineno"> 5741</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05742"></a><span class="lineno"> 5742</span>     ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |</div>
+<div class="line"><a name="l05743"></a><span class="lineno"> 5743</span>                       FFTW_INIT | FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l05744"></a><span class="lineno"> 5744</span> </div>
+<div class="line"><a name="l05745"></a><span class="lineno"> 5745</span>   ths-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l05746"></a><span class="lineno"> 5746</span> </div>
+<div class="line"><a name="l05747"></a><span class="lineno"> 5747</span>   nfft_init_help(ths);</div>
+<div class="line"><a name="l05748"></a><span class="lineno"> 5748</span> }</div>
+<div class="line"><a name="l05749"></a><span class="lineno"> 5749</span> </div>
+<div class="line"><a name="l05750"></a><span class="lineno"> 5750</span> <span class="keywordtype">void</span> nfft_init_guru(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *n,</div>
+<div class="line"><a name="l05751"></a><span class="lineno"> 5751</span>       <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l05752"></a><span class="lineno"> 5752</span> {</div>
+<div class="line"><a name="l05753"></a><span class="lineno"> 5753</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l05755"></a><span class="lineno"> 5755</span>   ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> =d;</div>
+<div class="line"><a name="l05756"></a><span class="lineno"> 5756</span>   ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>= (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*<span class="keyword">sizeof</span>(<span class [...]
+<div class="line"><a name="l05757"></a><span class="lineno"> 5757</span>   <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l05758"></a><span class="lineno"> 5758</span>     ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]= N[t];</div>
+<div class="line"><a name="l05759"></a><span class="lineno"> 5759</span>   ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>= M_total;</div>
+<div class="line"><a name="l05760"></a><span class="lineno"> 5760</span>   ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>= (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank"> [...]
+<div class="line"><a name="l05761"></a><span class="lineno"> 5761</span>   <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l05762"></a><span class="lineno"> 5762</span>     ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t]= n[t];</div>
+<div class="line"><a name="l05763"></a><span class="lineno"> 5763</span>   ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>= m;</div>
+<div class="line"><a name="l05764"></a><span class="lineno"> 5764</span>   ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>= nfft_flags;</div>
+<div class="line"><a name="l05765"></a><span class="lineno"> 5765</span>   ths-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>= fftw_flags;</div>
+<div class="line"><a name="l05766"></a><span class="lineno"> 5766</span> </div>
+<div class="line"><a name="l05767"></a><span class="lineno"> 5767</span>   nfft_init_help(ths);</div>
+<div class="line"><a name="l05768"></a><span class="lineno"> 5768</span> }</div>
+<div class="line"><a name="l05769"></a><span class="lineno"> 5769</span> </div>
+<div class="line"><a name="l05770"></a><span class="lineno"> 5770</span> <span class="keywordtype">void</span> nfft_init_1d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05771"></a><span class="lineno"> 5771</span> {</div>
+<div class="line"><a name="l05772"></a><span class="lineno"> 5772</span>   <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l05773"></a><span class="lineno"> 5773</span> </div>
+<div class="line"><a name="l05774"></a><span class="lineno"> 5774</span>   N[0]=N1;</div>
+<div class="line"><a name="l05775"></a><span class="lineno"> 5775</span> </div>
+<div class="line"><a name="l05776"></a><span class="lineno"> 5776</span>   nfft_init(ths, 1, N, M_total);</div>
+<div class="line"><a name="l05777"></a><span class="lineno"> 5777</span> }</div>
+<div class="line"><a name="l05778"></a><span class="lineno"> 5778</span> </div>
+<div class="line"><a name="l05779"></a><span class="lineno"> 5779</span> <span class="keywordtype">void</span> nfft_init_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05780"></a><span class="lineno"> 5780</span> {</div>
+<div class="line"><a name="l05781"></a><span class="lineno"> 5781</span>   <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l05782"></a><span class="lineno"> 5782</span> </div>
+<div class="line"><a name="l05783"></a><span class="lineno"> 5783</span>   N[0]=N1;</div>
+<div class="line"><a name="l05784"></a><span class="lineno"> 5784</span>   N[1]=N2;</div>
+<div class="line"><a name="l05785"></a><span class="lineno"> 5785</span>   nfft_init(ths,2,N,M_total);</div>
+<div class="line"><a name="l05786"></a><span class="lineno"> 5786</span> }</div>
+<div class="line"><a name="l05787"></a><span class="lineno"> 5787</span> </div>
+<div class="line"><a name="l05788"></a><span class="lineno"> 5788</span> <span class="keywordtype">void</span> nfft_init_3d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> N3, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05789"></a><span class="lineno"> 5789</span> {</div>
+<div class="line"><a name="l05790"></a><span class="lineno"> 5790</span>   <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l05791"></a><span class="lineno"> 5791</span> </div>
+<div class="line"><a name="l05792"></a><span class="lineno"> 5792</span>   N[0]=N1;</div>
+<div class="line"><a name="l05793"></a><span class="lineno"> 5793</span>   N[1]=N2;</div>
+<div class="line"><a name="l05794"></a><span class="lineno"> 5794</span>   N[2]=N3;</div>
+<div class="line"><a name="l05795"></a><span class="lineno"> 5795</span>   nfft_init(ths,3,N,M_total);</div>
+<div class="line"><a name="l05796"></a><span class="lineno"> 5796</span> }</div>
+<div class="line"><a name="l05797"></a><span class="lineno"> 5797</span> </div>
+<div class="line"><a name="l05798"></a><span class="lineno"> 5798</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* nfft_check(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05799"></a><span class="lineno"> 5799</span> {</div>
+<div class="line"><a name="l05800"></a><span class="lineno"> 5800</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l05801"></a><span class="lineno"> 5801</span> </div>
+<div class="line"><a name="l05802"></a><span class="lineno"> 5802</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>;j++)</div>
+<div class="line"><a name="l05803"></a><span class="lineno"> 5803</span>     <span class="keywordflow">if</span>((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]<-K(0.5)) || (ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]>= K(0.5)))</div>
+<div class="line"><a name="l05804"></a><span class="lineno"> 5804</span>       <span class="keywordflow">return</span> <span class="stringliteral">"ths->x out of range [-0.5,0.5)"</span>;</div>
+<div class="line"><a name="l05805"></a><span class="lineno"> 5805</span> </div>
+<div class="line"><a name="l05806"></a><span class="lineno"> 5806</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>;j++)</div>
+<div class="line"><a name="l05807"></a><span class="lineno"> 5807</span>   {</div>
+<div class="line"><a name="l05808"></a><span class="lineno"> 5808</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a>[j]<=1)</div>
+<div class="line"><a name="l05809"></a><span class="lineno"> 5809</span>       <span class="keywordflow">return</span> <span class="stringliteral">"nfft_check: oversampling factor too small"</span>;</div>
+<div class="line"><a name="l05810"></a><span class="lineno"> 5810</span> </div>
+<div class="line"><a name="l05811"></a><span class="lineno"> 5811</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[j]<=ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>)</div>
+<div class="line"><a name="l05812"></a><span class="lineno"> 5812</span>       <span class="keywordflow">return</span> <span class="stringliteral">"Polynomial degree N is smaller than cut-off m"</span>;</div>
+<div class="line"><a name="l05813"></a><span class="lineno"> 5813</span> </div>
+<div class="line"><a name="l05814"></a><span class="lineno"> 5814</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[j]%2==1)</div>
+<div class="line"><a name="l05815"></a><span class="lineno"> 5815</span>       <span class="keywordflow">return</span> <span class="stringliteral">"polynomial degree N has to be even"</span>;</div>
+<div class="line"><a name="l05816"></a><span class="lineno"> 5816</span>   }</div>
+<div class="line"><a name="l05817"></a><span class="lineno"> 5817</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05818"></a><span class="lineno"> 5818</span> }</div>
+<div class="line"><a name="l05819"></a><span class="lineno"> 5819</span> </div>
+<div class="line"><a name="l05820"></a><span class="lineno"> 5820</span> <span class="keywordtype">void</span> nfft_finalize(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05821"></a><span class="lineno"> 5821</span> {</div>
+<div class="line"><a name="l05822"></a><span class="lineno"> 5822</span>   <span class="keywordtype">int</span> t; <span class="comment">/* index over dimensions */</span></div>
+<div class="line"><a name="l05823"></a><span class="lineno"> 5823</span> </div>
+<div class="line"><a name="l05824"></a><span class="lineno"> 5824</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l05825"></a><span class="lineno"> 5825</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when flag NFFT_SORT_NODES is set.">index_x</a>);</div>
+<div class="line"><a name="l05826"></a><span class="lineno"> 5826</span> </div>
+<div class="line"><a name="l05827"></a><span class="lineno"> 5827</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l05828"></a><span class="lineno"> 5828</span>   {</div>
+<div class="line"><a name="l05829"></a><span class="lineno"> 5829</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l05830"></a><span class="lineno"> 5830</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l05831"></a><span class="lineno"> 5831</span>     fftw_destroy_plan(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l05832"></a><span class="lineno"> 5832</span>     fftw_destroy_plan(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l05833"></a><span class="lineno"> 5833</span> }</div>
+<div class="line"><a name="l05834"></a><span class="lineno"> 5834</span> </div>
+<div class="line"><a name="l05835"></a><span class="lineno"> 5835</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l05836"></a><span class="lineno"> 5836</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>);</div>
+<div class="line"><a name="l05837"></a><span class="lineno"> 5837</span> </div>
+<div class="line"><a name="l05838"></a><span class="lineno"> 5838</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>);</div>
+<div class="line"><a name="l05839"></a><span class="lineno"> 5839</span>   }</div>
+<div class="line"><a name="l05840"></a><span class="lineno"> 5840</span> </div>
+<div class="line"><a name="l05841"></a><span class="lineno"> 5841</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l05842"></a><span class="lineno"> 5842</span>     {</div>
+<div class="line"><a name="l05843"></a><span class="lineno"> 5843</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>);</div>
+<div class="line"><a name="l05844"></a><span class="lineno"> 5844</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a>);</div>
+<div class="line"><a name="l05845"></a><span class="lineno"> 5845</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05846"></a><span class="lineno"> 5846</span>     }</div>
+<div class="line"><a name="l05847"></a><span class="lineno"> 5847</span> </div>
+<div class="line"><a name="l05848"></a><span class="lineno"> 5848</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l05849"></a><span class="lineno"> 5849</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05850"></a><span class="lineno"> 5850</span> </div>
+<div class="line"><a name="l05851"></a><span class="lineno"> 5851</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l05852"></a><span class="lineno"> 5852</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05853"></a><span class="lineno"> 5853</span> </div>
+<div class="line"><a name="l05854"></a><span class="lineno"> 5854</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05855"></a><span class="lineno"> 5855</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05856"></a><span class="lineno"> 5856</span> </div>
+<div class="line"><a name="l05857"></a><span class="lineno"> 5857</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05858"></a><span class="lineno"> 5858</span>     {</div>
+<div class="line"><a name="l05859"></a><span class="lineno"> 5859</span>       <span class="keywordflow">for</span>(t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05860"></a><span class="lineno"> 5860</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>[t]);</div>
+<div class="line"><a name="l05861"></a><span class="lineno"> 5861</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is  doubles.">c_phi_inv</a>);</div>
+<div class="line"><a name="l05862"></a><span class="lineno"> 5862</span>     }</div>
+<div class="line"><a name="l05863"></a><span class="lineno"> 5863</span> </div>
+<div class="line"><a name="l05864"></a><span class="lineno"> 5864</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l05865"></a><span class="lineno"> 5865</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l05866"></a><span class="lineno"> 5866</span> </div>
+<div class="line"><a name="l05867"></a><span class="lineno"> 5867</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l05868"></a><span class="lineno"> 5868</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l05869"></a><span class="lineno"> 5869</span> </div>
+<div class="line"><a name="l05870"></a><span class="lineno"> 5870</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l05871"></a><span class="lineno"> 5871</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>);</div>
+<div class="line"><a name="l05872"></a><span class="lineno"> 5872</span> </div>
+<div class="line"><a name="l05873"></a><span class="lineno"> 5873</span>   WINDOW_HELP_FINALIZE;</div>
+<div class="line"><a name="l05874"></a><span class="lineno"> 5874</span> </div>
+<div class="line"><a name="l05875"></a><span class="lineno"> 5875</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a>);</div>
+<div class="line"><a name="l05876"></a><span class="lineno"> 5876</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>);</div>
+<div class="line"><a name="l05877"></a><span class="lineno"> 5877</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>);</div>
+<div class="line"><a name="l05878"></a><span class="lineno"> 5878</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft__benchomp_8c_source.html b/doc/api/html/nfft__benchomp_8c_source.html
new file mode 100644
index 0000000..7f6c860
--- /dev/null
+++ b/doc/api/html/nfft__benchomp_8c_source.html
@@ -0,0 +1,640 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_benchomp.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft_benchomp.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <<a class="code" href="nfft3_8h.html">nfft3.h</a>></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#define NREPEAT 5</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">static</span> FILE* file_out_tex = NULL;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">int</span> get_nthreads_array(<span class="keywordtype">int</span> **arr)</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">int</span> max_threads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> alloc_num = 2;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">int</span> ret_number = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">int</span> max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordflow">if</span> (max_threads <= 5)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     *arr = (<span class="keywordtype">int</span>*) malloc(max_threads*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordflow">for</span> (k = 0; k < max_threads; k++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>       *(*arr + k) = k+1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">return</span> max_threads;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2, alloc_num++);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   *arr = (<span class="keywordtype">int</span>*) malloc(alloc_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads && max_threads_pw2)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>       *(*arr + ret_number) = max_threads/2;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>       ret_number++;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     *(*arr + ret_number) = k;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     ret_number++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       *(*arr + ret_number) = max_threads;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       ret_number++;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     }</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">return</span> ret_number;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> } </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> check_result_value(<span class="keyword">const</span> <span class="keywordtype">int</span> val, <span class="keyword">const</span> <span class="keywordtype">int</span> ok, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">if</span> (val != ok)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     fprintf(stderr, <span class="stringliteral">"ERROR %s: %d not %d\n"</span>, msg, val, ok);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     exit(1);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keywordtype">void</span> run_test_create(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> sigma)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, M, sigma);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d==2)  </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, N, M, sigma);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d==3)  </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, N, N, M, sigma);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d==4)  </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, N, N, N, M, sigma);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     exit(1);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   check_result_value(system(cmd), 0, <span class="stringliteral">"createdataset"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keywordtype">void</span> run_test_init_output()</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   FILE *f = fopen(<span class="stringliteral">"nfft_benchomp_test.result"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordflow">if</span> (f!= NULL)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     fclose(f);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="code" href="structs__param.html">  110</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> {</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">double</span> sigma;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span> flags;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> } <a class="code" href="structs__param.html">s_param</a>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="structs__resval.html">  121</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">double</span> avg;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> } <a class="code" href="structs__resval.html">s_resval</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="code" href="structs__result.html">  128</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <a class="code" href="structs__resval.html">s_resval</a> resval[6];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> } <a class="code" href="structs__result.html">s_result</a>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"><a class="code" href="structs__testset.html">  134</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <a class="code" href="structs__param.html">s_param</a> param;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <a class="code" href="structs__result.html">s_result</a> *results;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">int</span> nresults;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> } <a class="code" href="structs__testset.html">s_testset</a>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="keywordtype">void</span> run_test(<a class="code" href="structs__resval.html">s_resval</a> *res, <span class="keywordtype">int</span> nrepeat, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> nthreads)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">int</span> r,t;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordflow">if</span> (nthreads < 2)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_detail_single %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out"</span>, m, flags);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_detail_threads %d %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out"</span>, m, flags, nthreads);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordtype">int</span> retval;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordtype">double</span> v[6];</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     FILE *f;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     f = fopen(<span class="stringliteral">"nfft_benchomp_test.out"</span>, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     retval = fscanf(f, <span class="stringliteral">"%lg %lg %lg %lg %lg %lg"</span>, v, v+1, v+2, v+3, v+4, v+5);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     check_result_value(retval, 6, <span class="stringliteral">"read nfft_benchomp_test.out"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     fclose(f);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       res[t].avg += v[t];</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">if</span> (res[t].min > v[t])</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         res[t].min = v[t];</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       <span class="keywordflow">if</span> (res[t].max < v[t])</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         res[t].max = v[t];</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     res[t].avg /= nrepeat;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   fprintf(stderr, <span class="stringliteral">"%d %d: "</span>, nthreads, nrepeat);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     fprintf(stderr, <span class="stringliteral">"%.3e %.3e %.3e | "</span>, res[t].avg, res[t].min, res[t].max);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_psi_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordflow">if</span> (flags & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">return</span> <span class="stringliteral">"unknownPSI"</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">return</span> <span class="stringliteral">"nopsi"</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_sort_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordflow">if</span> (flags & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">return</span> <span class="stringliteral">"sorted"</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">return</span> <span class="stringliteral">"unsorted"</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_adjoint_omp_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">return</span> <span class="stringliteral">"blockwise"</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor">#define MASK_D (1U<<0)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_TA (1U<<1)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_N (1U<<2)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_SIGMA (1U<<3)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_M (1U<<4)</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_WINM (1U<<5)</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_PSI (1U<<6)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_SORT (1U<<7)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_BW (1U<<8)</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> determine_different_parameters(<a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = 0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">if</span> (ntestsets < 2)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordflow">for</span> (t = 1; t < ntestsets; t++)</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">if</span> (testsets[t-1].param.d != testsets[t].param.d)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       mask |= MASK_D;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">if</span> (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       mask |= MASK_TA;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordflow">if</span> (testsets[t-1].param.N != testsets[t].param.N)</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       mask |= MASK_N;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (testsets[t-1].param.sigma != testsets[t].param.sigma)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       mask |= MASK_SIGMA;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">if</span> (testsets[t-1].param.M != testsets[t].param.M)</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       mask |= MASK_M;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">if</span> (testsets[t-1].param.m != testsets[t].param.m)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       mask |= MASK_WINM;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.flags & PRE_ONE_PSI) != (testsets[t].param.flags & PRE_ONE_PSI))</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       mask |= MASK_FLAGS_PSI;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.flags & NFFT_SORT_NODES) != (testsets[t].param.flags & NFFT_SORT_NODES))</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       mask |= MASK_FLAGS_SORT;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT))</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       mask |= MASK_FLAGS_BW;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordflow">return</span> mask;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="keywordtype">void</span> get_plot_title(<span class="keywordtype">char</span> *outstr, <span class="keywordtype">int</span> maxlen, <span class="keywordtype">char</span> *hostname, <a class="code" href="structs__param.html">s_param</a> param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask)</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = ~diff_mask;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   len = snprintf(outstr, maxlen, <span class="stringliteral">"%s"</span>, hostname);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   offset += len;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordflow">if</span> (mask & MASK_D)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %dd"</span>, param.d);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     offset += len;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">if</span> (mask & MASK_TA)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\mathrm{NFFT}%s$"</span>, param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     offset += len;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordflow">if</span> (mask & MASK_N)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" N=%d"</span>, param.N);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     offset += len;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">if</span> (mask & MASK_SIGMA)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" N=%g"</span>, param.sigma);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     offset += len;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">if</span> (mask & MASK_M)</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" M=%d"</span>, param.M);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     offset += len;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordflow">if</span> (mask & MASK_WINM)</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" m=%d"</span>, param.m);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     offset += len;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="keywordflow">if</span> (mask & MASK_FLAGS_PSI)</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_psi_string(param.flags));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     offset += len;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="keywordflow">if</span> (mask & MASK_FLAGS_SORT)</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_sort_string(param.flags));</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     offset += len;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordflow">if</span> ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.flags)) > 0)</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_adjoint_omp_string(param.flags));</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     offset += len;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="keywordtype">void</span> print_output_speedup_total_tref(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets, <span class="keywordtype">double</span> tref)</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   <span class="keywordtype">int</span> i, t;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask = determine_different_parameters(testsets, ntestsets);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FLAGS_SORT);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, "</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <a class="code" href="structs__testset.html">s_testset</a> testset = testsets[t];</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     fprintf(stderr, <span class="stringliteral">"%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}"</span>, hostname, testset.param.d, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_str [...]
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     {</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       fprintf(stderr, <span class="stringliteral">"%d:%.3f  "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     fprintf(stderr, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   fprintf(out, <span class="stringliteral">"\\legend{{"</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   {</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordflow">if</span> (t > 0)</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       fprintf(out, <span class="stringliteral">"},{"</span>);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     get_plot_title(title, 255, <span class="stringliteral">""</span>, testsets[t].param, ~(diff_mask | MASK_FLAGS_SORT));</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     fprintf(out, <span class="stringliteral">"%s"</span>, title);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   fprintf(out, <span class="stringliteral">"}}\n"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   fflush(out);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="keywordtype">void</span> print_output_speedup_total(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> {</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <span class="keywordtype">double</span> tref = 1.0/0.0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   <span class="keywordtype">int</span> t, k;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordflow">for</span> (k = 0; k < testsets[t].nresults; k++)</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       <span class="keywordflow">if</span> (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         tref = testsets[t].results[k].resval[5].avg;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   print_output_speedup_total_tref(out, testsets, ntestsets, tref);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="keywordtype">void</span> print_output_histo_DFBRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>       fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>       fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> fprintf(stderr, <span class="stringliteral">"FLAGS: %d\n"</span>, testset.param.flags);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   fprintf(out, <span class="stringliteral">" title={%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}"</span>, hostname, testset.param.d, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_ [...]
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[3].avg);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   fprintf(out, <span class="stringliteral">"\\legend{D,F,B,rest,total}\n"</span>);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   fflush(out);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="keywordtype">void</span> run_testset(<a class="code" href="structs__testset.html">s_testset</a> *testset, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> sigma, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> [...]
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   testset->param.d = d;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   testset->param.trafo_adjoint = trafo_adjoint;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   testset->param.N = N;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   testset->param.M = M;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   testset->param.sigma = sigma;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   testset->param.m = m;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   testset->param.flags = flags;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   testset->results = (<a class="code" href="structs__result.html">s_result</a>*) malloc(n_threads_array_size*<span class="keyword">sizeof</span>(<a class="code" href="structs__result.html">s_result</a>));</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   testset->nresults = n_threads_array_size;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   run_test_create(testset->param.d, testset->param.trafo_adjoint, testset->param.N, testset->param.M, testset->param.sigma);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   <span class="keywordflow">for</span> (i = 0; i < n_threads_array_size; i++)</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     testset->results[i].nthreads = nthreads_array[i];</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.flags, testset->results[i].nthreads = nthreads_array[i]);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   }</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="keywordtype">void</span> test1(<span class="keywordtype">int</span> *nthreads_array, <span class="keywordtype">int</span> n_threads_array_size, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <a class="code" href="structs__testset.html">s_testset</a> testsets[15];</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   run_testset(&testsets[0], 1, 0, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   run_testset(&testsets[1], 1, 0, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[1]);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   print_output_speedup_total(file_out_tex, testsets, 2);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   run_testset(&testsets[2], 1, 1, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[2]);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   run_testset(&testsets[3], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[3]);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   run_testset(&testsets[4], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[4]);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   print_output_speedup_total(file_out_tex, testsets+2, 3);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   run_testset(&testsets[5], 2, 0, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[5]);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   run_testset(&testsets[6], 2, 0, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[6]);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   print_output_speedup_total(file_out_tex, testsets+5, 2);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   run_testset(&testsets[7], 2, 1, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[7]);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   run_testset(&testsets[8], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[8]);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   run_testset(&testsets[9], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[9]);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   print_output_speedup_total(file_out_tex, testsets+7, 3);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   run_testset(&testsets[10], 3, 0, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[10]);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   run_testset(&testsets[11], 3, 0, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[11]);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   print_output_speedup_total(file_out_tex, testsets+10, 2);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   run_testset(&testsets[12], 3, 1, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[12]);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   run_testset(&testsets[13], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[13]);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   run_testset(&testsets[14], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor"></span>  print_output_histo_DFBRT(file_out_tex, testsets[14]);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   print_output_speedup_total(file_out_tex, testsets+12, 3);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   <span class="keywordtype">int</span> *nthreads_array;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordtype">int</span> n_threads_array_size = get_nthreads_array(&nthreads_array);</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="preprocessor">#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="preprocessor"></span>  fprintf(stderr, <span class="stringliteral">"WARNING: Detailed time measurements for NFFT are not activated.\n"</span>);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   fprintf(stderr, <span class="stringliteral">"For more detailed plots, please re-run the configure script with options\n"</span>);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   fprintf(stderr, <span class="stringliteral">"--enable-measure-time --enable-measure-time-fftw --enable-openmp\n"</span>);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   fprintf(stderr, <span class="stringliteral">"and run \"make clean all\"\n\n"</span>);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordflow">for</span> (k = 0; k < n_threads_array_size; k++)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     fprintf(stderr, <span class="stringliteral">"%d "</span>, nthreads_array[k]);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   file_out_tex = fopen(<span class="stringliteral">"nfft_benchomp_results_plots.tex"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   test1(nthreads_array, n_threads_array_size, 2);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   test1(nthreads_array, n_threads_array_size, 4);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   test1(nthreads_array, n_threads_array_size, 6);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   fclose(file_out_tex);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft__benchomp__createdataset_8c_source.html b/doc/api/html/nfft__benchomp__createdataset_8c_source.html
new file mode 100644
index 0000000..4f0df98
--- /dev/null
+++ b/doc/api/html/nfft__benchomp__createdataset_8c_source.html
@@ -0,0 +1,193 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_benchomp_createdataset.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft_benchomp_createdataset.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keywordtype">void</span> nfft_benchomp_createdataset(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> sigma)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> n[d];</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   R *x;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   C *f, *f_hat;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> N_total = 1;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     N_total *= N[t];</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   x = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*M*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   f = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   f_hat = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N_total*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     n[t] = sigma*nfft_next_power_of_2(N[t]);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(x,d*M);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f_hat,N_total);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f,M);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   printf(<span class="stringliteral">"%d %d "</span>, d, trafo_adjoint);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     printf(<span class="stringliteral">"%d "</span>, N[t]);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     printf(<span class="stringliteral">"%d "</span>, n[t]);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   printf(<span class="stringliteral">"%d\n"</span>, M);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>       printf(<span class="stringliteral">"%.16e "</span>, x[d*j+t]);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">for</span> (j=0; j < N_total; j++)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f_hat[j]), cimag(f_hat[j]));</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>       printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f[j]), cimag(f[j]));</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordtype">int</span> *N;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordtype">double</span> sigma;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (argc < 6) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     fprintf(stderr, <span class="stringliteral">"usage: d tr_adj N_1 ... N_d M sigma\n"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   d = atoi(argv[1]);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   fprintf(stderr, <span class="stringliteral">"d=%d"</span>, d);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">if</span> (d < 1 || argc < 5+d) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     fprintf(stderr, <span class="stringliteral">"usage: d tr_adj N_1 ... N_d M sigma\n"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   N = malloc(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   trafo_adjoint = atoi(argv[2]);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordflow">if</span> (trafo_adjoint < 0 && trafo_adjoint > 1)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     trafo_adjoint = 1;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   fprintf(stderr, <span class="stringliteral">", tr_adj=%d, N="</span>, trafo_adjoint);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     N[t] = atoi(argv[3+t]);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     fprintf(stderr, <span class="stringliteral">"%d "</span>,N[t]);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   M = atoi(argv[3+d]);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   sigma = atof(argv[4+d]);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   fprintf(stderr, <span class="stringliteral">", M=%d, sigma=%.16g\n"</span>, M, sigma);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   nfft_benchomp_createdataset(d, trafo_adjoint, N, M, sigma);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   free(N);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft__benchomp__detail_8c_source.html b/doc/api/html/nfft__benchomp__detail_8c_source.html
new file mode 100644
index 0000000..286a681
--- /dev/null
+++ b/doc/api/html/nfft__benchomp__detail_8c_source.html
@@ -0,0 +1,201 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_benchomp_detail.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft_benchomp_detail.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keywordtype">void</span> bench_openmp(FILE *infile, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> psi_flag)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">int</span> *N;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">int</span> *n;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">int</span> M, d, trafo_adjoint;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">double</span> re,im;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> tt_total, tt_preonepsi;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   fscanf(infile, <span class="stringliteral">"%d %d"</span>, &d, &trafo_adjoint);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   N = malloc(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   n = malloc(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     fscanf(infile, <span class="stringliteral">"%d"</span>, N+t);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     fscanf(infile, <span class="stringliteral">"%d"</span>, n+t);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   fscanf(infile, <span class="stringliteral">"%d"</span>, &M);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span>  fftw_import_wisdom_from_filename(<span class="stringliteral">"nfft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span>  fftw_import_wisdom_from_filename(<span class="stringliteral">"nfft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   nfft_init_guru(&p, d, N, M, n, m,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                    PRE_PHI_HUT| psi_flag | MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                    FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span>  fftw_export_wisdom_to_filename(<span class="stringliteral">"nfft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span>  fftw_export_wisdom_to_filename(<span class="stringliteral">"nfft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordflow">for</span> (j=0; j < p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordflow">for</span> (t=0; t < p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>       fscanf(infile, <span class="stringliteral">"%lg"</span>, p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>+p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*j+t);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">for</span> (j=0; j < p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>       p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordflow">for</span> (j=0; j < p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>       p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   t0 = getticks();</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   t1 = getticks();</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   tt_preonepsi = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     nfft_adjoint(&p);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   t1 = getticks();</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   tt_total = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">#ifndef MEASURE_TIME</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor"></span>  p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">#ifndef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor"></span>  p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   printf(<span class="stringliteral">"%.6e %.6e %6e %.6e %.6e %.6e\n"</span>, tt_preonepsi, p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0], p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE [...]
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">//  printf("%.6e\n", tt);</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   free(N);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   free(n);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">int</span> m, psi_flag;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">if</span> (argc != 4)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   nthreads = atoi(argv[3]);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   fftw_init_threads();</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   omp_set_num_threads(nthreads);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span> (argc != 3)</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   m = atoi(argv[1]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   psi_flag = atoi(argv[2]);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   bench_openmp(stdin, m, psi_flag);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfft__times_8c_source.html b/doc/api/html/nfft__times_8c_source.html
new file mode 100644
index 0000000..09f8303
--- /dev/null
+++ b/doc/api/html/nfft__times_8c_source.html
@@ -0,0 +1,1070 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_times.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfft_times.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfft_times.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keywordtype">int</span> global_n;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">int</span> global_d;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">static</span> <span class="keywordtype">int</span> comp1(<span class="keyword">const</span> <span class="keywordtype">void</span> *x,<span class="keyword">const</span> <span class="keywordtype">void</span> *y)</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordflow">return</span> ((* (<span class="keywordtype">double</span>*) x)<(* (<span class="keywordtype">double</span>*) y)?-1:1);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> }</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keyword">static</span> <span class="keywordtype">int</span> comp2(<span class="keyword">const</span> <span class="keywordtype">void</span> *x,<span class="keyword">const</span> <span class="keywordtype">void</span> *y)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">int</span> nx0,nx1,ny0,ny1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   nx0=global_n*(* ((<span class="keywordtype">double</span>*)x+0));</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   nx1=global_n*(* ((<span class="keywordtype">double</span>*)x+1));</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   ny0=global_n*(* ((<span class="keywordtype">double</span>*)y+0));</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   ny1=global_n*(* ((<span class="keywordtype">double</span>*)y+1));</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">if</span>(nx0<ny0)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     <span class="keywordflow">if</span>(nx0==ny0)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>       <span class="keywordflow">if</span>(nx1<ny1)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">int</span> comp3(<span class="keyword">const</span> <span class="keywordtype">void</span> *x,<span class="keyword">const</span> <span class="keywordtype">void</span> *y)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">int</span> nx0,nx1,nx2,ny0,ny1,ny2;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   nx0=global_n*(* ((<span class="keywordtype">double</span>*)x+0));</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   nx1=global_n*(* ((<span class="keywordtype">double</span>*)x+1));</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   nx2=global_n*(* ((<span class="keywordtype">double</span>*)x+2));</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   ny0=global_n*(* ((<span class="keywordtype">double</span>*)y+0));</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   ny1=global_n*(* ((<span class="keywordtype">double</span>*)y+1));</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   ny2=global_n*(* ((<span class="keywordtype">double</span>*)y+2));</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordflow">if</span>(nx0<ny0)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordflow">if</span>(nx0==ny0)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>       <span class="keywordflow">if</span>(nx1<ny1)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordflow">if</span>(nx1==ny1)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordflow">if</span>(nx2<ny2)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">void</span> measure_time_nfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   printf(<span class="stringliteral">"\\verb+%d+&\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5));</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       M=N*M;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       NN[r]=N;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>      PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   global_n=nn[0];</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   global_d=d;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">switch</span>(d)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       <span class="keywordflow">case</span> 1: { qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp1); <sp [...]
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       <span class="keywordflow">case</span> 2: { qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp2); <sp [...]
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       <span class="keywordflow">case</span> 3: { qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp3); <sp [...]
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   t_fft=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   r=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">while</span>(t_fft<1)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       r++;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       t0 = getticks();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       t1 = getticks();</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       t_fft+=t;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   t_fft/=r;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="comment">//  printf("\\verb+%.1e+ & \\verb+(%.1f)+ &\t",t_fft,t_fft/(p.N_total*(log(N)/log(2)*d))*auxC);</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   printf(<span class="stringliteral">"\\verb+%.1e+ &\t"</span>,t_fft);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       t_ndft=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       r=0;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       <span class="keywordflow">while</span>(t_ndft<1)</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>           r++;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           t0 = getticks();</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           t1 = getticks();</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       <span class="comment">//printf("\\verb+%.1e+ & \\verb+(%d)+&\t",t_ndft,(int)round(t_ndft/(p.N_total*p.N_total)*auxC));</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       printf(<span class="stringliteral">"\\verb+%.1e+ &\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="comment">//    printf("\\verb+*+\t&\t&\t");</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     printf(<span class="stringliteral">"\\verb+*+\t&\t"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   t_nfft=0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   r=0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordflow">while</span>(t_nfft<1)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       r++;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       t0 = getticks();</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       <span class="keywordflow">switch</span>(d)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">case</span> 1: { nfft_trafo_1d(&p); <span class="keywordflow">break</span>; }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">case</span> 2: { nfft_trafo_2d(&p); <span class="keywordflow">break</span>; }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">case</span> 3: { nfft_trafo_3d(&p); <span class="keywordflow">break</span>; }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>           <span class="keywordflow">default</span>: <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       t1 = getticks();</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="comment">//  printf("\\verb+%.1e+ & \\verb+(%d)+ & \\verb+(%.1e)+\\\\\n",t_nfft,(int)round(t_nfft/(p.N_total*(log(N)/log(2)*d))*auxC),t_nfft/t_fft);</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   printf(<span class="stringliteral">"\\verb+%.1e+ & \\verb+(%3.1f)+\\\\\n"</span>,t_nfft,t_nfft/t_fft);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="keywordtype">void</span> measure_time_nfft_XXX2(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       M=N*M;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       NN[r]=N;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>      PRE_PSI|</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>      MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp1);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   t_fft=0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   r=0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       r++;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       t0 = getticks();</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       t1 = getticks();</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       t_fft+=t;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   t_fft/=r;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       t_ndft=0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       r=0;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>           r++;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>           t0 = getticks();</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>           nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>           t1 = getticks();</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   t_nfft=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   r=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       r++;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       t0 = getticks();</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>       t1 = getticks();</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   t_nfft=0;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   r=0;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       r++;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       t0 = getticks();</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       nfft_trafo_1d(&p);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       t1 = getticks();</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="keywordtype">void</span> measure_time_nfft_XXX3(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       M=N*M;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       NN[r]=N;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>      PRE_PSI|</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>      MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, FFTW_BACKWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>  [...]
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp1);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total n [...]
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   t_fft=0;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   r=0;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       r++;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       t0 = getticks();</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       t1 = getticks();</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       t_fft+=t;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   t_fft/=r;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       t_ndft=0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       r=0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>           r++;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>           t0 = getticks();</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>           nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>           t1 = getticks();</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>         }</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   t_nfft=0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   r=0;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       r++;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>       t0 = getticks();</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>       nfft_adjoint(&p);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>       t1 = getticks();</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   t_nfft=0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   r=0;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       r++;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>       t0 = getticks();</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>       nfft_adjoint_1d(&p);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>       t1 = getticks();</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="keywordtype">void</span> measure_time_nfft_XXX4(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       M=N*M;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>       NN[r]=N;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     }</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   nfft_init_guru(&p, d, NN, M, nn, 4,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>      PRE_PSI|</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>      MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   <span class="comment">//for(j=0;j<2*M;j+=2)</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="comment">//   p.x[j]=0.5*p.x[j]+0.25*(p.x[j]>=0?1:-1);</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   <span class="comment">//qsort(p.x,p.M_total,d*sizeof(double),comp1);</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   t_fft=0;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   r=0;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     {</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       r++;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>       t0 = getticks();</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       t1 = getticks();</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>       t_fft+=t;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   t_fft/=r;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     {</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>       t_ndft=0;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>       r=0;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         {</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>           r++;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>           t0 = getticks();</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>           nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>           t1 = getticks();</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>       printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>       <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     }</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   t_nfft=0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   r=0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     {</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>       r++;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>       t0 = getticks();</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>       t1 = getticks();</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     }</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   t_nfft=0;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   r=0;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     {</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       r++;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>       t0 = getticks();</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>       nfft_trafo_2d(&p);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>       t1 = getticks();</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     }</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> }</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="keywordtype">void</span> measure_time_nfft_XXX5(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> {</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     {</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       M=N*M;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       NN[r]=N;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   nfft_init_guru(&p, d, NN, M, nn, 4,</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>      PRE_PSI|</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>      MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>  [...]
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="comment">//sort_nodes(p.x,p.d,p.M_total,</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   t_fft=0;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   r=0;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>       r++;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>       t0 = getticks();</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>       t1 = getticks();</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       t_fft+=t;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   t_fft/=r;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>       t_ndft=0;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>       r=0;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         {</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>           r++;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>           t0 = getticks();</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>           nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>           t1 = getticks();</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>       <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     }</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>   t_nfft=0;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>   r=0;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>       r++;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>       t0 = getticks();</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>       nfft_adjoint(&p);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>       t1 = getticks();</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     }</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>   t_nfft=0;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>   r=0;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     {</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>       r++;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>       t0 = getticks();</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       nfft_adjoint_2d(&p);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>       t1 = getticks();</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     }</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> <span class="keywordtype">void</span> measure_time_nfft_XXX6(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> {</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>       M=N*M;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>       NN[r]=N;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     }</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>      FG_PSI|</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>      MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   <span class="comment">//qsort(p.x,p.M_total,d*sizeof(double),comp1);</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>   <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   t_fft=0;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   r=0;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>       r++;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>       t0 = getticks();</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>       t1 = getticks();</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>       t_fft+=t;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     }</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   t_fft/=r;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     {</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>       t_ndft=0;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>       r=0;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         {</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>           r++;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>           t0 = getticks();</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>           nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>           t1 = getticks();</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>       printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>       <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     }</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>   t_nfft=0;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   r=0;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>       r++;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>       t0 = getticks();</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>       t1 = getticks();</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>   t_nfft=0;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   r=0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     {</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>       r++;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>       t0 = getticks();</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>       nfft_trafo_3d(&p);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>       t1 = getticks();</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     }</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> }</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="keywordtype">void</span> measure_time_nfft_XXX7(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> {</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>   <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>   <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   fftw_plan p_fft;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>   printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>       M=N*M;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>       NN[r]=N;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>       nn[r]=2*N;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     }</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>   nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>      PRE_PHI_HUT|</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>      FG_PSI|</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>      MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>      FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>   p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>  [...]
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   <span class="comment">//sort_nodes(p.x,p.d,p.M_total,</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   t_fft=0;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>   r=0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     {</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>       r++;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>       t0 = getticks();</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>       fftw_execute(p_fft);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>       t1 = getticks();</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>       t_fft+=t;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     }</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   t_fft/=r;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     {</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>       t_ndft=0;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>       r=0;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>       <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>         {</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>           r++;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>           t0 = getticks();</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>           nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>           t1 = getticks();</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>         }</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>       printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>       <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     }</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   t_nfft=0;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   r=0;</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>       r++;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>       t0 = getticks();</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>       nfft_adjoint(&p);</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>       t1 = getticks();</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     }</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   t_nfft=0;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   r=0;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>   <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     {</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>       r++;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>       t0 = getticks();</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>       nfft_adjoint_3d(&p);</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>       t1 = getticks();</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>   <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> }</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> <span class="keywordtype">int</span> main2(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> {</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   <span class="keywordtype">int</span> l,d,logIN;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   <span class="keywordflow">for</span>(l=3;l<=6;l++)</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     {</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>       d=3;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>       logIN=d*l;</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>       <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   {</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     measure_time_nfft_XXX6(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     measure_time_nfft_XXX7(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>   }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>   {</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     measure_time_nfft_XXX6(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     measure_time_nfft_XXX7(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>   }</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     }</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>   exit(-1);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>   <span class="keywordflow">for</span>(l=7;l<=12;l++)</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     {</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>       d=2;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>       logIN=d*l;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>       <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>   {</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     measure_time_nfft_XXX4(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     measure_time_nfft_XXX5(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   }</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>   {</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     measure_time_nfft_XXX4(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     measure_time_nfft_XXX5(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>   }</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     }</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>   exit(-1);</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>   <span class="keywordflow">for</span>(l=3;l<=12;l++)</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     {</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>       logIN=l;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>       <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>   {</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     measure_time_nfft_XXX2(1,(1U<< (logIN)),1);</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     measure_time_nfft_XXX3(1,(1U<< (logIN)),1);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>   }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>   {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     measure_time_nfft_XXX2(1,(1U<< (logIN)),0);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     measure_time_nfft_XXX3(1,(1U<< (logIN)),0);</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   }</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     }</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>   exit(-1);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   <span class="keywordtype">int</span> l,d,logIN;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>   printf(<span class="stringliteral">"\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n"</span>);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>   printf(<span class="stringliteral">"\\hline \\hline \\multicolumn{5}{|c|}{$d=1$} \\\\ \\hline\n"</span>);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>   <span class="keywordflow">for</span>(l=3;l<=22;l++)</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>       d=1;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>       logIN=l;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>       <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>   measure_time_nfft(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>   measure_time_nfft(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>       fflush(stdout);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>   printf(<span class="stringliteral">"\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n"</span>);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   printf(<span class="stringliteral">"\\hline \\hline \\multicolumn{5}{|c|}{$d=2$} \\\\ \\hline\n"</span>);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   <span class="keywordflow">for</span>(l=3;l<=11;l++)</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     {</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>       d=2;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>       logIN=d*l;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>       <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>   measure_time_nfft(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   measure_time_nfft(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>       fflush(stdout);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     }</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>   printf(<span class="stringliteral">"\\hline \\hline \\multicolumn{5}{|c|}{$d=3$} \\\\ \\hline\n"</span>);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>   <span class="keywordflow">for</span>(l=3;l<=7;l++)</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     {</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>       d=3;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>       logIN=d*l;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>       <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>   measure_time_nfft(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>   measure_time_nfft(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>       fflush(stdout);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft_2simple__test_8c_source.html b/doc/api/html/nfsft_2simple__test_8c_source.html
new file mode 100644
index 0000000..bc7f5a9
--- /dev/null
+++ b/doc/api/html/nfsft_2simple__test_8c_source.html
@@ -0,0 +1,178 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3902 2012-10-16 14:02:31Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* It is important to include complex.h before nfft3.h. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span> <span class="comment">/* NFFT3 utilities header*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "infft.h"</span> <span class="comment">/* NFFT3 internal header */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfsft(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N = 4; <span class="comment">/* bandwidth/maximum degree */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = 8; <span class="comment">/* number of nodes */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; <span class="comment">/* transform plan */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">int</span> j, k, n; <span class="comment">/* loop variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   nfsft_precompute(N,1000.0,0U,0U);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="comment">/* Initialize transform plan using the guru interface. All input and output</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   * arrays are allocated by nfsft_init_guru(). Computations are performed with</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   * Fourier coefficients is preserved during transformations. The NFFT uses a</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   * cut-off parameter m = 6. See the NFFT 3 manual for details.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="comment">/* pseudo-random nodes */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j]= nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1]= K(0.5) * nfft_drand48();</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="comment">/* precomputation (for NFFT, node-dependent) */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="comment">/* pseudo-random Fourier coefficients */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)] =</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>           nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="comment">/* Direct transformation, display result. */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   printf(<span class="stringliteral">"Vector f (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>       creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="comment">/* Fast approximate transformation, display result. */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   nfsft_trafo(&plan);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   printf(<span class="stringliteral">"Vector f (NFSFT):\n"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/* Direct adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   nfsft_adjoint_direct(&plan);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   printf(<span class="stringliteral">"Vector f_hat (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="comment">/* Fast approximate adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   printf(<span class="stringliteral">"Vector f_hat (NFSFT):\n"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="comment">/* Finalize the plan. */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="comment">/* Destroy data precomputed for fast polynomial transform. */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   nfsft_forget();</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   printf(<span class="stringliteral">"Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="stringliteral">"...\n\n"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   simple_test_nfsft();</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft_2simple__test__threads_8c_source.html b/doc/api/html/nfsft_2simple__test__threads_8c_source.html
new file mode 100644
index 0000000..6b4582b
--- /dev/null
+++ b/doc/api/html/nfsft_2simple__test__threads_8c_source.html
@@ -0,0 +1,183 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test_threads.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft/simple_test_threads.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3498 2010-05-07 18:46:08Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* It is important to include complex.h before nfft3.h. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span> <span class="comment">/* NFFT3 utilities header*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "infft.h"</span> <span class="comment">/* NFFT3 internal header */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfsft(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N = 4; <span class="comment">/* bandwidth/maximum degree */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = 8; <span class="comment">/* number of nodes */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; <span class="comment">/* transform plan */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> j, k, n; <span class="comment">/* loop variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   nfsft_precompute(N,1000.0,0U,0U);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="comment">/* Initialize transform plan using the guru interface. All input and output</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   * arrays are allocated by nfsft_init_guru(). Computations are performed with</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   * Fourier coefficients is preserved during transformations. The NFFT uses a</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   * cut-off parameter m = 6. See the NFFT 3 manual for details.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="comment">/* pseudo-random nodes */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j]= nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+1]= K(0.5) * nfft_drand48();</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* precomputation (for NFFT, node-dependent) */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* pseudo-random Fourier coefficients */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)] =</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>           nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="comment">/* Direct transformation, display result. */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   printf(<span class="stringliteral">"Vector f (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="comment">/* Fast approximate transformation, display result. */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   printf(<span class="stringliteral">"Vector f (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/* Direct adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   nfsft_adjoint_direct(&plan);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   printf(<span class="stringliteral">"Vector f_hat (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="comment">/* Fast approximate adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   printf(<span class="stringliteral">"Vector f_hat (NFSFT):\n"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="comment">/* Finalize the plan. */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="comment">/* Destroy data precomputed for fast polynomial transform. */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   nfsft_forget();</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   printf(<span class="stringliteral">"nthreads = %d\n"</span>, nfft_get_omp_num_threads());</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="comment">/* init */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   fftw_init_threads();</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   printf(<span class="stringliteral">"Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="stringliteral">"...\n\n"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   simple_test_nfsft();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft_8c.html b/doc/api/html/nfsft_8c.html
new file mode 100644
index 0000000..d6d241c
--- /dev/null
+++ b/doc/api/html/nfsft_8c.html
@@ -0,0 +1,125 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsft.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation file for the NFSFT module.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+<code>#include "legendre.h"</code><br/>
+<code>#include "api.h"</code><br/>
+</div>
+<p><a href="nfsft_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">NFSFT_DEFAULT_NFFT_CUTOFF</a>   6</td></tr>
+<tr class="memdesc:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="mdescLeft"> </td><td class="mdescRight">The default NFFT cutoff parameter.  <a href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6"></a><br/></td></tr>
+<tr class="memitem:gab7d25b80464387893b3c773f92e5c4f3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">NFSFT_DEFAULT_THRESHOLD</a>   1000</td></tr>
+<tr class="memdesc:gab7d25b80464387893b3c773f92e5c4f3"><td class="mdescLeft"> </td><td class="mdescRight">The default threshold for the FPT.  <a href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3"></a><br/></td></tr>
+<tr class="memitem:ga54b840898df97bcd14af4cb004650ed3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">NFSFT_BREAK_EVEN</a>   5</td></tr>
+<tr class="memdesc:ga54b840898df97bcd14af4cb004650ed3"><td class="mdescLeft"> </td><td class="mdescRight">The break-even bandwidth <img class="formulaInl" alt="$N \in \mathbb{N}_0$" src="form_49.png"/>.  <a href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga47209b28b6561fca7349ed8afa5f9656"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga47209b28b6561fca7349ed8afa5f9656"><td class="mdescLeft"> </td><td class="mdescRight">Converts coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0}^M$" src="form_50.png"/> with <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>, <img class="formulaInl" alt="$-M \le n \le M$" src="form_51.png"/> from a linear combination of Chebyshev polynomials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]" src="form_52.png"/>
+</p>
+<p> to coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=0}^M$" src="form_53.png"/> matching the representation by complex exponentials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]" src="form_54.png"/>
+</p>
+<p> for each order <img class="formulaInl" alt="$n=-M,\ldots,M$" src="form_55.png"/>.  <a href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656"></a><br/></td></tr>
+<tr class="memitem:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">c2e_transposed</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="mdescLeft"> </td><td class="mdescRight">Transposed version of the function <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a>.  <a href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37"></a><br/></td></tr>
+<tr class="memitem:ga65cda3f4a3edc5eb39c697cf34b1f0b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65cda3f4a3edc5eb39c697cf34b1f0b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:ga2812aa5beba0eb7efd3072bf323a0155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2812aa5beba0eb7efd3072bf323a0155"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_advanced</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags)</td></tr>
+<tr class="memitem:gafff6158abcefa9a75bcfa41af5a79089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafff6158abcefa9a75bcfa41af5a79089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_guru</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:gabe87aeea1f7cfef9ae8febb16d702f3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe87aeea1f7cfef9ae8febb16d702f3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute</b> (int N, double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:ga3b69bca6c76a63877534f5a9781bf285"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b69bca6c76a63877534f5a9781bf285"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_forget</b> (void)</td></tr>
+<tr class="memitem:gaa63e193a27d84059742ff25ff81e2ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa63e193a27d84059742ff25ff81e2ed1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_finalize</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7628057164579a29cc77487cda6772e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7628057164579a29cc77487cda6772e5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7cfaacc3393dea5c895859fa035e3e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cfaacc3393dea5c895859fa035e3e06"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga5796fc68c432d46dfcab7abd8c56ee22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5796fc68c432d46dfcab7abd8c56ee22"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga813bb48d404c7286310733c99a81a169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga813bb48d404c7286310733c99a81a169"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7a7fa6722d6ba3aade4c69299af86e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a7fa6722d6ba3aade4c69299af86e4e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute_x</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga0af81d81e1b436949ddc46dbd27346e5"><td class="memItemLeft" align="right" valign="top">static struct <a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">wisdom</a> = {false,0U,-1,-1,0,0,0,0,0}</td></tr>
+<tr class="memdesc:ga0af81d81e1b436949ddc46dbd27346e5"><td class="mdescLeft"> </td><td class="mdescRight">The global wisdom structure for precomputed data.  <a href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Implementation file for the NFSFT module. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition in file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft_8c_source.html b/doc/api/html/nfsft_8c_source.html
new file mode 100644
index 0000000..e819159
--- /dev/null
+++ b/doc/api/html/nfsft_8c_source.html
@@ -0,0 +1,1248 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="nfsft_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfsft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* Include NFFT3 utilities header. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/* Include NFFT3 library header. */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* Include private associated Legendre functions header. */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "legendre.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* Include private API header. */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "api.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">   65</a></span> <span class="preprocessor">#define NFSFT_DEFAULT_NFFT_CUTOFF 6</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">   72</a></span> <span class="preprocessor">#define NFSFT_DEFAULT_THRESHOLD 1000</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">   79</a></span> <span class="preprocessor">#define NFSFT_BREAK_EVEN 5</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">   87</a></span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structnfsft__wisdom.html" title="Wisdom structure.">nfsft_wisdom</a> <a class="code" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5" title="The global wisdom structure for precomputed data.">wisdom</a> = {<span class="keyword">f [...]
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">  111</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients  with ,  from a linear combination of Chebyshev polynomials  to coefficients  m...">c2e</a>(<a class="code" href="struc [...]
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">int</span> k;               </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">int</span> n;               </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">double</span> _Complex last; </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">double</span> _Complex act;  </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">double</span> _Complex *xp;  </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">double</span> _Complex *xm;  </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">int</span> low;             </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> up;              </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">int</span> lowe;            </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> upe;             </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="comment">/* Set the first row to order to zero since it is unused. */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   memset(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>,0U,(2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="comment">/* Determine lower and upper bounds for loop processing even terms. */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   lowe = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   upe = -lowe;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="comment">/* Process even terms. */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">for</span> (n = lowe; n <= upe; n += 2)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">/* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">     * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M}$. */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     xm = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(-1,n,plan)]);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     xp = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(+1,n,plan)]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">for</span>(k = 1; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       *xp *= 0.5;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       *xm-- = *xp++;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="comment">/* Set the first coefficient in the array corresponding to this order to</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">     * zero since it is unused. */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     *xm = 0.0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="comment">/* Determine lower and upper bounds for loop processing odd terms. */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   low = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (1-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   up = -low;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="comment">/* Process odd terms incorporating the additional sine term</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">   * \f$\sin \vartheta\f$. */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordflow">for</span> (n = low; n <= up; n += 2)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">     * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M-1}$ incorporating</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">     * the additional term \f$\sin \vartheta\f$. */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)] *= 2.0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     xp = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1,n,plan)]);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/* Set the first coefficient in the array corresponding to this order to zero</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">     * since it is unused. */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     *xp++ = 0.0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     xm = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,n,plan)]);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     last = *xm;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     *xm = 0.5 * _Complex_I * (0.5*xm[-1]);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     *xp++ = -(*xm--);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">for</span> (k = plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1; k > 0; k--)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       act = *xm;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       *xm = 0.5 * _Complex_I * (0.5*(xm[-1] - last));</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       *xp++ = -(*xm--);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       last = act;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     *xm = 0.0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">  189</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37" title="Transposed version of the function c2e.">c2e_transposed</a>(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="keywordtype">int</span> k;               </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordtype">int</span> n;               </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordtype">double</span> _Complex last; </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordtype">double</span> _Complex act;  </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordtype">double</span> _Complex *xp;  </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordtype">double</span> _Complex *xm;  </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordtype">int</span> low;             </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordtype">int</span> up;              </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordtype">int</span> lowe;            </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   <span class="keywordtype">int</span> upe;             </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="comment">/* Determine lower and upper bounds for loop processing even terms. */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   lowe = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   upe = -lowe;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">/* Process even terms. */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keywordflow">for</span> (n = lowe; n <= upe; n += 2)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="comment">/* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M}\f$ from</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">     * old coefficients $\left(c_k^n\right)_{k=-M,\ldots,M}$. */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     xm = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-1,n,plan)]);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     xp = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(+1,n,plan)]);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">for</span>(k = 1; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       *xp += *xm--;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       *xp++ *= 0.5;;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="comment">/* Determine lower and upper bounds for loop processing odd terms. */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   low = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (1-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   up = -low;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="comment">/* Process odd terms. */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordflow">for</span> (n = low; n <= up; n += 2)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="comment">/* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M-1}\f$ from</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">     * old coefficients $\left(c_k^n\right)_{k=0,\ldots,M-1}$. */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     xm = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-1,n,plan)]);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     xp = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(+1,n,plan)]);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">for</span>(k = 1; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       *xp++ -= *xm--;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)] =</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       -0.25*_Complex_I*plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(1,n,plan)];</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     last = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(1,n,plan)];</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(1,n,plan)] =</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       -0.25*_Complex_I*plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(2,n,plan)];</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     xp = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(2,n,plan)]);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">for</span> (k = 2; k < plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       act = *xp;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       *xp = -0.25 * _Complex_I * (xp[1] - last);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       xp++;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       last = act;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     *xp = 0.25 * _Complex_I * last;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)] *= 2.0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="keywordtype">void</span> nfsft_init(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="comment">/* Call nfsft_init_advanced with default flags. */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   nfsft_init_advanced(plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     NFSFT_MALLOC_F_HAT);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="keywordtype">void</span> nfsft_init_advanced(<a class="code" href="structnfsft__plan.html">nfsft_plan</a>* plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                          <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="comment">/* Call nfsft_init_guru with the flags and default NFFT cut-off. */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   nfsft_init_guru(plan, N, M, flags, PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                          FFT_OUT_OF_PLACE, <a class="code" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6" title="The default NFFT cutoff parameter.">NFSFT_DEFAULT_NFFT_CUTOFF</a>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="keywordtype">void</span> nfsft_init_guru(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfft_flags, <span class="keywordtype">int</span> nfft_cutoff)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> {</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordtype">int</span> *nfft_size; <span class="comment">/*< NFFT size                                              */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordtype">int</span> *fftw_size; <span class="comment">/*< FFTW size                                              */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="comment">/* Save the flags in the plan. */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> = flags;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="comment">/* Save the bandwidth N and the number of samples M in the plan. */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> = N;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a> = M;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="comment">/* Calculate the next greater power of two with respect to the bandwidth N</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">   * and the corresponding exponent. */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="comment">//next_power_of_2_exp(plan->N,&plan->NPT,&plan->t);</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="comment">/* Save length of array of Fourier coefficients. Owing to the data layout the</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">   * length is (2N+2)(2N+2) */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a> = (2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2)*(2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="comment">/* Allocate memory for auxilliary array of spherical Fourier coefficients,</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">   * if neccesary. */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title=" [...]
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                                                   <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="comment">/* Allocate memory for spherical Fourier coefficients, if neccesary. */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8"  [...]
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                            <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="comment">/* Allocate memory for samples, if neccesary. */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total numb [...]
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="comment">/* Allocate memory for nodes, if neccesary. */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_X)</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>*2*<span class="keyword" [...]
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="comment">/* Check if fast algorithm is activated. */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       nfft_size = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       fftw_size = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       nfft_size[0] = 2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       nfft_size[1] = 2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       fftw_size[0] = 4*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       fftw_size[1] = 4*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       nfft_init_guru(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>, 2, nfft_size, plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>, fftw_size,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                      nfft_cutoff, nfft_flags,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                      FFTW_ESTIMATE | FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       <span class="comment">/* Assign angle array. */</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       <span class="comment">/* Assign result array. */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size [...]
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       <span class="comment">/* Assign Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>       plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector [...]
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="comment">/* Precompute. */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       <span class="comment">//nfft_precompute_one_psi(&plan->plan_nfft);</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(nfft_size);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(fftw_size);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   plan-><a class="code" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsft_trafo;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   plan-><a class="code" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsft_adjoint;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="keywordtype">void</span> nfsft_precompute(<span class="keywordtype">int</span> N, <span class="keywordtype">double</span> kappa, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsft_flags,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fpt_flags)</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="keywordtype">int</span> n; <span class="comment">/*< The order n                                                     */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="comment">/*  Check if already initialized. */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor"></span><span class="preprocessor">  #pragma omp parallel default(shared)</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordtype">int</span> threadid = omp_get_thread_num();</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor">    #pragma omp single</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       wisdom.nthreads = nthreads;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   }</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <span class="comment">/* Save the precomputation flags. */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   wisdom.flags = nfsft_flags;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <span class="comment">/* Compute and save N_max = 2^{\ceil{log_2 N}} as next greater</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">   * power of two with respect to N. */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   X(next_power_of_2_exp)(N,&wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,&wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t =  N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   <span class="comment">/* Check, if precomputation for direct algorithms needs to be performed. */</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = NULL;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = NULL;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = NULL;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="comment">/* Allocate memory for three-term recursion coefficients. */</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="st [...]
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="str [...]
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>       <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="st [...]
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>       <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="comment">/* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="comment">     * gamma_k^n. */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">alpha_al_all</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P [...]
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">beta_al_all</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_ [...]
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d" title="Compute three-term-recurrence coefficients  of associated Legendre functions for .">gamma_al_all</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P [...]
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   }</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <span class="comment">/* Check, if precomputation for fast algorithms needs to be performed. */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   }</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a> >= <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="comment">/* Precompute data for DPT/FPT. */</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <span class="comment">/* Check, if recursion coefficients have already been calculated. */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> != NULL)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="preprocessor"></span><span class="preprocessor">      #pragma omp parallel default(shared) private(n)</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="preprocessor"></span>      {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   <span class="keywordtype">int</span> threadid = omp_get_thread_num();</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor">  #pragma omp single</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     wisdom.nthreads = nthreads;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     wisdom.set_threads = (<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(nthreads*<span class="keyword">sizeof</span>(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>));</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         wisdom.set_threads[threadid] = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t =  N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>           fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>           fpt_precompute(wisdom.set_threads[threadid],n,&wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n)],</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             &wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>[ROW(n)], &wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f [...]
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>       }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor"></span>      <span class="comment">/* Use the recursion coefficients to precompute FPT data using persistent</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">       * arrays. */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a> = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The log [...]
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>       <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>       {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         <span class="comment">/*fprintf(stderr,"%d\n",n);</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">        fflush(stderr);*/</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>         <span class="comment">/* Precompute data for FPT transformation for order n. */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         fpt_precompute(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,n,&wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^ [...]
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>           &wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n)],n,kappa);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     {</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor"></span><span class="preprocessor">      #pragma omp parallel default(shared) private(n)</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor"></span>      {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>         <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients  [...]
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>         <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   <span class="keywordtype">int</span> threadid = omp_get_thread_num();</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="preprocessor">  #pragma omp single</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     wisdom.nthreads = nthreads;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     wisdom.set_threads = (<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(nthreads*<span class="keyword">sizeof</span>(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>));</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>         alpha = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         beta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         gamma = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>         wisdom.set_threads[threadid] = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t =  N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>,</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         fpt_flags | FPT_AL_SYMMETRY);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>         <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>         {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>           alpha_al_row(alpha,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>           beta_al_row(beta,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>           gamma_al_row(gamma,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>           <span class="comment">/* Precompute data for FPT transformation for order n. */</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>           fpt_precompute(wisdom.set_threads[threadid],n,alpha,beta,gamma,n,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                          kappa);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>         }</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>         <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(alpha);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(beta);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(gamma);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>       }</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor"></span>    <span class="comment">/* Allocate memory for three-term recursion coefficients. */</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href=" [...]
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="s [...]
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href=" [...]
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a> = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The log [...]
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         fpt_flags | FPT_AL_SYMMETRY);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>       <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         <span class="comment">/*fprintf(stderr,"%d NO_DIRECT\n",n);</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="comment">        fflush(stderr);*/</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         <span class="comment">/* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="comment">         * gamma_k^n. */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         alpha_al_row(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>         beta_al_row(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         gamma_al_row(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         <span class="comment">/* Precompute data for FPT transformation for order n. */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         fpt_precompute(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,n,wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. [...]
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                        kappa);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>       }</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="preprocessor"></span>      wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = NULL;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = NULL;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>       wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = NULL;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     }</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   }</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="comment">/* Wisdom has been initialised. */</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="keywordtype">void</span> nfsft_forget(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   <span class="comment">/* Check if wisdom has been initialised. */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == <span class="keyword">false</span>)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="comment">/* Nothing to do. */</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   }</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   <span class="comment">/* Check, if precomputation for direct algorithms has been performed. */</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   {</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   }</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   {</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="comment">/* Free arrays holding three-term recurrence coefficients. */</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>);</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = NULL;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = NULL;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = NULL;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   <span class="comment">/* Check, if precomputation for fast algorithms has been performed. */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   {</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   }</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a> >= <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="preprocessor"></span>    <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="keywordflow">for</span> (k = 0; k < wisdom.nthreads; k++)</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       fpt_finalize(wisdom.set_threads[k]);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.set_threads);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="preprocessor"></span>    <span class="comment">/* Free precomputed data for FPT transformation. */</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     fpt_finalize(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>);</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   <span class="comment">/* Wisdom is now uninitialised. */</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="keywordtype">void</span> nfsft_finalize(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordflow">if</span> (!plan)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   <span class="comment">/* Finalise the nfft plan. */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   nfft_finalize(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   <span class="comment">/* De-allocate memory for auxilliary array of spherical Fourier coefficients,</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="comment">   * if neccesary. */</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   {</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   }</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="comment">/* De-allocate memory for spherical Fourier coefficients, if necessary. */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     <span class="comment">//fprintf(stderr,"deallocating f_hat\n");</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   }</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   <span class="comment">/* De-allocate memory for samples, if neccesary. */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F)</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   {</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     <span class="comment">//fprintf(stderr,"deallocating f\n");</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   }</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="comment">/* De-allocate memory for nodes, if neccesary. */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_X)</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   {</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     <span class="comment">//fprintf(stderr,"deallocating x\n");</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="keywordtype">void</span> nfsft_trafo_direct(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> {</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   <span class="keywordtype">int</span> m;               <span class="comment">/*< The node index                                    */</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordtype">int</span> k;               <span class="comment">/*< The degree k                                      */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   <span class="keywordtype">int</span> n;               <span class="comment">/*< The order n                                       */</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>   <span class="keywordtype">int</span> n_abs;           <span class="comment">/*< The absolute value of the order n, ie n_abs = |n| */</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;       <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="comment">                           coefficient alpha_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="comment">                           functions P_k^n                                   */</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>;       <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> <span class="comment">                           coefficient beta_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment">                           functions P_k^n                                   */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   <span class="keywordtype">double</span> _Complex *a;   <span class="comment">/*< Pointer to auxilliary array for Clenshaw algor.   */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   <span class="keywordtype">double</span> _Complex it1;  <span class="comment">/*< Auxilliary variable for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="keywordtype">double</span> _Complex it2;  <span class="comment">/*< Auxilliary variable for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   <span class="keywordtype">double</span> _Complex temp; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   <span class="keywordtype">double</span> _Complex f_m;  <span class="comment">/*< The final function value f_m = f(x_m) for a</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="comment">                           single node.                                      */</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   <span class="keywordtype">double</span> stheta;       <span class="comment">/*< Current angle theta for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   <span class="keywordtype">double</span> sphi;         <span class="comment">/*< Current angle phi for Clenshaw algorithm          */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> <span class="preprocessor"></span>  plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   {</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   }</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   <span class="comment">/* Copy spherical Fourier coefficients, if necessary. */</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   {</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     memcpy(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>,plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,plan-><a class="code" href="structnfsft__plan.h [...]
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>            <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   }</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   {</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   }</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>   <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="comment">   * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> <span class="comment">   * weight. */</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   {</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     {</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>       <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>       {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>         plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>           sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>       }</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   <span class="comment">/* Distinguish by bandwidth M. */</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> == 0)</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="comment">/* N = 0 */</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     <span class="comment">/* Constant function */</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     {</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>       plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] = plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,0,plan)];</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     }</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   {</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="comment">/* N > 0 */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     <span class="comment">/* Evaluate</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="comment">     *   \sum_{k=0}^N \sum_{n=-k}^k a_k^n P_k^{|n|}(cos theta_m) e^{i n phi_m}</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="comment">     *   = \sum_{n=-N}^N \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="comment">     *     e^{i n phi_m}.</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(m,stheta,sphi,f_m,n,a,n_abs,alpha,gamma,it2,it1,k,temp)</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     {</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>       <span class="comment">/* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>       stheta = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*m+1]);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>       <span class="comment">/* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>       sphi = 2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*m];</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>       <span class="comment">/* Initialize result for current node. */</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>       f_m = 0.0;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>       <span class="comment">/* For n = -N,...,N, evaluate</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> <span class="comment">       *   b_n := \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="comment">       * using Clenshaw's algorithm.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>       {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>         <span class="comment">/* Get pointer to Fourier coefficients vector for current order n. */</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         a = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)]);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>         <span class="comment">/* Take absolute value of n. */</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         n_abs = abs(n);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>         <span class="comment">/* Get pointers to three-term recurrence coefficients arrays. */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>         alpha = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>         gamma = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         <span class="comment">/* Clenshaw's algorithm */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>         it2 = a[plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>];</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>         it1 = a[plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1];</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>         <span class="keywordflow">for</span> (k = plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k > n_abs + 1; k--)</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>           temp = a[k-2] + it2 * gamma[k];</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>           it2 = it1 + it2 * alpha[k] * stheta;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>           it1 = temp;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>         }</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>         <span class="comment">/* Compute final step if neccesary. */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         <span class="keywordflow">if</span> (n_abs < plan->N)</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         {</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>           it2 = it1 + it2 * wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROWK(n_abs)+1] * stheta;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         }</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>         <span class="comment">/* Compute final result by multiplying the fixed part</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="comment">         *   gamma_|n| (1-cos^2(theta))^{|n|/2}</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> <span class="comment">         * for order n and the exponential part</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="comment">         *   e^{i n phi}</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="comment">         * and add the result to f_m.</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>         f_m += it2 * wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)] *</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>           pow(1- stheta * stheta, 0.5*n_abs) * cexp(_Complex_I*n*sphi);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>       }</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>       <span class="comment">/* Write result f_m for current node to array f. */</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>       plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] = f_m;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     }</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>   }</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> }</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="keywordtype">void</span> nfsft_adjoint_direct(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> {</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   <span class="keywordtype">int</span> m;               <span class="comment">/*< The node index                                    */</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>   <span class="keywordtype">int</span> k;               <span class="comment">/*< The degree k                                      */</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>   <span class="keywordtype">int</span> n;               <span class="comment">/*< The order n                                       */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>   <span class="keywordtype">int</span> n_abs;           <span class="comment">/*< The absolute value of the order n, ie n_abs = |n| */</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;       <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">                           coefficient alpha_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="comment">                           functions P_k^n                                   */</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>   <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>;       <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">                           coefficient beta_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="comment">                           functions P_k^n                                   */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>   <span class="keywordtype">double</span> _Complex it1;  <span class="comment">/*< Auxilliary variable for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   <span class="keywordtype">double</span> _Complex it2;  <span class="comment">/*< Auxilliary variable for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   <span class="keywordtype">double</span> _Complex temp; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   <span class="keywordtype">double</span> stheta;       <span class="comment">/*< Current angle theta for Clenshaw algorithm        */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   <span class="keywordtype">double</span> sphi;         <span class="comment">/*< Current angle phi for Clenshaw algorithm          */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> <span class="preprocessor"></span>  plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>   {</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>   }</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   <span class="comment">/* Initialise spherical Fourier coefficients array with zeros. */</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   memset(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0U,plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>   <span class="comment">/* Distinguish by bandwidth N. */</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> == 0)</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>   {</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="comment">/* N == 0 */</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="comment">/* Constant function */</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     {</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>       plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,0,plan)] += plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m];</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     }</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>   }</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   {</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     <span class="comment">/* N > 0 */</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="preprocessor"></span>      <span class="comment">/* Traverse all orders n. */</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(n,n_abs,alpha,gamma,m,stheta,sphi,it2,it1,k,temp)</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>       {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         <span class="comment">/* Take absolute value of n. */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         n_abs = abs(n);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>         <span class="comment">/* Get pointers to three-term recurrence coefficients arrays. */</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>         alpha = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         gamma = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> </div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>         <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         {</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>           <span class="comment">/* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>           stheta = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*m+1]);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>           <span class="comment">/* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>           sphi = 2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*m];</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>           <span class="comment">/* Transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>           <span class="comment">/* Initial step */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>           it1 = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] * wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n [...]
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>             pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>           plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs,n,plan)] += it1;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>           it2 = 0.0;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>           <span class="keywordflow">if</span> (n_abs < plan->N)</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>           {</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>             it2 = it1 * wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROWK(n_abs)+1] * stheta;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>             plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs+1,n,plan)] += it2;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>           }</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>           <span class="comment">/* Loop for transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>           <span class="keywordflow">for</span> (k = n_abs+2; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>           {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>             temp = it2;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>             it2 = alpha[k] * stheta * it2 + gamma[k] * it1;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>             it1 = temp;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>             plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] += it2;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>           }</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>         }</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>       }</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> <span class="preprocessor"></span>    <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     {</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>       <span class="comment">/* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>       stheta = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*m+1]);</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>       <span class="comment">/* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>       sphi = 2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*m];</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>       <span class="comment">/* Traverse all orders n. */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>       {</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>         <span class="comment">/* Take absolute value of n. */</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>         n_abs = abs(n);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         <span class="comment">/* Get pointers to three-term recurrence coefficients arrays. */</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         alpha = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         gamma = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>         <span class="comment">/* Transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>         <span class="comment">/* Initial step */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>         it1 = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] * wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f [...]
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>           pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>         plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs,n,plan)] += it1;</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>         it2 = 0.0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>         <span class="keywordflow">if</span> (n_abs < plan->N)</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>         {</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>           it2 = it1 * wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROWK(n_abs)+1] * stheta;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>           plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs+1,n,plan)] += it2;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>         }</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>         <span class="comment">/* Loop for transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>         <span class="keywordflow">for</span> (k = n_abs+2; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>           temp = it2;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>           it2 = alpha[k] * stheta * it2 + gamma[k] * it1;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>           it1 = temp;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>           plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] += it2;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         }</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>       }</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     }</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> <span class="comment">   * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="comment">   * weight. */</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> <span class="preprocessor">    #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     {</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>       <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>       {</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>         <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>           sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>       }</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     }</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   }</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>   <span class="comment">/* Set unused coefficients to zero. */</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_ZERO_F_HAT)</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   {</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N+1; n++)</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     {</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>       memset(&plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1,n,plan)],0U,</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+1+abs(n))*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     }</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   }</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="keywordtype">void</span> nfsft_trafo(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   <span class="keywordtype">int</span> k; <span class="comment">/*< The degree k                                                    */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>   <span class="keywordtype">int</span> n; <span class="comment">/*< The order n                                                     */</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="preprocessor"></span>  ticks t0, t1;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="preprocessor"></span><span class="preprocessor">  #ifdef DEBUG</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> <span class="preprocessor"></span>    <span class="keywordtype">double</span> t, t_pre, t_nfft, t_fpt, t_c2e, t_norm;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     t_pre = 0.0;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     t_norm = 0.0;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     t_fpt = 0.0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     t_c2e = 0.0;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     t_nfft = 0.0;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> <span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="preprocessor"></span>  plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   {</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   }</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>   <span class="comment">/* Check, if precomputation was done and that the bandwidth N is not too</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> <span class="comment">   * big.</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == 0 || plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> > wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b [...]
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   {</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>   }</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>   <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> < <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   {</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     <span class="comment">/* Use NDSFT. */</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     nfsft_trafo_direct(plan);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>   }</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>   <span class="comment">/* Check for correct value of the bandwidth N. */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>)</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="comment">/* Copy spherical Fourier coefficients, if necessary. */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     {</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>       memcpy(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>,plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,plan-><a class="code" href="structnfsft__plan [...]
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>              <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     }</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     {</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>       plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     <span class="comment">/* Propagate pointer values to the internal NFFT plan to assure</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="comment">     * consistency. Pointers may have been modified externally.</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size i [...]
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internal [...]
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="comment">     * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="comment">     * weight. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     {</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>       <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>       {</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>           <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>           plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>             sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>         }</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>       }</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     }</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="preprocessor"></span>    t0 = getticks();</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="preprocessor"></span>    <span class="comment">/* Check, which polynomial transform algorithm should be used. */</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_DPT)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     {</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="preprocessor"></span><span class="preprocessor">      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>          fpt_trafo_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="preprocessor"></span>      <span class="comment">/* Use direct discrete polynomial transform DPT. */</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>       {</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>         <span class="comment">//fprintf(stderr,"nfsft_trafo: n = %d\n",n);</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>         fpt_trafo_direct(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>       }</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="preprocessor"></span><span class="preprocessor">      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         fpt_trafo(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="preprocessor"></span>      <span class="comment">/* Use fast polynomial transform FPT. */</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>       {</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         <span class="comment">//fprintf(stderr,"nfsft_trafo: n = %d\n",n);</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>         fpt_trafo(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>           &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>       }</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="preprocessor"></span>    t1 = getticks();</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="preprocessor"></span>    t0 = getticks();</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="preprocessor"></span>    <span class="comment">/* Convert Chebyshev coefficients to Fourier coefficients. */</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients  with ,  from a linear combination of Chebyshev polynomials  to coefficients  m...">c2e</a>(plan);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="preprocessor"></span>    t1 = getticks();</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="preprocessor"></span>    t0 = getticks();</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="preprocessor"></span>    <span class="comment">/* Check, which nonequispaced discrete Fourier transform algorithm should</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment">     * be used.</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_NDFT)</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>       <span class="comment">/* Use NDFT. */</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>       nfft_trafo_direct(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     }</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>       <span class="comment">/* Use NFFT. */</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>       <span class="comment">//fprintf(stderr,"nfsft_adjoint: nfft_trafo\n");</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>       nfft_trafo_2d(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     }</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="preprocessor"></span>    t1 = getticks();</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> }</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordtype">void</span> nfsft_adjoint(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>   <span class="keywordtype">int</span> k; <span class="comment">/*< The degree k                                                    */</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>   <span class="keywordtype">int</span> n; <span class="comment">/*< The order n                                                     */</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="preprocessor"></span>  ticks t0, t1;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="preprocessor"></span>  plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>   plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>   <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>   {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>   }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   <span class="comment">/* Check, if precomputation was done and that the bandwidth N is not too</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment">   * big.</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>   <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == 0 || plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> > wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b [...]
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>   {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>   }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>   <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> < <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>   {</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="comment">/* Use adjoint NDSFT. */</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     nfsft_adjoint_direct(plan);</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>   }</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>   <span class="comment">/* Check for correct value of the bandwidth N. */</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>)</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>   {</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     <span class="comment">//fprintf(stderr,"nfsft_adjoint: Starting\n");</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>     <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     <span class="comment">/* Propagate pointer values to the internal NFFT plan to assure</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment">     * consistency. Pointers may have been modified externally.</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size i [...]
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector o [...]
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="preprocessor"></span>    t0 = getticks();</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="preprocessor"></span>    <span class="comment">/* Check, which adjoint nonequispaced discrete Fourier transform algorithm</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment">     * should be used.</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_NDFT)</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     {</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint_direct\n");</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>       <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>       <span class="comment">/* Use adjoint NDFT. */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>       nfft_adjoint_direct(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>     {</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>       <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint\n");</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>       <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>       <span class="comment">//fprintf(stderr,"nfsft_adjoint: nfft_adjoint\n");</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       <span class="comment">/* Use adjoint NFFT. */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>       nfft_adjoint_2d(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>     }</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="preprocessor"></span>    t1 = getticks();</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>     <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing c2e_transposed\n");</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="preprocessor"></span>    t0 = getticks();</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="preprocessor"></span>    <span class="comment">/* Convert Fourier coefficients to Chebyshev coefficients. */</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     <a class="code" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37" title="Transposed version of the function c2e.">c2e_transposed</a>(plan);</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="preprocessor"></span>    t1 = getticks();</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"></span>    t0 = getticks();</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="preprocessor"></span>    <span class="comment">/* Check, which transposed polynomial transform algorithm should be used */</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_DPT)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>     {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="preprocessor"></span><span class="preprocessor">      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>         fpt_transposed_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="preprocessor"></span>      <span class="comment">/* Use transposed DPT. */</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>       {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>         <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing dpt_transposed\n");</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         fpt_transposed_direct(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>       }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="preprocessor"></span><span class="preprocessor">      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         fpt_transposed(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor"></span>      <span class="comment">//fprintf(stderr,"nfsft_adjoint: fpt_transposed\n");</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>       <span class="comment">/* Use transposed FPT. */</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>       {</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>         <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing fpt_transposed\n");</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>         fpt_transposed(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>           &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>           plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>       }</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="preprocessor"></span>    t1 = getticks();</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>     <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">     * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment">     * weight. */</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     {</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>       <span class="comment">//fprintf(stderr,"nfsft_adjoint: Normalizing\n");</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>       <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>       <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor">      #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor"></span>      <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>       {</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>         <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>         {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>           <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>           plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>             sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>         }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>       }</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     }</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> </div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>     <span class="comment">/* Set unused coefficients to zero. */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_ZERO_F_HAT)</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     {</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>       <span class="comment">//fprintf(stderr,"nfsft_adjoint: Setting to zero\n");</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>       <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>       <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N+1; n++)</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>       {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         memset(&plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1,n,plan)],0U,</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>           (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+1+abs(n))*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>       }</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>     }</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="comment">//fprintf(stderr,"nfsft_adjoint: Finished\n");</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>   }</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> }</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordtype">void</span> nfsft_precompute_x(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>   <span class="comment">/* Pass angle array to NFFT plan. */</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>   plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>   <span class="comment">/* Precompute. */</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     nfft_precompute_one_psi(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> }</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft__benchomp_8c_source.html b/doc/api/html/nfsft__benchomp_8c_source.html
new file mode 100644
index 0000000..139527d
--- /dev/null
+++ b/doc/api/html/nfsft__benchomp_8c_source.html
@@ -0,0 +1,567 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft_benchomp.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft_benchomp.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <<a class="code" href="nfft3_8h.html">nfft3.h</a>></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#define NREPEAT 5</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">static</span> FILE* file_out_tex = NULL;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">int</span> get_nthreads_array(<span class="keywordtype">int</span> **arr)</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">int</span> max_threads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> alloc_num = 2;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">int</span> ret_number = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">int</span> max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordflow">if</span> (max_threads <= 5)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     *arr = (<span class="keywordtype">int</span>*) malloc(max_threads*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordflow">for</span> (k = 0; k < max_threads; k++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>       *(*arr + k) = k+1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">return</span> max_threads;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2, alloc_num++);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   *arr = (<span class="keywordtype">int</span>*) malloc(alloc_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads && max_threads_pw2)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>       *(*arr + ret_number) = max_threads/2;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>       ret_number++;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     *(*arr + ret_number) = k;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     ret_number++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       *(*arr + ret_number) = max_threads;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       ret_number++;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     }</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">return</span> ret_number;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> } </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> check_result_value(<span class="keyword">const</span> <span class="keywordtype">int</span> val, <span class="keyword">const</span> <span class="keywordtype">int</span> ok, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">if</span> (val != ok)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     fprintf(stderr, <span class="stringliteral">"ERROR %s: %d not %d\n"</span>, msg, val, ok);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     exit(1);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keywordtype">void</span> run_test_create(<span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   snprintf(cmd, 1024, <span class="stringliteral">"./nfsft_benchomp_createdataset %d %d %d > nfsft_benchomp_test.data"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   check_result_value(system(cmd), 0, <span class="stringliteral">"createdataset"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keywordtype">void</span> run_test_init_output()</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   FILE *f = fopen(<span class="stringliteral">"nfsft_benchomp_test.result"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">if</span> (f!= NULL)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     fclose(f);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">int</span> nfsft_flags;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">int</span> psi_flags;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> } <a class="code" href="structs__param.html">s_param</a>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">double</span> avg;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> } <a class="code" href="structs__resval.html">s_resval</a>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <a class="code" href="structs__resval.html">s_resval</a> resval[6];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> } <a class="code" href="structs__result.html">s_result</a>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <a class="code" href="structs__param.html">s_param</a> param;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <a class="code" href="structs__result.html">s_result</a> *results;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> nresults;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> } <a class="code" href="structs__testset.html">s_testset</a>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">void</span> run_test(<a class="code" href="structs__resval.html">s_resval</a> *res, <span class="keywordtype">int</span> nrepeat, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> nfsft_flags, <span class="keywordtype">int</span> psi_flags, <span class="keywordtype">int</span> nthreads)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   FILE *f;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">int</span> r,t;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordflow">if</span> (nthreads < 2)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfsft_benchomp_detail_single %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out"</span>, m, nfsft_flags, psi_flags, nrepeat);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     snprintf(cmd, 1024, <span class="stringliteral">"./nfsft_benchomp_detail_threads %d %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out"</span>, m, nfsft_flags, psi_flags, nrepeat, nthreads);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   f = fopen(<span class="stringliteral">"nfsft_benchomp_test.out"</span>, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">int</span> retval;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">double</span> v[6];</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">//    FILE *f;</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">//    check_result_value(system(cmd), 0, cmd);</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">//    f = fopen("nfsft_benchomp_test.out", "r");</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     retval = fscanf(f, <span class="stringliteral">"%lg %lg %lg %lg %lg %lg"</span>, v, v+1, v+2, v+3, v+4, v+5);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     check_result_value(retval, 6, <span class="stringliteral">"read nfsft_benchomp_test.out"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">//    fclose(f);</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">//    fprintf(stderr, "%.3e %.3e %.3e %.3e %.3e %.3e\n", v[0], v[1], v[2], v[3], v[4], v[5]);</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       res[t].avg += v[t];</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       <span class="keywordflow">if</span> (res[t].min > v[t])</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         res[t].min = v[t];</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       <span class="keywordflow">if</span> (res[t].max < v[t])</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         res[t].max = v[t];</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   fclose(f);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     res[t].avg /= nrepeat;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   fprintf(stderr, <span class="stringliteral">"%d %d: "</span>, nthreads, nrepeat);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     fprintf(stderr, <span class="stringliteral">"%.3e %.3e %.3e | "</span>, res[t].avg, res[t].min, res[t].max);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_psi_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keywordflow">if</span> (flags & PRE_PSI)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">return</span> <span class="stringliteral">"prepsi"</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (flags & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">return</span> <span class="stringliteral">"unknownPSI"</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordflow">return</span> <span class="stringliteral">"nopsi"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_sort_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">if</span> (flags & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">return</span> <span class="stringliteral">"sorted"</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">return</span> <span class="stringliteral">"unsorted"</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_adjoint_omp_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordflow">return</span> <span class="stringliteral">"blockwise"</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">#define MASK_TA (1U<<1)</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_N (1U<<2)</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_M (1U<<4)</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_WINM (1U<<5)</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_PSI (1U<<6)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_SORT (1U<<7)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_BW (1U<<8)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_FPT (1U<<9)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> determine_different_parameters(<a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = 0;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">if</span> (ntestsets < 2)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordflow">for</span> (t = 1; t < ntestsets; t++)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">if</span> (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       mask |= MASK_TA;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">if</span> (testsets[t-1].param.N != testsets[t].param.N)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       mask |= MASK_N;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">if</span> (testsets[t-1].param.M != testsets[t].param.M)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       mask |= MASK_M;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordflow">if</span> (testsets[t-1].param.m != testsets[t].param.m)</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       mask |= MASK_WINM;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.psi_flags & PRE_ONE_PSI) != (testsets[t].param.psi_flags & PRE_ONE_PSI))</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       mask |= MASK_FLAGS_PSI;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.psi_flags & NFFT_SORT_NODES) != (testsets[t].param.psi_flags & NFFT_SORT_NODES))</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       mask |= MASK_FLAGS_SORT;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT))</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       mask |= MASK_FLAGS_BW;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">if</span> ((testsets[t-1].param.nfsft_flags & NFSFT_USE_DPT) != (testsets[t].param.nfsft_flags & NFSFT_USE_DPT))</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       mask |= MASK_FLAGS_FPT;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   }</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   <span class="keywordflow">return</span> mask;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="keywordtype">void</span> get_plot_title(<span class="keywordtype">char</span> *outstr, <span class="keywordtype">int</span> maxlen, <span class="keywordtype">char</span> *hostname, <a class="code" href="structs__param.html">s_param</a> param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask)</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = ~diff_mask;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   len = snprintf(outstr, maxlen, <span class="stringliteral">"%s"</span>, hostname);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   offset += len;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordflow">if</span> (mask & MASK_TA)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\mathrm{NFSFT}%s$"</span>, param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     offset += len;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordflow">if</span> (mask & MASK_N)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" N=%d"</span>, param.N);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     offset += len;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">if</span> (mask & MASK_M)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" M=%d"</span>, param.M);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     offset += len;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordflow">if</span> (mask & MASK_WINM)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" m=%d"</span>, param.m);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     offset += len;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">if</span> (mask & MASK_FLAGS_PSI)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_psi_string(param.psi_flags));</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     offset += len;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">if</span> (mask & MASK_FLAGS_SORT)</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_sort_string(param.psi_flags));</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     offset += len;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordflow">if</span> ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.psi_flags)) > 0)</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_adjoint_omp_string(param.psi_flags));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     offset += len;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="keywordflow">if</span> (mask & MASK_FLAGS_FPT)</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     len = snprintf(outstr+offset, maxlen-offset, param.nfsft_flags & NFSFT_USE_DPT ? <span class="stringliteral">" DPT"</span> : <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     offset += len;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="keywordtype">void</span> print_output_speedup_total_tref(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets, <span class="keywordtype">int</span> use_tref, <span class="keywordtype">double</span> tref)</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> {</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordtype">int</span> i, t;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask = determine_different_parameters(testsets, ntestsets);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, "</span>);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <a class="code" href="structs__testset.html">s_testset</a> testset = testsets[t];</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     fprintf(stderr, <span class="stringliteral">"%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}"</span>, hostname, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_stri [...]
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       <span class="keywordflow">if</span> (use_tref == 1)</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="keywordflow">if</span> (use_tref == 1)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         fprintf(stderr, <span class="stringliteral">"%d:%.3f  "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         fprintf(stderr, <span class="stringliteral">"%d:%.3f  "</span>, testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     fprintf(stderr, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   fprintf(out, <span class="stringliteral">"\\legend{{"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">if</span> (t > 0)</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       fprintf(out, <span class="stringliteral">"},{"</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     get_plot_title(title, 255, <span class="stringliteral">""</span>, testsets[t].param, ~(diff_mask));</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     fprintf(out, <span class="stringliteral">"%s"</span>, title);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   fprintf(out, <span class="stringliteral">"}}\n"</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   fflush(out);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="keywordtype">void</span> print_output_speedup_total(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets, <span class="keywordtype">int</span> use_tref)</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   <span class="keywordtype">double</span> tref = 1.0/0.0;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   <span class="keywordtype">int</span> t, k;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="keywordflow">if</span> (use_tref == 1)</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       <span class="keywordflow">for</span> (k = 0; k < testsets[t].nresults; k++)</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         <span class="keywordflow">if</span> (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>           tref = testsets[t].results[k].resval[5].avg;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   print_output_speedup_total_tref(out, testsets, ntestsets, use_tref, tref);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="keywordtype">void</span> print_output_histo_PENRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>       fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   fprintf(out, <span class="stringliteral">" title={%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}"</span>, hostname, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_s [...]
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[3].avg);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   fprintf(out, <span class="stringliteral">"\\legend{%s,%s,$\\mathrm{NFFT}%s$,rest,total}\n"</span>, testset.param.nfsft_flags & NFSFT_USE_DPT ? <span class="stringliteral">"DPT"</span> : <span class="stringliteral">"FPT"</span>, testset.param.trafo_adjoint==0?<span class="stringliteral">"c2e"</span>:<span class="stringliteral">"$\\mathrm{c2e}^\\top$"</span> [...]
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   fflush(out);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> }</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="keywordtype">void</span> run_testset(<a class="code" href="structs__testset.html">s_testset</a> *testset, <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> nfsft_flags, <span class="keywordtype">int</span> psi_flags, <span class="keywordtype" [...]
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   testset->param.trafo_adjoint = trafo_adjoint;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   testset->param.N = N;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   testset->param.M = M;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   testset->param.m = m;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   testset->param.nfsft_flags = nfsft_flags;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   testset->param.psi_flags = psi_flags;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   testset->results = (<a class="code" href="structs__result.html">s_result</a>*) malloc(n_threads_array_size*<span class="keyword">sizeof</span>(<a class="code" href="structs__result.html">s_result</a>));</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   testset->nresults = n_threads_array_size;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   run_test_create(testset->param.trafo_adjoint, testset->param.N, testset->param.M);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   <span class="keywordflow">for</span> (i = 0; i < n_threads_array_size; i++)</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     testset->results[i].nthreads = nthreads_array[i];</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.nfsft_flags, testset->param.psi_flags, testset->results[i].nthreads = nthreads_array[i]);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="keywordtype">void</span> test1(<span class="keywordtype">int</span> *nthreads_array, <span class="keywordtype">int</span> n_threads_array_size, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   <a class="code" href="structs__testset.html">s_testset</a> testsets[4];</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   run_testset(&testsets[0], 0, 1024, 1000000, m, 0, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="preprocessor"></span>  print_output_histo_PENRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   run_testset(&testsets[1], 1, 1024, 1000000, m, 0, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor"></span>  print_output_histo_PENRT(file_out_tex, testsets[1]);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   print_output_speedup_total(file_out_tex, testsets, 2, 0);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   run_testset(&testsets[2], 0, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor"></span>  print_output_histo_PENRT(file_out_tex, testsets[2]);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   run_testset(&testsets[3], 1, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor"></span>  print_output_histo_PENRT(file_out_tex, testsets[3]);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   print_output_speedup_total(file_out_tex, testsets+2, 2, 0);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> {</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   <span class="keywordtype">int</span> *nthreads_array;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   <span class="keywordtype">int</span> n_threads_array_size = get_nthreads_array(&nthreads_array);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor">#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor"></span>  fprintf(stderr, <span class="stringliteral">"WARNING: Detailed time measurements for NFSFT are not activated.\n"</span>);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   fprintf(stderr, <span class="stringliteral">"For more detailed plots, please re-run the configure script with options\n"</span>);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   fprintf(stderr, <span class="stringliteral">"--enable-measure-time --enable-measure-time-fftw --enable-nfsft --enable-openmp\n"</span>);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   fprintf(stderr, <span class="stringliteral">"and run \"make clean all\"\n\n"</span>);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keywordflow">for</span> (k = 0; k < n_threads_array_size; k++)</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     fprintf(stderr, <span class="stringliteral">"%d "</span>, nthreads_array[k]);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   file_out_tex = fopen(<span class="stringliteral">"nfsft_benchomp_results_plots.tex"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   test1(nthreads_array, n_threads_array_size, 2);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   test1(nthreads_array, n_threads_array_size, 4);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   test1(nthreads_array, n_threads_array_size, 6);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   test1(nthreads_array, n_threads_array_size, 8);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   fclose(file_out_tex);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft__benchomp__createdataset_8c_source.html b/doc/api/html/nfsft__benchomp__createdataset_8c_source.html
new file mode 100644
index 0000000..272cc7d
--- /dev/null
+++ b/doc/api/html/nfsft__benchomp__createdataset_8c_source.html
@@ -0,0 +1,165 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft_benchomp_createdataset.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft_benchomp_createdataset.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keywordtype">void</span> nfsft_benchomp_createdataset(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> t, j, k, n;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   R *x;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   C *f, *f_hat;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">int</span> N_total = (2*N+2) * (2*N+2);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> ptemp;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   nfsft_init_guru(&ptemp, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   x = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*M*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   f = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   f_hat = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N_total*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="comment">/* init pseudo-random nodes */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     x[2*j]= nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     x[2*j+1]= K(0.5) * nfft_drand48();</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   }</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>  </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f_hat+NFSFT_INDEX(k,n,&ptemp),1);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f,M);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   printf(<span class="stringliteral">"%d %d %d\n"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">for</span> (t=0; t < 2; t++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       printf(<span class="stringliteral">"%.16e "</span>, x[2*j+t]);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f_hat[NFSFT_INDEX(k,n,&ptemp)]), cimag(f_hat[NFSFT_INDEX(k,n,&ptemp)]));</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f[j]), cimag(f[j]));</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">if</span> (argc < 4) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     fprintf(stderr, <span class="stringliteral">"usage: tr_adj N M\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   trafo_adjoint = atoi(argv[1]);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (trafo_adjoint < 0 && trafo_adjoint > 1)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     trafo_adjoint = 1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   N = atoi(argv[2]);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   M = atoi(argv[3]);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   fprintf(stderr, <span class="stringliteral">"tr_adj=%d, N=%d, M=%d\n"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   nfsft_benchomp_createdataset(trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsft__benchomp__detail_8c_source.html b/doc/api/html/nfsft__benchomp__detail_8c_source.html
new file mode 100644
index 0000000..a09ac95
--- /dev/null
+++ b/doc/api/html/nfsft__benchomp__detail_8c_source.html
@@ -0,0 +1,267 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft_benchomp_detail.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsft_benchomp_detail.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keywordtype">void</span> bench_openmp_readfile(FILE *infile, <span class="keywordtype">int</span> *trafo_adjoint, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> *M, <span class="keywordtype">double</span> **x, C **f_hat, C **f)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">double</span> re,im;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">int</span> k, n, j, t;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   fscanf(infile, <span class="stringliteral">"%d %d %d"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   *x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*(*M)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   *f_hat = (C*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*(*N)+2) * (2*(*N)+2) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   *f = (C*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((*M)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   memset(*f_hat,0U,(2*(*N)+2) * (2*(*N)+2) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   memset(*f,0U,(*M)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span>  fftw_import_wisdom_from_filename(<span class="stringliteral">"nfsft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span>  fftw_import_wisdom_from_filename(<span class="stringliteral">"nfsft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   nfsft_init_guru(&plan, *N, *M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     PRE_PHI_HUT | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span>  fftw_export_wisdom_to_filename(<span class="stringliteral">"nfsft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span>  fftw_export_wisdom_to_filename(<span class="stringliteral">"nfsft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">for</span> (j=0; j < *M; j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordflow">for</span> (t=0; t < 2; t++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       fscanf(infile, <span class="stringliteral">"%lg"</span>, (*x)+2*j+t);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordflow">for</span> (k = 0; k <= *N; k++)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         (*f_hat)[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">for</span> (j=0; j < *M; j++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       (*f)[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keywordtype">void</span> bench_openmp(<span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> *x, C *f_hat, C *f, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> nfsft_flags, <span class="keywordtype">int</span> psi_flags)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">int</span> k, n;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">//  int N, M, trafo_adjoint;</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordtype">double</span> tt_total, tt_pre;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">//  fscanf(infile, "%d %d %d", &trafo_adjoint, &N, &M);</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">  fftw_import_wisdom_from_filename("nfsft_benchomp_detail_threads.plan");</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">#else</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">  fftw_import_wisdom_from_filename("nfsft_benchomp_detail_single.plan");</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">#endif*/</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">//  nfsft_precompute(N,1000.0,0U,0U);</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="comment">/* Initialize transform plan using the guru interface. All input and output</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">   * arrays are allocated by nfsft_init_guru(). Computations are performed with</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">   * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">   * Fourier coefficients is preserved during transformations. The NFFT uses a</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">   * cut-off parameter m = 6. See the NFFT 3 manual for details.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   nfsft_init_guru(&plan, N, M, nfsft_flags | NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     PRE_PHI_HUT | psi_flags | FFTW_INIT | FFT_OUT_OF_PLACE, m);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/*#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">  fftw_export_wisdom_to_filename("nfsft_benchomp_detail_threads.plan");</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">#else</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">  fftw_export_wisdom_to_filename("nfsft_benchomp_detail_single.plan");</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">#endif*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">for</span> (j=0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">for</span> (t=0; t < 2; t++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>  <span class="comment">//     fscanf(infile, "%lg", plan.x+2*j+t);</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>       plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a>[2*j+t] = x[2*j+t];</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     memset(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0U,plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Comp [...]
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">//        fscanf(infile, "%lg %lg", &re, &im);</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">//        plan.f_hat[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)] = f_hat[NFSFT_INDEX(k,n,&plan)];</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordflow">for</span> (j=0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">//      fscanf(infile, "%lg %lg", &re, &im);</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">//      plan.f[j] = re + _Complex_I * im;</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = f[j];</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     memset(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0U,plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Comp [...]
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   t0 = getticks();</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="comment">/* precomputation (for NFFT, node-dependent) */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   t1 = getticks();</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   tt_pre = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     nfsft_trafo(&plan);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   t1 = getticks();</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   tt_total = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">#ifndef MEASURE_TIME</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span>  plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">#ifndef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor"></span>  plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   printf(<span class="stringliteral">"%.6e %.6e %6e %.6e %.6e %.6e\n"</span>, tt_pre, plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0], plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASU [...]
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordtype">int</span> m, nfsft_flags, psi_flags;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordtype">int</span> nrepeat;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordtype">int</span> trafo_adjoint, N, M, r;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordtype">double</span> *x;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   C *f_hat, *f;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor"></span>  <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">if</span> (argc != 6)</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   nthreads = atoi(argv[5]);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   fftw_init_threads();</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   omp_set_num_threads(nthreads);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span> (argc != 5)</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   m = atoi(argv[1]);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   nfsft_flags = atoi(argv[2]);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   psi_flags = atoi(argv[3]);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   nrepeat = atoi(argv[4]);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   bench_openmp_readfile(stdin, &trafo_adjoint, &N, &M, &x, &f_hat, &f);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   nfsft_precompute(N,1000.0,0U,0U);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     bench_openmp(trafo_adjoint, N, M, x, f_hat, f, m, nfsft_flags, psi_flags);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsoft_2simple__test_8c_source.html b/doc/api/html/nfsoft_2simple__test_8c_source.html
new file mode 100644
index 0000000..1f86f80
--- /dev/null
+++ b/doc/api/html/nfsoft_2simple__test_8c_source.html
@@ -0,0 +1,225 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d554148c8057b12dc5cb11ef005c62c.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsoft/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/* Include NFFT 3 utilities headers. */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/* Include NFFT3 library header. */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfsoft(<span class="keywordtype">int</span> bw, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> plan_nfsoft; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> plan_ndsoft; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">int</span> k, m; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordtype">double</span> d1, d2, d3; </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordtype">double</span> time, error; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags = NFSOFT_MALLOC_X | NFSOFT_MALLOC_F | NFSOFT_MALLOC_F_HAT; </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   k = 1000; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   m = 5; </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   nfsoft_init_guru(&plan_ndsoft, bw, M, flags | NFSOFT_USE_NDFT</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>       | NFSOFT_USE_DPT, PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>       | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   nfsoft_init_guru(&plan_nfsoft, bw, M, flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">for</span> (j = 0; j < plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     d1 = ((R) rand()) / RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     d2 = 0.5 * ((R) rand()) / RAND_MAX;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     d3 = ((R) rand()) / RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j ] = d1; </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 1] = d2; </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 2] = d3; </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j ] = d1; </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 1] = d2; </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 2] = d3; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordflow">for</span> (j = 0; j < (bw + 1) * (4* (bw +1)*(bw+1)-1)/3;j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     d1=((R)rand())/RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     d2=((R)rand())/RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=d1 + I*d2;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=d1 + I*d2;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">if</span> ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,<span class="stringliteral">"randomly generated  [...]
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,20,<span class="stringliteral">"1st-20th randomly generated SO(3) Fourier coe [...]
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   printf(<span class="stringliteral">"\n---------------------------------------------\n"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   nfsoft_precompute(&plan_nfsoft);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   nfsoft_precompute(&plan_ndsoft);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   t0 = getticks();</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   nfsoft_trafo(&plan_nfsoft);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   t1 = getticks();</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">if</span> (plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a><=20)</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" ti [...]
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,20,<span class="stringliteral">"NFSOFT, 1st-20th function sample"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   t0 = getticks();</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   nfsoft_trafo(&plan_ndsoft);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   t1 = getticks();</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">if</span> (plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a><=20)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" ti [...]
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,20,<span class="stringliteral">"NDSOFT, 1st-20th function sample"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   error= X(error_l_infty_complex)(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, plan_nfsoft.<a class="code" href="structn [...]
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   printf(<span class="stringliteral">"\n The NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n"</span>,bw, M,error);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   printf(<span class="stringliteral">"\n---------------------------------------------\n"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[0]=1.0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[0]=1.0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" titl [...]
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   t0 = getticks();</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   nfsoft_adjoint(&plan_nfsoft);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   t1 = getticks();</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordflow">if</span> ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>      <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,<span class="stringliteral">"SO(3) Fourier co [...]
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>      <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,20,<span class="stringliteral">"adjoint NFSOFT, 1st-20th Fourier coefficie [...]
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   t0 = getticks();</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   nfsoft_adjoint(&plan_ndsoft);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   t1 = getticks();</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">if</span> ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,<span class="stringliteral">"SO(3) Fourier coeff [...]
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,20,<span class="stringliteral">"adjoint NDSOFT, 1st-20th Fourier coefficien [...]
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   error=X(error_l_infty_complex)(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, (bw+1)*( [...]
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   printf(<span class="stringliteral">"\n The adjoint NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n"</span>,bw, M,error);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   printf(<span class="stringliteral">"\n---------------------------------------------\n"</span>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   nfsoft_finalize(&plan_ndsoft);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   nfsoft_finalize(&plan_nfsoft);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordflow">if</span> (argc < 2)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     printf(</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         <span class="stringliteral">"This test programm computes the NFSOFT with maximum polynomial degree N at M input rotations\n"</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     printf(<span class="stringliteral">"Usage: simple_test N M \n"</span>);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     printf(<span class="stringliteral">"e.g.: simple_test 8 64\n"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     exit(0);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   N = atoi(argv[1]);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   M = atoi(argv[2]);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   printf(</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       <span class="stringliteral">"computing an NDSOFT, an NFSOFT, an adjoint NDSOFT, and an adjoint NFSOFT\n\n"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   simple_test_nfsoft(N, M);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="comment">/* Exit the program. */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfsoft_8c_source.html b/doc/api/html/nfsoft_8c_source.html
new file mode 100644
index 0000000..083952b
--- /dev/null
+++ b/doc/api/html/nfsoft_8c_source.html
@@ -0,0 +1,747 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsoft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfsoft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfsoft.c 3919 2012-11-20 13:31:45Z grman $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "<a class="code" href="wigner_8h.html" title="Header file for functions related to Wigner-d/D functions.">wigner.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#define DEFAULT_NFFT_CUTOFF    6</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_THRESHOLD          1000</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keyword">static</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> SO3_fpt_init(<span class="keywordtype">int</span> l, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kappa);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">void</span> nfsoft_init(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   nfsoft_init_advanced(plan, N, M, NFSOFT_MALLOC_X | NFSOFT_MALLOC_F</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>       | NFSOFT_MALLOC_F_HAT);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keywordtype">void</span> nfsoft_init_advanced(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   nfsoft_init_guru(plan, N, M, nfsoft_flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>       | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>       DEFAULT_NFFT_CUTOFF, FPT_THRESHOLD);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">void</span> nfsoft_init_guru(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, <span class="keywordtype">int</span> B, <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfft_flags, <span class="keywordtype">int</span> nfft_cutoff,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordtype">int</span> fpt_kappa)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">int</span> n[3];</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   N[0] = 2* B + 2;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   N[1] = 2* B + 2;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   N[2] = 2* B + 2;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   n[0] = 8* B ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   n[1] = 8* B ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   n[2] = 8* B ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   nfft_init_guru(&plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>, 3, N, M, n, nfft_cutoff, nfft_flags,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       FFTW_ESTIMATE | FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordflow">if</span> ((plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>).nfft_flags & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&(plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a> = B;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   plan-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a> = M;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   plan->fpt_kappa = fpt_kappa;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> = nfsoft_flags;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     plan-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((B + 1) * (4* (B +1)*(B+1)-1)/3*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_X)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     plan-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>*3*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     plan-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>*<span class=" [...]
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(next_power_of_2)(B)+1)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*B+2)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*B+4)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   plan-><a class="code" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsoft_trafo;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   plan-><a class="code" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsoft_adjoint;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   plan-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a> = SO3_fpt_init(plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>, plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the  [...]
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients  with ,  from a linear combination of Chebyshev polynomials  to coefficients  m...">c2e</a>(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *my_plan, <span class="keywordtype">int</span> even)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">int</span> j, N;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   N = 2* (my_plan -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1] = my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e9869 [...]
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[0]=0.0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">for</span> (j=1;j<my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1;j++)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1+j]=0.5* my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c [...]
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1-j]=0.5* my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c [...]
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   C *aux= (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordflow">for</span>(j=1;j<N;j++)</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   aux[j]=my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j];</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   aux[0]=0.;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   aux[N]=0.;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   if (even>0)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[0]=(C) (-1.)/(2.*_Complex_I) * aux[1];</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">for</span> (j=1;j<N;j++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j]=(1./(2.*_Complex_I)*(aux[j+1]-aux[j-1]));</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   free(aux);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   aux = NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keyword">static</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> SO3_fpt_init(<span class="keywordtype">int</span> l, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kappa)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span> = 0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordtype">int</span> N, t, k_start, k_end, k, m;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordtype">int</span> glo = 0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   R *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=- [...]
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       N = 2;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       N = l;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     t = (int) log2(X(next_power_of_2)(N));</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       N = 2;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     t = (int) log2(N);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   alpha = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   beta = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   gamma = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="keywordflow">if</span> (flags & NFSOFT_NO_STABILIZATION)</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keyword">set</span> = fpt_init((2* N + 1) * (2* N + 1), t, 0U | FPT_NO_STABILIZATION);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keyword">set</span> = fpt_init((2* N + 1) * (2* N + 1), t, 0U);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordflow">for</span> (k = -N; k <= N; k++)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       k_end = N;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       SO3_alpha_row(alpha, N, k, m);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       SO3_beta_row(beta, N, k, m);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       SO3_gamma_row(gamma, N, k, m);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       fpt_precompute(<span class="keyword">set</span>, glo, alpha, beta, gamma, k_start, kappa);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       glo++;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   free(alpha);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   free(beta);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   free(gamma);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   alpha = NULL;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   beta = NULL;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   gamma = NULL;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="keyword">static</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> SO3_single_fpt_init(<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kap [...]
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordtype">int</span> N, t, k_start, k_end;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   R *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=- [...]
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span> = 0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       N = 2;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       N = l;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     t = (int) log2(X(next_power_of_2)(N));</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       N = 2;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     t = (int) log2(N);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   alpha = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   beta = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   gamma = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fptflags = 0U </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       | IF(flags & NFSOFT_USE_DPT,FPT_NO_FAST_ALGORITHM,IF(t > 1,FPT_NO_DIRECT_ALGORITHM,0U))</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       | IF(flags & NFSOFT_NO_STABILIZATION,FPT_NO_STABILIZATION,0U);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keyword">set</span> = fpt_init(1, t, fptflags);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   k_end = N;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   SO3_alpha_row(alpha, N, k, m);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   SO3_beta_row(beta, N, k, m);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   SO3_gamma_row(gamma, N, k, m);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="comment">/*{</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">    int rr;</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">    for (rr = 0; rr < N + 2; rr++)</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">      fprintf(stderr, "a[%4d] = %10e b[%4d] = %10e c[%4d] = %10e\n",rr,alpha[rr],rr,beta[rr],rr,gamma[rr]);</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">  }*/</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   fpt_precompute(<span class="keyword">set</span>, 0, alpha, beta, gamma, k_start, kappa);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   free(alpha);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   free(beta);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   free(gamma);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   alpha = NULL;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   beta = NULL;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   gamma = NULL;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="keywordtype">void</span> SO3_fpt(C *coeffs, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   C* x;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   C* y;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="keywordtype">int</span> trafo_nr; </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="keywordtype">int</span> k_start, k_end, j;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordtype">int</span> function_values = 0;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     N = l;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       N = 2;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       N = 2;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   k_end = N;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   trafo_nr = (N + k) * (2* N + 1) + (m + N);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   x = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   <span class="keywordflow">for</span> (j = 0; j <= k_end; j++)</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>    x[j] = K(0.0);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordflow">for</span> (j = 0; j <= l - k_start; j++)</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     x[j + k_start] = coeffs[j];</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="keywordflow">for</span> (j = l - k_start + 1; j <= k_end - k_start; j++)</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     x[j + k_start] = K(0.0);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   y = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   { </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     fpt_trafo_direct(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   { </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     fpt_trafo(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>         | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   }</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordflow">for</span> (j = 0; j <= l; j++)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     coeffs[j] = y[j];</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   free(x);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   free(y);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   x = NULL;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   y = NULL;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="keywordtype">void</span> SO3_fpt_transposed(C *coeffs, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="keywordtype">int</span> N, k_start, k_end, j;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="keywordtype">int</span> trafo_nr; </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordtype">int</span> function_values = 0;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   C* x;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   C* y;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     N = l;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       N = 2;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   {</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       N = 2;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   k_end = N;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   trafo_nr = (N + k) * (2* N + 1) + (m + N);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   y = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   x = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   <span class="keywordflow">for</span> (j = 0; j <= l; j++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     y[j] = coeffs[j];</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="keywordflow">for</span> (j = l + 1; j <= k_end; j++)</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     y[j] = K(0.0);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     fpt_transposed_direct(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     fpt_transposed(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   <span class="keywordflow">for</span> (j = 0; j <= l; j++)</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     coeffs[j] = x[j];</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   free(x);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   free(y);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   x = NULL;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   y = NULL;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="keywordtype">void</span> nfsoft_precompute(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan3D)</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordtype">int</span> N = plan3D-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   <span class="keywordtype">int</span> M = plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3* j ] = plan3D-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j [...]
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3* j + 1] = plan3D-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3 [...]
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3* j + 2] = plan3D-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3 [...]
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="keywordflow">for</span> (j = 0; j < 3* plan3D -><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_n [...]
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   }</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>).nfft_flags & FG_PSI)</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     nfft_precompute_one_psi(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>).nfft_flags & PRE_PSI)</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   {</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     nfft_precompute_one_psi(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> }</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="keywordtype">void</span> nfsoft_trafo(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan3D)</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   <span class="keywordtype">int</span> i, j, m, k, max, glo1, glo2;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   i = 0;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   glo1 = 0;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   glo2 = 0;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordtype">int</span> N = plan3D-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   <span class="keywordtype">int</span> M = plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   {</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>       plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[0];</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   }</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   <span class="keywordflow">for</span> (j = 0; j < plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = 0.0;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   for (k = -N; k <= N; k++)</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>       max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>       <span class="keywordflow">for</span> (j = 0; j <= N - max; j++)</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       {</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>         plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1];</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_NORMALIZED))</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>           plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (1. / (2. * <a class [...]
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>               * SQRT(0.5 * (2. * (max + j) + 1.));</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         }</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_REPRESENT))</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>           <span class="keywordflow">if</span> ((k < 0) && (k % 2))</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>           {</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>             plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>           }</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>           <span class="keywordflow">if</span> ((m < 0) && (m % 2))</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>             plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>           <span class="keywordflow">if</span> ((m + k) % 2)</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>         glo1++;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>       <span class="keywordflow">for</span> (j = N - max + 1; j < X(next_power_of_2)(N) + 1; j++)</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = 0.0;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>       <span class="comment">//fprintf(stdout,"\n k= %d, m= %d \n",k,m);</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>       SO3_fpt(plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>, plan3D-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a>, N, k, m, plan3D-><a class="code" href="structnfsoft__plan__.htm [...]
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>       <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients  with ,  from a linear combination of Chebyshev polynomials  to coefficients  m...">c2e</a>(plan3D, ABS((k + m) % 2));</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>       <span class="keywordflow">for</span> (i = 1; i <= 2* plan3D -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a> + 2; i++)</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>       {</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSOFT_INDEX(k, m, i - N - 1, N) - 1]</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>             = plan3D-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[i - 1];</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         <span class="comment">//fprintf(stdout,"%f \t", plan3D->nfft_plan.f_hat[NFSOFT_INDEX(k,m,i-N-1,N)-1]);</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>         <span class="comment">//fprintf(stdout,"another index: %d for k=%d,m=%d,l=%d,N=%d \n", NFSOFT_INDEX(k,m,i-N-1,N)-1,k,m,i-N-1,N);</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       }</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     }</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   <span class="keywordflow">if</span> (plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_USE_NDFT)</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   {</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     nfft_trafo_direct(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   }</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   {</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   }</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   <span class="keywordflow">for</span> (j = 0; j < plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="keyword">static</span> <span class="keywordtype">void</span> e2c(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *my_plan, <span class="keywordtype">int</span> even)</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> {</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   N = 2* (my_plan -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   <span class="comment">//nfft_vpr_complex(my_plan->cheby,N+1,"chebychev");</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       <span class="keywordflow">if</span> (even>0)</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         <span class="comment">//my_plan->aux[N-1]= -1/(2*I)* my_plan->cheby[N-2];</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>         my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[0]= 1/(2*_Complex_I)*my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[1];</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         <span class="keywordflow">for</span>(j=1;j<N-1;j++)</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         {</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>           my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[j]=1/(2*_Complex_I)*(my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j+1]-my_plan-><a class="code" href=" [...]
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[N-1]=1/(2*_Complex_I)*(-my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j-1]);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j]= my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[j];</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> }</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> }</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[0]=my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfso [...]
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="keywordflow">for</span>(j=1;j<=my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j]=0.5*(my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="struc [...]
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> }</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="comment">//nfft_vpr_complex(my_plan->wig_coeffs,my_plan->N_total,"chebychev ");</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="keywordtype">void</span> nfsoft_adjoint(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan3D)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   <span class="keywordtype">int</span> i, j, m, k, max, glo1, glo2;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   i = 0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   glo1 = 0;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   glo2 = 0;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   <span class="keywordtype">int</span> N = plan3D-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="keywordtype">int</span> M = plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="comment">//nothing much to be done for polynomial degree 0</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[0]=0;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>       plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[0] += plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   }</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   {</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of sampl [...]
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>   }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   <span class="keywordflow">if</span> (plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_USE_NDFT)</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     nfft_adjoint_direct(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   }</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     nfft_adjoint(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   }</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   <span class="comment">//nfft_vpr_complex(plan3D->nfft_plan.f_hat,plan3D->nfft_plan.N_total,"all results");</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   glo1 = 0;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   <span class="keywordflow">for</span> (k = -N; k <= N; k++)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     {</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>       max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>       <span class="keywordflow">for</span> (i = 1; i < 2* plan3D -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a> + 3; i++)</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>       {</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>         plan3D-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[i - 1] = plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" titl [...]
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>             - 1, N) - 1];</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>       }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>       <span class="comment">//fprintf(stdout,"k=%d,m=%d \n",k,m);</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>       <span class="comment">//nfft_vpr_complex(plan3D->cheby,2*plan3D->N_total+2,"euler");</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       e2c(plan3D, ABS((k + m) % 2));</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>       <span class="comment">//nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"chebys");</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       SO3_fpt_transposed(plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>, plan3D-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a>, N, k, m,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>           plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       <span class="comment">//nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"wigners");</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>       <span class="comment">//  SO3_fpt_transposed(plan3D->wig_coeffs,N,k,m,plan3D->flags,plan3D->fpt_kappa);</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       <span class="keywordflow">for</span> (j = max; j <= N; j++)</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>       {</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_REPRESENT))</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         {</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>           <span class="keywordflow">if</span> ((k < 0) && (k % 2))</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>           {</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>             plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = -plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j];</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>           }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>           <span class="keywordflow">if</span> ((m < 0) && (m % 2))</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = -plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j];</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>           <span class="keywordflow">if</span> ((m + k) % 2)</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>             plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j];</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>         <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_NORMALIZED))</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>           plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1] = plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1] * (1 / (2. * <a clas [...]
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>               0.5 * (2. * (j) + 1.));</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         }</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         glo1++;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>       }</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="keywordtype">void</span> nfsoft_finalize(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan)</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> {</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   <span class="comment">/* Finalise the nfft plan. */</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   nfft_finalize(&plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   free(plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   free(plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   free(plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   fpt_finalize(plan-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a>);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   plan-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a> = NULL;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   {</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="comment">//fprintf(stderr,"deallocating f_hat\n");</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     free(plan-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   <span class="comment">/* De-allocate memory for samples, if neccesary. */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F)</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   {</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="comment">//fprintf(stderr,"deallocating f\n");</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     free(plan-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   }</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   <span class="comment">/* De-allocate memory for nodes, if neccesary. */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_X)</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="comment">//fprintf(stderr,"deallocating x\n");</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     free(plan-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   }</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="keywordtype">int</span> posN(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> B)</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="keywordtype">int</span> pos;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>   <span class="keywordflow">if</span> (n > -B)</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     pos = posN(n - 1, m, B) + B + 1 - MAX(ABS(m), ABS(n - 1));</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     pos = 0;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   <span class="comment">//(n > -B? pos=posN(n-1,m,B)+B+1-MAX(ABS(m),ABS(n-1)): pos= 0)</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   <span class="keywordflow">return</span> pos;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> }</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfst_2simple__test_8c_source.html b/doc/api/html/nfst_2simple__test_8c_source.html
new file mode 100644
index 0000000..cf76534
--- /dev/null
+++ b/doc/api/html/nfst_2simple__test_8c_source.html
@@ -0,0 +1,123 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html">nfst</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfst/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfst_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <a class="code" href="structnfst__plan.html">nfst_plan</a> p;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">int</span> N=14;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">int</span> M=19;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   nfst_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordflow">for</span>(j = 0; j < p.<a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>*p.<a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     p.<a class="code" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8" title="nodes (in time/spatial domain)">x</a>[j] = 0.5 * ((<span class="keywordtype">double</span>)rand()) / RAND_MAX;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordflow">if</span>( p.<a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     nfst_precompute_psi( &p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">for</span>(k = 0; k < p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>[k] = (<span class="keywordtype">double</span>)rand() / RAND_MAX;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of [...]
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   nfst_trafo_direct(&p);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <a class="code" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416" title="user routines">nfst_trafo</a>(&p);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   nfst_adjoint_direct(&p);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of [...]
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   nfst_adjoint(&p);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of [...]
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   nfst_finalize(&p);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   printf(<span class="stringliteral">"computing one dimensional ndst, nfst and adjoint ndst, nfst\n\n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   simple_test_nfst_1d();</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   printf(<span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nfst_8c_source.html b/doc/api/html/nfst_8c_source.html
new file mode 100644
index 0000000..7b8b8c2
--- /dev/null
+++ b/doc/api/html/nfst_8c_source.html
@@ -0,0 +1,1031 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfst.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d46f6e04c6f21c2dce6558b4c13d80de.html">nfst</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nfst.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nfst.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#define NFST_DEFAULT_FLAGS   PRE_PHI_HUT|\</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">                             PRE_PSI|\</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">                             MALLOC_X|\</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">                             MALLOC_F_HAT|\</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">                             MALLOC_F|\</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">                             FFTW_INIT|\</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">                             FFT_OUT_OF_PLACE</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#define FFTW_DEFAULT_FLAGS   FFTW_ESTIMATE|\</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">                             FFTW_DESTROY_INPUT</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#define NFST_SUMMANDS ( 2 * ths->m + 2)</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define NODE(p,r) ( ths->x[(p) * ths->d + (r)])</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#define MACRO_ndst_init_result_trafo      \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">  memset( f, 0, ths->M_total * sizeof( double));</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndst_init_result_adjoint \</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">  memset( f_hat, 0, ths->N_total * sizeof( double));</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#define MACRO_nfst_D_init_result_A        \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">  memset(g_hat, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfst_D_init_result_T        \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">  memset(f_hat, 0, ths->N_total * sizeof( double));</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#define MACRO_nfst_B_init_result_A        \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">  memset(f, 0,     ths->M_total * sizeof( double));</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfst_B_init_result_T        \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">  memset(g, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#define NFST_PRE_WINFUN( d)  ths->N[d] = 2 * ths->N[d];         \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">                             ths->n[d] = nfst_fftw_2N( ths->n[d]);</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#define NFST_POST_WINFUN( d) ths->N[d] = (LRINT(0.5 * ths->N[d]));   \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">                             ths->n[d] = nfst_fftw_2N_rev( ths->n[d]);</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#define NFST_WINDOW_HELP_INIT  WINDOW_HELP_INIT</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keywordtype">double</span> nfst_phi_hut( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   NFST_PRE_WINFUN( d);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordtype">double</span> phi_hut_tmp = PHI_HUT( k, d);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   NFST_POST_WINFUN( d);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordflow">return</span> phi_hut_tmp;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keywordtype">double</span> nfst_phi( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">double</span> x, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   NFST_PRE_WINFUN( d);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">double</span> phi_tmp = PHI( x, d);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   NFST_POST_WINFUN( d);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordflow">return</span> phi_tmp;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keywordtype">int</span> nfst_fftw_2N( <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordflow">return</span> 2 * ( n + 1);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keywordtype">int</span> nfst_fftw_2N_rev( <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   div_t n_div;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   n_div = div(n, 2);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordflow">return</span> n_div.quot - 1;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor">#define MACRO_with_sin_vec     sin_vec[t][ka[t]]</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_without_sin_vec  sin( 2.0 * PI * (ka[t]+1) * NODE(j,t))</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">#define MACRO_with_PRE_PHI_HUT     ths->c_phi_inv[t][kg[t]];</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PHI_HUT_INV  (1.0 / (nfst_phi_hut( ths, kg[t]+1, t)))</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">#define MACRO_with_PRE_PSI     ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]];</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PSI      \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">  nfst_phi( ths, NODE(j,t) - (( double)(lc[t] + lb[t])) / nfst_fftw_2N( ths->n[t]), t)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">#define MACRO_ndst_malloc__sin_vec                                              \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">  double **sin_vec;                                                             \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">  sin_vec = (double**)nfft_malloc( ths->d * sizeof( double*));                       \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">    sin_vec[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double));          \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">#define MACRO_ndst_free__sin_vec                                                \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor">  </span><span class="comment">/* free allocated memory */</span><span class="preprocessor">                                                   \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">  nfft_free( sin_vec[t]);                                                          \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">  nfft_free( sin_vec);                                                               \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">#define MACRO_ndst_init__sin_vec                                                \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">    cos_x[t] = cos( 2.0 * PI * NODE(j,t));                                      \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">    sin_vec[t][0] = sin( 2.0 * PI * NODE(j,t));                                 \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor">    sin_vec[t][1] = sin( 4.0 * PI * NODE(j,t));                                 \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">    for( k = 2; k < ths->N[t] - 1; k++)                                         \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">      sin_vec[t][k] = 2.0 * cos_x[t] * sin_vec[t][k-1]                          \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">                      - sin_vec[t][k-2];                                        \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">#define MACRO_ndst_init__k__sin_k( which_one)                                   \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">  sin_k[0] = 1.0;                                                               \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor">    ka[t] = 0;                                                                  \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor">    sin_k[t+1] = sin_k[t] * MACRO_ ##which_one;                                 \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor">#define MACRO_ndst_count__k__sin_k( which_one)                                  \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor">  ka[ths->d-1]++;                                                               \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor">  i = ths->d - 1;                                                               \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">  while( ( ka[i] == ths->N[i] - 1) && ( i > 0))                                 \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor">    ka[i - 1]++;                                                                \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">    ka[i] = 0;                                                                  \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor">    i--;                                                                        \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor">  for( t = i; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor">    sin_k[t+1] = sin_k[t] * MACRO_ ##which_one;                                 \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">#define MACRO_ndst_compute__trafo                                               \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor">  f[j] += f_hat[k] * sin_k[ths->d];                                             \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">#define MACRO_ndst_compute__adjoint                                             \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor">  f_hat[k] += f[j] * sin_k[ths->d];                                             \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">/* slow (trafo) transform */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">#define MACRO_ndst( which_one)                                                  \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">  void nfst_ ## which_one ## _direct ( nfst_plan *ths)                                     \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">    int j, k, t, i;                                                             \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor">    int ka[ths->d];                                                             \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor">    double sin_k[ths->d+1];                                                     \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor">    double cos_x[ths->d];                                                       \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor">    double *f     = ths->f;                                                     \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">    double *f_hat = ths->f_hat;                                                 \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="preprocessor">    MACRO_ndst_init_result_ ## which_one;                                       \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor">    if( ths->d == 1)                                                            \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor">      for( j = 0; j < ths->M_total; j++)                                        \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="preprocessor">        for( k = 0; k < ths->N_total; k++)                                      \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">        {                                                                       \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor">          sin_k[ths->d] = sin( 2.0 * PI * (k+1) * NODE(j,0));                   \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">          MACRO_ndst_compute__ ## which_one;                                    \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor">        }                                                                       \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">    else                                                                        \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">      if( 1 == 0) </span><span class="comment">/*FIXME: remove slow slow ... */</span><span class="preprocessor">                              \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">        </span><span class="comment">/* slow ndst */</span><span class="preprocessor">                                                         \</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor">        for( j = 0; j < ths->M_total; j++)                                      \</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="preprocessor">        {                                                                       \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="preprocessor">          MACRO_ndst_init__k__sin_k(without_sin_vec);                           \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="preprocessor">          for( k = 0; k < ths->N_total; k++)                                    \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor">          {                                                                     \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor">            MACRO_ndst_compute__ ## which_one;                                  \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor">            MACRO_ndst_count__k__sin_k(without_sin_vec);                        \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor">          }                                                                     \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="preprocessor">        }                                                                       \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor">      else                                                                      \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor">      {                                                                         \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor">        </span><span class="comment">/* fast nfst_trafo_direct */</span><span class="preprocessor">                                                   \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor">        MACRO_ndst_malloc__sin_vec;                                             \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">        for( j = 0; j < ths->M_total; j++)                                      \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">        {                                                                       \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">          MACRO_ndst_init__sin_vec;                                             \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">          MACRO_ndst_init__k__sin_k(with_sin_vec);                              \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">          for( k = 0; k < ths->N_total; k++)                                    \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor">          {                                                                     \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor">            MACRO_ndst_compute__ ## which_one;                                  \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="preprocessor">            MACRO_ndst_count__k__sin_k(with_sin_vec);                           \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="preprocessor">          }                                                                     \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="preprocessor">        }                                                                       \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="preprocessor">        MACRO_ndst_free__sin_vec;                                               \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="preprocessor">      }                                                                         \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="preprocessor">  } </span><span class="comment">/* ndst_{trafo, adjoint} */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> MACRO_ndst(trafo)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> MACRO_ndst(adjoint)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="preprocessor">#define MACRO_nfst__lower_boundary( j,act_dim)                                  \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="preprocessor">  lb[(act_dim)] =                                                               \</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="preprocessor">    (LRINT(NODE((j),(act_dim)) * nfst_fftw_2N( ths->n[(act_dim)]))) - ths->m;   \</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor">#define MACRO_nfst_D_compute_A                                                  \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor">  g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d];                   \</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor">#define MACRO_nfst_D_compute_T                                                  \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="preprocessor">  f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d];                   \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor">#define MACRO_init__kg                                                          \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="preprocessor">    kg[t] = 0;                                                                  \</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="preprocessor">  i = 0;                                                                        \</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="preprocessor">#define MACRO_count__kg                                                         \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="preprocessor">  kg[ths->d - 1]++;                                                             \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="preprocessor">  i = ths->d - 1;                                                               \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="preprocessor">  while( ( kg[i] == ths->N[i] - 1) && ( i > 0))                                 \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor">    kg[i - 1]++;                                                                \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor">    kg[i] = 0;                                                                  \</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor">    i--;                                                                        \</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="preprocessor">#define MACRO_update__c_phi_inv_k__lg_plain( which_one, which_phi)              \</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="preprocessor">  for( t = i; t < ths->d; t++) {                                                \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="preprocessor">    MACRO__c_phi_inv_k( which_phi);                                             \</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="preprocessor">    kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t];                            \</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="preprocessor">#define MACRO__c_phi_inv_k( which_phi)                                          \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="preprocessor">  c_phi_inv_k[t+1] = 0.5 * c_phi_inv_k[t] * MACRO_ ## which_phi;                \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="preprocessor">#define MACRO_nfst_D(which_one)                                                 \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="preprocessor">static inline void nfst_D_ ## which_one (nfst_plan *ths)                               \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="preprocessor">  int k_L;                                    \</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="preprocessor">  int i, t;                                                                     \</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="preprocessor">  int kg[ths->d];                             \</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="preprocessor">  double c_phi_inv_k[ths->d+1];               \</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="preprocessor">  int kg_plain[ths->d+1];                     \</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="preprocessor">  double *g_hat, *f_hat;                      \</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="preprocessor">  g_hat = ths->g_hat;                                                           \</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="preprocessor">  f_hat = ths->f_hat;                                                           \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="preprocessor">  MACRO_nfst_D_init_result_ ## which_one                                        \</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor">  c_phi_inv_k[0] = 1;                                                           \</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor">  kg_plain[0]    = 0;                                                           \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="preprocessor">  MACRO_init__kg;                                                               \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="preprocessor">  if( ths->nfst_flags & PRE_PHI_HUT)                                            \</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="preprocessor">    for( k_L = 0; k_L < ths->N_total; k_L++)                                    \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="preprocessor">    {                                                                           \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor">      MACRO_update__c_phi_inv_k__lg_plain( which_one, with_PRE_PHI_HUT);        \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="preprocessor">      MACRO_nfst_D_compute_ ## which_one;                                       \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor">      MACRO_count__kg;                                                          \</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="preprocessor">    } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor">  else                                                                          \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="preprocessor">    for( k_L = 0; k_L < ths->N_total; k_L++)                                    \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor">    {                                                                           \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="preprocessor">      MACRO_update__c_phi_inv_k__lg_plain( which_one, compute_PHI_HUT_INV);     \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="preprocessor">      MACRO_nfst_D_compute_ ## which_one;                                       \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="preprocessor">      MACRO_count__kg                                                           \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="preprocessor">    } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="preprocessor">} </span><span class="comment">/* nfst_D */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> MACRO_nfst_D(A)</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> MACRO_nfst_D(T)</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor">#define MACRO_nfst_B_PRE_FULL_PSI_compute_A                                     \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="preprocessor">  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                              \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor">#define MACRO_nfst_B_PRE_FULL_PSI_compute_T                                     \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor">  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                              \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor">#define MACRO_nfst_B_compute_A                                                  \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="preprocessor">  (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]];                             \</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="preprocessor">#define MACRO_nfst_B_compute_T                                                  \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor">  g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj);                             \</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="preprocessor">#define MACRO_compute_lg_offset__count_lg( i0)                                  \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="preprocessor">  </span><span class="comment">/* determine index in g-array corresponding to lb[(i0)] */</span><span class="preprocessor">                    \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="preprocessor">  if( lb[(i0)] < 0)                                                             \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="preprocessor">    lg_offset[(i0)] =                                                           \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="preprocessor">      (lb[(i0)] % nfst_fftw_2N( ths->n[(i0)])) + nfst_fftw_2N( ths->n[(i0)]);   \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="preprocessor">  else                                                                          \</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="preprocessor">    lg_offset[(i0)] = lb[(i0)] % nfst_fftw_2N( ths->n[(i0)]);                   \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor">  if( lg_offset[(i0)] > ths->n[(i0)]+1)                                         \</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor">      lg_offset[(i0)] = -( nfst_fftw_2N( ths->n[(i0)]) - lg_offset[(i0)]);      \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="preprocessor">#define MACRO_set__lg__to__lg_offset                                            \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor">  if( lg_offset[i] <= 0)                                                        \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="preprocessor">    lg[i] = -lg_offset[i];                                                      \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="preprocessor">    count_lg[i] = -1;                                                           \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="preprocessor">  else                                                                          \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor">    lg[i] = +lg_offset[i];                                                      \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="preprocessor">    count_lg[i] = +1;                                                           \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="preprocessor">#define MACRO_count__lg(dim)                                                    \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="preprocessor">  </span><span class="comment">/* turn around when we hit one of the boundaries */</span><span class="preprocessor">                           \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="preprocessor">  if( ((lg[(dim)] == 0) || (lg[(dim)] == (ths->n[(dim)] + 1))) )                \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="preprocessor">    count_lg[(dim)] *= -1;                                                      \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="preprocessor">  lg[(dim)] += count_lg[(dim)];                                                 \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="preprocessor">#define MACRO_init_lb_lg_lc_phi_tilde_lg_plain( which_psi)                      \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor">  for( i = 0; i < ths->d; i++)                                                  \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor">    MACRO_nfst__lower_boundary( j, i);                                          \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="preprocessor">    MACRO_compute_lg_offset__count_lg( i);                                      \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="preprocessor">    MACRO_set__lg__to__lg_offset;                                               \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="preprocessor">    </span><span class="comment">/* counter for lg */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="preprocessor">    lc[i] = 0;                                                                  \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="preprocessor">  for( t = 0; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="preprocessor">    if( lg[t] == 0)                                                             \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="preprocessor">    {                                                                           \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="preprocessor">      lg_plain[t+1]  = lg_plain[t] * ths->n[t];                                 \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor">      phi_tilde[t+1] = 0.0;                                                     \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor">    }                                                                           \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor">    else                                                                        \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor">      if( lg[t] == ths->n[t]+1)                                                 \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="preprocessor">      {                                                                         \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="preprocessor">        lg_plain[t+1]  = lg_plain[t] * ths->n[t] + ths->n[t]-1;                 \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="preprocessor">        phi_tilde[t+1] = 0.0;                                                   \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="preprocessor">      }                                                                         \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="preprocessor">      else                                                                      \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="preprocessor">      {                                                                         \</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="preprocessor">        MACRO__phi_tilde( which_psi);                                           \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="preprocessor">        lg_plain[t+1]  = lg_plain[t] * ths->n[t] + lg[t]-1;                     \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor">      }                                                                         \</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="preprocessor">  i = 0;                                                                        \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="preprocessor">#define MACRO_count__lg_lc                                                      \</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="preprocessor">  MACRO_count__lg( ths->d-1);                                                   \</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor">  lc[ths->d - 1]++;                                                             \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="preprocessor">  i = ths->d - 1;                                                               \</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="preprocessor">  while( (lc[i] == NFST_SUMMANDS) && (i > 0))                                   \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="preprocessor">    lc[i - 1]++;                                                                \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="preprocessor">    lc[i] = 0;                                                                  \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="preprocessor">    </span><span class="comment">/* ansonsten lg[i-1] verschieben */</span><span class="preprocessor">                                         \</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="preprocessor">    MACRO_count__lg( i - 1);                                                    \</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="preprocessor">    </span><span class="comment">/* lg[i] = anfangswert */</span><span class="preprocessor">                                                   \</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="preprocessor">    MACRO_set__lg__to__lg_offset;                                               \</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="preprocessor">    i--;                                                                        \</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="preprocessor">#define MACRO_update__phi_tilde__lg_plain( which_psi)                           \</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="preprocessor">  for( t = i; t < ths->d; t++)                                                  \</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="preprocessor">  {                                                                             \</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="preprocessor">    if( (lg[t] != 0) && (lg[t] != ths->n[t]+1))                                 \</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="preprocessor">    {                                                                           \</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor">      MACRO__phi_tilde( which_psi);                                             \</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="preprocessor">      lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1;                        \</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="preprocessor">    }                                                                           \</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="preprocessor">    else                                                                        \</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="preprocessor">      phi_tilde[t+1] = 0.0;                                                     \</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="preprocessor">  }                                                                             \</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="preprocessor">#define MACRO__phi_tilde( which_psi)                                            \</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="preprocessor">{                                                                               \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="preprocessor">  phi_tilde[t+1] = (double)count_lg[t] * phi_tilde[t] * MACRO_ ## which_psi;    \</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="preprocessor">#define MACRO_nfst_B( which_one)                                                \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="preprocessor">  static inline void nfst_B_ ## which_one ( nfst_plan *ths)                            \</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="preprocessor">  { </span><span class="comment">/* MACRO_nfst_B */</span><span class="preprocessor">                                                          \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="preprocessor">    int lb[ths->d];                       \</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="preprocessor">    int j, t, i;                          \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="preprocessor">    int lprod, l_L, ix;                   \</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="preprocessor">    int lc[ths->d];                       \</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <span class="preprocessor">    int lg[ths->d];                       \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="preprocessor">    int lg_offset[ths->d];                \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="preprocessor">    int count_lg[ths->d];                 \</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="preprocessor">    int lg_plain[ths->d+1];               \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="preprocessor">    double *f, *g;                        \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="preprocessor">    double phi_tilde[ths->d+1];           \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="preprocessor">    double *fj;                           \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="preprocessor">    f = ths->f; g = ths->g;                                                     \</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="preprocessor">    MACRO_nfst_B_init_result_ ## which_one                                      \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> <span class="preprocessor">    </span><span class="comment">/* both flags are set */</span><span class="preprocessor">                                                    \</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="preprocessor">    if( (ths->nfst_flags & PRE_PSI) && (ths->nfst_flags & PRE_FULL_PSI))        \</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="preprocessor">    {                                                                           \</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">      for( ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)           \</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor">        for( l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++)                   \</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="preprocessor">        {                                                                       \</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="preprocessor">          MACRO_nfst_B_PRE_FULL_PSI_compute_ ## which_one;                      \</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="preprocessor">        }                                                                       \</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="preprocessor">    }                                                                           \</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="preprocessor">    else                                                                        \</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="preprocessor">    {                                                                           \</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="preprocessor">      phi_tilde[0] = 1;                                                         \</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="preprocessor">      lg_plain[0]  = 0;                                                         \</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="preprocessor">      for( t = 0, lprod = 1; t < ths->d; t++)                                   \</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="preprocessor">        lprod *= NFST_SUMMANDS;                                                 \</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="preprocessor">      </span><span class="comment">/* PRE_PSI flag is set */</span><span class="preprocessor">                                                 \</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="preprocessor">      if( ths->nfst_flags & PRE_PSI)                                            \</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="preprocessor">      {                                                                         \</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> <span class="preprocessor">        for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)                 \</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor">        {                                                                       \</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor">          MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);                \</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="preprocessor">          for( l_L = 0; l_L < lprod; l_L++)                                     \</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="preprocessor">          {                                                                     \</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="preprocessor">            MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);                   \</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="preprocessor">            MACRO_nfst_B_compute_ ## which_one;                                 \</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="preprocessor">            MACRO_count__lg_lc;                                                 \</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="preprocessor">          } </span><span class="comment">/* for( l_L) */</span><span class="preprocessor">                                                     \</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="preprocessor">        } </span><span class="comment">/* for( j) */</span><span class="preprocessor">                                                         \</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="preprocessor">      } </span><span class="comment">/* if( PRE_PSI) */</span><span class="preprocessor">                                                      \</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="preprocessor">      </span><span class="comment">/* no PSI flag is set */</span><span class="preprocessor">                                                  \</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="preprocessor">      else                                                                      \</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="preprocessor">      {                                                                         \</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor">        for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)                 \</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor">        {                                                                       \</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="preprocessor">          MACRO_init_lb_lg_lc_phi_tilde_lg_plain( compute_PSI);                 \</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="preprocessor">          for( l_L = 0; l_L < lprod; l_L++)                                     \</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> <span class="preprocessor">          {                                                                     \</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="preprocessor">            MACRO_update__phi_tilde__lg_plain( compute_PSI);                    \</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="preprocessor">            MACRO_nfst_B_compute_ ## which_one;                                 \</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> <span class="preprocessor">            MACRO_count__lg_lc;                                                 \</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> <span class="preprocessor">                                                                                \</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="preprocessor">          } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                      \</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> <span class="preprocessor">        } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                          \</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="preprocessor">      } </span><span class="comment">/* else(PRE_PSI) */</span><span class="preprocessor">                                                     \</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="preprocessor">    }</span><span class="comment">/* else( PRE_PRE && FULL_PRE_PSI) */</span><span class="preprocessor">                                       \</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> <span class="preprocessor">} </span><span class="comment">/* nfst_B */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> MACRO_nfst_B(A)</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> MACRO_nfst_B(T)</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"><a class="code" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">  647</a></span> <span class="keywordtype">void</span> nfst_trafo( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   ths->g_hat = ths->g1;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   ths->g     = ths->g2;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   TIC(0)</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   nfst_D_A( ths);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>   TOC(0)</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   TIC(1)</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   fftw_execute( ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   TOC(1)</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   TIC(2)</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   nfst_B_A( ths);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   TOC(2)</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> } <span class="comment">/* nfst_trafo */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="keywordtype">void</span> nfst_adjoint( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> {</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   ths->g_hat = ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a>;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   ths->g     = ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   TIC(2)</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   nfst_B_T( ths);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   TOC(2)</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   TIC(1)</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   fftw_execute( ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   TOC(1)</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   TIC(0)</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   nfst_D_T( ths);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   TOC(0)</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> } <span class="comment">/* nfst_adjoint */</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="keywordtype">void</span> nfst_precompute_phi_hut( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> {</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   <span class="keywordtype">int</span> kg[ths->d];                      </div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   <span class="keywordtype">int</span> t;                               </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   ths->c_phi_inv = (<span class="keywordtype">double</span>**)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths->d * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   <span class="keywordflow">for</span>( t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   {</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     ths->c_phi_inv[t] = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ( ths->N[t] - 1) * <span class="keyword">sizeof</span>( double));</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordflow">for</span>( kg[t] = 0; kg[t] < ths->N[t] - 1; kg[t]++)</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>       ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>   }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> } <span class="comment">/* nfst_phi_hut */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="keywordtype">void</span> nfst_precompute_psi( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>   <span class="keywordtype">int</span> lc[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];                       </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   <span class="keywordtype">int</span> lb[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];                       </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   {</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     <span class="keywordflow">for</span>(j = 0; j < ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>       MACRO_nfst__lower_boundary( j, t);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>       <span class="keywordflow">for</span>( lc[t] = 0; lc[t] < NFST_SUMMANDS; lc[t]++)</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>[(j * ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> + t) * NFST_SUMMANDS + lc[t]] = MACRO_compute_PSI;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>   }  <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>   <span class="comment">/* full precomputation of psi */</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>   <span class="keywordflow">if</span> ( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     <a class="code" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585" title="more memory usage, a bit faster">nfst_full_psi</a>( ths, ths->nfst_full_psi_eps);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> } <span class="comment">/* nfst_precompute_psi */</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">  788</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585" title="more memory usage, a bit faster">nfst_full_psi</a>(<a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">double</span> eps)</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> {</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">int</span> t, i;                             </div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>   <span class="keywordtype">int</span> l_L;                              </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordtype">int</span> lc[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];                       </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>   <span class="keywordtype">int</span> lg_plain[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>+1];               </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="keywordtype">int</span> count_lg[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   <span class="keywordtype">int</span> lg_offset[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   <span class="keywordtype">int</span> lg[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   <span class="keywordtype">int</span> lprod;                            </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="keywordtype">int</span> lb[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];                       </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   <span class="keywordtype">double</span> phi_tilde[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>+1];</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="keywordtype">int</span> *index_g, *index_f;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>   <span class="keywordtype">double</span> *new_psi;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   <span class="keywordtype">int</span> ix, ix_old, size_psi;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   phi_tilde[0] = 1.0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   lg_plain[0]  =   0;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     size_psi = ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     index_f  =    (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>  * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     index_g  =    (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     new_psi  = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     <span class="keywordflow">for</span>( t = 0,lprod = 1; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     {</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>       lprod *= NFST_SUMMANDS;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>       eps *= PHI( 0, t);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordflow">for</span>( ix = 0, ix_old = 0, j = 0; j < ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>       MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>       <span class="keywordflow">for</span>( l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>       {</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>         MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         <span class="keywordflow">if</span>( fabs(phi_tilde[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>]) > eps)</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>         {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>           index_g[ix] =  lg_plain[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>           new_psi[ix] = phi_tilde[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> </div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>           ix++;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>           <span class="keywordflow">if</span>( ix == size_psi)</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>           {</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>             size_psi += ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>             index_g   =    (<span class="keywordtype">int</span>*)realloc( index_g, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>             new_psi   = (<span class="keywordtype">double</span>*)realloc( new_psi, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>           }</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>         }</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>         MACRO_count__lg_lc;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>       } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>       index_f[j] = ix - ix_old;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>       ix_old     = ix;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     size_psi      = ix;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     ths-><a class="code" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad" title="only for thin B">size_psi</a> = size_psi;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     index_g       = (<span class="keywordtype">int</span>*)realloc( index_g, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     new_psi       = (<span class="keywordtype">double</span>*)realloc( new_psi, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>         = new_psi;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     ths-><a class="code" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811" title="only for thin B">psi_index_g</a> = index_g;</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     ths-><a class="code" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c" title="only for thin B">psi_index_f</a> = index_f;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> } <span class="comment">/* nfst_full_psi */</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="keywordtype">void</span> nfst_init_help( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> {</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   ths-><a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of Fourier coefficients.">N_total</a> = <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>( ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>, 1, ths-><a class= [...]
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>   ths-><a class="code" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1" title="oversampling-factor">sigma</a>   = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span [...]
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> </div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   <span class="keywordflow">for</span>( t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     <span class="comment">/* FIXME: n/N or (n+1)/N */</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     ths-><a class="code" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1" title="oversampling-factor">sigma</a>[t] = ((<span class="keywordtype">double</span>)ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>[t] + 1) / ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[ [...]
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   <span class="comment">/* assign r2r transform kinds for each dimension */</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   ths->r2r_kind = (fftw_r2r_kind*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a> ( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( fftw_r2r_kind));</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>   <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     ths->r2r_kind[t] = FFTW_RODFT00;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   WINDOW_HELP_INIT;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     ths-><a class="code" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8" title="nodes (in time/spatial domain)">x</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * ths-><a class="code" hre [...]
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     ths-><a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number [...]
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     ths-><a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_t [...]
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     nfst_precompute_phi_hut( ths);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>   <span class="comment">/* NO FFTW_MALLOC HERE */</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>     ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a> =</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>       (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> * ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * NFST_SUMMANDS * <span cla [...]
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     ths->nfst_full_psi_eps = pow(10, -10);</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   }</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   {</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>       ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a> =</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>         (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>( ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>, 0, ths-><a class="code [...]
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a> =</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>           (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>( ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>, 0, ths-><a class="co [...]
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>         ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a> = ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>       ths->my_fftw_r2r_plan =</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>         fftw_plan_r2r( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>, ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>, ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>, ths-><a class="code" href="structnf [...]
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>   }</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>   ths-><a class="code" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))<a class="code" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416" title="user routines">nfst_trafo</a>;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   ths-><a class="code" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfst_adjoint;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="keywordtype">void</span> nfst_init( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> {</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>   ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> = d;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>   ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>      = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span class [...]
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   <span class="keywordflow">for</span>(t = 0;t < d; t++)</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>   ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>      = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span [...]
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>[t] = 2 * X(next_power_of_2)( ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[t]) - 1;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> <span class="comment">/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> <span class="comment"></span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> <span class="comment">  WINDOW_HELP_ESTIMATE_m;</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> <span class="comment">*/</span>  </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> = NFST_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>   ths-><a class="code" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8" title="flags for the fftw">fftw_flags</a> = FFTW_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>   nfst_init_help( ths);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="keywordtype">void</span> nfst_init_m( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> {</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>   <span class="keywordtype">int</span> t, n[d];</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> </div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>   <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     n[t] = nfst_fftw_2N( X(next_power_of_2)( N[t]));</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> </div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>   nfst_init_guru( ths, d, N, M_total, n, m, NFST_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> }</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> <span class="keywordtype">void</span> nfst_init_guru( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N,</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>      <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *n, <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>      <span class="keywordtype">unsigned</span> nfst_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> {</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>   <span class="keywordtype">int</span> t;             </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>   ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> = d;</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>   ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>   ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>      = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span class [...]
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>   <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[t]      = N[t];</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>   ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>      = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span [...]
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>   <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>[t]      = n[t];</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>   ths-><a class="code" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d" title="cut-off parameter in time-domain">m</a> = m;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>   ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> = nfst_flags;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>   ths-><a class="code" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8" title="flags for the fftw">fftw_flags</a> = fftw_flags;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>   nfst_init_help( ths);</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordtype">void</span> nfst_init_1d( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> {</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>   <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>   N[0] = N0;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>   nfst_init( ths, 1, N, M_total);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordtype">void</span> nfst_init_2d( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> {</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>   <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   N[0] = N0;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>   N[1] = N1;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>   nfst_init( ths, 2, N, M_total);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">void</span> nfst_init_3d( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>   N[0] = N0;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>   N[1] = N1;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>   N[2] = N2;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>   nfst_init( ths, 3, N, M_total);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordtype">void</span> nfst_finalize( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>   <span class="keywordtype">int</span> t; <span class="comment">/* index over dimensions */</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>   <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>   {</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     fftw_destroy_plan( ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a>);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> </div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>   <span class="comment">/* NO FFTW_FREE HERE */</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>   <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>   {</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     {</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811" title="only for thin B">psi_index_g</a>);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c" title="only for thin B">psi_index_f</a>);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     }</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>   }</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>   <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PHI_HUT) {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="keywordflow">for</span>( t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab" title="precomputed data, matrix D">c_phi_inv</a>[t]);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab" title="precomputed data, matrix D">c_phi_inv</a>);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>   }</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>   <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a>);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>   <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>   <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8" title="nodes (in time/spatial domain)">x</a>);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>   WINDOW_HELP_FINALIZE;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>);</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1" title="oversampling-factor">sigma</a>);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->r2r_kind);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> } <span class="comment">/* nfst_finalize */</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nnfft_2simple__test_8c_source.html b/doc/api/html/nnfft_2simple__test_8c_source.html
new file mode 100644
index 0000000..5a949c3
--- /dev/null
+++ b/doc/api/html/nnfft_2simple__test_8c_source.html
@@ -0,0 +1,352 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nnfft/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">void</span> simple_test_nnfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;                    </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   N[0]=12;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   nnfft_init(&my_plan, 1, 3, 19, N);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   }</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat");</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"nndft, vector f");</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   nnfft_trafo(&my_plan);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"nnfft, vector f");</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> static <span class="keywordtype">void</span> simple_test_adjoint_nnfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordtype">int</span> j;                                 </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;                    </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   N[0]=12;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   nnfft_init(&my_plan, 1, 20, 33, N);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"given Samples, vector f");</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   nnfft_adjoint_direct(&my_plan);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,my_plan.N_total,"adjoint nndft, vector f_hat");</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   nnfft_adjoint(&my_plan);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,my_plan.N_total,"adjoint nnfft, vector f_hat");</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> static <span class="keywordtype">void</span> simple_test_nnfft_2d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;                    </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   N[0]=12;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   N[1]=14;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   nnfft_init(&my_plan, 2,12*14,19, N);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[2*j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[2*j+1]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[2*j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[2*j+1]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,12,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         "given Fourier coefficients, vector f_hat (first 12 entries)");</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"ndft, vector f");</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   nnfft_trafo(&my_plan);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"nfft, vector f");</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> static <span class="keywordtype">void</span> simple_test_innfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordtype">int</span> j,k,l,N=8;                        </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;                   </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;         </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   nnfft_init(&my_plan,1 ,8 ,8 ,&N);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan),CGNR);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[k]=((<span class="keywordtype">double</span>)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>,my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</ [...]
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coeffici [...]
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         <span class="stringliteral">"approximate solution, vector f_hat_iter"</span>);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   <span class="keywordflow">for</span>(l=0;l<8;l++)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     printf(<span class="stringliteral">"iteration l=%d\n"</span>,l);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coeffi [...]
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>           <span class="stringliteral">"approximate solution, vector f_hat_iter"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is  [...]
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total num [...]
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is  [...]
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="keyword">static</span> <span class="keywordtype">void</span> measure_time_nnfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;                    </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="keywordtype">int</span> my_N,N=4;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">for</span>(my_N=16; my_N<=16384; my_N*=2)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     nnfft_init(&my_plan,1,my_N,my_N,&N);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j]=((<span class="keywordtype">double</span>)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     t0 = getticks();</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     t1 = getticks();</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     printf("t_nndft=%e,\t",t);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     t0 = getticks();</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     nnfft_trafo(&my_plan);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     t1 = getticks();</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     printf("t_nnfft=%e\t",t);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     printf("(N=M=%d)\n",my_N);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   printf(<span class="stringliteral">"1) computing a one dimensional nndft, nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   simple_test_nnfft_1d();</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   getc(stdin);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   printf(<span class="stringliteral">"1a) computing a one dimensional adjoint nndft, nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   simple_test_adjoint_nnfft_1d();</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   getc(stdin);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   printf(<span class="stringliteral">"2) computing a two dimensional nndft, nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   simple_test_nnfft_2d();</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   getc(stdin);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   printf(<span class="stringliteral">"3) computing a one dimensional innfft\n\n"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   simple_test_innfft_1d();</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   getc(stdin);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   printf(<span class="stringliteral">"4) computing times for one dimensional nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   measure_time_nnfft_1d();</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nnfft_8c_source.html b/doc/api/html/nnfft_8c_source.html
new file mode 100644
index 0000000..9bdb897
--- /dev/null
+++ b/doc/api/html/nnfft_8c_source.html
@@ -0,0 +1,704 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nnfft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_ea25627ea6e0d39c26e4e31bca7b94c4.html">nnfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nnfft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#define MACRO_nndft_init_result_trafo memset(f,0,ths->M_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_init_result_conjugated MACRO_nndft_init_result_trafo</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_init_result_transposed MACRO_nndft_init_result_adjoint</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#define MACRO_nndft_sign_trafo      (-2.0*PI)</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_sign_conjugated (+2.0*PI)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_sign_adjoint    (+2.0*PI)</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_sign_transposed (-2.0*PI)</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#define MACRO_nndft_compute_trafo (*fj) += (*f_hat_k)*cexp(+ _Complex_I*omega);</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#define MACRO_nndft_compute_conjugated MACRO_nndft_compute_trafo</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#define MACRO_nndft_compute_adjoint (*f_hat_k) += (*fj)*cexp(+ _Complex_I*omega);</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#define MACRO_nndft_compute_transposed MACRO_nndft_compute_adjoint</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#define MACRO_nndft(which_one)                                                \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">void nnfft_ ## which_one ## _direct (nnfft_plan *ths)                                    \</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">  int j;                               \</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">  int t;                               \</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">  int l;                               \</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">  double _Complex *f_hat, *f;          \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">  double _Complex *f_hat_k;            \</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">  double _Complex *fj;                 \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">  double omega;                        \</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">  f_hat=ths->f_hat; f=ths->f;                                                 \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">  MACRO_nndft_init_result_ ## which_one                                       \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">  for(j=0, fj=f; j<ths->M_total; j++, fj++)                                   \</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">  {                                                                           \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">    for(l=0, f_hat_k=f_hat; l<ths->N_total; l++, f_hat_k++)                   \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">      omega=0.0;                                                              \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">      for(t = 0; t<ths->d; t++)                                               \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">        omega+=ths->v[l*ths->d+t] * ths->x[j*ths->d+t] * ths->N[t];           \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">      omega*= MACRO_nndft_sign_ ## which_one;                                 \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">      MACRO_nndft_compute_ ## which_one                                       \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor">     } </span><span class="comment">/* for(l) */</span><span class="preprocessor">                                                           \</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor">   } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                             \</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor">} </span><span class="comment">/* nndft_trafo */</span><span class="preprocessor">                                                           \</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span>MACRO_nndft(trafo)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> MACRO_nndft(adjoint)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> static <span class="keywordtype">void</span> nnfft_uo(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths,<span class="keywordtype">int</span> j,<span class="keywordtype">int</span> *up,<span class="keywordtype">int</span> *op,<span class="keywordtype">int</span> act_dim)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">double</span> c;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">int</span> u,o;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   c = ths->v[j*ths->d+act_dim] * ths->n[act_dim];</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   u = c; o = c;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordflow">if</span>(c < 0)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     u = u-1;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     o = o+1;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   u = u - (ths->m); o = o + (ths->m);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   up[0]=u; op[0]=o;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">#define MACRO_nnfft_B_init_result_A memset(f,0,ths->N_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nnfft_B_init_result_T memset(g,0,ths->aN1_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">#define MACRO_nnfft_B_PRE_FULL_PSI_compute_A {                                \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                            \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">#define MACRO_nnfft_B_PRE_FULL_PSI_compute_T {                                \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                            \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor">#define MACRO_nnfft_B_compute_A {                                             \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]];                            \</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="preprocessor">#define MACRO_nnfft_B_compute_T {                                             \</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor">  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj);                            \</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">#define MACRO_with_PRE_LIN_PSI (ths->psi[(ths->K+1)*t2+y_u[t2]]*              \</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor">                                (y_u[t2]+1-y[t2]) +                           \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">                                ths->psi[(ths->K+1)*t2+y_u[t2]+1]*            \</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor">                                (y[t2]-y_u[t2]))</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_with_PRE_PSI     ths->psi[(j*ths->d+t2)*(2*ths->m+2)+lj[t2]]</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_without_PRE_PSI  PHI(-ths->v[j*ths->d+t2]+                      \</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor">                               ((double)l[t2])/ths->N1[t2], t2)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">#define MACRO_init_uo_l_lj_t {                                                \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor">  for(t = ths->d-1; t>=0; t--)                                                \</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">      nnfft_uo(ths,j,&u[t],&o[t],t);                                          \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">      l[t] = u[t];                                                            \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">      lj[t] = 0;                                                              \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">    } </span><span class="comment">/* for(t) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">  t++;                                                                        \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">#define MACRO_update_with_PRE_PSI_LIN {                                       \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">  for(t2=t; t2<ths->d; t2++)                                                  \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">      y[t2] = fabs(((-ths->N1[t2]*ths->v[j*ths->d+t2]+(double)l[t2])          \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor">          * ((double)ths->K))/(ths->m+1));                                    \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">      y_u[t2] = (int)y[t2];                                                   \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">    } </span><span class="comment">/* for(t2) */</span><span class="preprocessor">                                                           \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">#define MACRO_update_phi_prod_ll_plain(which_one) {                           \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">  for(t2=t; t2<ths->d; t2++)                                                  \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">      phi_prod[t2+1]=phi_prod[t2]* MACRO_ ## which_one;                       \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">      ll_plain[t2+1]=ll_plain[t2]*ths->aN1[t2] +                              \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">                     (l[t2]+ths->aN1[t2]*3/2)%ths->aN1[t2];                   \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">      </span><span class="comment">/* 3/2 because of the (not needed) fftshift and to be in [0 aN1[t2]]?!*/</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">    } </span><span class="comment">/* for(t2) */</span><span class="preprocessor">                                                           \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">#define MACRO_count_uo_l_lj_t {                                               \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">  for(t = ths->d-1; (t>0)&&(l[t]==o[t]); t--)                                 \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor">      l[t] = u[t];                                                            \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">      lj[t] = 0;                                                              \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor">    } </span><span class="comment">/* for(t) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">  l[t]++;                                                                     \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">  lj[t]++;                                                                    \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor">#define MACRO_nnfft_B(which_one)                                              \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">static inline void nnfft_B_ ## which_one (nnfft_plan *ths)                    \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">{                                                                             \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor">  int lprod;                           \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor">  int u[ths->d], o[ths->d];            \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor">  int t, t2;                           \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor">  int j;                               \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor">  int l_L, ix;                         \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor">  int l[ths->d];                       \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor">  int lj[ths->d];                      \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor">  int ll_plain[ths->d+1];              \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor">  double phi_prod[ths->d+1];           \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor">  double _Complex *f, *g;              \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">  double _Complex *fj;                 \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor">  double y[ths->d];                                                           \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor">  int y_u[ths->d];                                                            \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor">  f=ths->f_hat; g=ths->F;                                                     \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">  MACRO_nnfft_B_init_result_ ## which_one                                     \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor">  if(ths->nnfft_flags & PRE_FULL_PSI)                                         \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor">      for(ix=0, j=0, fj=f; j<ths->N_total; j++,fj++)                          \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">        for(l_L=0; l_L<ths->psi_index_f[j]; l_L++, ix++)                      \</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">          MACRO_nnfft_B_PRE_FULL_PSI_compute_ ## which_one;                   \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor">      return;                                                                 \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor">    }                                                                         \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor">  phi_prod[0]=1;                                                              \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">  ll_plain[0]=0;                                                              \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor">  for(t=0,lprod = 1; t<ths->d; t++)                                           \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">    lprod *= (2*ths->m+2);                                                    \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor">  if(ths->nnfft_flags & PRE_PSI)                                              \</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">      for(j=0, fj=f; j<ths->N_total; j++, fj++)                               \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">          MACRO_init_uo_l_lj_t;                                               \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor">          for(l_L=0; l_L<lprod; l_L++)                                        \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor">              MACRO_update_phi_prod_ll_plain(with_PRE_PSI);                   \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor">              MACRO_nnfft_B_compute_ ## which_one;                            \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor">              MACRO_count_uo_l_lj_t;                                          \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="preprocessor">            } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                  \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="preprocessor">        } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor">      return;                                                                 \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor">    } </span><span class="comment">/* if(PRE_PSI) */</span><span class="preprocessor">                                                       \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">  if(ths->nnfft_flags & PRE_LIN_PSI)                                          \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">      for(j=0, fj=f; j<ths->N_total; j++, fj++)                               \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">          MACRO_init_uo_l_lj_t;                                               \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">          for(l_L=0; l_L<lprod; l_L++)                                        \</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor">            {                                                                 \</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="preprocessor">              MACRO_update_with_PRE_PSI_LIN;                                  \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="preprocessor">              MACRO_update_phi_prod_ll_plain(with_PRE_LIN_PSI);               \</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor">              MACRO_nnfft_B_compute_ ## which_one;                            \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">              MACRO_count_uo_l_lj_t;                                          \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor">            } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                  \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor">        } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                        \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="preprocessor">      return;                                                                 \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor">    } </span><span class="comment">/* if(PRE_LIN_PSI) */</span><span class="preprocessor">                                                   \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor">  </span><span class="comment">/* no precomputed psi at all */</span><span class="preprocessor">                                             \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor">  for(j=0, fj=f; j<ths->N_total; j++, fj++)                                   \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor">    {                                                                         \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">      MACRO_init_uo_l_lj_t;                                                   \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">      for(l_L=0; l_L<lprod; l_L++)                                            \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">        {                                                                     \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">          MACRO_update_phi_prod_ll_plain(without_PRE_PSI);                    \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor">          MACRO_nnfft_B_compute_ ## which_one;                                \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor">                                                                              \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor">          MACRO_count_uo_l_lj_t;                                              \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="preprocessor">        } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor">                                                      \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="preprocessor">    } </span><span class="comment">/* for(j) */</span><span class="preprocessor">                                                            \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="preprocessor">} </span><span class="comment">/* nnfft_B */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> MACRO_nnfft_B(A)</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> MACRO_nnfft_B(T)</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> static inline <span class="keywordtype">void</span> nnfft_D (<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths){</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordtype">int</span> j,t;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordtype">double</span> tmp;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordflow">if</span>(ths->nnfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       <span class="keywordflow">for</span>(j=0; j<ths->M_total; j++)</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     ths->f[j] *= ths->c_phi_inv[j];</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       <span class="keywordflow">for</span>(j=0; j<ths->M_total; j++)</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     tmp = 1.0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="comment">/* multiply with N1, because x was modified */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordflow">for</span>(t=0; t<ths->d; t++)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         tmp*= 1.0 /((PHI_HUT(ths->x[ths->d*j + t]*((<span class="keywordtype">double</span>)ths->N[t]),t)) );</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     ths->f[j] *= tmp;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">  294</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keywordtype">int</span> j,t;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   nnfft_B_T(ths);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="comment">/* allows for external swaps of ths->f */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M [...]
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   nnfft_D(ths);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> } <span class="comment">/* nnfft_trafo */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="keywordtype">void</span> nnfft_adjoint(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordtype">int</span> j,t;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   nnfft_D(ths);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="comment">/* allows for external swaps of ths->f */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_t [...]
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   nfft_adjoint(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   nnfft_B_A(ths);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> } <span class="comment">/* nnfft_adjoint */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">  348</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordtype">double</span> tmp;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   ths-><a class="code" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89" title="precomputed data, matrix D">c_phi_inv</a>= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>*<span class= [...]
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       tmp = 1.0;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <span class="keywordflow">for</span>(t=0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         tmp*= 1.0 /(PHI_HUT(ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*j + t]*((<span class="keywordtype">double</span>)ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7 [...]
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       ths-><a class="code" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89" title="precomputed data, matrix D">c_phi_inv</a>[j]=tmp;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> } <span class="comment">/* nnfft_phi_hut */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">  368</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> {</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="keywordtype">double</span> step;                          </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       step=((double)(ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+1))/(ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>*ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t]);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       <span class="keywordflow">for</span>(j=0;j<=ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>;j++)</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>           ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>[(ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>+1)*t + j] = PHI(j*step,t);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     } <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="keywordtype">void</span> nnfft_precompute_psi(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   <span class="keywordtype">int</span> l;                                </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordtype">int</span> lj;                               </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keywordtype">int</span> u, o;                             </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         nnfft_uo(ths,j,&u,&o,t);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">for</span>(l=u, lj=0; l <= o; l++, lj++)</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>           ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>[(j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t)*(2*ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+2)+lj]=</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>             (PHI((-ths-><a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]+((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths-><a class="code" href="structnnfft__plan.html#a746 [...]
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>       } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   nfft_precompute_psi(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> } <span class="comment">/* nfft_precompute_psi */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">  425</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="keywordtype">int</span> t,t2;                             </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <span class="keywordtype">int</span> j;                                </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   <span class="keywordtype">int</span> l_L;                              </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <span class="keywordtype">int</span> l[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];                       </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];                      </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+1];              </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <span class="keywordtype">int</span> lprod;                            </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   <span class="keywordtype">int</span> u[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>], o[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];           </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   <span class="keywordtype">double</span> phi_prod[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+1];</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   <span class="keywordtype">int</span> ix,ix_old;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   }</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   nnfft_precompute_psi(ths);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   nfft_precompute_full_psi(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   phi_prod[0]=1;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   ll_plain[0]=0;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     lprod *= 2*ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+2;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   <span class="keywordflow">for</span>(j=0,ix=0,ix_old=0; j<ths->N_total; j++)</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     {</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       <span class="keywordflow">for</span>(l_L=0; l_L<lprod; l_L++, ix++)</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>         {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>           MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>           ths-><a class="code" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232" title="only for thin B">psi_index_g</a>[ix]=ll_plain[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>           ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>[ix]=phi_prod[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>           MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       ths-><a class="code" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d" title="only for thin B">psi_index_f</a>[j]=ix-ix_old;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>       ix_old=ix;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nnfft_init_help(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths, <span class="keywordtype">int</span> m2, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   <span class="keywordtype">int</span> t;                                </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   <span class="keywordtype">int</span> lprod;                            </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   <span class="keywordtype">int</span> N2[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class="ke [...]
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   ths-><a class="code" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9" title="1 + 2*m/N1">a</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class=" [...]
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   ths-><a class="code" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d" title="oversampling-factor">sigma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>( [...]
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>   ths-><a class="code" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020" title="n=N1, for the window function">n</a> = ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   ths-><a class="code" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921" title="aN1_total=aN1[0]* ...">aN1_total</a>=1;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   <span class="keywordflow">for</span>(t = 0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     ths-><a class="code" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9" title="1 + 2*m/N1">a</a>[t] = 1.0 + (2.0*((double)ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>))/((<span class="keywordtype">double</span>)ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title [...]
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t] = ths-><a class="code" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9" title="1 + 2*m/N1">a</a>[t] * ((double)ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t]);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="comment">/* aN1 should be even */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t]%2 != 0)</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>       ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t] = ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t] +1;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     ths-><a class="code" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921" title="aN1_total=aN1[0]* ...">aN1_total</a>*=ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t];</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     ths-><a class="code" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d" title="oversampling-factor">sigma</a>[t] = ((double) ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] )/((double) ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t]);;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="comment">/* take the same oversampling factor in the inner NFFT */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     N2[t] = ceil(ths-><a class="code" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d" title="oversampling-factor">sigma</a>[t]*(ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t]));</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     <span class="comment">/* N2 should be even */</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="keywordflow">if</span>(N2[t]%2 != 0)</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>       N2[t] = N2[t] +1;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   WINDOW_HELP_INIT</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*ths-><a class="code" href [...]
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of [...]
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_V)</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     ths-><a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*ths-><a class="code" href="str [...]
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     ths-><a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" tit [...]
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   {</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>=(1U<< 10)*(ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+1);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>+1)*ths-><a class="code [...]
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   }</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>*th [...]
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   {</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>       <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>           lprod *= 2*ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+2;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>       ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>* [...]
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>       ths-><a class="code" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d" title="only for thin B">psi_index_f</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>*<span [...]
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>       ths-><a class="code" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232" title="only for thin B">psi_index_g</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>*lprod [...]
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   }</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   nfft_init_guru(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>, ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>, ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>, ths-><a class="code" href="st [...]
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>      nfft_flags, fftw_flags);</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a> = ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M [...]
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   ths->F = ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   ths-><a class="code" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))<a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   ths-><a class="code" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nnfft_adjoint;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="keywordtype">void</span> nnfft_init_guru(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N_total, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> *N1,</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>          <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> nnfft_flags)</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   <span class="keywordtype">int</span> t;                             </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   <span class="keywordtype">unsigned</span> nfft_flags;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordtype">unsigned</span> fftw_flags;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>= d;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>= M_total;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>= N_total;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>= m;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a>= nnfft_flags;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   nfft_flags= PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     nfft_flags = nfft_flags | PRE_PSI;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     nfft_flags = nfft_flags | PRE_FULL_PSI;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     nfft_flags = nfft_flags | PRE_LIN_PSI;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span c [...]
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class="keywo [...]
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="keywordflow">for</span>(t=0; t<d; t++) {</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] = N1[t];</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   nnfft_init_help(ths,m,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="keywordtype">void</span> nnfft_init(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N_total, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *N)</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> {</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   <span class="keywordtype">int</span> t;                            </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="keywordtype">unsigned</span> nfft_flags;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="keywordtype">unsigned</span> fftw_flags;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a> = d;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a> = N_total;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="comment">/* m should be greater to get the same accuracy as the nfft */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment"></span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="comment">  WINDOW_HELP_ESTIMATE_m;</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span c [...]
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class="keywo [...]
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   <span class="keywordflow">for</span>(t=0; t<d; t++) {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     <span class="comment">/* the standard oversampling factor in the nnfft is 1.5 */</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] = ceil(1.5*ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t]);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     <span class="comment">/* N1 should be even */</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t]%2 != 0)</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>       ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] = ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] +1;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   }</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a>=PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   nfft_flags= PRE_PSI| PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   nnfft_init_help(ths,ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> <span class="keywordtype">void</span> nnfft_finalize(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> {</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   nfft_finalize(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     {</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232" title="only for thin B">psi_index_g</a>);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d" title="only for thin B">psi_index_f</a>);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     }</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89" title="precomputed data, matrix D">c_phi_inv</a>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_V)</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nsfft_2simple__test_8c_source.html b/doc/api/html/nsfft_2simple__test_8c_source.html
new file mode 100644
index 0000000..c62174c
--- /dev/null
+++ b/doc/api/html/nsfft_2simple__test_8c_source.html
@@ -0,0 +1,130 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nsfft/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nsfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">int</span> K=12;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <a class="code" href="structnsfft__plan.html">nsfft_plan</a> p;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   nsfft_init(&p, d, J, M, 6, NSDFT);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   nsfft_init_random_nodes_coeffs(&p);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, K, <span class="stringliteral">"frequencies, vector f_hat (first few entries)"</span [...]
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   nsfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, K, <span class="stringliteral">"nsdft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   nsfft_trafo(&p);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, K, <span class="stringliteral">"nsfft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   nsfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, K, <span class="stringliteral">"adjoint nsdft, vector f_hat, (first few entries)"</s [...]
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   nsfft_adjoint(&p);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, K, <span class="stringliteral">"adjoint nsfft, vector f_hat, (first few entries)"</s [...]
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   nsfft_finalize(&p);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordtype">int</span> d, J, M;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   printf(<span class="stringliteral">"1) computing a two dimensional nsdft, nsfft and adjoints\n\n"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   d=2;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   J=5;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   M=(J+4)*X(exp2i)(J+1);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   simple_test_nsfft(d,J,M);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   getc(stdin);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   printf(<span class="stringliteral">"2) computing a three dimensional nsdft, nsfft and adjoints\n\n"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   d=3;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   J=5;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   simple_test_nsfft(d,J,M);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nsfft_8c_source.html b/doc/api/html/nsfft_8c_source.html
new file mode 100644
index 0000000..7be5a67
--- /dev/null
+++ b/doc/api/html/nsfft_8c_source.html
@@ -0,0 +1,1944 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nsfft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a42734e8bce3bbae48210591d0fac63c.html">nsfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nsfft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nsfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#define NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/* computes a 2d ndft by 1d nfft along the dimension 1 times</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">   1d ndft along dimension 0</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_trafo_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= 0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>       plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimensi [...]
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     }</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>       plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(plan_1d);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>           ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( - I*2*<a class="code" href="group__nfftutil.html#ga598a3330b3 [...]
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_adjoint_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension [...]
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordflow">for</span>(k0=0;k0<ths->N[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>           plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__nfftutil.html#ga59 [...]
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       nfft_adjoint(plan_1d);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/* computes a 3d ndft by 1d nfft along the dimension 2 times</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">   2d ndft along dimension 0,1</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_trafo_3d_1(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordtype">int</span> j,k0,k1;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = 0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimensi [...]
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordflow">for</span>(k1=0;k1<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + (k0*ths-><a class="code" href="structnfft__pl [...]
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(plan_1d);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>       omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka ra [...]
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         +     ((<span class="keywordtype">double</span>)(k1 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc [...]
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>             ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( - I*2*<a class="code" href="group__nfftutil.html#ga598a3330 [...]
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>       }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_adjoint_3d_1(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span> j,k0,k1;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension [...]
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">for</span>(k0=0;k0<ths->N[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">for</span>(k1=0;k1<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>       omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka ra [...]
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         +     ((<span class="keywordtype">double</span>)(k1 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc [...]
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>             plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__nfftutil.html#ga [...]
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + (k0*ths-><a class="code" href="structnfft__pl [...]
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   nfft_adjoint(plan_1d);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">/* computes a 3d ndft by 2d nfft along the dimension 1,2 times</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">   1d ndft along dimension 0</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_trafo_3d_2(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_2d)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = 0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       plan_2d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(plan_2d);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += plan_2d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( - I*2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701 [...]
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_adjoint_3d_2(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_2d)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     {</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     plan_2d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__nfftutil.html#ga598a3330 [...]
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       plan_2d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       nfft_adjoint(plan_2d);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> index_sparse_to_full_direct_2d(<span class="keywordtype">int</span> J, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordtype">int</span> N=X(exp2i)(J+2);               <span class="comment">/* number of full coeffs             */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordtype">int</span> N_B=X(exp2i)(J);               <span class="comment">/* number in each sparse block       */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordtype">int</span> j=k/N_B;                        <span class="comment">/* consecutive number of Block       */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordtype">int</span> r=j/4;                          <span class="comment">/* level of block                    */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordtype">int</span> i, o, a, b,s,l,m1,m2;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordtype">int</span> k1,k2;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">if</span> (k>=(J+4)*X(exp2i)(J+1))</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   printf(<span class="stringliteral">"Fehler!\n"</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">if</span> (r>(J+1)/2)                  <span class="comment">/* center block                      */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       i=k-4*((J+1)/2+1)*N_B;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       a=X(exp2i)(J/2+1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       m1=i/a;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       m2=i%a;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       k1=N/2-a/2+m1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       k2=N/2-a/2+m2;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordflow">else</span>                            <span class="comment">/* no center block                   */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       i=k-j*N_B;                  <span class="comment">/* index in specific block           */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       o=j%4;                      <span class="comment">/* kind of specific block            */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       a=X(exp2i)(r);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       b=X(exp2i)(J-r);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       l=<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(a,b);                 <span class="comment">/* long dimension of block           */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       s=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(a,b);                 <span class="comment">/* short dimension of block          */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       m1=i/l;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       m2=i%l;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       <span class="keywordflow">switch</span>(o)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       k1=N/2-a/2 ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       k2=N/2+ b  ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       <span class="keywordflow">if</span> (b>=a)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           k1+=m1;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>           k2+=m2;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>           k1+=m2;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>           k2+=m1;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>       k1=N/2+ b  ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       k2=N/2-a/2 ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       <span class="keywordflow">if</span> (b>a)</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>           k1+=m2;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>           k2+=m1;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>           k1+=m1;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>           k2+=m2;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       k1=N/2-a/2 ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>       k2=N/2-2*b ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>       <span class="keywordflow">if</span> (b>=a)</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>         {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>           k1+=m1;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>           k2+=m2;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>           k1+=m2;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>           k2+=m1;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       k1=N/2-2*b ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       k2=N/2-a/2 ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>       <span class="keywordflow">if</span> (b>a)</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>           k1+=m2;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>           k2+=m1;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>           k1+=m1;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>           k2+=m2;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       k1=-1;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       k2=-1;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="comment">//printf("m1=%d, m2=%d\n",m1,m2);</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordflow">return</span>(k1*N+k2);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> index_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="comment">/* only by lookup table */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="keywordflow">if</span>( k < ths->N_total)</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordflow">return</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k];</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> index_full_to_sparse_2d(<span class="keywordtype">int</span> J, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordtype">int</span> N=X(exp2i)(J+2);               <span class="comment">/* number of full coeffs       */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordtype">int</span> N_B=X(exp2i)(J);               <span class="comment">/* number in each sparse block */</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordtype">int</span> k1=k/N-N/2;                     <span class="comment">/* coordinates in the full grid */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordtype">int</span> k2=k%N-N/2;                     <span class="comment">/* k1: row, k2: column          */</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="keywordtype">int</span> r,a,b;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     a=X(exp2i)(J/2+1);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     <span class="keywordflow">if</span> ( (k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) )</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   <span class="keywordflow">return</span>(4*((J+1)/2+1)*N_B+(k1+a/2)*a+(k2+a/2));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">for</span> (r=0; r<=(J+1)/2; r++)</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   b=X(exp2i)(r);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   a=X(exp2i)(J-r);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordflow">if</span> ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=a) && (k2<2*a) )</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>             <span class="keywordflow">if</span> (a>=b)</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         <span class="keywordflow">return</span>((4*r+0)*N_B+(k1+b/2)*a+(k2-a));</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         <span class="keywordflow">return</span>((4*r+0)*N_B+(k2-a)*b+(k1+b/2));</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) )</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>             <span class="keywordflow">if</span> (a>b)</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         <span class="keywordflow">return</span>((4*r+1)*N_B+(k2+b/2)*a+(k1-a));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         <span class="keywordflow">return</span>((4*r+1)*N_B+(k1-a)*b+(k2+b/2));</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=-2*a) && (k2<-a) )</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>             <span class="keywordflow">if</span> (a>=b)</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         <span class="keywordflow">return</span>((4*r+2)*N_B+(k1+b/2)*a+(k2+2*a));</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordflow">return</span>((4*r+2)*N_B+(k2+2*a)*b+(k1+b/2));</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) )</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>             <span class="keywordflow">if</span> (a>b)</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         <span class="keywordflow">return</span>((4*r+3)*N_B+(k2+b/2)*a+(k1+2*a));</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         <span class="keywordflow">return</span>((4*r+3)*N_B+(k1+2*a)*b+(k2+b/2));</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>       }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> init_index_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   <span class="keywordtype">int</span> k_S;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="keywordflow">for</span> (k_S=0; k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>; k_S++)</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S]=index_sparse_to_full_direct_2d(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>, k_S);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> index_sparse_to_full_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   <span class="comment">/* only by lookup table */</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordflow">if</span>( k < ths->N_total)</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">return</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k];</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> index_full_to_sparse_3d(<span class="keywordtype">int</span> J, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="keywordtype">int</span> N=X(exp2i)(J+2);                 <span class="comment">/* length of the full grid           */</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   <span class="keywordtype">int</span> N_B_r;                            <span class="comment">/* size of a sparse block in level r */</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordtype">int</span> sum_N_B_less_r;                   <span class="comment">/* sum N_B_r                         */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   <span class="keywordtype">int</span> r,a,b;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   <span class="keywordtype">int</span> k3=(k%N)-N/2;                     <span class="comment">/* coordinates in the full grid      */</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="keywordtype">int</span> k2=((k/N)%N)-N/2;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <span class="keywordtype">int</span> k1=k/(N*N)-N/2;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   a=X(exp2i)(J/2+1);                   <span class="comment">/* length of center block            */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordflow">if</span>((k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) && (k3>=(-a/2)) &&</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>      (k3<a/2))</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>       <span class="keywordflow">return</span>(6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+((k1+a/2)*a+(k2+a/2))*a+</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>              (k3+a/2));</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   sum_N_B_less_r=0;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   <span class="keywordflow">for</span> (r=0; r<=(J+1)/2; r++)</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>       a=X(exp2i)(J-r);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>       b=X(exp2i)(r);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>       N_B_r=a*b*b;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>       <span class="comment">/* right - rear - top - left - front - bottom */</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>       <span class="keywordflow">if</span> ((k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>           (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* right */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   {</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*0 + ((k2+b/2)*b+k3+b/2)*a + (k1-a);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*0 + ((k1-a)*b+(k2+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k2>=a) && (k2<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>                (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+k3+b/2)*a + (k2-a);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a==b)</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+(k2-a))*a + (k3+b/2);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*1 + ((k2-a)*b+(k1+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   }</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>        <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k3>=a) && (k3<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                 (k2>=-(b/2)) && (k2<(b+1)/2)) <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*2 + ((k1+b/2)*b+k2+b/2)*a + (k3-a);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*2 + ((k3-a)*b+(k1+b/2))*b + (k2+b/2);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* left */</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   {</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*3 + ((k2+b/2)*b+k3+b/2)*a + (k1+2*a);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*3 + ((k1+2*a)*b+(k2+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   }</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k2>=-2*a) && (k2<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* front */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   {</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+k3+b/2)*a + (k2+2*a);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a==b)</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+(k2+2*a))*a + (k3+b/2);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*4 + ((k2+2*a)*b+(k1+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>        <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k3>=-2*a) && (k3<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                 (k2>=-(b/2)) && (k2<(b+1)/2)) <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*5 + ((k1+b/2)*b+k2+b/2)*a + (k3+2*a);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>       <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*5 + ((k3+2*a)*b+(k1+b/2))*b + (k2+b/2);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   }</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       sum_N_B_less_r+=6*N_B_r;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     } <span class="comment">/* for(r) */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>   <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> init_index_sparse_to_full_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   <span class="keywordtype">int</span> k1,k2,k3,k_s,r;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   <span class="keywordtype">int</span> a,b;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);            <span class="comment">/* length of the full grid           */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   <span class="keywordtype">int</span> Nc=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];   <span class="comment">/* length of the center block        */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keywordflow">for</span> (k_s=0, r=0; r<=(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+1)/2; r++)</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     {</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>       a=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>-r);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>       b=X(exp2i)(r);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>       <span class="comment">/* right - rear - top - left - front - bottom */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>       <span class="comment">/* right */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <span class="keywordflow">for</span>(k1=a; k1<2*a; k1++,k_s++)</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   <span class="keywordflow">for</span>(k1=a; k1<2*a; k1++)</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>       <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>       <span class="keywordflow">for</span>(k2=a; k2<2*a; k2++,k_s++)</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span>(a==b)</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     <span class="keywordflow">for</span>(k2=a; k2<2*a; k2++)</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>       <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="keywordflow">for</span>(k2=a; k2<2*a; k2++)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>       <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>       <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>       <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>       <span class="keywordflow">for</span>(k3=a; k3<2*a; k3++,k_s++)</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   <span class="keywordflow">for</span>(k3=a; k3<2*a; k3++)</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>       <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++,k_s++)</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       <span class="comment">/* left */</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>       <span class="keywordflow">for</span>(k1=-2*a; k1<-a; k1++,k_s++)</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   <span class="keywordflow">for</span>(k1=-2*a; k1<-a; k1++)</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       <span class="comment">/* front */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>       <span class="keywordflow">for</span>(k2=-2*a; k2<-a; k2++,k_s++)</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span>(a==b)</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordflow">for</span>(k2=-2*a; k2<-a; k2++)</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>       <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordflow">for</span>(k2=-2*a; k2<-a; k2++)</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>       <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>       <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>       <span class="keywordflow">for</span>(k3=-2*a; k3<-a; k3++,k_s++)</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordflow">for</span>(k3=-2*a; k3<-a; k3++)</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++,k_s++)</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>         ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     }</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   <span class="comment">/* center */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="keywordflow">for</span>(k1=-Nc/2;k1<Nc/2;k1++)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordflow">for</span>(k2=-Nc/2;k2<Nc/2;k2++)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>       <span class="keywordflow">for</span>(k3=-Nc/2; k3<Nc/2; k3++,k_s++)</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="comment">/* copies ths->f_hat to ths_plan->f_hat */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="keywordtype">void</span> nsfft_cp(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths_full_plan)</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="comment">/* initialize f_hat with zero values */</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   memset(ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, 0, ths_full_plan-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordty [...]
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>    <span class="comment">/* copy values at hyperbolic grid points */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   <span class="keywordflow">for</span>(k=0;k<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k]]=ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   <span class="comment">/* copy nodes */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   memcpy(ths_full_plan-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial d [...]
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="preprocessor"></span><span class="comment">/* test copy_sparse_to_full */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="keyword">static</span> <span class="keywordtype">void</span> test_copy_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths_full_plan)</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   <span class="keywordtype">int</span> k1, k2;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   <span class="keywordtype">int</span> a,b;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;   <span class="comment">/* N=2^J                  */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N=ths_full_plan-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];  <span class="comment">/* size of full NFFT      */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> N_B=X(exp2i)(J);        <span class="comment">/* size of small blocks   */</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   <span class="comment">/* copy sparse plan to full plan */</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   nsfft_cp(ths, ths_full_plan);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   <span class="comment">/* show blockwise f_hat */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   printf(<span class="stringliteral">"f_hat blockwise\n"</span>);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   <span class="keywordflow">for</span> (r=0; r<=(J+1)/2; r++){</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     a=X(exp2i)(J-r); b=X(exp2i)(r);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     printf(<span class="stringliteral">"top\n"</span>);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>       <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+1)*N_B+ k1*b+k2]),</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                            cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+1)*N_B+ k1*b+k2]));</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>       }</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     printf(<span class="stringliteral">"bottom\n"</span>);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>         printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+3)*N_B+ k1*b+k2]),</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                                  cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+3)*N_B+ k1*b+k2]));</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     }</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     printf(<span class="stringliteral">"right\n"</span>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+0)*N_B+ k2*a+k1]),</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                                  cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+0)*N_B+ k2*a+k1]));</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>       }</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     }</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     printf(<span class="stringliteral">"left\n"</span>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>       <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+2)*N_B+ k2*a+k1]),</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                            cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+2)*N_B+ k2*a+k1]));</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>       }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   <span class="comment">/* show full f_hat */</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   printf(<span class="stringliteral">"full f_hat\n"</span>);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>   <span class="keywordflow">for</span> (k1=0;k1<N;k1++){</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     <span class="keywordflow">for</span> (k2=0;k2<N;k2++){</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>       printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k1*N+k2]),</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                                cimag(ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k1*N+k2]));</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   }</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> test_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a>* ths)</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> {</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   <span class="keywordtype">int</span> k_S,k1,k2;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   printf(<span class="stringliteral">"N=%d\n\n"</span>,N);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="keywordflow">for</span>(k1=0;k1<N;k1++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">for</span>(k2=0;k2<N;k2++)</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>       {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         k_S=index_full_to_sparse_2d(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>, k1*N+k2);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <span class="keywordflow">if</span>(k_S!=-1)</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     printf(<span class="stringliteral">"(%+d, %+d)\t= %+d \t= %+d = %+d \n"</span>,k1-N/2,k2-N/2,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                  k1*N+k2, k_S, ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S]);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>       }</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> test_sparse_to_full_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a>* ths)</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordtype">int</span> k_S,k1,k2,k3;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   printf(<span class="stringliteral">"N=%d\n\n"</span>,N);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="keywordflow">for</span>(k1=0;k1<N;k1++)</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordflow">for</span>(k2=0;k2<N;k2++)</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>         <span class="keywordflow">for</span>(k3=0;k3<N;k3++)</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     {</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>       k_S=index_full_to_sparse_3d(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>, (k1*N+k2)*N+k3);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>       <span class="keywordflow">if</span>(k_S!=-1)</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>         printf(<span class="stringliteral">"(%d, %d, %d)\t= %d \t= %d = %d \n"</span>,k1-N/2,k2-N/2,k3-N/2,</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>                      (k1*N+k2)*N+k3,k_S, ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S]);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     }</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> }</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="keywordtype">void</span> nsfft_init_random_nodes_coeffs(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   <span class="comment">/* init frequencies */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a421 [...]
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   <span class="comment">/* init nodes */</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial  [...]
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>       {</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>         ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>[2*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>         ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>[2*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>       }</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   <span class="keywordflow">else</span> <span class="comment">/* this->d==3 */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>       {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         ths->x_102[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1];</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>         ths->x_102[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0];</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         ths->x_102[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2];</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         ths->x_201[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2];</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         ths->x_201[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0];</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         ths->x_201[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1];</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>         ths->x_120[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1];</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         ths->x_120[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2];</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>         ths->x_120[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0];</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>         ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  [...]
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>         ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  [...]
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  [...]
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>       }</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_trafo_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> {</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   <span class="keywordtype">int</span> j,k_S,k_L,k0,k1;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>   memset(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,0,ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>   <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     {</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>       k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>       k0=k_L / N;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>       k1=k_L % N;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   {</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     omega =</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>       ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2 * j + 0] +</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>       ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2 * j + 1];</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>           ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] * cexp( - I*2*<a class="code" href="group__nfftutil. [...]
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   }</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> } <span class="comment">/* void nsdft_trafo_2d */</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_trafo_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> {</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="keywordtype">int</span> j,k_S,k0,k1,k2;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>   <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>   memset(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,0,ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     {</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>       k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> </div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>       k0=k_L/(N*N);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>       k1=(k_L/N)%N;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>       k2=k_L%N;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   {</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     omega =</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>       ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3 * j + 0] +</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>       ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3 * j + 1] +</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>       ((double)(k2 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3 * j + 2];</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>           ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] * cexp( - I*2*<a class="code" href="group__nfftutil. [...]
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   }</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     }</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> } <span class="comment">/* void nsdft_trafo_3d */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="keywordtype">void</span> nsfft_trafo_direct(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> {</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     nsdft_trafo_2d(ths);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     nsdft_trafo_3d(ths);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_adjoint_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   <span class="keywordtype">int</span> j,k_S,k_L,k0,k1;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   memset(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0,ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _C [...]
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>       k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>       k0=k_L / N;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>       k1=k_L % N;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   {</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     omega =</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>       ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2 * j + 0] +</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>       ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2 * j + 1];</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>           ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] += ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__ [...]
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   }</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     }</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> } <span class="comment">/* void nsdft_adjoint_2d */</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> </div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_adjoint_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>   <span class="keywordtype">int</span> j,k_S,k0,k1,k2;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>   <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>   <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   memset(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0,ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _C [...]
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>   <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     {</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>       k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>       k0=k_L/(N*N);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>       k1=(k_L/N)%N;</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>       k2=k_L%N;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>       <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>   {</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     omega =</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>       ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3 * j + 0] +</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>       ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3 * j + 1] +</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>       ((double)(k2 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3 * j + 2];</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>           ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] += ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__ [...]
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>   }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     }</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> } <span class="comment">/* void nsdft_adjoint_3d */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="keywordtype">void</span> nsfft_adjoint_direct(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> {</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     nsdft_adjoint_2d(ths);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     nsdft_adjoint_3d(ths);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_trafo_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>   <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>   <span class="comment">/* center */</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector  [...]
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples [...]
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>   <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     {</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>       r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 = ths->set_fftw_plan1[r];</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class= [...]
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>       <span class="comment">/*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>       temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>       <span class="comment">/* right */</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] +=  ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samp [...]
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>                       cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>       <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>                      cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>       <span class="comment">/* left */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                      cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>       <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                      cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> } <span class="comment">/* void nsfft_trafo_2d */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_adjoint_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> {</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>   <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>   <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>   <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>   <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>   <span class="comment">/* center */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>   <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector  [...]
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>   <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     {</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>       r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2 = ths->set_fftw_plan2[r];</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class= [...]
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>       <span class="comment">/*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>       temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>       <span class="comment">/* right */</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>                                   cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> </div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>       <span class="comment">/* top */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>                                   cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> </div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>       <span class="comment">/* left */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>                                   cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>       <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>       <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>                                   cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> </div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>       <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> } <span class="comment">/* void nsfft_adjoint_2d */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_trafo_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> {</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>   <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>   <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>   <span class="keywordtype">int</span> sum_N_B_less_r,N_B_r,a,b;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>   <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>   <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>   <span class="comment">/* center */</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector  [...]
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> </div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>   <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples [...]
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>   sum_N_B_less_r=0;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>   <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     {</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       a=X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       b=X(exp2i)(rr);</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>       N_B_r=a*b*b;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>       r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 = ths->set_fftw_plan1[rr];</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r);</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(r);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>       <span class="comment">/*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-& [...]
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" [...]
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>       <span class="comment">/* only for right - rear - top */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>       <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>   temp=-2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>   temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>       <span class="comment">/* right */</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> </div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>       nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>       short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>     short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>                      cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>       <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> </div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>       nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>       short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>     short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                      cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>       <span class="comment">/* top */</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> </div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>       nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>       short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> </div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                      cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> </div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>       <span class="comment">/* only for left - front - bottom */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>       <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>   temp=-4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>   temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>       <span class="comment">/* left */</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>       nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>       short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>                      cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>       <span class="comment">/* front */</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> </div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>       nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>       short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> </div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>                      cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>       <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>       nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>       short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>         ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>                      cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>       sum_N_B_less_r+=6*N_B_r;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>     } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> } <span class="comment">/* void nsfft_trafo_3d */</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_adjoint_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> {</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>   <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>   <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>   <span class="keywordtype">int</span> sum_N_B_less_r,N_B_r,a,b;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>   <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>   <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> </div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>   <span class="comment">/* center */</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>   <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector  [...]
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>   <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>     nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>   sum_N_B_less_r=0;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>   <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>     {</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>       a=X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>       b=X(exp2i)(rr);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>       N_B_r=a*b*b;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> </div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>       r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 = ths->set_fftw_plan1[rr];</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2 = ths->set_fftw_plan2[rr];</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(r);</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>       <span class="comment">/*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-& [...]
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" [...]
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>       <span class="comment">/* only for right - rear - top */</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>       <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>   temp=-2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>   temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>       <span class="comment">/* right */</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>                                   cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> </div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>       nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>       short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>       <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>                                   cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>       nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>       short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>       <span class="comment">/* top */</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>                                   cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> </div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>       nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>       short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> </div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>       <span class="comment">/* only for left - front - bottom */</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>       <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>   temp=-4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>   temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>       <span class="comment">/* left */</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> </div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>                                   cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> </div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>       nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>       short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>       <span class="comment">/* front */</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>                                   cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>       nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>       short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>     short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>       <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>       <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>       ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>       <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>         ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>                                   cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>     <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>       nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>       short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>     short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>   nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> </div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,t [...]
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> </div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>       sum_N_B_less_r+=6*N_B_r;</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>     } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> } <span class="comment">/* void nsfft_adjoint_3d */</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> </div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="keywordtype">void</span> nsfft_trafo(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> {</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     nsfft_trafo_2d(ths);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>     nsfft_trafo_3d(ths);</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> }</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="keywordtype">void</span> nsfft_adjoint(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> {</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>     nsfft_adjoint_2d(ths);</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     nsfft_adjoint_3d(ths);</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> }</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">/*========================================================*/</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <span class="comment">/* J >1, no precomputation at all!! */</span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_init_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> snfft_flags)</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> {</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>   <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>   <span class="keywordtype">int</span> n[2];</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>   ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a>=snfft_flags;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>   ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>=2;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>   ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>=J;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>   ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>=M;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>   ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>=(J+4)*X(exp2i)(J+1);</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> </div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>   <span class="comment">/* memory allocation */</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>   ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" titl [...]
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>   ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>   ths->set_fftw_plan1=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((J/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>   ths->set_fftw_plan2=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((J/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>   ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(log2i)(m)+1)*(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>)));</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> </div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>   <span class="comment">/* planning the small nffts */</span></div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>   N[0]=1;            n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>   N[1]=X(exp2i)(J); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> </div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>   nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,2,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>     nfft_precompute_one_psi(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>   ths->set_fftw_plan1[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>   ths->set_fftw_plan2[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>   <span class="keywordflow">for</span>(r=1;r<=J/2;r++)</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     {</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>       N[0]=X(exp2i)(r);   n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>       N[1]=X(exp2i)(J-r); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>       ths->set_fftw_plan1[r] =</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>   fftw_plan_dft(2, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class [...]
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>           FFTW_FORWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>       ths->set_fftw_plan2[r] =</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>   fftw_plan_dft(2, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>           FFTW_BACKWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>     }</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>   <span class="comment">/* planning the 1d nffts */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>   <span class="keywordflow">for</span>(r=0;r<=X(log2i)(m);r++)</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     {</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>       N[0]=X(exp2i)(J-r); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0]; <span class="comment">/* ==N[1] of the 2 dimensional plan */</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>       nfft_init_guru(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>       ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html [...]
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>       ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="curr [...]
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>       ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f [...]
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     }</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> </div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>   <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>   <span class="comment">/* J/2 == floor(((double)J) / 2.0) */</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>   N[0]=X(exp2i)(J/2+1); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>   N[1]=X(exp2i)(J/2+1); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>   nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>,2,N,M,n, m, MALLOC_F| FFTW_INIT,</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>                      FFTW_MEASURE);</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>= ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</ [...]
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>                                       FG_PSI;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft bl [...]
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="cu [...]
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>     {</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>       ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>=(<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier [...]
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>       init_index_sparse_to_full_2d(ths);</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>     }</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> }</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="comment">/*========================================================*/</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment">/* J >1, no precomputation at all!! */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_init_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> snfft_flags)</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> {</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>   <span class="keywordtype">int</span> r,rr,a,b;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>   <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>   <span class="keywordtype">int</span> n[3];</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> </div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>   ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a>=snfft_flags;</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>   ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>=2;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>   ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>=J;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>   ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>=M;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>   ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>   <span class="comment">/* memory allocation */</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>   ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> =     (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>   ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" titl [...]
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> </div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>   ths->x_102= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>   ths->x_201= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>   ths->x_120= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>   ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> </div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> </div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>   ths->set_fftw_plan1=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(((J+1)/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>   ths->set_fftw_plan2=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(((J+1)/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> </div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>   ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(log2i)(m)+1)*(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>)));</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>   ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(log2i)(m)+1)*(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>)));</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> </div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>   <span class="comment">/* planning the small nffts */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>   <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>   N[0]=1;            n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>   N[1]=1;            n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>   N[2]=X(exp2i)(J); n[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[2];</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> </div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>   nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,3,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F, FFTW_MEASURE);</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>     nfft_precompute_one_psi(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> </div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>   <span class="comment">/* malloc g1, g2 for maximal size */</span></div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a> = <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bd [...]
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a> = <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51b [...]
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 =</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a cla [...]
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>       FFTW_FORWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2 =</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a cl [...]
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>       FFTW_BACKWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>   ths->set_fftw_plan1[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1;</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>   ths->set_fftw_plan2[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> </div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>   <span class="keywordflow">for</span>(rr=1;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     {</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>       a=X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>       b=X(exp2i)(rr);</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> </div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>       r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>       n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(r);</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>       <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>   n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(J-r);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>   n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(r);</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>       n[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(J-r);</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> </div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>       ths->set_fftw_plan1[rr] =</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>   fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class [...]
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>           FFTW_FORWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>       ths->set_fftw_plan2[rr] =</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>   fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>           FFTW_BACKWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     }</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>   <span class="comment">/* planning the 1d nffts */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>   <span class="keywordflow">for</span>(r=0;r<=X(log2i)(m);r++)</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     {</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>       N[0]=X(exp2i)(J-r); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>       N[1]=X(exp2i)(J-r); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>       <span class="keywordflow">if</span>(N[0]>m)</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>   {</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>     nfft_init_guru(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>     ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>     ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="curren [...]
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>     ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f"  [...]
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>     nfft_init_guru(&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]),2,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="curren [...]
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>     ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f"  [...]
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>   }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>     }</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> </div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>   <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>   <span class="comment">/* J/2 == floor(((double)J) / 2.0) */</span></div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>   N[0]=X(exp2i)(J/2+1); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>   N[1]=X(exp2i)(J/2+1); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>   N[2]=X(exp2i)(J/2+1); n[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[2];</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>   nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>,3,N,M,n, m, MALLOC_F| FFTW_INIT,</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>                      FFTW_MEASURE);</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>= ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</ [...]
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>                                       FG_PSI;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft bl [...]
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="cu [...]
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>     {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>       ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>=(<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier [...]
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>       init_index_sparse_to_full_3d(ths);</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>     }</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> }</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> <span class="preprocessor"></span><span class="keywordtype">void</span> nsfft_init(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> {</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>   ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>=d;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> </div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>     nsfft_init_2d(ths, J, M, m, flags);</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>     nsfft_init_3d(ths, J, M, m, flags);</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> </div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>   ths-><a class="code" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))nsfft_trafo;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>   ths-><a class="code" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nsfft_adjoint;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> }</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="preprocessor"></span><span class="keywordtype">void</span> nsfft_init(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> {</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>   UNUSED(ths);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>   UNUSED(d);</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>   UNUSED(J);</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>   UNUSED(M);</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>   UNUSED(m);</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>   UNUSED(flags);</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>   fprintf(stderr,</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>     <span class="stringliteral">"\nError in kernel/nsfft_init: require GAUSSIAN window function\n"</span>);</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> }</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_finalize_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> {</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> </div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>);</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> </div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>   <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>   nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> </div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>   <span class="comment">/* the 1d nffts */</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>   <span class="keywordflow">for</span>(r=0;r<=X(log2i)(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);r+ [...]
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>     {</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>       ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> =</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>         ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> ^ FG_PSI;</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>       nfft_finalize(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>     }</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> </div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>   <span class="comment">/* finalize the small nffts */</span></div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2=ths->set_fftw_plan2[0];</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1=ths->set_fftw_plan1[0];</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> </div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>   <span class="keywordflow">for</span>(r=1;r<=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>/2;r++)</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>     {</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>       fftw_destroy_plan(ths->set_fftw_plan2[r]);</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>       fftw_destroy_plan(ths->set_fftw_plan1[r]);</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>     }</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> </div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>   <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>   nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>);</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> </div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan2);</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan1);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> </div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>);</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> }</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> </div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_finalize_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> {</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> </div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>);</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> </div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>   <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>   ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>   nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> </div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>   <span class="comment">/* the 1d and 2d nffts */</span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>   <span class="keywordflow">for</span>(r=0;r<=X(log2i)(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);r+ [...]
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>     {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>       <span class="keywordflow">if</span>(X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>-r)>ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href=" [...]
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>   {</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>     ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>     nfft_finalize(&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>     ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     nfft_finalize(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>   }</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>     }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>   <span class="comment">/* finalize the small nffts */</span></div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2=ths->set_fftw_plan2[0];</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>   ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1=ths->set_fftw_plan1[0];</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>   <span class="keywordflow">for</span>(r=1;r<=(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+1)/2;r++)</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>     {</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>       fftw_destroy_plan(ths->set_fftw_plan2[r]);</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>       fftw_destroy_plan(ths->set_fftw_plan1[r]);</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>     }</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>   <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>   nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> </div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>);</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>);</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan2);</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan1);</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->x_102);</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->x_201);</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->x_120);</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>);</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> </div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> }</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> </div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="keywordtype">void</span> nsfft_finalize(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> {</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>     nsfft_finalize_2d(ths);</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>     nsfft_finalize_3d(ths);</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/nsfft__test_8c_source.html b/doc/api/html/nsfft__test_8c_source.html
new file mode 100644
index 0000000..524418d
--- /dev/null
+++ b/doc/api/html/nsfft__test_8c_source.html
@@ -0,0 +1,260 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nsfft_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nsfft_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: nsfft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">static</span> <span class="keywordtype">void</span> accuracy_nsfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <a class="code" href="structnsfft__plan.html">nsfft_plan</a> p;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">double</span> _Complex *swap_sndft_trafo, *swap_sndft_adjoint;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   nsfft_init(&p, d, J, M, m, NSDFT);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   swap_sndft_trafo=(<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>*</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>              <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   swap_sndft_adjoint=(<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>*</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   nsfft_init_random_nodes_coeffs(&p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   nsfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_sndft_trafo,p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   nsfft_trafo(&p);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   printf(<span class="stringliteral">"%5d\t %+.5E\t"</span>,J,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>          X(error_l_infty_1_complex)(swap_sndft_trafo, p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                                  p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   fflush(stdout);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total [...]
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   nsfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_sndft_adjoint,p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   nsfft_adjoint(&p);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   printf(<span class="stringliteral">"%+.5E\n"</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>          X(error_l_infty_1_complex)(swap_sndft_adjoint, p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                  p.<a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                  p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   fflush(stdout);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_sndft_adjoint);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_sndft_trafo);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   nsfft_finalize(&p);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">void</span> time_nsfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">unsigned</span> test_nsdft, <span class="keywordtype">unsigned</span> test_nfft)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordtype">int</span> r, N[d], n[d];</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">double</span> t, t_nsdft, t_nfft, t_nsfft;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <a class="code" href="structnsfft__plan.html">nsfft_plan</a> p;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> np;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">for</span>(r=0;r<d;r++)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     N[r]= X(exp2i)(J+2);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     n[r]=(3*N[r])/2;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="comment">/*n[r]=2*N[r];*/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   nsfft_init(&p, d, J, M, 4, NSDFT);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   nsfft_init_random_nodes_coeffs(&p);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="comment">/* transforms */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span>(test_nsdft)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     t_nsdft=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     r=0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">while</span>(t_nsdft<0.1)</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       r++;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>       t0 = getticks();</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       nsfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       t1 = getticks();</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       t_nsdft+=t;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     t_nsdft/=r;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     t_nsdft=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">if</span>(test_nfft)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     nfft_init_guru(&np,d,N,M,n,6, FG_PSI| MALLOC_F_HAT| MALLOC_F| FFTW_INIT,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       FFTW_MEASURE);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>=p.<a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles."> [...]
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">if</span>(np.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>       nfft_precompute_one_psi(&np);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     nsfft_cp(&p, &np);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     t_nfft=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     r=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       r++;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       t0 = getticks();</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&np);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       t1 = getticks();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     t_nfft/=r;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     nfft_finalize(&np);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     t_nfft=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   t_nsfft=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   r=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordflow">while</span>(t_nsfft<0.1)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       r++;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       t0 = getticks();</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       nsfft_trafo(&p);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       t1 = getticks();</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       t_nsfft+=t;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   t_nsfft/=r;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   printf(<span class="stringliteral">"%d\t%.2e\t%.2e\t%.2e\n"</span>, J, t_nsdft, t_nfft, t_nsfft);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   fflush(stdout);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   nsfft_finalize(&p);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordtype">int</span> d, J, M;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     fprintf(stderr,<span class="stringliteral">"nsfft_test type d [first last trials]\n"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   d=atoi(argv[2]);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   fprintf(stderr,<span class="stringliteral">"Testing the nfft on the hyperbolic cross (nsfft).\n"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     fprintf(stderr,<span class="stringliteral">"Testing the accuracy of the nsfft vs. nsdft\n"</span>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     fprintf(stderr,<span class="stringliteral">"Columns: d, E_{1,\\infty}(trafo) E_{1,\\infty}(adjoint)\n\n"</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">for</span>(J=1; J<10; J++)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       accuracy_nsfft(d, J, 1000, 6);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordflow">if</span>(atoi(argv[1])==2)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     fprintf(stderr,<span class="stringliteral">"Testing the computation time of the nsdft, nfft, and nsfft\n"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     fprintf(stderr,<span class="stringliteral">"Columns: d, J, M, t_nsdft, t_nfft, t_nsfft\n\n"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">for</span>(J=atoi(argv[3]); J<=atoi(argv[4]); J++)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       <span class="keywordflow">if</span>(d==2)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   M=(J+4)*X(exp2i)(J+1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       <span class="keywordflow">if</span>(d*(J+2)<=24)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   time_nsfft(d, J, M, 1, 1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordflow">if</span>(d*(J+2)<=24)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     time_nsfft(d, J, M, 0, 1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     time_nsfft(d, J, M, 0, 0);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/open.png b/doc/api/html/open.png
new file mode 100644
index 0000000..30f75c7
Binary files /dev/null and b/doc/api/html/open.png differ
diff --git a/doc/api/html/polar__fft__test_8c.html b/doc/api/html/polar__fft__test_8c.html
new file mode 100644
index 0000000..0609ad0
--- /dev/null
+++ b/doc/api/html/polar__fft__test_8c.html
@@ -0,0 +1,88 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - polar_fft_test.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">polar_fft_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based polar FFT and inverse.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="polar__fft__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets.  <a href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756 [...]
+<tr class="memitem:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6ec0d6bb5bfea4829e551c9dc9a656e"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="mdescLeft"> </td><td class="mdescRight">discrete polar FFT <br/></td></tr>
+<tr class="memitem:ga72ebda23ef48b6509833eea9a24fa839"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga72ebda23ef48b6509833eea9a24fa839"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga72ebda23ef48b6509833eea9a24fa839"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT. <br/></td></tr>
+<tr class="memitem:gad996d429207cf198e9027618e081ada0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad996d429207cf198e9027618e081ada0"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">inverse_polar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gad996d429207cf198e9027618e081ada0"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based polar FFT <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based polar FFT and inverse. </p>
+<p>Computes the NFFT-based polar FFT and its inverse for various parameters. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="polar__fft__test_8c_source.html">polar_fft_test.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/polar__fft__test_8c_source.html b/doc/api/html/polar__fft__test_8c_source.html
new file mode 100644
index 0000000..36f759a
--- /dev/null
+++ b/doc/api/html/polar__fft__test_8c_source.html
@@ -0,0 +1,380 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - polar_fft_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">polar_fft_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="polar__fft__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: polar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">   78</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points  with weights  for the polar grid with  angles and  offsets.">polar_grid</a>(<span class="keywordtype">int</s [...]
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>       x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>       <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">return</span> T*R;                           </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">  100</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e" title="discrete polar FFT">polar_dft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span class="keyw [...]
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">int</span> M=T*R;                            </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points  with weights  for the polar grid with  angles and  offsets.">polar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   }</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   nfft_trafo_direct(&my_nfft_plan);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">  154</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839" title="NFFT-based polar FFT.">polar_fft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span class="k [...]
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordtype">int</span> M=T*R;                            </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points  with weights  for the polar grid with  angles and  offsets.">polar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">  218</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0" title="inverse NFFT-based polar FFT">inverse_polar_fft</a>(fftw_complex *f, <span class="keywordtype">int</span> T, <span class="keywordt [...]
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan;             </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordtype">int</span> l;                                </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="keywordtype">int</span> M=T*R;                            </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   N[0]=NN; n[0]=2*N[0];                 </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   N[1]=NN; n[1]=2*N[1];                 </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                   FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points  with weights  for the polar grid with  angles and  offsets.">polar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]    = f[j];</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]    = w[j];</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">if</span>(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];j++)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k++)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   {</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k]=</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         (sqrt(pow((<span class="keywordtype">double</span>)(j-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2),2.0)+pow((<span class="keywordtype">double</span>)(k-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2),2.0))</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>             >((double)(my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2))?0:1);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     l=1;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     f_hat[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">  314</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   <span class="keywordtype">int</span> N;                                </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordtype">int</span> T, R;                             </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   <span class="keywordtype">int</span> M;                                </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   fftw_complex *f_hat, *f, *f_direct, *f_tilde;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;                            </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="keywordtype">int</span> m = 1;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   <span class="keywordtype">double</span> temp1, temp2, E_max=0.0;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   FILE *fp1, *fp2;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordtype">char</span> filename[30];</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordflow">if</span>( argc!=4 )</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     printf(<span class="stringliteral">"polar_fft_test N T R \n"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     printf(<span class="stringliteral">"N          polar FFT of size NxN     \n"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     printf(<span class="stringliteral">"T          number of slopes          \n"</span>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     printf(<span class="stringliteral">"R          number of offsets         \n"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     exit(-1);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   N = atoi(argv[1]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   T = atoi(argv[2]);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   R = atoi(argv[3]);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   printf(<span class="stringliteral">"N=%d, polar grid with T=%d, R=%d => "</span>,N,T,R);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*5*(T/2)*(R/2)*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*(T/2)*(R/2)*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   f_hat    = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   f        = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*T*R);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   f_direct = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*T*R);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   f_tilde  = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   M=<a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points  with weights  for the polar grid with  angles and  offsets.">polar_grid</a>(T,R,x,w); printf(<span class="stringliteral">"M=%d.\n"</span>,M);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   fp1=fopen(<span class="stringliteral">"input_data_r.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   fp2=fopen(<span class="stringliteral">"input_data_i.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   <span class="keywordflow">if</span> (fp1==NULL)</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     fscanf(fp1,<span class="stringliteral">"%le "</span>,&temp1);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     fscanf(fp2,<span class="stringliteral">"%le "</span>,&temp2);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     f_hat[k]=temp1+ _Complex_I*temp2;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   fclose(fp1);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   fclose(fp2);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <a class="code" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e" title="discrete polar FFT">polar_dft</a>(f_hat,N,f_direct,T,R,m);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="comment">//  polar_fft(f_hat,N,f_direct,T,R,12);</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   printf(<span class="stringliteral">"\nTest of the polar FFT: \n"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   fp1=fopen(<span class="stringliteral">"polar_fft_error.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   <span class="keywordflow">for</span> (m=1; m<=12; m++)</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <a class="code" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839" title="NFFT-based polar FFT.">polar_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     E_max=X(error_l_infty_complex)(f_direct,f,M);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     printf(<span class="stringliteral">"m=%2d: E_max = %e\n"</span>,m,E_max);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   fclose(fp1);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   {</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     printf(<span class="stringliteral">"\nTest of the inverse polar FFT for m=%d: \n"</span>,m);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     sprintf(filename,<span class="stringliteral">"polar_ifft_error%d.dat"</span>,m);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     fp1=fopen(filename,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     <span class="keywordflow">for</span> (max_i=0; max_i<=100; max_i+=10)</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       <a class="code" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0" title="inverse NFFT-based polar FFT">inverse_polar_fft</a>(f_direct,T,R,f_tilde,N,max_i,m);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       <span class="comment">/* E_max=0.0;</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">      for(k=0;k<N*N;k++)</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">      {</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="comment">        temp = cabs((f_hat[k]-f_tilde[k])/f_hat[k]);</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">        if (temp>E_max) E_max=temp;</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>        E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>       printf(<span class="stringliteral">"%3d iterations: E_max = %e\n"</span>,max_i,E_max);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>       fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     fclose(fp1);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   }</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_direct);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_tilde);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/quadratureS2_8c_source.html b/doc/api/html/quadratureS2_8c_source.html
new file mode 100644
index 0000000..351d306
--- /dev/null
+++ b/doc/api/html/quadratureS2_8c_source.html
@@ -0,0 +1,1160 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - quadratureS2.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">quadratureS2.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: quadratureS2.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <time.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* Include NFFT 3 utilities headers. */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* Include NFFT 3 library header. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga7c6368b321bd9acd0149b030bb8275ed">   47</a></span> <span class="keyword">enum</span> <span class="keywordtype">boolean</span> {NO = 0, YES = 1};</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga47f3fd319121e75dc73cd720c536f3c7">   50</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#ga47f3fd319121e75dc73cd720c536f3c7" title="Enumeration for test modes.">testtype</a> {ERROR = 0, TIMING = 1};</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e">   53</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e" title="Enumeration for quadrature grid types.">gridtype</a> {GRID_GAUSS_LEGENDRE = 0, GRID_CLENSHAW_CURTIS = 1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   GRID_HEALPIX = 2, GRID_EQUIDISTRIBUTION = 3, GRID_EQUIDISTRIBUTION_UNIFORM = 4};</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#gaa7c9498e1664b6773fd8f9d850921e20">   57</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#gaa7c9498e1664b6773fd8f9d850921e20" title="Enumeration for test functions.">functiontype</a> {FUNCTION_RANDOM_BANDLIMITED = 0, FUNCTION_F1 = 1,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   FUNCTION_F2 = 2, FUNCTION_F3 = 3, FUNCTION_F4 = 4, FUNCTION_F5 = 5,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   FUNCTION_F6 = 6};</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga811fe196a5d9d37857c2f8adeeaac3c6">   62</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#ga811fe196a5d9d37857c2f8adeeaac3c6" title="TODO Add comment here.">modes</a> {USE_GRID = 0, RANDOM = 1};</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627">   72</a></span> <span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordtype">int</span> tc;                      </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">int</span> tc_max;                  </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span> *NQ;                     </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordtype">int</span> NQ_max;                  </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">int</span> *SQ;                     </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordtype">int</span> SQ_max;                  </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordtype">int</span> *RQ;                     </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordtype">int</span> iNQ;                     </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">int</span> iNQ_max;                 </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordtype">int</span> testfunction;            </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordtype">int</span> N;                       </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordtype">int</span> use_nfsft;               </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">int</span> use_nfft;                </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordtype">int</span> use_fpt;                 </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordtype">int</span> cutoff;                  </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordtype">double</span> <a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b" title="The threshold /f$/f$.">threshold</a>;            </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordtype">int</span> <a class="code" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e" title="Enumeration for quadrature grid types.">gridtype</a>;                </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordtype">int</span> repetitions;             </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordtype">int</span> mode;                    </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordtype">double</span> *w;                   </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordtype">double</span> *x_grid;              </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordtype">double</span> *x_compare;           </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordtype">double</span> _Complex *f_grid;             </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">double</span> _Complex *f_compare;          </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">double</span> _Complex *f;                  </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">double</span> _Complex *f_hat_gen;         </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">double</span> _Complex *f_hat;              </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan_adjoint;     </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;             </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan_gen;         </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">double</span> t_avg;                </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">double</span> err_infty_avg;        </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">double</span> err_2_avg;            </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">int</span> i;                       </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> k;                       </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">int</span> n;                       </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> d;                       </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> m_theta;                 </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">int</span> m_phi;                   </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> m_total;                 </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">double</span> *theta;               </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">double</span> *phi;                 </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   fftw_plan fplan;             </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="comment">//int nside;                   /**< The size parameter for the HEALPix grid   */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">int</span> d2;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">double</span> theta_s;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordtype">double</span> x1,x2,x3,temp;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordtype">int</span> m_compare;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan_adjoint_ptr;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan_ptr;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">double</span> *w_temp;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">int</span> testmode;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="comment">/* Read the number of testcases. */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   fscanf(stdin,<span class="stringliteral">"testcases=%d\n"</span>,&tc_max);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   fprintf(stdout,<span class="stringliteral">"%d\n"</span>,tc_max);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordflow">for</span> (tc = 0; tc < tc_max; tc++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/* Check if the fast transform shall be used. */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     fscanf(stdin,<span class="stringliteral">"nfsft=%d\n"</span>,&use_nfsft);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       <span class="comment">/* Check if the NFFT shall be used. */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       fscanf(stdin,<span class="stringliteral">"nfft=%d\n"</span>,&use_nfft);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       <span class="keywordflow">if</span> (use_nfft != NO)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         <span class="comment">/* Read the cut-off parameter. */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         fscanf(stdin,<span class="stringliteral">"cutoff=%d\n"</span>,&cutoff);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         fprintf(stdout,<span class="stringliteral">"%d\n"</span>,cutoff);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         cutoff = 1;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       <span class="comment">/* Check if the fast polynomial transform shall be used. */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       fscanf(stdin,<span class="stringliteral">"fpt=%d\n"</span>,&use_fpt);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_fpt);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       <span class="keywordflow">if</span> (use_fpt != NO)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         <span class="comment">/* Read the NFSFT threshold parameter. */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         fscanf(stdin,<span class="stringliteral">"threshold=%lf\n"</span>,&threshold);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         fprintf(stdout,<span class="stringliteral">"%lf\n"</span>,threshold);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         threshold = 1000.0;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       <span class="comment">/* Set dummy values. */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       use_nfft = NO;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       use_fpt = NO;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>       cutoff = 3;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       threshold = 1000.0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="comment">/* Read the testmode type. */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     fscanf(stdin,<span class="stringliteral">"testmode=%d\n"</span>,&testmode);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,testmode);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordflow">if</span> (testmode == ERROR)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       <span class="comment">/* Read the quadrature grid type. */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>       fscanf(stdin,<span class="stringliteral">"gridtype=%d\n"</span>,&gridtype);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,gridtype);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       <span class="comment">/* Read the test function. */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       fscanf(stdin,<span class="stringliteral">"testfunction=%d\n"</span>,&testfunction);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,testfunction);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       <span class="comment">/* Check if random bandlimited function has been chosen. */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       <span class="keywordflow">if</span> (testfunction == FUNCTION_RANDOM_BANDLIMITED)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         <span class="comment">/* Read the bandwidht. */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>         fscanf(stdin,<span class="stringliteral">"bandlimit=%d\n"</span>,&N);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>         fprintf(stdout,<span class="stringliteral">"%d\n"</span>,N);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         N = 1;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       <span class="comment">/* Read the number of repetitions. */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       fscanf(stdin,<span class="stringliteral">"repetitions=%d\n"</span>,&repetitions);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,repetitions);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       fscanf(stdin,<span class="stringliteral">"mode=%d\n"</span>,&mode);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       fprintf(stdout,<span class="stringliteral">"%d\n"</span>,mode);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         <span class="comment">/* Read the bandwidht. */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         fscanf(stdin,<span class="stringliteral">"points=%d\n"</span>,&m_compare);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         fprintf(stdout,<span class="stringliteral">"%d\n"</span>,m_compare);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         x_compare = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         d = 0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         <span class="keywordflow">while</span> (d < m_compare)</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>           x1 = 2.0*(((double)rand())/RAND_MAX) - 1.0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           x2 = 2.0*(((double)rand())/RAND_MAX) - 1.0;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>           x3 = 2.0*(((double)rand())/RAND_MAX) - 1.0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>           temp = sqrt(x1*x1+x2*x2+x3*x3);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>           <span class="keywordflow">if</span> (temp <= 1)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>           {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>             x_compare[2*d+1] = acos(x3);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>             <span class="keywordflow">if</span> (x_compare[2*d+1] == 0 || x_compare[2*d+1] == <a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>             {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>               x_compare[2*d] = 0.0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>             }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>             {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>               x_compare[2*d] = atan2(x2/sin(x_compare[2*d+1]),x1/sin(x_compare[2*d+1]));</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>             }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>             x_compare[2*d] *= 1.0/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>             x_compare[2*d+1] *= 1.0/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>             d++;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>           }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         f_compare = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="comment">/* Initialize maximum cut-off degree and grid size parameter. */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     NQ_max = 0;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     SQ_max = 0;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="comment">/* Read the number of cut-off degrees. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     fscanf(stdin,<span class="stringliteral">"bandwidths=%d\n"</span>,&iNQ_max);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     fprintf(stdout,<span class="stringliteral">"%d\n"</span>,iNQ_max);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="comment">/* Allocate memory for the cut-off degrees and grid size parameters. */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     NQ = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(iNQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     SQ = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(iNQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       RQ = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(iNQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="comment">/* Read the cut-off degrees and grid size parameters. */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">for</span> (iNQ = 0; iNQ < iNQ_max; iNQ++)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>       {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>         <span class="comment">/* Read cut-off degree and grid size parameter. */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         fscanf(stdin,<span class="stringliteral">"%d %d %d\n"</span>,&NQ[iNQ],&SQ[iNQ],&RQ[iNQ]);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         fprintf(stdout,<span class="stringliteral">"%d %d %d\n"</span>,NQ[iNQ],SQ[iNQ],RQ[iNQ]);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         NQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(NQ_max,NQ[iNQ]);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         SQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(SQ_max,SQ[iNQ]);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>       {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         <span class="comment">/* Read cut-off degree and grid size parameter. */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         fscanf(stdin,<span class="stringliteral">"%d %d\n"</span>,&NQ[iNQ],&SQ[iNQ]);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         fprintf(stdout,<span class="stringliteral">"%d %d\n"</span>,NQ[iNQ],SQ[iNQ]);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         NQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(NQ_max,NQ[iNQ]);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         SQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(SQ_max,SQ[iNQ]);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="comment">/* Do precomputation. */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="comment">//fprintf(stderr,"NFSFT Precomputation\n");</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     nfsft_precompute(NQ_max, threshold,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U)), 0U);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <span class="comment">/* Allocate data structures. */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(NQ_max)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(SQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       x_grid = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*SQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       <span class="keywordflow">for</span> (d = 0; d < SQ_max; d++)</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>       {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         f[d] = (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         x_grid[2*d] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         x_grid[2*d+1] = (((double)rand())/RAND_MAX) * 0.5;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="comment">//fprintf(stderr,"Entering loop\n");</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="comment">/* Process all cut-off bandwidths. */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">for</span> (iNQ = 0; iNQ < iNQ_max; iNQ++)</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         nfsft_init_guru(&plan,NQ[iNQ],SQ[iNQ], NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>           ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>           ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>           PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFTW_MEASURE | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>           cutoff);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = x_grid;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         t_avg = 0.0;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         <span class="keywordflow">for</span> (i = 0; i < RQ[iNQ]; i++)</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>           t0 = getticks();</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>           <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>           {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>             <span class="comment">/* Execute the adjoint NFSFT transformation. */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>             nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>           }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>           {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>             <span class="comment">/* Execute the adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>             nfsft_adjoint_direct(&plan);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>           }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>           t1 = getticks();</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>           t_avg += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         t_avg = t_avg/((double)RQ[iNQ]);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         fprintf(stdout,<span class="stringliteral">"%+le\n"</span>, t_avg);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         fprintf(stderr,<span class="stringliteral">"%d: %4d %4d %+le\n"</span>, tc, NQ[iNQ], SQ[iNQ], t_avg);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>       }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>       {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>         <span class="comment">/* Determine the maximum number of nodes. */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         <span class="keywordflow">switch</span> (gridtype)</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>           <span class="keywordflow">case</span> GRID_GAUSS_LEGENDRE:</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>             <span class="comment">/* Calculate grid dimensions. */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>             m_theta = SQ[iNQ] + 1;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>             m_phi = 2*SQ[iNQ] + 2;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>             m_total = m_theta*m_phi;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>           <span class="keywordflow">case</span> GRID_CLENSHAW_CURTIS:</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             <span class="comment">/* Calculate grid dimensions. */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>             m_theta = 2*SQ[iNQ] + 1;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>             m_phi = 2*SQ[iNQ] + 2;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>             m_total = m_theta*m_phi;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>           <span class="keywordflow">case</span> GRID_HEALPIX:</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>             m_theta = 1;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>             m_phi = 12*SQ[iNQ]*SQ[iNQ];</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>             m_total = m_theta * m_phi;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>             <span class="comment">//fprintf("HEALPix: SQ = %d, m_theta = %d, m_phi= %d, m");</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>           <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION:</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>           <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION_UNIFORM:</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>             m_theta = 2;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             <span class="comment">//fprintf(stderr,"ed: m_theta = %d\n",m_theta);</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>             <span class="keywordflow">for</span> (k = 1; k < SQ[iNQ]; k++)</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>             {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>               m_theta += (int)floor((2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/acos((cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])-</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                 cos(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])*cos(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ]))/</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                 (sin(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])*sin(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ]))));</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>               <span class="comment">//fprintf(stderr,"ed: m_theta = %d\n",m_theta);</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>             }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>             <span class="comment">//fprintf(stderr,"ed: m_theta final = %d\n",m_theta);</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>             m_phi = 1;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             m_total = m_theta * m_phi;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         <span class="comment">/* Allocate memory for data structures. */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         w = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_theta*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         x_grid = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         <span class="comment">//fprintf(stderr,"NQ = %d\n",NQ[iNQ]);</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keywordflow">switch</span> (gridtype)</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>           <span class="keywordflow">case</span> GRID_GAUSS_LEGENDRE:</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>             <span class="comment">//fprintf(stderr,"Generating grid for NQ = %d, SQ = %d\n",NQ[iNQ],SQ[iNQ]);</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>             <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>             <span class="comment">/* Read quadrature weights. */</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>             <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>             {</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>               fscanf(stdin,<span class="stringliteral">"%le\n"</span>,&w[k]);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>               w[k] *= (2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/((<span class="keywordtype">double</span>)m_phi);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>             }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>             <span class="comment">//fprintf(stderr,"Allocating theta and phi\n");</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>             <span class="comment">/* Allocate memory to store the grid's angles. */</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>             theta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_theta*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>             phi = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_phi*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>             <span class="comment">//if (theta == NULL || phi == NULL)</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>             <span class="comment">//{</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>               <span class="comment">//fprintf(stderr,"Couldn't allocate theta and phi\n");</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>               <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             <span class="comment">//}</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             <span class="comment">/* Read angles theta. */</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>             {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>               fscanf(stdin,<span class="stringliteral">"%le\n"</span>,&theta[k]);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             <span class="comment">/* Generate the grid angles phi. */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>             <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>             {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>               phi[n] = n/((double)m_phi);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>               phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>             }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>             <span class="comment">//fprintf(stderr,"Generating grid nodes\n");</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>             <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             <span class="comment">/* Generate the grid's nodes. */</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>             d = 0;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>             <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>             {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>               <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>               {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                 x_grid[2*d] = phi[n];</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                 x_grid[2*d+1] = theta[k];</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                 d++;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>               }</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>             }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>             <span class="comment">//fprintf(stderr,"Freeing theta and phi\n");</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>             <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             <span class="comment">/* Free the arrays for the grid's angles. */</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>             <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(theta);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>             <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(phi);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>           <span class="keywordflow">case</span> GRID_CLENSHAW_CURTIS:</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>             <span class="comment">/* Allocate memory to store the grid's angles. */</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>             theta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_theta*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>             phi = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_phi*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>             <span class="comment">/* Generate the grid angles theta. */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>             <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>             {</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>               theta[k] = k/((double)2*(m_theta-1));</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>             }</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>             <span class="comment">/* Generate the grid angles phi. */</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>             <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>             {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>               phi[n] = n/((double)m_phi);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>               phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>             }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>             <span class="comment">/* Generate quadrature weights. */</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>             fplan = fftw_plan_r2r_1d(SQ[iNQ]+1, w, w, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>             <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]+1; k++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>             {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>               w[k] = -2.0/(4*k*k-1);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>             }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>             fftw_execute(fplan);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>             w[0] *= 0.5;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>             <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]+1; k++)</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>             {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>               w[k] *= (2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/((<span class="keywordtype">double</span>)(m_theta-1)*m_phi);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>               w[m_theta-1-k] = w[k];</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>             }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>             fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>             <span class="comment">/* Generate the grid's nodes. */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>             d = 0;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>             <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>             {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>               <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>               {</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>                 x_grid[2*d] = phi[n];</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                 x_grid[2*d+1] = theta[k];</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>                 d++;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>               }</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>             <span class="comment">/* Free the arrays for the grid's angles. */</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>             <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(theta);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>             <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(phi);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>           <span class="keywordflow">case</span> GRID_HEALPIX:</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>             d = 0;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>             <span class="keywordflow">for</span> (k = 1; k <= SQ[iNQ]-1; k++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>             {</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>               <span class="keywordflow">for</span> (n = 0; n <= 4*k-1; n++)</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>               {</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                 x_grid[2*d+1] = 1 - (k*k)/((<span class="keywordtype">double</span>)(3.0*SQ[iNQ]*SQ[iNQ]));</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                 x_grid[2*d] =  ((n+0.5)/(4*k));</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                 x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                 d++;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>               }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>             }</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>             d2 = d-1;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>             <span class="keywordflow">for</span> (k = SQ[iNQ]; k <= 3*SQ[iNQ]; k++)</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>               <span class="keywordflow">for</span> (n = 0; n <= 4*SQ[iNQ]-1; n++)</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>               {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                 x_grid[2*d+1] = 2.0/(3*SQ[iNQ])*(2*SQ[iNQ]-k);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                 x_grid[2*d] = (n+((k%2==0)?(0.5):(0.0)))/(4*SQ[iNQ]);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                 x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>                 d++;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>               }</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             }</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>             <span class="keywordflow">for</span> (k = 1; k <= SQ[iNQ]-1; k++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>             {</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>               <span class="keywordflow">for</span> (n = 0; n <= 4*k-1; n++)</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>               {</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                 x_grid[2*d+1] = -x_grid[2*d2+1];</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                 x_grid[2*d] =  x_grid[2*d2];</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                 d++;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                 d2--;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>               }</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>             }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>             {</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>               x_grid[2*d+1] = acos(x_grid[2*d+1])/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>             }</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>             w[0] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>           <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION:</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>           <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION_UNIFORM:</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             <span class="comment">/* TODO Compute the weights. */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>             <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>             {</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>               w_temp = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((SQ[iNQ]+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>               fplan = fftw_plan_r2r_1d(SQ[iNQ]/2+1, w_temp, w_temp, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>               <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]/2+1; k++)</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>               {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>                 w_temp[k] = -2.0/(4*k*k-1);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>               }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>               fftw_execute(fplan);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>               w_temp[0] *= 0.5;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>               <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]/2+1; k++)</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>               {</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                 w_temp[k] *= (2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/((<span class="keywordtype">double</span>)(SQ[iNQ]));</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                 w_temp[SQ[iNQ]-k] = w_temp[k];</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>               }</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>               fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>             }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>             d = 0;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>             x_grid[2*d] = -0.5;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>             x_grid[2*d+1] = 0.0;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>             <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>             {</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>               w[d] = w_temp[0];</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>             }</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>             {</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>               w[d] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>             }</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>             d = 1;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>             x_grid[2*d] = -0.5;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>             x_grid[2*d+1] = 0.5;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>             <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>             {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>               w[d] = w_temp[SQ[iNQ]];</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>             }</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>             {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>               w[d] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>             }</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>             d = 2;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>             <span class="keywordflow">for</span> (k = 1; k < SQ[iNQ]; k++)</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>             {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>               theta_s = (double)k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ];</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>               M = (int)floor((2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/acos((cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])-</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                 cos(theta_s)*cos(theta_s))/(sin(theta_s)*sin(theta_s))));</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>               <span class="keywordflow">for</span> (n = 0; n < M; n++)</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>               {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                 x_grid[2*d] = (n + 0.5)/M;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>                 x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                 x_grid[2*d+1] = theta_s/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                 <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                 {</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                   w[d] = w_temp[k]/((double)(M));</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                 }</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                 {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                   w[d] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                 }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                 d++;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>               }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>             }</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>             <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>             {</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>               <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w_temp);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>             }</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>           <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         }</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         <span class="comment">/* Allocate memory for grid values. */</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         f_grid = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>         <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         {</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>           m_compare = m_total;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>           f_compare = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>           x_compare = x_grid;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>           f = f_grid;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         <span class="comment">//fprintf(stderr,"Generating test function\n");</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>         <span class="keywordflow">switch</span> (testfunction)</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>           <span class="keywordflow">case</span> FUNCTION_RANDOM_BANDLIMITED:</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>             f_hat_gen = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(N)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>             <span class="comment">//fprintf(stderr,"Generating random test function\n");</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>             <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>             <span class="comment">/* Generate random function samples by sampling a bandlimited</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment">             * function. */</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>             nfsft_init_guru(&plan_gen,N,m_total, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>               ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>               ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>               ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>               FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>             plan_gen.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat_gen;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>             plan_gen.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = x_grid;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>             plan_gen.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_grid;</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>             nfsft_precompute_x(&plan_gen);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>             <span class="keywordflow">for</span> (k = 0; k < plan_gen.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>             {</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>               f_hat_gen[k] = 0.0;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>             }</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>             <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>             {</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>               <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>               {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>                 f_hat_gen[NFSFT_INDEX(k,n,&plan_gen)] =</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>                 (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>               }</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>             }</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>             <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>             {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>               <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>               nfsft_trafo(&plan_gen);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>             }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>             {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>               <span class="comment">/* Execute the direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>               nfsft_trafo_direct(&plan_gen);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>             }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>             nfsft_finalize(&plan_gen);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>             {</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>               nfsft_init_guru(&plan_gen,N,m_compare, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>                 ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                 ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                 ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>                 FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>               plan_gen.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat_gen;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>               plan_gen.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = x_compare;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>               plan_gen.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_compare;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>               nfsft_precompute_x(&plan_gen);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>               <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>               {</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                 <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                 nfsft_trafo(&plan_gen);</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>               }</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>               <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>               {</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                 <span class="comment">/* Execute the direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                 nfsft_trafo_direct(&plan_gen);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>               }</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>               nfsft_finalize(&plan_gen);</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>             }</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>             {</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>             }</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat_gen);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>           <span class="keywordflow">case</span> FUNCTION_F1:</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>             {</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>               x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>               x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>               x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>               f_grid[d] = x1*x2*x3;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>             }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>               {</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                 x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                 x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                 x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>                 f_compare[d] = x1*x2*x3;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>               }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>             }</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>             {</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>             }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>           <span class="keywordflow">case</span> FUNCTION_F2:</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>             {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>               x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>               x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>               x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>               f_grid[d] = 0.1*exp(x1+x2+x3);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>             }</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>             {</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>               {</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>                 x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                 x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                 x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                 f_compare[d] = 0.1*exp(x1+x2+x3);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>               }</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>             }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>             {</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>             }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>           <span class="keywordflow">case</span> FUNCTION_F3:</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>             {</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>               x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>               x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>               x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>               temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>               f_grid[d] = 0.1*temp;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>             }</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             {</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>               {</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>                 x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>                 x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>                 x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>                 temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>                 f_compare[d] = 0.1*temp;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>               }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>             }</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>             {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>             }</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>           <span class="keywordflow">case</span> FUNCTION_F4:</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>             {</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>               x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>               x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>               x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>               temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>               f_grid[d] = 1.0/(temp);</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>             }</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>             {</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>               {</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>                 x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>                 x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                 x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>                 temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>                 f_compare[d] = 1.0/(temp);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>               }</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>             }</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>             {</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>             }</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>           <span class="keywordflow">case</span> FUNCTION_F5:</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>             {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>               x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>               x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>               x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>               temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>               f_grid[d] = 0.1*sin(1+temp)*sin(1+temp);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>             }</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>             {</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>               {</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>                 x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                 x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>                 x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>                 temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>                 f_compare[d] = 0.1*sin(1+temp)*sin(1+temp);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>               }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>             }</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>             {</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>             }</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>           <span class="keywordflow">case</span> FUNCTION_F6:</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>             {</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>               <span class="keywordflow">if</span> (x_grid[2*d+1] <= 0.25)</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>               {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>                 f_grid[d] = 1.0;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>               }</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>               <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>               {</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>                 f_grid[d] = 1.0/(sqrt(1+3*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_grid[2*d+1])*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_grid[2*d+1])));</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>               }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>             }</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>             {</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>               {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>                 <span class="keywordflow">if</span> (x_compare[2*d+1] <= 0.25)</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>                 {</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>                   f_compare[d] = 1.0;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>                 }</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>                 {</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                   f_compare[d] = 1.0/(sqrt(1+3*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_compare[2*d+1])*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_compare[2*d+1])));</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>                 }</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>               }</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>             }</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>             {</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>             }</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>           <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>             <span class="comment">//fprintf(stderr,"Generating one function\n");</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>             <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>             <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>             {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>               f_grid[d] = 1.0;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>             }</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>             <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>             {</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>               <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>               {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>                 f_compare[d] = 1.0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>               }</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>             }</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>             {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>               memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>             }</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         }</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         <span class="comment">//fprintf(stderr,"Initializing trafo\n");</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>         <span class="comment">/* Init transform plan. */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>         nfsft_init_guru(&plan_adjoint,NQ[iNQ],m_total, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>           ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>           ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>           ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>           FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>         plan_adjoint_ptr = &plan_adjoint;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>         <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>         {</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>           nfsft_init_guru(&plan,NQ[iNQ],m_compare, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>             ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>             ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>             ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>             FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>           plan_ptr = &plan;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         }</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>         {</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>           plan_ptr = &plan_adjoint;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>         }</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>         f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(NQ[iNQ])*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>         plan_adjoint_ptr-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         plan_adjoint_ptr-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = x_grid;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>         plan_adjoint_ptr-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_grid;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>         plan_ptr-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>         plan_ptr-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes  for , ">x</a> = x_compare;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>         plan_ptr-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>         <span class="comment">//fprintf(stderr,"Precomputing for x\n");</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>         nfsft_precompute_x(plan_adjoint_ptr);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>         <span class="keywordflow">if</span> (plan_adjoint_ptr != plan_ptr)</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         {</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>           nfsft_precompute_x(plan_ptr);</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         }</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>         <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>         t_avg = 0.0;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>         err_infty_avg = 0.0;</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         err_2_avg = 0.0;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>         <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         <span class="keywordflow">for</span> (i = 0; i < 1<span class="comment">/*repetitions*/</span>; i++)</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>         {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>           <span class="comment">//fprintf(stderr,"Copying original values\n");</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>           <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>           <span class="comment">/* Copy exact funtion values to working array. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>           <span class="comment">//memcpy(f,f_grid,m_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>           <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>           t0 = getticks();</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> </div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>           <span class="comment">//fprintf(stderr,"Multiplying with quadrature weights\n");</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>           <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>           <span class="comment">/* Multiplication with the quadrature weights. */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>           <span class="comment">/*fprintf(stderr,"\n");*/</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>           d = 0;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>           <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>           {</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>             <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>             {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>               <span class="comment">/*fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le,  \t w[%d] = %le\n",</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> <span class="comment">              d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]),k,</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">              w[k]);*/</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>               f_grid[d] *= w[k];</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>               d++;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>             }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>           }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>           t1 = getticks();</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>           t_avg += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>           t0 = getticks();</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>           <span class="comment">/*fprintf(stderr,"\n");</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment">          d = 0;</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">          for (d = 0; d < grid_total; d++)</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">          {</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">            fprintf(stderr,"f[%d] = %le + I*%le, theta[%d] = %le, phi[%d] = %le\n",</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">                    d,creal(f[d]),cimag(f[d]),d,x[2*d+1],d,x[2*d]);</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment">          }*/</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>           <span class="comment">//fprintf(stderr,"Executing adjoint\n");</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>           <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>           <span class="comment">/* Check if the fast NFSFT algorithm shall be tested. */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>           <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>           {</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>             <span class="comment">/* Execute the adjoint NFSFT transformation. */</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>             nfsft_adjoint(plan_adjoint_ptr);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>           }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>           {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>             <span class="comment">/* Execute the adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>             nfsft_adjoint_direct(plan_adjoint_ptr);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>           }</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>           <span class="comment">/* Multiplication with the Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>           <span class="comment">/*for (k = 0; k <= m[im]; k++)</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment">          {</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">            for (n = -k; n <= k; n++)</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="comment">              fprintf(stderr,"f_hat[%d,%d] = %le\t + I*%le\n",k,n,</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment">                      creal(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]),</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment">                      cimag(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]));</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment">            }</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment">          }*/</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>           <span class="comment">//fprintf(stderr,"Executing trafo\n");</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>           <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>           <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>           {</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>             <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>             nfsft_trafo(plan_ptr);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>           }</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>           {</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>             <span class="comment">/* Execute the direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>             nfsft_trafo_direct(plan_ptr);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>           }</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>           t1 = getticks();</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>           t_avg += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>           <span class="comment">//fprintf(stderr,"Finalizing\n");</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>           <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>           <span class="comment">/* Finalize the NFSFT plans */</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>           nfsft_finalize(plan_adjoint_ptr);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>           <span class="keywordflow">if</span> (plan_ptr != plan_adjoint_ptr)</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>           {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>             nfsft_finalize(plan_ptr);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>           }</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>           <span class="comment">/* Free data arrays. */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x_grid);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>           err_infty_avg += X(error_l_infty_complex)(f, f_compare, m_compare);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>           err_2_avg += X(error_l_2_complex)(f, f_compare, m_compare);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>           <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_grid);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>           <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>           {</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>           }</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>           {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>             <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_compare);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>           }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>           <span class="comment">/*for (d = 0; d < m_total; d++)</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">          {</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment">            fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le\n",</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment">              d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]));</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="comment">          }*/</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>         }</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>         <span class="comment">//fprintf(stderr,"Calculating the error\n");</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>         <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>         <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>         t_avg = t_avg/((double)repetitions);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>         <span class="comment">/* Calculate the average error. */</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>         err_infty_avg = err_infty_avg/((double)repetitions);</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         <span class="comment">/* Calculate the average error. */</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         err_2_avg = err_2_avg/((double)repetitions);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>         <span class="comment">/* Print out the error measurements. */</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>         fprintf(stdout,<span class="stringliteral">"%+le %+le %+le\n"</span>, t_avg, err_infty_avg, err_2_avg);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>         fprintf(stderr,<span class="stringliteral">"%d: %4d %4d %+le %+le %+le\n"</span>, tc, NQ[iNQ], SQ[iNQ],</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>           t_avg, err_infty_avg, err_2_avg);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>       }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     } <span class="comment">/* for (im = 0; im < im_max; im++) - Process all cut-off</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment">       * bandwidths.*/</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     fprintf(stderr,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     <span class="comment">/* Delete precomputed data. */</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     nfsft_forget();</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>     <span class="comment">/* Free memory for cut-off bandwidths and grid size parameters. */</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(NQ);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(SQ);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(RQ);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     }</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     {</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x_compare);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_compare);</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>       <span class="comment">/* Allocate data structures. */</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x_grid);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>     }</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>   } <span class="comment">/* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>   <span class="comment">/* Return exit code for successful run. */</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> }</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/radon_8c.html b/doc/api/html/radon_8c.html
new file mode 100644
index 0000000..78be6b7
--- /dev/null
+++ b/doc/api/html/radon_8c.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - radon.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">radon.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based discrete Radon transform.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="radon_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0091bbc07c9570a2ab0dac372c2104f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0091bbc07c9570a2ab0dac372c2104f1"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">KERNEL</a>(r)   (1.0-fabs((double)(r))/((double)R/2))</td></tr>
+<tr class="memdesc:a0091bbc07c9570a2ab0dac372c2104f1"><td class="mdescLeft"> </td><td class="mdescRight">define weights of kernel function for discrete Radon transform <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307b67b4c00a1c756f140c7fa831cdae"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the polar grid with T angles and R offsets <br/></td></tr>
+<tr class="memitem:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the linogram grid with T slopes and R offsets <br/></td></tr>
+<tr class="memitem:a01ba457f6edb3193453204cc702ac5ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01ba457f6edb3193453204cc702ac5ca"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">Radon_trafo</a> (int(*gridfcn)(), int T, int R, double *f, int NN, double *Rf)</td></tr>
+<tr class="memdesc:a01ba457f6edb3193453204cc702ac5ca"><td class="mdescLeft"> </td><td class="mdescRight">computes the NFFT-based discrete Radon transform of f on the grid given by gridfcn() with T angles and R offsets <br/></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:a3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">simple test program for the discrete Radon transform <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based discrete Radon transform. </p>
+<p>Computes the discrete Radon transform </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ R_{\theta_t} f\left(\frac{s}{R}\right) = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k} \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)} \, \mathrm{e}^{2\pi\mathrm{i} r s / R} \qquad(t \in I_T, s \in I_R). \]" src="form_134.png"/>
+</p>
+<p> by taking the 2D-NFFT of <img class="formulaInl" alt="$f_k$" src="form_137.png"/> ( <img class="formulaInl" alt="$k \in I_N^2$" src="form_138.png"/>) at the points <img class="formulaInl" alt="$\frac{r}{R}\theta_t$" src="form_135.png"/> of the polar or linogram grid followed by 1D-iFFTs for every direction <img class="formulaInl" alt="$t \in T$" src="form_139.png"/>, where <img class="formulaInl" alt="$w_r$" src="form_136.png"/> are the weights of the Dirichlet- or Fejer-kernel. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2005 </dd></dl>
+
+<p>Definition in file <a class="el" href="radon_8c_source.html">radon.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/radon_8c_source.html b/doc/api/html/radon_8c_source.html
new file mode 100644
index 0000000..6502a10
--- /dev/null
+++ b/doc/api/html/radon_8c_source.html
@@ -0,0 +1,266 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - radon.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">radon.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="radon_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: radon.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*#define KERNEL(r) 1.0 */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">   55</a></span> <span class="preprocessor">#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">   60</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtype">int</span> R, <span c [...]
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">   84</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtype">int</span> R, < [...]
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       <span class="keywordflow">if</span>(t<0)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>       {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)4*(t+T/4)/T*r/R;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         x[2*((t+T/2)*R+(r+R/2))+0] = -(<span class="keywordtype">double</span>)4*(t-T/4)/T*r/R;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>       }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">  116</a></span> <span class="keywordtype">int</span> <a class="code" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca" title="computes the NFFT-based discrete Radon transform of f on the grid given by gridfcn() with T angles an...">Radon_trafo</a>(<span class="keywordtype">int</span> (*gridfcn)(), <span class="keywordtype">int</span> T, <span class [...]
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span> j,k;                              </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan;               </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   fftw_complex *<a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>;                    </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   fftw_plan my_fftw_plan;               </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> t,r;                              </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">double</span> *x, *w;                        </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> M=T*R;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   N[0]=NN; n[0]=2*N[0];</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   N[1]=NN; n[1]=2*N[1];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   fft = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(R*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_BACKWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                  FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   gridfcn(T,R,x,w);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f[k] + _Complex_I*0.0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordflow">for</span>(t=0; t<T; t++)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     fft[0]=0.0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">for</span>(r=-R/2+1; r<R/2; r++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>       fft[r+R/2] = <a class="code" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1" title="define weights of kernel function for discrete Radon transform">KERNEL</a>(r)*my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[t*R+(r+R/2)];</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">for</span>(r=0; r<R; r++)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       Rf[t*R+r] = creal(fft[r])/R;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">/*    for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">      Rf[t*R+(r+R/2)] = creal(cexp(-I*PI*r)*fft[r]);</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">    for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">      Rf[t*R+r] = creal(cexp(-I*PI*r)*fft[r+R/2]);</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   fftw_destroy_plan(my_fftw_plan);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(fft);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="code" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">  207</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   int (*gridfcn)();                     </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordtype">int</span> T, R;                             </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   FILE *fp;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordtype">int</span> N;                                </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordtype">double</span> *f, *Rf;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">if</span>( argc!=5 )</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     printf(<span class="stringliteral">"radon gridfcn N T R\n"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     printf(<span class="stringliteral">"gridfcn    \"polar\" or \"linogram\" \n"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     printf(<span class="stringliteral">"N          image size NxN            \n"</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     printf(<span class="stringliteral">"T          number of slopes          \n"</span>);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     printf(<span class="stringliteral">"R          number of offsets         \n"</span>);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     exit(-1);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">if</span> (strcmp(argv[1],<span class="stringliteral">"polar"</span>) == 0)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     gridfcn = <a class="code" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     gridfcn = <a class="code" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   N = atoi(argv[2]);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   T = atoi(argv[3]);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   R = atoi(argv[4]);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="comment">/*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   f   = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*N*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   Rf  = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   fp=fopen(<span class="stringliteral">"input_data.bin"</span>,<span class="stringliteral">"rb"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   fread(f,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),N*N,fp);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   fclose(fp);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   <a class="code" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca" title="computes the NFFT-based discrete Radon transform of f on the grid given by gridfcn() with T angles an...">Radon_trafo</a>(gridfcn,T,R,f,N,Rf);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   fp=fopen(<span class="stringliteral">"sinogram_data.bin"</span>,<span class="stringliteral">"wb+"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   fwrite(Rf,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),T*R,fp);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   fclose(fp);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(Rf);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__2d1d_8c_source.html b/doc/api/html/reconstruct__data__2d1d_8c_source.html
new file mode 100644
index 0000000..9e89e08
--- /dev/null
+++ b/doc/api/html/reconstruct__data__2d1d_8c_source.html
@@ -0,0 +1,255 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_2d1d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">reconstruct_data_2d1d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68">   40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68" title="reconstruct makes an inverse 2d-nfft for every slice">reconstruct</a>(<span class="keywordtype">cha [...]
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">int</span> j,k,l,z;                  <span class="comment">/* some variables  */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> real,imag;             <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;            <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   FILE* fin;                    <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordtype">int</span> my_N[2],my_n[2];          <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordtype">double</span> tmp, epsilon=0.0000003;<span class="comment">/* tmp to read the obsolent z from the input file</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                                   epsilon is the break criterium for</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                                   the iteration */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP; <span class="comment">/* flags for the infft */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   my_N[0]=N;my_n[0]=ceil(N*1.2);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                          MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                         FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                         FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* set the flags for the infft*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     fclose(fin);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="comment">/* For every Layer*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">for</span>(z=0;z<Z;z++) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="comment">/* read x,y,freal and fimag from the knots */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>       fscanf(fin,<span class="stringliteral">"%le %le %le %le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1], &t [...]
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       &real,&imag);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>       my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="comment">/* precompute psi if set just one time because the knots equal each plane */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="comment">/* precompute full psi if set just one time because the knots equal each plane */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     {</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>       <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       fprintf(stderr,<span class="stringliteral">"%e,  %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>       iteration*z+l+1,iteration*Z);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       <span class="comment">/* write every slice in the memory.</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">      here we make an fftshift direct */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   fclose(fin);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="comment">/* finalize the infft */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="comment">/* finalize the nfft */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877">  156</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.dat for th [...]
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   FILE* fout_real;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   FILE* fout_imag;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="keywordflow">for</span>(i=0;i<Z;i++) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     fprintf(fout_real,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     fprintf(fout_imag,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   fftw_complex *mem;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   fftw_plan plan;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordtype">int</span> N,M,Z;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">if</span> (argc <= 6) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     printf(<span class="stringliteral">"usage: ./reconstruct FILENAME N M Z ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   N=atoi(argv[2]);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   M=atoi(argv[3]);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   Z=atoi(argv[4]);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="comment">/* Allocate memory to hold every layer in memory after the</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">  2D-infft */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   mem = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="comment">/* Create plan for the 1d-ifft */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   plan = fftw_plan_many_dft(1, &Z, N*N,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                   mem, NULL,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                                   N*N, 1,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                                   mem, NULL,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                   N*N,1 ,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                                   FFTW_BACKWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="comment">/* execute the 2d-infft's */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68" title="reconstruct makes an inverse 2d-nfft for every slice">reconstruct</a>(argv[1],N,M,Z,atoi(argv[5]),atoi(argv[6]),mem);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="comment">/* execute the 1d-fft's */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   fftw_execute(plan);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="comment">/* write the memory back in files */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part">print</a>(N,M,Z, mem);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(mem);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__2d_8c_source.html b/doc/api/html/reconstruct__data__2d_8c_source.html
new file mode 100644
index 0000000..17f106b
--- /dev/null
+++ b/doc/api/html/reconstruct__data__2d_8c_source.html
@@ -0,0 +1,216 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_2d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">reconstruct_data_2d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c">   41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,< [...]
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">int</span> j,k,l;                    <span class="comment">/* some variables  */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> real,imag,t;           <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;            <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE* fin;                    <span class="comment">/* input file                         */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   FILE* fout_real;              <span class="comment">/* output file                        */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   FILE* fout_imag;              <span class="comment">/* output file                        */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">int</span> my_N[2],my_n[2];          <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordtype">double</span> epsilon=0.0000003;     <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                   the iteration */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP;  <span class="comment">/* flags for the infft*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">int</span> m = 6;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">double</span> <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = 2.0;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   my_N[0]=N; my_n[0]=ceil(N*alpha);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   my_N[1]=N; my_n[1]=ceil(N*alpha);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   nfft_init_guru(&my_plan, 2, my_N, M, my_n, m, PRE_PHI_HUT| PRE_PSI|</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                          MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                          FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                          FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="comment">/* set the flags for the infft*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)&my_plan, infft_flags );</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     fclose(fin);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>       }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="comment">/* read x,y,freal and fimag from the knots */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     fscanf(fin,<span class="stringliteral">"%le %le %le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     &real,&imag);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   fclose(fin);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="comment">/* precompute full psi */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>       nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   t0 = getticks();</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     fprintf(stderr,<span class="stringliteral">"%e,  %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     l+1,iteration);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   t1 = getticks();</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   t=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     fprintf(fout_real,<span class="stringliteral">"%le "</span>, creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     fprintf(fout_imag,<span class="stringliteral">"%le "</span>, cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="comment">/* finalize the infft */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="comment">/* finalize the nfft */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     printf(<span class="stringliteral">"usage: ./reconstruct_data_2d FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__3d_8c_source.html b/doc/api/html/reconstruct__data__3d_8c_source.html
new file mode 100644
index 0000000..ad34c42
--- /dev/null
+++ b/doc/api/html/reconstruct__data__3d_8c_source.html
@@ -0,0 +1,214 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_3d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">reconstruct_data_3d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d">   40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d" title="reconstruct makes an inverse 3d-nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,< [...]
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">int</span> j,k,z,l;                  <span class="comment">/* some variables  */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> real,imag;             <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan;            <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;          <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   FILE* fin;                    <span class="comment">/* input file                         */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   FILE* fout_real;              <span class="comment">/* output file (real part) */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE* fout_imag;              <span class="comment">/* output file (imag part) */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];          <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">double</span> epsilon=0.0000003;     <span class="comment">/* tmp to read the obsolent z from 700.acs</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                   epsilon is a the break criterion for</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                   the iteration */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP;  <span class="comment">/* flags for the infft */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="comment">/* initialise my_plan, specific.</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">     we don't precompute psi */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   my_N[0]=Z; my_n[0]=ceil(Z*1.2);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   my_N[2]=N; my_n[2]=ceil(N*1.2);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                       PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* precompute lin psi */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     fclose(fin);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordflow">for</span>(z=0;z<N;z++) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordtype">int</span> z2= z-N/2;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2+z2*z2);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[z*N*N+j*N+k]=0.0;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[z*N*N+j*N+k]=1.0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="comment">/* open the output files */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="comment">/* read x,y,freal and fimag from the knots */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     fscanf(fin,<span class="stringliteral">"%le %le %le %le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2], &my_ [...]
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     &real,&imag);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="comment">/* precompute full psi */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     fprintf(stderr,<span class="stringliteral">"%e,  %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     l+1,iteration);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">for</span>(l=0;l<Z;l++)</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       <span class="comment">/* write every Layer in the files */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[ k+N*N*l ]));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[ k+N*N*l ]));</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     fprintf(fout_real,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     fprintf(fout_imag,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">if</span> (argc <= 6) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     printf(<span class="stringliteral">"usage: ./reconstruct3D FILENAME N M Z ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <a class="code" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d" title="reconstruct makes an inverse 3d-nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__inh__2d1d_8c_source.html b/doc/api/html/reconstruct__data__inh__2d1d_8c_source.html
new file mode 100644
index 0000000..82359d6
--- /dev/null
+++ b/doc/api/html/reconstruct__data__inh__2d1d_8c_source.html
@@ -0,0 +1,272 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_inh_2d1d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">reconstruct_data_inh_2d1d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> M,<span class="keywordtype">int</span> ite [...]
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> t,real,imag;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> w,epsilon=0.0000003;     <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                   the iteration */</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">double</span> W,T;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       min_time = time;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       max_time = time;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   fclose(ftime);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       min_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>       max_inh = w;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   fclose(finh);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+(m)/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/* N3 has to be even */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordflow">if</span>(N3%2!=0)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     N3++;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   T=((max_time-min_time)/2.0)/(0.5-((double) (m))/N3);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   W=N3/T;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   my_N[0]=N; my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   my_N[2]=N3; my_n[2]=N3;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan.plan);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     fw=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         fscanf(fw,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     fclose(fw);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   fp=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     fscanf(fp,<span class="stringliteral">"%le %le %le %le"</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[2*j+1],& [...]
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=real+ _Complex_I*imag;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.t[j]);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     my_plan.t[j] = (my_plan.t[j]-Ts)/T;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   fclose(fp);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   fclose(ftime);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   fclose(finh);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       nfft_precompute_full_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]=0.0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   t0 = getticks();</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     fprintf(stderr,<span class="stringliteral">"%e,  %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     l+1,iteration);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   t1 = getticks();</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="comment">/* Verschiebung wieder herausrechnen */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]*=cexp(-2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   mri_inh_2d1d_finalize(&my_plan);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     printf(<span class="stringliteral">"usage: ./reconstruct_data_inh_2d1d FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__inh__3d_8c_source.html b/doc/api/html/reconstruct__data__inh__3d_8c_source.html
new file mode 100644
index 0000000..36cc0fb
--- /dev/null
+++ b/doc/api/html/reconstruct__data__inh__3d_8c_source.html
@@ -0,0 +1,266 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_inh_3d.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">reconstruct_data_inh_3d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> M,<span class="keywordtype">int</span> ite [...]
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span> t,real,imag;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">double</span> w,epsilon=0.0000003;     <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                   the iteration */</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                       MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       min_time = time;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       max_time = time;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   fclose(ftime);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       min_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>       max_inh = w;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   fclose(finh);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/* N3 has to be even */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordflow">if</span>(N3%2!=0)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     N3++;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   W= <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))/(0.5-((double) m)/N3);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   my_N[0]=N;my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   my_N[2]=N3; my_n[2]=ceil(N3*sigma);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                       FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     fw=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         fscanf(fw,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     fclose(fw);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   fp=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     fscanf(fp,<span class="stringliteral">"%le %le %le %le"</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+1],& [...]
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=real+ _Complex_I*imag;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2] = (my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[3*j+2]-Ts)*W/N3;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   fclose(fp);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   fclose(ftime);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   fclose(finh);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       nfft_precompute_full_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]=0.0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   t0 = getticks();</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     fprintf(stderr,<span class="stringliteral">"%e,  %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     l+1,iteration);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   t1 = getticks();</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">/* Verschiebung wieder herausrechnen */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]*=cexp(-2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   mri_inh_3d_finalize(&my_plan);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     printf(<span class="stringliteral">"usage: ./reconstruct_data_inh_3d FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__inh__nnfft_8c_source.html b/doc/api/html/reconstruct__data__inh__nnfft_8c_source.html
new file mode 100644
index 0000000..79059dd
--- /dev/null
+++ b/doc/api/html/reconstruct__data__inh__nnfft_8c_source.html
@@ -0,0 +1,282 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - reconstruct_data_inh_nnfft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">reconstruct_data_inh_nnfft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: reconstruct_data_inh_nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c">   42</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct">reconstruct</a>(<span class="keywordtype">char</span>* filename,<span class="k [...]
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">int</span> j,k,l;                    <span class="comment">/* some variables  */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;            <span class="comment">/* plan for the two dimensional nfft  */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;          <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   FILE* fin;                    <span class="comment">/* input file                         */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   FILE* finh;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   FILE* ftime;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   FILE* fout_real;              <span class="comment">/* output file                        */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   FILE* fout_imag;              <span class="comment">/* output file                        */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordtype">int</span> my_N[3],my_n[3];          <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">double</span> t,epsilon=0.0000003;     <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                   the iteration */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP; <span class="comment">/* flags for the infft*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">double</span> real,imag;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">double</span> *w;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   w = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>       min_time = time;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       max_time = time;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   fclose(ftime);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     fscanf(finh,<span class="stringliteral">"%le "</span>,&w[j]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">if</span>(w[j]<min_inh)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       min_inh = w[j];</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordflow">if</span>(w[j]>max_inh)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       max_inh = w[j];</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   fclose(finh);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0)*4);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   W=<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*2.0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   fprintf(stderr,<span class="stringliteral">"3:  %i %e %e %e %e %e %e\n"</span>,N3,W,min_inh,max_inh,min_time,max_time,Ts);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   my_N[0]=N;my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   my_N[2]=N3; my_n[2]=ceil(N3*sigma);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   nnfft_init_guru(&my_plan, 3, N*N, M, my_N,my_n,m,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F );</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="comment">/* set the flags for the infft*/</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     fclose(fin);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>           my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     fscanf(fin,<span class="stringliteral">"%le %le %le %le "</span>,&my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+0],&my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+1],&real,&imag);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=real+ _Complex_I*imag;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+2]);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+2] = (my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+2]-Ts)*W/N3;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">for</span>(l=0;l<N;l++)</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[3*(N*j+l)+0]=(((<span class="keywordtype">double</span>) j) -(((<span class="keywordtype">double</span>) N)/2.0))/((<span class="keywordtype">double</span>) N);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[3*(N*j+l)+1]=(((<span class="keywordtype">double</span>) l) -(((<span class="keywordtype">double</span>) N)/2.0))/((<span class="keywordtype">double</span>) N);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[3*(N*j+l)+2] = w[N*j+l]/W ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   t0 = getticks();</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     fprintf(stderr,<span class="stringliteral">"%e,  %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     l+1,iteration);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   t1 = getticks();</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]*=cexp(2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*w[k]);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     fprintf(fout_real,<span class="stringliteral">"%le "</span>, creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     fprintf(fout_imag,<span class="stringliteral">"%le "</span>, cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   fclose(fout_real);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   fclose(fout_imag);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="comment">/* finalize the infft */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="comment">/* finalize the nfft */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     printf(<span class="stringliteral">"usage: ./reconstruct_data_inh_nnfft FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <a class="code" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/sinc_8c_source.html b/doc/api/html/sinc_8c_source.html
new file mode 100644
index 0000000..671f88c
--- /dev/null
+++ b/doc/api/html/sinc_8c_source.html
@@ -0,0 +1,97 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - sinc.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinc.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> R X(sinc)(<span class="keyword">const</span> R x)</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>   <span class="comment">/* Based on sinc function from Boost C++ library. */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>   <span class="keyword">const</span> R b =  EPSILON;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>   <span class="keyword">const</span> R bs = SQRT(b);</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>   <span class="keyword">const</span> R bs2 = SQRT(bs);</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>   <span class="keywordflow">if</span> (FABS(x) >= bs2)</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>     <span class="keywordflow">return</span> SIN(x)/x;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>     R r = K(1.0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>     <span class="keywordflow">if</span> (FABS(x) >= b)</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>     {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>       <span class="keyword">const</span> R x2 = x * x;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>       r -= x2 / K(6.0);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>       <span class="keywordflow">if</span> (FABS(x) >= bs)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>         r += (x2 * x2) / K(120.0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     }</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/solver_2simple__test_8c_source.html b/doc/api/html/solver_2simple__test_8c_source.html
new file mode 100644
index 0000000..52b333b
--- /dev/null
+++ b/doc/api/html/solver_2simple__test_8c_source.html
@@ -0,0 +1,196 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - simple_test.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">solver/simple_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/* void simple_test_infft_1d(int N, int M, int iter) */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/* { */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*   int k,l;                            /\**< index for nodes, freqencies,iter*\/ */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*   nfft_plan p;                          /\**< plan for the nfft               *\/ */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*   infft_plan ip;                        /\**< plan for the inverse nfft       *\/ */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*   /\** initialise an one dimensional plan *\/ */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*   nfft_init_1d(&p, N, M); */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*   /\** init pseudo random nodes *\/ */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*   nfft_vrand_shifted_unit_double(p.x,p.M_total); */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*   /\** precompute psi, the entries of the matrix B *\/ */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*   if(p.nfft_flags & PRE_ONE_PSI) */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*     nfft_precompute_one_psi(&p); */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*   /\** initialise inverse plan *\/ */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*   infft_init(&ip,&p); */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*   /\** init pseudo random samples and show them *\/ */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*   nfft_vrand_unit_complex(ip.y,p.M_total); */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*   nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y"); */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*   /\** initialise some guess f_hat_0 and solve *\/ */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*   for(k=0;k<p.N_total;k++) */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*       ip.f_hat_iter[k]=0; */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*   nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter"); */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*   NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*   nfft_trafo(&p); */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*   nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*   NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*   infft_before_loop(&ip); */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*   printf("\n Residual r=%e\n",ip.dot_r_iter); */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*   for(l=0;l<iter;l++) */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*     { */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*       printf("\n********** Iteration l=%d **********\n",l); */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*       infft_loop_one_step(&ip); */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*       nfft_vpr_complex(ip.f_hat_iter,p.N_total, */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/*      "Approximate solution, vector f_hat_iter"); */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*       NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*       nfft_trafo(&p); */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*       nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*       NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*       printf("\n Residual r=%e\n",ip.dot_r_iter); */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*     } */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*   infft_finalize(&ip); */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/*   nfft_finalize(&p); */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/* } */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_solver_nfft_1d(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> iter)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">int</span> k,l;                            </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> p;                          </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> ip;                        </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   nfft_init_1d(&p, N, M);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number o [...]
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   solver_init_complex(&ip,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&p));</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_tot [...]
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,<span clas [...]
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_tota [...]
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeo [...]
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples." [...]
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeo [...]
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   solver_before_loop_complex(&ip);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   printf(<span class="stringliteral">"\n Residual r=%e\n"</span>,ip.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordflow">for</span>(l=0;l<iter;l++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     {</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>       printf(<span class="stringliteral">"\n********** Iteration l=%d **********\n"</span>,l);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&ip);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_ [...]
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <span class="stringliteral">"Approximate solution, vector f_hat_iter"</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of sampl [...]
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       printf(<span class="stringliteral">"\n Residual r=%e\n"</span>,ip.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&ip);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   nfft_finalize(&p);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   printf(<span class="stringliteral">"\n Computing a one dimensional inverse nfft\n"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   simple_test_solver_nfft_1d(8,4,5);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/solver_8c.html b/doc/api/html/solver_8c.html
new file mode 100644
index 0000000..f02b01e
--- /dev/null
+++ b/doc/api/html/solver_8c.html
@@ -0,0 +1,118 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solver.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">solver.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation file for the solver module.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="solver_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad8962fc79683a67a84b10593d8e0103c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8962fc79683a67a84b10593d8e0103c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_advanced_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a6662c51f86e40ded7773d1954ec77ca2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6662c51f86e40ded7773d1954ec77ca2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:a54498806e5ab4046a2ef8fc426e5b141"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54498806e5ab4046a2ef8fc426e5b141"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_before_loop_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a7e818bcb6dd61e2a7aa5748c8ee9d339"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e818bcb6dd61e2a7aa5748c8ee9d339"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">solver_loop_one_step_landweber_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a7e818bcb6dd61e2a7aa5748c8ee9d339"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_landweber <br/></td></tr>
+<tr class="memitem:ab14e3227776d9378c195664f3ace8110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab14e3227776d9378c195664f3ace8110"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">solver_loop_one_step_steepest_descent_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:ab14e3227776d9378c195664f3ace8110"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_steepest_descent <br/></td></tr>
+<tr class="memitem:a376190a64969829c029532fd0957e184"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a376190a64969829c029532fd0957e184"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a376190a64969829c029532fd0957e184">solver_loop_one_step_cgnr_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a376190a64969829c029532fd0957e184"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgnr <br/></td></tr>
+<tr class="memitem:a59278b7119c43bf23b9aaca6eae936e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59278b7119c43bf23b9aaca6eae936e5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">solver_loop_one_step_cgne_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a59278b7119c43bf23b9aaca6eae936e5"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgne <br/></td></tr>
+<tr class="memitem:a3b80b04ee3429b04c310992fb0a12420"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b80b04ee3429b04c310992fb0a12420"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">solver_loop_one_step_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a3b80b04ee3429b04c310992fb0a12420"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step <br/></td></tr>
+<tr class="memitem:a2f44c78734390e47d72578f4c9cbe709"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f44c78734390e47d72578f4c9cbe709"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">solver_finalize_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a2f44c78734390e47d72578f4c9cbe709"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:a1a4544ab96d14c812e3b330c439c3d80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a4544ab96d14c812e3b330c439c3d80"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">solver_init_advanced_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memdesc:a1a4544ab96d14c812e3b330c439c3d80"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:aa4893f8cbbcedc501a5c856c07706454"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4893f8cbbcedc501a5c856c07706454"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>solver_init_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:ab9d1312a3daa0f574f0059d920ee9017"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9d1312a3daa0f574f0059d920ee9017"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>solver_before_loop_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a30d6a3373083167e38181c964d6a4288"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30d6a3373083167e38181c964d6a4288"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">solver_loop_one_step_landweber_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a30d6a3373083167e38181c964d6a4288"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_landweber <br/></td></tr>
+<tr class="memitem:a6fef0b0a380ed017554c41b78fccc477"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fef0b0a380ed017554c41b78fccc477"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">solver_loop_one_step_steepest_descent_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a6fef0b0a380ed017554c41b78fccc477"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_steepest_descent <br/></td></tr>
+<tr class="memitem:ae134ca120f6f4fcc96626c6a1acedfb6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae134ca120f6f4fcc96626c6a1acedfb6"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">solver_loop_one_step_cgnr_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:ae134ca120f6f4fcc96626c6a1acedfb6"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgnr <br/></td></tr>
+<tr class="memitem:a206a5fe70bfb6853a2a9a9551e12b2db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a206a5fe70bfb6853a2a9a9551e12b2db"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">solver_loop_one_step_cgne_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a206a5fe70bfb6853a2a9a9551e12b2db"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgne <br/></td></tr>
+<tr class="memitem:a89adea45056c1b5c8d90cfd87325be4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89adea45056c1b5c8d90cfd87325be4e"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">solver_loop_one_step_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a89adea45056c1b5c8d90cfd87325be4e"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step <br/></td></tr>
+<tr class="memitem:a6d04f270b539a9f48b3521ba973829bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d04f270b539a9f48b3521ba973829bf"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">solver_finalize_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a6d04f270b539a9f48b3521ba973829bf"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Implementation file for the solver module. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition in file <a class="el" href="solver_8c_source.html">solver.c</a>.</p>
+</div></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/solver_8c_source.html b/doc/api/html/solver_8c_source.html
new file mode 100644
index 0000000..dd1c2cd
--- /dev/null
+++ b/doc/api/html/solver_8c_source.html
@@ -0,0 +1,760 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solver.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">solver.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="solver_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: solver.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keywordtype">void</span> solver_init_advanced_complex(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths, <a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a> = mv;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> = flags;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>          = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code"  [...]
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>     = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code"  [...]
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href=" [...]
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="st [...]
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>       ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>       ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>     = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code [...]
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     }</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>       ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>       ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>     = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code [...]
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     }</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     ths-><a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a [...]
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     ths-><a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-> [...]
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">void</span> solver_init_complex(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths, <a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   solver_init_advanced_complex(ths, mv, CGNR);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">void</span> solver_before_loop_complex(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>, th [...]
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="it [...]
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated resi [...]
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     }</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix ve [...]
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix ve [...]
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" t [...]
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>              ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="resid [...]
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                  ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_i [...]
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> } <span class="comment">/* void solver_before_loop */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="code" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">  120</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>          ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" tit [...]
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">m [...]
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">m [...]
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>, th [...]
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="it [...]
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated resi [...]
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" t [...]
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>              ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="resid [...]
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                  ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> } <span class="comment">/* void solver_loop_one_step_landweber */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"><a class="code" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">  169</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total [...]
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>           ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title=" [...]
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual ve [...]
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" [...]
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>          ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" tit [...]
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title=" [...]
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated re [...]
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" [...]
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="res [...]
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> } <span class="comment">/* void solver_loop_one_step_steepest_descent */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="code" href="solver_8c.html#a376190a64969829c029532fd0957e184">  224</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a376190a64969829c029532fd0957e184" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total [...]
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>           ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title=" [...]
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual ve [...]
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" [...]
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>          ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fouri [...]
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title=" [...]
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated re [...]
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   ths-><a class="code" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee" title="previous dot_z_hat_iter">dot_z_hat_iter_old</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" [...]
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="res [...]
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee" [...]
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a [...]
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> } <span class="comment">/* void solver_loop_one_step_cgnr */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"><a class="code" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">  287</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title=" [...]
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>          ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fouri [...]
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                           ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total [...]
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>           ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   ths-><a class="code" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50" title="previous dot_r_iter">dot_r_iter_old</a> = ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title=" [...]
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated re [...]
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50" title=" [...]
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a [...]
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" [...]
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="sea [...]
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> } <span class="comment">/* void solver_loop_one_step_cgne */</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="code" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">  339</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <a class="code" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_complex</a>(ths);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <a class="code" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_complex</a>(ths);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <a class="code" href="solver_8c.html#a376190a64969829c029532fd0957e184" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_complex</a>(ths);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <a class="code" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_complex</a>(ths);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> } <span class="comment">/* void solver_loop_one_step */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"><a class="code" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">  355</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     }</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> } </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"><a class="code" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">  384</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80" title="void solver_finalize">solver_init_advanced_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths, <a class="code" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv [...]
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> {</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> = mv;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> = flags;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>          = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv [...]
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>     = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv [...]
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-& [...]
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-&gt [...]
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>     = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     }</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>       ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vect [...]
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>     = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     ths-><a class="code" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500" title="weighting factors">w</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a c [...]
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     ths-><a class="code" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472" title="damping factors">w_hat</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a [...]
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solver_init_double(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths, <a class="code" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv)</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   <a class="code" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80" title="void solver_finalize">solver_init_advanced_double</a>(ths, mv, CGNR);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solver_before_loop_double(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths)</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> {</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * size [...]
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>, ths-& [...]
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="itera [...]
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residua [...]
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double  [...]
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vecto [...]
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vecto [...]
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" titl [...]
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>              ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual [...]
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                  ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter [...]
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> } <span class="comment">/* void solver_before_loop */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"><a class="code" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">  471</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths)</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>          ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title= [...]
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>         ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * size [...]
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</ [...]
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</ [...]
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>, ths-& [...]
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="itera [...]
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residua [...]
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double  [...]
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     {</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>       <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" titl [...]
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>              ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual [...]
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                  ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> } <span class="comment">/* void solver_loop_one_step_landweber */</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"><a class="code" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">  520</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total *  [...]
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>           ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * si [...]
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="res [...]
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vecto [...]
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" ti [...]
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>          ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title= [...]
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>       ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="ite [...]
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated resid [...]
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double  [...]
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" ti [...]
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residu [...]
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> } <span class="comment">/* void solver_loop_one_step_steepest_descent */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"><a class="code" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">  575</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total *  [...]
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>           ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * si [...]
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="res [...]
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vecto [...]
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" ti [...]
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>          ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier  [...]
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>         ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>       ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="ite [...]
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated resid [...]
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double  [...]
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   ths-><a class="code" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9" title="previous dot_z_hat_iter">dot_z_hat_iter_old</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" ti [...]
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residu [...]
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9" ti [...]
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a>,  [...]
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>       ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> } <span class="comment">/* void solver_loop_one_step_cgnr */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno"><a class="code" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">  638</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> {</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="wei [...]
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>          ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier  [...]
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                           ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total *  [...]
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>           ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * si [...]
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>       ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   ths-><a class="code" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312" title="previous dot_r_iter">dot_r_iter_old</a> = ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a>;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="ite [...]
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated resid [...]
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312" title="pre [...]
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double  [...]
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>   ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a>,  [...]
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>       ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" ti [...]
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>                ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search [...]
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> } <span class="comment">/* void solver_loop_one_step_cgne */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"><a class="code" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">  690</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e" title="void solver_loop_one_step">solver_loop_one_step_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> {</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <a class="code" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_double</a>(ths);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     <a class="code" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_double</a>(ths);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     <a class="code" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_double</a>(ths);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     <a class="code" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_double</a>(ths);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> } <span class="comment">/* void solver_loop_one_step */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno"><a class="code" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">  706</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf" title="void solver_finalize">solver_finalize_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500" title="weighting factors">w</a>);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472" title="damping factors">w_hat</a>);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>       <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     }</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>);</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> } </div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/solver__adjoint_8h.html b/doc/api/html/solver__adjoint_8h.html
new file mode 100644
index 0000000..5edcaca
--- /dev/null
+++ b/doc/api/html/solver__adjoint_8h.html
@@ -0,0 +1,1052 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solver_adjoint.h File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">solver_adjoint.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for adjoint solver.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="solver__adjoint_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html">infsft_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">TODO: different solvers.  <a href="structinfsft__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html">infft_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan.  <a href="structinfft__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html">infct_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan.  <a href="structinfct__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html">infst_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan.  <a href="structinfst__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html">innfft_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan.  <a href="structinnfft__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html">imri_inh_2d1d_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan.  <a href="structimri__inh__2d1d__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html">imri_inh_3d_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan.  <a href="structimri__inh__3d__adjoint__plan.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ab0b31397c6f400b1f58af9f1c7b7b637"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">MACRO_SOLVER_ADJOINT_PLAN</a>(MV, FLT, FLT_TYPE)</td></tr>
+<tr class="memdesc:ab0b31397c6f400b1f58af9f1c7b7b637"><td class="mdescLeft"> </td><td class="mdescRight">Include NFFT3 header.  <a href="#ab0b31397c6f400b1f58af9f1c7b7b637"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a040cb361de66313ccbad17f746cc748d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a040cb361de66313ccbad17f746cc748d">infsft_adjoint_init</a> (adjointnfsft_plan *ths, <a class="el" href="structnfsft__plan.html">nfsft_plan</a> *mv)</td></tr>
+<tr class="memdesc:a040cb361de66313ccbad17f746cc748d"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#a040cb361de66313ccbad17f746cc748d"></a><br/></td></tr>
+<tr class="memitem:a0a162589cc358719488082d0b3e42e0e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a0a162589cc358719488082d0b3e42e0e">infsft_adjoint_init_advanced</a> (adjointnfsft_plan *ths, <a class="el" href="structnfsft__plan.html">nfsft_plan</a>,*mv, unsigned adjointnfsft_flags)</td></tr>
+<tr class="memdesc:a0a162589cc358719488082d0b3e42e0e"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#a0a162589cc358719488082d0b3e42e0e"></a><br/></td></tr>
+<tr class="memitem:a26dbcae80a2db01144d523cb3d22a01d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a26dbcae80a2db01144d523cb3d22a01d">infsft_adjoint_before_loop</a> (adjointnfsft_plan *ths)</td></tr>
+<tr class="memdesc:a26dbcae80a2db01144d523cb3d22a01d"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a26dbcae80a2db01144d523cb3d22a01d"></a><br/></td></tr>
+<tr class="memitem:a03fc19c8d3c7b8a49c8751a2a88e0d09"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a03fc19c8d3c7b8a49c8751a2a88e0d09">infsft_adjoint_loop_one_step</a> (adjointnfsft_plan *ths)</td></tr>
+<tr class="memdesc:a03fc19c8d3c7b8a49c8751a2a88e0d09"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a03fc19c8d3c7b8a49c8751a2a88e0d09"></a><br/></td></tr>
+<tr class="memitem:adb479e2343fef9fbafdc5d8d65085aee"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#adb479e2343fef9fbafdc5d8d65085aee">infsft_adjoint_finalize</a> (adjointnfsft_plan *ths)</td></tr>
+<tr class="memdesc:adb479e2343fef9fbafdc5d8d65085aee"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#adb479e2343fef9fbafdc5d8d65085aee"></a><br/></td></tr>
+<tr class="memitem:ae93aa72dcb2528111f021c952482c244"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ae93aa72dcb2528111f021c952482c244">infft_adjoint_init</a> (adjointnfft_plan *ths, <a class="el" href="structnfft__plan.html">nfft_plan</a> *mv)</td></tr>
+<tr class="memdesc:ae93aa72dcb2528111f021c952482c244"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#ae93aa72dcb2528111f021c952482c244"></a><br/></td></tr>
+<tr class="memitem:adf47a7ff42ca521526db42b4d3a68f98"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#adf47a7ff42ca521526db42b4d3a68f98">infft_adjoint_init_advanced</a> (adjointnfft_plan *ths, <a class="el" href="structnfft__plan.html">nfft_plan</a>,*mv, unsigned adjointnfft_flags)</td></tr>
+<tr class="memdesc:adf47a7ff42ca521526db42b4d3a68f98"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#adf47a7ff42ca521526db42b4d3a68f98"></a><br/></td></tr>
+<tr class="memitem:a2a31ddf66394b88a4dd1545278e205b5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a2a31ddf66394b88a4dd1545278e205b5">infft_adjoint_before_loop</a> (adjointnfft_plan *ths)</td></tr>
+<tr class="memdesc:a2a31ddf66394b88a4dd1545278e205b5"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a2a31ddf66394b88a4dd1545278e205b5"></a><br/></td></tr>
+<tr class="memitem:a219ff15a153205b04eec76860cb4d6eb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a219ff15a153205b04eec76860cb4d6eb">infft_adjoint_loop_one_step</a> (adjointnfft_plan *ths)</td></tr>
+<tr class="memdesc:a219ff15a153205b04eec76860cb4d6eb"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a219ff15a153205b04eec76860cb4d6eb"></a><br/></td></tr>
+<tr class="memitem:a826591281cbec37c2a032eaecbbacf9d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a826591281cbec37c2a032eaecbbacf9d">infft_adjoint_finalize</a> (adjointnfft_plan *ths)</td></tr>
+<tr class="memdesc:a826591281cbec37c2a032eaecbbacf9d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#a826591281cbec37c2a032eaecbbacf9d"></a><br/></td></tr>
+<tr class="memitem:a695c20cc98df4bbd370240bee9703e77"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a695c20cc98df4bbd370240bee9703e77">infct_adjoint_init</a> (adjointnfct_plan *ths, <a class="el" href="structnfct__plan.html">nfct_plan</a> *mv)</td></tr>
+<tr class="memdesc:a695c20cc98df4bbd370240bee9703e77"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#a695c20cc98df4bbd370240bee9703e77"></a><br/></td></tr>
+<tr class="memitem:a4fcee80a5fbbe901b8d51717dc07ae24"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a4fcee80a5fbbe901b8d51717dc07ae24">infct_adjoint_init_advanced</a> (adjointnfct_plan *ths, <a class="el" href="structnfct__plan.html">nfct_plan</a>,*mv, unsigned adjointnfct_flags)</td></tr>
+<tr class="memdesc:a4fcee80a5fbbe901b8d51717dc07ae24"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#a4fcee80a5fbbe901b8d51717dc07ae24"></a><br/></td></tr>
+<tr class="memitem:a7bfc5594bbdc3d6c58fb10713a03bc40"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a7bfc5594bbdc3d6c58fb10713a03bc40">infct_adjoint_before_loop</a> (adjointnfct_plan *ths)</td></tr>
+<tr class="memdesc:a7bfc5594bbdc3d6c58fb10713a03bc40"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a7bfc5594bbdc3d6c58fb10713a03bc40"></a><br/></td></tr>
+<tr class="memitem:a36eef8da31026b71a865108b095768cc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a36eef8da31026b71a865108b095768cc">infct_adjoint_loop_one_step</a> (adjointnfct_plan *ths)</td></tr>
+<tr class="memdesc:a36eef8da31026b71a865108b095768cc"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a36eef8da31026b71a865108b095768cc"></a><br/></td></tr>
+<tr class="memitem:a48c89f97b3f452ee3aedb245d064f24e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a48c89f97b3f452ee3aedb245d064f24e">infct_adjoint_finalize</a> (adjointnfct_plan *ths)</td></tr>
+<tr class="memdesc:a48c89f97b3f452ee3aedb245d064f24e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#a48c89f97b3f452ee3aedb245d064f24e"></a><br/></td></tr>
+<tr class="memitem:a332fad4381e89b483482e53fa39604e3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a332fad4381e89b483482e53fa39604e3">infst_adjoint_init</a> (adjointnfst_plan *ths, <a class="el" href="structnfst__plan.html">nfst_plan</a> *mv)</td></tr>
+<tr class="memdesc:a332fad4381e89b483482e53fa39604e3"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#a332fad4381e89b483482e53fa39604e3"></a><br/></td></tr>
+<tr class="memitem:ac5ad72ccf1af482d623242389bc154b2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ac5ad72ccf1af482d623242389bc154b2">infst_adjoint_init_advanced</a> (adjointnfst_plan *ths, <a class="el" href="structnfst__plan.html">nfst_plan</a>,*mv, unsigned adjointnfst_flags)</td></tr>
+<tr class="memdesc:ac5ad72ccf1af482d623242389bc154b2"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#ac5ad72ccf1af482d623242389bc154b2"></a><br/></td></tr>
+<tr class="memitem:a4a5720df6bfee236588f38e516e32c90"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a4a5720df6bfee236588f38e516e32c90">infst_adjoint_before_loop</a> (adjointnfst_plan *ths)</td></tr>
+<tr class="memdesc:a4a5720df6bfee236588f38e516e32c90"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a4a5720df6bfee236588f38e516e32c90"></a><br/></td></tr>
+<tr class="memitem:a57df76147b89e6e204a465fd437fbaae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a57df76147b89e6e204a465fd437fbaae">infst_adjoint_loop_one_step</a> (adjointnfst_plan *ths)</td></tr>
+<tr class="memdesc:a57df76147b89e6e204a465fd437fbaae"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a57df76147b89e6e204a465fd437fbaae"></a><br/></td></tr>
+<tr class="memitem:a086451cc556027d5e909eb7d1c1249b7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a086451cc556027d5e909eb7d1c1249b7">infst_adjoint_finalize</a> (adjointnfst_plan *ths)</td></tr>
+<tr class="memdesc:a086451cc556027d5e909eb7d1c1249b7"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#a086451cc556027d5e909eb7d1c1249b7"></a><br/></td></tr>
+<tr class="memitem:ab4dcbe373e99d9c010034c6eecdfea86"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ab4dcbe373e99d9c010034c6eecdfea86">innfft_adjoint_init</a> (adjointnnfft_plan *ths, <a class="el" href="structnnfft__plan.html">nnfft_plan</a> *mv)</td></tr>
+<tr class="memdesc:ab4dcbe373e99d9c010034c6eecdfea86"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#ab4dcbe373e99d9c010034c6eecdfea86"></a><br/></td></tr>
+<tr class="memitem:aac4fe9056cb5a96170ba6122e20d116a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#aac4fe9056cb5a96170ba6122e20d116a">innfft_adjoint_init_advanced</a> (adjointnnfft_plan *ths, <a class="el" href="structnnfft__plan.html">nnfft_plan</a>,*mv, unsigned adjointnnfft_flags)</td></tr>
+<tr class="memdesc:aac4fe9056cb5a96170ba6122e20d116a"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#aac4fe9056cb5a96170ba6122e20d116a"></a><br/></td></tr>
+<tr class="memitem:a3c7be955a46b3d056b5d38324f2d2068"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a3c7be955a46b3d056b5d38324f2d2068">innfft_adjoint_before_loop</a> (adjointnnfft_plan *ths)</td></tr>
+<tr class="memdesc:a3c7be955a46b3d056b5d38324f2d2068"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a3c7be955a46b3d056b5d38324f2d2068"></a><br/></td></tr>
+<tr class="memitem:a9e80774fcedbd2a50e4146290de9ce3f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a9e80774fcedbd2a50e4146290de9ce3f">innfft_adjoint_loop_one_step</a> (adjointnnfft_plan *ths)</td></tr>
+<tr class="memdesc:a9e80774fcedbd2a50e4146290de9ce3f"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a9e80774fcedbd2a50e4146290de9ce3f"></a><br/></td></tr>
+<tr class="memitem:a1316a1ad32f611899e446cd98d3b0b0d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a1316a1ad32f611899e446cd98d3b0b0d">innfft_adjoint_finalize</a> (adjointnnfft_plan *ths)</td></tr>
+<tr class="memdesc:a1316a1ad32f611899e446cd98d3b0b0d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#a1316a1ad32f611899e446cd98d3b0b0d"></a><br/></td></tr>
+<tr class="memitem:ae0f7ba8180888f8f70aff1b041f4ec57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ae0f7ba8180888f8f70aff1b041f4ec57">imri_inh_2d1d_adjoint_init</a> (adjointmri_inh_2d1d_plan *ths, <a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *mv)</td></tr>
+<tr class="memdesc:ae0f7ba8180888f8f70aff1b041f4ec57"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#ae0f7ba8180888f8f70aff1b041f4ec57"></a><br/></td></tr>
+<tr class="memitem:a61bb41310d86e96ad1912ce486930bea"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a61bb41310d86e96ad1912ce486930bea">imri_inh_2d1d_adjoint_init_advanced</a> (adjointmri_inh_2d1d_plan *ths, <a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a>,*mv, unsigned adjointmri_inh_2d1d_flags)</td></tr>
+<tr class="memdesc:a61bb41310d86e96ad1912ce486930bea"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#a61bb41310d86e96ad1912ce486930bea"></a><br/></td></tr>
+<tr class="memitem:a39cce38619ea8d9ce84326173e2d091b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a39cce38619ea8d9ce84326173e2d091b">imri_inh_2d1d_adjoint_before_loop</a> (adjointmri_inh_2d1d_plan *ths)</td></tr>
+<tr class="memdesc:a39cce38619ea8d9ce84326173e2d091b"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a39cce38619ea8d9ce84326173e2d091b"></a><br/></td></tr>
+<tr class="memitem:a84b7c58708fe95ff8234638689a30302"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a84b7c58708fe95ff8234638689a30302">imri_inh_2d1d_adjoint_loop_one_step</a> (adjointmri_inh_2d1d_plan *ths)</td></tr>
+<tr class="memdesc:a84b7c58708fe95ff8234638689a30302"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a84b7c58708fe95ff8234638689a30302"></a><br/></td></tr>
+<tr class="memitem:a7b403058cdba0d2918690b2d1d577912"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a7b403058cdba0d2918690b2d1d577912">imri_inh_2d1d_adjoint_finalize</a> (adjointmri_inh_2d1d_plan *ths)</td></tr>
+<tr class="memdesc:a7b403058cdba0d2918690b2d1d577912"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#a7b403058cdba0d2918690b2d1d577912"></a><br/></td></tr>
+<tr class="memitem:a6275d93dac2957a4acad3bda978c98cd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a6275d93dac2957a4acad3bda978c98cd">imri_inh_3d_adjoint_init</a> (adjointmri_inh_3d_plan *ths, <a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *mv)</td></tr>
+<tr class="memdesc:a6275d93dac2957a4acad3bda978c98cd"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation.  <a href="#a6275d93dac2957a4acad3bda978c98cd"></a><br/></td></tr>
+<tr class="memitem:afb6ade8e78c1dfdc7e513c6e8fa7ffb6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#afb6ade8e78c1dfdc7e513c6e8fa7ffb6">imri_inh_3d_adjoint_init_advanced</a> (adjointmri_inh_3d_plan *ths, <a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a>,*mv, unsigned adjointmri_inh_3d_flags)</td></tr>
+<tr class="memdesc:afb6ade8e78c1dfdc7e513c6e8fa7ffb6"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation.  <a href="#afb6ade8e78c1dfdc7e513c6e8fa7ffb6"></a><br/></td></tr>
+<tr class="memitem:a9a8864136de1ff61970eeed934350238"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a9a8864136de1ff61970eeed934350238">imri_inh_3d_adjoint_before_loop</a> (adjointmri_inh_3d_plan *ths)</td></tr>
+<tr class="memdesc:a9a8864136de1ff61970eeed934350238"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration.  <a href="#a9a8864136de1ff61970eeed934350238"></a><br/></td></tr>
+<tr class="memitem:a7e65b366bd5003cef9c16e640591b972"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a7e65b366bd5003cef9c16e640591b972">imri_inh_3d_adjoint_loop_one_step</a> (adjointmri_inh_3d_plan *ths)</td></tr>
+<tr class="memdesc:a7e65b366bd5003cef9c16e640591b972"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration.  <a href="#a7e65b366bd5003cef9c16e640591b972"></a><br/></td></tr>
+<tr class="memitem:a48c6fe11c01d742025c7eb7bf7ac9002"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a48c6fe11c01d742025c7eb7bf7ac9002">imri_inh_3d_adjoint_finalize</a> (adjointmri_inh_3d_plan *ths)</td></tr>
+<tr class="memdesc:a48c6fe11c01d742025c7eb7bf7ac9002"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform.  <a href="#a48c6fe11c01d742025c7eb7bf7ac9002"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for adjoint solver. </p>
+
+<p>Definition in file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ab0b31397c6f400b1f58af9f1c7b7b637"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MACRO_SOLVER_ADJOINT_PLAN</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">MV, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">FLT, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"> </td>
+          <td class="paramname">FLT_TYPE </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Include NFFT3 header. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00035">35</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a040cb361de66313ccbad17f746cc748d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infsft_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfsft_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0a162589cc358719488082d0b3e42e0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infsft_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfsft_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointnfsft_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a26dbcae80a2db01144d523cb3d22a01d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infsft_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfsft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a03fc19c8d3c7b8a49c8751a2a88e0d09"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infsft_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfsft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="adb479e2343fef9fbafdc5d8d65085aee"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infsft_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfsft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+<a class="anchor" id="ae93aa72dcb2528111f021c952482c244"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infft_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfft_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfft__plan.html">nfft_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="adf47a7ff42ca521526db42b4d3a68f98"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infft_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfft_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfft__plan.html">nfft_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointnfft_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2a31ddf66394b88a4dd1545278e205b5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infft_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a219ff15a153205b04eec76860cb4d6eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infft_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="a826591281cbec37c2a032eaecbbacf9d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infft_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+<a class="anchor" id="a695c20cc98df4bbd370240bee9703e77"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infct_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfct_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfct__plan.html">nfct_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4fcee80a5fbbe901b8d51717dc07ae24"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infct_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfct_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfct__plan.html">nfct_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointnfct_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7bfc5594bbdc3d6c58fb10713a03bc40"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infct_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfct_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a36eef8da31026b71a865108b095768cc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infct_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfct_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="a48c89f97b3f452ee3aedb245d064f24e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infct_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfct_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+<a class="anchor" id="a332fad4381e89b483482e53fa39604e3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infst_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfst_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfst__plan.html">nfst_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac5ad72ccf1af482d623242389bc154b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infst_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfst_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnfst__plan.html">nfst_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointnfst_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4a5720df6bfee236588f38e516e32c90"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infst_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfst_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a57df76147b89e6e204a465fd437fbaae"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infst_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfst_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="a086451cc556027d5e909eb7d1c1249b7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void infst_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointnfst_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+<a class="anchor" id="ab4dcbe373e99d9c010034c6eecdfea86"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void innfft_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointnnfft_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnnfft__plan.html">nnfft_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="aac4fe9056cb5a96170ba6122e20d116a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void innfft_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointnnfft_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structnnfft__plan.html">nnfft_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointnnfft_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3c7be955a46b3d056b5d38324f2d2068"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void innfft_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointnnfft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a9e80774fcedbd2a50e4146290de9ce3f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void innfft_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointnnfft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="a1316a1ad32f611899e446cd98d3b0b0d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void innfft_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointnnfft_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+<a class="anchor" id="ae0f7ba8180888f8f70aff1b041f4ec57"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_2d1d_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a61bb41310d86e96ad1912ce486930bea"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_2d1d_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointmri_inh_2d1d_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a39cce38619ea8d9ce84326173e2d091b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_2d1d_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a84b7c58708fe95ff8234638689a30302"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_2d1d_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="a7b403058cdba0d2918690b2d1d577912"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_2d1d_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+<a class="anchor" id="a6275d93dac2957a4acad3bda978c98cd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_3d_adjoint_init </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_3d_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> * </td>
+          <td class="paramname"><em>mv</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="afb6ade8e78c1dfdc7e513c6e8fa7ffb6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_3d_adjoint_init_advanced </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_3d_plan * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> </td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">* </td>
+          <td class="paramname"><em>mv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>adjointmri_inh_3d_flags</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9a8864136de1ff61970eeed934350238"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_3d_adjoint_before_loop </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_3d_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment">                    </pre> 
+</div>
+</div>
+<a class="anchor" id="a7e65b366bd5003cef9c16e640591b972"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_3d_adjoint_loop_one_step </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_3d_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment">                                     </pre> 
+</div>
+</div>
+<a class="anchor" id="a48c6fe11c01d742025c7eb7bf7ac9002"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void imri_inh_3d_adjoint_finalize </td>
+          <td>(</td>
+          <td class="paramtype">adjointmri_inh_3d_plan * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment">                         </pre> 
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/solver__adjoint_8h_source.html b/doc/api/html/solver__adjoint_8h_source.html
new file mode 100644
index 0000000..a67c9a0
--- /dev/null
+++ b/doc/api/html/solver__adjoint_8h_source.html
@@ -0,0 +1,133 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solver_adjoint.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">solver_adjoint.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="solver__adjoint_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: solver_adjoint.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#ifndef SOLVER_ADJOINT_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#define SOLVER_ADJOINT_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * Macro for mangling an adjoint transform.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * temporary added 01.2007 by tim becker</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>                                                                                \</div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">   35</a></span> <span class="preprocessor">#define MACRO_SOLVER_ADJOINT_PLAN(MV, FLT, FLT_TYPE)                           \</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">                                \</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">typedef struct                                                                 \</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">{                                                                              \</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">  MV ## _plan *mv;                      \</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">  unsigned flags;                       \</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">  double *w;                            \</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">  double *w_hat;                        \</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">  FLT_TYPE *y_hat;                      \</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">  FLT_TYPE *f_iter;                     \</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">  FLT_TYPE *r_hat_iter;                 \</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">  FLT_TYPE *z_iter;                     \</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">  FLT_TYPE *p_iter;                     \</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">  FLT_TYPE *v_hat_iter;                 \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">  double alpha_iter;                    \</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">  double beta_iter;                     \</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">  double dot_r_hat_iter;                \</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">  double dot_r_hat_iter_old;            \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">  double dot_z_iter;                    \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">  double dot_z_iter_old;                \</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">  double dot_p_iter;                    \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">  double dot_v_hat_iter;                \</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">} i ## MV ## _adjoint_plan;                                                    \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">                                                  \</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">void i ## MV ## _adjoint_init(adjoint ## MV ## _plan *ths, MV ## _plan *mv);   \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">                                               \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">void i ## MV ## _adjoint_init_advanced(adjoint ## MV ## _plan *ths, MV ## _plan,\</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">*mv, unsigned adjoint ## MV ## _flags);                                       \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">void i ## MV ## _adjoint_before_loop(adjoint ## MV ## _plan *ths);              \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">void i ## MV ## _adjoint_loop_one_step(adjoint ## MV ## _plan *ths);            \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">   78</a></span> <span class="preprocessor">void i ## MV ## _adjoint_finalize(adjoint ## MV ## _plan *ths);                 \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">   79</a></span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">   80</a></span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">   81</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfsft, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">   82</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfft, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">   83</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfct, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">   84</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfst, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nnfft, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(mri_inh_2d1d, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(mri_inh_3d, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="comment">/* solver_adjoint.h */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structfastsum__plan__.html b/doc/api/html/structfastsum__plan__.html
new file mode 100644
index 0000000..dc3b4ac
--- /dev/null
+++ b/doc/api/html/structfastsum__plan__.html
@@ -0,0 +1,229 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fastsum_plan_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">fastsum_plan_ Struct Reference<div class="ingroups"><a class="el" href="group__applications__fastsum.html">Fast summation</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>plan for fast summation algorithm  
+ <a href="structfastsum__plan__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fastsum_8h_source.html">fastsum.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad70ee163a195c108d0a5510a8407a307"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">d</a></td></tr>
+<tr class="memdesc:ad70ee163a195c108d0a5510a8407a307"><td class="mdescLeft"> </td><td class="mdescRight">api  <a href="#ad70ee163a195c108d0a5510a8407a307"></a><br/></td></tr>
+<tr class="memitem:a179b7193adbfbecb48c91c11c42b2976"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a179b7193adbfbecb48c91c11c42b2976"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">N_total</a></td></tr>
+<tr class="memdesc:a179b7193adbfbecb48c91c11c42b2976"><td class="mdescLeft"> </td><td class="mdescRight">number of source knots <br/></td></tr>
+<tr class="memitem:a1e80d12f6ed1d6a310dbd4fc429e6a2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e80d12f6ed1d6a310dbd4fc429e6a2f"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">M_total</a></td></tr>
+<tr class="memdesc:a1e80d12f6ed1d6a310dbd4fc429e6a2f"><td class="mdescLeft"> </td><td class="mdescRight">number of target knots <br/></td></tr>
+<tr class="memitem:ac764b85b6a7d88f44e24fcf065723087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac764b85b6a7d88f44e24fcf065723087"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">alpha</a></td></tr>
+<tr class="memdesc:ac764b85b6a7d88f44e24fcf065723087"><td class="mdescLeft"> </td><td class="mdescRight">source coefficients <br/></td></tr>
+<tr class="memitem:a83abf01817c3c90d84e181369c7a172a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83abf01817c3c90d84e181369c7a172a"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">f</a></td></tr>
+<tr class="memdesc:a83abf01817c3c90d84e181369c7a172a"><td class="mdescLeft"> </td><td class="mdescRight">target evaluations <br/></td></tr>
+<tr class="memitem:a8220159dd047b9800820840154ec6b91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8220159dd047b9800820840154ec6b91"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">x</a></td></tr>
+<tr class="memdesc:a8220159dd047b9800820840154ec6b91"><td class="mdescLeft"> </td><td class="mdescRight">source knots in d-ball with radius 1/4-eps_b/2 <br/></td></tr>
+<tr class="memitem:a6eb18076208d1ef3f012681ec73c0b51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb18076208d1ef3f012681ec73c0b51"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">y</a></td></tr>
+<tr class="memdesc:a6eb18076208d1ef3f012681ec73c0b51"><td class="mdescLeft"> </td><td class="mdescRight">target knots in d-ball with radius 1/4-eps_b/2 <br/></td></tr>
+<tr class="memitem:aaf4ea39f8bed50a000d83eec53ee42b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf4ea39f8bed50a000d83eec53ee42b8"></a>
+kernel </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">k</a></td></tr>
+<tr class="memdesc:aaf4ea39f8bed50a000d83eec53ee42b8"><td class="mdescLeft"> </td><td class="mdescRight">kernel function <br/></td></tr>
+<tr class="memitem:a37cbe7b34fce3f90419fb45ab74aaa34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37cbe7b34fce3f90419fb45ab74aaa34"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">kernel_param</a></td></tr>
+<tr class="memdesc:a37cbe7b34fce3f90419fb45ab74aaa34"><td class="mdescLeft"> </td><td class="mdescRight">parameters for kernel function <br/></td></tr>
+<tr class="memitem:ab8680533cc667f052c9c83275e0756fa"><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">flags</a></td></tr>
+<tr class="memdesc:ab8680533cc667f052c9c83275e0756fa"><td class="mdescLeft"> </td><td class="mdescRight">flags precomp.  <a href="#ab8680533cc667f052c9c83275e0756fa"></a><br/></td></tr>
+<tr class="memitem:a2ac8e8bdf57c75a916b1f4ef36ca513e"><td class="memItemLeft" align="right" valign="top">double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">pre_K</a></td></tr>
+<tr class="memdesc:a2ac8e8bdf57c75a916b1f4ef36ca513e"><td class="mdescLeft"> </td><td class="mdescRight">internal  <a href="#a2ac8e8bdf57c75a916b1f4ef36ca513e"></a><br/></td></tr>
+<tr class="memitem:a271a9a4e952484997e902c5cbd5ff084"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">n</a></td></tr>
+<tr class="memdesc:a271a9a4e952484997e902c5cbd5ff084"><td class="mdescLeft"> </td><td class="mdescRight">FS__ - fast summation.  <a href="#a271a9a4e952484997e902c5cbd5ff084"></a><br/></td></tr>
+<tr class="memitem:a56edb14f8b403f24bbc1dc69dd3ee972"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56edb14f8b403f24bbc1dc69dd3ee972"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">b</a></td></tr>
+<tr class="memdesc:a56edb14f8b403f24bbc1dc69dd3ee972"><td class="mdescLeft"> </td><td class="mdescRight">expansion coefficients <br/></td></tr>
+<tr class="memitem:a236982e68b9354c7edb47eeff18e05bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a236982e68b9354c7edb47eeff18e05bf"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">p</a></td></tr>
+<tr class="memdesc:a236982e68b9354c7edb47eeff18e05bf"><td class="mdescLeft"> </td><td class="mdescRight">degree of smoothness of regularization <br/></td></tr>
+<tr class="memitem:a9b371cdd9501d570bef3f6cf06edadf6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b371cdd9501d570bef3f6cf06edadf6"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">eps_I</a></td></tr>
+<tr class="memdesc:a9b371cdd9501d570bef3f6cf06edadf6"><td class="mdescLeft"> </td><td class="mdescRight">inner boundary <br/></td></tr>
+<tr class="memitem:a9823827b202d9acf44d46fa178f7bd46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9823827b202d9acf44d46fa178f7bd46"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">eps_B</a></td></tr>
+<tr class="memdesc:a9823827b202d9acf44d46fa178f7bd46"><td class="mdescLeft"> </td><td class="mdescRight">outer boundary <br/></td></tr>
+<tr class="memitem:a7fe2c23ce795461e6bfadeb7986bf766"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fe2c23ce795461e6bfadeb7986bf766"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">mv1</a></td></tr>
+<tr class="memdesc:a7fe2c23ce795461e6bfadeb7986bf766"><td class="mdescLeft"> </td><td class="mdescRight">source nfft plan <br/></td></tr>
+<tr class="memitem:a1830fe7539e1a6085a50a370a982fc78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1830fe7539e1a6085a50a370a982fc78"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">mv2</a></td></tr>
+<tr class="memdesc:a1830fe7539e1a6085a50a370a982fc78"><td class="mdescLeft"> </td><td class="mdescRight">target nfft plan <br/></td></tr>
+<tr class="memitem:a29d4d3dc57d0b1713444efcfddf1b5ef"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">Ad</a></td></tr>
+<tr class="memdesc:a29d4d3dc57d0b1713444efcfddf1b5ef"><td class="mdescLeft"> </td><td class="mdescRight">near field  <a href="#a29d4d3dc57d0b1713444efcfddf1b5ef"></a><br/></td></tr>
+<tr class="memitem:a760ab108c17198a359fc95b61a1a05dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a760ab108c17198a359fc95b61a1a05dc"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">Add</a></td></tr>
+<tr class="memdesc:a760ab108c17198a359fc95b61a1a05dc"><td class="mdescLeft"> </td><td class="mdescRight">spline values <br/></td></tr>
+<tr class="memitem:a3f88fcb0751bfcc2984bea6f53133158"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f88fcb0751bfcc2984bea6f53133158"></a>
+fftw_plan </td><td class="memItemRight" valign="bottom"><b>fft_plan</b></td></tr>
+<tr class="memitem:a7dda1c8a3d19bd1779404008eae2d0af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dda1c8a3d19bd1779404008eae2d0af"></a>
+int </td><td class="memItemRight" valign="bottom"><b>box_count</b></td></tr>
+<tr class="memitem:a811624e77b0a69624162dc128711cfdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a811624e77b0a69624162dc128711cfdf"></a>
+int </td><td class="memItemRight" valign="bottom"><b>box_count_per_dim</b></td></tr>
+<tr class="memitem:a6c2d81fd3daa6a1a511902968f8393de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c2d81fd3daa6a1a511902968f8393de"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>box_offset</b></td></tr>
+<tr class="memitem:a7d01da0676bf417fa9491754151f9511"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d01da0676bf417fa9491754151f9511"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>box_x</b></td></tr>
+<tr class="memitem:a98f3ef5fd8a1d535eb1ef59382d0be9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98f3ef5fd8a1d535eb1ef59382d0be9e"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>box_alpha</b></td></tr>
+<tr class="memitem:a53221f0e2ff6a760f0f927d795746e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53221f0e2ff6a760f0f927d795746e8d"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">MEASURE_TIME_t</a> [8]</td></tr>
+<tr class="memdesc:a53221f0e2ff6a760f0f927d795746e8d"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>plan for fast summation algorithm </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00071">71</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ad70ee163a195c108d0a5510a8407a307"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fastsum_plan_::d</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>api </p>
+<p>number of dimensions </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00075">75</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00363">BuildBox()</a>, <a class="el" href="fastsum_8c_source.html#l00775">fastsum_exact()</a>, <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>, <a class="el" href="fastsum_8c_source.html#l00940">fastsum_trafo()</a>, and <a class="el" href="fastsum_8c_source.html#l00465">SearchBox()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8680533cc667f052c9c83275e0756fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned fastsum_plan_::flags</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>flags precomp. </p>
+<p>and approx.type </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00089">89</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00742">fastsum_finalize()</a>, <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>, <a class="el" href="fastsum_8c_source.html#l00940">fastsum_trafo()</a>, and <a class="el" href="fastsum_8c_source.html#l00465">SearchBox()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ac8e8bdf57c75a916b1f4ef36ca513e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double _Complex* fastsum_plan_::pre_K</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>internal </p>
+<p>DS_PRE - direct summation precomputed K(x_j-y_l) </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00094">94</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a271a9a4e952484997e902c5cbd5ff084"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fastsum_plan_::n</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>FS__ - fast summation. </p>
+<p>expansion degree </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00097">97</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, and <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a29d4d3dc57d0b1713444efcfddf1b5ef"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fastsum_plan_::Ad</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>near field </p>
+<p>number of spline knots for nearfield computation of regularized kernel </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00108">108</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>, <a class="el" href="fastsum_8c_source.html#l00940">fastsum_trafo()</a>, and <a class="el" href="fastsum_8c_source.html#l00465">SearchBox()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="fastsum_8h_source.html">fastsum.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structfgt__plan.html b/doc/api/html/structfgt__plan.html
new file mode 100644
index 0000000..99686e3
--- /dev/null
+++ b/doc/api/html/structfgt__plan.html
@@ -0,0 +1,105 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fgt_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">fgt_plan Struct Reference<div class="ingroups"><a class="el" href="group__applications__fastgauss.html">Fast Gauss transfrom with complex parameter</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for the Gauss transform.  
+ <a href="structfgt__plan.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afbd9662ab140a1c55ded8928b2be3e87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbd9662ab140a1c55ded8928b2be3e87"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">N</a></td></tr>
+<tr class="memdesc:afbd9662ab140a1c55ded8928b2be3e87"><td class="mdescLeft"> </td><td class="mdescRight">number of source nodes <br/></td></tr>
+<tr class="memitem:a64030dcfd57263db29ff440c6cdd26aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64030dcfd57263db29ff440c6cdd26aa"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">M</a></td></tr>
+<tr class="memdesc:a64030dcfd57263db29ff440c6cdd26aa"><td class="mdescLeft"> </td><td class="mdescRight">number of target nodes <br/></td></tr>
+<tr class="memitem:a9c17084806d4d213bed15e6391c90d1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c17084806d4d213bed15e6391c90d1a"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">alpha</a></td></tr>
+<tr class="memdesc:a9c17084806d4d213bed15e6391c90d1a"><td class="mdescLeft"> </td><td class="mdescRight">source coefficients <br/></td></tr>
+<tr class="memitem:a7efff13d6d5f6c21c134e06ffae7fff1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7efff13d6d5f6c21c134e06ffae7fff1"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">f</a></td></tr>
+<tr class="memdesc:a7efff13d6d5f6c21c134e06ffae7fff1"><td class="mdescLeft"> </td><td class="mdescRight">target evaluations <br/></td></tr>
+<tr class="memitem:a081f3a5e595025f27b4bfd89a3f74869"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a081f3a5e595025f27b4bfd89a3f74869"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">flags</a></td></tr>
+<tr class="memdesc:a081f3a5e595025f27b4bfd89a3f74869"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation and approximation type <br/></td></tr>
+<tr class="memitem:af6e97b6f971e4f89ceeac2bca9d69666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6e97b6f971e4f89ceeac2bca9d69666"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">sigma</a></td></tr>
+<tr class="memdesc:af6e97b6f971e4f89ceeac2bca9d69666"><td class="mdescLeft"> </td><td class="mdescRight">parameter of the Gaussian <br/></td></tr>
+<tr class="memitem:ac264aff49bf16f52fa94ebd9e559fc93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac264aff49bf16f52fa94ebd9e559fc93"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">x</a></td></tr>
+<tr class="memdesc:ac264aff49bf16f52fa94ebd9e559fc93"><td class="mdescLeft"> </td><td class="mdescRight">source nodes in <img class="formulaInl" alt="$[-1/4,1/4]$" src="form_95.png"/> <br/></td></tr>
+<tr class="memitem:af80c5936eb966c0300dd3e5042b74056"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af80c5936eb966c0300dd3e5042b74056"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">y</a></td></tr>
+<tr class="memdesc:af80c5936eb966c0300dd3e5042b74056"><td class="mdescLeft"> </td><td class="mdescRight">target nodes in <img class="formulaInl" alt="$[-1/4,1/4]$" src="form_95.png"/> <br/></td></tr>
+<tr class="memitem:ad7d9387df7df72e3d5d628d7e429c2a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7d9387df7df72e3d5d628d7e429c2a2"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">pre_cexp</a></td></tr>
+<tr class="memdesc:ad7d9387df7df72e3d5d628d7e429c2a2"><td class="mdescLeft"> </td><td class="mdescRight">precomputed values for dgt <br/></td></tr>
+<tr class="memitem:a2e6ad196b67db3b9811fdb8e777633b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e6ad196b67db3b9811fdb8e777633b1"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">n</a></td></tr>
+<tr class="memdesc:a2e6ad196b67db3b9811fdb8e777633b1"><td class="mdescLeft"> </td><td class="mdescRight">expansion degree <br/></td></tr>
+<tr class="memitem:ac6eda4d64140b8d5d8ef93e55e5f9b73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac6eda4d64140b8d5d8ef93e55e5f9b73"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">p</a></td></tr>
+<tr class="memdesc:ac6eda4d64140b8d5d8ef93e55e5f9b73"><td class="mdescLeft"> </td><td class="mdescRight">period, at least 1 <br/></td></tr>
+<tr class="memitem:a0a52777ff0982564c930c107a92d29d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a52777ff0982564c930c107a92d29d4"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">b</a></td></tr>
+<tr class="memdesc:a0a52777ff0982564c930c107a92d29d4"><td class="mdescLeft"> </td><td class="mdescRight">expansion coefficients <br/></td></tr>
+<tr class="memitem:aa610ca4d19d67b72eab19327b373e3e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa610ca4d19d67b72eab19327b373e3e2"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">nplan1</a></td></tr>
+<tr class="memdesc:aa610ca4d19d67b72eab19327b373e3e2"><td class="mdescLeft"> </td><td class="mdescRight">source nfft plan <br/></td></tr>
+<tr class="memitem:a456c907589235a56d6f733220a40a163"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a456c907589235a56d6f733220a40a163"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">nplan2</a></td></tr>
+<tr class="memdesc:a456c907589235a56d6f733220a40a163"><td class="mdescLeft"> </td><td class="mdescRight">target nfft plan <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for the Gauss transform. </p>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00072">72</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="fastgauss_8c_source.html">fastgauss.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structfpt__data__.html b/doc/api/html/structfpt__data__.html
new file mode 100644
index 0000000..37ca641
--- /dev/null
+++ b/doc/api/html/structfpt__data__.html
@@ -0,0 +1,306 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fpt_data_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">fpt_data_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Holds data for a single cascade summation.  
+ <a href="structfpt__data__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fpt_8h_source.html">fpt.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ae511611ff434c5134446a77ec6053854"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae511611ff434c5134446a77ec6053854"></a>
+<a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt_step</a> ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">steps</a></td></tr>
+<tr class="memdesc:ae511611ff434c5134446a77ec6053854"><td class="mdescLeft"> </td><td class="mdescRight">The cascade summation steps. <br/></td></tr>
+<tr class="memitem:aeed5a13bcd0301058d37d0446d735334"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">k_start</a></td></tr>
+<tr class="memdesc:aeed5a13bcd0301058d37d0446d735334"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#aeed5a13bcd0301058d37d0446d735334"></a><br/></td></tr>
+<tr class="memitem:a8474f38ec1ed4d1c41235de523fc2519"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">alphaN</a></td></tr>
+<tr class="memdesc:a8474f38ec1ed4d1c41235de523fc2519"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#a8474f38ec1ed4d1c41235de523fc2519"></a><br/></td></tr>
+<tr class="memitem:ae62530023226d004ccaa18f4e1565e8d"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">betaN</a></td></tr>
+<tr class="memdesc:ae62530023226d004ccaa18f4e1565e8d"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#ae62530023226d004ccaa18f4e1565e8d"></a><br/></td></tr>
+<tr class="memitem:a606df2fa8fb3173a8ced31366b0bcc8a"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">gammaN</a></td></tr>
+<tr class="memdesc:a606df2fa8fb3173a8ced31366b0bcc8a"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#a606df2fa8fb3173a8ced31366b0bcc8a"></a><br/></td></tr>
+<tr class="memitem:ae7491902143322ce74a8cccfa5ec7b3e"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">alpha_0</a></td></tr>
+<tr class="memdesc:ae7491902143322ce74a8cccfa5ec7b3e"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#ae7491902143322ce74a8cccfa5ec7b3e"></a><br/></td></tr>
+<tr class="memitem:a4639c4494938cad8b0536191ca2eefaa"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">beta_0</a></td></tr>
+<tr class="memdesc:a4639c4494938cad8b0536191ca2eefaa"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#a4639c4494938cad8b0536191ca2eefaa"></a><br/></td></tr>
+<tr class="memitem:aa8dd07acd6d154b929423231b4b2847a"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">gamma_m1</a></td></tr>
+<tr class="memdesc:aa8dd07acd6d154b929423231b4b2847a"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#aa8dd07acd6d154b929423231b4b2847a"></a><br/></td></tr>
+<tr class="memitem:a048079e693b84da0013ed8edba95a2e7"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">_alpha</a></td></tr>
+<tr class="memdesc:a048079e693b84da0013ed8edba95a2e7"><td class="mdescLeft"> </td><td class="mdescRight">< TODO Add comment here.  <a href="#a048079e693b84da0013ed8edba95a2e7"></a><br/></td></tr>
+<tr class="memitem:aeb8f8f8eb1c0b93d135e8e083835edfb"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">_beta</a></td></tr>
+<tr class="memdesc:aeb8f8f8eb1c0b93d135e8e083835edfb"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#aeb8f8f8eb1c0b93d135e8e083835edfb"></a><br/></td></tr>
+<tr class="memitem:a1fb58e76d4d78d6ed0f71a040d7157dc"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">_gamma</a></td></tr>
+<tr class="memdesc:a1fb58e76d4d78d6ed0f71a040d7157dc"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#a1fb58e76d4d78d6ed0f71a040d7157dc"></a><br/></td></tr>
+<tr class="memitem:ad56b765b9faabb4071e844e7d1355151"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">alpha</a></td></tr>
+<tr class="memdesc:ad56b765b9faabb4071e844e7d1355151"><td class="mdescLeft"> </td><td class="mdescRight">< TODO Add comment here.  <a href="#ad56b765b9faabb4071e844e7d1355151"></a><br/></td></tr>
+<tr class="memitem:af28f490521ca26420df33a1f590363e3"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">beta</a></td></tr>
+<tr class="memdesc:af28f490521ca26420df33a1f590363e3"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#af28f490521ca26420df33a1f590363e3"></a><br/></td></tr>
+<tr class="memitem:a13aaa57c27f3ab5eab4c28d47d501723"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">gamma</a></td></tr>
+<tr class="memdesc:a13aaa57c27f3ab5eab4c28d47d501723"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#a13aaa57c27f3ab5eab4c28d47d501723"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Holds data for a single cascade summation. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00078">78</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aeed5a13bcd0301058d37d0446d735334"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fpt_data_::k_start</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00081">81</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8474f38ec1ed4d1c41235de523fc2519"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * fpt_data_::alphaN</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00082">82</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae62530023226d004ccaa18f4e1565e8d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * fpt_data_::betaN</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00083">83</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a606df2fa8fb3173a8ced31366b0bcc8a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * fpt_data_::gammaN</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00084">84</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae7491902143322ce74a8cccfa5ec7b3e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double fpt_data_::alpha_0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00085">85</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4639c4494938cad8b0536191ca2eefaa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double fpt_data_::beta_0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00086">86</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8dd07acd6d154b929423231b4b2847a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double fpt_data_::gamma_m1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00087">87</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a048079e693b84da0013ed8edba95a2e7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* fpt_data_::_alpha</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>< TODO Add comment here. </p>
+<pre class="fragment">      </pre><p> TODO Add comment here. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00089">89</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb8f8f8eb1c0b93d135e8e083835edfb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* fpt_data_::_beta</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00090">90</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1fb58e76d4d78d6ed0f71a040d7157dc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* fpt_data_::_gamma</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00091">91</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad56b765b9faabb4071e844e7d1355151"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* fpt_data_::alpha</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>< TODO Add comment here. </p>
+<pre class="fragment">      </pre><p> TODO Add comment here. </p>
+
+<p>Definition at line <a class="el" href="fpt_8h_source.html#l00052">52</a> of file <a class="el" href="fpt_8h_source.html">fpt.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af28f490521ca26420df33a1f590363e3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* fpt_data_::beta</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8h_source.html#l00053">53</a> of file <a class="el" href="fpt_8h_source.html">fpt.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13aaa57c27f3ab5eab4c28d47d501723"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double* fpt_data_::gamma</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8h_source.html#l00054">54</a> of file <a class="el" href="fpt_8h_source.html">fpt.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="fpt_8c_source.html">fpt.c</a></li>
+<li><a class="el" href="fpt_8h_source.html">fpt.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structfpt__set__s__.html b/doc/api/html/structfpt__set__s__.html
new file mode 100644
index 0000000..cef3f8c
--- /dev/null
+++ b/doc/api/html/structfpt__set__s__.html
@@ -0,0 +1,151 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fpt_set_s_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">fpt_set_s_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Holds data for a set of cascade summations.  
+ <a href="structfpt__set__s__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fpt_8h_source.html">fpt.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ab2272294463f288c3aaa4513bfeac758"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2272294463f288c3aaa4513bfeac758"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">flags</a></td></tr>
+<tr class="memdesc:ab2272294463f288c3aaa4513bfeac758"><td class="mdescLeft"> </td><td class="mdescRight">The flags. <br/></td></tr>
+<tr class="memitem:a2387122a1e670e2e61b1699458224804"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2387122a1e670e2e61b1699458224804"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">M</a></td></tr>
+<tr class="memdesc:a2387122a1e670e2e61b1699458224804"><td class="mdescLeft"> </td><td class="mdescRight">The number of DPT transforms. <br/></td></tr>
+<tr class="memitem:aa353a04683b31bed668ee490d5df1b81"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">N</a></td></tr>
+<tr class="memdesc:aa353a04683b31bed668ee490d5df1b81"><td class="mdescLeft"> </td><td class="mdescRight">The transform length.  <a href="#aa353a04683b31bed668ee490d5df1b81"></a><br/></td></tr>
+<tr class="memitem:a1d35166e05db58736e422850fe02edef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d35166e05db58736e422850fe02edef"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">t</a></td></tr>
+<tr class="memdesc:a1d35166e05db58736e422850fe02edef"><td class="mdescLeft"> </td><td class="mdescRight">The exponent of N. <br/></td></tr>
+<tr class="memitem:a0509dfa979aa395a80d8f38b2f5fb760"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0509dfa979aa395a80d8f38b2f5fb760"></a>
+<a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt_data</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">dpt</a></td></tr>
+<tr class="memdesc:a0509dfa979aa395a80d8f38b2f5fb760"><td class="mdescLeft"> </td><td class="mdescRight">The DPT transform data. <br/></td></tr>
+<tr class="memitem:a58a8f2867286e0be19dd89e8d41c033b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58a8f2867286e0be19dd89e8d41c033b"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">xcvecs</a></td></tr>
+<tr class="memdesc:a58a8f2867286e0be19dd89e8d41c033b"><td class="mdescLeft"> </td><td class="mdescRight">Array of pointers to arrays containing the Chebyshev nodes. <br/></td></tr>
+<tr class="memitem:a226e29e0f97627e77ec4fcebd0c49fdf"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">xc</a></td></tr>
+<tr class="memdesc:a226e29e0f97627e77ec4fcebd0c49fdf"><td class="mdescLeft"> </td><td class="mdescRight">Array for Chebychev-nodes.  <a href="#a226e29e0f97627e77ec4fcebd0c49fdf"></a><br/></td></tr>
+<tr class="memitem:ad93080b29d1b51fe3fdda734b308a4f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad93080b29d1b51fe3fdda734b308a4f4"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>temp</b></td></tr>
+<tr class="memitem:a16cf21fa35d0a74d8f86e6b8c85352bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16cf21fa35d0a74d8f86e6b8c85352bb"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>work</b></td></tr>
+<tr class="memitem:a5a55e5634be8d74b828bfb5fbcbc6514"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a55e5634be8d74b828bfb5fbcbc6514"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>result</b></td></tr>
+<tr class="memitem:abfc15a0e80ecd9063ef920582eb88a7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfc15a0e80ecd9063ef920582eb88a7c"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>vec3</b></td></tr>
+<tr class="memitem:a4bf278d535fe4efee8b066bedf845d48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bf278d535fe4efee8b066bedf845d48"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>vec4</b></td></tr>
+<tr class="memitem:ae16f7eb81c5cc6e4519b81207096454f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae16f7eb81c5cc6e4519b81207096454f"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>z</b></td></tr>
+<tr class="memitem:a5f146823d105906abf0cdc4c5f9638dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f146823d105906abf0cdc4c5f9638dc"></a>
+fftw_plan * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">plans_dct3</a></td></tr>
+<tr class="memdesc:a5f146823d105906abf0cdc4c5f9638dc"><td class="mdescLeft"> </td><td class="mdescRight">Transform plans for the fftw library. <br/></td></tr>
+<tr class="memitem:aead22ae71c82ad37da07f6166bf53fbc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aead22ae71c82ad37da07f6166bf53fbc"></a>
+fftw_plan * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">plans_dct2</a></td></tr>
+<tr class="memdesc:aead22ae71c82ad37da07f6166bf53fbc"><td class="mdescLeft"> </td><td class="mdescRight">Transform plans for the fftw library. <br/></td></tr>
+<tr class="memitem:a15eafd93be80eeea02173a9042e303d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15eafd93be80eeea02173a9042e303d3"></a>
+fftw_r2r_kind * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">kinds</a></td></tr>
+<tr class="memdesc:a15eafd93be80eeea02173a9042e303d3"><td class="mdescLeft"> </td><td class="mdescRight">Transform kinds for fftw library. <br/></td></tr>
+<tr class="memitem:afd6508cc584ac06b9f679be441b6e7f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd6508cc584ac06b9f679be441b6e7f6"></a>
+fftw_r2r_kind * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">kindsr</a></td></tr>
+<tr class="memdesc:afd6508cc584ac06b9f679be441b6e7f6"><td class="mdescLeft"> </td><td class="mdescRight">Transform kinds for fftw library. <br/></td></tr>
+<tr class="memitem:a26355113f8348c270cd02bc196fad681"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26355113f8348c270cd02bc196fad681"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">lengths</a></td></tr>
+<tr class="memdesc:a26355113f8348c270cd02bc196fad681"><td class="mdescLeft"> </td><td class="mdescRight">Transform lengths for fftw library. <br/></td></tr>
+<tr class="memitem:a753c30d0a52e91d6e04da874261e7fdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a753c30d0a52e91d6e04da874261e7fdf"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>xc_slow</b></td></tr>
+<tr class="memitem:a401070e7725566f06ae740e7e99a12a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a401070e7725566f06ae740e7e99a12a2"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">flags</a></td></tr>
+<tr class="memdesc:a401070e7725566f06ae740e7e99a12a2"><td class="mdescLeft"> </td><td class="mdescRight">The flags. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Holds data for a set of cascade summations. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00097">97</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aa353a04683b31bed668ee490d5df1b81"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fpt_set_s_::N</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The transform length. </p>
+<p>Must be a power of two. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00101">101</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a226e29e0f97627e77ec4fcebd0c49fdf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double * fpt_set_s_::xc</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Array for Chebychev-nodes. </p>
+<pre class="fragment"> </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00108">108</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="fpt_8c_source.html">fpt.c</a></li>
+<li><a class="el" href="fpt_8h_source.html">fpt.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structfpt__step__.html b/doc/api/html/structfpt__step__.html
new file mode 100644
index 0000000..9773dba
--- /dev/null
+++ b/doc/api/html/structfpt__step__.html
@@ -0,0 +1,133 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - fpt_step_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">fpt_step_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Holds data for a single multiplication step in the cascade summation.  
+ <a href="structfpt__step__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fpt_8h_source.html">fpt.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a71dc6483b4f3b958519bdafeae2c1dbf"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">stable</a></td></tr>
+<tr class="memdesc:a71dc6483b4f3b958519bdafeae2c1dbf"><td class="mdescLeft"> </td><td class="mdescRight">Indicates if the values contained represent a fast or a slow stabilized step.  <a href="#a71dc6483b4f3b958519bdafeae2c1dbf"></a><br/></td></tr>
+<tr class="memitem:ac6767b7c6935b1f2af5dd54e2e8f690b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">Ns</a></td></tr>
+<tr class="memdesc:ac6767b7c6935b1f2af5dd54e2e8f690b"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#ac6767b7c6935b1f2af5dd54e2e8f690b"></a><br/></td></tr>
+<tr class="memitem:aeb754fe2aedc1f15cbb9c75c212772fb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">ts</a></td></tr>
+<tr class="memdesc:aeb754fe2aedc1f15cbb9c75c212772fb"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here.  <a href="#aeb754fe2aedc1f15cbb9c75c212772fb"></a><br/></td></tr>
+<tr class="memitem:a73bfb18a62b4b4db10c8ad32796fc1ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73bfb18a62b4b4db10c8ad32796fc1ca"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>a11</b></td></tr>
+<tr class="memitem:a71db335416c48adbc118782261264d54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71db335416c48adbc118782261264d54"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>a12</b></td></tr>
+<tr class="memitem:ac1c8fe4ca38b68dd3dd9a6c51ae456b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1c8fe4ca38b68dd3dd9a6c51ae456b1"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>a21</b></td></tr>
+<tr class="memitem:a671d73e56c51c3c8daaa9678da341ce9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a671d73e56c51c3c8daaa9678da341ce9"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">a22</a></td></tr>
+<tr class="memdesc:a671d73e56c51c3c8daaa9678da341ce9"><td class="mdescLeft"> </td><td class="mdescRight">The matrix components. <br/></td></tr>
+<tr class="memitem:affc3fb53919156a934a28c6350f7f540"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affc3fb53919156a934a28c6350f7f540"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">g</a></td></tr>
+<tr class="memdesc:affc3fb53919156a934a28c6350f7f540"><td class="mdescLeft"> </td><td class="mdescRight"><pre class="fragment">                             </pre> <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Holds data for a single multiplication step in the cascade summation. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00064">64</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a71dc6483b4f3b958519bdafeae2c1dbf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool fpt_step_::stable</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Indicates if the values contained represent a fast or a slow stabilized step. </p>
+<pre class="fragment">     </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00066">66</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac6767b7c6935b1f2af5dd54e2e8f690b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fpt_step_::Ns</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00069">69</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb754fe2aedc1f15cbb9c75c212772fb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int fpt_step_::ts</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment">      </pre> 
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00070">70</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="fpt_8c_source.html">fpt.c</a></li>
+<li><a class="el" href="fpt_8h_source.html">fpt.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structimri__inh__2d1d__adjoint__plan.html b/doc/api/html/structimri__inh__2d1d__adjoint__plan.html
new file mode 100644
index 0000000..e98495c
--- /dev/null
+++ b/doc/api/html/structimri__inh__2d1d__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - imri_inh_2d1d_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">imri_inh_2d1d_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.  
+ <a href="structimri__inh__2d1d__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a18f9b22f7f221aedc3dabab2cb07e633"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18f9b22f7f221aedc3dabab2cb07e633"></a>
+<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a18f9b22f7f221aedc3dabab2cb07e633">mv</a></td></tr>
+<tr class="memdesc:a18f9b22f7f221aedc3dabab2cb07e633"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:adea4e1650ddadc3f0f7c1d833b6b7789"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adea4e1650ddadc3f0f7c1d833b6b7789"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#adea4e1650ddadc3f0f7c1d833b6b7789">flags</a></td></tr>
+<tr class="memdesc:adea4e1650ddadc3f0f7c1d833b6b7789"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a552e0603ee92be729e052bb6028a1fb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a552e0603ee92be729e052bb6028a1fb4"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a552e0603ee92be729e052bb6028a1fb4">w</a></td></tr>
+<tr class="memdesc:a552e0603ee92be729e052bb6028a1fb4"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aeb6a8106c1347dc7decf42e4520f70ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb6a8106c1347dc7decf42e4520f70ab"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aeb6a8106c1347dc7decf42e4520f70ab">w_hat</a></td></tr>
+<tr class="memdesc:aeb6a8106c1347dc7decf42e4520f70ab"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:aaed8db541ee689c5ec82bb8e18c4c8d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaed8db541ee689c5ec82bb8e18c4c8d1"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aaed8db541ee689c5ec82bb8e18c4c8d1">y_hat</a></td></tr>
+<tr class="memdesc:aaed8db541ee689c5ec82bb8e18c4c8d1"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:ae154ca7cd0d7ebc7e0db4b1f415b56fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae154ca7cd0d7ebc7e0db4b1f415b56fd"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ae154ca7cd0d7ebc7e0db4b1f415b56fd">f_iter</a></td></tr>
+<tr class="memdesc:ae154ca7cd0d7ebc7e0db4b1f415b56fd"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a6088e9949fa966d839e8feadfb34596e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6088e9949fa966d839e8feadfb34596e"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a6088e9949fa966d839e8feadfb34596e">r_hat_iter</a></td></tr>
+<tr class="memdesc:a6088e9949fa966d839e8feadfb34596e"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a2e2d8f1f1a6a7500c1689cf5021abcde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e2d8f1f1a6a7500c1689cf5021abcde"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">z_iter</a></td></tr>
+<tr class="memdesc:a2e2d8f1f1a6a7500c1689cf5021abcde"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:aafe496b74fca5e5d96ce258bb3da1ffc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafe496b74fca5e5d96ce258bb3da1ffc"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aafe496b74fca5e5d96ce258bb3da1ffc">p_iter</a></td></tr>
+<tr class="memdesc:aafe496b74fca5e5d96ce258bb3da1ffc"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:af253d4b292aa7db655ca51dfdf598bf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af253d4b292aa7db655ca51dfdf598bf9"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#af253d4b292aa7db655ca51dfdf598bf9">v_hat_iter</a></td></tr>
+<tr class="memdesc:af253d4b292aa7db655ca51dfdf598bf9"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a740c87ac77f68578613d58e569deedb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a740c87ac77f68578613d58e569deedb2"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a740c87ac77f68578613d58e569deedb2">alpha_iter</a></td></tr>
+<tr class="memdesc:a740c87ac77f68578613d58e569deedb2"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a7f3271035bca7b994475e565ab1ffb22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f3271035bca7b994475e565ab1ffb22"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a7f3271035bca7b994475e565ab1ffb22">beta_iter</a></td></tr>
+<tr class="memdesc:a7f3271035bca7b994475e565ab1ffb22"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a52eec6bb5ee2ae209ed90d44739c8769"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52eec6bb5ee2ae209ed90d44739c8769"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a52eec6bb5ee2ae209ed90d44739c8769">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:a52eec6bb5ee2ae209ed90d44739c8769"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a846d92d450d33e64996d28c2054e3181"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a846d92d450d33e64996d28c2054e3181"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a846d92d450d33e64996d28c2054e3181">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a846d92d450d33e64996d28c2054e3181"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ac3ca8cbbcd9958d69b15b4696e14a2e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3ca8cbbcd9958d69b15b4696e14a2e3"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ac3ca8cbbcd9958d69b15b4696e14a2e3">dot_z_iter</a></td></tr>
+<tr class="memdesc:ac3ca8cbbcd9958d69b15b4696e14a2e3"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a92ceaf9529a44c28fd3b6d9d63c0c13f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92ceaf9529a44c28fd3b6d9d63c0c13f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a92ceaf9529a44c28fd3b6d9d63c0c13f">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a92ceaf9529a44c28fd3b6d9d63c0c13f"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a00c75acfb362339a30d2809520fcd775"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00c75acfb362339a30d2809520fcd775"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a00c75acfb362339a30d2809520fcd775">dot_p_iter</a></td></tr>
+<tr class="memdesc:a00c75acfb362339a30d2809520fcd775"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:aed3f646cabd7b8ab1a480d7607ea45f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed3f646cabd7b8ab1a480d7607ea45f3"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aed3f646cabd7b8ab1a480d7607ea45f3">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:aed3f646cabd7b8ab1a480d7607ea45f3"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00083">83</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structimri__inh__3d__adjoint__plan.html b/doc/api/html/structimri__inh__3d__adjoint__plan.html
new file mode 100644
index 0000000..be345e6
--- /dev/null
+++ b/doc/api/html/structimri__inh__3d__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - imri_inh_3d_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">imri_inh_3d_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.  
+ <a href="structimri__inh__3d__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afa903e9a436fc17da89b08377a6a733e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa903e9a436fc17da89b08377a6a733e"></a>
+<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#afa903e9a436fc17da89b08377a6a733e">mv</a></td></tr>
+<tr class="memdesc:afa903e9a436fc17da89b08377a6a733e"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:aadd41183d54818f3e8528affe40769bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadd41183d54818f3e8528affe40769bc"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#aadd41183d54818f3e8528affe40769bc">flags</a></td></tr>
+<tr class="memdesc:aadd41183d54818f3e8528affe40769bc"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:aa4cd6ea3040339a39047978a7c1f1c9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4cd6ea3040339a39047978a7c1f1c9d"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#aa4cd6ea3040339a39047978a7c1f1c9d">w</a></td></tr>
+<tr class="memdesc:aa4cd6ea3040339a39047978a7c1f1c9d"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aa53e43e9cd65db3ba08ed275cb62d456"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa53e43e9cd65db3ba08ed275cb62d456"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#aa53e43e9cd65db3ba08ed275cb62d456">w_hat</a></td></tr>
+<tr class="memdesc:aa53e43e9cd65db3ba08ed275cb62d456"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a968843771644077babbdd687b6bbdb5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a968843771644077babbdd687b6bbdb5d"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a968843771644077babbdd687b6bbdb5d">y_hat</a></td></tr>
+<tr class="memdesc:a968843771644077babbdd687b6bbdb5d"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a4207ca1175efe7865d6631ae5a704632"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4207ca1175efe7865d6631ae5a704632"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a4207ca1175efe7865d6631ae5a704632">f_iter</a></td></tr>
+<tr class="memdesc:a4207ca1175efe7865d6631ae5a704632"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:acbea7a40d34bbca7688da41378140926"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbea7a40d34bbca7688da41378140926"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#acbea7a40d34bbca7688da41378140926">r_hat_iter</a></td></tr>
+<tr class="memdesc:acbea7a40d34bbca7688da41378140926"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a0efcec4db642e9066fbc64c1c70bc079"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0efcec4db642e9066fbc64c1c70bc079"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">z_iter</a></td></tr>
+<tr class="memdesc:a0efcec4db642e9066fbc64c1c70bc079"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:ade134a86a60d2538595acc2fafb83e41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade134a86a60d2538595acc2fafb83e41"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ade134a86a60d2538595acc2fafb83e41">p_iter</a></td></tr>
+<tr class="memdesc:ade134a86a60d2538595acc2fafb83e41"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:ad04d2974dedefdc45e176e5ea5399aab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad04d2974dedefdc45e176e5ea5399aab"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ad04d2974dedefdc45e176e5ea5399aab">v_hat_iter</a></td></tr>
+<tr class="memdesc:ad04d2974dedefdc45e176e5ea5399aab"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae6e228dc1df00e0b3de8873f0de12675"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6e228dc1df00e0b3de8873f0de12675"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ae6e228dc1df00e0b3de8873f0de12675">alpha_iter</a></td></tr>
+<tr class="memdesc:ae6e228dc1df00e0b3de8873f0de12675"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:ac622efae9216d5d4335118084c7fcbfa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac622efae9216d5d4335118084c7fcbfa"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ac622efae9216d5d4335118084c7fcbfa">beta_iter</a></td></tr>
+<tr class="memdesc:ac622efae9216d5d4335118084c7fcbfa"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:af456205ec418161fe20de523e423bb51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af456205ec418161fe20de523e423bb51"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#af456205ec418161fe20de523e423bb51">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:af456205ec418161fe20de523e423bb51"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:acce4b5401db74c6e9896a78eccc9ca1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acce4b5401db74c6e9896a78eccc9ca1e"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#acce4b5401db74c6e9896a78eccc9ca1e">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:acce4b5401db74c6e9896a78eccc9ca1e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:af91db19db24ca1c648d97ea516367f94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af91db19db24ca1c648d97ea516367f94"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#af91db19db24ca1c648d97ea516367f94">dot_z_iter</a></td></tr>
+<tr class="memdesc:af91db19db24ca1c648d97ea516367f94"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a794d80ffe20e25a4d69340d925d8624c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a794d80ffe20e25a4d69340d925d8624c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a794d80ffe20e25a4d69340d925d8624c">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a794d80ffe20e25a4d69340d925d8624c"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a65805c60e7d3a18d9a8952da80286032"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65805c60e7d3a18d9a8952da80286032"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a65805c60e7d3a18d9a8952da80286032">dot_p_iter</a></td></tr>
+<tr class="memdesc:a65805c60e7d3a18d9a8952da80286032"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:ae251b00724c42f9c0f906e823c9e17f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae251b00724c42f9c0f906e823c9e17f8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ae251b00724c42f9c0f906e823c9e17f8">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:ae251b00724c42f9c0f906e823c9e17f8"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00084">84</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structinfct__adjoint__plan.html b/doc/api/html/structinfct__adjoint__plan.html
new file mode 100644
index 0000000..5b36279
--- /dev/null
+++ b/doc/api/html/structinfct__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - infct_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">infct_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.  
+ <a href="structinfct__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a65d97330deb4cd9de78e4b9aa85afa62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65d97330deb4cd9de78e4b9aa85afa62"></a>
+<a class="el" href="structnfct__plan.html">nfct_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a65d97330deb4cd9de78e4b9aa85afa62">mv</a></td></tr>
+<tr class="memdesc:a65d97330deb4cd9de78e4b9aa85afa62"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:ad913ef9fc7d9bb8ca4f91f1abbf99949"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad913ef9fc7d9bb8ca4f91f1abbf99949"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ad913ef9fc7d9bb8ca4f91f1abbf99949">flags</a></td></tr>
+<tr class="memdesc:ad913ef9fc7d9bb8ca4f91f1abbf99949"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:add093d84bfb7f6f5d5b5512e000efc68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add093d84bfb7f6f5d5b5512e000efc68"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#add093d84bfb7f6f5d5b5512e000efc68">w</a></td></tr>
+<tr class="memdesc:add093d84bfb7f6f5d5b5512e000efc68"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:af14d4eb49aee59948ea57d30dbf4d628"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af14d4eb49aee59948ea57d30dbf4d628"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#af14d4eb49aee59948ea57d30dbf4d628">w_hat</a></td></tr>
+<tr class="memdesc:af14d4eb49aee59948ea57d30dbf4d628"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a4a98ec178d9d74dab4e617beebc419a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a98ec178d9d74dab4e617beebc419a6"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a4a98ec178d9d74dab4e617beebc419a6">y_hat</a></td></tr>
+<tr class="memdesc:a4a98ec178d9d74dab4e617beebc419a6"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:af72ea2aed94d3e789dd064776fdf2919"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af72ea2aed94d3e789dd064776fdf2919"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#af72ea2aed94d3e789dd064776fdf2919">f_iter</a></td></tr>
+<tr class="memdesc:af72ea2aed94d3e789dd064776fdf2919"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a3bb77b67c3779716d767e76b8661efbc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bb77b67c3779716d767e76b8661efbc"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a3bb77b67c3779716d767e76b8661efbc">r_hat_iter</a></td></tr>
+<tr class="memdesc:a3bb77b67c3779716d767e76b8661efbc"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a5b1da212f8c15d7ca209dbe347a5ec8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b1da212f8c15d7ca209dbe347a5ec8f"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">z_iter</a></td></tr>
+<tr class="memdesc:a5b1da212f8c15d7ca209dbe347a5ec8f"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a6c81df2130d05bcbbcd6646cd27b671e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c81df2130d05bcbbcd6646cd27b671e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a6c81df2130d05bcbbcd6646cd27b671e">p_iter</a></td></tr>
+<tr class="memdesc:a6c81df2130d05bcbbcd6646cd27b671e"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:af025d6f664c1ccdd552f61e68d58ec97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af025d6f664c1ccdd552f61e68d58ec97"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#af025d6f664c1ccdd552f61e68d58ec97">v_hat_iter</a></td></tr>
+<tr class="memdesc:af025d6f664c1ccdd552f61e68d58ec97"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a6e7a960d8661f6c459ebac7085e2587f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e7a960d8661f6c459ebac7085e2587f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a6e7a960d8661f6c459ebac7085e2587f">alpha_iter</a></td></tr>
+<tr class="memdesc:a6e7a960d8661f6c459ebac7085e2587f"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a3e6ea22841cd010652beb76f554bdf92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e6ea22841cd010652beb76f554bdf92"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a3e6ea22841cd010652beb76f554bdf92">beta_iter</a></td></tr>
+<tr class="memdesc:a3e6ea22841cd010652beb76f554bdf92"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:adfc3485017bb92e57c229dc7f81e438b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfc3485017bb92e57c229dc7f81e438b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#adfc3485017bb92e57c229dc7f81e438b">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:adfc3485017bb92e57c229dc7f81e438b"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a98056f05d5a45569899df80b040b9872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98056f05d5a45569899df80b040b9872"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a98056f05d5a45569899df80b040b9872">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a98056f05d5a45569899df80b040b9872"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ab848ecc31c17b9cd639e9834ee56816d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab848ecc31c17b9cd639e9834ee56816d"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ab848ecc31c17b9cd639e9834ee56816d">dot_z_iter</a></td></tr>
+<tr class="memdesc:ab848ecc31c17b9cd639e9834ee56816d"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:ad2417d37a566a0d26dea57f6f875ca12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2417d37a566a0d26dea57f6f875ca12"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ad2417d37a566a0d26dea57f6f875ca12">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:ad2417d37a566a0d26dea57f6f875ca12"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a50526d4b81b2dd8cf90e82ad162af3c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50526d4b81b2dd8cf90e82ad162af3c5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a50526d4b81b2dd8cf90e82ad162af3c5">dot_p_iter</a></td></tr>
+<tr class="memdesc:a50526d4b81b2dd8cf90e82ad162af3c5"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:ac1b772ccfa72ce8e522298aeef3b1e1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1b772ccfa72ce8e522298aeef3b1e1b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ac1b772ccfa72ce8e522298aeef3b1e1b">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:ac1b772ccfa72ce8e522298aeef3b1e1b"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00080">80</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structinfft__adjoint__plan.html b/doc/api/html/structinfft__adjoint__plan.html
new file mode 100644
index 0000000..b8afb56
--- /dev/null
+++ b/doc/api/html/structinfft__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - infft_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">infft_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.  
+ <a href="structinfft__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a320424336d0f74f0d24cc67053dea7ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a320424336d0f74f0d24cc67053dea7ca"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a320424336d0f74f0d24cc67053dea7ca">mv</a></td></tr>
+<tr class="memdesc:a320424336d0f74f0d24cc67053dea7ca"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a83f3fc443fbf5c40336a46a8c1bdfaf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83f3fc443fbf5c40336a46a8c1bdfaf8"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a83f3fc443fbf5c40336a46a8c1bdfaf8">flags</a></td></tr>
+<tr class="memdesc:a83f3fc443fbf5c40336a46a8c1bdfaf8"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a67fabb54885946acaaad95a5a472b004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67fabb54885946acaaad95a5a472b004"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a67fabb54885946acaaad95a5a472b004">w</a></td></tr>
+<tr class="memdesc:a67fabb54885946acaaad95a5a472b004"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a76ad0c6eace967391553fd4939e70662"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76ad0c6eace967391553fd4939e70662"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a76ad0c6eace967391553fd4939e70662">w_hat</a></td></tr>
+<tr class="memdesc:a76ad0c6eace967391553fd4939e70662"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:ab91fa7e8fa5668148a4cba86a97e415b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab91fa7e8fa5668148a4cba86a97e415b"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#ab91fa7e8fa5668148a4cba86a97e415b">y_hat</a></td></tr>
+<tr class="memdesc:ab91fa7e8fa5668148a4cba86a97e415b"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a0b408ac6ce2906dc57ff0c2ff9d3f0d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b408ac6ce2906dc57ff0c2ff9d3f0d0"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a0b408ac6ce2906dc57ff0c2ff9d3f0d0">f_iter</a></td></tr>
+<tr class="memdesc:a0b408ac6ce2906dc57ff0c2ff9d3f0d0"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a314c60168395a677ea88ff67dcaa2ec9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a314c60168395a677ea88ff67dcaa2ec9"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a314c60168395a677ea88ff67dcaa2ec9">r_hat_iter</a></td></tr>
+<tr class="memdesc:a314c60168395a677ea88ff67dcaa2ec9"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a0f6a4a61889385e975380802617ade31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f6a4a61889385e975380802617ade31"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">z_iter</a></td></tr>
+<tr class="memdesc:a0f6a4a61889385e975380802617ade31"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:afa0571b6b2c75979bc6a8ea75dc13efc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa0571b6b2c75979bc6a8ea75dc13efc"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#afa0571b6b2c75979bc6a8ea75dc13efc">p_iter</a></td></tr>
+<tr class="memdesc:afa0571b6b2c75979bc6a8ea75dc13efc"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a8f64e1af7dfd3cd41377d79113eb51e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f64e1af7dfd3cd41377d79113eb51e3"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a8f64e1af7dfd3cd41377d79113eb51e3">v_hat_iter</a></td></tr>
+<tr class="memdesc:a8f64e1af7dfd3cd41377d79113eb51e3"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a9abf5757d92159acfd73366a4c4df7be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9abf5757d92159acfd73366a4c4df7be"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a9abf5757d92159acfd73366a4c4df7be">alpha_iter</a></td></tr>
+<tr class="memdesc:a9abf5757d92159acfd73366a4c4df7be"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a09f8c30247659fc918d48521ba5ed5e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09f8c30247659fc918d48521ba5ed5e8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a09f8c30247659fc918d48521ba5ed5e8">beta_iter</a></td></tr>
+<tr class="memdesc:a09f8c30247659fc918d48521ba5ed5e8"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:af3de3b55c6ddf2e27ed9fbe7ef164b04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3de3b55c6ddf2e27ed9fbe7ef164b04"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#af3de3b55c6ddf2e27ed9fbe7ef164b04">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:af3de3b55c6ddf2e27ed9fbe7ef164b04"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a38e5e1e241a0a4a54e83266223725ab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38e5e1e241a0a4a54e83266223725ab6"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a38e5e1e241a0a4a54e83266223725ab6">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a38e5e1e241a0a4a54e83266223725ab6"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a6cca862303d84903e408f5a2ea02aa9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cca862303d84903e408f5a2ea02aa9c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a6cca862303d84903e408f5a2ea02aa9c">dot_z_iter</a></td></tr>
+<tr class="memdesc:a6cca862303d84903e408f5a2ea02aa9c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:aa78f22f1c5c917f665b2f1af3e7df191"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa78f22f1c5c917f665b2f1af3e7df191"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#aa78f22f1c5c917f665b2f1af3e7df191">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:aa78f22f1c5c917f665b2f1af3e7df191"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a2ddddb18e229f9d2d4b9eb11c36d0529"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ddddb18e229f9d2d4b9eb11c36d0529"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a2ddddb18e229f9d2d4b9eb11c36d0529">dot_p_iter</a></td></tr>
+<tr class="memdesc:a2ddddb18e229f9d2d4b9eb11c36d0529"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:a1a005f3e97b207a1d42cbc8e2ad3a5e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a005f3e97b207a1d42cbc8e2ad3a5e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a1a005f3e97b207a1d42cbc8e2ad3a5e1">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:a1a005f3e97b207a1d42cbc8e2ad3a5e1"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00079">79</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structinfsft__adjoint__plan.html b/doc/api/html/structinfsft__adjoint__plan.html
new file mode 100644
index 0000000..485c380
--- /dev/null
+++ b/doc/api/html/structinfsft__adjoint__plan.html
@@ -0,0 +1,120 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - infsft_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">infsft_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>TODO: different solvers.  
+ <a href="structinfsft__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a791fe047a3b45cce8049e83d422b8414"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a791fe047a3b45cce8049e83d422b8414"></a>
+<a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a791fe047a3b45cce8049e83d422b8414">mv</a></td></tr>
+<tr class="memdesc:a791fe047a3b45cce8049e83d422b8414"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a6795cda9e0d83c5b5c7935b75d10dc1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6795cda9e0d83c5b5c7935b75d10dc1a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a6795cda9e0d83c5b5c7935b75d10dc1a">flags</a></td></tr>
+<tr class="memdesc:a6795cda9e0d83c5b5c7935b75d10dc1a"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a9738a7ae6eb6e9ac59018d7fe0b67b32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9738a7ae6eb6e9ac59018d7fe0b67b32"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a9738a7ae6eb6e9ac59018d7fe0b67b32">w</a></td></tr>
+<tr class="memdesc:a9738a7ae6eb6e9ac59018d7fe0b67b32"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a5830886454142e4825347a703f286c0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5830886454142e4825347a703f286c0a"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a5830886454142e4825347a703f286c0a">w_hat</a></td></tr>
+<tr class="memdesc:a5830886454142e4825347a703f286c0a"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:ac21eced87cb3a6eafd0d22f27e0eac03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac21eced87cb3a6eafd0d22f27e0eac03"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#ac21eced87cb3a6eafd0d22f27e0eac03">y_hat</a></td></tr>
+<tr class="memdesc:ac21eced87cb3a6eafd0d22f27e0eac03"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a9c5a261251ad90176392b2fafcd961de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c5a261251ad90176392b2fafcd961de"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a9c5a261251ad90176392b2fafcd961de">f_iter</a></td></tr>
+<tr class="memdesc:a9c5a261251ad90176392b2fafcd961de"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a781b1438bf0c8d47f51b30551f982426"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a781b1438bf0c8d47f51b30551f982426"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a781b1438bf0c8d47f51b30551f982426">r_hat_iter</a></td></tr>
+<tr class="memdesc:a781b1438bf0c8d47f51b30551f982426"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a2c01ce7b85130d3069016e30b4a1685e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c01ce7b85130d3069016e30b4a1685e"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">z_iter</a></td></tr>
+<tr class="memdesc:a2c01ce7b85130d3069016e30b4a1685e"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a6e1fc4f4d7adf8aa89cde17cf002f0f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e1fc4f4d7adf8aa89cde17cf002f0f6"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a6e1fc4f4d7adf8aa89cde17cf002f0f6">p_iter</a></td></tr>
+<tr class="memdesc:a6e1fc4f4d7adf8aa89cde17cf002f0f6"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:ae1911bb7b195a6cdc51fc2c9dd5663d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1911bb7b195a6cdc51fc2c9dd5663d5"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#ae1911bb7b195a6cdc51fc2c9dd5663d5">v_hat_iter</a></td></tr>
+<tr class="memdesc:ae1911bb7b195a6cdc51fc2c9dd5663d5"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:aad358c99ea10d70c4984bf9898820865"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad358c99ea10d70c4984bf9898820865"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#aad358c99ea10d70c4984bf9898820865">alpha_iter</a></td></tr>
+<tr class="memdesc:aad358c99ea10d70c4984bf9898820865"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a7714746a66fd3657bd247062c9c5cb24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7714746a66fd3657bd247062c9c5cb24"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a7714746a66fd3657bd247062c9c5cb24">beta_iter</a></td></tr>
+<tr class="memdesc:a7714746a66fd3657bd247062c9c5cb24"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a90e95de22380d88f23720ffca653edeb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90e95de22380d88f23720ffca653edeb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a90e95de22380d88f23720ffca653edeb">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:a90e95de22380d88f23720ffca653edeb"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a228a2a746f7b7958efb3c4a4ef28e6ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a228a2a746f7b7958efb3c4a4ef28e6ce"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a228a2a746f7b7958efb3c4a4ef28e6ce">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a228a2a746f7b7958efb3c4a4ef28e6ce"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ad854541f2e09bc978461fff1c323b2a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad854541f2e09bc978461fff1c323b2a5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#ad854541f2e09bc978461fff1c323b2a5">dot_z_iter</a></td></tr>
+<tr class="memdesc:ad854541f2e09bc978461fff1c323b2a5"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a681a3587b2e42a24f03bac812eb7a60e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a681a3587b2e42a24f03bac812eb7a60e"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a681a3587b2e42a24f03bac812eb7a60e">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a681a3587b2e42a24f03bac812eb7a60e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a108504616c4e19b53638a80710f9308c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a108504616c4e19b53638a80710f9308c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a108504616c4e19b53638a80710f9308c">dot_p_iter</a></td></tr>
+<tr class="memdesc:a108504616c4e19b53638a80710f9308c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:a990b893dd142cbc3ade6436bdd603e59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a990b893dd142cbc3ade6436bdd603e59"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a990b893dd142cbc3ade6436bdd603e59">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:a990b893dd142cbc3ade6436bdd603e59"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>TODO: different solvers. </p>
+<p>Structure for an adjoint transform plan </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00078">78</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structinfst__adjoint__plan.html b/doc/api/html/structinfst__adjoint__plan.html
new file mode 100644
index 0000000..dbfab1b
--- /dev/null
+++ b/doc/api/html/structinfst__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - infst_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">infst_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.  
+ <a href="structinfst__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a02395790ff1d9e7ffc2e3fae3b927df0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02395790ff1d9e7ffc2e3fae3b927df0"></a>
+<a class="el" href="structnfst__plan.html">nfst_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a02395790ff1d9e7ffc2e3fae3b927df0">mv</a></td></tr>
+<tr class="memdesc:a02395790ff1d9e7ffc2e3fae3b927df0"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a8771c95bc65a49fe974389825f005ec9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8771c95bc65a49fe974389825f005ec9"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a8771c95bc65a49fe974389825f005ec9">flags</a></td></tr>
+<tr class="memdesc:a8771c95bc65a49fe974389825f005ec9"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a5b64034f7c01c3ce0a7ab02fd8477bdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b64034f7c01c3ce0a7ab02fd8477bdc"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a5b64034f7c01c3ce0a7ab02fd8477bdc">w</a></td></tr>
+<tr class="memdesc:a5b64034f7c01c3ce0a7ab02fd8477bdc"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a00f860d5af6ada0c99a252b5d7548f5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00f860d5af6ada0c99a252b5d7548f5b"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a00f860d5af6ada0c99a252b5d7548f5b">w_hat</a></td></tr>
+<tr class="memdesc:a00f860d5af6ada0c99a252b5d7548f5b"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a52d2b0b0d208e673eada45dff01e9c13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52d2b0b0d208e673eada45dff01e9c13"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a52d2b0b0d208e673eada45dff01e9c13">y_hat</a></td></tr>
+<tr class="memdesc:a52d2b0b0d208e673eada45dff01e9c13"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a53b03057778ae78ee06efd6b135e23fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53b03057778ae78ee06efd6b135e23fb"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a53b03057778ae78ee06efd6b135e23fb">f_iter</a></td></tr>
+<tr class="memdesc:a53b03057778ae78ee06efd6b135e23fb"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:abd086bc019b356986e38f3db8039051f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd086bc019b356986e38f3db8039051f"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#abd086bc019b356986e38f3db8039051f">r_hat_iter</a></td></tr>
+<tr class="memdesc:abd086bc019b356986e38f3db8039051f"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a254d587d2d91f18fb55a2ccae89198a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a254d587d2d91f18fb55a2ccae89198a5"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">z_iter</a></td></tr>
+<tr class="memdesc:a254d587d2d91f18fb55a2ccae89198a5"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a53b6ba348be2011c1cfecdb9f16829fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53b6ba348be2011c1cfecdb9f16829fd"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a53b6ba348be2011c1cfecdb9f16829fd">p_iter</a></td></tr>
+<tr class="memdesc:a53b6ba348be2011c1cfecdb9f16829fd"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a10da470b963e2d631f48e8eb81bad94e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10da470b963e2d631f48e8eb81bad94e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a10da470b963e2d631f48e8eb81bad94e">v_hat_iter</a></td></tr>
+<tr class="memdesc:a10da470b963e2d631f48e8eb81bad94e"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:aef3f9b375d7e43fbcbea60380c5e9f34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef3f9b375d7e43fbcbea60380c5e9f34"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#aef3f9b375d7e43fbcbea60380c5e9f34">alpha_iter</a></td></tr>
+<tr class="memdesc:aef3f9b375d7e43fbcbea60380c5e9f34"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a0aa7b8faeab03acb6011b673882282ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0aa7b8faeab03acb6011b673882282ea"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a0aa7b8faeab03acb6011b673882282ea">beta_iter</a></td></tr>
+<tr class="memdesc:a0aa7b8faeab03acb6011b673882282ea"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a3dfbd628846af0683c8fc263f8cf6418"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3dfbd628846af0683c8fc263f8cf6418"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a3dfbd628846af0683c8fc263f8cf6418">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:a3dfbd628846af0683c8fc263f8cf6418"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:ae8dfd86274f0e3bba8c01730449d0474"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8dfd86274f0e3bba8c01730449d0474"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#ae8dfd86274f0e3bba8c01730449d0474">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:ae8dfd86274f0e3bba8c01730449d0474"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a2309d1161fdf96711f3251e41a65eef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2309d1161fdf96711f3251e41a65eef0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a2309d1161fdf96711f3251e41a65eef0">dot_z_iter</a></td></tr>
+<tr class="memdesc:a2309d1161fdf96711f3251e41a65eef0"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a9bdd6b4dfcb1b22bd010444ef34b5903"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bdd6b4dfcb1b22bd010444ef34b5903"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a9bdd6b4dfcb1b22bd010444ef34b5903">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a9bdd6b4dfcb1b22bd010444ef34b5903"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a6dfb17d6feade963b31c16e6278aa6ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6dfb17d6feade963b31c16e6278aa6ee"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a6dfb17d6feade963b31c16e6278aa6ee">dot_p_iter</a></td></tr>
+<tr class="memdesc:a6dfb17d6feade963b31c16e6278aa6ee"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:ab4e8f85dfe25ba2b90f86d7d39362e5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4e8f85dfe25ba2b90f86d7d39362e5c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#ab4e8f85dfe25ba2b90f86d7d39362e5c">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:ab4e8f85dfe25ba2b90f86d7d39362e5c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00081">81</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structinnfft__adjoint__plan.html b/doc/api/html/structinnfft__adjoint__plan.html
new file mode 100644
index 0000000..ea4f1c7
--- /dev/null
+++ b/doc/api/html/structinnfft__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - innfft_adjoint_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">innfft_adjoint_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.  
+ <a href="structinnfft__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abb0996d6ed2cd627dc28fb7f5c18007a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb0996d6ed2cd627dc28fb7f5c18007a"></a>
+<a class="el" href="structnnfft__plan.html">nnfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#abb0996d6ed2cd627dc28fb7f5c18007a">mv</a></td></tr>
+<tr class="memdesc:abb0996d6ed2cd627dc28fb7f5c18007a"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a0d51c3ece7512b04408b5a2b94ee4a05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d51c3ece7512b04408b5a2b94ee4a05"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a0d51c3ece7512b04408b5a2b94ee4a05">flags</a></td></tr>
+<tr class="memdesc:a0d51c3ece7512b04408b5a2b94ee4a05"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a20565dbd14d036eb348ca0276a4f411c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20565dbd14d036eb348ca0276a4f411c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a20565dbd14d036eb348ca0276a4f411c">w</a></td></tr>
+<tr class="memdesc:a20565dbd14d036eb348ca0276a4f411c"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a0545064b15a22a5a3ae285e6aded5f80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0545064b15a22a5a3ae285e6aded5f80"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a0545064b15a22a5a3ae285e6aded5f80">w_hat</a></td></tr>
+<tr class="memdesc:a0545064b15a22a5a3ae285e6aded5f80"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:acd0758c4ed1c79b6d2f2eed33effb539"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd0758c4ed1c79b6d2f2eed33effb539"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#acd0758c4ed1c79b6d2f2eed33effb539">y_hat</a></td></tr>
+<tr class="memdesc:acd0758c4ed1c79b6d2f2eed33effb539"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a74d132853f5b7e0a4b8e3918dae7fe8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74d132853f5b7e0a4b8e3918dae7fe8c"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a74d132853f5b7e0a4b8e3918dae7fe8c">f_iter</a></td></tr>
+<tr class="memdesc:a74d132853f5b7e0a4b8e3918dae7fe8c"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a4739f3543d8e4e7af745c017a163516f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4739f3543d8e4e7af745c017a163516f"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a4739f3543d8e4e7af745c017a163516f">r_hat_iter</a></td></tr>
+<tr class="memdesc:a4739f3543d8e4e7af745c017a163516f"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a4a4aac08b2efbcbc13545a08bb397f52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a4aac08b2efbcbc13545a08bb397f52"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">z_iter</a></td></tr>
+<tr class="memdesc:a4a4aac08b2efbcbc13545a08bb397f52"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a74ee726c5c0916fde59e77ca51d319eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74ee726c5c0916fde59e77ca51d319eb"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a74ee726c5c0916fde59e77ca51d319eb">p_iter</a></td></tr>
+<tr class="memdesc:a74ee726c5c0916fde59e77ca51d319eb"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a5078575d0bf816ed68ce3c762f578887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5078575d0bf816ed68ce3c762f578887"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a5078575d0bf816ed68ce3c762f578887">v_hat_iter</a></td></tr>
+<tr class="memdesc:a5078575d0bf816ed68ce3c762f578887"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae202e8af2161d1d64bb32e49fc16f5f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae202e8af2161d1d64bb32e49fc16f5f0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#ae202e8af2161d1d64bb32e49fc16f5f0">alpha_iter</a></td></tr>
+<tr class="memdesc:ae202e8af2161d1d64bb32e49fc16f5f0"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a444f54274b78ec9162683d2cc9cb3160"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a444f54274b78ec9162683d2cc9cb3160"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a444f54274b78ec9162683d2cc9cb3160">beta_iter</a></td></tr>
+<tr class="memdesc:a444f54274b78ec9162683d2cc9cb3160"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:aad7bfd0f7561ec252b26b1d183622f12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad7bfd0f7561ec252b26b1d183622f12"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#aad7bfd0f7561ec252b26b1d183622f12">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:aad7bfd0f7561ec252b26b1d183622f12"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a0a0b243360667886af63d1ac26408f74"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a0b243360667886af63d1ac26408f74"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a0a0b243360667886af63d1ac26408f74">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a0a0b243360667886af63d1ac26408f74"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:aae72bba8cc1a211c1b3931c969f95a85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae72bba8cc1a211c1b3931c969f95a85"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#aae72bba8cc1a211c1b3931c969f95a85">dot_z_iter</a></td></tr>
+<tr class="memdesc:aae72bba8cc1a211c1b3931c969f95a85"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a669c48fd77d0d04bf0adc4ebedbd699f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a669c48fd77d0d04bf0adc4ebedbd699f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a669c48fd77d0d04bf0adc4ebedbd699f">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a669c48fd77d0d04bf0adc4ebedbd699f"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a3d20a53eb3c0158cc401d7b0d640da07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d20a53eb3c0158cc401d7b0d640da07"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a3d20a53eb3c0158cc401d7b0d640da07">dot_p_iter</a></td></tr>
+<tr class="memdesc:a3d20a53eb3c0158cc401d7b0d640da07"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:a5d9a12eacf094e7f9e771add0a3874d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d9a12eacf094e7f9e771add0a3874d5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a5d9a12eacf094e7f9e771add0a3874d5">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:a5d9a12eacf094e7f9e771add0a3874d5"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00082">82</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structmri__inh__2d1d__plan.html b/doc/api/html/structmri__inh__2d1d__plan.html
new file mode 100644
index 0000000..ce1df36
--- /dev/null
+++ b/doc/api/html/structmri__inh__2d1d__plan.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mri_inh_2d1d_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">mri_inh_2d1d_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a25e2abd348fabee511856c61a7074c5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25e2abd348fabee511856c61a7074c5b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b">N_total</a></td></tr>
+<tr class="memdesc:a25e2abd348fabee511856c61a7074c5b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a45f3f352231150e660ca1b8819d58d09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45f3f352231150e660ca1b8819d58d09"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09">M_total</a></td></tr>
+<tr class="memdesc:a45f3f352231150e660ca1b8819d58d09"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ad34c95b6390628c8fcd223b77e37e5bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad34c95b6390628c8fcd223b77e37e5bf"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf">f_hat</a></td></tr>
+<tr class="memdesc:ad34c95b6390628c8fcd223b77e37e5bf"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a985f125ad6a94361939572f8323872a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a985f125ad6a94361939572f8323872a0"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0">f</a></td></tr>
+<tr class="memdesc:a985f125ad6a94361939572f8323872a0"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a4cad33b38f4d5bc54b8d25d90913ab44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cad33b38f4d5bc54b8d25d90913ab44"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4cad33b38f4d5bc54b8d25d90913ab44"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:afe427225384a2d226c3cb85cf9aa4042"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe427225384a2d226c3cb85cf9aa4042"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:afe427225384a2d226c3cb85cf9aa4042"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ac911bea7fd2e5b81f3f7a917842d6bc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac911bea7fd2e5b81f3f7a917842d6bc7"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:a9776bd2e03278b7cbdef2b4dce19dbc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9776bd2e03278b7cbdef2b4dce19dbc1"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a94c6285d9cfeb7e358dd4990245639e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94c6285d9cfeb7e358dd4990245639e7"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:ae80cae06faca26a12bbbb896d5d7c527"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae80cae06faca26a12bbbb896d5d7c527"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a22ed3402646ded705084299c84d97a62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22ed3402646ded705084299c84d97a62"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structmri__inh__3d__plan.html b/doc/api/html/structmri__inh__3d__plan.html
new file mode 100644
index 0000000..68de26a
--- /dev/null
+++ b/doc/api/html/structmri__inh__3d__plan.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mri_inh_3d_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">mri_inh_3d_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa1b253e912e92b252c4992eb86d92e12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b253e912e92b252c4992eb86d92e12"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12">N_total</a></td></tr>
+<tr class="memdesc:aa1b253e912e92b252c4992eb86d92e12"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae90c4e1c541956b5902e7aafc193ad8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae90c4e1c541956b5902e7aafc193ad8b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b">M_total</a></td></tr>
+<tr class="memdesc:ae90c4e1c541956b5902e7aafc193ad8b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a91ed30b213dea4954d2d27c4d1334a50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91ed30b213dea4954d2d27c4d1334a50"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50">f_hat</a></td></tr>
+<tr class="memdesc:a91ed30b213dea4954d2d27c4d1334a50"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a9e51f5f4ad46d4b120c452fc962a2385"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e51f5f4ad46d4b120c452fc962a2385"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385">f</a></td></tr>
+<tr class="memdesc:a9e51f5f4ad46d4b120c452fc962a2385"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a780818802d5bfdc4d4174a3637254fd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a780818802d5bfdc4d4174a3637254fd5"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a780818802d5bfdc4d4174a3637254fd5"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:afa2e143e704b701e9a0ee1d795f46b5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2e143e704b701e9a0ee1d795f46b5b"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:afa2e143e704b701e9a0ee1d795f46b5b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ac8386842f48b212c4132a3b151d73402"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8386842f48b212c4132a3b151d73402"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:af12a214bc2e75f1188cd7ff1bb99f0ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af12a214bc2e75f1188cd7ff1bb99f0ff"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a88b160a5bf9943ebffc65365f2b7663f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88b160a5bf9943ebffc65365f2b7663f"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:ae7fe0fd3fb4509abc5a7a7c07df63a1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7fe0fd3fb4509abc5a7a7c07df63a1b"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:aaf6f68ab1fa5e3b852487bf12dc483ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf6f68ab1fa5e3b852487bf12dc483ff"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structmrif__inh__2d1d__plan.html b/doc/api/html/structmrif__inh__2d1d__plan.html
new file mode 100644
index 0000000..ab28980
--- /dev/null
+++ b/doc/api/html/structmrif__inh__2d1d__plan.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mrif_inh_2d1d_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">mrif_inh_2d1d_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afad39dcd7d77c81247bcf5e4abc1cdaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afad39dcd7d77c81247bcf5e4abc1cdaa"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#afad39dcd7d77c81247bcf5e4abc1cdaa">N_total</a></td></tr>
+<tr class="memdesc:afad39dcd7d77c81247bcf5e4abc1cdaa"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ac9fffb187c8a840eb83939ba4d710f13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9fffb187c8a840eb83939ba4d710f13"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#ac9fffb187c8a840eb83939ba4d710f13">M_total</a></td></tr>
+<tr class="memdesc:ac9fffb187c8a840eb83939ba4d710f13"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a18fb340e9ead654552e45033c81ac637"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18fb340e9ead654552e45033c81ac637"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#a18fb340e9ead654552e45033c81ac637">f_hat</a></td></tr>
+<tr class="memdesc:a18fb340e9ead654552e45033c81ac637"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a3ab01f8b5f1b1368dbf3d7715ce46997"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ab01f8b5f1b1368dbf3d7715ce46997"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#a3ab01f8b5f1b1368dbf3d7715ce46997">f</a></td></tr>
+<tr class="memdesc:a3ab01f8b5f1b1368dbf3d7715ce46997"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:acdbe3a414d9c87baba03db3d873b864c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdbe3a414d9c87baba03db3d873b864c"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#acdbe3a414d9c87baba03db3d873b864c">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:acdbe3a414d9c87baba03db3d873b864c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aea23a3331d423e70f2cbbeee71303906"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea23a3331d423e70f2cbbeee71303906"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#aea23a3331d423e70f2cbbeee71303906">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aea23a3331d423e70f2cbbeee71303906"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a50fc144d7931e8db51c8b745096419c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50fc144d7931e8db51c8b745096419c0"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ae083ca7967f0ac15dca241336782f353"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae083ca7967f0ac15dca241336782f353"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a7feb68d7fd4fe5590700ddf6aa64d27c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7feb68d7fd4fe5590700ddf6aa64d27c"></a>
+float </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:a601416c33ee05eb2cc89b3a03aa0bb0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a601416c33ee05eb2cc89b3a03aa0bb0b"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a53834de9b90ac2eb35eb5bf5b00bdfac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53834de9b90ac2eb35eb5bf5b00bdfac"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structmrif__inh__3d__plan.html b/doc/api/html/structmrif__inh__3d__plan.html
new file mode 100644
index 0000000..0de08e7
--- /dev/null
+++ b/doc/api/html/structmrif__inh__3d__plan.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mrif_inh_3d_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">mrif_inh_3d_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a7d51e6be67c5f2bc4d1a996e10228258"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d51e6be67c5f2bc4d1a996e10228258"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#a7d51e6be67c5f2bc4d1a996e10228258">N_total</a></td></tr>
+<tr class="memdesc:a7d51e6be67c5f2bc4d1a996e10228258"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a03c2aa160944a42e0f3116e7545ed20f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03c2aa160944a42e0f3116e7545ed20f"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#a03c2aa160944a42e0f3116e7545ed20f">M_total</a></td></tr>
+<tr class="memdesc:a03c2aa160944a42e0f3116e7545ed20f"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ac644cb0bbceb7ea8634ea94758da405d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac644cb0bbceb7ea8634ea94758da405d"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#ac644cb0bbceb7ea8634ea94758da405d">f_hat</a></td></tr>
+<tr class="memdesc:ac644cb0bbceb7ea8634ea94758da405d"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:aa762bd3f11d1558e792ff34dc710bcb3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa762bd3f11d1558e792ff34dc710bcb3"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#aa762bd3f11d1558e792ff34dc710bcb3">f</a></td></tr>
+<tr class="memdesc:aa762bd3f11d1558e792ff34dc710bcb3"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a4763b4f8f1b5f574d601289ab3cbcfa8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4763b4f8f1b5f574d601289ab3cbcfa8"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#a4763b4f8f1b5f574d601289ab3cbcfa8">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4763b4f8f1b5f574d601289ab3cbcfa8"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:ac765b0a8797a3fd31b58133be9ff280b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac765b0a8797a3fd31b58133be9ff280b"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#ac765b0a8797a3fd31b58133be9ff280b">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:ac765b0a8797a3fd31b58133be9ff280b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a6c0f3d1e0a228a2484fdd9eeb3bdd0be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c0f3d1e0a228a2484fdd9eeb3bdd0be"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ab63634a14a15edd68fbd75d25fe15b5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab63634a14a15edd68fbd75d25fe15b5e"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a1e9410e5e47340d676ceefb7168ab110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e9410e5e47340d676ceefb7168ab110"></a>
+float </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:a36265c182dd339b4b38b7af8fa70f98c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36265c182dd339b4b38b7af8fa70f98c"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a00ec124b509d9b222c9ce3cf2bb47ac8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00ec124b509d9b222c9ce3cf2bb47ac8"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structmril__inh__2d1d__plan.html b/doc/api/html/structmril__inh__2d1d__plan.html
new file mode 100644
index 0000000..f09afb6
--- /dev/null
+++ b/doc/api/html/structmril__inh__2d1d__plan.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mril_inh_2d1d_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">mril_inh_2d1d_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a4114df78a52f5e4a1a12a13678a9cb6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4114df78a52f5e4a1a12a13678a9cb6c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a4114df78a52f5e4a1a12a13678a9cb6c">N_total</a></td></tr>
+<tr class="memdesc:a4114df78a52f5e4a1a12a13678a9cb6c"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a241e8def5a65484080b01871c12851b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a241e8def5a65484080b01871c12851b3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a241e8def5a65484080b01871c12851b3">M_total</a></td></tr>
+<tr class="memdesc:a241e8def5a65484080b01871c12851b3"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a70247e89a002d0e7b5c66d1e87b33645"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70247e89a002d0e7b5c66d1e87b33645"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a70247e89a002d0e7b5c66d1e87b33645">f_hat</a></td></tr>
+<tr class="memdesc:a70247e89a002d0e7b5c66d1e87b33645"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a3e2fef5b1bb862347511209994235597"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e2fef5b1bb862347511209994235597"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a3e2fef5b1bb862347511209994235597">f</a></td></tr>
+<tr class="memdesc:a3e2fef5b1bb862347511209994235597"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a7dbc7cd7b733b5850a59f35aa0f959d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dbc7cd7b733b5850a59f35aa0f959d1"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a7dbc7cd7b733b5850a59f35aa0f959d1">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a7dbc7cd7b733b5850a59f35aa0f959d1"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a6259dd5746b911632df1286d0654eabe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6259dd5746b911632df1286d0654eabe"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a6259dd5746b911632df1286d0654eabe">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a6259dd5746b911632df1286d0654eabe"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:abbc8cab682b3da749c06f40e70bc475b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbc8cab682b3da749c06f40e70bc475b"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ab27fdcb536441767bf95adb8cbfe6425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab27fdcb536441767bf95adb8cbfe6425"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a71b071b164272b44056ef3b8db619eaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71b071b164272b44056ef3b8db619eaf"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:af38eb9a2453ec19d56017f6eda837e3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af38eb9a2453ec19d56017f6eda837e3f"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:abca46d1b594697ace053934faacf1639"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abca46d1b594697ace053934faacf1639"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structmril__inh__3d__plan.html b/doc/api/html/structmril__inh__3d__plan.html
new file mode 100644
index 0000000..ccad9da
--- /dev/null
+++ b/doc/api/html/structmril__inh__3d__plan.html
@@ -0,0 +1,87 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - mril_inh_3d_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">mril_inh_3d_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a79e477483b67862d2dd7fcb5432f7651"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79e477483b67862d2dd7fcb5432f7651"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">N_total</a></td></tr>
+<tr class="memdesc:a79e477483b67862d2dd7fcb5432f7651"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a9a1093b920fb4468b59c7120a7e1ceb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a1093b920fb4468b59c7120a7e1ceb5"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a9a1093b920fb4468b59c7120a7e1ceb5">M_total</a></td></tr>
+<tr class="memdesc:a9a1093b920fb4468b59c7120a7e1ceb5"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ae1f94471fa54c0a172ede3345d0a9a9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1f94471fa54c0a172ede3345d0a9a9c"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#ae1f94471fa54c0a172ede3345d0a9a9c">f_hat</a></td></tr>
+<tr class="memdesc:ae1f94471fa54c0a172ede3345d0a9a9c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:adb03497106fd0a995b70010f9cd9684b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb03497106fd0a995b70010f9cd9684b"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#adb03497106fd0a995b70010f9cd9684b">f</a></td></tr>
+<tr class="memdesc:adb03497106fd0a995b70010f9cd9684b"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a61eec020c68a2b36cff4acb6dd4dcf96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61eec020c68a2b36cff4acb6dd4dcf96"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a61eec020c68a2b36cff4acb6dd4dcf96">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a61eec020c68a2b36cff4acb6dd4dcf96"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a2d189c2b7f8b5bf635cce01354ef253e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d189c2b7f8b5bf635cce01354ef253e"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a2d189c2b7f8b5bf635cce01354ef253e">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a2d189c2b7f8b5bf635cce01354ef253e"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a0e1db4b2be63bb1fffc9342986cfdc09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e1db4b2be63bb1fffc9342986cfdc09"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ae596bbf35deb08eff8bfbbe0bbc13989"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae596bbf35deb08eff8bfbbe0bbc13989"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a26e17b2e0c29cf24a162afe4762964a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26e17b2e0c29cf24a162afe4762964a5"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:a18aa5418abc97a758f5c07b8dabcff77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18aa5418abc97a758f5c07b8dabcff77"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a9688d8a0cdd89e17a71c45efd8ab3d46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9688d8a0cdd89e17a71c45efd8ab3d46"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfct__plan.html b/doc/api/html/structnfct__plan.html
new file mode 100644
index 0000000..9df2072
--- /dev/null
+++ b/doc/api/html/structnfct__plan.html
@@ -0,0 +1,147 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfct_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfct_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af736d9e6e59e9a91276a48a50979fedb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af736d9e6e59e9a91276a48a50979fedb"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#af736d9e6e59e9a91276a48a50979fedb">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:af736d9e6e59e9a91276a48a50979fedb"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan <br/></td></tr>
+<tr class="memitem:a5ae19fdb6ea93d515109229f419c22df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ae19fdb6ea93d515109229f419c22df"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a5ae19fdb6ea93d515109229f419c22df">FFTW_MANGLE_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a5ae19fdb6ea93d515109229f419c22df"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (DCT-I) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abc66ae61c54a049868c62288623d4a6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc66ae61c54a049868c62288623d4a6b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b">N_total</a></td></tr>
+<tr class="memdesc:abc66ae61c54a049868c62288623d4a6b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ab201c4e89753b167954e7cb5f34a321d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab201c4e89753b167954e7cb5f34a321d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d">M_total</a></td></tr>
+<tr class="memdesc:ab201c4e89753b167954e7cb5f34a321d"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:af289164b09e85f75e8ed0eb3ded40d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af289164b09e85f75e8ed0eb3ded40d9c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c">f_hat</a></td></tr>
+<tr class="memdesc:af289164b09e85f75e8ed0eb3ded40d9c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:acca00284f93bd33c00a1b099a6eec8cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acca00284f93bd33c00a1b099a6eec8cd"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd">f</a></td></tr>
+<tr class="memdesc:acca00284f93bd33c00a1b099a6eec8cd"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a5f9802e95bfc2ae69f22e91c1fe47778"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f9802e95bfc2ae69f22e91c1fe47778"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a5f9802e95bfc2ae69f22e91c1fe47778">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a5f9802e95bfc2ae69f22e91c1fe47778"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aab8ee071a4e254cbf94a03689ed3127f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab8ee071a4e254cbf94a03689ed3127f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#aab8ee071a4e254cbf94a03689ed3127f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aab8ee071a4e254cbf94a03689ed3127f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a998a428a06532646854e8add72c5ca63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a998a428a06532646854e8add72c5ca63"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63">d</a></td></tr>
+<tr class="memdesc:a998a428a06532646854e8add72c5ca63"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:ad4d0600d8b0ee9d41bff22a7d63e64cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4d0600d8b0ee9d41bff22a7d63e64cf"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ad4d0600d8b0ee9d41bff22a7d63e64cf">N</a></td></tr>
+<tr class="memdesc:ad4d0600d8b0ee9d41bff22a7d63e64cf"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies (kernel) <br/></td></tr>
+<tr class="memitem:a0ad3d47d659b3641bb90eca6e56f9047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ad3d47d659b3641bb90eca6e56f9047"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a0ad3d47d659b3641bb90eca6e56f9047">n</a></td></tr>
+<tr class="memdesc:a0ad3d47d659b3641bb90eca6e56f9047"><td class="mdescLeft"> </td><td class="mdescRight">length of DCT-I <br/></td></tr>
+<tr class="memitem:a56c9f580f79fb7605ae21bcbb729a8b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56c9f580f79fb7605ae21bcbb729a8b9"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a56c9f580f79fb7605ae21bcbb729a8b9">sigma</a></td></tr>
+<tr class="memdesc:a56c9f580f79fb7605ae21bcbb729a8b9"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a15e9f66b0447148fcce4af9eafa2f9ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15e9f66b0447148fcce4af9eafa2f9ed"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a15e9f66b0447148fcce4af9eafa2f9ed">m</a></td></tr>
+<tr class="memdesc:a15e9f66b0447148fcce4af9eafa2f9ed"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:a63a852f63d54aa497bceeef5475cd9d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63a852f63d54aa497bceeef5475cd9d3"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfct_full_psi_eps</b></td></tr>
+<tr class="memitem:af1c2c2fe35f5b574a39109bb7b176270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1c2c2fe35f5b574a39109bb7b176270"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#af1c2c2fe35f5b574a39109bb7b176270">b</a></td></tr>
+<tr class="memdesc:af1c2c2fe35f5b574a39109bb7b176270"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:ae2a2e493b2938fe9b22b0506765f30cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2a2e493b2938fe9b22b0506765f30cf"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf">nfct_flags</a></td></tr>
+<tr class="memdesc:ae2a2e493b2938fe9b22b0506765f30cf"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a407c06575335351e1b720b40f8b4f26c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a407c06575335351e1b720b40f8b4f26c"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a407c06575335351e1b720b40f8b4f26c">fftw_flags</a></td></tr>
+<tr class="memdesc:a407c06575335351e1b720b40f8b4f26c"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:a5635e780f4c492f087754d71f16e07ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5635e780f4c492f087754d71f16e07ed"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed">x</a></td></tr>
+<tr class="memdesc:a5635e780f4c492f087754d71f16e07ed"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:acd69baad39feaa27f34c063960b173f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd69baad39feaa27f34c063960b173f0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#acd69baad39feaa27f34c063960b173f0">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:acd69baad39feaa27f34c063960b173f0"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:aa217dda883fc3533b95bf6ab6ccff888"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa217dda883fc3533b95bf6ab6ccff888"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#aa217dda883fc3533b95bf6ab6ccff888">c_phi_inv</a></td></tr>
+<tr class="memdesc:aa217dda883fc3533b95bf6ab6ccff888"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:ad3886151e655110a1c5ba71a66439e2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3886151e655110a1c5ba71a66439e2b"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ad3886151e655110a1c5ba71a66439e2b">psi</a></td></tr>
+<tr class="memdesc:ad3886151e655110a1c5ba71a66439e2b"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:ab03d9f17b3fb46eb14439745e8f7994b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab03d9f17b3fb46eb14439745e8f7994b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ab03d9f17b3fb46eb14439745e8f7994b">size_psi</a></td></tr>
+<tr class="memdesc:ab03d9f17b3fb46eb14439745e8f7994b"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:adcd209b5cbbfae40c5490a1141b7acda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcd209b5cbbfae40c5490a1141b7acda"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#adcd209b5cbbfae40c5490a1141b7acda">psi_index_g</a></td></tr>
+<tr class="memdesc:adcd209b5cbbfae40c5490a1141b7acda"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a59633568fd7d1cb01df5f49f08ad352c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59633568fd7d1cb01df5f49f08ad352c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a59633568fd7d1cb01df5f49f08ad352c">psi_index_f</a></td></tr>
+<tr class="memdesc:a59633568fd7d1cb01df5f49f08ad352c"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a88c6d97cb413daa4aa92bcb8f3536b7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88c6d97cb413daa4aa92bcb8f3536b7e"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:acf3167b1a9a1982581cbb69fa5a7e19e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf3167b1a9a1982581cbb69fa5a7e19e"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a597e9fd4dddb36748c5e33ee1f058835"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a597e9fd4dddb36748c5e33ee1f058835"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a597e9fd4dddb36748c5e33ee1f058835">g1</a></td></tr>
+<tr class="memdesc:a597e9fd4dddb36748c5e33ee1f058835"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:ac4c375e593da728a4e7477f76ff12031"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4c375e593da728a4e7477f76ff12031"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ac4c375e593da728a4e7477f76ff12031">g2</a></td></tr>
+<tr class="memdesc:ac4c375e593da728a4e7477f76ff12031"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a53242b3a71b8997bdcd173777146c427"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53242b3a71b8997bdcd173777146c427"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a53242b3a71b8997bdcd173777146c427">spline_coeffs</a></td></tr>
+<tr class="memdesc:a53242b3a71b8997bdcd173777146c427"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00261">261</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfctf__plan.html b/doc/api/html/structnfctf__plan.html
new file mode 100644
index 0000000..a811e3b
--- /dev/null
+++ b/doc/api/html/structnfctf__plan.html
@@ -0,0 +1,147 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfctf_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfctf_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a18d7721bf6d8ccbc5bb20e2dad30f9a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18d7721bf6d8ccbc5bb20e2dad30f9a3"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a18d7721bf6d8ccbc5bb20e2dad30f9a3">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:a18d7721bf6d8ccbc5bb20e2dad30f9a3"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan <br/></td></tr>
+<tr class="memitem:a3aef4c36c692ab0ac6e9ab69b32ac761"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aef4c36c692ab0ac6e9ab69b32ac761"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a3aef4c36c692ab0ac6e9ab69b32ac761">FFTW_MANGLE_FLOAT</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a3aef4c36c692ab0ac6e9ab69b32ac761"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (DCT-I) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a618b4315972d4ef612c772649d470ff9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a618b4315972d4ef612c772649d470ff9"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a618b4315972d4ef612c772649d470ff9">N_total</a></td></tr>
+<tr class="memdesc:a618b4315972d4ef612c772649d470ff9"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a86276f6249784d5121d83453818709e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86276f6249784d5121d83453818709e9"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a86276f6249784d5121d83453818709e9">M_total</a></td></tr>
+<tr class="memdesc:a86276f6249784d5121d83453818709e9"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a33bae90d163b1d848efc2c656bac6839"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33bae90d163b1d848efc2c656bac6839"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a33bae90d163b1d848efc2c656bac6839">f_hat</a></td></tr>
+<tr class="memdesc:a33bae90d163b1d848efc2c656bac6839"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a5c695490725fbd63787fb76548de2908"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c695490725fbd63787fb76548de2908"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a5c695490725fbd63787fb76548de2908">f</a></td></tr>
+<tr class="memdesc:a5c695490725fbd63787fb76548de2908"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a7a532e28539e1ac2f49413248ae76a67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a532e28539e1ac2f49413248ae76a67"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a7a532e28539e1ac2f49413248ae76a67">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a7a532e28539e1ac2f49413248ae76a67"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a876dda7208fd0634f426c1e5cb04b77f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a876dda7208fd0634f426c1e5cb04b77f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a876dda7208fd0634f426c1e5cb04b77f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a876dda7208fd0634f426c1e5cb04b77f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a1129b984a15339cca4fbbbc2190d43af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1129b984a15339cca4fbbbc2190d43af"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a1129b984a15339cca4fbbbc2190d43af">d</a></td></tr>
+<tr class="memdesc:a1129b984a15339cca4fbbbc2190d43af"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:ade6a750c99253ddfe82c08e439094507"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade6a750c99253ddfe82c08e439094507"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#ade6a750c99253ddfe82c08e439094507">N</a></td></tr>
+<tr class="memdesc:ade6a750c99253ddfe82c08e439094507"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies (kernel) <br/></td></tr>
+<tr class="memitem:a9c8ffbb61c7f5ad5d0a5545bdff83270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c8ffbb61c7f5ad5d0a5545bdff83270"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a9c8ffbb61c7f5ad5d0a5545bdff83270">n</a></td></tr>
+<tr class="memdesc:a9c8ffbb61c7f5ad5d0a5545bdff83270"><td class="mdescLeft"> </td><td class="mdescRight">length of DCT-I <br/></td></tr>
+<tr class="memitem:acfc4ccc79c6fa50199500a790cb833b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfc4ccc79c6fa50199500a790cb833b2"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#acfc4ccc79c6fa50199500a790cb833b2">sigma</a></td></tr>
+<tr class="memdesc:acfc4ccc79c6fa50199500a790cb833b2"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a255a1e1526bba8643690e0aa9c5b90c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a255a1e1526bba8643690e0aa9c5b90c6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a255a1e1526bba8643690e0aa9c5b90c6">m</a></td></tr>
+<tr class="memdesc:a255a1e1526bba8643690e0aa9c5b90c6"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:a7bc46d14287ec885bb855b8d13882b86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bc46d14287ec885bb855b8d13882b86"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfct_full_psi_eps</b></td></tr>
+<tr class="memitem:a6eb955f63212f63c0ac26894f8355caf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb955f63212f63c0ac26894f8355caf"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a6eb955f63212f63c0ac26894f8355caf">b</a></td></tr>
+<tr class="memdesc:a6eb955f63212f63c0ac26894f8355caf"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a484df328b87ae06b6c47b03298e18dbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a484df328b87ae06b6c47b03298e18dbd"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a484df328b87ae06b6c47b03298e18dbd">nfct_flags</a></td></tr>
+<tr class="memdesc:a484df328b87ae06b6c47b03298e18dbd"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:afd3bc700b6adca6d3dde831c9a7aae79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd3bc700b6adca6d3dde831c9a7aae79"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#afd3bc700b6adca6d3dde831c9a7aae79">fftw_flags</a></td></tr>
+<tr class="memdesc:afd3bc700b6adca6d3dde831c9a7aae79"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:acf91ba20ce671a5d4c971465fbd33b03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf91ba20ce671a5d4c971465fbd33b03"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#acf91ba20ce671a5d4c971465fbd33b03">x</a></td></tr>
+<tr class="memdesc:acf91ba20ce671a5d4c971465fbd33b03"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a3621b32cd8ea93b2bcb8db6ce40cd5bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3621b32cd8ea93b2bcb8db6ce40cd5bb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a3621b32cd8ea93b2bcb8db6ce40cd5bb">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a3621b32cd8ea93b2bcb8db6ce40cd5bb"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a38d2c1dec96ad6d632133bc1dcbf82cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38d2c1dec96ad6d632133bc1dcbf82cb"></a>
+float ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a38d2c1dec96ad6d632133bc1dcbf82cb">c_phi_inv</a></td></tr>
+<tr class="memdesc:a38d2c1dec96ad6d632133bc1dcbf82cb"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a748631060895d5106d11cdf4fce3ee60"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a748631060895d5106d11cdf4fce3ee60"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a748631060895d5106d11cdf4fce3ee60">psi</a></td></tr>
+<tr class="memdesc:a748631060895d5106d11cdf4fce3ee60"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a2a01c089b030159c77a9bdcb46d1b183"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a01c089b030159c77a9bdcb46d1b183"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a2a01c089b030159c77a9bdcb46d1b183">size_psi</a></td></tr>
+<tr class="memdesc:a2a01c089b030159c77a9bdcb46d1b183"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a60f4fbcf2fb3a48a037e5cda4608f535"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60f4fbcf2fb3a48a037e5cda4608f535"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a60f4fbcf2fb3a48a037e5cda4608f535">psi_index_g</a></td></tr>
+<tr class="memdesc:a60f4fbcf2fb3a48a037e5cda4608f535"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:aa33238f59c2282eea4b81d8ecbba1417"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa33238f59c2282eea4b81d8ecbba1417"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#aa33238f59c2282eea4b81d8ecbba1417">psi_index_f</a></td></tr>
+<tr class="memdesc:aa33238f59c2282eea4b81d8ecbba1417"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a09031fa0477e6b4ee2ac34a2cf1e85fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09031fa0477e6b4ee2ac34a2cf1e85fd"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a278cf5e2a4d6bf386682bc1048de6e55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278cf5e2a4d6bf386682bc1048de6e55"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a44a225766135ec7d1bbe8e8e7631faa3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44a225766135ec7d1bbe8e8e7631faa3"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a44a225766135ec7d1bbe8e8e7631faa3">g1</a></td></tr>
+<tr class="memdesc:a44a225766135ec7d1bbe8e8e7631faa3"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a4a70d593fb1704dda85e2392c77ea3bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a70d593fb1704dda85e2392c77ea3bc"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a4a70d593fb1704dda85e2392c77ea3bc">g2</a></td></tr>
+<tr class="memdesc:a4a70d593fb1704dda85e2392c77ea3bc"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a25a3208574495231141c9c407658f0cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25a3208574495231141c9c407658f0cf"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a25a3208574495231141c9c407658f0cf">spline_coeffs</a></td></tr>
+<tr class="memdesc:a25a3208574495231141c9c407658f0cf"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00261">261</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfctl__plan.html b/doc/api/html/structnfctl__plan.html
new file mode 100644
index 0000000..ae150f1
--- /dev/null
+++ b/doc/api/html/structnfctl__plan.html
@@ -0,0 +1,147 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfctl_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfctl_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a59134c76d93ffd73a6fc738babf5d443"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59134c76d93ffd73a6fc738babf5d443"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a59134c76d93ffd73a6fc738babf5d443">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:a59134c76d93ffd73a6fc738babf5d443"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan <br/></td></tr>
+<tr class="memitem:ad0a55579cc5f04b0af4cc28abd445083"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0a55579cc5f04b0af4cc28abd445083"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ad0a55579cc5f04b0af4cc28abd445083">FFTW_MANGLE_LONG_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:ad0a55579cc5f04b0af4cc28abd445083"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (DCT-I) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ac31afd2bc4a0fc94cd9ec08e302f84ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac31afd2bc4a0fc94cd9ec08e302f84ac"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ac31afd2bc4a0fc94cd9ec08e302f84ac">N_total</a></td></tr>
+<tr class="memdesc:ac31afd2bc4a0fc94cd9ec08e302f84ac"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ac4ad3000c4c3293f3d86b90a926410a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4ad3000c4c3293f3d86b90a926410a9"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ac4ad3000c4c3293f3d86b90a926410a9">M_total</a></td></tr>
+<tr class="memdesc:ac4ad3000c4c3293f3d86b90a926410a9"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aede4fbbe9a7b666d5d5fbd62e62bf103"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aede4fbbe9a7b666d5d5fbd62e62bf103"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#aede4fbbe9a7b666d5d5fbd62e62bf103">f_hat</a></td></tr>
+<tr class="memdesc:aede4fbbe9a7b666d5d5fbd62e62bf103"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:ae09e0a759e136ad020a97e6c76efbb30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae09e0a759e136ad020a97e6c76efbb30"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ae09e0a759e136ad020a97e6c76efbb30">f</a></td></tr>
+<tr class="memdesc:ae09e0a759e136ad020a97e6c76efbb30"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:a42f0c32b080677a57f82ccf23d018da2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42f0c32b080677a57f82ccf23d018da2"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a42f0c32b080677a57f82ccf23d018da2">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a42f0c32b080677a57f82ccf23d018da2"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a99191484b327c3283f3aed8c3e9a3d70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99191484b327c3283f3aed8c3e9a3d70"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a99191484b327c3283f3aed8c3e9a3d70">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a99191484b327c3283f3aed8c3e9a3d70"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aa42a9c638dec4cfa622f2e3f7e7c1dc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa42a9c638dec4cfa622f2e3f7e7c1dc3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#aa42a9c638dec4cfa622f2e3f7e7c1dc3">d</a></td></tr>
+<tr class="memdesc:aa42a9c638dec4cfa622f2e3f7e7c1dc3"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a4497138b087187f70d19f107b1c80204"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4497138b087187f70d19f107b1c80204"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a4497138b087187f70d19f107b1c80204">N</a></td></tr>
+<tr class="memdesc:a4497138b087187f70d19f107b1c80204"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies (kernel) <br/></td></tr>
+<tr class="memitem:a6d0bd4de4d2b90c38010bb4b8d77561b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d0bd4de4d2b90c38010bb4b8d77561b"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a6d0bd4de4d2b90c38010bb4b8d77561b">n</a></td></tr>
+<tr class="memdesc:a6d0bd4de4d2b90c38010bb4b8d77561b"><td class="mdescLeft"> </td><td class="mdescRight">length of DCT-I <br/></td></tr>
+<tr class="memitem:a629ae83677e311095d4c24ad4826e2ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a629ae83677e311095d4c24ad4826e2ab"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a629ae83677e311095d4c24ad4826e2ab">sigma</a></td></tr>
+<tr class="memdesc:a629ae83677e311095d4c24ad4826e2ab"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a0a2a679bf0d1c90511a52c31f5a537f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a2a679bf0d1c90511a52c31f5a537f1"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a0a2a679bf0d1c90511a52c31f5a537f1">m</a></td></tr>
+<tr class="memdesc:a0a2a679bf0d1c90511a52c31f5a537f1"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:aaf6e2979bbcb2c173eb792e3a9155d0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf6e2979bbcb2c173eb792e3a9155d0b"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfct_full_psi_eps</b></td></tr>
+<tr class="memitem:a01287f3f68aff7e5d7ce35d3163021e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01287f3f68aff7e5d7ce35d3163021e2"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a01287f3f68aff7e5d7ce35d3163021e2">b</a></td></tr>
+<tr class="memdesc:a01287f3f68aff7e5d7ce35d3163021e2"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a292db653f04805f907737a480f681888"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a292db653f04805f907737a480f681888"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a292db653f04805f907737a480f681888">nfct_flags</a></td></tr>
+<tr class="memdesc:a292db653f04805f907737a480f681888"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:afc96567eba0053563867b8e3a064902b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc96567eba0053563867b8e3a064902b"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#afc96567eba0053563867b8e3a064902b">fftw_flags</a></td></tr>
+<tr class="memdesc:afc96567eba0053563867b8e3a064902b"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:a2f7f915bfefa105412cabfc368c26560"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f7f915bfefa105412cabfc368c26560"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">x</a></td></tr>
+<tr class="memdesc:a2f7f915bfefa105412cabfc368c26560"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a2c6b9d81be06f2e557c410310420809f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c6b9d81be06f2e557c410310420809f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2c6b9d81be06f2e557c410310420809f">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a2c6b9d81be06f2e557c410310420809f"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a2b69489da0118e06cba24db6d73ea934"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b69489da0118e06cba24db6d73ea934"></a>
+long double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2b69489da0118e06cba24db6d73ea934">c_phi_inv</a></td></tr>
+<tr class="memdesc:a2b69489da0118e06cba24db6d73ea934"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a59712f0b5712ba9020540b7bf355caea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59712f0b5712ba9020540b7bf355caea"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a59712f0b5712ba9020540b7bf355caea">psi</a></td></tr>
+<tr class="memdesc:a59712f0b5712ba9020540b7bf355caea"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a1b8cf9260caf345c8ecb5e6de726387b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b8cf9260caf345c8ecb5e6de726387b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a1b8cf9260caf345c8ecb5e6de726387b">size_psi</a></td></tr>
+<tr class="memdesc:a1b8cf9260caf345c8ecb5e6de726387b"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2e593f732ad26f9d681797a85a7293cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e593f732ad26f9d681797a85a7293cf"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2e593f732ad26f9d681797a85a7293cf">psi_index_g</a></td></tr>
+<tr class="memdesc:a2e593f732ad26f9d681797a85a7293cf"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2ec8c4542c9fafbaf90b469ab8d06d59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ec8c4542c9fafbaf90b469ab8d06d59"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2ec8c4542c9fafbaf90b469ab8d06d59">psi_index_f</a></td></tr>
+<tr class="memdesc:a2ec8c4542c9fafbaf90b469ab8d06d59"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:ab041d9e3d108a94572dd0fc742f69023"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab041d9e3d108a94572dd0fc742f69023"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a000c899ae773997e188f067537e1005b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a000c899ae773997e188f067537e1005b"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:afbe6522294161b247058e61e9ef64d78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbe6522294161b247058e61e9ef64d78"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#afbe6522294161b247058e61e9ef64d78">g1</a></td></tr>
+<tr class="memdesc:afbe6522294161b247058e61e9ef64d78"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a365bf7b6d6fa04bfb4206f8ec647eb14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a365bf7b6d6fa04bfb4206f8ec647eb14"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a365bf7b6d6fa04bfb4206f8ec647eb14">g2</a></td></tr>
+<tr class="memdesc:a365bf7b6d6fa04bfb4206f8ec647eb14"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a38de3cc7a337907a01ae2701ea335d75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38de3cc7a337907a01ae2701ea335d75"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a38de3cc7a337907a01ae2701ea335d75">spline_coeffs</a></td></tr>
+<tr class="memdesc:a38de3cc7a337907a01ae2701ea335d75"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00261">261</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfft__mv__plan__complex.html b/doc/api/html/structnfft__mv__plan__complex.html
new file mode 100644
index 0000000..4e4933e
--- /dev/null
+++ b/doc/api/html/structnfft__mv__plan__complex.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_mv_plan_complex Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfft_mv_plan_complex Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aea630b4e7cae1db0e17dd329a01c31a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea630b4e7cae1db0e17dd329a01c31a8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8">N_total</a></td></tr>
+<tr class="memdesc:aea630b4e7cae1db0e17dd329a01c31a8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a2cb2df3ae5db867f38cb75b7c88de7fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cb2df3ae5db867f38cb75b7c88de7fe"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe">M_total</a></td></tr>
+<tr class="memdesc:a2cb2df3ae5db867f38cb75b7c88de7fe"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a391146cff1e8fc3cb981bbbf806ede52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a391146cff1e8fc3cb981bbbf806ede52"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52">f_hat</a></td></tr>
+<tr class="memdesc:a391146cff1e8fc3cb981bbbf806ede52"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a84fdb468f61a2f2a135d41ae0da1692e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84fdb468f61a2f2a135d41ae0da1692e"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e">f</a></td></tr>
+<tr class="memdesc:a84fdb468f61a2f2a135d41ae0da1692e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a56bf298c03c4aaeb6b4aaf7ed5cca57e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56bf298c03c4aaeb6b4aaf7ed5cca57e"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a56bf298c03c4aaeb6b4aaf7ed5cca57e"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:add14030aae4920f7ca71ecf1efde00a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add14030aae4920f7ca71ecf1efde00a3"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:add14030aae4920f7ca71ecf1efde00a3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfft__mv__plan__double.html b/doc/api/html/structnfft__mv__plan__double.html
new file mode 100644
index 0000000..09e9eec
--- /dev/null
+++ b/doc/api/html/structnfft__mv__plan__double.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_mv_plan_double Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfft_mv_plan_double Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aed332691595037632eb9720cc7445e41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed332691595037632eb9720cc7445e41"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41">N_total</a></td></tr>
+<tr class="memdesc:aed332691595037632eb9720cc7445e41"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:af540ad90ef6b30fab022c95e8a5dcd58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af540ad90ef6b30fab022c95e8a5dcd58"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58">M_total</a></td></tr>
+<tr class="memdesc:af540ad90ef6b30fab022c95e8a5dcd58"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a238489d7a63fda4fc9677f56894e3cac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a238489d7a63fda4fc9677f56894e3cac"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac">f_hat</a></td></tr>
+<tr class="memdesc:a238489d7a63fda4fc9677f56894e3cac"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:aa850d9ba71b761a31d3a95aa9581ea5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa850d9ba71b761a31d3a95aa9581ea5e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e">f</a></td></tr>
+<tr class="memdesc:aa850d9ba71b761a31d3a95aa9581ea5e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a920771039e5cf889d6a29a243e6922e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a920771039e5cf889d6a29a243e6922e3"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a920771039e5cf889d6a29a243e6922e3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a92e4080bcb7241befa250be9d8f9a1cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92e4080bcb7241befa250be9d8f9a1cd"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a92e4080bcb7241befa250be9d8f9a1cd"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfft__plan.html b/doc/api/html/structnfft__plan.html
new file mode 100644
index 0000000..e13d293
--- /dev/null
+++ b/doc/api/html/structnfft__plan.html
@@ -0,0 +1,153 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfft_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfft_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a2310e54f3049b94d2bf08b67f689280c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2310e54f3049b94d2bf08b67f689280c"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2310e54f3049b94d2bf08b67f689280c">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_plan1</td></tr>
+<tr class="memdesc:a2310e54f3049b94d2bf08b67f689280c"><td class="mdescLeft"> </td><td class="mdescRight">Forward FFTW plan. <br/></td></tr>
+<tr class="memitem:a02f777d558f0f4a3417000200472f1a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02f777d558f0f4a3417000200472f1a9"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a02f777d558f0f4a3417000200472f1a9">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_plan2</td></tr>
+<tr class="memdesc:a02f777d558f0f4a3417000200472f1a9"><td class="mdescLeft"> </td><td class="mdescRight">Backward FFTW plan. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad33daddf76670c8731c759bf74ad0d22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad33daddf76670c8731c759bf74ad0d22"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22">N_total</a></td></tr>
+<tr class="memdesc:ad33daddf76670c8731c759bf74ad0d22"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:adf33ce87c35b396c50d214d9bdeeefe6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf33ce87c35b396c50d214d9bdeeefe6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6">M_total</a></td></tr>
+<tr class="memdesc:adf33ce87c35b396c50d214d9bdeeefe6"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a23409aec68871e9a56f11711e2891691"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23409aec68871e9a56f11711e2891691"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691">f_hat</a></td></tr>
+<tr class="memdesc:a23409aec68871e9a56f11711e2891691"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:afa27a166f809acf70ae27e5e6f28daa5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa27a166f809acf70ae27e5e6f28daa5"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5">f</a></td></tr>
+<tr class="memdesc:afa27a166f809acf70ae27e5e6f28daa5"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a9ebd66f2964cca6a02fc50d640df3557"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ebd66f2964cca6a02fc50d640df3557"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a9ebd66f2964cca6a02fc50d640df3557"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:abbe724645c96ef34c3e98d821f6648a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbe724645c96ef34c3e98d821f6648a3"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:abbe724645c96ef34c3e98d821f6648a3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ae39d4867eac948d96abbe3fc930b39a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae39d4867eac948d96abbe3fc930b39a8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8">d</a></td></tr>
+<tr class="memdesc:ae39d4867eac948d96abbe3fc930b39a8"><td class="mdescLeft"> </td><td class="mdescRight">dimension aka rank <br/></td></tr>
+<tr class="memitem:a307fb9647dee8b4a6acbd1ab26f67fa9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307fb9647dee8b4a6acbd1ab26f67fa9"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9">N</a></td></tr>
+<tr class="memdesc:a307fb9647dee8b4a6acbd1ab26f67fa9"><td class="mdescLeft"> </td><td class="mdescRight">multi-bandwidth <br/></td></tr>
+<tr class="memitem:a09340f6465c23f3d94636f4f0da30f8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09340f6465c23f3d94636f4f0da30f8a"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a">sigma</a></td></tr>
+<tr class="memdesc:a09340f6465c23f3d94636f4f0da30f8a"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:aa8db04bb03357b831a1958f9a802e0ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8db04bb03357b831a1958f9a802e0ae"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae">n</a></td></tr>
+<tr class="memdesc:aa8db04bb03357b831a1958f9a802e0ae"><td class="mdescLeft"> </td><td class="mdescRight">FFTW length, equal to sigma*N, default is the power of 2 such that <img class="formulaInl" alt="$2\le\sigma<4$" src="form_0.png"/>. <br/></td></tr>
+<tr class="memitem:ad8a5fdac5bcf62d86479c800768fdeb7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8a5fdac5bcf62d86479c800768fdeb7"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">n_total</a></td></tr>
+<tr class="memdesc:ad8a5fdac5bcf62d86479c800768fdeb7"><td class="mdescLeft"> </td><td class="mdescRight">Total size of FFTW. <br/></td></tr>
+<tr class="memitem:adbac137859fb87be7be73a5443de8cef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbac137859fb87be7be73a5443de8cef"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef">m</a></td></tr>
+<tr class="memdesc:adbac137859fb87be7be73a5443de8cef"><td class="mdescLeft"> </td><td class="mdescRight">Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN) <br/></td></tr>
+<tr class="memitem:a724949f4916b28f484eb447ee1a77f0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a724949f4916b28f484eb447ee1a77f0a"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a">b</a></td></tr>
+<tr class="memdesc:a724949f4916b28f484eb447ee1a77f0a"><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter of the window function. <br/></td></tr>
+<tr class="memitem:a0b3735bcdd415a86126e0c86d47941a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b3735bcdd415a86126e0c86d47941a4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4">K</a></td></tr>
+<tr class="memdesc:a0b3735bcdd415a86126e0c86d47941a4"><td class="mdescLeft"> </td><td class="mdescRight">Number of equispaced samples of the window function for PRE_LIN_PSI. <br/></td></tr>
+<tr class="memitem:a2721da68a3a5b1846ecca8395d76bb1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2721da68a3a5b1846ecca8395d76bb1d"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d">nfft_flags</a></td></tr>
+<tr class="memdesc:a2721da68a3a5b1846ecca8395d76bb1d"><td class="mdescLeft"> </td><td class="mdescRight">Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE. <br/></td></tr>
+<tr class="memitem:a530aea04dba32fb2a41287b4581b1805"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a530aea04dba32fb2a41287b4581b1805"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805">fftw_flags</a></td></tr>
+<tr class="memdesc:a530aea04dba32fb2a41287b4581b1805"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT. <br/></td></tr>
+<tr class="memitem:a7eb64fb5fedfba0ec75261e777e020c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7eb64fb5fedfba0ec75261e777e020c0"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0">x</a></td></tr>
+<tr class="memdesc:a7eb64fb5fedfba0ec75261e777e020c0"><td class="mdescLeft"> </td><td class="mdescRight">Nodes in time/spatial domain, size is <img class="formulaInl" alt="$dM$" src="form_1.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a7c3e5504175fa292a6a5d0c0e1d7f848"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c3e5504175fa292a6a5d0c0e1d7f848"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a7c3e5504175fa292a6a5d0c0e1d7f848"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+<tr class="memitem:aa5dd76324152be95967c0a4717e8e4ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5dd76324152be95967c0a4717e8e4ce"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce">c_phi_inv</a></td></tr>
+<tr class="memdesc:aa5dd76324152be95967c0a4717e8e4ce"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the diagonal matrix <img class="formulaInl" alt="$D$" src="form_2.png"/>, size \ is <img class="formulaInl" alt="$N_0+\hdots+N_{d-1}$" src="form_3.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a0330a1c3ae461fa9156ba0ecbe17bb7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0330a1c3ae461fa9156ba0ecbe17bb7c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c">psi</a></td></tr>
+<tr class="memdesc:a0330a1c3ae461fa9156ba0ecbe17bb7c"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the sparse matrix <img class="formulaInl" alt="$B$" src="form_4.png"/>, size depends on precomputation scheme. <br/></td></tr>
+<tr class="memitem:a877d6cbe17ec77a9e66bdbea3cfafe0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a877d6cbe17ec77a9e66bdbea3cfafe0a"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a">psi_index_g</a></td></tr>
+<tr class="memdesc:a877d6cbe17ec77a9e66bdbea3cfafe0a"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a2ed144cf7d6043a93c07b6f6ba7bbe2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ed144cf7d6043a93c07b6f6ba7bbe2a"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a">psi_index_f</a></td></tr>
+<tr class="memdesc:a2ed144cf7d6043a93c07b6f6ba7bbe2a"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a844b51e453d6c80462eaad7844633539"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a844b51e453d6c80462eaad7844633539"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539">g</a></td></tr>
+<tr class="memdesc:a844b51e453d6c80462eaad7844633539"><td class="mdescLeft"> </td><td class="mdescRight">Oversampled vector of samples, size is <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">n_total</a> double complex. <br/></td></tr>
+<tr class="memitem:a2dff6c2b829694a7d4cca5acc7c7d6d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2dff6c2b829694a7d4cca5acc7c7d6d5"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5">g_hat</a></td></tr>
+<tr class="memdesc:a2dff6c2b829694a7d4cca5acc7c7d6d5"><td class="mdescLeft"> </td><td class="mdescRight">Zero-padded vector of Fourier coefficients, size is <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">n_total</a> fftw_complex. <br/></td></tr>
+<tr class="memitem:a2190e7201c55214d153b4d91eaa7efda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2190e7201c55214d153b4d91eaa7efda"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda">g1</a></td></tr>
+<tr class="memdesc:a2190e7201c55214d153b4d91eaa7efda"><td class="mdescLeft"> </td><td class="mdescRight">Input of fftw. <br/></td></tr>
+<tr class="memitem:ad96e0aa935ea3589e999c131c43d8a78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad96e0aa935ea3589e999c131c43d8a78"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78">g2</a></td></tr>
+<tr class="memdesc:ad96e0aa935ea3589e999c131c43d8a78"><td class="mdescLeft"> </td><td class="mdescRight">Output of fftw. <br/></td></tr>
+<tr class="memitem:a3aaf44c4f0769644075d9fc5ed60afa0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aaf44c4f0769644075d9fc5ed60afa0"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a3aaf44c4f0769644075d9fc5ed60afa0">spline_coeffs</a></td></tr>
+<tr class="memdesc:a3aaf44c4f0769644075d9fc5ed60afa0"><td class="mdescLeft"> </td><td class="mdescRight">Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined. <br/></td></tr>
+<tr class="memitem:a4d917887b76ddd9fadf30bc3b44b6735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d917887b76ddd9fadf30bc3b44b6735"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735">index_x</a></td></tr>
+<tr class="memdesc:a4d917887b76ddd9fadf30bc3b44b6735"><td class="mdescLeft"> </td><td class="mdescRight">Index array for nodes x used when flag NFFT_SORT_NODES is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfftf__mv__plan__complex.html b/doc/api/html/structnfftf__mv__plan__complex.html
new file mode 100644
index 0000000..b6eca3a
--- /dev/null
+++ b/doc/api/html/structnfftf__mv__plan__complex.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfftf_mv_plan_complex Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfftf_mv_plan_complex Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a65ce9742c15bad2711e8f8151bbf941c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65ce9742c15bad2711e8f8151bbf941c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#a65ce9742c15bad2711e8f8151bbf941c">N_total</a></td></tr>
+<tr class="memdesc:a65ce9742c15bad2711e8f8151bbf941c"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ab437c32f06548b3728bcb2b39681acd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab437c32f06548b3728bcb2b39681acd8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#ab437c32f06548b3728bcb2b39681acd8">M_total</a></td></tr>
+<tr class="memdesc:ab437c32f06548b3728bcb2b39681acd8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ad55a895ef394e9b74db36d028656b382"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad55a895ef394e9b74db36d028656b382"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#ad55a895ef394e9b74db36d028656b382">f_hat</a></td></tr>
+<tr class="memdesc:ad55a895ef394e9b74db36d028656b382"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:ab3a2f060f60eb88cd268bc1bec2e5310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3a2f060f60eb88cd268bc1bec2e5310"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#ab3a2f060f60eb88cd268bc1bec2e5310">f</a></td></tr>
+<tr class="memdesc:ab3a2f060f60eb88cd268bc1bec2e5310"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a48e28caf604132d02999d1dc0f5dc9a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48e28caf604132d02999d1dc0f5dc9a0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#a48e28caf604132d02999d1dc0f5dc9a0">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a48e28caf604132d02999d1dc0f5dc9a0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:acbff2532fc4d66cf92321be33ef6498f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbff2532fc4d66cf92321be33ef6498f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#acbff2532fc4d66cf92321be33ef6498f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:acbff2532fc4d66cf92321be33ef6498f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfftf__mv__plan__double.html b/doc/api/html/structnfftf__mv__plan__double.html
new file mode 100644
index 0000000..dc1e120
--- /dev/null
+++ b/doc/api/html/structnfftf__mv__plan__double.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfftf_mv_plan_double Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfftf_mv_plan_double Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a1df474111c1d61261d53455e05bc6c63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df474111c1d61261d53455e05bc6c63"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a1df474111c1d61261d53455e05bc6c63">N_total</a></td></tr>
+<tr class="memdesc:a1df474111c1d61261d53455e05bc6c63"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a37eb6ac713dbf1205f2dce0fa39107df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37eb6ac713dbf1205f2dce0fa39107df"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a37eb6ac713dbf1205f2dce0fa39107df">M_total</a></td></tr>
+<tr class="memdesc:a37eb6ac713dbf1205f2dce0fa39107df"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a109229f89032f01e4b2bece93297189c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a109229f89032f01e4b2bece93297189c"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a109229f89032f01e4b2bece93297189c">f_hat</a></td></tr>
+<tr class="memdesc:a109229f89032f01e4b2bece93297189c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a0b25cac2771ce5e3048ddc1b708e9005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b25cac2771ce5e3048ddc1b708e9005"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a0b25cac2771ce5e3048ddc1b708e9005">f</a></td></tr>
+<tr class="memdesc:a0b25cac2771ce5e3048ddc1b708e9005"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a130252f4a197b65416311097880cff4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a130252f4a197b65416311097880cff4f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a130252f4a197b65416311097880cff4f">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a130252f4a197b65416311097880cff4f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a3d0e47cf55f04c89523abd46f361ef91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d0e47cf55f04c89523abd46f361ef91"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a3d0e47cf55f04c89523abd46f361ef91">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a3d0e47cf55f04c89523abd46f361ef91"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfftf__plan.html b/doc/api/html/structnfftf__plan.html
new file mode 100644
index 0000000..bbd5277
--- /dev/null
+++ b/doc/api/html/structnfftf__plan.html
@@ -0,0 +1,153 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfftf_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfftf_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a17fea72bdd4f446528716400f4522dac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17fea72bdd4f446528716400f4522dac"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a17fea72bdd4f446528716400f4522dac">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_plan1</td></tr>
+<tr class="memdesc:a17fea72bdd4f446528716400f4522dac"><td class="mdescLeft"> </td><td class="mdescRight">Forward FFTW plan. <br/></td></tr>
+<tr class="memitem:ae2ffec96887c5407fb31063a0139f678"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2ffec96887c5407fb31063a0139f678"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#ae2ffec96887c5407fb31063a0139f678">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_plan2</td></tr>
+<tr class="memdesc:ae2ffec96887c5407fb31063a0139f678"><td class="mdescLeft"> </td><td class="mdescRight">Backward FFTW plan. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a65855ec1dec6f17eb46d6762ad6ff942"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65855ec1dec6f17eb46d6762ad6ff942"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a65855ec1dec6f17eb46d6762ad6ff942">N_total</a></td></tr>
+<tr class="memdesc:a65855ec1dec6f17eb46d6762ad6ff942"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a3823921949eded81bde776f57eba8052"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3823921949eded81bde776f57eba8052"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a3823921949eded81bde776f57eba8052">M_total</a></td></tr>
+<tr class="memdesc:a3823921949eded81bde776f57eba8052"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aa967453b5ae5ba9e5b2056c884d2cda5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa967453b5ae5ba9e5b2056c884d2cda5"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aa967453b5ae5ba9e5b2056c884d2cda5">f_hat</a></td></tr>
+<tr class="memdesc:aa967453b5ae5ba9e5b2056c884d2cda5"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a1c2e419705d6254801134bffe0695ae1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c2e419705d6254801134bffe0695ae1"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a1c2e419705d6254801134bffe0695ae1">f</a></td></tr>
+<tr class="memdesc:a1c2e419705d6254801134bffe0695ae1"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:ab09b1d93f60895791076e1e41241ecb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab09b1d93f60895791076e1e41241ecb0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#ab09b1d93f60895791076e1e41241ecb0">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ab09b1d93f60895791076e1e41241ecb0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a9f8b111e42ef7ba609879d4a6983695d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f8b111e42ef7ba609879d4a6983695d"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a9f8b111e42ef7ba609879d4a6983695d">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a9f8b111e42ef7ba609879d4a6983695d"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a35ff58e4549b1c5292fd03cb215debac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35ff58e4549b1c5292fd03cb215debac"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a35ff58e4549b1c5292fd03cb215debac">d</a></td></tr>
+<tr class="memdesc:a35ff58e4549b1c5292fd03cb215debac"><td class="mdescLeft"> </td><td class="mdescRight">dimension aka rank <br/></td></tr>
+<tr class="memitem:a27caa84ad525683d89b5963defadc98d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27caa84ad525683d89b5963defadc98d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a27caa84ad525683d89b5963defadc98d">N</a></td></tr>
+<tr class="memdesc:a27caa84ad525683d89b5963defadc98d"><td class="mdescLeft"> </td><td class="mdescRight">multi-bandwidth <br/></td></tr>
+<tr class="memitem:a20d669812b6acf9a8bda34cb659d61dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20d669812b6acf9a8bda34cb659d61dd"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a20d669812b6acf9a8bda34cb659d61dd">sigma</a></td></tr>
+<tr class="memdesc:a20d669812b6acf9a8bda34cb659d61dd"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a6971ea46e4044daa773f19c8bd8d4a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6971ea46e4044daa773f19c8bd8d4a0b"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a6971ea46e4044daa773f19c8bd8d4a0b">n</a></td></tr>
+<tr class="memdesc:a6971ea46e4044daa773f19c8bd8d4a0b"><td class="mdescLeft"> </td><td class="mdescRight">FFTW length, equal to sigma*N, default is the power of 2 such that <img class="formulaInl" alt="$2\le\sigma<4$" src="form_0.png"/>. <br/></td></tr>
+<tr class="memitem:a79aefed96e856d86d0fb74f873ae09ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79aefed96e856d86d0fb74f873ae09ba"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">n_total</a></td></tr>
+<tr class="memdesc:a79aefed96e856d86d0fb74f873ae09ba"><td class="mdescLeft"> </td><td class="mdescRight">Total size of FFTW. <br/></td></tr>
+<tr class="memitem:a9002bd9a063311155ae2a8c94c076e9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9002bd9a063311155ae2a8c94c076e9d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a9002bd9a063311155ae2a8c94c076e9d">m</a></td></tr>
+<tr class="memdesc:a9002bd9a063311155ae2a8c94c076e9d"><td class="mdescLeft"> </td><td class="mdescRight">Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN) <br/></td></tr>
+<tr class="memitem:a3ede2fe9c94e00ec59150ba2971facb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ede2fe9c94e00ec59150ba2971facb2"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a3ede2fe9c94e00ec59150ba2971facb2">b</a></td></tr>
+<tr class="memdesc:a3ede2fe9c94e00ec59150ba2971facb2"><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter of the window function. <br/></td></tr>
+<tr class="memitem:aad0836b3e8e4a98b27729d960b593caa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad0836b3e8e4a98b27729d960b593caa"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aad0836b3e8e4a98b27729d960b593caa">K</a></td></tr>
+<tr class="memdesc:aad0836b3e8e4a98b27729d960b593caa"><td class="mdescLeft"> </td><td class="mdescRight">Number of equispaced samples of the window function for PRE_LIN_PSI. <br/></td></tr>
+<tr class="memitem:adaaa66e5b89d9f65ce94b56617574518"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaaa66e5b89d9f65ce94b56617574518"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#adaaa66e5b89d9f65ce94b56617574518">nfft_flags</a></td></tr>
+<tr class="memdesc:adaaa66e5b89d9f65ce94b56617574518"><td class="mdescLeft"> </td><td class="mdescRight">Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE. <br/></td></tr>
+<tr class="memitem:a880c04f5e9d485d84065b3c289cd5729"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a880c04f5e9d485d84065b3c289cd5729"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a880c04f5e9d485d84065b3c289cd5729">fftw_flags</a></td></tr>
+<tr class="memdesc:a880c04f5e9d485d84065b3c289cd5729"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT. <br/></td></tr>
+<tr class="memitem:a4bcaa307f32321459187f8633a946a7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bcaa307f32321459187f8633a946a7e"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a4bcaa307f32321459187f8633a946a7e">x</a></td></tr>
+<tr class="memdesc:a4bcaa307f32321459187f8633a946a7e"><td class="mdescLeft"> </td><td class="mdescRight">Nodes in time/spatial domain, size is <img class="formulaInl" alt="$dM$" src="form_1.png"/> doubles. <br/></td></tr>
+<tr class="memitem:afb81143dbd42553ed90440afc406c909"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb81143dbd42553ed90440afc406c909"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#afb81143dbd42553ed90440afc406c909">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:afb81143dbd42553ed90440afc406c909"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+<tr class="memitem:aa71f70b332bbb9868caad1db9f6cda02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa71f70b332bbb9868caad1db9f6cda02"></a>
+float ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aa71f70b332bbb9868caad1db9f6cda02">c_phi_inv</a></td></tr>
+<tr class="memdesc:aa71f70b332bbb9868caad1db9f6cda02"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the diagonal matrix <img class="formulaInl" alt="$D$" src="form_2.png"/>, size \ is <img class="formulaInl" alt="$N_0+\hdots+N_{d-1}$" src="form_3.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a84402b4c947d57abef20e5f2db9110e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84402b4c947d57abef20e5f2db9110e3"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a84402b4c947d57abef20e5f2db9110e3">psi</a></td></tr>
+<tr class="memdesc:a84402b4c947d57abef20e5f2db9110e3"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the sparse matrix <img class="formulaInl" alt="$B$" src="form_4.png"/>, size depends on precomputation scheme. <br/></td></tr>
+<tr class="memitem:a04f8c8d2075057efa3b41381705084c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04f8c8d2075057efa3b41381705084c6"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a04f8c8d2075057efa3b41381705084c6">psi_index_g</a></td></tr>
+<tr class="memdesc:a04f8c8d2075057efa3b41381705084c6"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:ac0073e7c6389e9141d555bf58e2d0b59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0073e7c6389e9141d555bf58e2d0b59"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#ac0073e7c6389e9141d555bf58e2d0b59">psi_index_f</a></td></tr>
+<tr class="memdesc:ac0073e7c6389e9141d555bf58e2d0b59"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a35e6b39bfe06e5a6e56cde2458cf79a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35e6b39bfe06e5a6e56cde2458cf79a7"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a35e6b39bfe06e5a6e56cde2458cf79a7">g</a></td></tr>
+<tr class="memdesc:a35e6b39bfe06e5a6e56cde2458cf79a7"><td class="mdescLeft"> </td><td class="mdescRight">Oversampled vector of samples, size is <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">n_total</a> double complex. <br/></td></tr>
+<tr class="memitem:aad01cb28079405090eaa1fce590c0c09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad01cb28079405090eaa1fce590c0c09"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aad01cb28079405090eaa1fce590c0c09">g_hat</a></td></tr>
+<tr class="memdesc:aad01cb28079405090eaa1fce590c0c09"><td class="mdescLeft"> </td><td class="mdescRight">Zero-padded vector of Fourier coefficients, size is <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">n_total</a> fftw_complex. <br/></td></tr>
+<tr class="memitem:a01420d5d785228ee24a4819d2b0454a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01420d5d785228ee24a4819d2b0454a2"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a01420d5d785228ee24a4819d2b0454a2">g1</a></td></tr>
+<tr class="memdesc:a01420d5d785228ee24a4819d2b0454a2"><td class="mdescLeft"> </td><td class="mdescRight">Input of fftw. <br/></td></tr>
+<tr class="memitem:a4fda15d8d9edaa8de0636b2a458bf763"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4fda15d8d9edaa8de0636b2a458bf763"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a4fda15d8d9edaa8de0636b2a458bf763">g2</a></td></tr>
+<tr class="memdesc:a4fda15d8d9edaa8de0636b2a458bf763"><td class="mdescLeft"> </td><td class="mdescRight">Output of fftw. <br/></td></tr>
+<tr class="memitem:a65c65de370e29b24ba0da097d20ee262"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65c65de370e29b24ba0da097d20ee262"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a65c65de370e29b24ba0da097d20ee262">spline_coeffs</a></td></tr>
+<tr class="memdesc:a65c65de370e29b24ba0da097d20ee262"><td class="mdescLeft"> </td><td class="mdescRight">Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined. <br/></td></tr>
+<tr class="memitem:a1dadaac164fe9f9be856d47a53498335"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1dadaac164fe9f9be856d47a53498335"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a1dadaac164fe9f9be856d47a53498335">index_x</a></td></tr>
+<tr class="memdesc:a1dadaac164fe9f9be856d47a53498335"><td class="mdescLeft"> </td><td class="mdescRight">Index array for nodes x used when flag NFFT_SORT_NODES is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfftl__mv__plan__complex.html b/doc/api/html/structnfftl__mv__plan__complex.html
new file mode 100644
index 0000000..4d1dfdd
--- /dev/null
+++ b/doc/api/html/structnfftl__mv__plan__complex.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfftl_mv_plan_complex Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfftl_mv_plan_complex Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a469c0077659dda97651e075da143a398"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a469c0077659dda97651e075da143a398"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#a469c0077659dda97651e075da143a398">N_total</a></td></tr>
+<tr class="memdesc:a469c0077659dda97651e075da143a398"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:aa0175f63a2b2f5c80bb3153008315871"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0175f63a2b2f5c80bb3153008315871"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#aa0175f63a2b2f5c80bb3153008315871">M_total</a></td></tr>
+<tr class="memdesc:aa0175f63a2b2f5c80bb3153008315871"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ae4b3786df2416012cf16d7ed4c097791"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4b3786df2416012cf16d7ed4c097791"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#ae4b3786df2416012cf16d7ed4c097791">f_hat</a></td></tr>
+<tr class="memdesc:ae4b3786df2416012cf16d7ed4c097791"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:adb5c2e9ba052f02fec78e550413aacfa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb5c2e9ba052f02fec78e550413aacfa"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#adb5c2e9ba052f02fec78e550413aacfa">f</a></td></tr>
+<tr class="memdesc:adb5c2e9ba052f02fec78e550413aacfa"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a4d573c341aae7a4e034944772478658c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d573c341aae7a4e034944772478658c"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#a4d573c341aae7a4e034944772478658c">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4d573c341aae7a4e034944772478658c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a5f31b4b9a03ac8f9a503c1ae42cad758"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f31b4b9a03ac8f9a503c1ae42cad758"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#a5f31b4b9a03ac8f9a503c1ae42cad758">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a5f31b4b9a03ac8f9a503c1ae42cad758"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfftl__mv__plan__double.html b/doc/api/html/structnfftl__mv__plan__double.html
new file mode 100644
index 0000000..e1aa3eb
--- /dev/null
+++ b/doc/api/html/structnfftl__mv__plan__double.html
@@ -0,0 +1,77 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfftl_mv_plan_double Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfftl_mv_plan_double Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a63a371e62727c804a195cf2315b79a41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63a371e62727c804a195cf2315b79a41"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#a63a371e62727c804a195cf2315b79a41">N_total</a></td></tr>
+<tr class="memdesc:a63a371e62727c804a195cf2315b79a41"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ac7366d2d09a0b3aed5884b50d10ef478"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7366d2d09a0b3aed5884b50d10ef478"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#ac7366d2d09a0b3aed5884b50d10ef478">M_total</a></td></tr>
+<tr class="memdesc:ac7366d2d09a0b3aed5884b50d10ef478"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:add804289931e55388070ee495c3e5072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add804289931e55388070ee495c3e5072"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#add804289931e55388070ee495c3e5072">f_hat</a></td></tr>
+<tr class="memdesc:add804289931e55388070ee495c3e5072"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:ae6c4a0204a54f2a37a0acf2b3f5a0c0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c4a0204a54f2a37a0acf2b3f5a0c0c"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#ae6c4a0204a54f2a37a0acf2b3f5a0c0c">f</a></td></tr>
+<tr class="memdesc:ae6c4a0204a54f2a37a0acf2b3f5a0c0c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:aff66252bd97fa6d73d7e137d888bb625"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff66252bd97fa6d73d7e137d888bb625"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#aff66252bd97fa6d73d7e137d888bb625">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aff66252bd97fa6d73d7e137d888bb625"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a804a64f2fb25ad91487fbcc186d784e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a804a64f2fb25ad91487fbcc186d784e0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#a804a64f2fb25ad91487fbcc186d784e0">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a804a64f2fb25ad91487fbcc186d784e0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfftl__plan.html b/doc/api/html/structnfftl__plan.html
new file mode 100644
index 0000000..ce02e31
--- /dev/null
+++ b/doc/api/html/structnfftl__plan.html
@@ -0,0 +1,153 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfftl_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfftl_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab17581f82946cc39584acd6b059b7809"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab17581f82946cc39584acd6b059b7809"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ab17581f82946cc39584acd6b059b7809">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_plan1</td></tr>
+<tr class="memdesc:ab17581f82946cc39584acd6b059b7809"><td class="mdescLeft"> </td><td class="mdescRight">Forward FFTW plan. <br/></td></tr>
+<tr class="memitem:a2e9e81a72c786bd7ed4eef099a5f8a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e9e81a72c786bd7ed4eef099a5f8a5e"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a2e9e81a72c786bd7ed4eef099a5f8a5e">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_plan2</td></tr>
+<tr class="memdesc:a2e9e81a72c786bd7ed4eef099a5f8a5e"><td class="mdescLeft"> </td><td class="mdescRight">Backward FFTW plan. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a747b6aee3ae47ad66391027bc13789af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a747b6aee3ae47ad66391027bc13789af"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a747b6aee3ae47ad66391027bc13789af">N_total</a></td></tr>
+<tr class="memdesc:a747b6aee3ae47ad66391027bc13789af"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a95e2db75883c6586f31b8db8c8bf8cf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95e2db75883c6586f31b8db8c8bf8cf8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a95e2db75883c6586f31b8db8c8bf8cf8">M_total</a></td></tr>
+<tr class="memdesc:a95e2db75883c6586f31b8db8c8bf8cf8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ad5cf4ad0369bdaf07f6acd801e6b9e5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5cf4ad0369bdaf07f6acd801e6b9e5e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad5cf4ad0369bdaf07f6acd801e6b9e5e">f_hat</a></td></tr>
+<tr class="memdesc:ad5cf4ad0369bdaf07f6acd801e6b9e5e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a53b53a1222f4acf29c778b933c9f130e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53b53a1222f4acf29c778b933c9f130e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a53b53a1222f4acf29c778b933c9f130e">f</a></td></tr>
+<tr class="memdesc:a53b53a1222f4acf29c778b933c9f130e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a0f05caab33b6f473626e74f44356e3fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f05caab33b6f473626e74f44356e3fc"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a0f05caab33b6f473626e74f44356e3fc">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a0f05caab33b6f473626e74f44356e3fc"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a3d343b79e00dbb8cd4984143a03ddf53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d343b79e00dbb8cd4984143a03ddf53"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a3d343b79e00dbb8cd4984143a03ddf53">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a3d343b79e00dbb8cd4984143a03ddf53"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a4c139d72e93078b54f4240ecd7f6454f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c139d72e93078b54f4240ecd7f6454f"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a4c139d72e93078b54f4240ecd7f6454f">d</a></td></tr>
+<tr class="memdesc:a4c139d72e93078b54f4240ecd7f6454f"><td class="mdescLeft"> </td><td class="mdescRight">dimension aka rank <br/></td></tr>
+<tr class="memitem:a36e045f670b95d68f5c2e04b55a1c220"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36e045f670b95d68f5c2e04b55a1c220"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a36e045f670b95d68f5c2e04b55a1c220">N</a></td></tr>
+<tr class="memdesc:a36e045f670b95d68f5c2e04b55a1c220"><td class="mdescLeft"> </td><td class="mdescRight">multi-bandwidth <br/></td></tr>
+<tr class="memitem:a149fdaed10fafdb3bf414110ad233b7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a149fdaed10fafdb3bf414110ad233b7c"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a149fdaed10fafdb3bf414110ad233b7c">sigma</a></td></tr>
+<tr class="memdesc:a149fdaed10fafdb3bf414110ad233b7c"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a58140f5f6ea4ca1c0305cbcec55437bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58140f5f6ea4ca1c0305cbcec55437bd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a58140f5f6ea4ca1c0305cbcec55437bd">n</a></td></tr>
+<tr class="memdesc:a58140f5f6ea4ca1c0305cbcec55437bd"><td class="mdescLeft"> </td><td class="mdescRight">FFTW length, equal to sigma*N, default is the power of 2 such that <img class="formulaInl" alt="$2\le\sigma<4$" src="form_0.png"/>. <br/></td></tr>
+<tr class="memitem:a58ea89cc9b78b32c8c1775e8b1277ad8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58ea89cc9b78b32c8c1775e8b1277ad8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">n_total</a></td></tr>
+<tr class="memdesc:a58ea89cc9b78b32c8c1775e8b1277ad8"><td class="mdescLeft"> </td><td class="mdescRight">Total size of FFTW. <br/></td></tr>
+<tr class="memitem:ac4741304d0030c88a8244dd1d8171b65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4741304d0030c88a8244dd1d8171b65"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ac4741304d0030c88a8244dd1d8171b65">m</a></td></tr>
+<tr class="memdesc:ac4741304d0030c88a8244dd1d8171b65"><td class="mdescLeft"> </td><td class="mdescRight">Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN) <br/></td></tr>
+<tr class="memitem:a80c548cbcc4defbac2b544602a5baa85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80c548cbcc4defbac2b544602a5baa85"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a80c548cbcc4defbac2b544602a5baa85">b</a></td></tr>
+<tr class="memdesc:a80c548cbcc4defbac2b544602a5baa85"><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter of the window function. <br/></td></tr>
+<tr class="memitem:ae6f8a76f202fe1816cfe1004a9ce9a0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6f8a76f202fe1816cfe1004a9ce9a0d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ae6f8a76f202fe1816cfe1004a9ce9a0d">K</a></td></tr>
+<tr class="memdesc:ae6f8a76f202fe1816cfe1004a9ce9a0d"><td class="mdescLeft"> </td><td class="mdescRight">Number of equispaced samples of the window function for PRE_LIN_PSI. <br/></td></tr>
+<tr class="memitem:a375f14a65c5686803270dbb3cfd1c371"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a375f14a65c5686803270dbb3cfd1c371"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a375f14a65c5686803270dbb3cfd1c371">nfft_flags</a></td></tr>
+<tr class="memdesc:a375f14a65c5686803270dbb3cfd1c371"><td class="mdescLeft"> </td><td class="mdescRight">Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE. <br/></td></tr>
+<tr class="memitem:a4e0df1f491a4aa8f7373d776d705095f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e0df1f491a4aa8f7373d776d705095f"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a4e0df1f491a4aa8f7373d776d705095f">fftw_flags</a></td></tr>
+<tr class="memdesc:a4e0df1f491a4aa8f7373d776d705095f"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT. <br/></td></tr>
+<tr class="memitem:ad5695c30a05c03573082a1aac0394700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5695c30a05c03573082a1aac0394700"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">x</a></td></tr>
+<tr class="memdesc:ad5695c30a05c03573082a1aac0394700"><td class="mdescLeft"> </td><td class="mdescRight">Nodes in time/spatial domain, size is <img class="formulaInl" alt="$dM$" src="form_1.png"/> doubles. <br/></td></tr>
+<tr class="memitem:ae8cf45feec672cd7e6f42a1b6a091a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8cf45feec672cd7e6f42a1b6a091a5c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ae8cf45feec672cd7e6f42a1b6a091a5c">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:ae8cf45feec672cd7e6f42a1b6a091a5c"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+<tr class="memitem:afdcd5a1259a4fb7e7271efe30a207265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdcd5a1259a4fb7e7271efe30a207265"></a>
+long double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#afdcd5a1259a4fb7e7271efe30a207265">c_phi_inv</a></td></tr>
+<tr class="memdesc:afdcd5a1259a4fb7e7271efe30a207265"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the diagonal matrix <img class="formulaInl" alt="$D$" src="form_2.png"/>, size \ is <img class="formulaInl" alt="$N_0+\hdots+N_{d-1}$" src="form_3.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a33955562ecf9b48f4283f869c77f96ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33955562ecf9b48f4283f869c77f96ff"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a33955562ecf9b48f4283f869c77f96ff">psi</a></td></tr>
+<tr class="memdesc:a33955562ecf9b48f4283f869c77f96ff"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the sparse matrix <img class="formulaInl" alt="$B$" src="form_4.png"/>, size depends on precomputation scheme. <br/></td></tr>
+<tr class="memitem:ad3ff1d5c721f0ec4e81aa341b29abc15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3ff1d5c721f0ec4e81aa341b29abc15"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad3ff1d5c721f0ec4e81aa341b29abc15">psi_index_g</a></td></tr>
+<tr class="memdesc:ad3ff1d5c721f0ec4e81aa341b29abc15"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a713765bd7f9b488ac995de023de2ead1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a713765bd7f9b488ac995de023de2ead1"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a713765bd7f9b488ac995de023de2ead1">psi_index_f</a></td></tr>
+<tr class="memdesc:a713765bd7f9b488ac995de023de2ead1"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:aa442607f39ed01885dbeb286b18b1b77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa442607f39ed01885dbeb286b18b1b77"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#aa442607f39ed01885dbeb286b18b1b77">g</a></td></tr>
+<tr class="memdesc:aa442607f39ed01885dbeb286b18b1b77"><td class="mdescLeft"> </td><td class="mdescRight">Oversampled vector of samples, size is <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">n_total</a> double complex. <br/></td></tr>
+<tr class="memitem:af708c1c479196fb4e3ded3d289085b5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af708c1c479196fb4e3ded3d289085b5e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#af708c1c479196fb4e3ded3d289085b5e">g_hat</a></td></tr>
+<tr class="memdesc:af708c1c479196fb4e3ded3d289085b5e"><td class="mdescLeft"> </td><td class="mdescRight">Zero-padded vector of Fourier coefficients, size is <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">n_total</a> fftw_complex. <br/></td></tr>
+<tr class="memitem:a71a99cd893a823d1a7edb139650b2afe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71a99cd893a823d1a7edb139650b2afe"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a71a99cd893a823d1a7edb139650b2afe">g1</a></td></tr>
+<tr class="memdesc:a71a99cd893a823d1a7edb139650b2afe"><td class="mdescLeft"> </td><td class="mdescRight">Input of fftw. <br/></td></tr>
+<tr class="memitem:aea25feca0bccefe267c0a9eb75390ed6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea25feca0bccefe267c0a9eb75390ed6"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#aea25feca0bccefe267c0a9eb75390ed6">g2</a></td></tr>
+<tr class="memdesc:aea25feca0bccefe267c0a9eb75390ed6"><td class="mdescLeft"> </td><td class="mdescRight">Output of fftw. <br/></td></tr>
+<tr class="memitem:a971f190366e40c729899ff71d2a60682"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a971f190366e40c729899ff71d2a60682"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a971f190366e40c729899ff71d2a60682">spline_coeffs</a></td></tr>
+<tr class="memdesc:a971f190366e40c729899ff71d2a60682"><td class="mdescLeft"> </td><td class="mdescRight">Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined. <br/></td></tr>
+<tr class="memitem:ad98e162c23583ec8f010aacf9ec06767"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad98e162c23583ec8f010aacf9ec06767"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad98e162c23583ec8f010aacf9ec06767">index_x</a></td></tr>
+<tr class="memdesc:ad98e162c23583ec8f010aacf9ec06767"><td class="mdescLeft"> </td><td class="mdescRight">Index array for nodes x used when flag NFFT_SORT_NODES is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsft__plan.html b/doc/api/html/structnfsft__plan.html
new file mode 100644
index 0000000..131b6a3
--- /dev/null
+++ b/doc/api/html/structnfsft__plan.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsft_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a57fe4569f9109b92ed55caeddce686b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57fe4569f9109b92ed55caeddce686b8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8">N_total</a></td></tr>
+<tr class="memdesc:a57fe4569f9109b92ed55caeddce686b8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae83b4ef24662500a1c0374f9e0bf73ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae83b4ef24662500a1c0374f9e0bf73ed"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed">M_total</a></td></tr>
+<tr class="memdesc:ae83b4ef24662500a1c0374f9e0bf73ed"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:af3f147694cf5d7ac7b658288bf2cfb42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3f147694cf5d7ac7b658288bf2cfb42"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42">f_hat</a></td></tr>
+<tr class="memdesc:af3f147694cf5d7ac7b658288bf2cfb42"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:aebedb76f2df25603c548ae9672e970df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebedb76f2df25603c548ae9672e970df"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df">f</a></td></tr>
+<tr class="memdesc:aebedb76f2df25603c548ae9672e970df"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a01bf30c31f886ffa9d486c010a452051"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01bf30c31f886ffa9d486c010a452051"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a01bf30c31f886ffa9d486c010a452051"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a14cc99f56f6a61958aef26f80aac6f12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14cc99f56f6a61958aef26f80aac6f12"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a14cc99f56f6a61958aef26f80aac6f12"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ae5da5c37169612dcf2d66ff595ee4403"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5da5c37169612dcf2d66ff595ee4403"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403">N</a></td></tr>
+<tr class="memdesc:ae5da5c37169612dcf2d66ff595ee4403"><td class="mdescLeft"> </td><td class="mdescRight">the bandwidth <img class="formulaInl" alt="$N$" src="form_5.png"/> <br/></td></tr>
+<tr class="memitem:af361cee5b4f7dabae68e53674861df90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af361cee5b4f7dabae68e53674861df90"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90">x</a></td></tr>
+<tr class="memdesc:af361cee5b4f7dabae68e53674861df90"><td class="mdescLeft"> </td><td class="mdescRight">the nodes <img class="formulaInl" alt="$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$" src="form_6.png"/> for <img class="formulaInl" alt="$m=0,\ldots, M-1$" src="form_7.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N},$" src="form_8.png"/> <br/></td></tr>
+<tr class="memitem:a59d80818cb9c0dcaccc477954720772c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59d80818cb9c0dcaccc477954720772c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a59d80818cb9c0dcaccc477954720772c">t</a></td></tr>
+<tr class="memdesc:a59d80818cb9c0dcaccc477954720772c"><td class="mdescLeft"> </td><td class="mdescRight">the logarithm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a5ad6e9d30dd23d5be94b9277e5068694"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ad6e9d30dd23d5be94b9277e5068694"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694">flags</a></td></tr>
+<tr class="memdesc:a5ad6e9d30dd23d5be94b9277e5068694"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:af21a62a31af4918fda1376612398369e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af21a62a31af4918fda1376612398369e"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e">plan_nfft</a></td></tr>
+<tr class="memdesc:af21a62a31af4918fda1376612398369e"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a79156943fb3c87599ee7fa3bc157f548"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79156943fb3c87599ee7fa3bc157f548"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548">f_hat_intern</a></td></tr>
+<tr class="memdesc:a79156943fb3c87599ee7fa3bc157f548"><td class="mdescLeft"> </td><td class="mdescRight">Internally used pointer to spherical Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae22ba52a7e414e15dc662c8ee2b5f2db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae22ba52a7e414e15dc662c8ee2b5f2db"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:ae22ba52a7e414e15dc662c8ee2b5f2db"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00551">551</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsft__wisdom.html b/doc/api/html/structnfsft__wisdom.html
new file mode 100644
index 0000000..69f49d5
--- /dev/null
+++ b/doc/api/html/structnfsft__wisdom.html
@@ -0,0 +1,123 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsft_wisdom Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsft_wisdom Struct Reference<div class="ingroups"><a class="el" href="group__nfsft.html">Nfsft</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Wisdom structure.  
+ <a href="structnfsft__wisdom.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="kernel_2nfsft_2api_8h_source.html">api.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abb3162b2e1faa123a9ef70f1374aa740"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">initialized</a></td></tr>
+<tr class="memdesc:abb3162b2e1faa123a9ef70f1374aa740"><td class="mdescLeft"> </td><td class="mdescRight">Indicates wether the structure has been initialized.  <a href="#abb3162b2e1faa123a9ef70f1374aa740"></a><br/></td></tr>
+<tr class="memitem:a267b5c83fbfef2212669a2f61960e3d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a267b5c83fbfef2212669a2f61960e3d4"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>flags</b></td></tr>
+<tr class="memitem:ac0d21110fe9475646b8174b1048cda51"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">N_MAX</a></td></tr>
+<tr class="memdesc:ac0d21110fe9475646b8174b1048cda51"><td class="mdescLeft"> </td><td class="mdescRight">Stores precomputation flags.  <a href="#ac0d21110fe9475646b8174b1048cda51"></a><br/></td></tr>
+<tr class="memitem:ae6c31fe1bc09d2894948358c2bea27e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c31fe1bc09d2894948358c2bea27e4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">T_MAX</a></td></tr>
+<tr class="memdesc:ae6c31fe1bc09d2894948358c2bea27e4"><td class="mdescLeft"> </td><td class="mdescRight">The logarithm /f$t =  N_{{max}}/f$ of the maximum bandwidth. <br/></td></tr>
+<tr class="memitem:a755da8bd28cc1322415bd0ddcfceaf4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a755da8bd28cc1322415bd0ddcfceaf4e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">alpha</a></td></tr>
+<tr class="memdesc:a755da8bd28cc1322415bd0ddcfceaf4e"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. <br/></td></tr>
+<tr class="memitem:a6bcfe5201d3fed513c2cdb37832ee255"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6bcfe5201d3fed513c2cdb37832ee255"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">beta</a></td></tr>
+<tr class="memdesc:a6bcfe5201d3fed513c2cdb37832ee255"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. <br/></td></tr>
+<tr class="memitem:a1703c0339b14ee1f0956d3e394f598e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1703c0339b14ee1f0956d3e394f598e2"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">gamma</a></td></tr>
+<tr class="memdesc:a1703c0339b14ee1f0956d3e394f598e2"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. <br/></td></tr>
+<tr class="memitem:ac367edaa1fae041e5b049cd81b44336b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac367edaa1fae041e5b049cd81b44336b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">threshold</a></td></tr>
+<tr class="memdesc:ac367edaa1fae041e5b049cd81b44336b"><td class="mdescLeft"> </td><td class="mdescRight">The threshold /f$/f$. <br/></td></tr>
+<tr class="memitem:a18de3dcf9ca2e2e577fccfcca712bfd2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18de3dcf9ca2e2e577fccfcca712bfd2"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">set</a></td></tr>
+<tr class="memdesc:a18de3dcf9ca2e2e577fccfcca712bfd2"><td class="mdescLeft"> </td><td class="mdescRight">Structure for <em>discrete</em> <em>polynomial</em> <em>transform</em> (<em>DPT</em>) <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Wisdom structure. </p>
+
+<p>Definition at line <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00058">58</a> of file <a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="abb3162b2e1faa123a9ef70f1374aa740"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool nfsft_wisdom::initialized</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Indicates wether the structure has been initialized. </p>
+
+<p>Definition at line <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00061">61</a> of file <a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac0d21110fe9475646b8174b1048cda51"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nfsft_wisdom::N_MAX</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stores precomputation flags. </p>
+<p>The maximum bandwidth /f$N_{{max}}  {N}_0/f$ </p>
+
+<p>Definition at line <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00065">65</a> of file <a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsftf__plan.html b/doc/api/html/structnfsftf__plan.html
new file mode 100644
index 0000000..13e9d72
--- /dev/null
+++ b/doc/api/html/structnfsftf__plan.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsftf_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsftf_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a90ee6582e535312ac761e4e6fbaad0c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90ee6582e535312ac761e4e6fbaad0c0"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a90ee6582e535312ac761e4e6fbaad0c0">N_total</a></td></tr>
+<tr class="memdesc:a90ee6582e535312ac761e4e6fbaad0c0"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a5df19929f38064f36893840388ef975e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5df19929f38064f36893840388ef975e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a5df19929f38064f36893840388ef975e">M_total</a></td></tr>
+<tr class="memdesc:a5df19929f38064f36893840388ef975e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a840547e30414a41c3751e2b418f76312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a840547e30414a41c3751e2b418f76312"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a840547e30414a41c3751e2b418f76312">f_hat</a></td></tr>
+<tr class="memdesc:a840547e30414a41c3751e2b418f76312"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a7cfd191a4353a736bf9045c7e1d46f70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cfd191a4353a736bf9045c7e1d46f70"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a7cfd191a4353a736bf9045c7e1d46f70">f</a></td></tr>
+<tr class="memdesc:a7cfd191a4353a736bf9045c7e1d46f70"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a417f0b7f48ab77d5af34ed1da9ba95c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a417f0b7f48ab77d5af34ed1da9ba95c9"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a417f0b7f48ab77d5af34ed1da9ba95c9">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a417f0b7f48ab77d5af34ed1da9ba95c9"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:af4deec395e0a4650b1e108677b787900"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4deec395e0a4650b1e108677b787900"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#af4deec395e0a4650b1e108677b787900">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:af4deec395e0a4650b1e108677b787900"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a09b711da345edffb8a71b5b8a8bca6d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09b711da345edffb8a71b5b8a8bca6d0"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a09b711da345edffb8a71b5b8a8bca6d0">N</a></td></tr>
+<tr class="memdesc:a09b711da345edffb8a71b5b8a8bca6d0"><td class="mdescLeft"> </td><td class="mdescRight">the bandwidth <img class="formulaInl" alt="$N$" src="form_5.png"/> <br/></td></tr>
+<tr class="memitem:a110084c9a750d175c70caa7a24d69ae7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a110084c9a750d175c70caa7a24d69ae7"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a110084c9a750d175c70caa7a24d69ae7">x</a></td></tr>
+<tr class="memdesc:a110084c9a750d175c70caa7a24d69ae7"><td class="mdescLeft"> </td><td class="mdescRight">the nodes <img class="formulaInl" alt="$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$" src="form_6.png"/> for <img class="formulaInl" alt="$m=0,\ldots, M-1$" src="form_7.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N},$" src="form_8.png"/> <br/></td></tr>
+<tr class="memitem:ad5d65a033c50d321c6affc677e4f5226"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5d65a033c50d321c6affc677e4f5226"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#ad5d65a033c50d321c6affc677e4f5226">t</a></td></tr>
+<tr class="memdesc:ad5d65a033c50d321c6affc677e4f5226"><td class="mdescLeft"> </td><td class="mdescRight">the logarithm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a67898ed2ead6812358feeace004b14fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67898ed2ead6812358feeace004b14fe"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a67898ed2ead6812358feeace004b14fe">flags</a></td></tr>
+<tr class="memdesc:a67898ed2ead6812358feeace004b14fe"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a87927611482f2fb3421ea2279993f94a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87927611482f2fb3421ea2279993f94a"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a87927611482f2fb3421ea2279993f94a">plan_nfft</a></td></tr>
+<tr class="memdesc:a87927611482f2fb3421ea2279993f94a"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:aa0a6fb494d6378f656c83f191cd4ed1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0a6fb494d6378f656c83f191cd4ed1d"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#aa0a6fb494d6378f656c83f191cd4ed1d">f_hat_intern</a></td></tr>
+<tr class="memdesc:aa0a6fb494d6378f656c83f191cd4ed1d"><td class="mdescLeft"> </td><td class="mdescRight">Internally used pointer to spherical Fourier coefficients. <br/></td></tr>
+<tr class="memitem:af36dbcf3d4f12bb85ac6c167aabf8768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af36dbcf3d4f12bb85ac6c167aabf8768"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#af36dbcf3d4f12bb85ac6c167aabf8768">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:af36dbcf3d4f12bb85ac6c167aabf8768"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00551">551</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsftl__plan.html b/doc/api/html/structnfsftl__plan.html
new file mode 100644
index 0000000..4977cb8
--- /dev/null
+++ b/doc/api/html/structnfsftl__plan.html
@@ -0,0 +1,98 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsftl_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsftl_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a090c82bf91f18bc68a389c06fb347cec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a090c82bf91f18bc68a389c06fb347cec"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a090c82bf91f18bc68a389c06fb347cec">N_total</a></td></tr>
+<tr class="memdesc:a090c82bf91f18bc68a389c06fb347cec"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:aa1b43495afe03e88e419961428769246"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b43495afe03e88e419961428769246"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#aa1b43495afe03e88e419961428769246">M_total</a></td></tr>
+<tr class="memdesc:aa1b43495afe03e88e419961428769246"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab9243951baccdf59de326cada1c08853"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9243951baccdf59de326cada1c08853"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ab9243951baccdf59de326cada1c08853">f_hat</a></td></tr>
+<tr class="memdesc:ab9243951baccdf59de326cada1c08853"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:ad27b30233039fea75a9e1bc885324f3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad27b30233039fea75a9e1bc885324f3d"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ad27b30233039fea75a9e1bc885324f3d">f</a></td></tr>
+<tr class="memdesc:ad27b30233039fea75a9e1bc885324f3d"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:ab1a7dae6c0f2b18d4eda2e32195bba95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1a7dae6c0f2b18d4eda2e32195bba95"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ab1a7dae6c0f2b18d4eda2e32195bba95">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ab1a7dae6c0f2b18d4eda2e32195bba95"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a162601fc8aa3248af806908e160d3c14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a162601fc8aa3248af806908e160d3c14"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a162601fc8aa3248af806908e160d3c14">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a162601fc8aa3248af806908e160d3c14"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a8740f26f76947fcc07a636002217a8db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8740f26f76947fcc07a636002217a8db"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a8740f26f76947fcc07a636002217a8db">N</a></td></tr>
+<tr class="memdesc:a8740f26f76947fcc07a636002217a8db"><td class="mdescLeft"> </td><td class="mdescRight">the bandwidth <img class="formulaInl" alt="$N$" src="form_5.png"/> <br/></td></tr>
+<tr class="memitem:a59d00d103ebc0746d9cbf2d49077dfe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59d00d103ebc0746d9cbf2d49077dfe8"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">x</a></td></tr>
+<tr class="memdesc:a59d00d103ebc0746d9cbf2d49077dfe8"><td class="mdescLeft"> </td><td class="mdescRight">the nodes <img class="formulaInl" alt="$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$" src="form_6.png"/> for <img class="formulaInl" alt="$m=0,\ldots, M-1$" src="form_7.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N},$" src="form_8.png"/> <br/></td></tr>
+<tr class="memitem:af5ba15c85f29ea8ba05a03c2f2fc2611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5ba15c85f29ea8ba05a03c2f2fc2611"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#af5ba15c85f29ea8ba05a03c2f2fc2611">t</a></td></tr>
+<tr class="memdesc:af5ba15c85f29ea8ba05a03c2f2fc2611"><td class="mdescLeft"> </td><td class="mdescRight">the logarithm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a15d53809b4f86c20e7fd99ea1b71efcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15d53809b4f86c20e7fd99ea1b71efcb"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a15d53809b4f86c20e7fd99ea1b71efcb">flags</a></td></tr>
+<tr class="memdesc:a15d53809b4f86c20e7fd99ea1b71efcb"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a2c016b15b6b33c44b8218c43619ef784"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c016b15b6b33c44b8218c43619ef784"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a2c016b15b6b33c44b8218c43619ef784">plan_nfft</a></td></tr>
+<tr class="memdesc:a2c016b15b6b33c44b8218c43619ef784"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:ab3914490d1c4767c0127783cac5098e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3914490d1c4767c0127783cac5098e4"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ab3914490d1c4767c0127783cac5098e4">f_hat_intern</a></td></tr>
+<tr class="memdesc:ab3914490d1c4767c0127783cac5098e4"><td class="mdescLeft"> </td><td class="mdescRight">Internally used pointer to spherical Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae2870ad5b902cb4724c2ab47e5e012e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2870ad5b902cb4724c2ab47e5e012e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ae2870ad5b902cb4724c2ab47e5e012e1">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:ae2870ad5b902cb4724c2ab47e5e012e1"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00551">551</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsoft__plan__.html b/doc/api/html/structnfsoft__plan__.html
new file mode 100644
index 0000000..36bbed3
--- /dev/null
+++ b/doc/api/html/structnfsoft__plan__.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsoft_plan_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsoft_plan_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afe5be91eec76b382189f9bd45b36477e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe5be91eec76b382189f9bd45b36477e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e">N_total</a></td></tr>
+<tr class="memdesc:afe5be91eec76b382189f9bd45b36477e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a7bfd60cd6391a97c141325fc090891b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bfd60cd6391a97c141325fc090891b8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8">M_total</a></td></tr>
+<tr class="memdesc:a7bfd60cd6391a97c141325fc090891b8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a941c8dcaeeef8fed4b55c730d8fbdf80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a941c8dcaeeef8fed4b55c730d8fbdf80"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80">f_hat</a></td></tr>
+<tr class="memdesc:a941c8dcaeeef8fed4b55c730d8fbdf80"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a68290fc4238315c5cfacd4c0a08ee233"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68290fc4238315c5cfacd4c0a08ee233"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233">f</a></td></tr>
+<tr class="memdesc:a68290fc4238315c5cfacd4c0a08ee233"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:ae7c72bdbce93cb99dcbd14d764d08502"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7c72bdbce93cb99dcbd14d764d08502"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ae7c72bdbce93cb99dcbd14d764d08502"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a33d5fb830b3021ddb85320139be034b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33d5fb830b3021ddb85320139be034b8"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a33d5fb830b3021ddb85320139be034b8"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:af194431b610fd2f9f003dff236398383"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af194431b610fd2f9f003dff236398383"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383">x</a></td></tr>
+<tr class="memdesc:af194431b610fd2f9f003dff236398383"><td class="mdescLeft"> </td><td class="mdescRight">input nodes <br/></td></tr>
+<tr class="memitem:af6fb25c58e986915105c73009bdaa35c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6fb25c58e986915105c73009bdaa35c"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c">wig_coeffs</a></td></tr>
+<tr class="memdesc:af6fb25c58e986915105c73009bdaa35c"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of SO(3) Fourier coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a729b20c0d30b649d6bff36734d34af7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a729b20c0d30b649d6bff36734d34af7f"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f">cheby</a></td></tr>
+<tr class="memdesc:a729b20c0d30b649d6bff36734d34af7f"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of Chebychev coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:ae31e501405bebb72dcfe9831b34be76c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae31e501405bebb72dcfe9831b34be76c"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c">aux</a></td></tr>
+<tr class="memdesc:ae31e501405bebb72dcfe9831b34be76c"><td class="mdescLeft"> </td><td class="mdescRight">used when converting Chebychev to Fourier coeffcients <br/></td></tr>
+<tr class="memitem:ab0b32ee063950ce38adc6b0e5e40af02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0b32ee063950ce38adc6b0e5e40af02"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#ab0b32ee063950ce38adc6b0e5e40af02">t</a></td></tr>
+<tr class="memdesc:ab0b32ee063950ce38adc6b0e5e40af02"><td class="mdescLeft"> </td><td class="mdescRight">the logaritm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:aad410ed6425a055fc9b948cfe0df2cca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad410ed6425a055fc9b948cfe0df2cca"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca">flags</a></td></tr>
+<tr class="memdesc:aad410ed6425a055fc9b948cfe0df2cca"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a06568ec06f0c56db50823c12f376061c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06568ec06f0c56db50823c12f376061c"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c">p_nfft</a></td></tr>
+<tr class="memdesc:a06568ec06f0c56db50823c12f376061c"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a39a07d81bf6117dca5530d76beaf6b31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39a07d81bf6117dca5530d76beaf6b31"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31">internal_fpt_set</a></td></tr>
+<tr class="memdesc:a39a07d81bf6117dca5530d76beaf6b31"><td class="mdescLeft"> </td><td class="mdescRight">the internal FPT plan <br/></td></tr>
+<tr class="memitem:a65128958f30b266d01000b588069108b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65128958f30b266d01000b588069108b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>fpt_kappa</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00663">663</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsoftf__plan__.html b/doc/api/html/structnfsoftf__plan__.html
new file mode 100644
index 0000000..dc0a3b9
--- /dev/null
+++ b/doc/api/html/structnfsoftf__plan__.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsoftf_plan_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsoftf_plan_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa3a702dbaed1e34d090e23b75c9949d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3a702dbaed1e34d090e23b75c9949d6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#aa3a702dbaed1e34d090e23b75c9949d6">N_total</a></td></tr>
+<tr class="memdesc:aa3a702dbaed1e34d090e23b75c9949d6"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a6fc89775998b5353b0f674b75b3638ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fc89775998b5353b0f674b75b3638ae"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a6fc89775998b5353b0f674b75b3638ae">M_total</a></td></tr>
+<tr class="memdesc:a6fc89775998b5353b0f674b75b3638ae"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aa6990fedf1965a967f3f718dd373f543"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6990fedf1965a967f3f718dd373f543"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#aa6990fedf1965a967f3f718dd373f543">f_hat</a></td></tr>
+<tr class="memdesc:aa6990fedf1965a967f3f718dd373f543"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a165dc6360c20f9eb19a55872cc29455a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a165dc6360c20f9eb19a55872cc29455a"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a165dc6360c20f9eb19a55872cc29455a">f</a></td></tr>
+<tr class="memdesc:a165dc6360c20f9eb19a55872cc29455a"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a0291622a1f08aff56cc126ca64364d85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0291622a1f08aff56cc126ca64364d85"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a0291622a1f08aff56cc126ca64364d85">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a0291622a1f08aff56cc126ca64364d85"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a858269faf194eca2137b65f2a5a8c0fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a858269faf194eca2137b65f2a5a8c0fb"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a858269faf194eca2137b65f2a5a8c0fb">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a858269faf194eca2137b65f2a5a8c0fb"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a072fa8dcd38c95bec64c8e82af71afa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a072fa8dcd38c95bec64c8e82af71afa7"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a072fa8dcd38c95bec64c8e82af71afa7">x</a></td></tr>
+<tr class="memdesc:a072fa8dcd38c95bec64c8e82af71afa7"><td class="mdescLeft"> </td><td class="mdescRight">input nodes <br/></td></tr>
+<tr class="memitem:a1d6f6e5b95a8f0ff13add5c23b382fb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d6f6e5b95a8f0ff13add5c23b382fb9"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a1d6f6e5b95a8f0ff13add5c23b382fb9">wig_coeffs</a></td></tr>
+<tr class="memdesc:a1d6f6e5b95a8f0ff13add5c23b382fb9"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of SO(3) Fourier coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a73e75b0a9f8ceebffe6923c90c04c312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73e75b0a9f8ceebffe6923c90c04c312"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a73e75b0a9f8ceebffe6923c90c04c312">cheby</a></td></tr>
+<tr class="memdesc:a73e75b0a9f8ceebffe6923c90c04c312"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of Chebychev coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a5f7c39509a2403a9bc17824be7a3c3a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f7c39509a2403a9bc17824be7a3c3a9"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a5f7c39509a2403a9bc17824be7a3c3a9">aux</a></td></tr>
+<tr class="memdesc:a5f7c39509a2403a9bc17824be7a3c3a9"><td class="mdescLeft"> </td><td class="mdescRight">used when converting Chebychev to Fourier coeffcients <br/></td></tr>
+<tr class="memitem:a21641301ce6613d250e6d683c3fad9c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21641301ce6613d250e6d683c3fad9c2"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a21641301ce6613d250e6d683c3fad9c2">t</a></td></tr>
+<tr class="memdesc:a21641301ce6613d250e6d683c3fad9c2"><td class="mdescLeft"> </td><td class="mdescRight">the logaritm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a55301d3525d6457aebd0237871dee668"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55301d3525d6457aebd0237871dee668"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a55301d3525d6457aebd0237871dee668">flags</a></td></tr>
+<tr class="memdesc:a55301d3525d6457aebd0237871dee668"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a1be8436a257f63ab4c27441bf714671d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1be8436a257f63ab4c27441bf714671d"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a1be8436a257f63ab4c27441bf714671d">p_nfft</a></td></tr>
+<tr class="memdesc:a1be8436a257f63ab4c27441bf714671d"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a686809f1397b113322b77ef50c8c0ef7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a686809f1397b113322b77ef50c8c0ef7"></a>
+<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a686809f1397b113322b77ef50c8c0ef7">internal_fpt_set</a></td></tr>
+<tr class="memdesc:a686809f1397b113322b77ef50c8c0ef7"><td class="mdescLeft"> </td><td class="mdescRight">the internal FPT plan <br/></td></tr>
+<tr class="memitem:a8c90aea24c280766f06ec042e21d9bb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c90aea24c280766f06ec042e21d9bb9"></a>
+int </td><td class="memItemRight" valign="bottom"><b>fpt_kappa</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00663">663</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfsoftl__plan__.html b/doc/api/html/structnfsoftl__plan__.html
new file mode 100644
index 0000000..564aaa2
--- /dev/null
+++ b/doc/api/html/structnfsoftl__plan__.html
@@ -0,0 +1,103 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfsoftl_plan_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfsoftl_plan_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a397e113cdbedc1e964657131c9a9dea3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a397e113cdbedc1e964657131c9a9dea3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a397e113cdbedc1e964657131c9a9dea3">N_total</a></td></tr>
+<tr class="memdesc:a397e113cdbedc1e964657131c9a9dea3"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a33cddd8977c92ba6641a1c4a18318fd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33cddd8977c92ba6641a1c4a18318fd6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a33cddd8977c92ba6641a1c4a18318fd6">M_total</a></td></tr>
+<tr class="memdesc:a33cddd8977c92ba6641a1c4a18318fd6"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab280522456fe4f49ccb91d4aa195702d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab280522456fe4f49ccb91d4aa195702d"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#ab280522456fe4f49ccb91d4aa195702d">f_hat</a></td></tr>
+<tr class="memdesc:ab280522456fe4f49ccb91d4aa195702d"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a62073b403c90aa2b527d5f62f190112e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62073b403c90aa2b527d5f62f190112e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a62073b403c90aa2b527d5f62f190112e">f</a></td></tr>
+<tr class="memdesc:a62073b403c90aa2b527d5f62f190112e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:aeab94862046b7688470f3f1d78ca927d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeab94862046b7688470f3f1d78ca927d"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#aeab94862046b7688470f3f1d78ca927d">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aeab94862046b7688470f3f1d78ca927d"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a2f7123e0975b4a7cd693d01abf117949"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f7123e0975b4a7cd693d01abf117949"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a2f7123e0975b4a7cd693d01abf117949">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a2f7123e0975b4a7cd693d01abf117949"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a92211c64713d72c3d3cf45ac39601214"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92211c64713d72c3d3cf45ac39601214"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">x</a></td></tr>
+<tr class="memdesc:a92211c64713d72c3d3cf45ac39601214"><td class="mdescLeft"> </td><td class="mdescRight">input nodes <br/></td></tr>
+<tr class="memitem:a452e16848e81fd0b072d4e3347345455"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a452e16848e81fd0b072d4e3347345455"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a452e16848e81fd0b072d4e3347345455">wig_coeffs</a></td></tr>
+<tr class="memdesc:a452e16848e81fd0b072d4e3347345455"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of SO(3) Fourier coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a681110b5c15effe7ef2781249e049119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a681110b5c15effe7ef2781249e049119"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a681110b5c15effe7ef2781249e049119">cheby</a></td></tr>
+<tr class="memdesc:a681110b5c15effe7ef2781249e049119"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of Chebychev coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:ae669348fbbb187c8c521f6a89c8f3720"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae669348fbbb187c8c521f6a89c8f3720"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#ae669348fbbb187c8c521f6a89c8f3720">aux</a></td></tr>
+<tr class="memdesc:ae669348fbbb187c8c521f6a89c8f3720"><td class="mdescLeft"> </td><td class="mdescRight">used when converting Chebychev to Fourier coeffcients <br/></td></tr>
+<tr class="memitem:acd18e8a2b89aacd8034b49033449f979"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd18e8a2b89aacd8034b49033449f979"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#acd18e8a2b89aacd8034b49033449f979">t</a></td></tr>
+<tr class="memdesc:acd18e8a2b89aacd8034b49033449f979"><td class="mdescLeft"> </td><td class="mdescRight">the logaritm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a2f236235168535b9f9833bcc7e50e695"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f236235168535b9f9833bcc7e50e695"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a2f236235168535b9f9833bcc7e50e695">flags</a></td></tr>
+<tr class="memdesc:a2f236235168535b9f9833bcc7e50e695"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:ac1230a81665ed7aa68cb7b4bc3a0c0c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1230a81665ed7aa68cb7b4bc3a0c0c1"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#ac1230a81665ed7aa68cb7b4bc3a0c0c1">p_nfft</a></td></tr>
+<tr class="memdesc:ac1230a81665ed7aa68cb7b4bc3a0c0c1"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a8cf750d58de22209962bd9cb96f48864"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cf750d58de22209962bd9cb96f48864"></a>
+<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a8cf750d58de22209962bd9cb96f48864">internal_fpt_set</a></td></tr>
+<tr class="memdesc:a8cf750d58de22209962bd9cb96f48864"><td class="mdescLeft"> </td><td class="mdescRight">the internal FPT plan <br/></td></tr>
+<tr class="memitem:a5738717c7006e1756863debb43395d5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5738717c7006e1756863debb43395d5a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>fpt_kappa</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00663">663</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfst__plan.html b/doc/api/html/structnfst__plan.html
new file mode 100644
index 0000000..0bb56af
--- /dev/null
+++ b/doc/api/html/structnfst__plan.html
@@ -0,0 +1,147 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfst_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfst_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac3c18cc4dec9293352c508e9999ebf05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3c18cc4dec9293352c508e9999ebf05"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#ac3c18cc4dec9293352c508e9999ebf05">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:ac3c18cc4dec9293352c508e9999ebf05"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan forward <br/></td></tr>
+<tr class="memitem:abeeca1317cee53206b64c79f3de094c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abeeca1317cee53206b64c79f3de094c2"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#abeeca1317cee53206b64c79f3de094c2">FFTW_MANGLE_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:abeeca1317cee53206b64c79f3de094c2"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (dct-i) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a5622220bff0d3174b4dcae2a91313eed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5622220bff0d3174b4dcae2a91313eed"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed">N_total</a></td></tr>
+<tr class="memdesc:a5622220bff0d3174b4dcae2a91313eed"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a3bf0f56c279404b80e795daf944d3d98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bf0f56c279404b80e795daf944d3d98"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98">M_total</a></td></tr>
+<tr class="memdesc:a3bf0f56c279404b80e795daf944d3d98"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a8e7ed6ed137f58dea8f3871d959f8d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e7ed6ed137f58dea8f3871d959f8d9c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c">f_hat</a></td></tr>
+<tr class="memdesc:a8e7ed6ed137f58dea8f3871d959f8d9c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a314e2d828775d6aa93a26d7c40b7b931"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a314e2d828775d6aa93a26d7c40b7b931"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931">f</a></td></tr>
+<tr class="memdesc:a314e2d828775d6aa93a26d7c40b7b931"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a4a3b2ecc26204b3087d1c19b7857943f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a3b2ecc26204b3087d1c19b7857943f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4a3b2ecc26204b3087d1c19b7857943f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aedfe6da9afb5dc0457cc4f2197034fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aedfe6da9afb5dc0457cc4f2197034fc0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aedfe6da9afb5dc0457cc4f2197034fc0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aef00c63a4810c8e5b0eb4839d2c6abc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef00c63a4810c8e5b0eb4839d2c6abc8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8">d</a></td></tr>
+<tr class="memdesc:aef00c63a4810c8e5b0eb4839d2c6abc8"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:ac0ddde49b376d65b38d3cf1583cb0f6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0ddde49b376d65b38d3cf1583cb0f6b"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b">N</a></td></tr>
+<tr class="memdesc:ac0ddde49b376d65b38d3cf1583cb0f6b"><td class="mdescLeft"> </td><td class="mdescRight">bandwidth <br/></td></tr>
+<tr class="memitem:abee0aa8e104775a5b898715ea28703d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abee0aa8e104775a5b898715ea28703d2"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2">n</a></td></tr>
+<tr class="memdesc:abee0aa8e104775a5b898715ea28703d2"><td class="mdescLeft"> </td><td class="mdescRight">length of DST-1 <br/></td></tr>
+<tr class="memitem:a7a8028a0e7348e5fa7717eebf07b76d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a8028a0e7348e5fa7717eebf07b76d1"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1">sigma</a></td></tr>
+<tr class="memdesc:a7a8028a0e7348e5fa7717eebf07b76d1"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:ac3aacf128a897c132809411ef9d41d7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3aacf128a897c132809411ef9d41d7d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d">m</a></td></tr>
+<tr class="memdesc:ac3aacf128a897c132809411ef9d41d7d"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:a255445e279e22fb6224821011e117a7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a255445e279e22fb6224821011e117a7c"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfst_full_psi_eps</b></td></tr>
+<tr class="memitem:a49927bec2aa96ab8596740011fabb914"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49927bec2aa96ab8596740011fabb914"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a49927bec2aa96ab8596740011fabb914">b</a></td></tr>
+<tr class="memdesc:a49927bec2aa96ab8596740011fabb914"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a2c43b9c7625ed9eb42223de391c048c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c43b9c7625ed9eb42223de391c048c9"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9">nfst_flags</a></td></tr>
+<tr class="memdesc:a2c43b9c7625ed9eb42223de391c048c9"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a69d37e02b7a2868e3861c582e76e35d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69d37e02b7a2868e3861c582e76e35d8"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8">fftw_flags</a></td></tr>
+<tr class="memdesc:a69d37e02b7a2868e3861c582e76e35d8"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:a048ebad4f2abe3821988fa06a5e308d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a048ebad4f2abe3821988fa06a5e308d8"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8">x</a></td></tr>
+<tr class="memdesc:a048ebad4f2abe3821988fa06a5e308d8"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a74e5be807909e0a443ea9b48e0a7da4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e5be807909e0a443ea9b48e0a7da4b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a74e5be807909e0a443ea9b48e0a7da4b">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a74e5be807909e0a443ea9b48e0a7da4b"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a2c42ae2c8ca95bb4c0c1dfc279bc2cab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c42ae2c8ca95bb4c0c1dfc279bc2cab"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab">c_phi_inv</a></td></tr>
+<tr class="memdesc:a2c42ae2c8ca95bb4c0c1dfc279bc2cab"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a59c1ef7493650838cf31086a46ff2e3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59c1ef7493650838cf31086a46ff2e3f"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f">psi</a></td></tr>
+<tr class="memdesc:a59c1ef7493650838cf31086a46ff2e3f"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a1780e54f9fed43e92c22a1e70274e7ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1780e54f9fed43e92c22a1e70274e7ad"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad">size_psi</a></td></tr>
+<tr class="memdesc:a1780e54f9fed43e92c22a1e70274e7ad"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2d2a4a4d3c7ff12f35045b5466f41811"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d2a4a4d3c7ff12f35045b5466f41811"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811">psi_index_g</a></td></tr>
+<tr class="memdesc:a2d2a4a4d3c7ff12f35045b5466f41811"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a028609e96fa5f10d4197e4b50312180c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a028609e96fa5f10d4197e4b50312180c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c">psi_index_f</a></td></tr>
+<tr class="memdesc:a028609e96fa5f10d4197e4b50312180c"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a7aef31878adb193e3b3741feb21d4455"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aef31878adb193e3b3741feb21d4455"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a1838fdef7d9a2c8b0a77f6d3f90cf687"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1838fdef7d9a2c8b0a77f6d3f90cf687"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a06cd5d11b13d590c9ab3a88d93b21fb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cd5d11b13d590c9ab3a88d93b21fb2"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2">g1</a></td></tr>
+<tr class="memdesc:a06cd5d11b13d590c9ab3a88d93b21fb2"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a7b67e2cf657227ae46d13fa239d534f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b67e2cf657227ae46d13fa239d534f7"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7">g2</a></td></tr>
+<tr class="memdesc:a7b67e2cf657227ae46d13fa239d534f7"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a23bec4401a652efc87ee6781061c9363"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23bec4401a652efc87ee6781061c9363"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a23bec4401a652efc87ee6781061c9363">spline_coeffs</a></td></tr>
+<tr class="memdesc:a23bec4401a652efc87ee6781061c9363"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00338">338</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfstf__plan.html b/doc/api/html/structnfstf__plan.html
new file mode 100644
index 0000000..b250a65
--- /dev/null
+++ b/doc/api/html/structnfstf__plan.html
@@ -0,0 +1,147 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfstf_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfstf_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad4f44281f0c352fc630442cb40597983"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f44281f0c352fc630442cb40597983"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ad4f44281f0c352fc630442cb40597983">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:ad4f44281f0c352fc630442cb40597983"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan forward <br/></td></tr>
+<tr class="memitem:a013fbbcfb64ef4d8f0cc7345e584fa92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a013fbbcfb64ef4d8f0cc7345e584fa92"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a013fbbcfb64ef4d8f0cc7345e584fa92">FFTW_MANGLE_FLOAT</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a013fbbcfb64ef4d8f0cc7345e584fa92"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (dct-i) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aea7fa284fa9aaa4e264c9c07844b5442"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea7fa284fa9aaa4e264c9c07844b5442"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aea7fa284fa9aaa4e264c9c07844b5442">N_total</a></td></tr>
+<tr class="memdesc:aea7fa284fa9aaa4e264c9c07844b5442"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a936082c69e582e36fb51ae452cd08fc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a936082c69e582e36fb51ae452cd08fc3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a936082c69e582e36fb51ae452cd08fc3">M_total</a></td></tr>
+<tr class="memdesc:a936082c69e582e36fb51ae452cd08fc3"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab57019bf0a7274b5a6f401fe2f6bcf2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab57019bf0a7274b5a6f401fe2f6bcf2b"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ab57019bf0a7274b5a6f401fe2f6bcf2b">f_hat</a></td></tr>
+<tr class="memdesc:ab57019bf0a7274b5a6f401fe2f6bcf2b"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a178dae9cc4b5869ef69fd148efe14f93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a178dae9cc4b5869ef69fd148efe14f93"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a178dae9cc4b5869ef69fd148efe14f93">f</a></td></tr>
+<tr class="memdesc:a178dae9cc4b5869ef69fd148efe14f93"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:aa960f82c35501acf5237b5ed49f7fe57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa960f82c35501acf5237b5ed49f7fe57"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aa960f82c35501acf5237b5ed49f7fe57">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aa960f82c35501acf5237b5ed49f7fe57"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a604a83ef64c291c6f8b23d45f620f2c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a604a83ef64c291c6f8b23d45f620f2c7"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a604a83ef64c291c6f8b23d45f620f2c7">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a604a83ef64c291c6f8b23d45f620f2c7"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aa792b04cd0fa4f09175773aaa48f6a69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa792b04cd0fa4f09175773aaa48f6a69"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aa792b04cd0fa4f09175773aaa48f6a69">d</a></td></tr>
+<tr class="memdesc:aa792b04cd0fa4f09175773aaa48f6a69"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a3c13e4fbc7dba10012ac853e2cde12d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c13e4fbc7dba10012ac853e2cde12d0"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a3c13e4fbc7dba10012ac853e2cde12d0">N</a></td></tr>
+<tr class="memdesc:a3c13e4fbc7dba10012ac853e2cde12d0"><td class="mdescLeft"> </td><td class="mdescRight">bandwidth <br/></td></tr>
+<tr class="memitem:ade7cdc871c9633a324774001bd809f49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade7cdc871c9633a324774001bd809f49"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ade7cdc871c9633a324774001bd809f49">n</a></td></tr>
+<tr class="memdesc:ade7cdc871c9633a324774001bd809f49"><td class="mdescLeft"> </td><td class="mdescRight">length of DST-1 <br/></td></tr>
+<tr class="memitem:a8d8b3093a73c09aac44cd8f55708ef27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d8b3093a73c09aac44cd8f55708ef27"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a8d8b3093a73c09aac44cd8f55708ef27">sigma</a></td></tr>
+<tr class="memdesc:a8d8b3093a73c09aac44cd8f55708ef27"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a6d228a85b702490f205c8983c15e33fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d228a85b702490f205c8983c15e33fe"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a6d228a85b702490f205c8983c15e33fe">m</a></td></tr>
+<tr class="memdesc:a6d228a85b702490f205c8983c15e33fe"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:aec1470b7592bf2e11f0dc53e22b5ebd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec1470b7592bf2e11f0dc53e22b5ebd9"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfst_full_psi_eps</b></td></tr>
+<tr class="memitem:a2ca69cf1b6dea39e81cba93d0d1667d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ca69cf1b6dea39e81cba93d0d1667d8"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a2ca69cf1b6dea39e81cba93d0d1667d8">b</a></td></tr>
+<tr class="memdesc:a2ca69cf1b6dea39e81cba93d0d1667d8"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:aa23ef32254d98b76dfadbe7fa439f8c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa23ef32254d98b76dfadbe7fa439f8c3"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aa23ef32254d98b76dfadbe7fa439f8c3">nfst_flags</a></td></tr>
+<tr class="memdesc:aa23ef32254d98b76dfadbe7fa439f8c3"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a9da018cd24e707e57ed0c8cac82f5301"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9da018cd24e707e57ed0c8cac82f5301"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a9da018cd24e707e57ed0c8cac82f5301">fftw_flags</a></td></tr>
+<tr class="memdesc:a9da018cd24e707e57ed0c8cac82f5301"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:ad0d1772e5947f4395cbfa0fc2ed39018"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0d1772e5947f4395cbfa0fc2ed39018"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ad0d1772e5947f4395cbfa0fc2ed39018">x</a></td></tr>
+<tr class="memdesc:ad0d1772e5947f4395cbfa0fc2ed39018"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a369d8545639fccbf73f9daf7dcb94fe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a369d8545639fccbf73f9daf7dcb94fe8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a369d8545639fccbf73f9daf7dcb94fe8">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a369d8545639fccbf73f9daf7dcb94fe8"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a9d59ca4338fe39f2e22f4e5d3155deba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d59ca4338fe39f2e22f4e5d3155deba"></a>
+float ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a9d59ca4338fe39f2e22f4e5d3155deba">c_phi_inv</a></td></tr>
+<tr class="memdesc:a9d59ca4338fe39f2e22f4e5d3155deba"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a96d6ede1036cae0a4df7fbf7ba7b8034"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96d6ede1036cae0a4df7fbf7ba7b8034"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a96d6ede1036cae0a4df7fbf7ba7b8034">psi</a></td></tr>
+<tr class="memdesc:a96d6ede1036cae0a4df7fbf7ba7b8034"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a4c9f0923fcf290197cee1550dc9a3665"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c9f0923fcf290197cee1550dc9a3665"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a4c9f0923fcf290197cee1550dc9a3665">size_psi</a></td></tr>
+<tr class="memdesc:a4c9f0923fcf290197cee1550dc9a3665"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a3ece0ce2dd8ad2e41852ac59df3ad481"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ece0ce2dd8ad2e41852ac59df3ad481"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a3ece0ce2dd8ad2e41852ac59df3ad481">psi_index_g</a></td></tr>
+<tr class="memdesc:a3ece0ce2dd8ad2e41852ac59df3ad481"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:ad20fa3e6bdb829247c3585639a0b086d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad20fa3e6bdb829247c3585639a0b086d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ad20fa3e6bdb829247c3585639a0b086d">psi_index_f</a></td></tr>
+<tr class="memdesc:ad20fa3e6bdb829247c3585639a0b086d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:afa9db1e0c10c4eaf94864be816839391"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa9db1e0c10c4eaf94864be816839391"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a84a630a187fdba4ea9eb948c706d9cf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84a630a187fdba4ea9eb948c706d9cf9"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a279687997f16d0fb839928f472307b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a279687997f16d0fb839928f472307b39"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a279687997f16d0fb839928f472307b39">g1</a></td></tr>
+<tr class="memdesc:a279687997f16d0fb839928f472307b39"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a11f05420be226a83aed2e8c41a1b9bd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11f05420be226a83aed2e8c41a1b9bd3"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a11f05420be226a83aed2e8c41a1b9bd3">g2</a></td></tr>
+<tr class="memdesc:a11f05420be226a83aed2e8c41a1b9bd3"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a64c5addda16e3d789184af183900db21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64c5addda16e3d789184af183900db21"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a64c5addda16e3d789184af183900db21">spline_coeffs</a></td></tr>
+<tr class="memdesc:a64c5addda16e3d789184af183900db21"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00338">338</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnfstl__plan.html b/doc/api/html/structnfstl__plan.html
new file mode 100644
index 0000000..2c4fd75
--- /dev/null
+++ b/doc/api/html/structnfstl__plan.html
@@ -0,0 +1,147 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nfstl_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nfstl_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a2c07f20560a3969129916e3d30239227"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c07f20560a3969129916e3d30239227"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a2c07f20560a3969129916e3d30239227">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:a2c07f20560a3969129916e3d30239227"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan forward <br/></td></tr>
+<tr class="memitem:a6285132e89913685bc2f7366fd79e769"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6285132e89913685bc2f7366fd79e769"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a6285132e89913685bc2f7366fd79e769">FFTW_MANGLE_LONG_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a6285132e89913685bc2f7366fd79e769"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (dct-i) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a87f57bdfd9ba4415370ec796329cc1de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87f57bdfd9ba4415370ec796329cc1de"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a87f57bdfd9ba4415370ec796329cc1de">N_total</a></td></tr>
+<tr class="memdesc:a87f57bdfd9ba4415370ec796329cc1de"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae4d5aeae7ea312bf70720bafd4fb3882"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4d5aeae7ea312bf70720bafd4fb3882"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#ae4d5aeae7ea312bf70720bafd4fb3882">M_total</a></td></tr>
+<tr class="memdesc:ae4d5aeae7ea312bf70720bafd4fb3882"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aa0a56037700b7a3d428c77e353dc209e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0a56037700b7a3d428c77e353dc209e"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#aa0a56037700b7a3d428c77e353dc209e">f_hat</a></td></tr>
+<tr class="memdesc:aa0a56037700b7a3d428c77e353dc209e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:ad4f7ff9f286c0203712d5f16b21e9e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f7ff9f286c0203712d5f16b21e9e4e"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#ad4f7ff9f286c0203712d5f16b21e9e4e">f</a></td></tr>
+<tr class="memdesc:ad4f7ff9f286c0203712d5f16b21e9e4e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:adbe7e6be1061160223c10b6567efda40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbe7e6be1061160223c10b6567efda40"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#adbe7e6be1061160223c10b6567efda40">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:adbe7e6be1061160223c10b6567efda40"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a1eca782b8267b78a6effc382c0a5b9f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1eca782b8267b78a6effc382c0a5b9f4"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a1eca782b8267b78a6effc382c0a5b9f4">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a1eca782b8267b78a6effc382c0a5b9f4"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a66ac609113d5f8debb056f3c62f6b14b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66ac609113d5f8debb056f3c62f6b14b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a66ac609113d5f8debb056f3c62f6b14b">d</a></td></tr>
+<tr class="memdesc:a66ac609113d5f8debb056f3c62f6b14b"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a83b7013eb7ce3b1743ba45a2546a36c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83b7013eb7ce3b1743ba45a2546a36c0"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a83b7013eb7ce3b1743ba45a2546a36c0">N</a></td></tr>
+<tr class="memdesc:a83b7013eb7ce3b1743ba45a2546a36c0"><td class="mdescLeft"> </td><td class="mdescRight">bandwidth <br/></td></tr>
+<tr class="memitem:a10456ed98cb22787f2469e1d20903c8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10456ed98cb22787f2469e1d20903c8c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a10456ed98cb22787f2469e1d20903c8c">n</a></td></tr>
+<tr class="memdesc:a10456ed98cb22787f2469e1d20903c8c"><td class="mdescLeft"> </td><td class="mdescRight">length of DST-1 <br/></td></tr>
+<tr class="memitem:a3c50de01911ed86a66d15ecd79874e21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c50de01911ed86a66d15ecd79874e21"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a3c50de01911ed86a66d15ecd79874e21">sigma</a></td></tr>
+<tr class="memdesc:a3c50de01911ed86a66d15ecd79874e21"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a55a5e4a962d8e01d7c0282f916bacb8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55a5e4a962d8e01d7c0282f916bacb8c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a55a5e4a962d8e01d7c0282f916bacb8c">m</a></td></tr>
+<tr class="memdesc:a55a5e4a962d8e01d7c0282f916bacb8c"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:ab730bc710eda01bdb01d1b4b5bfd91e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab730bc710eda01bdb01d1b4b5bfd91e5"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfst_full_psi_eps</b></td></tr>
+<tr class="memitem:a8378f952b6e05cd58225877eee84f2e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8378f952b6e05cd58225877eee84f2e7"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a8378f952b6e05cd58225877eee84f2e7">b</a></td></tr>
+<tr class="memdesc:a8378f952b6e05cd58225877eee84f2e7"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a15bb194b8a4fe39aca1b5be9f38d7175"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15bb194b8a4fe39aca1b5be9f38d7175"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a15bb194b8a4fe39aca1b5be9f38d7175">nfst_flags</a></td></tr>
+<tr class="memdesc:a15bb194b8a4fe39aca1b5be9f38d7175"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a0ab6b3ec18b7e0685277d5f6997aa54c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ab6b3ec18b7e0685277d5f6997aa54c"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a0ab6b3ec18b7e0685277d5f6997aa54c">fftw_flags</a></td></tr>
+<tr class="memdesc:a0ab6b3ec18b7e0685277d5f6997aa54c"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:af663d590a277872d6e0e777cb410edbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af663d590a277872d6e0e777cb410edbb"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">x</a></td></tr>
+<tr class="memdesc:af663d590a277872d6e0e777cb410edbb"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a47c6a3aba310b4f18d7ba5a7107fc168"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47c6a3aba310b4f18d7ba5a7107fc168"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a47c6a3aba310b4f18d7ba5a7107fc168">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a47c6a3aba310b4f18d7ba5a7107fc168"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a7fdb409271e18f5dec1ac622af10d32a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fdb409271e18f5dec1ac622af10d32a"></a>
+long double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a7fdb409271e18f5dec1ac622af10d32a">c_phi_inv</a></td></tr>
+<tr class="memdesc:a7fdb409271e18f5dec1ac622af10d32a"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a3fb3fd27fa2c3c907c4f1e05a183598d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fb3fd27fa2c3c907c4f1e05a183598d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a3fb3fd27fa2c3c907c4f1e05a183598d">psi</a></td></tr>
+<tr class="memdesc:a3fb3fd27fa2c3c907c4f1e05a183598d"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a975ebfbce1679c3ad3d8cc06e81c5645"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a975ebfbce1679c3ad3d8cc06e81c5645"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a975ebfbce1679c3ad3d8cc06e81c5645">size_psi</a></td></tr>
+<tr class="memdesc:a975ebfbce1679c3ad3d8cc06e81c5645"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a773fbd9160ac14e6972a4b5be1b5113d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a773fbd9160ac14e6972a4b5be1b5113d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a773fbd9160ac14e6972a4b5be1b5113d">psi_index_g</a></td></tr>
+<tr class="memdesc:a773fbd9160ac14e6972a4b5be1b5113d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a46d8f0fefc63d3ba6f1811f41bc9a7d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46d8f0fefc63d3ba6f1811f41bc9a7d8"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a46d8f0fefc63d3ba6f1811f41bc9a7d8">psi_index_f</a></td></tr>
+<tr class="memdesc:a46d8f0fefc63d3ba6f1811f41bc9a7d8"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a375013685c82f0bd1ee2260a1b247ab4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a375013685c82f0bd1ee2260a1b247ab4"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:af08d6d6a6f54e44d7f83f418bddfc605"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af08d6d6a6f54e44d7f83f418bddfc605"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:ac54e606a9b0c7c6b526fb3d44d28482a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac54e606a9b0c7c6b526fb3d44d28482a"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#ac54e606a9b0c7c6b526fb3d44d28482a">g1</a></td></tr>
+<tr class="memdesc:ac54e606a9b0c7c6b526fb3d44d28482a"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a0e91b301bcd4ce83aecdda2b0f7712ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e91b301bcd4ce83aecdda2b0f7712ed"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a0e91b301bcd4ce83aecdda2b0f7712ed">g2</a></td></tr>
+<tr class="memdesc:a0e91b301bcd4ce83aecdda2b0f7712ed"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a7abc2fedc757d9b2b5f985377f99bfe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7abc2fedc757d9b2b5f985377f99bfe7"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a7abc2fedc757d9b2b5f985377f99bfe7">spline_coeffs</a></td></tr>
+<tr class="memdesc:a7abc2fedc757d9b2b5f985377f99bfe7"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00338">338</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnnfft__plan.html b/doc/api/html/structnnfft__plan.html
new file mode 100644
index 0000000..991049e
--- /dev/null
+++ b/doc/api/html/structnnfft__plan.html
@@ -0,0 +1,177 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nnfft_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nnfft_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a2ea309e4dfb994f4a9fe86d1440cafa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ea309e4dfb994f4a9fe86d1440cafa2"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2">N_total</a></td></tr>
+<tr class="memdesc:a2ea309e4dfb994f4a9fe86d1440cafa2"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a5e60b36fd90e44a68a72f129a2b4be6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e60b36fd90e44a68a72f129a2b4be6c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c">M_total</a></td></tr>
+<tr class="memdesc:a5e60b36fd90e44a68a72f129a2b4be6c"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab13f0f93fe991a5831ff78312f9b9e4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab13f0f93fe991a5831ff78312f9b9e4b"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b">f_hat</a></td></tr>
+<tr class="memdesc:ab13f0f93fe991a5831ff78312f9b9e4b"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a773de7440f04f7d3e23419cd94caa2eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a773de7440f04f7d3e23419cd94caa2eb"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb">f</a></td></tr>
+<tr class="memdesc:a773de7440f04f7d3e23419cd94caa2eb"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:ac2beab555e72c8f10921db21dc094069"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2beab555e72c8f10921db21dc094069"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ac2beab555e72c8f10921db21dc094069"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a0afd6961b8b0b24b526e034d89874c7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0afd6961b8b0b24b526e034d89874c7c"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a0afd6961b8b0b24b526e034d89874c7c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a97241bcd9654d3e90a556806e7998ab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97241bcd9654d3e90a556806e7998ab6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6">d</a></td></tr>
+<tr class="memdesc:a97241bcd9654d3e90a556806e7998ab6"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a6a3e11978f1e2c6279bd12785ef56b5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a3e11978f1e2c6279bd12785ef56b5d"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d">sigma</a></td></tr>
+<tr class="memdesc:a6a3e11978f1e2c6279bd12785ef56b5d"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a0a30183077239e2de76e5de626dc92e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a30183077239e2de76e5de626dc92e9"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9">a</a></td></tr>
+<tr class="memdesc:a0a30183077239e2de76e5de626dc92e9"><td class="mdescLeft"> </td><td class="mdescRight">1 + 2*m/N1 <br/></td></tr>
+<tr class="memitem:a43e0e3140a0afdd551a95228be7e4ed7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43e0e3140a0afdd551a95228be7e4ed7"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7">N</a></td></tr>
+<tr class="memdesc:a43e0e3140a0afdd551a95228be7e4ed7"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies <br/></td></tr>
+<tr class="memitem:a7467148139ddeaf34261c0c256f64643"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7467148139ddeaf34261c0c256f64643"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643">N1</a></td></tr>
+<tr class="memdesc:a7467148139ddeaf34261c0c256f64643"><td class="mdescLeft"> </td><td class="mdescRight">sigma*N <br/></td></tr>
+<tr class="memitem:add59b0dfe6fced5130efcafa613abfcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add59b0dfe6fced5130efcafa613abfcb"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb">aN1</a></td></tr>
+<tr class="memdesc:add59b0dfe6fced5130efcafa613abfcb"><td class="mdescLeft"> </td><td class="mdescRight">sigma*a*N <br/></td></tr>
+<tr class="memitem:a1c5322ebb6d93515fc8a9e922c8a66da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c5322ebb6d93515fc8a9e922c8a66da"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da">m</a></td></tr>
+<tr class="memdesc:a1c5322ebb6d93515fc8a9e922c8a66da"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:aa91e909254c1beb83e2e971df50b96ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa91e909254c1beb83e2e971df50b96ca"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#aa91e909254c1beb83e2e971df50b96ca">b</a></td></tr>
+<tr class="memdesc:aa91e909254c1beb83e2e971df50b96ca"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a4ee39bebbff40746c2701ade2e13f1f8"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8">K</a></td></tr>
+<tr class="memdesc:a4ee39bebbff40746c2701ade2e13f1f8"><td class="mdescLeft"> </td><td class="mdescRight">number of precomp.  <a href="#a4ee39bebbff40746c2701ade2e13f1f8"></a><br/></td></tr>
+<tr class="memitem:acb1a1fa5fdb73d2187e9e9d8e4415921"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921">aN1_total</a></td></tr>
+<tr class="memdesc:acb1a1fa5fdb73d2187e9e9d8e4415921"><td class="mdescLeft"> </td><td class="mdescRight">aN1_total=aN1[0]* ...  <a href="#acb1a1fa5fdb73d2187e9e9d8e4415921"></a><br/></td></tr>
+<tr class="memitem:a4dc1f0a5a0ead52ada3ba3b2d7eae75f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4dc1f0a5a0ead52ada3ba3b2d7eae75f"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f">direct_plan</a></td></tr>
+<tr class="memdesc:a4dc1f0a5a0ead52ada3ba3b2d7eae75f"><td class="mdescLeft"> </td><td class="mdescRight">plan for the nfft <br/></td></tr>
+<tr class="memitem:a5414c3133e2342c971b7f4df711e6e9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5414c3133e2342c971b7f4df711e6e9a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a">nnfft_flags</a></td></tr>
+<tr class="memdesc:a5414c3133e2342c971b7f4df711e6e9a"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a6b2de2633dd4347692e96887f98c1020"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b2de2633dd4347692e96887f98c1020"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020">n</a></td></tr>
+<tr class="memdesc:a6b2de2633dd4347692e96887f98c1020"><td class="mdescLeft"> </td><td class="mdescRight">n=N1, for the window function <br/></td></tr>
+<tr class="memitem:ab5b545ac8b82dee7b2d1a3455ecca76d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5b545ac8b82dee7b2d1a3455ecca76d"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d">x</a></td></tr>
+<tr class="memdesc:ab5b545ac8b82dee7b2d1a3455ecca76d"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a040dd9e982de31aaf04d5f543af9a80c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a040dd9e982de31aaf04d5f543af9a80c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c">v</a></td></tr>
+<tr class="memdesc:a040dd9e982de31aaf04d5f543af9a80c"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in fourier domain) <br/></td></tr>
+<tr class="memitem:a9073b3c76f70f8b9caedac7f5574ce89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9073b3c76f70f8b9caedac7f5574ce89"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89">c_phi_inv</a></td></tr>
+<tr class="memdesc:a9073b3c76f70f8b9caedac7f5574ce89"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:ad300032f78e794528caa54e8a84431a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad300032f78e794528caa54e8a84431a4"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4">psi</a></td></tr>
+<tr class="memdesc:ad300032f78e794528caa54e8a84431a4"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:af2992b9cb57809fb90a68dbaea36d79a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2992b9cb57809fb90a68dbaea36d79a"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#af2992b9cb57809fb90a68dbaea36d79a">size_psi</a></td></tr>
+<tr class="memdesc:af2992b9cb57809fb90a68dbaea36d79a"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:aa0b2be91e59a45c809c68398ceb41232"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0b2be91e59a45c809c68398ceb41232"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232">psi_index_g</a></td></tr>
+<tr class="memdesc:aa0b2be91e59a45c809c68398ceb41232"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2ada74222958e630640e6456e9bd2a8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ada74222958e630640e6456e9bd2a8d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d">psi_index_f</a></td></tr>
+<tr class="memdesc:a2ada74222958e630640e6456e9bd2a8d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a86c8933dfbdbef02b98fd961bf00e01b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86c8933dfbdbef02b98fd961bf00e01b"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><b>F</b></td></tr>
+<tr class="memitem:ac3e3c4b14a5227a96b8627faf6933652"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3e3c4b14a5227a96b8627faf6933652"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ac3e3c4b14a5227a96b8627faf6933652">spline_coeffs</a></td></tr>
+<tr class="memdesc:ac3e3c4b14a5227a96b8627faf6933652"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a4ee39bebbff40746c2701ade2e13f1f8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nnfft_plan::K</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>number of precomp. </p>
+<p>uniform psi </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+<p>Referenced by <a class="el" href="nnfft_8c_source.html#l00368">nnfft_precompute_lin_psi()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acb1a1fa5fdb73d2187e9e9d8e4415921"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nnfft_plan::aN1_total</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>aN1_total=aN1[0]* ... </p>
+<p>*aN1[d-1] </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnnfftf__plan.html b/doc/api/html/structnnfftf__plan.html
new file mode 100644
index 0000000..a9f7d2f
--- /dev/null
+++ b/doc/api/html/structnnfftf__plan.html
@@ -0,0 +1,175 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nnfftf_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nnfftf_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afd4cb1ff03f227c4e9e1dd9da21ec34e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd4cb1ff03f227c4e9e1dd9da21ec34e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#afd4cb1ff03f227c4e9e1dd9da21ec34e">N_total</a></td></tr>
+<tr class="memdesc:afd4cb1ff03f227c4e9e1dd9da21ec34e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a6908aa62ea014b3b60e047a99f6adb2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6908aa62ea014b3b60e047a99f6adb2b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a6908aa62ea014b3b60e047a99f6adb2b">M_total</a></td></tr>
+<tr class="memdesc:a6908aa62ea014b3b60e047a99f6adb2b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a068de2b177ffaad5b0091b0ecd2ca211"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a068de2b177ffaad5b0091b0ecd2ca211"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a068de2b177ffaad5b0091b0ecd2ca211">f_hat</a></td></tr>
+<tr class="memdesc:a068de2b177ffaad5b0091b0ecd2ca211"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a458403c21a1083ede0d84a6d25c8cc8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a458403c21a1083ede0d84a6d25c8cc8c"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a458403c21a1083ede0d84a6d25c8cc8c">f</a></td></tr>
+<tr class="memdesc:a458403c21a1083ede0d84a6d25c8cc8c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:aea4c2210478af70a540da01e0c0a1c7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea4c2210478af70a540da01e0c0a1c7b"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#aea4c2210478af70a540da01e0c0a1c7b">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aea4c2210478af70a540da01e0c0a1c7b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:adcff4592ce1838e342b92633e9f8de42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcff4592ce1838e342b92633e9f8de42"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#adcff4592ce1838e342b92633e9f8de42">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:adcff4592ce1838e342b92633e9f8de42"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ae6d3ce66c1d6d2fd0f507d83df91f549"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6d3ce66c1d6d2fd0f507d83df91f549"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ae6d3ce66c1d6d2fd0f507d83df91f549">d</a></td></tr>
+<tr class="memdesc:ae6d3ce66c1d6d2fd0f507d83df91f549"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a858114a52835ef9cae070f6017625a4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a858114a52835ef9cae070f6017625a4c"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a858114a52835ef9cae070f6017625a4c">sigma</a></td></tr>
+<tr class="memdesc:a858114a52835ef9cae070f6017625a4c"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:ab0a39deb647f2a862caf5a6cfaf4939b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0a39deb647f2a862caf5a6cfaf4939b"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ab0a39deb647f2a862caf5a6cfaf4939b">a</a></td></tr>
+<tr class="memdesc:ab0a39deb647f2a862caf5a6cfaf4939b"><td class="mdescLeft"> </td><td class="mdescRight">1 + 2*m/N1 <br/></td></tr>
+<tr class="memitem:aefd2c40e607f75679bb61926881d4488"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefd2c40e607f75679bb61926881d4488"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#aefd2c40e607f75679bb61926881d4488">N</a></td></tr>
+<tr class="memdesc:aefd2c40e607f75679bb61926881d4488"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies <br/></td></tr>
+<tr class="memitem:a9f6a5274cee5803505df5ad65d4c12fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f6a5274cee5803505df5ad65d4c12fd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a9f6a5274cee5803505df5ad65d4c12fd">N1</a></td></tr>
+<tr class="memdesc:a9f6a5274cee5803505df5ad65d4c12fd"><td class="mdescLeft"> </td><td class="mdescRight">sigma*N <br/></td></tr>
+<tr class="memitem:a405914d88ec36f1bf8438ebfed59f294"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a405914d88ec36f1bf8438ebfed59f294"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a405914d88ec36f1bf8438ebfed59f294">aN1</a></td></tr>
+<tr class="memdesc:a405914d88ec36f1bf8438ebfed59f294"><td class="mdescLeft"> </td><td class="mdescRight">sigma*a*N <br/></td></tr>
+<tr class="memitem:af7f40661f8b29323b5b0f1ad5a7290a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7f40661f8b29323b5b0f1ad5a7290a4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#af7f40661f8b29323b5b0f1ad5a7290a4">m</a></td></tr>
+<tr class="memdesc:af7f40661f8b29323b5b0f1ad5a7290a4"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:adbd7faf4a853905d26899885e5ca3b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbd7faf4a853905d26899885e5ca3b38"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#adbd7faf4a853905d26899885e5ca3b38">b</a></td></tr>
+<tr class="memdesc:adbd7faf4a853905d26899885e5ca3b38"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a9d2bd4132187064cf5f6c301f7ce5125"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a9d2bd4132187064cf5f6c301f7ce5125">K</a></td></tr>
+<tr class="memdesc:a9d2bd4132187064cf5f6c301f7ce5125"><td class="mdescLeft"> </td><td class="mdescRight">number of precomp.  <a href="#a9d2bd4132187064cf5f6c301f7ce5125"></a><br/></td></tr>
+<tr class="memitem:a4bfc7abd18935616365f7925b2994e38"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a4bfc7abd18935616365f7925b2994e38">aN1_total</a></td></tr>
+<tr class="memdesc:a4bfc7abd18935616365f7925b2994e38"><td class="mdescLeft"> </td><td class="mdescRight">aN1_total=aN1[0]* ...  <a href="#a4bfc7abd18935616365f7925b2994e38"></a><br/></td></tr>
+<tr class="memitem:a15fe2e694c1b999008600c1f4a5dc2be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15fe2e694c1b999008600c1f4a5dc2be"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a15fe2e694c1b999008600c1f4a5dc2be">direct_plan</a></td></tr>
+<tr class="memdesc:a15fe2e694c1b999008600c1f4a5dc2be"><td class="mdescLeft"> </td><td class="mdescRight">plan for the nfft <br/></td></tr>
+<tr class="memitem:acebd9e667d51a5293f977642f031724e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acebd9e667d51a5293f977642f031724e"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#acebd9e667d51a5293f977642f031724e">nnfft_flags</a></td></tr>
+<tr class="memdesc:acebd9e667d51a5293f977642f031724e"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:ae849996a09be847a35be6c1ea018d988"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae849996a09be847a35be6c1ea018d988"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ae849996a09be847a35be6c1ea018d988">n</a></td></tr>
+<tr class="memdesc:ae849996a09be847a35be6c1ea018d988"><td class="mdescLeft"> </td><td class="mdescRight">n=N1, for the window function <br/></td></tr>
+<tr class="memitem:ae3c9275b5cafc753e2762406ba422378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3c9275b5cafc753e2762406ba422378"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ae3c9275b5cafc753e2762406ba422378">x</a></td></tr>
+<tr class="memdesc:ae3c9275b5cafc753e2762406ba422378"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a62822fb1596e8eccd6d2edf62096323b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62822fb1596e8eccd6d2edf62096323b"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a62822fb1596e8eccd6d2edf62096323b">v</a></td></tr>
+<tr class="memdesc:a62822fb1596e8eccd6d2edf62096323b"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in fourier domain) <br/></td></tr>
+<tr class="memitem:a89b1d6ef566671d479eaaf4e50f666cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89b1d6ef566671d479eaaf4e50f666cb"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a89b1d6ef566671d479eaaf4e50f666cb">c_phi_inv</a></td></tr>
+<tr class="memdesc:a89b1d6ef566671d479eaaf4e50f666cb"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a10747f86b86f7fa64539b46914344877"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10747f86b86f7fa64539b46914344877"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a10747f86b86f7fa64539b46914344877">psi</a></td></tr>
+<tr class="memdesc:a10747f86b86f7fa64539b46914344877"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a67aae8bda525717c1628aa53fca9b7de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67aae8bda525717c1628aa53fca9b7de"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a67aae8bda525717c1628aa53fca9b7de">size_psi</a></td></tr>
+<tr class="memdesc:a67aae8bda525717c1628aa53fca9b7de"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:aa6d0ce899b41da6981f6863fc242559d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6d0ce899b41da6981f6863fc242559d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#aa6d0ce899b41da6981f6863fc242559d">psi_index_g</a></td></tr>
+<tr class="memdesc:aa6d0ce899b41da6981f6863fc242559d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a3788434fa045ecd49dd89d116bb40c47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3788434fa045ecd49dd89d116bb40c47"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a3788434fa045ecd49dd89d116bb40c47">psi_index_f</a></td></tr>
+<tr class="memdesc:a3788434fa045ecd49dd89d116bb40c47"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a5f089ea9bae2fa4078bb84bd0aa86b64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f089ea9bae2fa4078bb84bd0aa86b64"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><b>F</b></td></tr>
+<tr class="memitem:acb221c7694859d0828bcc1f56154cd69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb221c7694859d0828bcc1f56154cd69"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#acb221c7694859d0828bcc1f56154cd69">spline_coeffs</a></td></tr>
+<tr class="memdesc:acb221c7694859d0828bcc1f56154cd69"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a9d2bd4132187064cf5f6c301f7ce5125"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nnfftf_plan::K</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>number of precomp. </p>
+<p>uniform psi </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4bfc7abd18935616365f7925b2994e38"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nnfftf_plan::aN1_total</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>aN1_total=aN1[0]* ... </p>
+<p>*aN1[d-1] </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnnfftl__plan.html b/doc/api/html/structnnfftl__plan.html
new file mode 100644
index 0000000..a2a832b
--- /dev/null
+++ b/doc/api/html/structnnfftl__plan.html
@@ -0,0 +1,175 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nnfftl_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nnfftl_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a0e0827be03d503291f4a6d76c7b690d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e0827be03d503291f4a6d76c7b690d7"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a0e0827be03d503291f4a6d76c7b690d7">N_total</a></td></tr>
+<tr class="memdesc:a0e0827be03d503291f4a6d76c7b690d7"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a74e7fb29427e5a4d9b383ab278f513a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e7fb29427e5a4d9b383ab278f513a2"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a74e7fb29427e5a4d9b383ab278f513a2">M_total</a></td></tr>
+<tr class="memdesc:a74e7fb29427e5a4d9b383ab278f513a2"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a97bc689ffe1f4c8eb99ee43cf408c662"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97bc689ffe1f4c8eb99ee43cf408c662"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a97bc689ffe1f4c8eb99ee43cf408c662">f_hat</a></td></tr>
+<tr class="memdesc:a97bc689ffe1f4c8eb99ee43cf408c662"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a6aaa7904dbee73679d86060f1842a04e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6aaa7904dbee73679d86060f1842a04e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a6aaa7904dbee73679d86060f1842a04e">f</a></td></tr>
+<tr class="memdesc:a6aaa7904dbee73679d86060f1842a04e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a39b1bdd9a3eacd4ff3b809eeef01f364"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39b1bdd9a3eacd4ff3b809eeef01f364"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a39b1bdd9a3eacd4ff3b809eeef01f364">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a39b1bdd9a3eacd4ff3b809eeef01f364"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aa6098f51f9c69196ca782a1b0f8feeba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6098f51f9c69196ca782a1b0f8feeba"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aa6098f51f9c69196ca782a1b0f8feeba">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aa6098f51f9c69196ca782a1b0f8feeba"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a14dac9d67ed25ff370516f66668a8ec6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14dac9d67ed25ff370516f66668a8ec6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a14dac9d67ed25ff370516f66668a8ec6">d</a></td></tr>
+<tr class="memdesc:a14dac9d67ed25ff370516f66668a8ec6"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a899c16c2e59f2566a9f17d84f64af952"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a899c16c2e59f2566a9f17d84f64af952"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a899c16c2e59f2566a9f17d84f64af952">sigma</a></td></tr>
+<tr class="memdesc:a899c16c2e59f2566a9f17d84f64af952"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a41260d5c377bdd918b4952b4730b6908"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41260d5c377bdd918b4952b4730b6908"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a41260d5c377bdd918b4952b4730b6908">a</a></td></tr>
+<tr class="memdesc:a41260d5c377bdd918b4952b4730b6908"><td class="mdescLeft"> </td><td class="mdescRight">1 + 2*m/N1 <br/></td></tr>
+<tr class="memitem:a7fb433be8689db7816a3667620a294f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fb433be8689db7816a3667620a294f3"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a7fb433be8689db7816a3667620a294f3">N</a></td></tr>
+<tr class="memdesc:a7fb433be8689db7816a3667620a294f3"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies <br/></td></tr>
+<tr class="memitem:a693c5d648b1781dce21d24636aac6554"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a693c5d648b1781dce21d24636aac6554"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a693c5d648b1781dce21d24636aac6554">N1</a></td></tr>
+<tr class="memdesc:a693c5d648b1781dce21d24636aac6554"><td class="mdescLeft"> </td><td class="mdescRight">sigma*N <br/></td></tr>
+<tr class="memitem:af262dc79891366e77bb15789aa24f2cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af262dc79891366e77bb15789aa24f2cd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#af262dc79891366e77bb15789aa24f2cd">aN1</a></td></tr>
+<tr class="memdesc:af262dc79891366e77bb15789aa24f2cd"><td class="mdescLeft"> </td><td class="mdescRight">sigma*a*N <br/></td></tr>
+<tr class="memitem:a2082f917534e3a8590d5a19b4377a256"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2082f917534e3a8590d5a19b4377a256"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a2082f917534e3a8590d5a19b4377a256">m</a></td></tr>
+<tr class="memdesc:a2082f917534e3a8590d5a19b4377a256"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:ada085ec8f6099bfcaa7a193745689c9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada085ec8f6099bfcaa7a193745689c9a"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ada085ec8f6099bfcaa7a193745689c9a">b</a></td></tr>
+<tr class="memdesc:ada085ec8f6099bfcaa7a193745689c9a"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a574648230ce316a55282f362774aa615"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a574648230ce316a55282f362774aa615">K</a></td></tr>
+<tr class="memdesc:a574648230ce316a55282f362774aa615"><td class="mdescLeft"> </td><td class="mdescRight">number of precomp.  <a href="#a574648230ce316a55282f362774aa615"></a><br/></td></tr>
+<tr class="memitem:aa791fcca6424d42640020e178e8319e7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aa791fcca6424d42640020e178e8319e7">aN1_total</a></td></tr>
+<tr class="memdesc:aa791fcca6424d42640020e178e8319e7"><td class="mdescLeft"> </td><td class="mdescRight">aN1_total=aN1[0]* ...  <a href="#aa791fcca6424d42640020e178e8319e7"></a><br/></td></tr>
+<tr class="memitem:aa59e9ff1ad2fe1d90e077451831c6596"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa59e9ff1ad2fe1d90e077451831c6596"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aa59e9ff1ad2fe1d90e077451831c6596">direct_plan</a></td></tr>
+<tr class="memdesc:aa59e9ff1ad2fe1d90e077451831c6596"><td class="mdescLeft"> </td><td class="mdescRight">plan for the nfft <br/></td></tr>
+<tr class="memitem:a1a9bf1751caf842fb44f70a4cbab8744"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a9bf1751caf842fb44f70a4cbab8744"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a1a9bf1751caf842fb44f70a4cbab8744">nnfft_flags</a></td></tr>
+<tr class="memdesc:a1a9bf1751caf842fb44f70a4cbab8744"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:ad8d9bc5c5ae9f1ee6c813839ff831d97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8d9bc5c5ae9f1ee6c813839ff831d97"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ad8d9bc5c5ae9f1ee6c813839ff831d97">n</a></td></tr>
+<tr class="memdesc:ad8d9bc5c5ae9f1ee6c813839ff831d97"><td class="mdescLeft"> </td><td class="mdescRight">n=N1, for the window function <br/></td></tr>
+<tr class="memitem:ad3c1a7dca6cddcecba876f1bb523e3b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3c1a7dca6cddcecba876f1bb523e3b6"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">x</a></td></tr>
+<tr class="memdesc:ad3c1a7dca6cddcecba876f1bb523e3b6"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a224d2ba2e9ba30535b394b1375ff0a88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a224d2ba2e9ba30535b394b1375ff0a88"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a224d2ba2e9ba30535b394b1375ff0a88">v</a></td></tr>
+<tr class="memdesc:a224d2ba2e9ba30535b394b1375ff0a88"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in fourier domain) <br/></td></tr>
+<tr class="memitem:ab9b9f0d173b9526d60c1ae8fbec1e1f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9b9f0d173b9526d60c1ae8fbec1e1f7"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ab9b9f0d173b9526d60c1ae8fbec1e1f7">c_phi_inv</a></td></tr>
+<tr class="memdesc:ab9b9f0d173b9526d60c1ae8fbec1e1f7"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a8644e94ccefb0b3001442b4df86dae5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8644e94ccefb0b3001442b4df86dae5d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a8644e94ccefb0b3001442b4df86dae5d">psi</a></td></tr>
+<tr class="memdesc:a8644e94ccefb0b3001442b4df86dae5d"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:aed13a1f152cb6febf2ce643c204d8b9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed13a1f152cb6febf2ce643c204d8b9a"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aed13a1f152cb6febf2ce643c204d8b9a">size_psi</a></td></tr>
+<tr class="memdesc:aed13a1f152cb6febf2ce643c204d8b9a"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a4b53c60fb307d01e01931ef812974a3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b53c60fb307d01e01931ef812974a3c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a4b53c60fb307d01e01931ef812974a3c">psi_index_g</a></td></tr>
+<tr class="memdesc:a4b53c60fb307d01e01931ef812974a3c"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:abf4204a1a31afd35d490ca4ef42bd596"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf4204a1a31afd35d490ca4ef42bd596"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#abf4204a1a31afd35d490ca4ef42bd596">psi_index_f</a></td></tr>
+<tr class="memdesc:abf4204a1a31afd35d490ca4ef42bd596"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a5ab9f4d21b6828336f3eb8b92910f9b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ab9f4d21b6828336f3eb8b92910f9b3"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><b>F</b></td></tr>
+<tr class="memitem:a8f364097c04b46c203a4883af90b9eb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f364097c04b46c203a4883af90b9eb0"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a8f364097c04b46c203a4883af90b9eb0">spline_coeffs</a></td></tr>
+<tr class="memdesc:a8f364097c04b46c203a4883af90b9eb0"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a574648230ce316a55282f362774aa615"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nnfftl_plan::K</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>number of precomp. </p>
+<p>uniform psi </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa791fcca6424d42640020e178e8319e7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int nnfftl_plan::aN1_total</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>aN1_total=aN1[0]* ... </p>
+<p>*aN1[d-1] </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnsfft__plan.html b/doc/api/html/structnsfft__plan.html
new file mode 100644
index 0000000..752e119
--- /dev/null
+++ b/doc/api/html/structnsfft__plan.html
@@ -0,0 +1,129 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nsfft_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nsfft_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a979134567e97bfffbc022b8267f98f6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a979134567e97bfffbc022b8267f98f6d"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a979134567e97bfffbc022b8267f98f6d">FFTW_MANGLE_DOUBLE</a> (plan)*set_fftw_plan1</td></tr>
+<tr class="memdesc:a979134567e97bfffbc022b8267f98f6d"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+<tr class="memitem:a937d2895eeeaa8aabb92359232498693"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a937d2895eeeaa8aabb92359232498693"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a937d2895eeeaa8aabb92359232498693">FFTW_MANGLE_DOUBLE</a> (plan)*set_fftw_plan2</td></tr>
+<tr class="memdesc:a937d2895eeeaa8aabb92359232498693"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a87e0123a3ccf6a42102e065dca2f8505"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87e0123a3ccf6a42102e065dca2f8505"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505">N_total</a></td></tr>
+<tr class="memdesc:a87e0123a3ccf6a42102e065dca2f8505"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a03da0fc6abab6b0d2e15053ef1f3109e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03da0fc6abab6b0d2e15053ef1f3109e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e">M_total</a></td></tr>
+<tr class="memdesc:a03da0fc6abab6b0d2e15053ef1f3109e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ae3e2fcefd21caff3aa1e978b522d4ee3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3e2fcefd21caff3aa1e978b522d4ee3"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3">f_hat</a></td></tr>
+<tr class="memdesc:ae3e2fcefd21caff3aa1e978b522d4ee3"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a7ffefff1410360f4264e12398db06787"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ffefff1410360f4264e12398db06787"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787">f</a></td></tr>
+<tr class="memdesc:a7ffefff1410360f4264e12398db06787"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:abbab5fc009e68a329bbebee4904e53a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbab5fc009e68a329bbebee4904e53a5"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:abbab5fc009e68a329bbebee4904e53a5"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a9761ac166f3ec93197e8e409ba78fb4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9761ac166f3ec93197e8e409ba78fb4f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a9761ac166f3ec93197e8e409ba78fb4f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ac5e6ad608ed1e1d39f17d1512703ddfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5e6ad608ed1e1d39f17d1512703ddfe"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe">d</a></td></tr>
+<tr class="memdesc:ac5e6ad608ed1e1d39f17d1512703ddfe"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank; d = 2, 3 <br/></td></tr>
+<tr class="memitem:ad2186982dfb4c6df290c29a47d8e3c52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2186982dfb4c6df290c29a47d8e3c52"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52">J</a></td></tr>
+<tr class="memdesc:ad2186982dfb4c6df290c29a47d8e3c52"><td class="mdescLeft"> </td><td class="mdescRight">problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) <br/></td></tr>
+<tr class="memitem:a4b5a4d8e23b0309da9c51bdea4b7d954"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b5a4d8e23b0309da9c51bdea4b7d954"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954">sigma</a></td></tr>
+<tr class="memdesc:a4b5a4d8e23b0309da9c51bdea4b7d954"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a5fcea2cbb16bfdfc4a5a3f5142db3281"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fcea2cbb16bfdfc4a5a3f5142db3281"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281">flags</a></td></tr>
+<tr class="memdesc:a5fcea2cbb16bfdfc4a5a3f5142db3281"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a9112356adf28d6c7f6c5d57354b8fa55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9112356adf28d6c7f6c5d57354b8fa55"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55">index_sparse_to_full</a></td></tr>
+<tr class="memdesc:a9112356adf28d6c7f6c5d57354b8fa55"><td class="mdescLeft"> </td><td class="mdescRight">index conversation, overflow for d=3, J=9! <br/></td></tr>
+<tr class="memitem:a0a1b5e59c9ff83bc7b2d2894f96edd23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a1b5e59c9ff83bc7b2d2894f96edd23"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a0a1b5e59c9ff83bc7b2d2894f96edd23">r_act_nfft_plan</a></td></tr>
+<tr class="memdesc:a0a1b5e59c9ff83bc7b2d2894f96edd23"><td class="mdescLeft"> </td><td class="mdescRight">index of current nfft block <br/></td></tr>
+<tr class="memitem:a9a3f23953542f9909597f559a546422f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a3f23953542f9909597f559a546422f"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f">act_nfft_plan</a></td></tr>
+<tr class="memdesc:a9a3f23953542f9909597f559a546422f"><td class="mdescLeft"> </td><td class="mdescRight">current nfft block <br/></td></tr>
+<tr class="memitem:a0d68f66b8d41342a0b6e820ee2fffb3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d68f66b8d41342a0b6e820ee2fffb3e"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e">center_nfft_plan</a></td></tr>
+<tr class="memdesc:a0d68f66b8d41342a0b6e820ee2fffb3e"><td class="mdescLeft"> </td><td class="mdescRight">central nfft block <br/></td></tr>
+<tr class="memitem:aca7c2bc3da4c17412a72471576b76bcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca7c2bc3da4c17412a72471576b76bcc"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc">set_nfft_plan_1d</a></td></tr>
+<tr class="memdesc:aca7c2bc3da4c17412a72471576b76bcc"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a3f4e3d8adb31adbef7a3579e42311a3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f4e3d8adb31adbef7a3579e42311a3b"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b">set_nfft_plan_2d</a></td></tr>
+<tr class="memdesc:a3f4e3d8adb31adbef7a3579e42311a3b"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:aca6c9880cde07f3bc26dd7666c09a9d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca6c9880cde07f3bc26dd7666c09a9d6"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6">x_transposed</a></td></tr>
+<tr class="memdesc:aca6c9880cde07f3bc26dd7666c09a9d6"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d = 2 <br/></td></tr>
+<tr class="memitem:a56345708a95cbcd3ee2ebf472607f274"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56345708a95cbcd3ee2ebf472607f274"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>x_102</b></td></tr>
+<tr class="memitem:ad47d5d52d2abf71be638f1b6859c3080"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad47d5d52d2abf71be638f1b6859c3080"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>x_201</b></td></tr>
+<tr class="memitem:ab67c4a556040bc7699980cf02bf6c8a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab67c4a556040bc7699980cf02bf6c8a7"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>x_120</b></td></tr>
+<tr class="memitem:aee5ad936bb790f00bf0797c94e185549"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5ad936bb790f00bf0797c94e185549"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549">x_021</a></td></tr>
+<tr class="memdesc:aee5ad936bb790f00bf0797c94e185549"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d=3 <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00451">451</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnsfftf__plan.html b/doc/api/html/structnsfftf__plan.html
new file mode 100644
index 0000000..8901336
--- /dev/null
+++ b/doc/api/html/structnsfftf__plan.html
@@ -0,0 +1,129 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nsfftf_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nsfftf_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac0a9dbecfd535a1c7b2c0cfec5b79925"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0a9dbecfd535a1c7b2c0cfec5b79925"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#ac0a9dbecfd535a1c7b2c0cfec5b79925">FFTW_MANGLE_FLOAT</a> (plan)*set_fftw_plan1</td></tr>
+<tr class="memdesc:ac0a9dbecfd535a1c7b2c0cfec5b79925"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+<tr class="memitem:a5ceb97a548f5a438ad46a12133b1b5e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ceb97a548f5a438ad46a12133b1b5e8"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a5ceb97a548f5a438ad46a12133b1b5e8">FFTW_MANGLE_FLOAT</a> (plan)*set_fftw_plan2</td></tr>
+<tr class="memdesc:a5ceb97a548f5a438ad46a12133b1b5e8"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afe49ebe4fbbb3bd90b12e939c06adfab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe49ebe4fbbb3bd90b12e939c06adfab"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#afe49ebe4fbbb3bd90b12e939c06adfab">N_total</a></td></tr>
+<tr class="memdesc:afe49ebe4fbbb3bd90b12e939c06adfab"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a6a75a26e5d6476595bde5b03d6293a0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a75a26e5d6476595bde5b03d6293a0a"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a6a75a26e5d6476595bde5b03d6293a0a">M_total</a></td></tr>
+<tr class="memdesc:a6a75a26e5d6476595bde5b03d6293a0a"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a423d4a1555477e49a7cb3c26a4a5dfd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a423d4a1555477e49a7cb3c26a4a5dfd1"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a423d4a1555477e49a7cb3c26a4a5dfd1">f_hat</a></td></tr>
+<tr class="memdesc:a423d4a1555477e49a7cb3c26a4a5dfd1"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:aa2cda7d4bb129ad3dfd6b89682c28cd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2cda7d4bb129ad3dfd6b89682c28cd6"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#aa2cda7d4bb129ad3dfd6b89682c28cd6">f</a></td></tr>
+<tr class="memdesc:aa2cda7d4bb129ad3dfd6b89682c28cd6"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:ac698248a376958d67a10beecfdc3aa36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac698248a376958d67a10beecfdc3aa36"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#ac698248a376958d67a10beecfdc3aa36">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ac698248a376958d67a10beecfdc3aa36"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a8b4c8c903e7b24610e2d2e0c9bb62705"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b4c8c903e7b24610e2d2e0c9bb62705"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a8b4c8c903e7b24610e2d2e0c9bb62705">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a8b4c8c903e7b24610e2d2e0c9bb62705"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a161e392c8404d11f3237350b23e8c041"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a161e392c8404d11f3237350b23e8c041"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a161e392c8404d11f3237350b23e8c041">d</a></td></tr>
+<tr class="memdesc:a161e392c8404d11f3237350b23e8c041"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank; d = 2, 3 <br/></td></tr>
+<tr class="memitem:a24e51336c8b6f1814932e2bad306179b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24e51336c8b6f1814932e2bad306179b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a24e51336c8b6f1814932e2bad306179b">J</a></td></tr>
+<tr class="memdesc:a24e51336c8b6f1814932e2bad306179b"><td class="mdescLeft"> </td><td class="mdescRight">problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) <br/></td></tr>
+<tr class="memitem:ab7b68bdae0872917b559577ac2f53402"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7b68bdae0872917b559577ac2f53402"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#ab7b68bdae0872917b559577ac2f53402">sigma</a></td></tr>
+<tr class="memdesc:ab7b68bdae0872917b559577ac2f53402"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:acd78e2fcc4a9c29700887aee1517214c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd78e2fcc4a9c29700887aee1517214c"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#acd78e2fcc4a9c29700887aee1517214c">flags</a></td></tr>
+<tr class="memdesc:acd78e2fcc4a9c29700887aee1517214c"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a3e6968100cf6a0d5950ccdcb1744788f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e6968100cf6a0d5950ccdcb1744788f"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a3e6968100cf6a0d5950ccdcb1744788f">index_sparse_to_full</a></td></tr>
+<tr class="memdesc:a3e6968100cf6a0d5950ccdcb1744788f"><td class="mdescLeft"> </td><td class="mdescRight">index conversation, overflow for d=3, J=9! <br/></td></tr>
+<tr class="memitem:a844f94caf050adea11133a52dcbaccdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a844f94caf050adea11133a52dcbaccdc"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a844f94caf050adea11133a52dcbaccdc">r_act_nfft_plan</a></td></tr>
+<tr class="memdesc:a844f94caf050adea11133a52dcbaccdc"><td class="mdescLeft"> </td><td class="mdescRight">index of current nfft block <br/></td></tr>
+<tr class="memitem:a505021fefe68002ba73c78815166a73c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a505021fefe68002ba73c78815166a73c"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a505021fefe68002ba73c78815166a73c">act_nfft_plan</a></td></tr>
+<tr class="memdesc:a505021fefe68002ba73c78815166a73c"><td class="mdescLeft"> </td><td class="mdescRight">current nfft block <br/></td></tr>
+<tr class="memitem:aa01b9e613b9847fa4cc6278fcb3ae660"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa01b9e613b9847fa4cc6278fcb3ae660"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#aa01b9e613b9847fa4cc6278fcb3ae660">center_nfft_plan</a></td></tr>
+<tr class="memdesc:aa01b9e613b9847fa4cc6278fcb3ae660"><td class="mdescLeft"> </td><td class="mdescRight">central nfft block <br/></td></tr>
+<tr class="memitem:aaadc0908c69e235bc60ec3c7b28bca47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaadc0908c69e235bc60ec3c7b28bca47"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#aaadc0908c69e235bc60ec3c7b28bca47">set_nfft_plan_1d</a></td></tr>
+<tr class="memdesc:aaadc0908c69e235bc60ec3c7b28bca47"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a4ee3a7ef05c4fdbc161d24db51be3122"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ee3a7ef05c4fdbc161d24db51be3122"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a4ee3a7ef05c4fdbc161d24db51be3122">set_nfft_plan_2d</a></td></tr>
+<tr class="memdesc:a4ee3a7ef05c4fdbc161d24db51be3122"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a4d7e0553a450636fc65816e4977914bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d7e0553a450636fc65816e4977914bd"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a4d7e0553a450636fc65816e4977914bd">x_transposed</a></td></tr>
+<tr class="memdesc:a4d7e0553a450636fc65816e4977914bd"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d = 2 <br/></td></tr>
+<tr class="memitem:a75d9522d68301da2204ef8bad0e25262"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75d9522d68301da2204ef8bad0e25262"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>x_102</b></td></tr>
+<tr class="memitem:aa47dcf1f293427495c9dbfa3e9229bd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa47dcf1f293427495c9dbfa3e9229bd9"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>x_201</b></td></tr>
+<tr class="memitem:a0ec93a3c77d2d0c5a0facf9655504320"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ec93a3c77d2d0c5a0facf9655504320"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>x_120</b></td></tr>
+<tr class="memitem:a0c015fd2deca4e70105f0c68a6a69586"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c015fd2deca4e70105f0c68a6a69586"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a0c015fd2deca4e70105f0c68a6a69586">x_021</a></td></tr>
+<tr class="memdesc:a0c015fd2deca4e70105f0c68a6a69586"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d=3 <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00451">451</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structnsfftl__plan.html b/doc/api/html/structnsfftl__plan.html
new file mode 100644
index 0000000..f41523c
--- /dev/null
+++ b/doc/api/html/structnsfftl__plan.html
@@ -0,0 +1,129 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - nsfftl_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">nsfftl_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9a426f13a97f82a480413cba913b7f2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a426f13a97f82a480413cba913b7f2b"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a9a426f13a97f82a480413cba913b7f2b">FFTW_MANGLE_LONG_DOUBLE</a> (plan)*set_fftw_plan1</td></tr>
+<tr class="memdesc:a9a426f13a97f82a480413cba913b7f2b"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+<tr class="memitem:aa7137e627728ebee120141e78066da51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7137e627728ebee120141e78066da51"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa7137e627728ebee120141e78066da51">FFTW_MANGLE_LONG_DOUBLE</a> (plan)*set_fftw_plan2</td></tr>
+<tr class="memdesc:aa7137e627728ebee120141e78066da51"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa0e8f48c39f40e781da203659ec018ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0e8f48c39f40e781da203659ec018ab"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa0e8f48c39f40e781da203659ec018ab">N_total</a></td></tr>
+<tr class="memdesc:aa0e8f48c39f40e781da203659ec018ab"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:af95027b3922c48e54dc5e5417d3a45e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af95027b3922c48e54dc5e5417d3a45e8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#af95027b3922c48e54dc5e5417d3a45e8">M_total</a></td></tr>
+<tr class="memdesc:af95027b3922c48e54dc5e5417d3a45e8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a93d9d361d56e03f44bc6a9d4265b9f43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93d9d361d56e03f44bc6a9d4265b9f43"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a93d9d361d56e03f44bc6a9d4265b9f43">f_hat</a></td></tr>
+<tr class="memdesc:a93d9d361d56e03f44bc6a9d4265b9f43"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:ada472d5a0fb2afc32b4d1683c98185f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada472d5a0fb2afc32b4d1683c98185f6"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#ada472d5a0fb2afc32b4d1683c98185f6">f</a></td></tr>
+<tr class="memdesc:ada472d5a0fb2afc32b4d1683c98185f6"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:aad46757ac44a32dbb04d0e453454acac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad46757ac44a32dbb04d0e453454acac"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aad46757ac44a32dbb04d0e453454acac">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aad46757ac44a32dbb04d0e453454acac"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a658b4a71ff29aa1cc2febc66d6c175bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a658b4a71ff29aa1cc2febc66d6c175bd"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a658b4a71ff29aa1cc2febc66d6c175bd">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a658b4a71ff29aa1cc2febc66d6c175bd"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aca82cd28238f0c1a5171eabd1d301f90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca82cd28238f0c1a5171eabd1d301f90"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aca82cd28238f0c1a5171eabd1d301f90">d</a></td></tr>
+<tr class="memdesc:aca82cd28238f0c1a5171eabd1d301f90"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank; d = 2, 3 <br/></td></tr>
+<tr class="memitem:a6e3abb9e765b8f40b0f398a85c07d8af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e3abb9e765b8f40b0f398a85c07d8af"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a6e3abb9e765b8f40b0f398a85c07d8af">J</a></td></tr>
+<tr class="memdesc:a6e3abb9e765b8f40b0f398a85c07d8af"><td class="mdescLeft"> </td><td class="mdescRight">problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) <br/></td></tr>
+<tr class="memitem:aa55c79623980b8334e9fcb50fa55ecd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa55c79623980b8334e9fcb50fa55ecd3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa55c79623980b8334e9fcb50fa55ecd3">sigma</a></td></tr>
+<tr class="memdesc:aa55c79623980b8334e9fcb50fa55ecd3"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a5c4750f9d7a5f0dbc4d51d06d6be08d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c4750f9d7a5f0dbc4d51d06d6be08d3"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a5c4750f9d7a5f0dbc4d51d06d6be08d3">flags</a></td></tr>
+<tr class="memdesc:a5c4750f9d7a5f0dbc4d51d06d6be08d3"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:aaaf6f8d00374e91ec3baf983583b51bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaaf6f8d00374e91ec3baf983583b51bd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aaaf6f8d00374e91ec3baf983583b51bd">index_sparse_to_full</a></td></tr>
+<tr class="memdesc:aaaf6f8d00374e91ec3baf983583b51bd"><td class="mdescLeft"> </td><td class="mdescRight">index conversation, overflow for d=3, J=9! <br/></td></tr>
+<tr class="memitem:ad40799f013c6b35165c2bc76eb7cb32e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad40799f013c6b35165c2bc76eb7cb32e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#ad40799f013c6b35165c2bc76eb7cb32e">r_act_nfft_plan</a></td></tr>
+<tr class="memdesc:ad40799f013c6b35165c2bc76eb7cb32e"><td class="mdescLeft"> </td><td class="mdescRight">index of current nfft block <br/></td></tr>
+<tr class="memitem:a28eeabbe1dbef7ccf1c2b8c683a4b5dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28eeabbe1dbef7ccf1c2b8c683a4b5dc"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a28eeabbe1dbef7ccf1c2b8c683a4b5dc">act_nfft_plan</a></td></tr>
+<tr class="memdesc:a28eeabbe1dbef7ccf1c2b8c683a4b5dc"><td class="mdescLeft"> </td><td class="mdescRight">current nfft block <br/></td></tr>
+<tr class="memitem:af26a51757ddb28c4bcb37a0426e83fc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af26a51757ddb28c4bcb37a0426e83fc1"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#af26a51757ddb28c4bcb37a0426e83fc1">center_nfft_plan</a></td></tr>
+<tr class="memdesc:af26a51757ddb28c4bcb37a0426e83fc1"><td class="mdescLeft"> </td><td class="mdescRight">central nfft block <br/></td></tr>
+<tr class="memitem:a89a23c26f73280c5945e62f8966195fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89a23c26f73280c5945e62f8966195fb"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a89a23c26f73280c5945e62f8966195fb">set_nfft_plan_1d</a></td></tr>
+<tr class="memdesc:a89a23c26f73280c5945e62f8966195fb"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:aa7ae0c8a9b2f404bd1f8ce4820d7cf43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7ae0c8a9b2f404bd1f8ce4820d7cf43"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa7ae0c8a9b2f404bd1f8ce4820d7cf43">set_nfft_plan_2d</a></td></tr>
+<tr class="memdesc:aa7ae0c8a9b2f404bd1f8ce4820d7cf43"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a28eb398ae77902fd1ec2e0604d2a77ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28eb398ae77902fd1ec2e0604d2a77ce"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">x_transposed</a></td></tr>
+<tr class="memdesc:a28eb398ae77902fd1ec2e0604d2a77ce"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d = 2 <br/></td></tr>
+<tr class="memitem:ab4ce3bd81b5bab3e868227cbe2e50101"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4ce3bd81b5bab3e868227cbe2e50101"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>x_102</b></td></tr>
+<tr class="memitem:a233cf0ab307992432bcfcd6f34f20937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a233cf0ab307992432bcfcd6f34f20937"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>x_201</b></td></tr>
+<tr class="memitem:a965b92ec4facc3db597e1fb4fb300aed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a965b92ec4facc3db597e1fb4fb300aed"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>x_120</b></td></tr>
+<tr class="memitem:a62e8e58fe1b84f82ac85301a091af3fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62e8e58fe1b84f82ac85301a091af3fa"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a62e8e58fe1b84f82ac85301a091af3fa">x_021</a></td></tr>
+<tr class="memdesc:a62e8e58fe1b84f82ac85301a091af3fa"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d=3 <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00451">451</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structs__param.html b/doc/api/html/structs__param.html
new file mode 100644
index 0000000..0d24e90
--- /dev/null
+++ b/doc/api/html/structs__param.html
@@ -0,0 +1,93 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - s_param Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">s_param Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a35ae7e155deb56cd9db0a478a90dcbce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35ae7e155deb56cd9db0a478a90dcbce"></a>
+int </td><td class="memItemRight" valign="bottom"><b>d</b></td></tr>
+<tr class="memitem:ab774ab29ddf684c1adf243b19e25858d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab774ab29ddf684c1adf243b19e25858d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>trafo_adjoint</b></td></tr>
+<tr class="memitem:a5bb17952658c456879c4696d80acb205"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bb17952658c456879c4696d80acb205"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N</b></td></tr>
+<tr class="memitem:a3be96a7850c7510c9ee724a64af1059d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3be96a7850c7510c9ee724a64af1059d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>M</b></td></tr>
+<tr class="memitem:afae0fd8933f96ca0d39f11d9f59e1b33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afae0fd8933f96ca0d39f11d9f59e1b33"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma</b></td></tr>
+<tr class="memitem:a43995e5d91ee2164a0a786e781067279"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43995e5d91ee2164a0a786e781067279"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m</b></td></tr>
+<tr class="memitem:ad9d83fdb05317d16f7cb4d16393b2bb3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9d83fdb05317d16f7cb4d16393b2bb3"></a>
+int </td><td class="memItemRight" valign="bottom"><b>flags</b></td></tr>
+<tr class="memitem:a328a78e1413be0875f873f6516cab41d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a328a78e1413be0875f873f6516cab41d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsft_flags</b></td></tr>
+<tr class="memitem:a0ddad8b8daeb96efa32047f9d56f5cb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ddad8b8daeb96efa32047f9d56f5cb8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>psi_flags</b></td></tr>
+<tr class="memitem:a467a593d75c1526916c37747db8ec234"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a467a593d75c1526916c37747db8ec234"></a>
+int </td><td class="memItemRight" valign="bottom"><b>L</b></td></tr>
+<tr class="memitem:ace7c761113b9019b7b8fc5fea042b713"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace7c761113b9019b7b8fc5fea042b713"></a>
+int </td><td class="memItemRight" valign="bottom"><b>n</b></td></tr>
+<tr class="memitem:aef18bbac08d37dbab0b2cd464ad3bad0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef18bbac08d37dbab0b2cd464ad3bad0"></a>
+int </td><td class="memItemRight" valign="bottom"><b>p</b></td></tr>
+<tr class="memitem:a55b49785531ca10cee68118598cba53a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55b49785531ca10cee68118598cba53a"></a>
+char * </td><td class="memItemRight" valign="bottom"><b>kernel_name</b></td></tr>
+<tr class="memitem:a8538301f8439ae1af3c34e43a31bc0b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8538301f8439ae1af3c34e43a31bc0b7"></a>
+double </td><td class="memItemRight" valign="bottom"><b>c</b></td></tr>
+<tr class="memitem:a30bc71eb0fcf6fb9716b0576834ef810"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30bc71eb0fcf6fb9716b0576834ef810"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps_I</b></td></tr>
+<tr class="memitem:ad9a9a16ea14ab79fef8e1d9ce46a9b8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9a9a16ea14ab79fef8e1d9ce46a9b8f"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps_B</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00110">110</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structs__result.html b/doc/api/html/structs__result.html
new file mode 100644
index 0000000..095f58f
--- /dev/null
+++ b/doc/api/html/structs__result.html
@@ -0,0 +1,65 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - s_result Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">s_result Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aca01173e4ebcbb7307ae51a36a7d0a1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca01173e4ebcbb7307ae51a36a7d0a1c"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nthreads</b></td></tr>
+<tr class="memitem:a04dc463c2923a9e02349fd00d6ec39f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04dc463c2923a9e02349fd00d6ec39f0"></a>
+<a class="el" href="structs__resval.html">s_resval</a> </td><td class="memItemRight" valign="bottom"><b>resval</b> [6]</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00128">128</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structs__resval.html b/doc/api/html/structs__resval.html
new file mode 100644
index 0000000..9726000
--- /dev/null
+++ b/doc/api/html/structs__resval.html
@@ -0,0 +1,67 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - s_resval Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">s_resval Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa7c46309a88aba50fd63402037d8dd3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7c46309a88aba50fd63402037d8dd3e"></a>
+double </td><td class="memItemRight" valign="bottom"><b>avg</b></td></tr>
+<tr class="memitem:a70afc1842566eb54e7519287c3d073be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70afc1842566eb54e7519287c3d073be"></a>
+double </td><td class="memItemRight" valign="bottom"><b>min</b></td></tr>
+<tr class="memitem:a5b114ea67a970f09f68257e35b549dac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b114ea67a970f09f68257e35b549dac"></a>
+double </td><td class="memItemRight" valign="bottom"><b>max</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00121">121</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structs__testset.html b/doc/api/html/structs__testset.html
new file mode 100644
index 0000000..bb5e687
--- /dev/null
+++ b/doc/api/html/structs__testset.html
@@ -0,0 +1,67 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - s_testset Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">s_testset Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abac38e41e682993ccec030f7862d86fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abac38e41e682993ccec030f7862d86fa"></a>
+<a class="el" href="structs__param.html">s_param</a> </td><td class="memItemRight" valign="bottom"><b>param</b></td></tr>
+<tr class="memitem:a519427a984ec85acc3cb3dc5f3a724be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a519427a984ec85acc3cb3dc5f3a724be"></a>
+<a class="el" href="structs__result.html">s_result</a> * </td><td class="memItemRight" valign="bottom"><b>results</b></td></tr>
+<tr class="memitem:a641e1f292f908995f7a1df9fe725e48b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a641e1f292f908995f7a1df9fe725e48b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nresults</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00134">134</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structsolver__plan__complex.html b/doc/api/html/structsolver__plan__complex.html
new file mode 100644
index 0000000..c63752b
--- /dev/null
+++ b/doc/api/html/structsolver__plan__complex.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solver_plan_complex Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">solver_plan_complex Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afc0da6d097e04c2e28302a3b749140e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc0da6d097e04c2e28302a3b749140e7"></a>
+<a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7">mv</a></td></tr>
+<tr class="memdesc:afc0da6d097e04c2e28302a3b749140e7"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a5423b6885c0bd94b563c8cfd9370c942"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5423b6885c0bd94b563c8cfd9370c942"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942">flags</a></td></tr>
+<tr class="memdesc:a5423b6885c0bd94b563c8cfd9370c942"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a3bb04f250f17c2a4ab5d0b813b7ccf2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bb04f250f17c2a4ab5d0b813b7ccf2c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c">w</a></td></tr>
+<tr class="memdesc:a3bb04f250f17c2a4ab5d0b813b7ccf2c"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a80a69f8b5ddbd33be7041e6c6b0758ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80a69f8b5ddbd33be7041e6c6b0758ce"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce">w_hat</a></td></tr>
+<tr class="memdesc:a80a69f8b5ddbd33be7041e6c6b0758ce"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:ae05e9da3d96651d6a5d6456004791bde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae05e9da3d96651d6a5d6456004791bde"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde">y</a></td></tr>
+<tr class="memdesc:ae05e9da3d96651d6a5d6456004791bde"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:afac00cb681323619324be8787ff04f75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afac00cb681323619324be8787ff04f75"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75">f_hat_iter</a></td></tr>
+<tr class="memdesc:afac00cb681323619324be8787ff04f75"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a384e2c5f7b782e8c1bc57981376e6ff3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a384e2c5f7b782e8c1bc57981376e6ff3"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3">r_iter</a></td></tr>
+<tr class="memdesc:a384e2c5f7b782e8c1bc57981376e6ff3"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:aa554f9fda690f73783217b257a5faa03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa554f9fda690f73783217b257a5faa03"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03">z_hat_iter</a></td></tr>
+<tr class="memdesc:aa554f9fda690f73783217b257a5faa03"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a779777407a3de6429583efe2ab067fce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a779777407a3de6429583efe2ab067fce"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce">p_hat_iter</a></td></tr>
+<tr class="memdesc:a779777407a3de6429583efe2ab067fce"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:af41e928a58e7c461ff45037d47c350b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af41e928a58e7c461ff45037d47c350b5"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5">v_iter</a></td></tr>
+<tr class="memdesc:af41e928a58e7c461ff45037d47c350b5"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:aebd8c33327e8d7b6b63b41ba2f7c1a02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebd8c33327e8d7b6b63b41ba2f7c1a02"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02">alpha_iter</a></td></tr>
+<tr class="memdesc:aebd8c33327e8d7b6b63b41ba2f7c1a02"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:af13036b1a6f6edabe3fd862f77cf5000"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af13036b1a6f6edabe3fd862f77cf5000"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000">beta_iter</a></td></tr>
+<tr class="memdesc:af13036b1a6f6edabe3fd862f77cf5000"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a88b5453ab0159bede71240fb32828abe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88b5453ab0159bede71240fb32828abe"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe">dot_r_iter</a></td></tr>
+<tr class="memdesc:a88b5453ab0159bede71240fb32828abe"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:add3b6bc4149ba5371ef0b8bd91443e50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add3b6bc4149ba5371ef0b8bd91443e50"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:add3b6bc4149ba5371ef0b8bd91443e50"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:aba91d7700d200a0b15cecf8aafcef0df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba91d7700d200a0b15cecf8aafcef0df"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:aba91d7700d200a0b15cecf8aafcef0df"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:aadb97426a0e35fd46a65557c56b055ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadb97426a0e35fd46a65557c56b055ee"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:aadb97426a0e35fd46a65557c56b055ee"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a0cced7bb2f3b85b75b765d796e2c741d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cced7bb2f3b85b75b765d796e2c741d"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a0cced7bb2f3b85b75b765d796e2c741d"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a0561b1d4bd014a175ef75d069cc592de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0561b1d4bd014a175ef75d069cc592de"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de">dot_v_iter</a></td></tr>
+<tr class="memdesc:a0561b1d4bd014a175ef75d069cc592de"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structsolver__plan__double.html b/doc/api/html/structsolver__plan__double.html
new file mode 100644
index 0000000..b4b756d
--- /dev/null
+++ b/doc/api/html/structsolver__plan__double.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solver_plan_double Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">solver_plan_double Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a114ce0569fe40dbbf97d8f5fbe125404"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a114ce0569fe40dbbf97d8f5fbe125404"></a>
+<a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404">mv</a></td></tr>
+<tr class="memdesc:a114ce0569fe40dbbf97d8f5fbe125404"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:ad4f6df9d890d106438ed0d3d725bf5b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f6df9d890d106438ed0d3d725bf5b4"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4">flags</a></td></tr>
+<tr class="memdesc:ad4f6df9d890d106438ed0d3d725bf5b4"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:adc2b7cea47756753ae9f8d5731f8d500"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc2b7cea47756753ae9f8d5731f8d500"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500">w</a></td></tr>
+<tr class="memdesc:adc2b7cea47756753ae9f8d5731f8d500"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:ab16ed4ac6cf04f57c4b1f194fbc09472"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab16ed4ac6cf04f57c4b1f194fbc09472"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472">w_hat</a></td></tr>
+<tr class="memdesc:ab16ed4ac6cf04f57c4b1f194fbc09472"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:accc401c5912fe60922d4ce2b30132e18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accc401c5912fe60922d4ce2b30132e18"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18">y</a></td></tr>
+<tr class="memdesc:accc401c5912fe60922d4ce2b30132e18"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a25db7056f50bf19ab3e3527050a415d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25db7056f50bf19ab3e3527050a415d1"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1">f_hat_iter</a></td></tr>
+<tr class="memdesc:a25db7056f50bf19ab3e3527050a415d1"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a088f3b3f683ffc2b9c7e42b02fa17183"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a088f3b3f683ffc2b9c7e42b02fa17183"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183">r_iter</a></td></tr>
+<tr class="memdesc:a088f3b3f683ffc2b9c7e42b02fa17183"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:aac8b0f141a85d329e39319f6c19f3e48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac8b0f141a85d329e39319f6c19f3e48"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48">z_hat_iter</a></td></tr>
+<tr class="memdesc:aac8b0f141a85d329e39319f6c19f3e48"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a21913274af8b42c199546919e2999677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21913274af8b42c199546919e2999677"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677">p_hat_iter</a></td></tr>
+<tr class="memdesc:a21913274af8b42c199546919e2999677"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a53d18b8e21062399f9232058704cd0b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53d18b8e21062399f9232058704cd0b2"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2">v_iter</a></td></tr>
+<tr class="memdesc:a53d18b8e21062399f9232058704cd0b2"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae35eb29827ce76741bd658714350735b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae35eb29827ce76741bd658714350735b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b">alpha_iter</a></td></tr>
+<tr class="memdesc:ae35eb29827ce76741bd658714350735b"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:aebfe38cf3b3ca344bbfbb7b1cf41eca8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebfe38cf3b3ca344bbfbb7b1cf41eca8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8">beta_iter</a></td></tr>
+<tr class="memdesc:aebfe38cf3b3ca344bbfbb7b1cf41eca8"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a77a16ccb2a2a1091dd121d024a3dc53b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77a16ccb2a2a1091dd121d024a3dc53b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b">dot_r_iter</a></td></tr>
+<tr class="memdesc:a77a16ccb2a2a1091dd121d024a3dc53b"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a5d47ba554ae4d190384eaca6250f7312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d47ba554ae4d190384eaca6250f7312"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a5d47ba554ae4d190384eaca6250f7312"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a495a0f084b43fea59c6328e085467cea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a495a0f084b43fea59c6328e085467cea"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:a495a0f084b43fea59c6328e085467cea"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:a35f2567cc25bcfce28dbb48eba5e49c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35f2567cc25bcfce28dbb48eba5e49c9"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:a35f2567cc25bcfce28dbb48eba5e49c9"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a21f781633362300a145e71ea88febbae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21f781633362300a145e71ea88febbae"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a21f781633362300a145e71ea88febbae"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a364a63cb093efa72e618a349a58d1890"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a364a63cb093efa72e618a349a58d1890"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890">dot_v_iter</a></td></tr>
+<tr class="memdesc:a364a63cb093efa72e618a349a58d1890"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structsolverf__plan__complex.html b/doc/api/html/structsolverf__plan__complex.html
new file mode 100644
index 0000000..67e7f37
--- /dev/null
+++ b/doc/api/html/structsolverf__plan__complex.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solverf_plan_complex Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">solverf_plan_complex Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a519286afbd99d020738a92e03c320a18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a519286afbd99d020738a92e03c320a18"></a>
+<a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a519286afbd99d020738a92e03c320a18">mv</a></td></tr>
+<tr class="memdesc:a519286afbd99d020738a92e03c320a18"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a2d7642432b4b627a4bf77d1c05216669"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d7642432b4b627a4bf77d1c05216669"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a2d7642432b4b627a4bf77d1c05216669">flags</a></td></tr>
+<tr class="memdesc:a2d7642432b4b627a4bf77d1c05216669"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a91f7e03dc8509952827333cc61ca9aa4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91f7e03dc8509952827333cc61ca9aa4"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a91f7e03dc8509952827333cc61ca9aa4">w</a></td></tr>
+<tr class="memdesc:a91f7e03dc8509952827333cc61ca9aa4"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aece5ec597b25ea28c945d2559316fad8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aece5ec597b25ea28c945d2559316fad8"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#aece5ec597b25ea28c945d2559316fad8">w_hat</a></td></tr>
+<tr class="memdesc:aece5ec597b25ea28c945d2559316fad8"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a522b2ad5b572dce6d786b26e221a14d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a522b2ad5b572dce6d786b26e221a14d6"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a522b2ad5b572dce6d786b26e221a14d6">y</a></td></tr>
+<tr class="memdesc:a522b2ad5b572dce6d786b26e221a14d6"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:abe0364fe67e48a336fca522a0cf6ee1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe0364fe67e48a336fca522a0cf6ee1b"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#abe0364fe67e48a336fca522a0cf6ee1b">f_hat_iter</a></td></tr>
+<tr class="memdesc:abe0364fe67e48a336fca522a0cf6ee1b"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a4ca8ff73e59386ea3d5003c1ad27459d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ca8ff73e59386ea3d5003c1ad27459d"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a4ca8ff73e59386ea3d5003c1ad27459d">r_iter</a></td></tr>
+<tr class="memdesc:a4ca8ff73e59386ea3d5003c1ad27459d"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a4c8dbe5d5a4d910b93ae7f84215482c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c8dbe5d5a4d910b93ae7f84215482c8"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a4c8dbe5d5a4d910b93ae7f84215482c8">z_hat_iter</a></td></tr>
+<tr class="memdesc:a4c8dbe5d5a4d910b93ae7f84215482c8"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:ac62464d925e739f79c28059cd1e59faa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac62464d925e739f79c28059cd1e59faa"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#ac62464d925e739f79c28059cd1e59faa">p_hat_iter</a></td></tr>
+<tr class="memdesc:ac62464d925e739f79c28059cd1e59faa"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a7e352320832a737577bd9ebe689a50bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e352320832a737577bd9ebe689a50bd"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a7e352320832a737577bd9ebe689a50bd">v_iter</a></td></tr>
+<tr class="memdesc:a7e352320832a737577bd9ebe689a50bd"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ac2ce57e2bfbc31f9262e5ce93562d899"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2ce57e2bfbc31f9262e5ce93562d899"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#ac2ce57e2bfbc31f9262e5ce93562d899">alpha_iter</a></td></tr>
+<tr class="memdesc:ac2ce57e2bfbc31f9262e5ce93562d899"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:abd007d004fedd5bb4b9eb919d8e928d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd007d004fedd5bb4b9eb919d8e928d8"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#abd007d004fedd5bb4b9eb919d8e928d8">beta_iter</a></td></tr>
+<tr class="memdesc:abd007d004fedd5bb4b9eb919d8e928d8"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a1bb6290598f2f4f1452a2de2c27f54af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb6290598f2f4f1452a2de2c27f54af"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a1bb6290598f2f4f1452a2de2c27f54af">dot_r_iter</a></td></tr>
+<tr class="memdesc:a1bb6290598f2f4f1452a2de2c27f54af"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a861d76266b51f96c015ed6e33505978d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a861d76266b51f96c015ed6e33505978d"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a861d76266b51f96c015ed6e33505978d">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a861d76266b51f96c015ed6e33505978d"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:adeec40c2b8450cd7486f8524c6dcc3d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adeec40c2b8450cd7486f8524c6dcc3d4"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#adeec40c2b8450cd7486f8524c6dcc3d4">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:adeec40c2b8450cd7486f8524c6dcc3d4"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:a71e2482ed0eb34229fb166d6821d1a03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71e2482ed0eb34229fb166d6821d1a03"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a71e2482ed0eb34229fb166d6821d1a03">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:a71e2482ed0eb34229fb166d6821d1a03"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a3d2a5ea538a77dc4f2da9b53beab9c01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d2a5ea538a77dc4f2da9b53beab9c01"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a3d2a5ea538a77dc4f2da9b53beab9c01">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a3d2a5ea538a77dc4f2da9b53beab9c01"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a46f2243aac9e8e4689ab7f06914d3f97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46f2243aac9e8e4689ab7f06914d3f97"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a46f2243aac9e8e4689ab7f06914d3f97">dot_v_iter</a></td></tr>
+<tr class="memdesc:a46f2243aac9e8e4689ab7f06914d3f97"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structsolverf__plan__double.html b/doc/api/html/structsolverf__plan__double.html
new file mode 100644
index 0000000..342c8d1
--- /dev/null
+++ b/doc/api/html/structsolverf__plan__double.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solverf_plan_double Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">solverf_plan_double Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aaa4fedc5005e075e7f707770384be114"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa4fedc5005e075e7f707770384be114"></a>
+<a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aaa4fedc5005e075e7f707770384be114">mv</a></td></tr>
+<tr class="memdesc:aaa4fedc5005e075e7f707770384be114"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a28ce886cb705632f8f866bfb5880795b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28ce886cb705632f8f866bfb5880795b"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a28ce886cb705632f8f866bfb5880795b">flags</a></td></tr>
+<tr class="memdesc:a28ce886cb705632f8f866bfb5880795b"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a63c0a528c6e9989c7b0fee6c02d1fbff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63c0a528c6e9989c7b0fee6c02d1fbff"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a63c0a528c6e9989c7b0fee6c02d1fbff">w</a></td></tr>
+<tr class="memdesc:a63c0a528c6e9989c7b0fee6c02d1fbff"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:ab1cada21b9034edfd3a1b2f77252f3be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1cada21b9034edfd3a1b2f77252f3be"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#ab1cada21b9034edfd3a1b2f77252f3be">w_hat</a></td></tr>
+<tr class="memdesc:ab1cada21b9034edfd3a1b2f77252f3be"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a31aa1269dccbcfad158f31c276b0399e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31aa1269dccbcfad158f31c276b0399e"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a31aa1269dccbcfad158f31c276b0399e">y</a></td></tr>
+<tr class="memdesc:a31aa1269dccbcfad158f31c276b0399e"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:aab9daf7841a5f6b3a059921713736e3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab9daf7841a5f6b3a059921713736e3c"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aab9daf7841a5f6b3a059921713736e3c">f_hat_iter</a></td></tr>
+<tr class="memdesc:aab9daf7841a5f6b3a059921713736e3c"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a6261a160be099d721856fab16f31cf22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6261a160be099d721856fab16f31cf22"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a6261a160be099d721856fab16f31cf22">r_iter</a></td></tr>
+<tr class="memdesc:a6261a160be099d721856fab16f31cf22"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:aeee7fa961ebdf43e0caf1108e6b5ada7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeee7fa961ebdf43e0caf1108e6b5ada7"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aeee7fa961ebdf43e0caf1108e6b5ada7">z_hat_iter</a></td></tr>
+<tr class="memdesc:aeee7fa961ebdf43e0caf1108e6b5ada7"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a6987fb320cd6798faabe9dfd92a494f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6987fb320cd6798faabe9dfd92a494f2"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a6987fb320cd6798faabe9dfd92a494f2">p_hat_iter</a></td></tr>
+<tr class="memdesc:a6987fb320cd6798faabe9dfd92a494f2"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a6ee0cddd36b16d6b8cc09baf6db05cf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ee0cddd36b16d6b8cc09baf6db05cf9"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a6ee0cddd36b16d6b8cc09baf6db05cf9">v_iter</a></td></tr>
+<tr class="memdesc:a6ee0cddd36b16d6b8cc09baf6db05cf9"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae1d25f3ba1b23f7d5953991495c91ce3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1d25f3ba1b23f7d5953991495c91ce3"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#ae1d25f3ba1b23f7d5953991495c91ce3">alpha_iter</a></td></tr>
+<tr class="memdesc:ae1d25f3ba1b23f7d5953991495c91ce3"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a4b53103abc562b5c603b4b656d1992fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b53103abc562b5c603b4b656d1992fa"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a4b53103abc562b5c603b4b656d1992fa">beta_iter</a></td></tr>
+<tr class="memdesc:a4b53103abc562b5c603b4b656d1992fa"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:ae52e93514983b50204d70f660e720e04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae52e93514983b50204d70f660e720e04"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#ae52e93514983b50204d70f660e720e04">dot_r_iter</a></td></tr>
+<tr class="memdesc:ae52e93514983b50204d70f660e720e04"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a2ee1d6b53c866d65aaa948afcbdd871e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ee1d6b53c866d65aaa948afcbdd871e"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a2ee1d6b53c866d65aaa948afcbdd871e">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a2ee1d6b53c866d65aaa948afcbdd871e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a845482517a34f22d7eb39bf1747e5dd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a845482517a34f22d7eb39bf1747e5dd6"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a845482517a34f22d7eb39bf1747e5dd6">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:a845482517a34f22d7eb39bf1747e5dd6"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:aa9672016211508805091ab645b489bbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9672016211508805091ab645b489bbf"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aa9672016211508805091ab645b489bbf">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:aa9672016211508805091ab645b489bbf"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a2bf2a21b09e47a883f9665b4ec38f3c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bf2a21b09e47a883f9665b4ec38f3c2"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a2bf2a21b09e47a883f9665b4ec38f3c2">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a2bf2a21b09e47a883f9665b4ec38f3c2"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:aaeae6a2f28ba0ded31baca1aa8c36431"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeae6a2f28ba0ded31baca1aa8c36431"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aaeae6a2f28ba0ded31baca1aa8c36431">dot_v_iter</a></td></tr>
+<tr class="memdesc:aaeae6a2f28ba0ded31baca1aa8c36431"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structsolverl__plan__complex.html b/doc/api/html/structsolverl__plan__complex.html
new file mode 100644
index 0000000..67a86b1
--- /dev/null
+++ b/doc/api/html/structsolverl__plan__complex.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solverl_plan_complex Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">solverl_plan_complex Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a3da97d0d8d896d9da6a95a68a6f65442"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3da97d0d8d896d9da6a95a68a6f65442"></a>
+<a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a3da97d0d8d896d9da6a95a68a6f65442">mv</a></td></tr>
+<tr class="memdesc:a3da97d0d8d896d9da6a95a68a6f65442"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:abd86575c07d53042297da1c54ebc9e1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd86575c07d53042297da1c54ebc9e1a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#abd86575c07d53042297da1c54ebc9e1a">flags</a></td></tr>
+<tr class="memdesc:abd86575c07d53042297da1c54ebc9e1a"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a547382238a57e96f316bac4dd291af0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a547382238a57e96f316bac4dd291af0d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a547382238a57e96f316bac4dd291af0d">w</a></td></tr>
+<tr class="memdesc:a547382238a57e96f316bac4dd291af0d"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:ad4d107f6ef642a2f8173d05d73bde405"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4d107f6ef642a2f8173d05d73bde405"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ad4d107f6ef642a2f8173d05d73bde405">w_hat</a></td></tr>
+<tr class="memdesc:ad4d107f6ef642a2f8173d05d73bde405"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:afbcb92106789225f6d54be521797b97f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbcb92106789225f6d54be521797b97f"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#afbcb92106789225f6d54be521797b97f">y</a></td></tr>
+<tr class="memdesc:afbcb92106789225f6d54be521797b97f"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:affba771210ad63dfce92bed9a629e19f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affba771210ad63dfce92bed9a629e19f"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#affba771210ad63dfce92bed9a629e19f">f_hat_iter</a></td></tr>
+<tr class="memdesc:affba771210ad63dfce92bed9a629e19f"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:aec8fcaf36c7ce234e76970dc4b4ec9c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec8fcaf36c7ce234e76970dc4b4ec9c9"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#aec8fcaf36c7ce234e76970dc4b4ec9c9">r_iter</a></td></tr>
+<tr class="memdesc:aec8fcaf36c7ce234e76970dc4b4ec9c9"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:abe468b3b489a8707538f083713962fcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe468b3b489a8707538f083713962fcc"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#abe468b3b489a8707538f083713962fcc">z_hat_iter</a></td></tr>
+<tr class="memdesc:abe468b3b489a8707538f083713962fcc"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:aa7833544d06eb2d71042da5fa06b9c5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7833544d06eb2d71042da5fa06b9c5c"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#aa7833544d06eb2d71042da5fa06b9c5c">p_hat_iter</a></td></tr>
+<tr class="memdesc:aa7833544d06eb2d71042da5fa06b9c5c"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a79c7f5b84aa9feddeafbcb9bde26de17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79c7f5b84aa9feddeafbcb9bde26de17"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a79c7f5b84aa9feddeafbcb9bde26de17">v_iter</a></td></tr>
+<tr class="memdesc:a79c7f5b84aa9feddeafbcb9bde26de17"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ad149f66fa5dde187b3ef7860e593de01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad149f66fa5dde187b3ef7860e593de01"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ad149f66fa5dde187b3ef7860e593de01">alpha_iter</a></td></tr>
+<tr class="memdesc:ad149f66fa5dde187b3ef7860e593de01"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:ab0f9266a50fc4a3acda9659b2c0920e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0f9266a50fc4a3acda9659b2c0920e3"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ab0f9266a50fc4a3acda9659b2c0920e3">beta_iter</a></td></tr>
+<tr class="memdesc:ab0f9266a50fc4a3acda9659b2c0920e3"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:aa2d90b37bc2a2ae2f9d0c90c9431abf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2d90b37bc2a2ae2f9d0c90c9431abf1"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#aa2d90b37bc2a2ae2f9d0c90c9431abf1">dot_r_iter</a></td></tr>
+<tr class="memdesc:aa2d90b37bc2a2ae2f9d0c90c9431abf1"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a6d564c417ab5b11a306e489df80f4e1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d564c417ab5b11a306e489df80f4e1e"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a6d564c417ab5b11a306e489df80f4e1e">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a6d564c417ab5b11a306e489df80f4e1e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ae487ec619578f4f6d4876d7bc059f22a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae487ec619578f4f6d4876d7bc059f22a"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ae487ec619578f4f6d4876d7bc059f22a">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:ae487ec619578f4f6d4876d7bc059f22a"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:af4efa34efc92f873c771df52d423f39e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4efa34efc92f873c771df52d423f39e"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#af4efa34efc92f873c771df52d423f39e">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:af4efa34efc92f873c771df52d423f39e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a4941cd9e60935f7e39a0c86a52202c02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4941cd9e60935f7e39a0c86a52202c02"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a4941cd9e60935f7e39a0c86a52202c02">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a4941cd9e60935f7e39a0c86a52202c02"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a14f62c3118e3c1c7a92dd9bf8877250c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14f62c3118e3c1c7a92dd9bf8877250c"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a14f62c3118e3c1c7a92dd9bf8877250c">dot_v_iter</a></td></tr>
+<tr class="memdesc:a14f62c3118e3c1c7a92dd9bf8877250c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structsolverl__plan__double.html b/doc/api/html/structsolverl__plan__double.html
new file mode 100644
index 0000000..9ebf677
--- /dev/null
+++ b/doc/api/html/structsolverl__plan__double.html
@@ -0,0 +1,113 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - solverl_plan_double Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">solverl_plan_double Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a56e946ecb94fc633a9d518d347725c4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e946ecb94fc633a9d518d347725c4c"></a>
+<a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a56e946ecb94fc633a9d518d347725c4c">mv</a></td></tr>
+<tr class="memdesc:a56e946ecb94fc633a9d518d347725c4c"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:aa95251443f265effb6093d63b6536431"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa95251443f265effb6093d63b6536431"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aa95251443f265effb6093d63b6536431">flags</a></td></tr>
+<tr class="memdesc:aa95251443f265effb6093d63b6536431"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a0f45b9d16576986d6d6d9605f6891f3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f45b9d16576986d6d6d9605f6891f3d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a0f45b9d16576986d6d6d9605f6891f3d">w</a></td></tr>
+<tr class="memdesc:a0f45b9d16576986d6d6d9605f6891f3d"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aaa9d07d5f3ec0f7f7f0a6193927e1a94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa9d07d5f3ec0f7f7f0a6193927e1a94"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aaa9d07d5f3ec0f7f7f0a6193927e1a94">w_hat</a></td></tr>
+<tr class="memdesc:aaa9d07d5f3ec0f7f7f0a6193927e1a94"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a70307c6e59216c27cb4d78e7f172ab8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70307c6e59216c27cb4d78e7f172ab8c"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a70307c6e59216c27cb4d78e7f172ab8c">y</a></td></tr>
+<tr class="memdesc:a70307c6e59216c27cb4d78e7f172ab8c"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a0c38937dd8ad6734e94e08a2cd700628"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c38937dd8ad6734e94e08a2cd700628"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a0c38937dd8ad6734e94e08a2cd700628">f_hat_iter</a></td></tr>
+<tr class="memdesc:a0c38937dd8ad6734e94e08a2cd700628"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a9715db1a24435d9dd2bc76371d92174e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9715db1a24435d9dd2bc76371d92174e"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a9715db1a24435d9dd2bc76371d92174e">r_iter</a></td></tr>
+<tr class="memdesc:a9715db1a24435d9dd2bc76371d92174e"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a0816054fdb0e07f4a68fc4aa5321c977"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0816054fdb0e07f4a68fc4aa5321c977"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">z_hat_iter</a></td></tr>
+<tr class="memdesc:a0816054fdb0e07f4a68fc4aa5321c977"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a803178524d842ae2944fb5f3ce9d4939"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a803178524d842ae2944fb5f3ce9d4939"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a803178524d842ae2944fb5f3ce9d4939">p_hat_iter</a></td></tr>
+<tr class="memdesc:a803178524d842ae2944fb5f3ce9d4939"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:ab469e8fc7e7bc6c4068794cddf69ce26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab469e8fc7e7bc6c4068794cddf69ce26"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#ab469e8fc7e7bc6c4068794cddf69ce26">v_iter</a></td></tr>
+<tr class="memdesc:ab469e8fc7e7bc6c4068794cddf69ce26"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a7ea0b68ab2ccfe01df7a3747a5fed15a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ea0b68ab2ccfe01df7a3747a5fed15a"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a7ea0b68ab2ccfe01df7a3747a5fed15a">alpha_iter</a></td></tr>
+<tr class="memdesc:a7ea0b68ab2ccfe01df7a3747a5fed15a"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a1c60e5fd15da3722f9b8213d1634c86a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c60e5fd15da3722f9b8213d1634c86a"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a1c60e5fd15da3722f9b8213d1634c86a">beta_iter</a></td></tr>
+<tr class="memdesc:a1c60e5fd15da3722f9b8213d1634c86a"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:ab12b510e093f8ccfaa4c1e51b6cd31c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab12b510e093f8ccfaa4c1e51b6cd31c1"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#ab12b510e093f8ccfaa4c1e51b6cd31c1">dot_r_iter</a></td></tr>
+<tr class="memdesc:ab12b510e093f8ccfaa4c1e51b6cd31c1"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:afa3e321968bd1773368cebe1339add7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa3e321968bd1773368cebe1339add7c"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#afa3e321968bd1773368cebe1339add7c">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:afa3e321968bd1773368cebe1339add7c"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:aefacac40db7773101ce75ba8247119b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefacac40db7773101ce75ba8247119b7"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aefacac40db7773101ce75ba8247119b7">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:aefacac40db7773101ce75ba8247119b7"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:aa991891a7df826b77fac977581f9077c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa991891a7df826b77fac977581f9077c"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aa991891a7df826b77fac977581f9077c">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:aa991891a7df826b77fac977581f9077c"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a2f43c87a598dff5b6e87960a07864148"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f43c87a598dff5b6e87960a07864148"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a2f43c87a598dff5b6e87960a07864148">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a2f43c87a598dff5b6e87960a07864148"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a849c4c1c131a333885e581fec5a2dac0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a849c4c1c131a333885e581fec5a2dac0"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a849c4c1c131a333885e581fec5a2dac0">dot_v_iter</a></td></tr>
+<tr class="memdesc:a849c4c1c131a333885e581fec5a2dac0"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structtaylor__plan.html b/doc/api/html/structtaylor__plan.html
new file mode 100644
index 0000000..aae8afb
--- /dev/null
+++ b/doc/api/html/structtaylor__plan.html
@@ -0,0 +1,68 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - taylor_plan Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">taylor_plan Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afd71182be8b8fcfa66155b0be4fb94ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd71182be8b8fcfa66155b0be4fb94ee"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">p</a></td></tr>
+<tr class="memdesc:afd71182be8b8fcfa66155b0be4fb94ee"><td class="mdescLeft"> </td><td class="mdescRight">used for fftw and data <br/></td></tr>
+<tr class="memitem:a3d3e69bc61775fee556801bd66a47c19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d3e69bc61775fee556801bd66a47c19"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">idx0</a></td></tr>
+<tr class="memdesc:a3d3e69bc61775fee556801bd66a47c19"><td class="mdescLeft"> </td><td class="mdescRight">index of next neighbour of x_j on the oversampled regular grid <br/></td></tr>
+<tr class="memitem:a09164bdbcba8f9ecc7a58904574ff07b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09164bdbcba8f9ecc7a58904574ff07b"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">deltax0</a></td></tr>
+<tr class="memdesc:a09164bdbcba8f9ecc7a58904574ff07b"><td class="mdescLeft"> </td><td class="mdescRight">distance to the grid point <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00044">44</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/structwindow__funct__plan__.html b/doc/api/html/structwindow__funct__plan__.html
new file mode 100644
index 0000000..4812464
--- /dev/null
+++ b/doc/api/html/structwindow__funct__plan__.html
@@ -0,0 +1,76 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - window_funct_plan_ Struct Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+      <li><a href="functions.html"><span>Data Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">window_funct_plan_ Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>window_funct_plan is a plan to use the window functions independent of the nfft  
+ <a href="structwindow__funct__plan__.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ab5d5f5263d52634062dbdf5e2e89e51a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d5f5263d52634062dbdf5e2e89e51a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>d</b></td></tr>
+<tr class="memitem:abcd107b125dea15da3651fe055f3550b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcd107b125dea15da3651fe055f3550b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m</b></td></tr>
+<tr class="memitem:af51cd5627d15508b5a6f9071cb5c05c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af51cd5627d15508b5a6f9071cb5c05c8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>n</b> [1]</td></tr>
+<tr class="memitem:a8ccb145d4e8fb4e395533f85b35bf0d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ccb145d4e8fb4e395533f85b35bf0d7"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma</b> [1]</td></tr>
+<tr class="memitem:a327636fa511ff5be5dac22db28903c44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a327636fa511ff5be5dac22db28903c44"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>b</b></td></tr>
+<tr class="memitem:a59ddba27ebde497ae7cfcfc2dbdd2304"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59ddba27ebde497ae7cfcfc2dbdd2304"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">spline_coeffs</a></td></tr>
+<tr class="memdesc:a59ddba27ebde497ae7cfcfc2dbdd2304"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>window_funct_plan is a plan to use the window functions independent of the nfft </p>
+
+<p>Definition at line <a class="el" href="mri_8c_source.html#l00037">37</a> of file <a class="el" href="mri_8c_source.html">mri.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mri_8c_source.html">mri.c</a></li>
+</ul>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/tab_a.png b/doc/api/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
Binary files /dev/null and b/doc/api/html/tab_a.png differ
diff --git a/doc/api/html/tab_b.png b/doc/api/html/tab_b.png
new file mode 100644
index 0000000..258c141
Binary files /dev/null and b/doc/api/html/tab_b.png differ
diff --git a/doc/api/html/tab_h.png b/doc/api/html/tab_h.png
new file mode 100644
index 0000000..4ca9102
Binary files /dev/null and b/doc/api/html/tab_h.png differ
diff --git a/doc/api/html/tab_s.png b/doc/api/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
Binary files /dev/null and b/doc/api/html/tab_s.png differ
diff --git a/doc/api/html/tabs.css b/doc/api/html/tabs.css
new file mode 100644
index 0000000..2192056
--- /dev/null
+++ b/doc/api/html/tabs.css
@@ -0,0 +1,59 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #283A5D;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/doc/api/html/taylor__nfft_8c.html b/doc/api/html/taylor__nfft_8c.html
new file mode 100644
index 0000000..7a1ad3b
--- /dev/null
+++ b/doc/api/html/taylor__nfft_8c.html
@@ -0,0 +1,349 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - taylor_nfft.c File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">taylor_nfft.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Testing the nfft againt a Taylor expansion based version.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="taylor__nfft_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html">taylor_plan</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8aaec175a64f4ca7e15fcdcd355f56a2"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">taylor_init</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths, int N, int M, int n, int m)</td></tr>
+<tr class="memdesc:a8aaec175a64f4ca7e15fcdcd355f56a2"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan.  <a href="#a8aaec175a64f4ca7e15fcdcd355f56a2"></a><br/></td></tr>
+<tr class="memitem:a13b127b1ecbbd640bd30123c635940a5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">taylor_precompute</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths)</td></tr>
+<tr class="memdesc:a13b127b1ecbbd640bd30123c635940a5"><td class="mdescLeft"> </td><td class="mdescRight">Precomputation of weights and indices in Taylor expansion.  <a href="#a13b127b1ecbbd640bd30123c635940a5"></a><br/></td></tr>
+<tr class="memitem:a10f336e1a24851643775a0da2f338c65"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">taylor_finalize</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths)</td></tr>
+<tr class="memdesc:a10f336e1a24851643775a0da2f338c65"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a transform plan.  <a href="#a10f336e1a24851643775a0da2f338c65"></a><br/></td></tr>
+<tr class="memitem:ada016505d50bb2473ce6061a342d7e20"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">taylor_trafo</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths)</td></tr>
+<tr class="memdesc:ada016505d50bb2473ce6061a342d7e20"><td class="mdescLeft"> </td><td class="mdescRight">Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Taylor expansion for j=0,...,M-1 f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])  <a href="#ada016505d50bb2473ce6061a342d7e20"></a><br/></td></tr>
+<tr class="memitem:a7ef2d41455ffa60a2f001c4981d4cf97"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">taylor_time_accuracy</a> (int N, int M, int n, int m, int n_taylor, int m_taylor, unsigned test_accuracy)</td></tr>
+<tr class="memdesc:a7ef2d41455ffa60a2f001c4981d4cf97"><td class="mdescLeft"> </td><td class="mdescRight">Compares NDFT, NFFT, and Taylor-NFFT.  <a href="#a7ef2d41455ffa60a2f001c4981d4cf97"></a><br/></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Testing the nfft againt a Taylor expansion based version. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis</dd></dl>
+<p>References: Time and memory requirements of the Nonequispaced FFT </p>
+
+<p>Definition in file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a8aaec175a64f4ca7e15fcdcd355f56a2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void taylor_init </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+          <td class="paramname"><em>ths</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan. </p>
+<ul>
+<li>ths The pointer to a taylor plan </li>
+<li>N The multi bandwidth </li>
+<li>M The number of nodes </li>
+<li>n The fft length </li>
+<li>m The order of the Taylor expansion</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00064">64</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, and <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc()</a>.</p>
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13b127b1ecbbd640bd30123c635940a5"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void taylor_precompute </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Precomputation of weights and indices in Taylor expansion. </p>
+<ul>
+<li>ths The pointer to a taylor plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00083">83</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::M_total</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::n</a>, and <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::x</a>.</p>
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a10f336e1a24851643775a0da2f338c65"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void taylor_finalize </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destroys a transform plan. </p>
+<ul>
+<li>ths The pointer to a taylor plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis, Daniel Potts </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00105">105</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, and <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>.</p>
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada016505d50bb2473ce6061a342d7e20"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void taylor_trafo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+          <td class="paramname"><em>ths</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Taylor expansion for j=0,...,M-1 f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j]) </p>
+<ul>
+<li>ths The pointer to a taylor plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00123">123</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::g1</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::g2</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, <a class="el" href="nfft3_8h_source.html#l0 [...]
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7ef2d41455ffa60a2f001c4981d4cf97"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void taylor_time_accuracy </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n_taylor</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m_taylor</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>test_accuracy</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compares NDFT, NFFT, and Taylor-NFFT. </p>
+<ul>
+<li>N The bandwidth </li>
+<li>N The number of nodes </li>
+<li>n The FFT-size for the NFFT </li>
+<li>m The cut-off for window function </li>
+<li>n_taylor The FFT-size for the Taylor-NFFT </li>
+<li>m_taylor The order of the Taylor approximation </li>
+<li>test_accuracy Flag for NDFT computation</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00179">179</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::M_total</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::N_total</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::nfft_flags</a>, <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="nfft3_8h.htm [...]
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/taylor__nfft_8c_source.html b/doc/api/html/taylor__nfft_8c_source.html
new file mode 100644
index 0000000..766b451
--- /dev/null
+++ b/doc/api/html/taylor__nfft_8c_source.html
@@ -0,0 +1,321 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - taylor_nfft.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">taylor_nfft.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="taylor__nfft_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: taylor_nfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="structtaylor__plan.html">   44</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">   46</a></span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> <a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>;                          </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">   48</a></span>   <span class="keywordtype">int</span> *idx0;                            </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">   50</a></span>   <span class="keywordtype">double</span> *<a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>;                      </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> } <a class="code" href="structtaylor__plan.html">taylor_plan</a>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">   64</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2" title="Initialisation of a transform plan.">taylor_init</a>(<a class="code" href="structtaylor__plan.html">taylor_plan</a> *ths, <span class="keywordtype">int</span> N, <span class [...]
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="comment">/* Note: no nfft precomputation! */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   nfft_init_guru((<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths, 1, &N, M, &n, m,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                  MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>      FFTW_ESTIMATE| FFTW_PRESERVE_INPUT);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   ths-><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19" title="index of next neighbour of x_j on the oversampled regular grid">idx0</a>=(<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>=(<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">   83</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5" title="Precomputation of weights and indices in Taylor expansion.">taylor_precompute</a>(<a class="code" href="structtaylor__plan.html">taylor_plan</a> *ths)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a>* cths=(<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">for</span>(j=0;j<cths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       ths-><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19" title="index of next neighbour of x_j on the oversampled regular grid">idx0</a>[j] = ((int)round((cths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j]+0.5)*cths-><a class="code" href="structnfft__plan.html#aa8db04bb0 [...]
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                  cths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0]/2)%cths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>[j] = cths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>[j] - (round((cths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in  [...]
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                                       cths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0] - 0.5);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">  105</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65" title="Destroys a transform plan.">taylor_finalize</a>(<a class="code" href="structtaylor__plan.html">taylor_plan</a> *ths)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19" title="index of next neighbour of x_j on the oversampled regular grid">idx0</a>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   nfft_finalize((<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">  123</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20" title="Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Ta...">taylor_trafo</a>(<a class="code" href="structtaylor__plan.html">tay [...]
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">int</span> j,k,l,ll;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">double</span> _Complex *f, *f_hat, *g1;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">double</span> *deltax;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> *idx;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> *cths=(<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordflow">for</span>(j=0, f=cths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<cths->M_total; j++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     *f++ = 0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordflow">for</span>(k=0; k<cths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>[k]=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">for</span>(k=-cths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+cths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total s [...]
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       f_hat=cths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<0; k++)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     (*g1++)=cpow( - 2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k,cths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>)* (*f_hat++);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>[0]=cths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[cths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of F [...]
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">for</span>(k=1, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+1, f_hat=cths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>+cths-><a class="code" href="structnfft__plan.html#ad33dadd [...]
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       k<cths->N_total/2; k++)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     (*g1++)=cpow( - 2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k,cths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>)* (*f_hat++);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">for</span>(l=cths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>-1; l>=0; l--)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       <span class="keywordflow">for</span>(k=-cths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+cths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Tot [...]
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>           k<0; k++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         (*g1++) /= (-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       <span class="keywordflow">for</span>(k=1, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+1; k<cths->N_total/2; k++)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         (*g1++) /= (-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       fftw_execute(cths->my_fftw_plan1);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       ll=(l==0?1:l);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       <span class="keywordflow">for</span>(j=0, f=cths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, deltax=ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>, idx=ths-><a class="code" href="structtaylor__plan.html [...]
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           j++, f++)</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   (*f) = ((*f) * (*deltax++) + cths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>[*idx++]) /ll;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">  179</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int [...]
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                           <span class="keywordtype">int</span> m_taylor, <span class="keywordtype">unsigned</span> test_accuracy)</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordtype">double</span> t_ndft, t_nfft, t_taylor, t;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keywordtype">double</span> _Complex *swapndft = NULL;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   ticks t0, t1;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <a class="code" href="structtaylor__plan.html">taylor_plan</a> tp;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <a class="code" href="structnfft__plan.html">nfft_plan</a> np;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   printf(<span class="stringliteral">"%d\t%d\t"</span>,N, M);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <a class="code" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2" title="Initialisation of a transform plan.">taylor_init</a>(&tp,N,M,n_taylor,m_taylor);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   nfft_init_guru(&np, 1, &N, M, &n, m,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                  PRE_PHI_HUT| PRE_FG_PSI|</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>      FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>      FFTW_ESTIMATE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>=tp.<a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   np.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=tp.<a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients,  [...]
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=tp.<a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is  doubles.">x</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total numbe [...]
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <a class="code" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5" title="Precomputation of weights and indices in Taylor expansion.">taylor_precompute</a>(&tp);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">if</span>(np.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     nfft_precompute_one_psi(&np);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(np.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, np.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0 [...]
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       t_ndft=0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       r=0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       <span class="keywordflow">while</span>(t_ndft<0.01)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>           r++;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>           t0 = getticks();</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>           nfft_trafo_direct(&np);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>           t1 = getticks();</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>           t_ndft+=t;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       t_ndft/=r;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       printf(<span class="stringliteral">"%.2e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   t_nfft=0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   r=0;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordflow">while</span>(t_nfft<0.01)</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       r++;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       t0 = getticks();</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&np);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       t1 = getticks();</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>       t_nfft+=t;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   t_nfft/=r;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   printf(<span class="stringliteral">"%.2f\t%d\t%.2e\t"</span>,((<span class="keywordtype">double</span>)n)/N, m, t_nfft);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     printf(<span class="stringliteral">"%.2e\t"</span>,X(error_l_infty_complex)(swapndft, np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   t_taylor=0;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   r=0;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordflow">while</span>(t_taylor<0.01)</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       r++;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       t0 = getticks();</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>       <a class="code" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20" title="Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Ta...">taylor_trafo</a>(&tp);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       t1 = getticks();</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       t_taylor+=t;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   t_taylor/=r;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   printf(<span class="stringliteral">"%.2f\t%d\t%.2e\t"</span>,((<span class="keywordtype">double</span>)n_taylor)/N,m_taylor,t_taylor);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     printf(<span class="stringliteral">"%.2e\n"</span>,X(error_l_infty_complex)(swapndft, np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     printf(<span class="stringliteral">"nan\t\n"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   fflush(stdout);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   nfft_finalize(&np);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <a class="code" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65" title="Destroys a transform plan.">taylor_finalize</a>(&tp);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordtype">int</span> l,m,trial,N;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       fprintf(stderr,<span class="stringliteral">"taylor_nfft type first last trials sigma_nfft sigma_taylor.\n"</span>);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   fprintf(stderr,<span class="stringliteral">"Testing the Nfft & a Taylor expansion based version.\n\n"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   fprintf(stderr,<span class="stringliteral">"Columns: N, M, t_ndft, sigma_nfft, m_nfft, t_nfft, e_nfft"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   fprintf(stderr,<span class="stringliteral">", sigma_taylor, m_taylor, t_taylor, e_taylor\n"</span>);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="comment">/* time vs. N=M */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       fprintf(stderr,<span class="stringliteral">"Fixed target accuracy, timings.\n\n"</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>           <span class="keywordflow">if</span>(l<=10)</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>             <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>((1U<< l), (1U<< l), (<span class="keywordtype">int</span>)(atof(argv[5])*</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                                  (1U<< l)), 6, (<span class="keywordtype">int</span>)(atof(argv[6])*(1U<< l)),</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                                  6, 1);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>((1U<< l), (1U<< l), (<span class="keywordtype">int</span>)(atof(argv[5])*</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                                  (1U<< l)), 6, (<span class="keywordtype">int</span>)(atof(argv[6])*(1U<< l)),</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                                  6, 0);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="comment">/* error vs. m */</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       N=atoi(argv[7]);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       fprintf(stderr,<span class="stringliteral">"Fixed N=M=%d, error vs. m.\n\n"</span>,N);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       <span class="keywordflow">for</span>(m=atoi(argv[2]); m<=atoi(argv[3]); m++)</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>           <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>(N,N, (<span class="keywordtype">int</span>)(atof(argv[5])*N), m,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                                     (<span class="keywordtype">int</span>)(atof(argv[6])*N), m, 1);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/ticks_8h_source.html b/doc/api/html/ticks_8h_source.html
new file mode 100644
index 0000000..2d623e4
--- /dev/null
+++ b/doc/api/html/ticks_8h_source.html
@@ -0,0 +1,84 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - ticks.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ticks.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: infft.h 3471 2010-04-08 21:43:41Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#ifndef TICKS_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#define TICKS_H_</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "cycle.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#define TICKS_PER_SECOND 3109267833.0</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> ticks;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">  #define getticks() 0U;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span>  INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif </span><span class="comment">/* TICKS_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/util_8c_source.html b/doc/api/html/util_8c_source.html
new file mode 100644
index 0000000..be8272a
--- /dev/null
+++ b/doc/api/html/util_8c_source.html
@@ -0,0 +1,1387 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - util.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_23ec12649285f9fabf3a6b7380226c28.html">util</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">util.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: util.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <sys/time.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cstripack.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keywordtype">double</span> nfft_elapsed_seconds(ticks t1, ticks t0)</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   UNUSED(t1);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   UNUSED(t0);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">return</span> elapsed(t1,t0) / TICKS_PER_SECOND;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> }</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">   55</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">int</span> t, prod;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   prod=1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     prod *= vec[t];</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">   68</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> a, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordtype">int</span> t, prod;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   prod=1;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     prod *= vec[t]-a;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">   81</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd" title="Computes .">nfft_plain_loop</a>(<span class="keywordtype">int</span> *idx,<span class="keywordtype">int</span> *N,<span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   <span class="keywordtype">int</span> t,sum;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   sum = idx[0];</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordflow">for</span> (t = 1; t < d; t++)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     sum = sum * N[t] + idx[t];</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">   94</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb" title="Computes double .">nfft_prod_real</a>(<span class="keywordtype">double</span> *vec,<span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordtype">double</span> prod;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   prod=1.0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     prod*=vec[t];</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keyword">static</span> <span class="keywordtype">void</span> bspline_help(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> *scratch, <span class="keywordtype">int</span> j, <span class="keywordtype">int</span> ug,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">int</span> og, <span class="keywordtype">int</span> r)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">int</span> i; <span class="comment">/* row index of the de Boor scheme */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">int</span> idx; <span class="comment">/* index in scratch */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">double</span> a; <span class="comment">/* alpha of the de Boor scheme */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="comment">/* computation of one column */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">for</span> (i = og + r - k + 1, idx = og; idx >= ug; i--, idx--)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     a = ((R)(x - i)) / ((R)(k - j));</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     scratch[idx] = (1 - a) * scratch[idx-1] + a * scratch[idx];</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> } <span class="comment">/* bspline_help */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">  124</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc" title="Computes the B-spline , scratch is used for de Boor's scheme.">nfft_bspline</a>(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span [...]
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">double</span> result_value;                  </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">int</span> r;                                </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> g1,g2;                            </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">int</span> j,idx,ug,og;                    </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">double</span> a;                             </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   result_value=0.0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordflow">if</span>(0<x && x<k)</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       <span class="comment">/* using symmetry around k/2 */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       <span class="keywordflow">if</span>((k-x)<x) x=k-x;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       r=(int)(ceil(x)-1.0);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       <span class="keywordflow">for</span>(idx=0; idx<k; idx++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   scratch[idx]=0.0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       scratch[k-r-1]=1.0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       <span class="comment">/* bounds of the algorithm */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       g1 = r;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       g2 = k - 1 - r;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       ug = g2;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       <span class="comment">/* g1<=g2 holds */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       <span class="keywordflow">for</span>(j=1, og=g2+1; j<=g1; j++, og++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     a = (x - r + k - 1 - og)/(k - j);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     scratch[og] = (1 - a) * scratch[og-1];</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     bspline_help(k,x,scratch,j,ug+1,og-1,r);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     a = (x - r + k - 1 - ug)/(k - j);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     scratch[ug] = a * scratch[ug];</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       <span class="keywordflow">for</span>(og-- ; j<=g2; j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     bspline_help(k,x,scratch,j,ug+1,og,r);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     a = (x - r + k - 1 - ug)/(k - j);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     scratch[ug] = a * scratch[ug];</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       <span class="keywordflow">for</span>( ; j<k; j++)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     ug++;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     bspline_help(k,x,scratch,j,ug,og,r);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       result_value = scratch[k-1];</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">return</span>(result_value);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> } <span class="comment">/* bspline */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">for</span>(k=0,dot=0; k<n; k++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     dot+=conj(x[k])*x[k];</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">  191</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordflow">for</span>(k=0,dot=0; k<n; k++)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     dot+=x[k]*x[k];</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     dot+=w[k]*conj(x[k])*x[k];</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">  218</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     dot+=w[k]*x[k]*x[k];</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674" title="Computes the weighted inner/dot product .">nfft_dot_w_w2_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *w2, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     dot+=w[k]*w2[k]*w2[k]*conj(x[k])*x[k];</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075" title="Computes the weighted inner/dot product .">nfft_dot_w2_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w2, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     dot+=w2[k]*w2[k]*conj(x[k])*x[k];</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     x[k]=y[k];</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">  270</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     x[k]=y[k];</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25" title="Copies .">nfft_cp_a_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     x[k]=a*y[k];</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">  290</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759" title="Copies .">nfft_cp_a_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> {</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     x[k]=a*y[k];</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     x[k]=w[k]*y[k];</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">  311</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     x[k]=w[k]*y[k];</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     x[k]=a*x[k]+y[k];</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">  333</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     x[k]=a*x[k]+y[k];</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     x[k]+=a*y[k];</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">  354</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     x[k]+=a*y[k];</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d" title="Updates .">nfft_upd_axpby_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">double</span> b, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     x[k]=a*x[k]+b*y[k];</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">  376</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d" title="Updates .">nfft_upd_axpby_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     x[k]=a*x[k]+b*y[k];</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> }</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     x[k]+=a*w[k]*y[k];</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">  397</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     x[k]+=a*w[k]*y[k];</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8" title="Updates .">nfft_upd_axpwy_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     x[k]=a*x[k]+w[k]*y[k];</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">  419</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a" title="Updates .">nfft_upd_axpwy_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     x[k]=a*x[k]+w[k]*y[k];</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span>* N)</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> {</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <span class="keywordtype">int</span> d_pre, d_act, d_post;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keywordtype">int</span> N_pre, N_act, N_post;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <span class="keywordtype">int</span> k_pre, k_act, k_post;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <span class="keywordtype">int</span> k,k_swap;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   <span class="keywordtype">double</span> _Complex x_swap;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordflow">for</span>(d_act=0;d_act<d;d_act++)</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>       <span class="keywordflow">for</span>(d_pre=0, N_pre=1;d_pre<d_act;d_pre++)</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   N_pre*=N[d_pre];</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>       N_act=N[d_act];</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>       <span class="keywordflow">for</span>(d_post=d_act+1, N_post=1;d_post<d;d_post++)</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   N_post*=N[d_post];</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>       <span class="keywordflow">for</span>(k_pre=0;k_pre<N_pre;k_pre++)</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   <span class="keywordflow">for</span>(k_act=0;k_act<N_act/2;k_act++)</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">for</span>(k_post=0;k_post<N_post;k_post++)</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>         k=(k_pre*N_act+k_act)*N_post+k_post;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>         k_swap=(k_pre*N_act+k_act+N_act/2)*N_post+k_post;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         x_swap=x[k];</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         x[k]=x[k_swap];</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         x[k_swap]=x_swap;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>       }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">  463</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409" title="Prints a vector of integer numbers.">nfft_vpr_int</a>(<span class="keywordtype">int</span> *x, <span class="keywordtype">int</span> n, <span class="keywordtype">char</span> *text)</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   <span class="keywordflow">if</span>(text!=NULL)</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       printf (<span class="stringliteral">"\n %s, adr=%p\n"</span>, text, (<span class="keywordtype">void</span>*)x);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       <span class="keywordflow">for</span> (k=0; k<n; k++)</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>       {</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     <span class="keywordflow">if</span> (k%8==0)</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         printf(<span class="stringliteral">"%6d.\t"</span>, k);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     printf(<span class="stringliteral">"%d,"</span>, x[k]);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     <span class="keywordflow">if</span> (k%8==7)</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>       <span class="keywordflow">if</span> (n%8!=0)</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>         printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>       <span class="keywordflow">for</span> (k=0; k<n; k++)</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     printf(<span class="stringliteral">"%d,\n"</span>, x[k]);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   fflush(stdout);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="keywordtype">void</span> X(vpr_double)(R *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text)</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   <span class="keywordflow">if</span> (x == NULL)</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     printf(<span class="stringliteral">"null pointer\n"</span>);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     fflush(stdout);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     exit(-1);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   }</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   <span class="keywordflow">if</span> (text != NULL)</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   {</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     printf (<span class="stringliteral">"\n %s, adr=%p\n"</span>, text, (<span class="keywordtype">void</span>*)x);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     {</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>       <span class="keywordflow">if</span> (k%8 == 0)</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         printf(<span class="stringliteral">"%6d.\t"</span>, k);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>       printf(<span class="stringliteral">"%+.1"</span> FE <span class="stringliteral">","</span>, x[k]);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>       <span class="keywordflow">if</span> (k%8 == 7)</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     }</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     <span class="keywordflow">if</span> (n%8 != 0)</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       printf(<span class="stringliteral">"%+"</span> FE <span class="stringliteral">",\n"</span>, x[k]);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   fflush(stdout);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="keywordtype">void</span> X(vpr_complex)(C *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text)</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   <span class="keywordflow">if</span>(text != NULL)</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     printf(<span class="stringliteral">"\n %s, adr=%p\n"</span>, text, (<span class="keywordtype">void</span>*)x);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       <span class="keywordflow">if</span> (k%4 == 0)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>         printf(<span class="stringliteral">"%6d.\t"</span>, k);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>       printf(<span class="stringliteral">"%+.1"</span> FE <span class="stringliteral">"%+.1"</span> FE <span class="stringliteral">"i,"</span>, CREAL(x[k]), CIMAG(x[k]));</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>       <span class="keywordflow">if</span> (k%4==3)</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     }</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="keywordflow">if</span> (n%4!=0)</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>       printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   }</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>       printf(<span class="stringliteral">"%+"</span> FE <span class="stringliteral">"%+"</span> FE <span class="stringliteral">"i,\n"</span>, CREAL(x[k]), CIMAG(x[k]));</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   fflush(stdout);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> }</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="keywordtype">void</span> X(vrand_unit_complex)(C *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> {</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     x[k] = nfft_drand48() + II*nfft_drand48();</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="keywordtype">void</span> X(vrand_shifted_unit_double)(R *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> {</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     x[k] = nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="keywordtype">void</span> X(voronoi_weights_1d)(R *w, R *x, <span class="keyword">const</span> <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> {</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   w[0] = (x[1]-x[0])/K(2.0);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordflow">for</span>(j = 1; j < M-1; j++)</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     w[j] = (x[j+1]-x[j-1])/K(2.0);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   w[M-1] = (x[M-1]-x[M-2])/K(2.0);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> }</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">  581</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994" title="Computes voronoi weights for nodes on the sphere S^2.">nfft_voronoi_weights_S2</a>(<span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *xi, <span class="keywordtype">int</span [...]
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   <span class="keywordtype">double</span> *x;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="keywordtype">double</span> *y;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keywordtype">double</span> *z;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   <span class="keywordtype">int</span> el;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="keywordtype">int</span> Mlocal = M;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="keywordtype">int</span> lnew;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keywordtype">int</span> ier;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   <span class="keywordtype">int</span> *list;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   <span class="keywordtype">int</span> *lptr;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="keywordtype">int</span> *lend;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   <span class="keywordtype">int</span> *near;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   <span class="keywordtype">int</span> *next;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   <span class="keywordtype">double</span>  *dist;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   <span class="keywordtype">int</span> *ltri;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   <span class="keywordtype">int</span> *listc;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="keywordtype">int</span> nb;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="keywordtype">double</span> *xc;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   <span class="keywordtype">double</span> *yc;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="keywordtype">double</span> *zc;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="keywordtype">double</span> *rc;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="keywordtype">double</span> *vr;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="keywordtype">int</span> lp;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="keywordtype">int</span> lpl;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   <span class="keywordtype">int</span> kv;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   <span class="keywordtype">double</span> a;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   <span class="comment">/* Allocate memory for auxilliary arrays. */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   x = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   y = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   z = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   list = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M-12+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>   lptr = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M-12+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   lend = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   near = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   next = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   dist = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   ltri = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   listc = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M-12+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   xc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   yc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   zc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   rc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   vr = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*(2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   <span class="comment">/* Convert from spherical Coordinates in [0,1/2]x[-1/2,1/2) to Cartesian</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="comment">   * coordinates. */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     x[k] = sin(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k+1])*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k]);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     y[k] = sin(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k+1])*sin(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k]);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     z[k] = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k+1]);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   }</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   <span class="comment">/* Generate Delaunay triangulation. */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   trmesh_(&Mlocal, x, y, z, list, lptr, lend, &lnew, near, next, dist, &ier);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   <span class="comment">/* Check error flag. */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   <span class="keywordflow">if</span> (ier == 0)</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   {</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     <span class="comment">/* Get Voronoi vertices. */</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     crlist_(&Mlocal, &Mlocal, x, y, z, list, lend, lptr, &lnew, ltri, listc, &nb, xc,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       yc, zc, rc, &ier);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="keywordflow">if</span> (ier == 0)</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     {</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       <span class="comment">/* Calcuate sizes of Voronoi regions. */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>       {</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         <span class="comment">/* Get last neighbour index. */</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         lpl = lend[k];</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         lp = lpl;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         j = 0;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         vr[3*j] = x[k];</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         vr[3*j+1] = y[k];</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>         vr[3*j+2] = z[k];</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         <span class="keywordflow">do</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>           j++;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>           <span class="comment">/* Get next neighbour. */</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>           lp = lptr[lp-1];</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>           kv = listc[lp-1];</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>           vr[3*j] = xc[kv-1];</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>           vr[3*j+1] = yc[kv-1];</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>           vr[3*j+2] = zc[kv-1];</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>           <span class="comment">/* fprintf(stderr, "lp = %ld\t", lp); */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         } <span class="keywordflow">while</span> (lp != lpl);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         a = 0;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         <span class="keywordflow">for</span> (el = 0; el < j; el++)</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         {</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>           a += areas_(vr, &vr[3*(el+1)],&vr[3*(((el+1)%j)+1)]);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         }</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         w[k] = a;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       }</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   <span class="comment">/* Deallocate memory. */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(y);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(z);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(list);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(lptr);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(lend);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(near);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(next);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(dist);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ltri);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(listc);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(xc);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(yc);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(zc);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(rc);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(vr);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> R X(modified_fejer)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> {</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="keywordflow">return</span> (K(2.0)/((R)(N*N))*(K(1.0)-FABS(K(2.0)*kk+K(1.0))/((R)N)));</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> }</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> R X(modified_jackson2)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> {</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   <span class="keywordtype">int</span> kj;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   <span class="keyword">const</span> R n=(N/K(2.0)+K(1.0))/K(2.0);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   R result, k;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk+1; kj++)</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>   {</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     k = ABS(kj);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     <span class="keywordflow">if</span>(k/n < K(1.0))</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>       result += K(1.0) - (K(3.0)*k + K(6.0)*n*POW(k,K(2.0))</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>         - K(3.0)*POW(k,K(3.0)))/(K(2.0)*n*(K(2.0)*POW(n,K(2.0))+K(1.0)));</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>       result+= (K(2.0)*n-k)*(POW(2*n-k,K(2.0))-K(1.0))/(K(2.0)</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         *n*(K(2.0)*POW(n,K(2.0))+K(1.0)));</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   }</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> R X(modified_jackson4)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> {</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   <span class="keywordtype">int</span> kj;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   <span class="keyword">const</span> R n = (N/K(2.0)+K(3.0))/K(4.0), normalisation = (K(2416.0)*POW(n,K(7.0))</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     + K(1120.0)*POW(n,K(5.0)) + K(784.0)*POW(n,K(3.0)) + K(720.0)*n);</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   R result, k;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk + 1; kj++)</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     k = ABS(kj);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="keywordflow">if</span> (k/n < K(1.0))</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>       result += K(1.0) - (K(1260.0)*k + (K(1680.0)*POW(n, K(5.0))</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         + K(2240.0)*POW(n, K(3.0)) + K(2940.0)*n)*POW(k, K(2.0))</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         - K(1715.0)*POW(k, K(3.0)) - (K(560.0)*POW(n, K(3.0))</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>         + K(1400.0)*n)*POW(k, K(4.0)) + K(490.0)*POW(k, K(5.0))</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         + K(140.0)*n*POW(k, K(6.0)) - K(35.0)*POW(k,K(7.0)))/normalisation;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordflow">if</span> ((K(1.0) <= k/n) && (k/n < K(2.0)))</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>       result += ((K(2472.0)*POW(n, K(7.0)) + K(336.0)*POW(n, K(5.0))</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>         + K(3528.0)*POW(n, K(3.0)) - K(1296.0)*n) - (K(392.0)*POW(n, K(6.0))</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         - K(3920.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(756.0))*k</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>         - (K(504.0)*POW(n, K(5.0)) + K(10080.0)*POW(n, K(3.0))</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>         - K(5292.0)*n)*POW(k, K(2.0)) - (K(1960.0)*POW(n, K(4.0))</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         - K(7840.0)*POW(n, K(2.0)) + K(1029.0))*POW(k, K(3.0))</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         + (K(2520.0)*POW(n, K(3.0)) - K(2520.0)*n) * POW(k, K(4.0))</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>         - (K(1176.0)*POW(n, K(2.0)) - K(294.0)) * POW(k, K(5.0))</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         + K(252.0)*n*POW(k, K(6.0)) - K(21.0)*POW(k, K(7.0)))/normalisation;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     <span class="keywordflow">if</span> ((K(2.0) <= k/n) && (k/n < K(3.0)))</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>       result += (-(K(1112.0)*POW(n, K(7.0)) - K(12880.0)*POW(n, K(5.0))</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         + K(7448.0)*POW(n, K(3.0)) - K(720.0)*n) + (K(12152.0)*POW(n, K(6.0))</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         - K(27440.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(252.0))*k</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         - (K(19320.0)*POW(n, K(5.0)) - K(21280.0)*POW(n, K(3.0))</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         + K(2940.0)*n)*POW(k, K(2.0)) + (K(13720.0)*POW(n, K(4.0))</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>         - K(7840.0)*POW(n, K(2.0)) + K(343.0))*POW(k, K(3.0))</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         - (K(5320.0)*POW(n, K(3.0)) - K(1400.0)*n)*POW(k, K(4.0))</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         + (K(1176.0)*POW(n, K(2.0)) - K(98.0))*POW(k, K(5.0))</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>         - K(140.0)*n*POW(k, K(6.0)) + K(7.0) * POW(k, K(7.0)))/normalisation;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     <span class="keywordflow">if</span> ((K(3.0) <= k/n) && (k/n < K(4.0)))</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>       result += ((4*n-k)*(POW(4*n-k, K(2.0)) - K(1.0))*(POW(4*n-k, K(2.0))</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>         - K(4.0))*(POW(4*n-k, K(2.0)) - K(9.0)))/normalisation;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   }</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> R X(modified_sobolev)(<span class="keyword">const</span> R mu, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> {</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   R result;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">int</span> kj, k;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>   <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk+1; kj++)</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   {</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     k = ABS(kj);</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>       result += K(1.0);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>       result += POW((<span class="keywordtype">double</span>)k,-K(2.0)*mu);</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> }</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> R X(modified_multiquadric)(<span class="keyword">const</span> R mu, <span class="keyword">const</span> R c, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   R result;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   <span class="keywordtype">int</span> kj, k;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk+1; kj++)</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>       k = ABS(kj);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>       result += POW((<span class="keywordtype">double</span>)(k*k + c*c), -mu);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     }</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> }</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> scaled_modified_bessel_i_series(<span class="keyword">const</span> R x, <span class="keyword">const</span> R <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated  [...]
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> nb, <span class="keyword">const</span> <span class="keywordtype">int</span> ize, R *b)</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   <span class="keyword">const</span> R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   R tempa = K(1.0), empal = K(1.0) + <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, halfx = K(0.0), tempb = K(0.0);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   <span class="keywordtype">int</span> n, ncalc = nb;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   <span class="keywordflow">if</span> (enmten < x)</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     halfx = x/K(2.0);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="keywordflow">if</span> (alpha != K(0.0))</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     tempa = POW(halfx, alpha)/TGAMMA(empal);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>   <span class="keywordflow">if</span> (ize == 2)</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     tempa *= EXP(-x);</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>   <span class="keywordflow">if</span> (K(1.0) < x + K(1.0))</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     tempb = halfx*halfx;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   b[0] = tempa + tempa*tempb/empal;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>   <span class="keywordflow">if</span> (x != K(0.0) && b[0] == K(0.0))</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     ncalc = 0;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   <span class="keywordflow">if</span> (nb == 1)</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   <span class="keywordflow">if</span> (K(0.0) < x)</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>   {</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     R tempc = halfx, tover = (enmten + enmten)/x;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     <span class="keywordflow">if</span> (tempb != K(0.0))</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>       tover = enmten/tempb;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     <span class="keywordflow">for</span> (n = 1; n < nb; n++)</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     {</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>       tempa /= empal;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>       empal += K(1.0);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>       tempa *= tempc;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>       <span class="keywordflow">if</span> (tempa <= tover*empal)</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         tempa = K(0.0);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>       b[n] = tempa + tempa*tempb/empal;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>       <span class="keywordflow">if</span> (b[n] == K(0.0) && n < ncalc)</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>         ncalc = n;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     }</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>   }</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     <span class="keywordflow">for</span> (n = 1; n < nb; n++)</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>       b[n] = K(0.0);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> }</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> scaled_modified_bessel_i_normalize(<span class="keyword">const</span> R x,</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>   <span class="keyword">const</span> R alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> nb, <span class="keyword">const</span> <span class="keywordtype">int</span> ize, R *b, <span class="keyword">const</span> R sum_)</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> {</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   <span class="keyword">const</span> R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>   R sum = sum_, tempa;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   <span class="comment">/* Normalize, i.e., divide all b[n] by sum */</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   <span class="keywordflow">if</span> (alpha != K(0.0))</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     sum = sum * TGAMMA(K(1.0) + alpha) * POW(x/K(2.0), -alpha);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>   <span class="keywordflow">if</span> (ize == 1)</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     sum *= EXP(-x);</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   tempa = enmten;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>   <span class="keywordflow">if</span> (K(1.0) < sum)</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     tempa *= sum;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>   <span class="keywordflow">for</span> (n = 1; n <= nb; n++)</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>   {</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     <span class="keywordflow">if</span> (b[n-1] < tempa)</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>       b[n-1] = K(0.0);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     b[n-1] /= sum;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   }</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">  950</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a" title="Calculates the modified bessel function , possibly scaled by , for real non-negative  with ...">nfft_smbi</a>(<span class="keyword">const</span> R x, <span class="keyword">const</span> R alpha, <span class="k [...]
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> {</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>   <span class="comment">/* machine dependent parameters */</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>   <span class="comment">/* NSIG   - DECIMAL SIGNIFICANCE DESIRED.  SHOULD BE SET TO */</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>   <span class="comment">/*          IFIX(ALOG10(2)*NBIT+1), WHERE NBIT IS THE NUMBER OF */</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   <span class="comment">/*          BITS IN THE MANTISSA OF A WORKING PRECISION VARIABLE. */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   <span class="comment">/*          SETTING NSIG LOWER WILL RESULT IN DECREASED ACCURACY */</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>   <span class="comment">/*          WHILE SETTING NSIG HIGHER WILL INCREASE CPU TIME */</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>   <span class="comment">/*          WITHOUT INCREASING ACCURACY.  THE TRUNCATION ERROR */</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>   <span class="comment">/*          IS LIMITED TO A RELATIVE ERROR OF T=.5*10**(-NSIG). */</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>   <span class="comment">/* ENTEN  - 10.0 ** K, WHERE K IS THE LARGEST int SUCH THAT */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>   <span class="comment">/*          ENTEN IS MACHINE-REPRESENTABLE IN WORKING PRECISION. */</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   <span class="comment">/* ENSIG  - 10.0 ** NSIG. */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>   <span class="comment">/* RTNSIG - 10.0 ** (-K) FOR THE SMALLEST int K SUCH THAT */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   <span class="comment">/*          K .GE. NSIG/4. */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>   <span class="comment">/* ENMTEN - THE SMALLEST ABS(X) SUCH THAT X/4 DOES NOT UNDERFLOW. */</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>   <span class="comment">/* XLARGE - UPPER LIMIT ON THE MAGNITUDE OF X WHEN IZE=2.  BEAR */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>   <span class="comment">/*          IN MIND THAT IF ABS(X)=N, THEN AT LEAST N ITERATIONS */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>   <span class="comment">/*          OF THE BACKWARD RECURSION WILL BE EXECUTED. */</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   <span class="comment">/* EXPARG - LARGEST WORKING PRECISION ARGUMENT THAT THE LIBRARY */</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>   <span class="comment">/*          EXP ROUTINE CAN HANDLE AND UPPER LIMIT ON THE */</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>   <span class="comment">/*          MAGNITUDE OF X WHEN IZE=1. */</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> nsig = MANT_DIG + 2;</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>   <span class="keyword">const</span> R enten = nfft_float_property(NFFT_R_MAX);</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>   <span class="keyword">const</span> R ensig = POW(K(10.0),(R)nsig);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>   <span class="keyword">const</span> R rtnsig = POW(K(10.0),-CEIL((R)nsig/K(4.0)));</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>   <span class="keyword">const</span> R xlarge = K(1E4);</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>   <span class="keyword">const</span> R exparg = FLOOR(LOG(POW(K(R_RADIX),K(DBL_MAX_EXP-1))));</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>   <span class="comment">/* System generated locals */</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>   <span class="keywordtype">int</span> l, n, nend, magx, nbmx, ncalc, nstart;</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>   R p, em, en, sum, pold, test, empal, tempa, tempb, tempc, psave, plast, tover,</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     emp2al, psavel;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>   magx = LRINT(FLOOR(x));</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>   <span class="comment">/* return if x, nb, or ize out of range */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>   <span class="keywordflow">if</span> (   nb <= 0 || x < K(0.0) || alpha < K(0.0) || K(1.0) <= alpha</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>       || ((ize != 1 || exparg < x) && (ize != 2 || xlarge < x)))</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     <span class="keywordflow">return</span> (MIN(nb,0) - 1);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> </div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   <span class="comment">/* 2-term ascending series for small x */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>   <span class="keywordflow">if</span> (x < rtnsig)</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordflow">return</span> scaled_modified_bessel_i_series(x,alpha,nb,ize,b);</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>   ncalc = nb;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>   <span class="comment">/* forward sweep, Olver's p-sequence */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>   nbmx = nb - magx;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>   n = magx + 1;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>   en = (R) (n+n) + (alpha+<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>   plast = K(1.0);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>   p = en/x;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>   <span class="comment">/* significance test */</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>   test = ensig + ensig;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>   <span class="keywordflow">if</span> ((5*nsig) < (magx << 1))</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     test = SQRT(test*p);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     test /= POW(K(1.585),(R)magx);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   <span class="keywordflow">if</span> (3 <= nbmx)</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   {</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="comment">/* calculate p-sequence until n = nb-1 */</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     tover = enten/ensig;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     nstart = magx+2;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     nend = nb - 1;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     <span class="keywordflow">for</span> (n = nstart; n <= nend; n++)</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>       en += K(2.0);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>       pold = plast;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>       plast = p;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>       p = en*plast/x + pold;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>       <span class="keywordflow">if</span> (p > tover)</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>       {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         <span class="comment">/* divide p-sequence by tover to avoid overflow. Calculate p-sequence</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment">         * until 1 <= |p| */</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         tover = enten;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         p /= tover;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>         plast /= tover;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         psave = p;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>         psavel = plast;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         nstart = n + 1;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         <span class="keywordflow">do</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         {</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>           n++;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>           en += K(2.0);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>           pold = plast;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>           plast = p;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>           p = en*plast/x + pold;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         } <span class="keywordflow">while</span> (p <= K(1.0));</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         tempb = en/x;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         <span class="comment">/* Backward test. Find ncalc as the largest n such that test is passed. */</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>         test = pold*plast*(K(0.5) - K(0.5)/(tempb * tempb))/ensig;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>         p = plast*tover;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>         n--;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>         en -= K(2.0);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>         nend = MIN(nb,n);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>         <span class="keywordflow">for</span> (ncalc = nstart; ncalc <= nend; ncalc++)</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>         {</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>           pold = psavel;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>           psavel = psave;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>           psave = en*psavel/x + pold;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>           <span class="keywordflow">if</span> (test < psave * psavel)</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>         }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>         ncalc--;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>         <span class="keywordflow">goto</span> L80;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>       }</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     }</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     n = nend;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>     en = (R) (n+n) + (alpha+<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     <span class="comment">/* special significance test for 2 <= nbmx */</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     test = FMAX(test,SQRT(plast*ensig)*SQRT(p+p));</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>   }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>   <span class="comment">/* calculate p-sequence until significance test is passed */</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>   <span class="keywordflow">do</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>   {</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     n++;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     en += K(2.0);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     pold = plast;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     plast = p;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     p = en*plast/x + pold;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>   } <span class="keywordflow">while</span> (p < test);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>   <span class="comment">/* Initialize backward recursion and normalization sum. */</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> L80:</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>   n++;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>   en += K(2.0);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>   tempb = K(0.0);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>   tempa = K(1.0)/p;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>   em = (R)(n-1);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>   empal = em + <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>   emp2al = em - K(1.0) + (alpha+<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>   sum = tempa*empal*emp2al/em;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>   nend = n-nb;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>   <span class="keywordflow">if</span> (nend < 0)</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>   {</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     <span class="comment">/* We have n <= nb. So store b[n] and set higher orders to zero */</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     b[n-1] = tempa;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     nend = -nend;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     <span class="keywordflow">for</span> (l = 1; l <= nend; ++l)</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>       b[n-1 + l] = K(0.0);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>   {</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     <span class="keywordflow">if</span> (nend != 0)</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>       <span class="comment">/* recur backward via difference equation, calculating b[n] until n = nb */</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>       <span class="keywordflow">for</span> (l = 1; l <= nend; ++l)</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>       {</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>         n--;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>         en -= K(2.0);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>         tempc = tempb;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         tempb = tempa;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         tempa = en*tempb/x + tempc;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         em -= K(1.0);</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         emp2al -= K(1.0);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>         <span class="keywordflow">if</span> (n == 1)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         <span class="keywordflow">if</span> (n == 2)</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>           emp2al = K(1.0);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>         empal -= K(1.0);</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>         sum = (sum + tempa*empal)*emp2al/em;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>       }</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     }</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> </div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     <span class="comment">/* store b[nb] */</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     b[n-1] = tempa;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     <span class="keywordflow">if</span> (nb <= 1)</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     {</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>       sum = sum + sum + tempa;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     }</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>     <span class="comment">/* calculate and store b[nb-1] */</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     n--;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     en -= 2.0;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>     b[n-1] = en*tempa/x + tempb;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>     <span class="keywordflow">if</span> (n == 1)</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     {</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       sum = sum + sum + b[0];</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>       scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>       <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     }</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     em -= K(1.0);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     emp2al -= K(1.0);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>     <span class="keywordflow">if</span> (n == 2)</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>       emp2al = K(1.0);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>     empal -= K(1.0);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     sum = (sum + b[n-1]*empal)*emp2al/em;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>   }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>   nend = n - 2;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>   <span class="keywordflow">if</span> (nend != 0)</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>   {</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     <span class="comment">/* Calculate and store b[n] until n = 2. */</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>     <span class="keywordflow">for</span> (l = 1; l <= nend; ++l)</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>     {</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>       n--;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>       en -= K(2.0);</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>       b[n-1] = en*b[n]/x + b[n+1];</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>       em -= K(1.0);</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>       emp2al -= K(1.0);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>       <span class="keywordflow">if</span> (n == 2)</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>         emp2al = K(1.0);</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>       empal -= K(1.0);</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>       sum = (sum + b[n-1]*empal)*emp2al/em;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     }</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>   }</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>   <span class="comment">/* calculate b[1] */</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>   b[0] = K(2.0)*empal*b[1]/x + b[2];</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>   sum = sum + sum + b[0];</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>   scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>   <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordtype">void</span> nfft_assertion_failed(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span> *file)</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>   fflush(stdout);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>   fprintf(stderr, <span class="stringliteral">"nfft: %s:%d: assertion failed: %s\n"</span>, file, line, s);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="preprocessor">#ifdef HAVE_ABORT</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="preprocessor"></span>  <span class="comment">/* Use abort function. */</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>   abort();</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor"></span>  <span class="comment">/* Use exit function. */</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>   exit(EXIT_FAILURE);</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment">/* We declare drand48() and srand48() ourselves, if they are is not declared in</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment"> * math.h (e.g. on SuSE 9.3), grrr. */</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="preprocessor">#if HAVE_DECL_DRAND48 == 0</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="preprocessor"></span>  <span class="keyword">extern</span> <span class="keywordtype">double</span> drand48(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SRAND48 == 0</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor"></span>  <span class="keyword">extern</span> <span class="keywordtype">void</span> srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordtype">double</span> nfft_drand48(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> {</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor">#ifdef HAVE_DRAND48</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="preprocessor"></span>  <span class="keywordflow">return</span> drand48();</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="preprocessor"></span>  <span class="keywordflow">return</span> ((R)rand())/((R)RAND_MAX);</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordtype">void</span> nfft_srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span> seed)</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor">#ifdef HAVE_SRAND48</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor"></span>  srand48(seed);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="preprocessor"></span>  srand((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)seed);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> </div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="preprocessor">#define z_swap(_a_, _b_, _t_)     do { (_t_) = (_a_); (_a_) = (_b_); (_b_) = (_t_); } while (0)</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_node_indices_sort_bubble(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys)</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> {</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>   <span class="keywordtype">int</span> i, j, ti;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>   <span class="keywordflow">for</span> (i = 0; i < n; ++i)</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>   {</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     j = i;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>     <span class="keywordflow">while</span> (j > 0 && keys[2 * j + 0] < keys[2 * (j - 1) + 0])</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     {</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>       z_swap(keys[2 * j + 0], keys[2 * (j - 1) + 0], ti);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>       z_swap(keys[2 * j + 1], keys[2 * (j - 1) + 1], ti);</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>       --j;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>   }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> }</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_node_indices_radix_count(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys, <span class="keywordtype">int</span> shift, <span class="keywordtype">int</span> mask, <span class="keywordtype">int</span> *counts)</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> {</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>   <span class="keywordtype">int</span> i, k;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> </div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>   <span class="keywordflow">for</span> (i = 0; i < n; ++i)</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>   {</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     k = (keys[2 * i + 0] >> shift) & mask;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     ++counts[k];</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>   }</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> }</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_node_indices_radix_rearrange(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys_in, <span class="keywordtype">int</span> *keys_out, <span class="keywordtype">int</span> shift, <span class="keywordtype">int</span> mask, <span class="keywordtype">int</span> *displs)</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> {</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>   <span class="keywordtype">int</span> i, k;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> </div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>   <span class="keywordflow">for</span> (i = 0; i < n; ++i)</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>   {</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     k = (keys_in[2 * i + 0] >> shift) & mask;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     keys_out[2 * displs[k] + 0] = keys_in[2 * i + 0];</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     keys_out[2 * displs[k] + 1] = keys_in[2 * i + 1];</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     ++displs[k];</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   }</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738"> 1301</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738" title="Radix sort for node indices.">nfft_sort_node_indices_radix_lsdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span cla [...]
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> {</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> rwidth = 9;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> radix_n = 1 << rwidth;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> radix_mask = radix_n - 1;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> rhigh_in = rhigh;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> tmax =</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="preprocessor"></span>    omp_get_max_threads();</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="preprocessor"></span>    1;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>   <span class="keywordtype">int</span> *from, *to, *tmp;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>   <span class="keywordtype">int</span> i, k, l, h;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>   <span class="keywordtype">int</span> lcounts[tmax * radix_n];</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> </div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>   <span class="keywordtype">int</span> tid = 0, tnum = 1;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>   from = keys0;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   to = keys1;</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>   <span class="keywordflow">while</span> (rhigh >= 0)</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>   {</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="preprocessor"></span><span class="preprocessor">    #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>       tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>       tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>       <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> </div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>       l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>       h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> </div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>       nfft_sort_node_indices_radix_count(h - l, from + (2 * l), rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     k = 0;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i)</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>     {</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>       <span class="keywordflow">for</span> (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>     }</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor"></span><span class="preprocessor">    #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>       tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>       tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>       l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>       h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>       nfft_sort_node_indices_radix_rearrange(h - l, from + (2 * l), to, rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">/*    print_keys(n, to);*/</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     tmp = from;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     from = to;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>     to = tmp;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> </div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     rhigh -= rwidth;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>   }</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>   <span class="keywordflow">if</span> (to == keys0) memcpy(to, from, n * 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> }</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5"> 1383</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5" title="Radix sort for node indices.">nfft_sort_node_indices_radix_msdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span cla [...]
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> {</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> rwidth = 9;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> radix_n = 1 << rwidth;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> radix_mask = radix_n - 1;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> tmax =</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="preprocessor"></span>    omp_get_max_threads();</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="preprocessor"></span>    1;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>   <span class="keywordtype">int</span> i, k, l, h;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>   <span class="keywordtype">int</span> lcounts[tmax * radix_n];</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>   <span class="keywordtype">int</span> counts[radix_n], displs[radix_n];</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>   <span class="keywordtype">int</span> tid = 0, tnum = 1;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>   rhigh -= rwidth;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="preprocessor"></span><span class="preprocessor">  #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     nfft_sort_node_indices_radix_count(h - l, keys0 + (2 * l), rhigh + 1, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>   k = 0;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>   <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i)</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>   {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>     <span class="keywordflow">for</span> (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>     displs[i] = lcounts[0 * radix_n + i];</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>     <span class="keywordflow">if</span> (i > 0) counts[i - 1] = displs[i] - displs[i - 1];</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>   }</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>   counts[radix_n - 1] = n - displs[radix_n - 1];</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="preprocessor"></span><span class="preprocessor">  #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>     tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>     tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>     l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>     h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>     nfft_sort_node_indices_radix_rearrange(h - l, keys0 + (2 * l), keys1, rhigh + 1, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>   memcpy(keys0, keys1, n * 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> </div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>   <span class="keywordflow">if</span> (rhigh >= 0)</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>   {</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i)</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>     {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>       <span class="keywordflow">if</span> (counts[i] > 1)</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>       {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>         <span class="keywordflow">if</span> (counts[i] > 256)</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>           <a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5" title="Radix sort for node indices.">nfft_sort_node_indices_radix_msdf</a>(counts[i], keys0 + 2 * displs[i], keys1 + 2 * displs[i], rhigh);</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>           nfft_sort_node_indices_sort_bubble(counts[i], keys0 + 2 * displs[i]);</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>       }</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     }</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>   }</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> }</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="keywordtype">int</span> nfft_get_num_threads(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> {</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="preprocessor"></span>  <span class="keywordflow">return</span> nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="preprocessor"></span>  <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="preprocessor"></span><span class="keywordtype">int</span> nfft_get_omp_num_threads(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> {</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>   <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="preprocessor">  #pragma omp parallel default(shared)</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="preprocessor"></span>  {</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>     <span class="keywordtype">int</span> n = omp_get_num_threads();</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="preprocessor">    #pragma omp master</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>       nthreads = n;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     }</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>   }</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>   <span class="keywordflow">return</span> nthreads;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> }</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/wigner_8c_source.html b/doc/api/html/wigner_8c_source.html
new file mode 100644
index 0000000..fa41d84
--- /dev/null
+++ b/doc/api/html/wigner_8c_source.html
@@ -0,0 +1,432 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - wigner.c Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">wigner.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: wigner.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "<a class="code" href="wigner_8h.html" title="Header file for functions related to Wigner-d/D functions.">wigner.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">   27</a></span> <span class="keywordtype">double</span> SO3_alpha(<span class="keyword">const</span> <span class="keywordtype">int</span> m1, <span class="keyword">const</span> <span class="keywordtype">int</span> m2, <span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> M = MAX(ABS(m1),ABS(m2)), mini = MIN(ABS(m1),ABS(m2));</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordflow">if</span> (j < 0)</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>     <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j == 0)</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>     <span class="keywordflow">if</span> (m1 == 0 && m2 == 0)</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>       <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>     <span class="keywordflow">if</span> (m1 == m2)</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>       <span class="keywordflow">return</span> K(0.5);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>       <span class="keywordflow">return</span> IF((m1+m2)%2,K(0.0),K(-0.5));</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   }</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j < M - mini)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordflow">return</span> IF(j%2,K(0.5),K(-0.5));</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j < M)</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">return</span> K(0.5) * SIGNF((R)m1)*SIGNF((R)m2);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     <span class="keywordflow">return</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>       SQRT(((R)(j+1))/((R)(j+1-m1)))</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>       * SQRT(((R)(2*j+1))/((R)(j+1+m1)))</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>       * SQRT(((R)(j+1))/((R)(j+1-m2)))</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>       * SQRT(((R)(2*j+1))/((R)(j+1+m2)));</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">   54</a></span> <span class="keywordtype">double</span> SO3_beta(<span class="keyword">const</span> <span class="keywordtype">int</span> m1, <span class="keyword">const</span> <span class="keywordtype">int</span> m2, <span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">if</span> (j < 0)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j < MAX(ABS(m1),ABS(m2)))</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <span class="keywordflow">return</span> K(0.5);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m1 == 0 || m2 == 0)</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <span class="keyword">const</span> R m1a = FABS((R)m1), m2a = FABS((R)m2);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordflow">return</span> -COPYSIGN(</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       ((SQRT(m1a)*SQRT(m2a))/((R)j))</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       * SQRT(m1a/((R)(j+1-m1)))</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>       * SQRT(((R)(2*j+1))/((R)(j+1+m1)))</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>       * SQRT(m2a/((R)(j+1-m2)))</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       * SQRT(((R)(2*j+1))/((R)(j+1+m2))),</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>       SIGNF((R)m1)*SIGNF((R)m2));</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">   75</a></span> <span class="keywordtype">double</span> SO3_gamma(<span class="keyword">const</span> <span class="keywordtype">int</span> m1, <span class="keyword">const</span> <span class="keywordtype">int</span> m2, <span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordflow">if</span> (MAX(ABS(m1),ABS(m2)) < j)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">return</span> -(((R)(j+1))/((R)j)) * SQRT((((R)(j-m1))/((R)(j+1-m1)))</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         *(((R)(j+m1))/((R)(j+1+m1)))*(((R)(j-m2))/((R)(j+1-m2)))</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         *(((R)(j+m2))/((R)(j+1+m2))));</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j == -1)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">return</span> IF(m1 > m2 || !((m1 + m2) % 2), K(1.0), K(-1.0))</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>       * nfft_lambda2((R)ABS(m2 - m1),(R)ABS(m2 + m1));</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*compute the coefficients for all degrees*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">   90</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_alpha_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     *alpha_act++ = SO3_alpha(k, m, j);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="code" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">   98</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_beta_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-funct [...]
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordtype">double</span> *beta_act = <a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     *beta_act++ = SO3_beta(k, m, j);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="code" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">  106</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_gamma_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">double</span> *gamma_act = <a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     *gamma_act++ = SO3_gamma(k, m, j);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/*compute for all degrees l and orders k*/</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">  116</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_alpha_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-f [...]
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       *alpha_act = SO3_alpha(i, m, j);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       alpha_act++;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="code" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">  130</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_beta_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-fu [...]
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       *alpha_act = SO3_beta(i, m, j);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       alpha_act++;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="code" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">  144</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_gamma_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-f [...]
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       *alpha_act = SO3_gamma(i, m, j);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       alpha_act++;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/*compute all 3termrecurrence coeffs*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="code" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">  160</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_alpha_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordtype">int</span> q;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="keywordtype">int</span> i, j, m;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   q = 0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         *alpha_act = SO3_alpha(i, m, j);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         fprintf(stdout, <span class="stringliteral">"alpha_all_%d^[%d,%d]=%f\n"</span>, j, i, m,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>             SO3_alpha(i, m, j));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         alpha_act++;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>         q = q + 1;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"><a class="code" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">  183</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_beta_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-funct [...]
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordtype">int</span> i, j, m;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         *alpha_act = SO3_beta(i, m, j);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         alpha_act++;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"><a class="code" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">  200</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_gamma_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="keywordtype">int</span> i, j, m;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         *alpha_act = SO3_gamma(i, m, j);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         alpha_act++;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="code" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">  217</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> eval_wigner(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdo [...]
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title=" [...]
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="comment">/* Evaluate the wigner function d_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordtype">double</span> a, b, x_val_act, a_old;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordtype">double</span> *x_act, *y_act;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   x_act = x;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   y_act = y;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     a = 1.0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     b = 0.0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       *y_act = 1.0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         a_old = a;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         b = a_old * (*gamma_act);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         alpha_act--;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         beta_act--;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         gamma_act--;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>       *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     x_act++;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     y_act++;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"><a class="code" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">  262</a></span> <span class="keyword">inline</span> <span class="keywordtype">int</span> eval_wigner_thresh(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title= [...]
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="keywordtype">double</span> a, b, x_val_act, a_old;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordtype">double</span> *x_act, *y_act;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   x_act = x;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   y_act = y;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     a = 1.0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     b = 0.0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     x_val_act = *x_act;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       *y_act = 1.0;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>       beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         a_old = a;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         b = a_old * (*gamma_act);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         alpha_act--;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         beta_act--;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         gamma_act--;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       <span class="keywordflow">if</span> (fabs(*y_act) > <a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b" title="The threshold /f$/f$.">threshold</a>)</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     x_act++;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     y_act++;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">/************************************************************************/</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">/* L2 normed wigner little d, WHERE THE DEGREE OF THE FUNCTION IS EQUAL</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="comment"> TO ONE OF ITS ORDERS. This is the function to use when starting the</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment"> three-term recurrence at orders (m1,m2)</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment"></span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment"> Note that, by definition, since I am starting the recurrence with this</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment"> function, that the degree j of the function is equal to max(abs(m1), abs(m2) ).</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"><a class="code" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">  319</a></span> <span class="keywordtype">double</span> wigner_start(<span class="keywordtype">int</span> m1, <span class="keywordtype">int</span> m2, <span class="keywordtype">double</span> theta)</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keywordtype">int</span> i, l, delta;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="keywordtype">int</span> cosPower, sinPower;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   <span class="keywordtype">int</span> absM1, absM2;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="keywordtype">double</span> dl, dm1, dm2, normFactor, sinSign;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordtype">double</span> dCP, dSP;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   max = (double) (ABS(m1) > ABS(m2) ? ABS(m1) : ABS(m2));</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   min = (double) (ABS(m1) < ABS(m2) ? ABS(m1) : ABS(m2));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   l = max;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   delta = l - min;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   absM1 = ABS(m1);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   absM2 = ABS(m2);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   dl = (double) l;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   dm1 = (double) m1;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   dm2 = (double) m2;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   sinSign = 1.;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   normFactor = 1.;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   <span class="keywordflow">for</span> (i = 0; i < delta; i++)</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     normFactor *= SQRT((2. * dl - ((<span class="keywordtype">double</span>) i)) / (((double) i) + 1.));</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   <span class="comment">/* need to adjust to make the L2-norm equal to 1 */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   normFactor *= SQRT((2. * dl + 1.) / 2.);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordflow">if</span> (l == absM1)</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="keywordflow">if</span> (m1 >= 0)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       cosPower = l + m2;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       sinPower = l - m2;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>       <span class="keywordflow">if</span> ((l - m2) % 2)</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         sinSign = -1.;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       cosPower = l - m2;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       sinPower = l + m2;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m2 >= 0)</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     cosPower = l + m1;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     sinPower = l - m1;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     cosPower = l - m1;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     sinPower = l + m1;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     <span class="keywordflow">if</span> ((l + m1) % 2)</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       sinSign = -1.;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   dCP = (double) cosPower;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   dSP = (double) sinPower;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="keywordflow">return</span> normFactor * sinSign * POW(sin(theta / 2), dSP) * POW(cos(theta / 2),</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       dCP);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/wigner_8h.html b/doc/api/html/wigner_8h.html
new file mode 100644
index 0000000..2eb92e5
--- /dev/null
+++ b/doc/api/html/wigner_8h.html
@@ -0,0 +1,890 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - wigner.h File Reference
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">wigner.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for functions related to Wigner-d/D functions.  
+<a href="#details">More...</a></p>
+
+<p><a href="wigner_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab67e240f23c39daa7283fee9025a8f03"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">SO3_alpha</a> (int k, int m, int l)</td></tr>
+<tr class="memdesc:ab67e240f23c39daa7283fee9025a8f03"><td class="mdescLeft"> </td><td class="mdescRight">Computes three-term recurrence coefficients <img class="formulaInl" alt="$\alpha_l^{km}$" src="form_58.png"/> of Wigner-d functions.  <a href="#ab67e240f23c39daa7283fee9025a8f03"></a><br/></td></tr>
+<tr class="memitem:a6722aa3212be1361b531751a850056f6"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">SO3_beta</a> (int k, int m, int l)</td></tr>
+<tr class="memdesc:a6722aa3212be1361b531751a850056f6"><td class="mdescLeft"> </td><td class="mdescRight">Computes three-term recurrence coefficients <img class="formulaInl" alt="$\beta_l^{km}$" src="form_61.png"/> of Wigner-d functions.  <a href="#a6722aa3212be1361b531751a850056f6"></a><br/></td></tr>
+<tr class="memitem:a6b13b24d727910800b9f1c0da29f5f73"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">SO3_gamma</a> (int k, int m, int l)</td></tr>
+<tr class="memdesc:a6b13b24d727910800b9f1c0da29f5f73"><td class="mdescLeft"> </td><td class="mdescRight">Computes three-term recurrence coefficients <img class="formulaInl" alt="$\gamma_l^{km}$" src="form_62.png"/> of Wigner-d functions.  <a href="#a6b13b24d727910800b9f1c0da29f5f73"></a><br/></td></tr>
+<tr class="memitem:ae9c3c9a11f1da35bb0cfbed1fb828ad2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">SO3_alpha_row</a> (double *alpha, int N, int m, int n)</td></tr>
+<tr class="memdesc:ae9c3c9a11f1da35bb0cfbed1fb828ad2"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#ae9c3c9a11f1da35bb0cfbed1fb828ad2"></a><br/></td></tr>
+<tr class="memitem:a1b82e072be0c3e0d45426ed56e4e6a9d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">SO3_beta_row</a> (double *beta, int N, int m, int n)</td></tr>
+<tr class="memdesc:a1b82e072be0c3e0d45426ed56e4e6a9d"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#a1b82e072be0c3e0d45426ed56e4e6a9d"></a><br/></td></tr>
+<tr class="memitem:a46516d6ec71efab3c80eecd459ad20ee"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">SO3_gamma_row</a> (double *gamma, int N, int m, int n)</td></tr>
+<tr class="memdesc:a46516d6ec71efab3c80eecd459ad20ee"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#a46516d6ec71efab3c80eecd459ad20ee"></a><br/></td></tr>
+<tr class="memitem:a9ab913c454dd078bed0db8b4aa9365e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">SO3_alpha_matrix</a> (double *alpha, int N, int n)</td></tr>
+<tr class="memdesc:a9ab913c454dd078bed0db8b4aa9365e1"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#a9ab913c454dd078bed0db8b4aa9365e1"></a><br/></td></tr>
+<tr class="memitem:a742f6babb80797e003835bc66cfe9080"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">SO3_beta_matrix</a> (double *beta, int N, int n)</td></tr>
+<tr class="memdesc:a742f6babb80797e003835bc66cfe9080"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#a742f6babb80797e003835bc66cfe9080"></a><br/></td></tr>
+<tr class="memitem:aa9850cfec93784e536a728f13db4c5cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">SO3_gamma_matrix</a> (double *gamma, int N, int n)</td></tr>
+<tr class="memdesc:aa9850cfec93784e536a728f13db4c5cb"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#aa9850cfec93784e536a728f13db4c5cb"></a><br/></td></tr>
+<tr class="memitem:aef802fd511b566392a8b2cbb9fcd6678"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">SO3_alpha_all</a> (double *alpha, int N)</td></tr>
+<tr class="memdesc:aef802fd511b566392a8b2cbb9fcd6678"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{l}^{km}$" src="form_69.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#aef802fd511b566392a8b2cbb9fcd6678"></a><br/></td></tr>
+<tr class="memitem:aa981c92edca3fac2f04a7d3524b8425a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">SO3_beta_all</a> (double *beta, int N)</td></tr>
+<tr class="memdesc:aa981c92edca3fac2f04a7d3524b8425a"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{l}^{km}$" src="form_71.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#aa981c92edca3fac2f04a7d3524b8425a"></a><br/></td></tr>
+<tr class="memitem:a4ff3aa0c3afb226613100df410cbef7f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">SO3_gamma_all</a> (double *gamma, int N)</td></tr>
+<tr class="memdesc:a4ff3aa0c3afb226613100df410cbef7f"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{l}^{km}$" src="form_72.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>.  <a href="#a4ff3aa0c3afb226613100df410cbef7f"></a><br/></td></tr>
+<tr class="memitem:a86975b8841ed9b6bb3e1484130658f19"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">eval_wigner</a> (double *x, double *y, int size, int l, double *alpha, double *beta, double *gamma)</td></tr>
+<tr class="memdesc:a86975b8841ed9b6bb3e1484130658f19"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm.  <a href="#a86975b8841ed9b6bb3e1484130658f19"></a><br/></td></tr>
+<tr class="memitem:ae5933af03f4536a70ddfc744f16c9c55"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">eval_wigner_thresh</a> (double *x, double *y, int size, int l, double *alpha, double *beta, double *gamma, double threshold)</td></tr>
+<tr class="memdesc:ae5933af03f4536a70ddfc744f16c9c55"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm if it not exceeds a given threshold.  <a href="#ae5933af03f4536a70ddfc744f16c9c55"></a><br/></td></tr>
+<tr class="memitem:a6c43c1f82cf3efa9cb1343ec9dcd07ed"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">wigner_start</a> (int n1, int n2, double theta)</td></tr>
+<tr class="memdesc:a6c43c1f82cf3efa9cb1343ec9dcd07ed"><td class="mdescLeft"> </td><td class="mdescRight">A method used for debugging, gives the values to start the "old" three-term recurrence generates <img class="formulaInl" alt="$ d^{km}_l(cos(theta)) $" src="form_77.png"/> WHERE THE DEGREE l OF THE FUNCTION IS EQUAL TO THE MAXIMUM OF ITS ORDERS.  <a href="#a6c43c1f82cf3efa9cb1343ec9dcd07ed"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for functions related to Wigner-d/D functions. </p>
+<dl class="section author"><dt>Author:</dt><dd>Antje Vollrath </dd></dl>
+
+<p>Definition in file <a class="el" href="wigner_8h_source.html">wigner.h</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab67e240f23c39daa7283fee9025a8f03"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double SO3_alpha </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>l</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Computes three-term recurrence coefficients <img class="formulaInl" alt="$\alpha_l^{km}$" src="form_58.png"/> of Wigner-d functions. </p>
+<ul>
+<li>k The order <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>m The order <img class="formulaInl" alt="$m$" src="form_59.png"/> </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00027">27</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6722aa3212be1361b531751a850056f6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double SO3_beta </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>l</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Computes three-term recurrence coefficients <img class="formulaInl" alt="$\beta_l^{km}$" src="form_61.png"/> of Wigner-d functions. </p>
+<ul>
+<li>k The order <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>m The order <img class="formulaInl" alt="$m$" src="form_59.png"/> </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00054">54</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6b13b24d727910800b9f1c0da29f5f73"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double SO3_gamma </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>k</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>l</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Computes three-term recurrence coefficients <img class="formulaInl" alt="$\gamma_l^{km}$" src="form_62.png"/> of Wigner-d functions. </p>
+<ul>
+<li>k The order <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>m The order <img class="formulaInl" alt="$m$" src="form_59.png"/> </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00075">75</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae9c3c9a11f1da35bb0cfbed1fb828ad2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_alpha_row </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>m the first order </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00090">90</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1b82e072be0c3e0d45426ed56e4e6a9d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_beta_row </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>m the first order </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00098">98</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00082">nfsft_wisdom::beta</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a46516d6ec71efab3c80eecd459ad20ee"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_gamma_row </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>gamma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>m the first order </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00106">106</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00088">nfsft_wisdom::gamma</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ab913c454dd078bed0db8b4aa9365e1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_alpha_matrix </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00116">116</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a742f6babb80797e003835bc66cfe9080"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_beta_matrix </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00130">130</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa9850cfec93784e536a728f13db4c5cb"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_gamma_matrix </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>gamma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00144">144</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef802fd511b566392a8b2cbb9fcd6678"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_alpha_all </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{l}^{km}$" src="form_69.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/></li>
+</ul>
+<ul>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00160">160</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa981c92edca3fac2f04a7d3524b8425a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_beta_all </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{l}^{km}$" src="form_71.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/></li>
+</ul>
+<ul>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00183">183</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ff3aa0c3afb226613100df410cbef7f"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SO3_gamma_all </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>gamma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>N</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{l}^{km}$" src="form_72.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/></li>
+</ul>
+<ul>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00200">200</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86975b8841ed9b6bb3e1484130658f19"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void eval_wigner </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>gamma</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}$" src="form_74.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^{km},\ldots,\beta_{c+l}^{km}$" src="form_75.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}$" src="form_76.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00217">217</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae5933af03f4536a70ddfc744f16c9c55"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int eval_wigner_thresh </td>
+          <td>(</td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>alpha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>beta</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>gamma</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>threshold</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm if it not exceeds a given threshold. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}$" src="form_74.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^{km},\ldots,\beta_{c+l}^{km}$" src="form_75.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}$" src="form_76.png"/> </li>
+<li>threshold The threshold </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00262">262</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00093">nfsft_wisdom::threshold</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c43c1f82cf3efa9cb1343ec9dcd07ed"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">double wigner_start </td>
+          <td>(</td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>theta</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A method used for debugging, gives the values to start the "old" three-term recurrence generates <img class="formulaInl" alt="$ d^{km}_l(cos(theta)) $" src="form_77.png"/> WHERE THE DEGREE l OF THE FUNCTION IS EQUAL TO THE MAXIMUM OF ITS ORDERS. </p>
+<ul>
+<li>theta the argument of </li>
+<li>n1 the first order </li>
+<li>n2 the second order</li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>the function value <img class="formulaInl" alt="$ d^{km}_l(cos(theta)) $" src="form_77.png"/> </dd></dl>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00319">319</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/html/wigner_8h_source.html b/doc/api/html/wigner_8h_source.html
new file mode 100644
index 0000000..0a74167
--- /dev/null
+++ b/doc/api/html/wigner_8h_source.html
@@ -0,0 +1,95 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      NFFT 3.2.3 API Reference - wigner.h Source File
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          3.2.3
+        </td>
+      </tr>
+    </table>  
+<!-- Generated by Doxygen 1.8.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="annotated.html"><span>Data Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">wigner.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="wigner_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/* $Id: wigner.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef WIGNER_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define WIGNER_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keywordtype">double</span> SO3_alpha(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> l);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">double</span> SO3_beta(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> l);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">double</span> SO3_gamma(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> l);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">void</span> SO3_alpha_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> m, < [...]
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">void</span> SO3_beta_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> m, <sp [...]
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keywordtype">void</span> SO3_gamma_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> m, < [...]
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">void</span> SO3_alpha_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> n [...]
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keywordtype">void</span> SO3_beta_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keywordtype">void</span> SO3_gamma_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> n [...]
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="keywordtype">void</span> SO3_alpha_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keywordtype">void</span> SO3_beta_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">void</span> SO3_gamma_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>, <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="keywordtype">void</span> eval_wigner(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> l, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots [...]
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title=" [...]
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keywordtype">int</span> eval_wigner_thresh(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> l, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0, [...]
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title=" [...]
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keywordtype">double</span> wigner_start(<span class="keywordtype">int</span> n1, <span class="keywordtype">int</span> n2, <span class="keywordtype">double</span> theta);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+    <hr size="1"/>
+    Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+  </body>
+</html>
diff --git a/doc/api/latex/images/sphere.eps b/doc/api/latex/images/sphere.eps
new file mode 100644
index 0000000..94c7537
--- /dev/null
+++ b/doc/api/latex/images/sphere.eps
@@ -0,0 +1,99 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (sphere.pdf)
%%Version: 1 4
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 26/10/06 22:12
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 0 0 345 326
%%HiResBoundingBox: 0.0 0.0 345.0 326.0
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+

%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put     
ct_CffDict begin                    
/F0Subr     
{
    systemdict /internaldict known 
   {
      1183615869 systemdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } 
   {
      userdict /internaldict known not 
        { 
          userdict /internaldict 
          {
               count 0 eq 
             {/internaldict errordict /invalidaccess get exec} if 
             dup type /integertype ne 
             {/internaldict errordict /invalidaccess get exec} if 
             dup 1183615869 eq
             {pop 0} 
             {/internaldict errordict /invalidaccess get exec} 
             ifelse 
          } 
          dup 14 get 1 25 dict put 
          bind executeonly put 
       } if 
       1183615869 userdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } ifelse
    [ 
       systemdict /internaldict known not 
       { 100 dict /begin cvx /mtx matrix /def cvx } if 
       systemdict /currentpacking known {currentpacking true setpacking} if 
       { 
          systemdict /internaldict known { 
          1183615869 systemdict /internaldict get exec 
          dup /$FlxDict known not { 
          dup dup length exch maxlength eq 
          { pop userdict dup /$FlxDict known not
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } if } 
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } 
          ifelse 
          } if /$FlxDict get begin } if 
          grestore 
          /exdef {exch def} def 
          /dmin exch abs 100 div def 
          /epX exdef /epY exdef 
          /c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef 
          /c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef 
          /c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def 
          /yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def 
          /PickCoords {  
          {c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2} 
          {c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2} 
          ifelse 
          /y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef 
          /y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef 
          } def 
          mtx currentmatrix pop  
          mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or 
          {/flipXY -1 def} 
          {mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or 
          {/flipXY 1 def} 
          {/flipXY 0 def} 
          ifelse } 
          ifelse 
          /erosion 1 def 
          systemdict /internaldict known { 
           1183615869 systemdict /internaldict get exec dup  
          /erosion known 
          {/erosion get /erosion exch def} 
          {pop} 
          ifelse 
          } if 
          yflag 
          {
              flipXY 0 eq c3y2 c4y2 eq or 
             {false PickCoords}
             {
                  /shrink c3y2 c4y2 eq 
                {0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def 
                /yshrink {c4y2 sub shrink mul c4y2 add} def 
                /c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def 
                /c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def 
                /c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def 
                /dY 0 c3y2 c1y2 sub round 
                dtransform flipXY 1 eq {exch} if pop abs def 
                dY dmin lt PickCoords 
                y2 c1y2 sub abs 0.001 gt {
                   c1x2 c1y2 transform flipXY 1 eq {exch} if  
                   /cx exch def /cy exch def 
                   /dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch} 
                   if pop def 
                   dY round dup 0 ne 
                   {/dY exdef } 
                   {pop dY 0 lt {-1}{1} ifelse /dY exdef} 
                   ifelse 
                   /erode PaintType 2 ne erosion 0.5 ge and def  
                   erode {/cy cy 0.5 sub def} if 
                   /ey cy dY add def   
                   /ey ey ceiling ey sub ey floor add def   
                   erode {/ey ey 0.5 add def} if   
                   ey cx flipXY 1 eq {exch} if itransform exch pop  
                   y2 sub /eShift exch def  
                   /y1 y1 eShift add def /y2 y2 eShift add def /y3 y3  
                   eShift add def  
                } if  
             } ifelse  
          } 
          {
              flipXY 0 eq c3x2 c4x2 eq or  
             {false PickCoords }  
             { /shrink c3x2 c4x2 eq  
                {0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def  
                /xshrink {c4x2 sub shrink mul c4x2 add} def  
                /c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def  
                /c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def  
                /c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def  
                /dX c3x2 c1x2 sub round 0 dtransform  
                flipXY -1 eq {exch} if pop abs def 
                dX dmin lt PickCoords  
                x2 c1x2 sub abs 0.001 gt {  
                   c1x2 c1y2 transform flipXY -1 eq {exch} if  
                   /cy exch def /cx exch def   
                   /dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def  
                   dX round dup 0 ne  
                   {/dX exdef}  
                   {pop dX 0 lt {-1}{1} ifelse /dX exdef}  
                   ifelse  
                   /erode PaintType 2 ne erosion .5 ge and def 
                   erode {/cx cx .5 sub def} if  
                   /ex cx dX add def  
                   /ex ex ceiling ex sub ex floor add def  
                   erode {/ex ex .5 add def} if  
                   ex cy flipXY -1 eq {exch} if itransform pop  
                   x2 sub /eShift exch def  
                   /x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def  
                } if  
             } ifelse  
          } ifelse 
          x2 x5 eq y2 y5 eq or  
          {x5 y5 lineto }  
          {x0 y0 x1 y1 x2 y2 curveto  
          x3 y3 x4 y4 x5 y5 curveto}  
          ifelse  
          epY epX   
       }  
       systemdict /currentpacking known {exch setpacking} if   
       /exec cvx /end cvx 
    ] cvx  
    executeonly 
    exch  
    {pop true exch restore}   
    {   
       systemdict /internaldict known not  
       {1183615869 userdict /internaldict get exec  
       exch /FlxProc exch put true}  
       {1183615869 systemdict /internaldict get exec  
       dup length exch maxlength eq  
       {false}   
       {1183615869 systemdict /internaldict get exec 
       exch /FlxProc exch put true}  
       ifelse}  
       ifelse
    } ifelse  
    {
       systemdict /internaldict known  
       {1183615869 systemdict /internaldict get exec /FlxProc get exec}  
       {1183615869 userdict /internaldict get exec /FlxProc get exec}  
       ifelse   
    } if  
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def 
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind  def
/HSSubr 
{
   systemdict /internaldict known not
   {pop 3}
   {1183615869 systemdict /internaldict get exec
    dup /startlock known
    {/startlock get exec}
    {dup /strtlck known
    {/strtlck get exec}
    {pop 3}
    ifelse}
    ifelse}
    ifelse
} bind def
end                                 
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.19 0
systemdict /languagelevel known dup
	{ currentglobal false setglobal }
	{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
	{ 2 copy get dup maxlength 25 add dict copy }
	{ 25 dict }
ifelse put
Adobe_CoolType_Utility
	begin
	/ct_Level2? exch def
	/ct_Clone? 1183615869 internaldict dup
			/CCRun known not
			exch /eCCRun known not
			ct_Level2? and or def
ct_Level2?
	{ globaldict begin currentglobal true setglobal }
if
	/ct_AddStdCIDMap
		ct_Level2?
			{ {
			((Hex) 57 StartData
			0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
			7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
			d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
			cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
			} }
			{ {
			<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
		 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
			4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
			} }
		ifelse bind def
userdict /cid_extensions known
dup { cid_extensions /cid_UpdateDB known and } if
	 {
	 cid_extensions
	 begin
	 /cid_GetCIDSystemInfo
		 {
		 1 index type /stringtype eq
			 { exch cvn exch }
		 if
		 cid_extensions
			 begin
			 dup load 2 index known
				 {
				 2 copy
				 cid_GetStatusInfo
				 dup null ne
					 {
					 1 index load
					 3 index get
					 dup null eq
						  { pop pop cid_UpdateDB }
						  {
						  exch
						  1 index /Created get eq
							  { exch pop exch pop }
							  { pop cid_UpdateDB }
						  ifelse
						  }
					 ifelse
					 }
					 { pop cid_UpdateDB }
				 ifelse
				 }
				 { cid_UpdateDB }
			 ifelse
			 end
		 } bind def
	 end
	 }
if
ct_Level2?
	{ end setglobal }
if
	/ct_UseNativeCapability?  systemdict /composefont known def
	/ct_MakeOCF 35 dict def
	/ct_Vars 25 dict def
	/ct_GlyphDirProcs 6 dict def
	/ct_BuildCharDict 15 dict dup
		begin
		/charcode 2 string def
		/dst_string 1500 string def
		/nullstring () def
		/usewidths? true def
		end def
	ct_Level2? { setglobal } { pop } ifelse
	ct_GlyphDirProcs
		begin
		/GetGlyphDirectory
			{
			systemdict /languagelevel known
				{ pop /CIDFont findresource /GlyphDirectory get }
				{
				1 index /CIDFont findresource /GlyphDirectory
				get dup type /dicttype eq
					{
					dup dup maxlength exch length sub 2 index lt
						{
						dup length 2 index add dict copy 2 index
						/CIDFont findresource/GlyphDirectory 2 index put
						}
					if
					}
				if
				exch pop exch pop
				}
			ifelse
			+
			} def
		/+
			{
			systemdict /languagelevel known
				{
				currentglobal false setglobal
				3 dict begin
					/vm exch def
				}
				{ 1 dict begin }
			ifelse
			/$ exch def
			systemdict /languagelevel known
				{
				vm setglobal
				/gvm currentglobal def
				$ gcheck setglobal
				}
			if
			? { $ begin } if
			} def
		/? { $ type /dicttype eq } def
		/| {
			userdict /Adobe_CoolType_Data known
				{
			Adobe_CoolType_Data /AddWidths? known
				{
				 currentdict Adobe_CoolType_Data
					begin
					  begin
						AddWidths?
								{
								Adobe_CoolType_Data /CC 3 index put
								? { def } { $ 3 1 roll put } ifelse
								CC charcode exch 1 index 0 2 index 256 idiv put
								1 index exch 1 exch 256 mod put
								stringwidth 2 array astore
								currentfont /Widths get exch CC exch put
								}
								{ ? { def } { $ 3 1 roll put } ifelse }
							ifelse
					end
				end
				}
				{ ? { def } { $ 3 1 roll put } ifelse }	ifelse
				}
				{ ? { def } { $ 3 1 roll put } ifelse }
			ifelse
			} def
		/!
			{
			? { end } if
			systemdict /languagelevel known
				{ gvm setglobal }
			if
			end
			} def
		/: { string currentfile exch readstring pop } executeonly def
		end
	ct_MakeOCF
		begin
		/ct_cHexEncoding
		[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
		 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
		 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
		 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
		 /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
		 /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
		 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
		 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
		 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
		 /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
		 /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
		 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
		 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
		 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
		/ct_CID_STR_SIZE 8000 def
		/ct_mkocfStr100 100 string def
		/ct_defaultFontMtx [.001 0 0 .001 0 0] def
		/ct_1000Mtx [1000 0 0 1000 0 0] def
		/ct_raise {exch cvx exch errordict exch get exec stop} bind def
		/ct_reraise
			{ cvx $error /errorname get (Error: ) print dup (						  ) cvs print
					errordict exch get exec stop
			} bind def
		/ct_cvnsi
			{
			1 index add 1 sub 1 exch 0 4 1 roll
				{
				2 index exch get
				exch 8 bitshift
				add
				}
			for
			exch pop
			} bind def
		/ct_GetInterval
			{
			Adobe_CoolType_Utility /ct_BuildCharDict get
				begin
				/dst_index 0 def
				dup dst_string length gt
					{ dup string /dst_string exch def }
				if
				1 index ct_CID_STR_SIZE idiv
				/arrayIndex exch def
				2 index arrayIndex  get
				2 index
				arrayIndex ct_CID_STR_SIZE mul
				sub
					{
					dup 3 index add 2 index length le
						{
						2 index getinterval
						dst_string  dst_index 2 index putinterval
						length dst_index add /dst_index exch def
						exit
						}
						{
						1 index length 1 index sub
						dup 4 1 roll
						getinterval
						dst_string  dst_index 2 index putinterval
						pop dup dst_index add /dst_index exch def
						sub
						/arrayIndex arrayIndex 1 add def
						2 index dup length arrayIndex gt
							  { arrayIndex get }
							  {
							  pop
							  exit
							  }
						ifelse
						0
						}
					ifelse
					}
				loop
				pop pop pop
				dst_string 0 dst_index getinterval
				end
			} bind def
		ct_Level2?
			{
			/ct_resourcestatus
			currentglobal mark true setglobal
				{ /unknowninstancename /Category resourcestatus }
			stopped
				{ cleartomark setglobal true }
				{ cleartomark currentglobal not exch setglobal }
			ifelse
				{
					{
					mark 3 1 roll /Category findresource
						begin
						ct_Vars /vm currentglobal put
						({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
							{ cleartomark false }
							{ { 3 2 roll pop true } { cleartomark false } ifelse }
						ifelse
						ct_Vars /vm get setglobal
						end
					}
				}
				{ { resourcestatus } }
			ifelse bind def
			/CIDFont /Category ct_resourcestatus
				{ pop pop }
				{
				currentglobal  true setglobal
				/Generic /Category findresource
				dup length dict copy
				dup /InstanceType /dicttype put
				/CIDFont exch /Category defineresource pop
				setglobal
				}
			ifelse
			ct_UseNativeCapability?
				{
				/CIDInit /ProcSet findresource begin
				12 dict begin
				begincmap
				/CIDSystemInfo 3 dict dup begin
				  /Registry (Adobe) def
				  /Ordering (Identity) def
				  /Supplement 0 def
				end def
				/CMapName /Identity-H def
				/CMapVersion 1.000 def
				/CMapType 1 def
				1 begincodespacerange
				<0000> <FFFF>
				endcodespacerange
				1 begincidrange
				<0000> <FFFF> 0
				endcidrange
				endcmap
				CMapName currentdict /CMap defineresource pop
				end
				end
				}
			if
			}
			{
			/ct_Category 2 dict begin
			/CIDFont  10 dict def
			/ProcSet	2 dict def
			currentdict
			end
			def
			/defineresource
				{
				ct_Category 1 index 2 copy known
					{
					get
					dup dup maxlength exch length eq
						{
						dup length 10 add dict copy
						ct_Category 2 index 2 index put
						}
					if
					3 index 3 index put
					pop exch pop
					}
					{ pop pop /defineresource /undefined ct_raise }
				ifelse
				} bind def
			/findresource
				{
				ct_Category 1 index 2 copy known
					{
					get
					2 index 2 copy known
						{ get 3 1 roll pop pop}
						{ pop pop /findresource /undefinedresource ct_raise }
					ifelse
					}
					{ pop pop /findresource /undefined ct_raise }
				ifelse
				} bind def
			/resourcestatus
				{
				ct_Category 1 index 2 copy known
					{
					get
					2 index known
					exch pop exch pop
						{
						0 -1 true
						}
						{
						false
						}
					ifelse
					}
					{ pop pop /findresource /undefined ct_raise }
				ifelse
				} bind def
			/ct_resourcestatus /resourcestatus load def
			}
		ifelse
		/ct_CIDInit 2 dict
			begin
			/ct_cidfont_stream_init
				{
					{
					dup (Binary) eq
						{
						pop
						null
						currentfile
						ct_Level2?
							{
								{ cid_BYTE_COUNT () /SubFileDecode filter }
							stopped
								{ pop pop pop }
							if
							}
						if
						/readstring load
						exit
						}
					if
					dup (Hex) eq
						{
						pop
						currentfile
						ct_Level2?
							{
								{ null exch /ASCIIHexDecode filter /readstring }
							stopped
								{ pop exch pop (>) exch /readhexstring }
							if
							}
							{ (>) exch /readhexstring }
						ifelse
						load
						exit
						}
					if
					/StartData /typecheck ct_raise
					}
				loop
				cid_BYTE_COUNT ct_CID_STR_SIZE le
					{
					2 copy cid_BYTE_COUNT string exch exec
					pop
					1 array dup
					3 -1 roll
					0 exch put
					}
					{
					cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
					dup array exch 2 sub 0 exch 1 exch
						{
						2 copy
						5 index
						ct_CID_STR_SIZE
						string
						6 index exec
						pop
						put
						pop
						}
					for
					2 index
					cid_BYTE_COUNT ct_CID_STR_SIZE mod string
					3 index exec
					pop
					1 index exch
					1 index length 1 sub
					exch put
					}
				ifelse
				cid_CIDFONT exch /GlyphData exch put
				2 index null eq
					{
					pop pop pop
					}
					{
					pop /readstring load
					1 string exch
						{
						3 copy exec
						pop
						dup length 0 eq
							{
							pop pop pop pop pop
							true exit
							}
						if
						4 index
						eq
							{
							pop pop pop pop
							false exit
							}
						if
						}
					loop
					pop
					}
				ifelse
				} bind def
			/StartData
				{
				mark
					{
					currentdict
					dup /FDArray get 0 get /FontMatrix get
					0 get 0.001 eq
						{
						dup /CDevProc known not
							{
							/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
								{ get }
								{
								pop pop
								{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
								}
							ifelse
							def
							}
						if
						}
						{
						 /CDevProc
							 {
							 pop pop pop pop pop
							 0
							 1 cid_temp /cid_CIDFONT get
							 /FDArray get 0 get
							 /FontMatrix get 0 get div
							 7 index 2 div
							 1 index 0.88 mul
							 } def
						}
					ifelse
					/cid_temp 15 dict def
					cid_temp
						begin
						/cid_CIDFONT exch def
						3 copy pop
						dup /cid_BYTE_COUNT exch def 0 gt
							{
							ct_cidfont_stream_init
							FDArray
								{
								/Private get
								dup /SubrMapOffset known
									{
									begin
									/Subrs SubrCount array def
									Subrs
									SubrMapOffset
									SubrCount
									SDBytes
									ct_Level2?
										{
										currentdict dup /SubrMapOffset undef
										dup /SubrCount undef
										/SDBytes undef
										}
									if
									end
									/cid_SD_BYTES exch def
									/cid_SUBR_COUNT exch def
									/cid_SUBR_MAP_OFFSET exch def
									/cid_SUBRS exch def
									cid_SUBR_COUNT 0 gt
										{
										GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
										0 cid_SD_BYTES ct_cvnsi
										0 1 cid_SUBR_COUNT 1 sub
											{
											exch 1 index
											1 add
											cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
											GlyphData exch cid_SD_BYTES ct_GetInterval
											0 cid_SD_BYTES ct_cvnsi
											cid_SUBRS 4 2 roll
											GlyphData exch
											4 index
											1 index
											sub
											ct_GetInterval
											dup length string copy put
											}
										for
										pop
										}
									if
									}
									{ pop }
								ifelse
								}
							forall
							}
						if
						cleartomark pop pop
						end
					CIDFontName currentdict /CIDFont defineresource pop
					end end
					}
				stopped
					{ cleartomark /StartData ct_reraise }
				if
				} bind def
			currentdict
			end def
		/ct_saveCIDInit
			{
			/CIDInit /ProcSet ct_resourcestatus
				{ true }
				{ /CIDInitC /ProcSet ct_resourcestatus }
			ifelse
				{
				pop pop
				/CIDInit /ProcSet findresource
				ct_UseNativeCapability?
					{ pop null }
					{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
				ifelse
				}
				{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
			ifelse
			ct_Vars exch /ct_oldCIDInit exch put
			} bind def
		/ct_restoreCIDInit
			{
			ct_Vars /ct_oldCIDInit get dup null ne
				{ /CIDInit exch /ProcSet defineresource pop }
				{ pop }
			ifelse
			} bind def
		/ct_BuildCharSetUp
			{
			1 index
				begin
				CIDFont
					begin
					Adobe_CoolType_Utility /ct_BuildCharDict get
						begin
						/ct_dfCharCode exch def
						/ct_dfDict exch def
						CIDFirstByte ct_dfCharCode add
						dup CIDCount ge
							{ pop 0 }
						if
						/cid exch def
							{
							GlyphDirectory cid 2 copy known
								{ get }
								{ pop pop nullstring }
							ifelse
							dup length FDBytes sub 0 gt
								{
								dup
								FDBytes 0 ne
									{ 0 FDBytes ct_cvnsi }
									{ pop 0 }
								ifelse
								/fdIndex exch def
								dup length FDBytes sub FDBytes exch getinterval
								/charstring exch def
								exit
								}
								{
								pop
								cid 0 eq
									{ /charstring nullstring def exit }
								if
								/cid 0 def
								}
							ifelse
							}
						loop
			} def
		/ct_SetCacheDevice
			{
			0 0 moveto
			dup stringwidth
			3 -1 roll
			true charpath
			pathbbox
			0 -1000
			7 index 2 div 880
			setcachedevice2
			0 0 moveto
			} def
		/ct_CloneSetCacheProc
			{
			1 eq
				{
				stringwidth
				pop -2 div -880
				0 -1000 setcharwidth
				moveto
				}
				{
				usewidths?
					{
					currentfont /Widths get cid
					2 copy known
						{ get exch pop aload pop }
						{ pop pop stringwidth }
					ifelse
					}
					{ stringwidth }
				ifelse
				setcharwidth
				0 0 moveto
				}
			ifelse
			} def
		/ct_Type3ShowCharString
			{
			ct_FDDict fdIndex 2 copy known
				{ get }
				{
				currentglobal 3 1 roll
				1 index gcheck setglobal
				ct_Type1FontTemplate dup maxlength dict copy
					begin
					FDArray fdIndex get
					dup /FontMatrix 2 copy known
						{ get }
						{ pop pop ct_defaultFontMtx }
					ifelse
					/FontMatrix exch dup length array copy def
					/Private get
					/Private exch def
					/Widths rootfont /Widths get def
					/CharStrings 1 dict dup /.notdef
						<d841272cf18f54fc13> dup length string copy put def
					currentdict
					end
				/ct_Type1Font exch definefont
				dup 5 1 roll put
				setglobal
				}
			ifelse
			dup /CharStrings get 1 index /Encoding get
			ct_dfCharCode get charstring put
			rootfont /WMode 2 copy known
				{ get }
				{ pop pop 0 }
			ifelse
			exch
			1000 scalefont setfont
			ct_str1 0 ct_dfCharCode put
			ct_str1 exch ct_dfSetCacheProc
			ct_SyntheticBold
				{
				currentpoint
				ct_str1 show
				newpath
				moveto
				ct_str1 true charpath
				ct_StrokeWidth setlinewidth
				stroke
				}
				{ ct_str1 show }
			ifelse
			} def
		/ct_Type4ShowCharString
			{
			ct_dfDict ct_dfCharCode charstring
			FDArray fdIndex get
			dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
				{ ct_1000Mtx matrix concatmatrix concat }
				{ pop }
			ifelse
			/Private get
			Adobe_CoolType_Utility /ct_Level2? get not
				{
				ct_dfDict /Private
				3 -1 roll
					{ put }
				1183615869 internaldict /superexec get exec
				}
			if
			1183615869 internaldict
			Adobe_CoolType_Utility /ct_Level2? get
				{ 1 index }
				{ 3 index /Private get mark 6 1 roll }
			ifelse
			dup /RunInt known
				{ /RunInt get }
				{ pop /CCRun }
			ifelse
			get exec
			Adobe_CoolType_Utility /ct_Level2? get not
				{ cleartomark }
			if
			} bind def
		/ct_BuildCharIncremental
			{
				{
				Adobe_CoolType_Utility /ct_MakeOCF get begin
				ct_BuildCharSetUp
				ct_ShowCharString
				}
			stopped
				{ stop }
			if
			end
			end
			end
			end
			} bind def
		/BaseFontNameStr (BF00) def
		/ct_Type1FontTemplate 14 dict
			begin
			/FontType 1 def
			/FontMatrix  [0.001 0 0 0.001 0 0] def
			/FontBBox  [-250 -250 1250 1250] def
			/Encoding ct_cHexEncoding def
			/PaintType 0 def
			currentdict
			end def
		/BaseFontTemplate 11 dict
			begin
			/FontMatrix  [0.001 0 0 0.001 0 0] def
			/FontBBox  [-250 -250 1250 1250] def
			/Encoding ct_cHexEncoding def
			/BuildChar /ct_BuildCharIncremental load def
			ct_Clone?
				{
				/FontType 3 def
				/ct_ShowCharString /ct_Type3ShowCharString load def
				/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
				/ct_SyntheticBold false def
				/ct_StrokeWidth 1 def
				}
				{
				/FontType 4 def
				/Private 1 dict dup /lenIV 4 put def
				/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
				/PaintType 0 def
				/ct_ShowCharString /ct_Type4ShowCharString load def
				}
			ifelse
			/ct_str1 1 string def
			currentdict
			end def
		/BaseFontDictSize BaseFontTemplate length 5 add def
		/ct_matrixeq
			{
			true 0 1 5
				{
				dup 4 index exch get exch 3 index exch get eq and
				dup not
					{ exit }
				if
				}
			for
			exch pop exch pop
			} bind def
		/ct_makeocf
			{
			15 dict
				begin
				exch /WMode exch def
				exch /FontName exch def
				/FontType 0 def
				/FMapType 2 def
			dup /FontMatrix known
				{ dup /FontMatrix get /FontMatrix exch def }
				{ /FontMatrix matrix def }
			ifelse
				/bfCount 1 index /CIDCount get 256 idiv 1 add
					dup 256 gt { pop 256} if def
				/Encoding
					256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
					bfCount 1 255 { 2 copy bfCount put pop } for
					def
				/FDepVector bfCount dup 256 lt { 1 add } if array def
				BaseFontTemplate BaseFontDictSize dict copy
					begin
					/CIDFont exch def
					CIDFont /FontBBox known
						{ CIDFont /FontBBox get /FontBBox exch def }
					if
					CIDFont /CDevProc known
						{ CIDFont /CDevProc get /CDevProc exch def }
					if
					currentdict
					end
				BaseFontNameStr 3 (0) putinterval
				0 1 bfCount dup 256 eq { 1 sub } if
					{
					FDepVector exch
					2 index BaseFontDictSize dict copy
						begin
						dup /CIDFirstByte exch 256 mul def
						FontType 3 eq
							{ /ct_FDDict 2 dict def }
						if
						currentdict
						end
					1 index  16
					BaseFontNameStr  2 2 getinterval cvrs pop
					BaseFontNameStr exch definefont
					put
					}
				for
				ct_Clone?
					{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
				if
				FontName
				currentdict
				end
			definefont
			ct_Clone?
				{
				gsave
				dup 1000 scalefont setfont
				ct_BuildCharDict
					begin
					/usewidths? false def
					currentfont /Widths get
						begin
						exch /CIDFont get /GlyphDirectory get
							{
							pop
							dup charcode exch 1 index 0 2 index 256 idiv put
							1 index exch 1 exch 256 mod put
							stringwidth 2 array astore def
							}
						forall
						end
					/usewidths? true def
					end
				grestore
				}
				{ exch pop }
			ifelse
			} bind def
		/ct_ComposeFont
			{
			ct_UseNativeCapability?
				{
				2 index /CMap ct_resourcestatus
					{ pop pop exch pop }
					{
					/CIDInit /ProcSet findresource
						begin
						12 dict
							begin
							begincmap
							/CMapName 3 index def
							/CMapVersion 1.000 def
							/CMapType 1 def
							exch /WMode exch def
							/CIDSystemInfo 3 dict dup
								begin
								/Registry (Adobe) def
								/Ordering
								CMapName ct_mkocfStr100 cvs
								(Adobe-) search
									{
									pop pop
									(-) search
										{
										dup length string copy
										exch pop exch pop
										}
										{ pop (Identity)}
									ifelse
									}
									{ pop  (Identity)  }
								ifelse
								def
								/Supplement 0 def
								end def
							1 begincodespacerange
							<0000> <FFFF>
							endcodespacerange
							1 begincidrange
							<0000> <FFFF> 0
							endcidrange
							endcmap
							CMapName currentdict /CMap defineresource pop
							end
						end
					}
				ifelse
				composefont
				}
				{
				3 2 roll pop
				0 get /CIDFont findresource
				ct_makeocf
				}
			ifelse
			} bind def
		/ct_MakeIdentity
			{
			ct_UseNativeCapability?
				{
				1 index /CMap ct_resourcestatus
					{ pop pop }
					{
					/CIDInit /ProcSet findresource begin
					12 dict begin
					begincmap
					/CMapName 2 index def
					/CMapVersion 1.000 def
					/CMapType 1 def
					/CIDSystemInfo 3 dict dup
						begin
						/Registry (Adobe) def
						/Ordering
						CMapName ct_mkocfStr100 cvs
						(Adobe-) search
							{
							pop pop
							(-) search
								{ dup length string copy exch pop exch pop }
								{ pop (Identity) }
							ifelse
							}
							{ pop (Identity) }
						ifelse
						def
						/Supplement 0 def
						end def
					1 begincodespacerange
					<0000> <FFFF>
					endcodespacerange
					1 begincidrange
					<0000> <FFFF> 0
					endcidrange
					endcmap
					CMapName currentdict /CMap defineresource pop
					end
					end
					}
				ifelse
				composefont
				}
				{
				exch pop
				0 get /CIDFont findresource
				ct_makeocf
				}
			ifelse
			} bind def
		currentdict readonly pop
		end
	end
%%EndResource
%%BeginFile: MMFauxFont.prc
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. 
%%All Rights Reserved.
userdict /ct_EuroDict 10 dict put
ct_EuroDict begin
/ct_CopyFont 
{
    { 1 index /FID ne {def} {pop pop} ifelse} forall
} def
/ct_GetGlyphOutline
{
   gsave
   initmatrix newpath
   exch findfont dup 
   length 1 add dict 
   begin 
		ct_CopyFont 
		/Encoding Encoding dup length array copy 
		dup
		4 -1 roll
		0 exch put   
		def
		currentdict
   end
   /ct_EuroFont exch definefont
   1000 scalefont setfont
   0 0 moveto
   [
       <00> stringwidth 
       <00> false charpath
       pathbbox
       [
       {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall
   grestore
   counttomark 8 add
}
def
/ct_MakeGlyphProc
{
   ] cvx
   /ct_PSBuildGlyph cvx
   ] cvx
} def
/ct_PSBuildGlyph 
{ 
 	gsave 
	8 -1 roll pop 
	7 1 roll 
        6 -2 roll ct_FontMatrix transform 6 2 roll
        4 -2 roll ct_FontMatrix transform 4 2 roll
        ct_FontMatrix transform 
	currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse  
	dup  9 1 roll 
	{  
		currentdict /StrokeWidth 2 copy known  
		{   
			get 2 div   
			0 ct_FontMatrix dtransform pop
			5 1 roll  
			4 -1 roll 4 index sub   
			4 1 roll   
			3 -1 roll 4 index sub  
			3 1 roll   
			exch 4 index add exch  
			4 index add  
			5 -1 roll pop  
		}  
		{	 
			pop pop 
		}  
		ifelse  
	}       
    if  
	setcachedevice  
        ct_FontMatrix concat
        ct_PSPathOps begin 
		exec 
	end 
	{  
		currentdict /StrokeWidth 2 copy known  
			{ get }  
			{ pop pop 0 }  
  	    ifelse  
		setlinewidth stroke  
	}  
	{   
	    fill  
	}  
	ifelse  
    grestore
} def 
/ct_PSPathOps 4 dict dup begin 
	/m {moveto} def 
	/l {lineto} def 
	/c {curveto} def 
	/cp {closepath} def 
end 
def 
/ct_matrix1000 [1000 0 0 1000 0 0] def
/ct_AddGlyphProc  
{
   2 index findfont dup length 4 add dict 
   begin 
	ct_CopyFont 
	/CharStrings CharStrings dup length 1 add dict copy
      begin
         3 1 roll def  
         currentdict 
      end 
      def
      /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def
      /ct_PSBuildGlyph /ct_PSBuildGlyph load def
      /ct_PSPathOps /ct_PSPathOps load def
      currentdict
   end
   definefont pop
}
def
systemdict /languagelevel known
{
	/ct_AddGlyphToPrinterFont {
		2 copy
		ct_GetGlyphOutline 3 add -1 roll restore 
		ct_MakeGlyphProc 
		ct_AddGlyphProc
	} def
}
{
	/ct_AddGlyphToPrinterFont {
	    pop pop restore
		Adobe_CTFauxDict /$$$FONTNAME get
		/Euro
		Adobe_CTFauxDict /$$$SUBSTITUTEBASE get
		ct_EuroDict exch get
		ct_AddGlyphProc
	} def
} ifelse
/AdobeSansMM 
{ 
556 0 24 -19 541 703 
	{ 
	541 628 m 
	510 669 442 703 354 703 c 
	201 703 117 607 101 444 c 
	50 444 l 
	25 372 l 
	97 372 l 
	97 301 l 
	49 301 l 
	24 229 l 
	103 229 l 
	124 67 209 -19 350 -19 c 
	435 -19 501 25 509 32 c 
	509 131 l 
	492 105 417 60 343 60 c 
	267 60 204 127 197 229 c 
	406 229 l 
	430 301 l 
	191 301 l 
	191 372 l 
	455 372 l 
	479 444 l 
	194 444 l 
	201 531 245 624 348 624 c 
	433 624 484 583 509 534 c 
	cp 
	556 0 m 
	}
ct_PSBuildGlyph
} def
/AdobeSerifMM 
{ 
500 0 10 -12 484 692 
	{ 
	347 298 m 
	171 298 l 
	170 310 170 322 170 335 c 
	170 362 l 
	362 362 l 
	374 403 l 
	172 403 l 
	184 580 244 642 308 642 c 
	380 642 434 574 457 457 c 
	481 462 l 
	474 691 l 
	449 691 l 
	433 670 429 657 410 657 c 
	394 657 360 692 299 692 c 
	204 692 94 604 73 403 c 
	22 403 l 
	10 362 l 
	70 362 l 
	69 352 69 341 69 330 c 
	69 319 69 308 70 298 c 
	22 298 l 
	10 257 l 
	73 257 l 
	97 57 216 -12 295 -12 c 
	364 -12 427 25 484 123 c 
	458 142 l 
	425 101 384 37 316 37 c 
	256 37 189 84 173 257 c 
	335 257 l 
	cp 
	500 0 m 
	} 
ct_PSBuildGlyph 
} def 
end		
%%EndFile
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave 
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec

[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3385 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xap="http://ns.adobe.com/xap/1.0/">
+         <xap:CreateDate>2006-10-26T22:12:35+02:00</xap:CreateDate>
+         <xap:ModifyDate>2006-10-26T22:12:35+02:00</xap:ModifyDate>
+         <xap:MetadataDate>2006-10-26T22:12:35+02:00</xap:MetadataDate>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
+         <xapMM:DocumentID>uuid:69FDC66D66D111DB80A0F3E4B52BCBBC</xapMM:DocumentID>
+         <xapMM:InstanceID>uuid:69FDC66D66D111DB80A0F3E4B52BCBBC</xapMM:InstanceID>
+         <xapMM:DerivedFrom rdf:parseType="Resource">
+         </xapMM:DerivedFrom>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
+         <pdfx:PTEX.Fullbanner>This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4</pdfx:PTEX.Fullbanner>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:format>application/eps</dc:format>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end="w"?>

% &end XMP packet& %

[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5

PDFVars/TermAll get exec end end
 PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
0.0 0.0 345.0 326.0 rectclip
q
0.0 0.0 m
345.0 0.0 l
345.0 326.0 l
0.0 326.0 l
h
W
n
q
1.0 0.0 0.0 1.0 -12.0 -26.0 cm
q
12.0 26.0 345.0 326.0 re
W
n
q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
n
12.2451 -26.7217 m
12.2451 -26.7217 356.245 -26.7217 356.245 -26.7217 c
356.245 -26.7217 356.245 -351.722 356.245 -351.722 c
356.245 -351.722 12.2451 -351.722 12.2451 -351.722 c
12.2451 -351.722 12.2451 -26.7217 12.2451 -26.7217 c
h
W
n
q
n
0.0 0.0 m
0.0 0.0 368.5 0.0 368.5 0.0 c
368.5 0.0 368.5 -368.5 368.5 -368.5 c
368.5 -368.5 0.0 -368.5 0.0 -368.5 c
0.0 -368.5 0.0 0.0 0.0 0.0 c
h
W
n
0.216 w
2.6131 M
true setSA
n
341.75 -142.05 m
341.75 -142.05 26.7539 -226.453 26.7539 -226.453 c
26.7529 -142.05 m
26.7529 -142.05 341.751 -226.453 341.751 -226.453 c
184.252 -26.7529 m
184.252 -26.7529 184.252 -341.75 184.252 -341.75 c
[/DeviceRGB] cs 0.0 0.0 0.0 sc
S
n
183.908 -274.625 m
233.479 -274.625 273.907 -234.196 273.907 -184.626 c
273.907 -135.056 233.479 -94.6279 183.908 -94.6279 c
134.339 -94.6279 93.9092 -135.056 93.9092 -184.626 c
93.9092 -234.196 134.339 -274.625 183.908 -274.625 c
183.908 -274.625 183.908 -274.625 183.908 -274.625 c
h
1.0 1.0 1.0 sc
eofill
n
184.252 -274.25 m
233.822 -274.25 274.251 -233.821 274.251 -184.251 c
274.251 -134.681 233.822 -94.2529 184.252 -94.2529 c
134.683 -94.2529 94.2529 -134.681 94.2529 -184.251 c
94.2529 -233.821 134.683 -274.25 184.252 -274.25 c
184.252 -274.25 184.252 -274.25 184.252 -274.25 c
h
0.0 0.0 0.0 sc
S
0.5 w
n
203.322 -211.889 m
198.992 -223.866 191.714 -231.42 184.252 -231.42 c
S
0.216 w
[4.536 4.32001 ] 0.0 d
n
184.252 -94.2529 m
159.467 -94.2529 139.253 -134.681 139.253 -184.251 c
139.253 -233.821 159.467 -274.25 184.252 -274.25 c
S
[] 0.0 d
n
274.251 -184.251 m
274.251 -171.858 233.822 -161.751 184.252 -161.751 c
134.683 -161.751 94.2529 -171.858 94.2529 -184.251 c
S
[4.536 4.32001 ] 0.0 d
n
245.714 -167.862 m
245.714 -167.862 97.3701 -207.534 97.3701 -207.534 c
274.251 -184.251 m
274.251 -196.643 233.822 -206.751 184.252 -206.751 c
134.683 -206.751 94.2529 -196.643 94.2529 -184.251 c
S
n
341.75 -142.05 m
341.75 -142.05 334.991 -140.667 334.991 -140.667 c
334.991 -140.667 336.588 -146.628 336.588 -146.628 c
336.588 -146.628 341.75 -142.05 341.75 -142.05 c
341.75 -142.05 341.75 -142.05 341.75 -142.05 c
h
eofill
n
122.901 -167.8 m
122.901 -167.8 271.245 -207.388 271.245 -207.388 c
S
n
26.7539 -142.05 m
26.7539 -142.05 31.916 -146.626 31.916 -146.626 c
31.916 -146.626 33.5137 -140.665 33.5137 -140.665 c
33.5137 -140.665 26.7539 -142.05 26.7539 -142.05 c
26.7539 -142.05 26.7539 -142.05 26.7539 -142.05 c
h
eofill
0.5 w
[] 0.0 d
n
184.252 -184.251 m
184.252 -184.251 220.78 -236.75 220.78 -236.75 c
S
n
219.2 -237.85 m
219.806 -238.72 221.008 -238.938 221.88 -238.332 c
222.752 -237.724 222.966 -236.521 222.361 -235.651 c
221.756 -234.781 220.553 -234.563 219.681 -235.17 c
218.809 -235.777 218.595 -236.98 219.2 -237.85 c
219.2 -237.85 219.2 -237.85 219.2 -237.85 c
h
eofill
n
207.463 -173.769 m
200.537 -172.833 192.301 -172.271 184.252 -172.271 c
172.271 -172.271 160.104 -173.487 151.494 -175.501 c
228.156 -164.612 m
228.156 -164.612 184.252 -184.251 184.252 -184.251 c
S
0.216 w
n
184.252 -94.2529 m
209.037 -94.2529 229.252 -134.681 229.252 -184.251 c
229.252 -233.821 209.037 -274.25 184.252 -274.25 c
S
[4.536 4.32001 ] 0.0 d
n
184.252 -94.2529 m
184.252 -94.2529 184.252 -274.25 184.252 -274.25 c
S
n
184.252 -341.75 m
184.252 -341.75 181.168 -335.579 181.168 -335.579 c
181.168 -335.579 187.339 -335.579 187.339 -335.579 c
187.339 -335.579 184.252 -341.75 184.252 -341.75 c
184.252 -341.75 184.252 -341.75 184.252 -341.75 c
h
eofill
Q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
true setSA
[/DeviceRGB] cs 0.0 0.0 0.0 sc
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H Initial
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_saveCIDInit
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CIDFont (STFBAA+CMMI12)
%%Title: (STFBAA+CMMI12 Adobe Identity 0)
%%Version: 0
/CIDInit /ProcSet findresource begin
14 dict begin
/CIDFontName /STFBAA+CMMI12 def
/CIDFontType 0 def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/FontBBox {-31 -250 1026 750} def
/FontInfo 5 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/FSType 4 def
end def
/CIDMapOffset 57 def
/FDBytes 1 def
/GDBytes 1 def
/CIDCount 121 def
/CDevProc {pop pop pop pop pop 0 -1000 7 index 2 div 880} def
/FDArray 1 array
dup 0
%ADOBeginFontDict
4 dict dup begin
/FontType 1 def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
%ADOBeginPrivateDict
/Private 12 dict dup begin
/BlueValues [-21 -0 431 441 452 463 683 704] def
/OtherBlues [-204 -194] def
/BlueScale 0.04379 def
/StdHW [22] def
/StdVW [65] def
/StemSnapH [22 29] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/SubrMapOffset 0 def
/SDBytes 1 def
/SubrCount 5 def
end def
%ADOEndPrivateDict
end put
%ADOEndFontDict
def
/GlyphDirectory 1 dict def
ct_GlyphDirProcs begin
GlyphDirectory
+
0 <001C60D8A8C9B81F2CC3> |
!
end
ct_AddStdCIDMap
%%EndResource
ct_restoreCIDInit /STFBAA+CMMI12-Identity-H /Identity-H 0 [/STFBAA+CMMI12] ct_ComposeFont pop end end
+%ADOEndSubsetFont
+%%BeginResource: encoding
% Identity-H
%PDF_BeginEncoding: N8 (STFBAA+CMMI12-Identity-H)
+/N8 (STFBAA+CMMI12-Identity-H) /Identity-H [ (STFBAA+CMMI12) ]
+ /NoSubstitution [ /Serif ] 0 TZzero
+%%EndResource
214.132 215.992 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
114 <001C60D8A8C9B7628037FFC34225CDB51C16B6280E0517770F69131E099
966F689816DBB94E394FAC1DD9A7C1A14C9636A7D2A8B72705C22612EFEFFA6E
5264FF4EBF61CD9C4DD8B27578E011E8DDEBF419CAC1F6A2F1FE994DF5C901FD
0BEA9E7C62177556CCE084E3BECB95D975A4D2F2A65A78E12C3AB4ACCE568AEB
738452E5B0C6CD2019C0B9AA154E192BB18B0CE92FA48AF13577432A54DCB746
56A4A13E51A965BFC9D023FADEC3106AF414E85A814E3E3249DD8D208FADB8DC
3FB27> |
!
end
end end
+%ADOEndSubsetFont
+/N8 11.955 Tf
(\000r) show
345.669 136.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
120 <001C60D8A8C9B7EF325DF88715F012E085EB64F0A4FE8713D04CDEA9CB2
0E9B15249D56AC8A0C2E0E12761B3B972D802D5F8B18F4F576C2666702361F5C
2B48D78C52532223071C01FA681430DA735F1A7AE51C80B9138D3695956A62D9
B460B17A4E36DAB726D8A63568FAB7BE160BEDB176EF49099F6F41A5863B069F
194EE62B71BD3B36F4A3FC9946AAB077F14F50A9438F7F58BFD49954B5720AE5
7E171B43DB3AF9DBD54119DEA2A7A1C00079C808029D90A7EF0A91CB3EF0628D
6A42D1F0CCEC95B876569E8B0C44DA543AE071E278458104AF4D774998DBD764
C7F96602C> |
!
end
end end
+%ADOEndSubsetFont
+(\000x) show
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H Initial
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_saveCIDInit
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CIDFont (EUOAAA+CMR8)
%%Title: (EUOAAA+CMR8 Adobe Identity 0)
%%Version: 0
/CIDInit /ProcSet findresource begin
14 dict begin
/CIDFontName /EUOAAA+CMR8 def
/CIDFontType 0 def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/FontBBox {-36 -250 1070 750} def
/FontInfo 5 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/FSType 4 def
end def
/CIDMapOffset 57 def
/FDBytes 1 def
/GDBytes 1 def
/CIDCount 52 def
/CDevProc {pop pop pop pop pop 0 -1000 7 index 2 div 880} def
/FDArray 1 array
dup 0
%ADOBeginFontDict
4 dict dup begin
/FontType 1 def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
%ADOBeginPrivateDict
/Private 13 dict dup begin
/BlueValues [-21 -0 431 446 665 675 683 704] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [28] def
/StdVW [76] def
/StemSnapH [28 33] def
/StemSnapV [76 92] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/SubrMapOffset 0 def
/SDBytes 1 def
/SubrCount 5 def
end def
%ADOEndPrivateDict
end put
%ADOEndFontDict
def
/GlyphDirectory 1 dict def
ct_GlyphDirProcs begin
GlyphDirectory
+
0 <001C60D8A8C9B808980A> |
!
end
ct_AddStdCIDMap
%%EndResource
ct_restoreCIDInit /EUOAAA+CMR8-Identity-H /Identity-H 0 [/EUOAAA+CMR8] ct_ComposeFont pop end end
+%ADOEndSubsetFont
+%%BeginResource: encoding
% Identity-H
%PDF_BeginEncoding: N9 (EUOAAA+CMR8-Identity-H)
+/N9 (EUOAAA+CMR8-Identity-H) /Identity-H [ (EUOAAA+CMR8) ]
+ /NoSubstitution [ /Serif ] 0 TZzero
+%%EndResource
352.321 134.531 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
50 <001C60D8A8C9B7883C479819BD474E9964F6BF369AAF487ABFE629F8A563
37D176F7C9556B1CAAE607CA6285C927013D8BDE6137B6739AFDAF8D7D8B1E86
BAFBB9D834592D58F996DFF88B929F1FABA7347C2BBDB5519BE210DDE834DD1D
CB9A84AA77E585DFD5A86708901622F6AC3CFFFF626D8C5FD08A157C4A8F19F7
F5FA2E61175441FDD6> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0002) show
12.6611 136.324 m
/N8 11.955 Tf
(\000x) show
19.313 134.531 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
49 <001C60D8A8C9B7883C47E9695A643EC7CDC9D492AB150D29B838BCDE5298
51B4F36139BB3C5556B7F7E4934494C8CA669B61323ACA68A6240E429D123FC3
10871A43C3C2B8652E724507A70C99EC1FF6EE1EA351C2BAEF> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0001) show
180.665 346.329 m
/N8 11.955 Tf
(\000x) show
187.317 344.536 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
51 <001C60D8A8C9B7883CBAA92B92A60ED97CC7706D34A36348BC2B93805C7C
1833580FAA27E95855649C4EE0492E1681D62AEDB7EC0D4D44FE91FF7AD4665F
D8D6994E56FB00B47353D8538086D2C46021ADFB3F80264F6C2EF23799D21E81
ACDE63FE62C97F7BE27D7DCE3B9BAF5B096FE9F9E10574C4FE3C149B03DD0A59
DE10D784DCCBFDFC6D3C5399775DC28DB91A04691B5B8F3D1C009DFAB49BB818
D90EA7C1> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0003) show
Q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
0.216 w
2.6131 M
true setSA
n
84.2622 -157.449 m
84.2622 -157.449 122.901 -167.8 122.901 -167.8 c
[/DeviceRGB] cs 0.0 0.0 0.0 sc
S
4.0 M
n
282.892 -157.826 m
282.892 -157.826 245.092 -167.955 245.092 -167.955 c
S
1.0 0.0 0.0 -1.0 0.0 0.0 cm
188.661 211.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
35 <001C60D8A8C9B7FA1301BE6180781D244B43F2F97D795A8C67AF297570B2
5D011F7553AE87DA67246C75A123D38A7E2A9E73C089D0155659C213520B6BF3
708CF9E463A551165DF528979C5D29939E4C663B7CB9ACD2D34590AACA015370
E594274B63269C8F1CFCDE8C91D720B13F6B93C2E0C4CB325FAAA90199F590A1
AC543010663224FE9AA5C2BA7CFE5A136E95946849176A836312B7F034FCF4D6
AC1AC7238CDCD1DE8CE95FDACABE12915BD7468460A9C53C13689C62E4957EFA
9AD8D18B2997483879F7A346270DF44C1AE41B892E443E6FAAAFC0E03E3402EC
ABE2B7246DA1D5670AD7110BF40E94066EA9490675CB0A81BEFFC608EFE8EB9C> |
!
end
end end
+%ADOEndSubsetFont
+/N8 11.955 Tf
(\000#) show
175.161 175.824 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
39 <001C60D8A8C9B6747BB73B43E39C205190D75AB2FA80068C30CFF75B781B
8EF25B40D3CE1F8BF1235B5920904D98C1751ACD1ECE66AA5D36E6C1B0A82706
3C26C16EF05F21A86369CC9EEB5C4FBFDD1B1033971034EB6BB92D726AF889E8
FAEBC642112085AE58F32148895EE95BF45DBD1651424FB17E02ED87E805BC12
A8D7FC6BBCEE3EDEE61F46B81CD695594BD8913AA6E31AFF96FA2BC0EB511234
DC983CFE742ECE43A47058200D1BD7CA0237343381C2D71B3385B4C3D1> |
!
end
end end
+%ADOEndSubsetFont
+(\000') show
225.161 241.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
24 <001C60D8A8C9B71063258B553F1B532EC10F40E30216C77B3F0B5660F268
1931B66B80D025CB05EB0F48CA6066E901D78AA8BDBA0138C54FFF8BC2753E84
22BAE3AE8CA07E859A4B65B4D5BD4727F3F9107AA32A4A57EB21B5630206288D
D3BEEDDAA3A69061629F0A34376B6E16CE06067FD5361A33C8D6231C3893FBC2
7DA84816540B60AC54A3B46F95C2017D13E3D6A05441ECC1CCFCC0E271B2EB89
2AA15AB9593923D3AFC1719CB0C359E9F3496DECE857F42C607298AB3F002EE3
10452C9265BCFBD8D84E2C48799C08153602DF1797D52F8C67BDFAEBA64E17B0
DD653E1C5FDC09B8B1BE444DD31C2CCE33B522DE3589EF9276F4E8BDDA185B4D
FFD3F802509F0BBF017DBB660603BE2B25606F1B38D53804373299EC38C0556E
CA9B2D754890C919EA4C2FFA9F42AAF4905ECF7BF321854AD8259B94818A6467
EBBE549BDD6FDF0210134D> |
!
end
end end
+%ADOEndSubsetFont
+(\000\030) show
Q
Q
Q
/STFBAA+CMMI12 /CIDFont _pdfUndefineResource
/STFBAA+CMMI12-Identity-H /Font _pdfUndefineResource
/N8 /Font _pdfUndefineResource
/EUOAAA+CMR8 /CIDFont _pdfUndefineResource
/EUOAAA+CMR8-Identity-H /Font _pdfUndefineResource
/N9 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/api/latex/images/sphere.pdf b/doc/api/latex/images/sphere.pdf
new file mode 100755
index 0000000..ee88c7d
Binary files /dev/null and b/doc/api/latex/images/sphere.pdf differ
diff --git a/doc/logo/nfft_logo.tif b/doc/logo/nfft_logo.tif
new file mode 100644
index 0000000..76c053e
Binary files /dev/null and b/doc/logo/nfft_logo.tif differ
diff --git a/doc/tutorial/README b/doc/tutorial/README
new file mode 100644
index 0000000..a86b7bb
--- /dev/null
+++ b/doc/tutorial/README
@@ -0,0 +1,9 @@
+am 16.03.07 die Version 1490 zu TOMS geschickt.
+am 21.02.08 die Version 2153 zu TOMS geschickt mit den Files
+comments1.pdf comments2.pdf comments3.pdf
+
+am 07.09.08 die Version 2545 in ACM-TOMS Style umgeschrieben.
+zuvor die Aenderungen der 2. Gutachterrunde eingebaut.
+answer.tex - endgueltiger Brief an Editor in Chief und den Assoc. Editor.
+
+am 24.10.08 die Version 2577 mit dem Brief answer.tex eingereicht.
diff --git a/doc/tutorial/acmtrans.bst b/doc/tutorial/acmtrans.bst
new file mode 100644
index 0000000..bc80d4a
--- /dev/null
+++ b/doc/tutorial/acmtrans.bst
@@ -0,0 +1,1770 @@
+% "ACM Transactions" BibTeX style, acmtrans.bst 
+%  for BibTeX version 0.99c, LaTeX version 3.141
+%  Revised 28-MARCH-1996
+%  Revised 30-JUNE-1995
+%  Revised 15-JAN-1996 
+%  $Header: acmtrans.bst,v 1.2 96/01/17 09:05:38 boyland Exp $
+%
+% Hacked by John T. Boyland at University of California, Berkeley
+% (with assistance by John R. Hauser)
+% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
+% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
+% which was based on "newapa.bst" found at ymir.claremont.edu.
+%
+%   Citation format: [author-last-name year]
+%             [author-last-name and author-last-name year]
+%             [author-last-name, author-last-name, and author-last-name year]
+%             [author-last-name et al. year]
+%             [author-last-name]
+%             author-last-name [year]
+%             [author-last-name and author-last-name]
+%             [author-last-name et al.]
+%             [year] or [year,year]
+%             year or year,year
+%
+%   Reference list ordering: alphabetical by author or whatever passes
+%    for author in the absence of one.
+%
+% This BibTeX style has support for abbreviated author lists and for
+%    year-only citations.  This is done by having the citations
+%    actually look like
+%
+%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
+%
+% The LaTeX style has to have the following (or similar)
+%
+%     \let\@internalcite\cite
+%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
+%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
+%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
+%
+% These TeX macro definitions are found in acmtrans.sty. Additional
+% commands to manipulate different components of a citation can be defined
+% so that, for example, you can list author's names without parentheses
+% if using a citation as a noun or object in a sentence.
+%
+% Features of acmtrans.bst:
+% ========================
+%
+% - all authors appear last name first.
+% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
+% - publishers are identified as publisher, address
+% - conferences papers (inproceedings) may give city of conference,
+%   date of conference, and journal that the proceedings appear in.
+% - months abbreviated to max four letters (eg. Mar.)
+% - volume of a series indicated after the title of the series
+% - editors appear after edited title and are identified by a trailing "Eds."
+%   not in parentheses.  Editor names are not given in small caps.
+%   (unless there is no author line)
+% - names terminated with a period even if there is no first name.
+% - editions are indicated trailing after the work, not in parentheses.
+% - "et al." citations have a protected period to avoid bad spacing (jrh)
+% - "address" required when publisher given
+% - series (roman) and volume are in a sentence separate from (book-)title
+%
+%
+% Features of chicago.bst:
+% =======================
+%
+% - full names used in citations, but abbreviated citations are available
+%   (see above)
+% - if an entry has a "month", then the month and year are also printed
+%   as part of that bibitem.
+% - all conjunctions use "and" instead of "\&"
+% - major modification from Chicago Manual of Style (13th ed.) is that
+%   only the first author in a reference appears last name first-
+%   additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+%   article entries.
+% - book, inbook, and manual use "location: publisher" (or organization)
+%   for address and publisher. All other types list publishers separately.
+% - "pp." are used to identify page numbers for all entry types except
+%   articles.
+% - organization is used as a citation label if neither author nor editor
+%   is present (for manuals).
+% - "et al." is used for long author and editor lists, or when "others"
+%   is used.
+%
+% Modifications and bug fixes from newapa.bst:
+% ===========================================
+%
+%   - added month, year to bib entries if month is present
+%   - fixed bug with In proceedings, added necessary comma after title
+%   - all conjunctions changed to "and" from "\&"
+%   - fixed bug with author labels in my.full.label: "et al." now is
+%        generated when "others" is an author name
+%   - major modification from Chicago Manual of Style (13th ed.) is that
+%     only the first author in a reference appears last name first-
+%     additional authors appear as J. Q. Public.
+%   - pages are listed as "pp. xx-xx" in all entry types except
+%     article entries. Unnecessary (IMHO) "()" around page numbers
+%     were removed, and page numbers now don't end with a period.
+%   - created chicago.sty for use with this bibstyle (required).
+%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
+%     number, and /or pages. Renamed to format.jour.vol.
+%   - fixed bug in formatting booktitles: additional period an error if
+%     book has a volume.
+%   - fixed bug: editors usually given redundant period before next clause
+%     (format.editors.dot) removed.
+%   - added label support for organizations, if both author and editor
+%     are missing (from alpha.bst). If organization is too long, then
+%     the key field is used for abbreviated citations.
+%   - In proceedings or books of several volumes, no comma was written
+%     between the "Volume x" and the page numbers (this was intentional
+%     in newapa.bst). Fixed.
+%   - Some journals may not have volumes/numbers, only month/year (eg.
+%     IEEE Computer). Fixed bug in article style that assumed volume/number
+%     was always present.
+%
+% Original documentation for newapa.sty:
+% =====================================
+%
+% This version was made by modifying the master file made by
+% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
+% style of Peter F. Patel-Schneider.
+%
+% Copyright (C) 1985, all rights reserved.
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than 'newapa.bst'.
+% There are undoubtably bugs in this style.  If you make bug fixes,
+% improvements, etc.  please let me know.  My e-mail address is:
+%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
+%
+% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    city	% jtb: added
+    date	% jtb: added
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+  }
+  {}
+  { label.year extra.label sort.year sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t u }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+    { add.period$ write$
+      newline$
+      "\newblock " write$
+    }
+    { output.state before.all =
+        'write$
+        { add.period$ " " * write$ }
+      if$
+    }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+% Use a colon to separate output. Used only for address/publisher
+% combination in book/inbook types, address/institution for manuals,
+% and organization:publisher for proceedings (inproceedings).
+%
+FUNCTION {output.nonnull.colon}
+{ 's :=
+  output.state mid.sentence =
+    { ": " * write$ }
+    { output.state after.block =
+    { add.period$ write$
+      newline$
+      "\newblock " write$
+    }
+    { output.state before.all =
+        'write$
+        { add.period$ " " * write$ }
+      if$
+    }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.colon}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull.colon
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check.colon}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull.colon
+  if$
+}
+
+FUNCTION {output.year.check}
+{ year empty$
+     { "empty year in " cite$ * warning$ }
+     { write$
+        " " year * extra.label *
+       mid.sentence 'output.state :=
+     }
+  if$
+}
+
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+    'skip$
+    { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+%
+% Emphasize the top string on the stack.
+%
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+%
+% Emphasize the top string on the stack, but add a trailing space.
+%
+FUNCTION {emphasize.space}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "\/}" * }
+  if$
+}
+
+%
+% Emphasize the top string on stack, add a trailing comma and space.
+%
+FUNCTION {emphasize.comma}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * ",\/}" * }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+%
+% Format bibliographical entries with the first author last name first,
+% and subsequent authors with initials followed by last name.
+% All names are formatted in this routine.
+%
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=               % nameptr = 1;
+  s num.names$ 'numnames :=    % numnames = num.name$(s);
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    { nameptr #1 =
+        {"{\sc " s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * "}" * 't := }
+        {"{\sc " s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * "}" * 't := }
+      if$
+      nameptr #1 >
+        { namesleft #1 >
+              { ", " * t * }
+              { numnames #2 >
+                  { "," * }
+                  'skip$
+                if$
+                t "{\sc others}" =
+                    { " {\sc et~al\mbox{.}}" * } % jrh: avoid spacing problems
+                    { " {\sc and} " * t * } % from Chicago Manual of Style
+                  if$
+               }
+               if$
+             }
+            't
+        if$
+        nameptr #1 + 'nameptr :=          % nameptr += 1;
+        namesleft #1 - 'namesleft :=      % namesleft =- 1;
+    }
+  while$
+}
+
+FUNCTION {my.full.label}
+{ 's :=
+  #1 'nameptr :=               % nameptr = 1;
+  s num.names$ 'numnames :=    % numnames = num.name$(s);
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
+      nameptr #1 >
+        { namesleft #1 >
+              { ", " * t * }
+              { numnames #2 >
+                  { "," * }
+                  'skip$
+                if$
+                t "others" =
+                    { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+                    { " and " * t * } % from Chicago Manual of Style
+                  if$
+               }
+               if$
+             }
+            't
+        if$
+        nameptr #1 + 'nameptr :=          % nameptr += 1;
+        namesleft #1 - 'namesleft :=      % namesleft =- 1;
+    }
+  while$
+
+}
+
+FUNCTION {format.names.fml}
+%
+% Format names in "familiar" format, with first initial followed by
+% last name. Like format.names, ALL names are formatted.
+% jtb: The names are NOT put in small caps
+%
+{ 's :=
+  #1 'nameptr :=               % nameptr = 1;
+  s num.names$ 'numnames :=    % numnames = num.name$(s);
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    { "{" s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
+
+      nameptr #1 >
+        { namesleft #1 >
+              { ", " * t * }
+               { numnames #2 >
+                    { "," * }
+                    'skip$
+                  if$
+                  t "{others}" =
+                        { " {et~al\mbox{.}}" * }
+                        { " {and} " * t * }
+%                       { " {\&} " * t * }
+                      if$
+                }
+               if$
+             }
+            't
+        if$
+        nameptr #1 + 'nameptr :=          % nameptr += 1;
+        namesleft #1 - 'namesleft :=      % namesleft =- 1;
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names add.period$} % jtb: add period if none before
+  if$
+}
+
+FUNCTION {format.key}
+{ empty$
+    { key field.or.null }
+    { "" }
+  if$
+}
+
+%
+% Format editor names for use in the "in" types: inbook, incollection,
+% inproceedings: first initial, then last names. When editors are the
+% LABEL for an entry, then format.editor is used which lists editors
+% by last name first.
+%
+FUNCTION {format.editors.fml}
+{ editor empty$
+    { "" }
+    { editor format.names.fml
+      editor num.names$ #1 >
+    { ", Eds." * }	% jtb: removed parentheses
+    { ", Ed." * }	% jtb: removed parentheses
+      if$
+    }
+  if$
+}
+
+%
+% Format editor names for use in labels, last names first.
+%
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+    { ", Eds." * }	% jtb: removed parentheses
+    { ", Ed." * }	% jtb: removed parentheses
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+}
+
+% Note that the APA style requres case changes
+% in article titles. The following does not
+% change cases. If you perfer it, uncomment the
+% following and comment out the above.
+
+%FUNCTION {format.title}
+%{ title empty$
+%    { "" }
+%    { title }
+%  if$
+%}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+    { t #1 #2 substring$ "--" = not
+        { "--" *
+          t #2 global.max$ substring$ 't :=
+        }
+        {   { t #1 #1 substring$ "-" = }
+        { "-" *
+          t #2 global.max$ substring$ 't :=
+        }
+          while$
+        }
+      if$
+    }
+    { t #1 #1 substring$ *
+      t #2 global.max$ substring$ 't :=
+    }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.btitle}
+{ edition empty$
+  { title emphasize }
+  { title empty$
+    { title emphasize } % jtb: what is this supposed to do ?!?
+    { "{\em " title * "\/}, " * edition * " ed." * } % jtb: no parens for ed.
+    if$
+  }
+  if$
+}
+
+FUNCTION {format.emphasize.booktitle}
+{ edition empty$
+  { booktitle emphasize }
+  { booktitle empty$
+    { booktitle emphasize } % jtb: what is this supposed to do ?!?
+    { "{\em " booktitle * "\/}, " * edition * " ed." * } % jtb: no ()s for ed.
+    if$
+    }
+  if$
+  }
+
+% jtb: if the preceding string (the title of the conference) is non-empty,
+% jtb: append the location, otherwise leave empty (so as to trigger the
+% jtb: error message in output.check
+FUNCTION {format.city}
+{ duplicate$ empty$
+  { }
+  { city empty$
+     { date empty$
+       { }
+       { " (" * date * ")" * }
+       if$
+     }
+     { date empty$
+       { " (" * city * ")" * }
+       { " (" * city * ", " * date * ")" * }
+       if$
+     }
+     if$
+  }
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+% jtb: If there is a series, this is added and the volume trails after it.
+% jtb: Otherwise, "Vol" is Capitalized.
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { series empty$
+        { "Vol." volume tie.or.space.connect}
+        { series ", " * "vol." volume tie.or.space.connect *}
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+    { series field.or.null }
+    { output.state mid.sentence =
+        { "Number" } % gnp - changed to mixed case always
+        { "Number" }
+      if$
+      number tie.or.space.connect
+      series empty$
+        { "there's a number but no series in " cite$ * warning$ }
+        { " in " * series * }
+      if$
+    }
+      if$
+    }
+    { "" }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+    { #1 'multiresult := }
+    { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+  { "" }
+  { pages multi.page.check
+	{ pages n.dashify } % gnp - removed () % jtb: removed pp.
+	{ pages }
+    if$
+  }
+  if$
+}
+
+% By Young (and Spencer)
+% GNP - fixed bugs with missing volume, number, and/or pages
+%
+% Format journal, volume, number, pages for article types.
+%
+FUNCTION {format.jour.vol}
+{ journal empty$
+    { "no journal in " cite$ * warning$
+      "" }
+    { journal emphasize.space }
+    if$
+  number empty$
+    { volume empty$
+       { "no number and no volume in " cite$ * warning$
+         "" * }
+       { "~{\em " * Volume * "}" * }
+      if$
+    }
+    { volume empty$
+      {"no volume for " cite$ * warning$
+       "~" * number * }
+      { "~" *
+        volume emphasize.comma
+        "~" * number * * }
+      if$
+     month empty$
+     {} 
+     {" (" * month * ")" *} 
+     if$
+    }
+  if$
+  pages empty$
+    {"page numbers missing in " cite$ * warning$
+     "" * } % gnp - place a null string on the stack for output
+    { duplicate$ empty$
+      { pop$ format.pages }
+      { ", " *  pages n.dashify * } % gnp - removed pp. for articles
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { "Chapter" } % gnp - changed to mixed case
+        { type "t" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+        {"page numbers missing in " cite$ * warning$} % gnp - added check
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+% jtb: format for collections or proceedings not appearing in a journal
+FUNCTION {format.in.emphasize.booktitle}
+{ booktitle empty$
+  { "" }
+  { "In " format.emphasize.booktitle * }
+  if$
+}
+
+% jtb: format for proceedings appearing in a journal
+FUNCTION {format.in.booktitle}
+{ booktitle empty$
+  { "" }
+  { "In " booktitle * }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+  { "" }
+  { editor empty$
+    { "In " format.emphasize.booktitle * }
+		% jtb: swapped editor location
+    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
+    if$
+  }
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$ 
+    'skip$
+%   {pop$
+   {{ "" }
+   type "t" change.case$}
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Tech. Rep." }
+    'type
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ "See"
+  "\citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al\mbox{.}" * }		% jrh: avoid spacing problems
+    { #2 <
+    'skip$
+    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+        { " et~al\mbox{.}" * }		% jrh: avoid spacing problems
+        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+      if$
+    }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+    { series empty$
+        { "need editor, key, or series for " cite$ * " to crossref " *
+          crossref * warning$
+          "" *
+        }
+        { "{\em " * series * "\/}" * }
+      if$
+    }
+    { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ "See"
+  " \citeN{" * crossref * "}" *
+}
+
+% format.lab.names:
+%
+% determines "short" names for the abbreviated author information.
+% "Long" labels are created in calc.label, using the routine my.full.label
+% to format author and editor fields.
+%
+% There are 4 cases for labels.   (n=3 in the example)
+% a) one author             Foo
+% b) one to n               Foo, Bar and Baz
+% c) use of "and others"    Foo, Bar et al.
+% d) more than n            Foo et al.
+%
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #2 >    % change number to number of others allowed before
+		   % forcing "et al".
+    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
+    {
+      numnames #1 - 'namesleft :=
+      #2 'nameptr :=
+      s #1 "{vv~}{ll}" format.name$
+	{ namesleft #0 > }
+	{ nameptr numnames =
+	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+		{ " et~al\mbox{.}" * }		% jrh: avoid spacing problems
+		{ " and " * s nameptr "{vv~}{ll}" format.name$ * }
+	      if$
+	    }
+	    { ", " * s nameptr "{vv~}{ll}" format.name$ * }
+	  if$
+	  nameptr #1 + 'nameptr :=
+	  namesleft #1 - 'namesleft :=
+	}
+      while$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+          { "no key, author in " cite$ * warning$
+            cite$ #1 #3 substring$ }
+         'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+    { key empty$
+          { "no key, editor in " cite$ * warning$
+            cite$ #1 #3 substring$ }
+          'key
+        if$
+     }
+     { editor format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if author is null.
+%
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "no key, author or organization in " cite$ * warning$
+              cite$ #1 #3 substring$ }
+	    'key
+	  if$
+	}
+        { organization }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if editor is null.
+%
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "no key, editor or organization in " cite$ * warning$
+              cite$ #1 #3 substring$ }
+	    'key
+	  if$
+	}
+        { organization }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+          { key empty$
+               { "no key, author, or editor in " cite$ * warning$
+                 cite$ #1 #3 substring$ }
+             'key
+           if$
+         }
+          { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+%
+% Changed - GNP. See also author.organization.sort, editor.organization.sort
+% Form label for BibTeX entry. The classification of which fields are used
+% for which type of entry (book, inbook, etc.) are taken from alpha.bst.
+% The change here from newapa is to also include organization as a
+% citation label if author or editor is missing.
+%
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+	'editor.key.organization.label
+	{ type$ "manual" =
+	    'author.key.organization.label
+	    'author.key.label
+	  if$
+	}
+      if$
+    }
+  if$
+
+  author empty$  % generate the full label citation information.
+    { editor empty$
+        { organization empty$
+           { "no author, editor, or organization in " cite$ * warning$
+             "??" }
+           { organization }
+           if$
+        }
+        { editor my.full.label }
+        if$
+    }
+    { author my.full.label }
+  if$
+
+% leave label on the stack, to be popped when required.
+
+  "}{" * swap$ * "}{" *
+%  year field.or.null purify$ #-1 #4 substring$ *
+%
+% save the year for sort processing afterwards (adding a, b, c, etc.)
+%
+  year field.or.null purify$ #-1 #4 substring$
+  'label.year :=
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+
+  "\bibitem[\protect\citeauthoryear{" write$
+  calc.label write$
+  sort.year write$
+  "}]{" write$
+
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output          % added
+  output.year.check                 % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  crossref missing$
+    { format.jour.vol output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors
+	  "author and editor" output.check }
+    { format.authors
+	  output.nonnull
+      crossref missing$
+    	{ "author and editor" editor either.or.check }
+    	'skip$
+      if$
+    }
+  if$
+  output.year.check       % added
+  new.block
+  format.btitle
+  "title" output.check
+  crossref missing$
+    { new.sentence		% jtb: start a new sentence for series/volume
+      format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address "address" output.check	% jtb: require address
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  author format.key output          % added
+  output.year.check                 % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  howpublished output
+  address output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors
+      "author and editor" output.check
+    }
+    { format.authors output.nonnull
+      crossref missing$
+    { "author and editor" editor either.or.check }
+    'skip$
+      if$
+    }
+  if$
+  output.year.check                 % added
+  new.block
+  format.btitle
+  "title" output.check
+  crossref missing$
+    { new.sentence		% jtb: start a new sentence for series/volume
+      format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address "address" output.check	% jtb: require address
+      format.chapter.pages
+      "chapter and pages" output.check	% jtb: moved from before publisher
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output       % added
+  output.year.check              % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  crossref missing$
+  { format.in.ed.booktitle
+    "booktitle" output.check
+    new.sentence		% jtb: start a new sentence for series/volume
+    format.bvolume output
+    format.number.series output
+    new.sentence
+    publisher "publisher" output.check
+    address "address" output.check	% jtb: require address
+    format.chapter.pages output % gnp - was special.output.nonnull
+%                                 left out comma before page numbers
+				% jtb: moved from before publisher
+  }
+  { format.incoll.inproc.crossref
+	output.nonnull
+    format.chapter.pages output
+  }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output            % added
+  output.year.check                   % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  crossref missing$
+    { journal missing$		% jtb: proceedings appearing in journals
+      { format.in.emphasize.booktitle format.city "booktitle" output.check
+        format.editors.fml output
+        new.sentence		% jtb: start a new sentence for series/volume
+        format.bvolume output
+        format.number.series output
+        new.sentence
+        organization output
+        publisher "publisher" output.check % jtb: require publisher (?)
+        address "address" output.check	% jtb: require address
+        format.pages output	% jtb: moved from before publisher
+       }
+       % jtb: new:
+       { format.in.booktitle format.city "booktitle" output.check
+         format.editors.fml output
+         new.sentence
+         format.jour.vol output
+       }
+       if$
+      }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { editor empty$
+      { organization "organization" output.check
+        organization format.key output }  % if all else fails, use key
+      { format.editors "author and editor" output.check }
+      if$
+    }
+    { format.authors output.nonnull }
+    if$
+  output.year.check                 % added
+  new.block
+  format.btitle
+  "title" output.check
+  organization address new.block.checkb
+  % jtb: back to normal style: organization, address
+  organization "organization" output.check
+  address output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output          % added
+  output.year.check                 % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  "M.S.\ thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  author format.key output            % added
+  output.year.check                   % added
+  title howpublished new.block.checkb
+  format.title output
+  new.block
+  howpublished output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output            % added
+  output.year.check                   % added
+  new.block
+  format.title
+  "title" output.check
+  new.block  
+  format.thesis.type "Ph.D. thesis" output.nonnull
+  school "school" output.check
+  address output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output
+      organization format.key output }  % gnp - changed from author format.key
+    { format.editors output.nonnull }
+  if$
+% author format.key output             % gnp - removed (should be either
+%                                        editor or organization
+  output.year.check                    % added (newapa)
+  new.block
+  format.btitle format.city "title" output.check	% jtb: added city
+  new.sentence
+  format.bvolume output
+  format.number.series output
+  new.sentence
+  organization output
+  % jtb: normal order: publisher, address
+  publisher output
+  address output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output             % added
+  output.year.check                    % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  format.tr.number output		% jtb: moved month ...
+  institution "institution" output.check
+  address output
+  new.sentence
+  month output				% jtb: ... to here (no parens)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output              % added
+  output.year.check                      % added
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  note "note" output.check
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}		% jtb: corrected: was "March"
+
+MACRO {apr} {"Apr."}		% jtb: corrected: was "April"
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acmlett} {"ACM Lett. Program. Lang. Syst."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {ai} {"Artificial Intelligence"}
+
+MACRO {al} {"Ada Lett."}
+
+MACRO {acr} {"Adv. Comput. Res."}
+
+MACRO {bit} {"Bit"}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {cj} {"Comput. J."}
+
+MACRO {cn} {"Comput. Netw."}
+
+MACRO {cl} {"Comput. Lang."}
+
+MACRO {ibmjrd} {"IBM J. Res. and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ict} {"Inf. Contr."}
+
+MACRO {ieebcs} {"IEE/BCS Softw. Eng. J."}
+
+MACRO {ieees} {"IEEE Softw."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ieeetpds} {"IEEE Trans. Parall. Distrib. Syst."}
+
+MACRO {ieeetit} {"IEEE Trans. Inf. Theory"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {icp} {"Inf. Comput."}
+
+MACRO {ist} {"Inf. Softw. Tech."}
+
+MACRO {ijsa} {"Int. J. Supercomput. Appl."}
+
+MACRO {ijpp} {"Int. J. Parallel Program."}
+
+MACRO {jlp} {"J. Logic Program."}
+
+MACRO {jfp} {"J. Funct. Program."}
+
+MACRO {jcss} {"J. Comput. Syst. Sci."}
+
+MACRO {jsmrp} {"J. Softw. Maint. Res. Pract."}
+
+MACRO {jss} {"J. Syst. Softw."}
+
+MACRO {jlc} {"J. Logic and Comput."}
+
+MACRO {jlsc} {"J. Lisp Symb. Comput."}
+
+MACRO {lpls} {"Lett. Program. Lang. Syst."}
+
+MACRO {mor} {"Math. Oper. Res."}
+
+MACRO {mscs} {"Math. Struct. Comput. Sci."}
+
+MACRO {mst} {"Math. Syst. Theor."}	% jtb: was Math. Syst. Theory
+				% jtb: (if you ask me, I prefer the old way)
+MACRO {ngc} {"New Gen. Comput."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {spe} {"Softw. Pract. Exper."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphics"}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}
+
+MACRO {tocl} {"ACM Trans. On Comp. Logic"}
+
+MACRO {tcs} {"Theor. Comput. Sci."}	% jtb: was Theor. Comp. Sci.
+
+MACRO {tr} {"Tech. Rep."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+          { "   " * }
+         'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+          { " et~al" * }
+          { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+         { "to sort, need author or key in " cite$ * warning$
+           "" }
+         { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+    { key empty$
+         { "to sort, need editor or key in " cite$ * warning$
+           ""
+         }
+         { key sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { "missing author in " cite$ * warning$
+      editor empty$
+         { key empty$
+             { "to sort, need author, editor, or key in " cite$ * warning$
+               ""
+             }
+             { key sortify }
+           if$
+         }
+         { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+%
+% added - GNP. Stack author or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ organization sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+%
+% added - GNP. Stack editor or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ organization sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+%
+% Presort creates the bibentry's label via a call to calc.label, and then
+% sorts the entries based on entry type. Chicago.bst adds support for
+% including organizations as the sort key; the following is stolen from
+% alpha.bst.
+%
+{ calc.label sortify % recalculate bibitem label
+  year field.or.null purify$ #-1 #4 substring$ * % add year
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  #1 entry.max$ substring$        % added for newapa
+  'sort.label :=                  % added for newapa
+  sort.label                      % added for newapa
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT             % by label, year, author/editor, title
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+  "" 'next.extra :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+%
+% Pass through all entries, comparing current entry to last one.
+% Need to concatenate year to the stack (done by calc.label) to determine
+% if two entries are the same (see presort)
+%
+{ last.label
+  calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+  #1 entry.max$ substring$ =     % are they equal?
+     { last.extra.num #1 + 'last.extra.num :=
+       last.extra.num int.to.chr$ 'extra.label :=
+     }
+     { "a" chr.to.int$ 'last.extra.num :=
+       "" 'extra.label :=
+       calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+       #1 entry.max$ substring$ 'last.label := % assign to last.label
+     }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+     'skip$
+  if$
+  label.year extra.label * 'sort.year :=
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT             % by sort.label, year, title --- giving final bib. order.
+
+FUNCTION {begin.bib}
+
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{}" write$ newline$
+}
+
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/tutorial/acmtrans2m.cls b/doc/tutorial/acmtrans2m.cls
new file mode 100644
index 0000000..442109c
--- /dev/null
+++ b/doc/tutorial/acmtrans2m.cls
@@ -0,0 +1,1460 @@
+% latex2e by nr 7/3/96
+% acmtrans.cls revised 4/19/96
+%              revised again 31-JAN-1996 (see end of file)
+%              revised 5-14-1997 :
+%                       Don't use sans-serif font in categories and descriptors
+%                       include latexsym by default
+%                       Define longpage and shortpage
+% Adjusted from the acmtrans2e.cls file to the needs of ACM TOCL by
+% Marco Aiello on June 14, 2000.
+% Further changes made by Frederic Goualard on Sep. 27, 2000
+% to take care of the indentation problem in the bibliography 
+% arising without the use of the hyperref package.
+% Modularization to adapt to the needs of JACM, TOCL, 
+% TODAES, TODS, TOGS, TOMS, AND TOPLAS, by Marco Aiello on 
+% June 2001.
+% Here is the basic framework that is needed to convert your paper 
+% into ACM Transactions format and bibliographic format.  For a tutorial
+% introduction, see ``instructions.tex'' (compile it with LaTeX) that
+% accompanies the distribution of this style file.
+%
+%  -> \documentclass{acmtrans2m}
+%  -> \markboth{}{}
+%         takes 2 arguments and it is for the left- and right-page headers:
+%         the first set of braces is assigned for author's name(s) 
+%         and
+%         the second set of braces is assigned for the title 
+%             (if the title is too long, contraction may be needed
+%  -> \title{}
+%         if the title is too long, it can be separated by \\
+%  -> \author{}
+%         author1 \\ author1 affiliation
+%         \and
+%         author2 \\ author2 affiliation
+%  -> \begin{abstract}
+%  -> \end{abstract}
+%
+%  -> \category{}{}{}
+%         takes 3 arguments for the Computing Reviews Classification Scheme.
+%         ex: \category{D.3.3}{Programming Languages}{Language Constructs and 
+%                   Features}[data types and structures]
+%                   the last argument, in square brackets, is optional.
+%  -> \terms{} (ex: \terms{Human Factors, Languages})
+%  -> \keywords{} (in alphabetical order \keywords{document processing, sequences, 
+%                      string searching, subsequences, substrings})
+%  -> \begin{document}
+%
+%  -> \begin{bottomstuff}
+%          similar to \thanks     
+%          for authors' addresses; research/grant statements
+%  -> \end{bottomstuff}
+%  -> \maketitle
+%
+%     Now you can start the body of the paper; your figures, tables and 
+%          use all the latex constructs.
+%
+%  -> \begin{acks}
+%          acknowledgements
+%  -> \end{acks}
+%
+%  -> \bibliographystyle{acmtrans}
+%  -> \bibliography{mybib_file}
+%
+%     ****
+%     If your paper has been accepted with a separate (electronic only)
+%        appendix, you need to add the following control sequence:
+%
+%
+%       body of appendix 
+%!!!!!! \appendixhead has be cut into two: \appendixhead and \elecappendix
+%!!!!!! See end of file. (jtb)
+%
+%  -> \end{document}
+%
+% Do not worry about the other definitions in this style file
+% Remember to compile: latex, bibtex, latex latex
+%
+% Bibliographic cite forms needed:
+%
+%  \cite{key}
+%    which produces citations with author list and year.
+%    eg. [Brown 1978; Jarke, et al. 1985]
+%  \citeA{key}
+%    which produces citations with only the author list.
+%    eg. [Brown; Jarke, et al.]
+%  \citeN{key}
+%    which produces citations with the author list and year, but
+%    can be used as nouns in a sentence; no brackets appear around
+%    the author names, but only around the year.
+%      eg. Shneiderman [1978] states that......
+%    \citeN should only be used for a single citation.
+%    \citeNN{refkey1,refkey2} for author [ref1year; ref2year]
+%    \citeyear{key}
+%        which produces the year information only, within brackets.
+%
+% Abbreviated author lists use the ``et al.'' construct.
+%
+% The above are examples of required ACM bibliographic cite formats needed.
+% *******************
+% Here is the complete list of cite forms from the chicago bibliographic style
+%
+%  \cite{key}
+%    which produces citations with abbreviated author list and year.
+%  \citeNP{key}
+%    which produces citations with abbreviated author list and year.
+%  \citeA{key}
+%    which produces only the abbreviated author list.
+%  \citeANP{key}
+%    which produces only the abbreviated author list.
+%  \citeN{key}
+%    which produces the abbreviated author list and year, with only the
+%    year in parentheses. Use with only one citation.
+%  \citeyear{key}
+%    which produces the year information only, within parentheses.
+%  \citeyearNP{key}
+%    which produces the year information only.
+%
+% Abbreviated author lists use the ``et al.'' construct.
+%
+% `NP' means `no parentheses' 
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{acmtrans2m} [1996/07/03 ACM Transactions class based on <23 April 96>]
+\RequirePackage{latexsym}
+%aiellom{
+\RequirePackage{url}
+
+% Do not change the following! Use the appropriate acmtocl, acmtods, ... option
+\def\@acmVolume{V} %the volume
+\def\@acmNumber{N} %the number
+\def\@acmYear{YY}  %the last two digits of the year, 
+\def\@acmMonth{Month}  %the month
+\def\@journalName{ACM Journal Name} %the name of the ACM journal
+\def\@journalNameShort{jn} %the acronym of the ACM journal
+\def\@permissionCodeOne{0000-0000} %the permission code of the ACM journal
+\def\@permissionCodeTwo{0000} %the permission code of the ACM journal part 2
+\def\@pageCode{\acmPageCode} %the first page of the article in 4 digits
+
+
+\newif\if at acmjacm
+\newif\if at acmtocl
+\newif\if at acmtodaes
+\newif\if at acmtods
+\newif\if at acmtogs
+\newif\if at acmtoms
+\newif\if at acmtoplas
+
+\DeclareOption{acmnow}{
+  \typeout{}
+  \typeout{Directly generating the Month and Year for footers from the clock.}
+  \def\@acmYear{\yearTwoDigits}  
+  \def\@acmMonth{\monthWord}  
+}
+
+\DeclareOption{acmjacm}{
+  \typeout{}
+  \typeout{Using ACM, JACM's option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  %\global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  \global\@acmtodaesfalse
+  \global\@acmtodsfalse
+  \global\@acmtogsfalse
+  \global\@acmtomsfalse
+  \global\@acmtoplasfalse
+  \global\@acmjacmtrue
+  \def\@journalName{Journal of the ACM}
+  \def\@journalNameShort{jacm}        
+  \def\@permissionCodeOne{0004-5411} 
+  \def\@permissionCodeTwo{0100} 
+}
+
+\DeclareOption{acmtocl}{
+  \typeout{}
+  \typeout{Using ACM, TOCL's option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  \global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  \global\@acmtodaesfalse
+  \global\@acmtodsfalse
+  \global\@acmtogsfalse
+  \global\@acmtomsfalse
+  \global\@acmtoplasfalse
+  \global\@acmtocltrue
+  \def\@journalName{ACM Transactions on Computational Logic}
+  \def\@journalNameShort{tocl}        
+  \def\@permissionCodeOne{1529-3785} 
+  \def\@permissionCodeTwo{0700} 
+}
+
+\DeclareOption{acmtodaes}{
+  \typeout{}
+  \typeout{Using ACM, TODAES option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  \global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  %\global\@acmtodaesfalse
+  \global\@acmtodsfalse
+  \global\@acmtogsfalse
+  \global\@acmtomsfalse
+  \global\@acmtoplasfalse
+  \global\@acmtodaestrue
+  \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}
+  \def\@journalNameShort{todaes}        
+  \def\@permissionCodeOne{1084-4309} 
+  \def\@permissionCodeTwo{0400} 
+}
+
+\DeclareOption{acmtods}{
+  \typeout{}
+  \typeout{Using ACM, TODS's option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  \global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  \global\@acmtodaesfalse
+  %\global\@acmtodsfalse
+  \global\@acmtogsfalse
+  \global\@acmtomsfalse
+  \global\@acmtoplasfalse
+  \global\@acmtodstrue
+  \def\@journalName{ACM Transactions on Database Systems}
+  \def\@journalNameShort{tods}        
+  \def\@permissionCodeOne{0362-5915} 
+  \def\@permissionCodeTwo{0300} 
+}
+
+\DeclareOption{acmtogs}{
+  \typeout{}
+  \typeout{Using ACM, TOGS's option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  \global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  \global\@acmtodaesfalse
+  \global\@acmtodsfalse
+  %\global\@acmtogsfalse
+  \global\@acmtomsfalse
+  \global\@acmtoplasfalse
+  \global\@acmtogstrue
+  \def\@journalName{ACM Transactions on Graphics}
+  \def\@journalNameShort{togs}        
+  \def\@permissionCodeOne{0730-0301} 
+  \def\@permissionCodeTwo{0100} 
+}
+
+\DeclareOption{acmtoms}{
+  \typeout{}
+  \typeout{Using ACM, TOMS's option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  \global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  \global\@acmtodaesfalse
+  \global\@acmtodsfalse
+  \global\@acmtogsfalse
+  %\global\@acmtomsfalse
+  \global\@acmtoplasfalse
+  \global\@acmtomstrue
+  \def\@journalName{ACM Transactions on Mathematical Software}
+  \def\@journalNameShort{toms}        
+  \def\@permissionCodeOne{0098-3500} 
+  \def\@permissionCodeTwo{1200} 
+}
+
+\DeclareOption{acmtoplas}{
+  \typeout{}
+  \typeout{Using ACM, TOPLAS option: 2001/06/01 by Marco Aiello et al.}
+  \typeout{}
+  \global\@acmjacmfalse  
+  \global\@acmtoclfalse
+  \global\@acmtodaesfalse
+  \global\@acmtodsfalse
+  \global\@acmtogsfalse
+  \global\@acmtomsfalse
+  %\global\@acmtoplasfalse
+  \global\@acmtoplastrue
+  \def\@journalName{ACM Transactions on Programming Languages and Systems}
+  \def\@journalNameShort{toplas}        
+  \def\@permissionCodeOne{0164-0925} 
+  \def\@permissionCodeTwo{0500} 
+}
+%}aiellom
+
+
+
+\if at compatibility\else
+\DeclareOption{a4paper}
+   {\setlength\paperheight {297mm}%
+    \setlength\paperwidth  {210mm}%
+    \def\special at paper{210mm,297mm}}
+\DeclareOption{a5paper}
+   {\setlength\paperheight {210mm}%
+    \setlength\paperwidth  {148mm}%
+    \def\special at paper{148mm,210mm}}
+\DeclareOption{b5paper}
+   {\setlength\paperheight {250mm}%
+    \setlength\paperwidth  {176mm}%
+    \setlength\voffset     {-15mm}%
+    \setlength\hoffset     {-20mm}%
+    \def\special at paper{176mm,250mm}}
+\DeclareOption{letterpaper}
+   {\setlength\paperheight {11in}%
+    \setlength\paperwidth  {8.5in}%
+    \def\special at paper{8.5in,11in}}
+\DeclareOption{legalpaper}
+   {\setlength\paperheight {14in}%
+    \setlength\paperwidth  {8.5in}%
+    \def\special at paper{8.5in,14in}}
+\DeclareOption{executivepaper}
+   {\setlength\paperheight {10.5in}%
+    \setlength\paperwidth  {7.25in}%
+    \def\special at paper{7.25in,10.5in}}
+\DeclareOption{landscape}
+   {\setlength\@tempdima   {\paperheight}%
+    \setlength\paperheight {\paperwidth}%
+    \setlength\paperwidth  {\@tempdima}}
+\fi
+
+\DeclareOption{checkMargin}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue  \@mparswitchtrue}
+
+\DeclareOption{10pt}{\def\@ptsize{0}} %needed for amssymbols.sty 
+\DeclareOption{11pt}{\ClassError{acmtrans}{11pt style not supported}
+                        {ACM transactions documents can be set in 10pt only}}
+\DeclareOption{12pt}{\ClassError{acmtrans}{11pt style not supported}
+                        {ACM transactions documents can be set in 10pt only}}
+\newif\if at hyperref
+\DeclareOption{hyperref}{%
+        \def\pages{\pageref{@firstpg}--\pageref{@lastpg}}%
+        \def\mypage{\thepage}%
+        \def\@getpagenum#1#2#3#4{#2}%
+        \def\pdfinfo#1#2{\pdfmark{pdfmark=/DOCINFO,Title=#1,Author=#2}}
+        \global\@hyperreftrue
+        }
+\DeclareOption{nohyperref}{
+                \def\pages{\pageref{@firstpg}--\pageref{@lastpg}}%
+                \def\@getpagenum#1#2{#2}%
+                \def\mypage{\thepage}%
+                \def\pdfinfo#1#2{}%
+                \def\pdfbookmark#1#2{}%
+                \global\@hyperreffalse
+                }
+\DeclareOption{notfinal}{
+                \def\pages{BD}%
+                \def\mypage{TBD}%
+                \def\@getpagenum#1#2{#2}%
+                \def\pdfinfo#1#2{}%
+                \def\pdfbookmark#1#2{}%
+                }
+\DeclareOption{omitline}{\def\@abstractbottom{\relax}}
+\DeclareOption{dontomitline}{\def\@abstractbottom{\if at acmjacm\else\hbox{\vrule height .2pt width 30pc}\fi}}
+\ExecuteOptions{twoside,notfinal,10pt,dontomitline,nohyperref,letterpaper} % defaults
+
+
+
+\ProcessOptions
+
+%{aiellom to automatize the issue specific data
+\def\acmVolume#1{\def\@acmVolume{#1}}
+\def\acmNumber#1{\def\@acmNumber{#1}}
+\def\acmYear#1{\def\@acmYear{#1}}
+\def\acmMonth#1{\def\@acmMonth{#1}}
+
+
+% Command to get the year from the system and display the last two digits
+\newcommand{\ignoretwo}[2]{}
+\newcommand{\yearTwoDigits}{\expandafter\ignoretwo\the\year}
+%To transform the month number in its name in English
+\newcommand{\monthWord}{\ifnum\the\month=1 January\fi\ifnum\the\month=2 February\fi\ifnum\the\month=3 March\fi\ifnum\the\month=4 April\fi\ifnum\the\month=5 May\fi\ifnum\the\month=6 June\fi\ifnum\the\month=7 July\fi\ifnum\the\month=8 August\fi\ifnum\the\month=9 September\fi\ifnum\the\month=10 October\fi\ifnum\the\month=11 November\fi\ifnum\the\month=12 December\fi}
+% overright the \@setref definition, so that if a reference is undefined 
+% then it returns a number 0 and then the usual double boldface 
+% question marks ??
+% this is necessary for the \acmPageCode command, otherwise it gives an error 
+% everytime the aux file is not there
+\def\@setref#1#2#3{%
+  \ifx#1\relax
+    \number 0\relax
+    \protect\G at refundefinedtrue
+    \nfss at text{\reset at font\bfseries ??}%
+    \@latex at warning{Reference `#3' on page \thepage \space undefined}%
+  \else
+    \expandafter#2#1\null
+  \fi}
+%make the code a four digits string based on the first page number
+\newcommand{\acmPageCode}{\bgroup
+  \newcount\c at tempo
+  \setcounter{tempo}{\number\pageref{@firstpg}}\ifnum \c at tempo<1000 0\fi\ifnum \c at tempo<100 0\fi\ifnum \c at tempo<10 0\fi\ifnum \c at tempo<1 0\fi\pageref{@firstpg}
+  \egroup
+}
+%}aiellom
+
+
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\renewcommand\normalsize{%
+  \@setfontsize\normalsize\@xpt\@xiipt
+  \abovedisplayskip 6pt plus2pt minus1pt\belowdisplayskip \abovedisplayskip
+  \abovedisplayshortskip 6pt plus0pt minus 3pt
+  \belowdisplayshortskip 6pt plus0pt minus3pt\let\@listi\@listI} 
+
+\newcommand\small{%
+  \@setfontsize\small\@ixpt{11pt}%
+  \abovedisplayskip 5pt plus 2pt minus 1pt\belowdisplayskip \abovedisplayskip
+  \abovedisplayshortskip 5pt plus0pt minus2pt\belowdisplayshortskip 5pt plus0pt
+      minus 2pt
+  \def\@listi{\leftmargin\leftmargini \topsep 5pt plus 2pt minus 1pt\parsep 0pt
+    plus .7pt 
+  \itemsep 1.6pt plus .8pt}}
+\newcommand\footnotesize{%
+%   \@setfontsize\footnotesize\@viiipt{10pt}
+ \@setsize\footnotesize{10pt}\viiipt\@viiipt
+  \abovedisplayskip 4pt plus 1pt minus 0pt\belowdisplayskip \abovedisplayskip
+  \abovedisplayshortskip 4pt plus 0pt minus 1pt\belowdisplayshortskip 4pt plus
+       0pt minus 1pt
+  \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 1pt minus
+     0pt\parsep 0pt plus .5pt 
+     \itemsep 1pt plus .7pt}}
+
+\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
+\newcommand\large{\@setfontsize\large\@xiipt{14}}
+\newcommand\Large{\@setfontsize\Large\@xivpt{18}}
+\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20}}
+\newcommand\huge{\@setfontsize\huge\@xxpt{25}}
+\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
+
+\normalsize 
+
+ \oddsidemargin .75in \evensidemargin .75in \marginparwidth .5in 
+ \marginparsep .125in 
+ \topmargin .25in \headheight 12pt\headsep 16pt
+  %% not in latex2e  \footheight 10pt
+  \footskip 15pt 
+
+\textheight 47pc \textwidth 30pc \columnsep 10pt \columnseprule 0pt 
+% next five lines added by K.R. Apt, March 20, 01
+\advance\textheight-2.6pt
+\newdimen\normaltextheight
+\setlength\normaltextheight{\textheight}
+%\renewcommand\rmdefault{pnc}
+%\renewcommand\sfdefault{phv}
+
+
+\footnotesep 7pt
+\skip\footins 15pt plus 4pt minus 3pt 
+\floatsep 12pt plus 2pt minus 2pt 
+\textfloatsep \floatsep 
+\intextsep 1pc plus 1pc 
+%%% not in 2e %% \@maxsep 1pc 
+%%% not in 2e %% \@dblmaxsep 20pt 
+\dblfloatsep 12pt plus 2pt minus 2pt 
+\dbltextfloatsep 20pt plus 2pt minus 4pt 
+\@fptop 0pt plus 1fil \@fpsep 1pc plus 2fil \@fpbot 0pt plus 1fil 
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 6pt 
+
+\parskip 0pt plus .1pt \parindent 10pt \partopsep 0pt 
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty 
+
+
+\def\part{\@ucheadtrue
+ \@startsection{part}{9}{\z@}{-10pt plus -4pt minus 
+ -2pt}{4pt}{\reset at font\normalsize\sffamily}}
+\def\section{\@ucheadtrue
+ \@startsection{section}{1}{\z@}{-10pt plus -4pt minus 
+ -2pt}{4pt}{\reset at font\normalsize\sffamily}}
+\def\subsection{\@ucheadfalse
+ \@startsection{subsection}{2}{\z@}{-8pt plus -2pt minus 
+ -1pt}{4pt}{\reset at font\normalsize\sffamily}}
+\def\subsubsection{\@ucheadfalse
+ \@startsection{subsubsection}{3}{\parindent}{6pt plus 
+1pt}{-5pt}{\reset at font\normalsize\itshape}}
+\def\paragraph{\@ucheadfalse
+ \@startsection{paragraph}{3}{\parindent}{6pt plus 
+1pt}{-5pt}{\reset at font\normalsize\itshape}}
+
+\renewcommand{\@seccntformat}[1]{\textup{\csname the#1\endcsname}}
+
+\gdef\@period{.}
+\def\@trivlist{\@topsepadd\topsep
+\if at noskipsec \gdef\@period{}\leavevmode\gdef\@period{.}\fi
+ \ifvmode \advance\@topsepadd\partopsep \else \unskip\par\fi
+ \if at inlabel \@noparitemtrue \@noparlisttrue 
+ \else \@noparlistfalse \@topsep\@topsepadd \fi
+ \advance\@topsep \parskip
+ \leftskip\z@\rightskip\@rightskip \parfillskip\@flushglue
+ \@setpar{\if at newlist\else{\@@par}\fi} \global\@newlisttrue
+\@outerparskip\parskip}
+
+
+\def\@startsection#1#2#3#4#5#6{%
+  \if at noskipsec \leavevmode \fi
+  \par
+  \@tempskipa #4\relax
+  \@afterindenttrue
+  \ifdim \@tempskipa <\z@
+    \@tempskipa -\@tempskipa \@afterindentfalse
+  \fi
+  \if at nobreak
+    \everypar{}%
+  \else
+    \addpenalty\@secpenalty\addvspace\@tempskipa
+  \fi
+  \@ifstar
+    {\@ssect{#3}{#4}{#5}{#6}}%
+    {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+  \ifnum #2>\c at secnumdepth
+    \let\@svsec\@empty
+  \else
+    \refstepcounter{#1}%
+      \if at uchead%
+            \protected at edef\@svsec{\@seccntformat{#1}.\quad\relax}%
+        \else%
+            \protected at edef\@svsec{\@seccntformat{#1}\quad\relax}%
+        \fi%
+  \fi
+  \@tempskipa #5\relax
+  \ifdim \@tempskipa>\z@
+    \begingroup
+      #6{%
+        \@hangfrom{\hskip #3\relax\@svsec}%
+          \interlinepenalty \@M \if at uchead\MakeUppercase{#8}\else#8\fi \@@par}%
+    \endgroup
+    \csname #1mark\endcsname{#7}%
+    \addcontentsline{toc}{#1}{%
+      \ifnum #2>\c at secnumdepth \else
+        \protect\numberline{\csname the#1\endcsname}%
+      \fi
+      #7}%
+  \else
+    \def\@svsechd{%
+      #6{\hskip #3\relax
+      \@svsec \if at uchead\Makeuppercase{#8}\else#8\fi}%
+      \csname #1mark\endcsname{#7}%
+      \addcontentsline{toc}{#1}{%
+        \ifnum #2>\c at secnumdepth \else
+          \protect\numberline{\csname the#1\endcsname}%
+        \fi
+        #7}}%
+  \fi
+  \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if at noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd\@period \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+\newif\if at uchead\@ucheadfalse
+
+
+\setcounter{secnumdepth}{3}
+\newcounter{secnumbookdepth}
+\setcounter{secnumbookdepth}{3}
+
+\newfont{\apbf}{cmbx9}
+
+\def\@withappendix#1{App--\number #1}
+
+\newcommand{\elecappendix}{
+}
+
+\def\appenheader{\global\@topnum\z@ \global\@botroom \textheight \begin{figure}
+\newfont{\sc}{cmcsc10}
+\parindent\z@
+\hbox{}
+\vskip -\textfloatsep
+\vskip 11pt
+\hrule height .2pt width 30pc
+\vskip 2pt\rule{0pt}{10pt}\ignorespaces}
+\def\endappenheader{\end{figure}\gdef\appendixhead{}}
+
+\def\@appsec{}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\@appsec{APPENDIX } 
+        \def\thesection{\Alph{section}}
+        \def\theHsection{\Alph{section}}}
+
+
+
+\labelsep 5pt
+\settowidth{\leftmargini}{(9)} \addtolength\leftmargini\labelsep
+\settowidth{\leftmarginii}{(b)} \addtolength\leftmarginii\labelsep
+\leftmarginiii \leftmarginii
+\leftmarginiv \leftmarginii 
+\leftmarginv \leftmarginii 
+\leftmarginvi \leftmarginii 
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 0pt plus 1pt\topsep 6pt plus 2pt
+minus 2pt\itemsep 2pt plus 1pt minus .5pt}
+\let\@listi\@listI
+\@listi 
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt 
+ \parsep 0pt plus .5pt 
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt 
+ \parsep 0pt plus .5pt 
+ \itemsep \parsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne 
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{##1\hss}}\fi}
+\def\longenum{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne 
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\labelwidth\z@}\fi}
+%\leftmargin\z@ \itemindent\parindent}\fi} - this indents each item in enumerate
+\let\endlongenum\endlist
+%%--------------------CHANGED: always roman parentheses. dave ---------------%%
+\def\labelenumi{{\rm (}\arabic{enumi}\/{\rm )}} 
+\def\theenumi{\arabic{enumi}} 
+\def\labelenumii{{\rm (}\alph{enumii}\rm{)}}
+\def\theenumii{\alph{enumii}}
+\def\p at enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p at enumiii{\theenumi{\rm (}\theenumii{\rm )}}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}} 
+\def\p at enumiv{\p at enumiii\theenumiii}
+
+\def\p at enumiv{\p at enumiii\theenumiii}
+
+\def\itemize{\list{---\hskip -\labelsep}{\settowidth
+ {\leftmargin}{---}\labelwidth\leftmargin
+ \addtolength{\labelwidth}{-\labelsep}}}
+\let\enditemize\endlist
+\def\longitem{\list{---}{\labelwidth\z@
+ \leftmargin\z@ \itemindent\parindent \advance\itemindent\labelsep}}
+\let\endlongitem\endlist
+\def\verse{\let\\=\@centercr 
+ \list{}{\leftmargin 2pc 
+ \itemindent -1.5em\listparindent \itemindent 
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\leftmargin 2pc \listparindent .5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\leftmargin 2pc \rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\description{\list{}{\listparindent\parindent\labelwidth\z@
+ \leftmargin\z@ \itemindent\parindent\advance\itemindent\labelsep
+ \def\makelabel##1{\it ##1.}}}
+\let\enddescription\endlist
+
+\def\describe#1{\list{}{\listparindent\parindent\settowidth{\labelwidth}{#1}\leftmargin
+ \labelwidth\addtolength\leftmargin\labelsep\def\makelabel##1{##1\hfil}}}
+\let\enddescribe\endlist
+
+        \def\program{\ifx\@currsize\normalsize\small \else \rm \fi\tabbing}
+        \let\endprogram\endtabbing
+         \def\@begintheorem#1#2{\trivlist \item[\hskip 10pt\hskip 
+         \labelsep{\sc{#1}\hskip 5pt\relax #2.}] \itshape}
+        % aiellom{: this is what makes the theorem environment with names 
+        % ABOVE #1 is the word example, corollary, etc.
+        %            #2 is the number
+        % \def\@opargbegintheorem#1#2#3{\trivlist
+        % \item[\hskip 10pt \hskip \labelsep{\sc #1\savebox\@tempboxa{#3}\ifdim 
+        % \wd\@tempboxa>\z@ \hskip 5pt\relax \box\@tempboxa\fi.}] \itshape}
+        %  is been changed to
+        % #1 is the word theorem, lemma, etc.
+        % #2 is the number
+        % #3 is the name of the theorem, lemma, etc.
+        \def\@opargbegintheorem#1#2#3{\trivlist
+        \item[\hskip 10pt \hskip 
+\labelsep{\sc{#1}\savebox\@tempboxa{\sc{#3}}\ifdim 
+        \wd\@tempboxa>\z@ \hskip 5pt\relax \sc{#2}  \box\@tempboxa\fi.}]
+\itshape}
+        % aiellom} 
+
+
+
+\newif\if at qeded\global\@qededfalse
+\def\proof{\global\@qededfalse\@ifnextchar[{\@xproof}{\@proof}}
+\def\endproof{\if at qeded\else\qed\fi\endtrivlist}
+\def\qed{\unskip\kern 10pt{\unitlength1pt\linethickness{.4pt}\framebox(6,6){}}
+\global\@qededtrue}
+\def\@proof{\trivlist \item[\hskip 10pt\hskip 
+ \labelsep{\sc Proof.}]\ignorespaces}
+\def\@xproof[#1]{\trivlist \item[\hskip 10pt\hskip 
+ \labelsep{\sc Proof #1.}]\ignorespaces}
+
+\def\newdef#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\expandafter\xdef\csname
+the#1\endcsname{\@thmcounter{#1}}\global
+ \@namedef{#1}{\@defthm{#1}{#2}}\global
+ \@namedef{end#1}{\@endtheorem}}}
+\def\@defthm#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}}
+\def\@xdefthm#1#2{\@begindef{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ydefthm#1#2[#3]{\trivlist \item[\hskip 10pt\hskip 
+ \labelsep{\it #2\savebox\@tempboxa{#3}\ifdim 
+ \wd\@tempboxa>\z@ \ \box\@tempboxa\fi.}]\ignorespaces}
+\def\@begindef#1#2{\trivlist \item[\hskip 10pt\hskip 
+ \labelsep{\it #1\ \rm #2.}]}
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if at twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c at page\z@}
+\def\endtitlepage{\if at restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 2.5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt 
+\tabbingsep \labelsep 
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt 
+
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+
+\def\thepart{\Roman{part}} 
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l at part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth 
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l at section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth 
+ \parfillskip -\@pnumwidth 
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l at subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l at subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l at figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l at table\l at figure
+
+
+\def\thebibliography#1{\par\footnotesize 
+\@ucheadfalse
+\@startsection{subsection}{2}{\z@}{16pt plus 2pt minus 
+        1pt}{2pt}{\sf}*{REFERENCES}%
+\list{\arabic{enumi}.}{%
+ \settowidth{\labelwidth}{99.}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep \topsep \z@ \parsep 0pt plus .1pt
+ \itemsep \parsep 
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy
+ \widowpenalty=4500
+ \clubpenalty=4500
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+ 
+
+\newif\if at restonecol
+\def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if at restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule \@height 0.2\p@ \@width 47\p@ 
+  \kern 2.6\p@
+} 
+
+\long\def\@makefntext#1{\parindent 1em\noindent 
+ $^{\@thefnmark}$#1}
+
+
+\setcounter{topnumber}{3}
+\def\topfraction{.99}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.5}
+\setcounter{totalnumber}{3}
+\def\textfraction{.01}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{\vskip 1pc \setbox\@tempboxa\hbox{#1.\hskip
+1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize #1. #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil} 
+ \fi}
+
+\def\nocaption{\refstepcounter\@captype \par
+ \vskip 1pc \hbox to\hsize{\hfil \footnotesize Figure \thefigure
+ \hfil}}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c at figure}
+\def\fps at figure{tbp}
+\def\ftype at figure{1}
+\def\ext at figure{lof}
+\def\fnum at figure{Fig.\ \thefigure}
+\def\figure{\let\normalsize\footnotesize \normalsize \@float{figure}}
+\let\endfigure\end at float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end at dblfloat}
+
+\newcounter{table}
+\def\thetable{\@Roman\c at table}
+\def\fps at table{tbp}
+\def\ftype at table{2}
+\def\ext at table{lot}
+\def\fnum at table{Table \thetable}
+\def\table{\let\normalsize\footnotesize \normalsize\@float{table}}
+\let\endtable\end at float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end at dblfloat}
+\def\acmtable#1{\@narrowfig #1\relax
+ \let\caption\@atcap \let\nocaption\@atnocap
+ \def\@tmpnf{}\@ifnextchar[{\@xntab}{\@ntab}}
+\def\endacmtable{\hbox to \textwidth{\hfil
+\vbox{\hsize \@narrowfig
+\box\@nfcapbox
+{\baselineskip 4pt \hbox{\vrule height .4pt width \hsize}}
+\vskip -1pt
+\box\@nfigbox\vskip -1pt
+{\baselineskip 4pt \hbox{\vrule height .4pt width \hsize}}}\hfil}
+\end at float}
+\def\@xntab[#1]{\def\@tmpnf{[#1]}\@ntab}
+\def\@ntab{\expandafter\table\@tmpnf
+ \setbox\@nfigbox\vbox\bgroup
+ \hsize \@narrowfig \@parboxrestore}
+\def\@atmakecap #1#2{\setbox\@tempboxa\hbox{#1.\hskip 1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize \sloppy #1.\hskip 1em\relax #2 \par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+\def\@atcap{\par\egroup\refstepcounter\@captype 
+ \@dblarg{\@atcapx\@captype}}
+\long\def\@atcapx#1[#2]#3{\setbox\@nfcapbox\vbox {\hsize \wd\@nfigbox
+ \@parboxrestore
+ \@atmakecap{\csname fnum@#1\endcsname}{\ignorespaces #3}\par}}
+\def\@atnocap{\egroup \refstepcounter\@captype 
+ \setbox\@nfcapbox\vbox {\hsize \wd\@nfigbox
+ \hbox to\hsize{\hfil \footnotesize Table \thetable\hfil}}}
+
+%
+%% Narrow figures
+%
+\def\narrowfig#1{\@narrowfig #1\relax
+ \let\caption\@nfcap \let\nocaption\@nfnocap
+ \def\@tmpnf{}\@ifnextchar[{\@xnfig}{\@nfig}}
+\def\endnarrowfig{\hbox to \textwidth{\if at nfeven
+ \box\@nfcapbox\hfil\box\@nfigbox
+ \else \box\@nfigbox\hfil\box\@nfcapbox\fi}\end at float}
+\def\@xnfig[#1]{\def\@tmpnf{[#1]}\@nfig}
+\def\@nfig{\expandafter\figure\@tmpnf
+ \setbox\@nfigbox\vbox\bgroup
+ \hsize \@narrowfig \@parboxrestore}
+\def\@nfmakecap #1#2{\setbox\@tempboxa\hbox{#1.\hskip 1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize \sloppy #1.\hskip 1em\relax #2 \par \else \hbox
+to\hsize{\if at nfeven\else\hfil\fi\box\@tempboxa\if at nfeven\hfil\fi}
+ \fi}
+\def\@nfcap{\par\egroup\refstepcounter\@captype 
+ \@dblarg{\@nfcapx\@captype}}
+\long\def\@nfcapx#1[#2]#3{\@seteven
+ \setbox\@nfcapbox\vbox to \ht\@nfigbox
+ {\hsize \textwidth \advance\hsize -2pc \advance\hsize -\wd\@nfigbox
+ \@parboxrestore
+ \vfil 
+ \@nfmakecap{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \vfil}}
+\def\@nfnocap{\egroup \refstepcounter\@captype \@seteven
+ \setbox\@nfcapbox\vbox to \ht\@nfigbox
+ {\hsize \textwidth \advance\hsize -2pc \advance\hsize -\wd\@nfigbox
+ \@parboxrestore
+ \vfil 
+ \hbox to\hsize{\if at nfeven\else\hfil\fi 
+ \footnotesize Figure \thefigure
+ \if at nfeven\hfil\fi}
+ \vfil}}
+\def\@seteven{\@nfeventrue 
+   \@ifundefined{r@@nf\thefigure}{}{%
+      \edef\@tmpnf{\csname r@@nf\thefigure\endcsname}%
+      \edef\@tmpnf{\expandafter\@getpagenum\@tmpnf}%
+      \ifodd\@tmpnf\relax\@nfevenfalse\fi}%
+\label{@nf\thefigure}\edef\@tmpnfx{\if at nfeven e\else o\fi}
+\edef\@tmpnf{\write\@unused {\noexpand\ifodd \noexpand\c at page 
+ \noexpand\if \@tmpnfx e\noexpand\@nfmsg{\thefigure} \noexpand\fi
+ \noexpand\else 
+ \noexpand\if \@tmpnfx o\noexpand\@nfmsg{\thefigure}\noexpand\fi 
+ \noexpand\fi }}\@tmpnf}
+\def\@nfmsg#1{Bad narrowfig: Figure #1 on page \thepage}
+
+\newdimen\@narrowfig
+\newbox\@nfigbox
+\newbox\@nfcapbox
+\newif\if at nfeven 
+
+\def\and{\\ and\\}
+\def\maketitle{\newpage \thispagestyle{titlepage}\par
+ \begingroup \lineskip = \z@\null \vskip -30pt\relax 
+ \parindent\z@ \LARGE {\raggedright \hyphenpenalty\@M
+ %\sf \@title \par
+  \@title \par
+ \global\firstfoot %aiellom
+ \global\runningfoot %aiellom
+}
+\label{@firstpg}
+{ \vskip 13.5pt\relax \normalsize \sf %vskip 13.5pt between title and author
+ \begingroup \addtolength{\baselineskip}{2pt}
+ \@author\par \vskip -2pt 
+ \endgroup }
+ {\ifx \@categories\@empty 
+ \else 
+ \baselineskip 17pt\relax
+ \if at acmjacm\else\hbox{\vrule height .2pt width 30pc}\fi%to eliminate the lines for jacm
+ }
+ \vskip 8.5pt \footnotesize \box\@abstract \vskip 4pt\relax %vskip8.5 space above abstract
+ {\def\and{\unskip\/{\rm ; }}
+ Categories and Subject Descriptors: \@categories \fi}\par\vskip 4pt\relax
+ \box\@terms \vskip 4pt\relax
+ \box\@keywords \par 
+ {\baselineskip 14pt\relax 
+ \@abstractbottom
+ }
+ \vskip 23pt\relax
+ \endgroup
+\let\maketitle\relax
+ % \gdef\@author{}\gdef\@title{}
+ \gdef\@categories{}}
+
+
+\newbox\@abstract
+\newbox\@terms
+\newbox\@keywords
+\def\abstract{\global\setbox\@abstract=\vbox\bgroup \everypar{}
+ \footnotesize \hsize 30pc \parindent 10pt \noindent 
+ \rule{0pt}{10pt}\ignorespaces}
+\def\endabstract{\egroup}
+
+\def\terms#1{\setbox\@terms=\vbox{\everypar{}
+ \footnotesize \hsize 30pc \parindent 0pt \noindent 
+ General Terms: \ignorespaces #1}}
+\def\keywords#1{\setbox\@keywords=\vbox{\everypar{}
+ \footnotesize \hsize 30pc \parindent 0pt \noindent 
+ Additional Key Words and Phrases: \ignorespaces #1}
+}
+
+\def\category#1#2#3{\@ifnextchar
+ [{\@category{#1}{#2}{#3}}{\@xcategory{#1}{#2}{#3}}}
+\def\@category#1#2#3[#4]{\edef\@tempa{\ifx \@categories\@empty 
+ \else ; \fi}{\def\protect{\noexpand\protect
+ \noexpand}\def\and{\noexpand\and}\xdef\@categories{\@categories\@tempa #1
+[{\bf #2}]: 
+ #3\kern\z at ---\hskip\z@{\it #4}}}}
+\def\@xcategory#1#2#3{\edef\@tempa{\ifx \@categories\@empty \else ;
+\fi}{\def\protect{\noexpand\protect\noexpand}\def\and{\noexpand
+ \and}\xdef\@categories{\@categories\@tempa #1 [{\bf #2}]: #3}}}
+\def\@categories{}
+\def\bottomstuff{\global\@topnum\z@ \global\@botroom \textheight \begin{figure}
+\parindent\z@
+\hbox{}
+\vskip -\textfloatsep
+\vskip 10pt
+\hrule height .2pt width 30pc
+\vskip 2pt\rule{0pt}{10pt}\ignorespaces}
+\def\endbottomstuff{\permission\end{figure}\gdef\permission{}}
+
+\newenvironment{ackslike}[1]
+  {\par \footnotesize 
+   \@ucheadfalse
+   \@startsection{subsection}{2}{\z@}{-16pt plus -2pt minus -1pt}{2pt}{\sf}*
+   {\uppercase{#1}}\par\normalsize
+   \pdfbookmark{Acknowledgments}{Ack}
+        }
+  {\par}
+\newenvironment{acks}{\begin{ackslike}{ACKNOWLEDGMENTS}}{\end{ackslike}}
+
+\def\received{\par\footnotesize\addvspace{18pt plus 0pt minus
+4pt}\parindent\z@}
+%the line below replaced by the line that follows (K.R. Apt, July 11, 2000
+%\def\endreceived{\label{@lastpg}\hskip-2pt\par}
+\def\endreceived{\label{@lastpg}\hskip-2pt\par\normalsize}
+
+\mark{{}{}} 
+
+\def\ps at myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\hfill \small\sf \rightmark\hskip
+19pt{\Large$\cdot$}\hskip 17pt\mypage}
+\def\@oddfoot{\hbox{}\hfill\tiny\@runningfoot}
+\def\@evenhead{\small\sf\mypage \hskip 17pt{\Large$\cdot$}\hskip 19pt\leftmark\hfill \hbox{}}
+\def\@evenfoot{\tiny\@runningfoot\hfill\hbox{}}
+\def\sectionmark##1{}\def\subsectionmark##1{}}
+\def\@runningfoot{}
+\def\runningfoot{\def\@runningfoot{\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear.}}
+\def\@firstfoot{}
+\def\firstfoot{\def\@firstfoot{\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear, Pages \pages.}}
+\def\ps at titlepage{\let\@mkboth\@gobbletwo
+\def\@oddhead{}\def\@oddfoot{\hbox{}\hfill
+\tiny\@firstfoot}\def\@evenhead{}\def\@evenfoot{\tiny\@firstfoot\hfill\hbox{}}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\@marrayclassiv{\@addtopreamble{$\displaystyle \@nextchar$}}
+\def\@marrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum 
+ \hfil$\relax\displaystyle\@sharp$\hfil \or $\relax\displaystyle\@sharp$\hfil 
+ \or \hfil$\relax\displaystyle\@sharp$\fi}}
+\def\marray{\arraycolsep 2.5pt\let\@acol\@arrayacol \let\@classz\@marrayclassz
+ \let\@classiv\@marrayclassiv \let\\\@arraycr\def\@halignto{}\@tabarray}
+\def\endmarray{\crcr\egroup\egroup}
+
+
+\ps at myheadings \pagenumbering{arabic} \onecolumn 
+
+%-----------------------BIBLIOGRAPHY STUFF-------------------------
+% this is adapted (November 1993) by Andrew Appel and Rebecca Davies from
+% 
+%%%     filename        = "chicago.sty",
+%%%     version         = "4",  % MODIFIED!
+%%%     date            = "31 August 1992",
+%%%     time            = "09:42:44 199",
+%%%     author          = "Glenn Paulley",
+%%%     address         = "Data Structuring Group
+%%%                        Department of Computer Science
+%%%                        University of Waterloo
+%%%                        Waterloo, Ontario, Canada
+%%%                        N2L 3G1",
+%%%     telephone       = "(519) 885-1211",
+%%%     FAX             = "(519) 885-1208",
+%%%     email           = "gnpaulle at bluebox.uwaterloo.ca",
+
+%%% ====================================================================
+%
+% this file: Modification of chicago.sty for new ACM bibliography
+% style, which is similar (but not identical) to the ``Chicago'' style.
+%
+% chicago.sty: Style file for use with bibtex style chicago.bst, for
+% bibliographies formatted according to the 13th Edition of the Chicago
+% Manual of Style.
+%
+% 'newapa.bst' was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+% newapa.sty formed the basis of this style, chicago.sty. Author-date
+% references in newapa.bst formed the basis for chicago.bst. Chicagoa.bst
+% supports annotations.
+%
+% Version 4 (August, 1992):
+% - fixed chicago.bst and chicagoa.bst to handle long author lists in
+%   sorting
+% - fixed chicago.bst and chicagoa.bst so that missing page numbers in
+%   ``article'' entries are handled correctly
+% - modified chicago.sty to format entries with 2nd and subsequent lines
+%   indented.
+%
+%   Citation format: (author-last-name year)
+%             (author-last-name and author-last-name year)
+%             (author-last-name et al. year)
+%             (author-last-name)
+%             author-last-name
+%             author-last-name (year)
+%             (author-last-name and author-last-name)
+%             (author-last-name et al.)
+%             (year) or (year,year)
+%             year or year,year
+%
+%   Reference list ordering: alphabetical by author or whatever passes
+%    for author in the absence of one.
+%
+% This BibTeX style has support for abbreviated author lists and for
+%    year-only citations.  This is done by having the citations
+%    actually look like
+%
+%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
+%
+% The LaTeX style has to have the following (or similar)
+%
+%     \let\@internalcite\cite
+%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
+%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
+%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
+%
+%
+% -------------------------------------------------------------------------
+%
+% Citation macros.
+%
+\let\@internalcite\cite
+
+\def\cite{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+    \def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
+\def\citeXNP#1#2{%
+  \def\@cite at label{#2}%
+  \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+  \def\citeauthoryear##1##2##3{\@cite at label}\@internalcite{#1}}
+% \def\@citeseppen{-1000}%
+%    \def\@cite at label{#1}
+%    \def\@cite##1##2{\if at tempswa ##2\fi}%
+%    \def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
+\def\citeNP{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+    \def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
+\def\citeN{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{##1\if at tempswa , ##2]\else{]}\fi}%
+    \def\citeauthoryear##1##2##3{##2 [##3}\@citedata}
+\def\shortcite#1{\citeyear{#1}}
+\def\citeS#1{[\citeANP{#1} \citeyearNP{#1}]}
+\def\citeNS#1{\citeANP{#1} \citeyear{#1}}
+\def\citeNPS#1{\citeANP{#1} \citeyearNP{#1}}
+%testing year,year
+\def\citeNN{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+    \def\citeauthoryear##1##2##3{##3}\@citedata}
+
+\def\citeA{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+    \def\citeauthoryear##1##2##3{##2}\@internalcite}
+\def\citeANP{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+    \def\citeauthoryear##1##2##3{##2}\@internalcite}
+
+\def\citeyear{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+    \def\citeauthoryear##1##2##3{##3}\@citedata}
+\def\citeyearNP{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+    \def\citeauthoryear##1##2##3{##3}\@citedata}
+
+%
+% \@citedata and \@citedatax:
+%
+% Place commas in-between citations in the same \citeyear, \citeyearNP,
+% or \citeN command.
+% Use something like \citeN{ref1,ref2,ref3} and \citeN{ref4} for a list.
+%
+\def\@citedata{%
+        \@ifnextchar [{\@tempswatrue\@citedatax}%
+                                  {\@tempswafalse\@citedatax[]}%
+}
+
+\def\@citedatax[#1]#2{%
+\if at filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+  \def\@citea{}\@cite{\@for\@citeb:=#2\do%
+    {\@citea\def\@citea{; }\@ifundefined% by Young
+       {b@\@citeb}{{\bf ?}%
+       \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}%
+
+% don't box citations, separate with ; and a space
+% also, make the penalty between citations negative: a good place to break.
+%
+\def\@citex[#1]#2{%
+\if at filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+  \def\@citea{}\@cite{\@for\@citeb:=#2\do%
+    {\@citea\def\@citea{; }\@ifundefined% by Young
+       {b@\@citeb}{{\bf ?}%
+       \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}%
+
+% (from apalike.sty)
+% No labels in the bibliography.
+%
+\def\@biblabel#1{}
+
+% (from apalike.sty)
+% Set length of hanging indentation for bibliography entries.
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+
+% Indent second and subsequent lines of bibliographic entries. Stolen
+% from openbib.sty: \newblock is set to {}.
+
+\newdimen\bibindent
+\bibindent=1em
+\@ifundefined{refname}%
+   {\@ifundefined{chapter}%
+     {\newcommand{\refname}{\footnotesize REFERENCES}}%
+     {\newcommand{\refname}{\footnotesize BIBLIOGRAPHY}}%
+   }%
+   {}%
+\@ifundefined{chapter}%
+ {\def\thebibliography#1{\footnotesize \section*{\refname\@mkboth 
+   {\uppercase{\refname}}{\uppercase{\refname}}}\list
+   {[\arabic{enumi}]}{
+   \settowidth\labelwidth{[#1]}
+   \leftmargin\labelwidth
+   \advance\leftmargin\labelsep
+   \advance\leftmargin\bibindent
+   \itemindent -\bibindent
+   \listparindent \itemindent
+   \parsep \z@
+   \usecounter{enumi}}
+   \def\newblock{}
+   \sloppy
+   \sfcode`\.=1000\relax}}
+ {\def\thebibliography#1{\footnotesize \chapter*{\refname\@mkboth 
+   {\uppercase{\refname}}{\uppercase{\refname}}}\list
+   {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}
+   \leftmargin\labelwidth
+   \advance\leftmargin\labelsep
+   \advance\leftmargin\bibindent
+   \itemindent -\bibindent
+   \listparindent \itemindent
+   \parsep \z@
+   \usecounter{enumi}}
+   \def\newblock{}
+   \sloppy
+   \sfcode`\.=1000\relax}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% fixes to acm trans macro package
+% 31-JAN-1996
+% John Tang Boyland
+
+% newdef need to take the optional parameters of newtheorem
+\def\newdef#1{\@ifnextchar[{\@xnewdef{#1}}{\@ynewdef{#1}}}
+\def\@xnewdef#1[#2]#3{\newtheorem{italic@#1}[#2]{{\em #3}}\@newdef{#1}}
+\def\@ynewdef#1#2{\@ifnextchar[{\@xynewdef{#1}{#2}}{\@yynewdef{#1}{#2}}}
+\def\@xynewdef#1#2[#3]{\newtheorem{italic@#1}{{\em #2}}[#3]\@newdef{#1}}
+\def\@yynewdef#1#2{\newtheorem{italic@#1}{{\em #2}}\@newdef{#1}}
+% and now fix up definition, to change body to use roman font:
+\def\@newdef#1{\newenvironment{#1}{\@ifnextchar[{\@xstartdef{#1}}{\@ystartdef{#1}}}{\end{italic@#1}}}
+%changed by K.R. Apt on Sep. 27, 2000. It was: \def\@xstartdef#1[#2]{\begin{italic@#1}[#2]\rm}
+\def\@xstartdef#1[#2]{\begin{italic@#1}[{\em #2}]\rm}
+\def\@ystartdef#1{\begin{italic@#1}\rm}
+
+% footers produced too small (vpt), when ACM typsets them at 7.5pt (!).
+% A better compromise is viipt.
+\def\@oddfoot{\hbox{}\hfill\scriptsize\@runningfoot}
+\def\@evenfoot{\scriptsize\@runningfoot\hfill\hbox{}}
+
+% first footer was set to (vpt), when ACM typesets them at 6.5pt (!).
+% A better compromise is vipt.
+\def\firstfootsize{\@setsize\firstfootsize{7pt}\vipt\@vipt}
+\def\ps at titlepage{\let\@mkboth\@gobbletwo
+\def\@oddhead{}\def\@oddfoot{\hbox{}\hfill\firstfootsize\@firstfoot}%
+\def\@evenhead{}\def\@evenfoot{\firstfootsize\@firstfoot\hfill\hbox{}}}
+
+% new permission statement
+\long\def\permission{\par
+% linebreaks added to conform to the current style
+Permission to make digital/hard copy of all or part of this material without
+fee 
+for personal or classroom use
+provided that the copies are not made or distributed for profit
+or commercial advantage, the ACM copyright/server notice, the title of the
+publication, and its date appear, and notice is given that copying is by
+permission of the ACM, Inc.  To copy
+otherwise, to republish, to post on servers, or to redistribute to lists
+requires prior specific 
+permission and/or a fee.\par
+\copyright\ 20\@acmYear\ 
+ACM \@permissionCodeOne/20\@acmYear/\@permissionCodeTwo-\@pageCode\$5.00 % aiellom
+}
+
+% make sure \permission doesn't get trashed
+\def\endbottomstuff{\permission\end{figure}}
+
+% alternate way of using citeyear
+%  \def\shortcite#1{\citeyear{#1}
+% enumerations and longenums are wrong
+% 1. the second line in a paragraph of an enumerations in theorems
+%  (or other trivlists) doesn't line up under the first
+% 1. the second line of a longenum doesn't properly wrap around
+%  back to the left margin.
+
+% the original definition of \@listI doesn't set labelwidth
+\def\@listI{\leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \parsep 0pt plus 1pt
+ \topsep 6pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus .5pt}
+\let\@listi\@listI
+\@listi 
+
+% add set of \labelwidth and \itemindent
+\def\longenum{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne 
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\labelwidth\z@\leftmargin\z@
+ \itemindent\parindent \advance\itemindent\labelsep}\fi}
+
+% split electronic appendix into two parts:
+
+
+%aiellom{
+\def\appendixhead#1{\appendix
+\section*{ELECTRONIC APPENDIX}
+The electronic appendix for this article can be accessed in
+  the ACM Digital Library by visiting the following URL:$\;$ 
+  \url{http://www.acm.org/pubs/citations/journals/}{\tt \@journalNameShort /20\@acmYear-\@acmVolume-\@acmNumber/p\pageref{@firstpg}-#1}.
+% \quad \href{http://www.acm.org/tocl}{{\small http://www.acm.org/tocl} }
+}
+%aiellom}
+
+\long\def\elecappendix{
+\clearpage
+\makeatletter
+\pagenumbering{withappendix}
+\makeatother
+\appendix
+\par\noindent{\sc This document is the online-only appendix to:}\hfill \vskip 1em
+{\vbox{\Large\sf \parindent0pt\@title{}}}\vskip .5em
+\vbox{\sf \parindent0pt\@author{}}\vskip .5em\noindent
+\vskip 10pt\noindent
+{\firstfootsize 
+\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear, Pages \pages.}
+\vskip 11pt\noindent
+\hrule height .2pt
+\par
+\bottomstuff
+\endbottomstuff
+}
+
+% provide for a single acknowledgment
+\def\ack{ \par \footnotesize 
+\@ucheadfalse
+\@startsection{subsection}{2}{\z@}{-16pt plus -2pt minus 
+ -1pt}{2pt}{\sf}*{ACKNOWLEDGMENT}\par\normalsize
+\pdfbookmark{Acknowledgment}{Ack}
+}
+\def\endack{\par}
+
+% provide both spellings of Acknowledgment(s)
+\let\acknowledgments\acks
+\let\endacknowledgments\endacks
+\let\acknowledgment\ack
+\let\endacknowledgment\endack
+
+\newcommand{\longpage}{\enlargethispage{\baselineskip}}
+\newcommand{\shortpage}{\enlargethispage{-\baselineskip}}
+
+
+% Don't indent bibliography and
+% override \refname (which sets fontsize):
+\def\thebibliography#1{
+  \footnotesize\section*{\footnotesize\sf{REFERENCES}\@mkboth
+  {\uppercase{\refname}}{\uppercase{\refname}}}%
+   \pdfbookmark{References}{Ref}
+   \list
+  {\@biblabel{\arabic{enumiv}}}{%
+   %\settowidth\labelwidth{[#1]}
+   \labelwidth 0pt
+   \leftmargin \bibindent
+   \labelsep 0pt
+   \if at hyperref
+     \itemindent -\bibindent
+   \fi
+   \listparindent -\bibindent
+   \labelsep -\bibindent
+    \usecounter{enumiv}%
+    \let\p at enumiv\@empty
+    \def\theenumiv{\arabic{enumiv}}}%
+    \def\newblock{\hskip .11em plus.33em minus.07em}%
+    \sloppy
+    \clubpenalty=4500
+    \widowpenalty=4500
+    \frenchspacing}
+\def\endthebibliography{%
+  \def\@noitemerr{\@warning{Empty `thebibliography' environment}}%
+  \endlist}
+\def\@lbibitem[#1]#2{\item[]\if at filesw
+      {\def\protect##1{\string ##1\space}\immediate
+       \write\@auxout{\string\bibcite{#2}{#1}}}\fi\hskip-1em\ignorespaces}
+% Fix cite so it doesn't repeat author lists in citations:
+
+\def\cite{\def\@citeseppen{-1000}%
+    \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+    \let\@lastauthor=\@noauthor
+    \let\citeauthoryear=\citeauthoryear at no@repeats\@internalcite}
+    %\def\citeauthoryear##1##2##3{##2 ##3}\@internalcite
+
+\def\@noauthor={\relax}
+\let\@lastauthor=\@noauthor
+\let\@currauthor=\@noauthor
+
+\def\citeauthoryear at no@repeats#1#2#3{%
+  \def\@currauthor{\csname @author #1\endcsname}%
+  \ifx\@lastauthor\@currauthor{#3}\else{#2 #3}\fi%
+  \let\@lastauthor=\@currauthor}
+
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+
+
+\if at hyperref
+   \let\pdfbookmark=\relax
+   \RequirePackage[pdfmark]{hyperref}
+\fi
+
+% \renewcommand{\thefootnote}{\arabic{footnote}\hspace{-3pt}}
+
+
diff --git a/doc/tutorial/answer.tex b/doc/tutorial/answer.tex
new file mode 100644
index 0000000..9c121cf
--- /dev/null
+++ b/doc/tutorial/answer.tex
@@ -0,0 +1,102 @@
+\documentclass[potts,head,fontsize=11pt,a4paper,twoside,english=true]{tucletter}
+
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{amssymb}
+% ISO Latin 1 input encoding
+\usepackage{t1enc}
+
+
+\begin{document}
+
+\setkomavar{signature}{Daniel Potts} % Unterschrift!
+\setkomavar{subject}{2nd revision of
+``Using NFFT~3 -- a software library for various nonequispaced fast
+  Fourier transforms''
+by J.~Keiner, S.~Kunis, and D.~Potts
+}
+
+\begin{letter}{Editor-in-Chief\\
+Prof. Ian Gladwell\\
+Department of Mathematics\\
+Southern Methodist University\\
+Dallas, TX 75275 USA}
+
+\opening{Dear Professor Gladwell,}
+
+we thank all three referees for their helpful comments and valuable
+suggestions. In the following we report on the changes.
+
+\textbf{Referee 1}
+No changes.
+
+\textbf{Referee 2}
+The structure of the paper has been kept, in particular Section 3.2 shows the
+typical workflow and details on the precomputation are still in the appendix.
+The following suggestions of the referee have been incorporated, 1), 4), 5),
+and 6).
+
+2) ``Usually $\hat f$ is for the FT of f and not vice versa. If you have a
+good reason for doing it like this, state it.'' and p.~3, sec 2.1 of the first
+report: \\
+The beginning of Section 2 now states that the FFT evaluates a
+trigonometric polynomial at equispaced nodes and that this point of view is
+most convenient for the generalisation to nonequispaced nodes.
+
+3) ``P.3, line -10: what do you mean by no additional memory?''
+The matrix entries are explicitly given and they are computed only when used.
+
+A more detailed cost analysis and performance analysis has been
+added, see the second issue of Referee 3.
+
+\newpage
+
+\textbf{Referee 3}
+On ``The major issues''
+\begin{enumerate}
+\item The Sections 3.2 and 3.4 clearly state how the nodes have to be set.
+\item A more detailed cost analysis and performance analysis has been
+added. In particular, Algorithm 2 and 3 give clear upper bounds on the number
+of arithmetic operations excluding the evaluation of the so called window
+function which is detailed in Appendix A.3. Section 5.1 specifies these costs
+under the tested default settings and gives a performance plot in Figure 5.1.
+\item The size of the 3D problems is considered to be reasonable on standard hardware, since an
+NFFT with $128^3$ Fourier coefficients, $128^3$ evaluation nodes, oversampling
+factor $2$ and disjoint FFTW-in/output arrays takes approximately
+\begin{equation*}
+  (128^3 + 2 \times (2\times 128)^3 + 128^3) \times 16 =576 \text{MByte}.
+\end{equation*}
+A NFFT of size $256^3$ would already take over $4\text{GByte}$ with these
+settings (the library can compute such a transform by using a smaller
+oversampling factor etc. at increased cost).
+\end{enumerate}
+
+On ``The minor issues''
+\begin{enumerate}
+ \item[1,2.] Done, except  ``various $\rightarrow$ certain'', since
+   ``Nonequispaced FFT'' is typically associated with (2.3) and ``various''
+   refers to the fact that more general transforms are considered as well.
+ \item[3.] Done, but we kept the version number when referring to the library.
+ \item[4,5,6,7.] Done. However, we found no inconsistent vector notation and
+   the terminology ``adjoint'' (or transposed) and ``inverse'' is in
+   accordance with [19] 
+\item[8.] We changed the section title. The statement on the complexity of the NDFT is correct.
+\item[9.] Done, a detailed description of the precomputation is given in
+  Appendix A.3, the naming system follows FFTW and does not use abbreviations
+  like LAPACK.
+\item[10.] It is more convenient to present first (up to Section 4) the
+  theoretical part and finally the numerical results (Section 5 and 6).
+  Test specifications are given in the second paragraph of Section 5.
+\item[11.] Citations now follow the bibliographystyle \verb"acmtrans".
+\end{enumerate}
+
+In addition, the layout of tables has been changed to be compliant with
+the ACM manuscript preparation guidelines.
+
+\bigskip
+
+Yours sincerely
+\closing{\vspace{0.0cm}}
+\end{letter}
+
+\end{document}
diff --git a/doc/tutorial/comments1.tex b/doc/tutorial/comments1.tex
new file mode 100755
index 0000000..cac6e53
--- /dev/null
+++ b/doc/tutorial/comments1.tex
@@ -0,0 +1,107 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+  \hspace*{0ex} \hfill
+  \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+  1.4ex\hrule  width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\begin{document}
+
+\begin{center}
+Answer to the Referee Report\\[2ex] 
+{\Large
+``Using NFFT 3 -- a software library for various \\ nonequispaced fast
+  Fourier transforms'' }\\[2ex] 
+by Jens Keiner, Stefan Kunis, and Daniel Potts
+\end{center}
+%===============================================================================
+
+First of all, we thank all three referees for their helpful comments and valuable
+suggestions.
+
+\section*{Referee 1}
+\label{sect:1}
+
+\begin{itemize}
+  \item
+    \begin{quote}
+      Referee:
+        I am not so familiar with the norms in TOMS, but it seems to me that
+        installation instructions (section 3.1) would not have longevity that
+        merits archiving, and could be relegated to the online code package.
+    \end{quote}
+    We do think that readers might appreciate brief installation instructions.
+    They have been shortened and moved to Appendix A.1.
+
+  \item
+    \begin{quote}
+      Referee:
+      As an optional note, it would be convenient if the CGNR routine allowed
+      a user-defined preconditioner.
+    \end{quote}
+    We appreciate the suggestion and are well aware that a variety of
+    Toeplitz-preconditioner are possible for the CGNR routine.
+    However, numerical experience (in line with theoretical results) suggests
+    that for reasonably well-distributed point sets, solving the weighted
+    normal equation works well with the used ``diagonal preconditioner''
+    $\mathbf{W}$ and $\mathbf{\hat W}$, already.
+\end{itemize}
+
+\end{document}
diff --git a/doc/tutorial/comments2.tex b/doc/tutorial/comments2.tex
new file mode 100755
index 0000000..5c6164b
--- /dev/null
+++ b/doc/tutorial/comments2.tex
@@ -0,0 +1,156 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+  \hspace*{0ex} \hfill
+  \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+  1.4ex\hrule  width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\begin{document}
+\begin{center}
+Answer to the Referee Report\\[2ex] 
+{\Large
+``Using NFFT 3 -- a software library for various \\ nonequispaced fast
+  Fourier transforms'' }\\[2ex] 
+by Jens Keiner, Stefan Kunis, and Daniel Potts
+\end{center}
+%===============================================================================
+
+First of all, we thank all three referees for their helpful comments and valuable
+suggestions.
+
+\section*{Referee 2}
+\label{sect:1}
+
+\begin{itemize}
+  \item
+    \begin{quote}
+      Referee: The performance of the
+      library is not comparable to high performance libraries such as FFTW but
+      it should still be reasonable for many applications. Improving performance
+      would still be desirable of course.
+    \end{quote}
+    We generally acknowledge that performance and software design improvements
+    are desirable. But NFFT 3 is for the major part the result of recent
+    research and as such has not been around for a long time.
+  \item
+    \begin{quote}
+      Referee: As I see it, there are 3 'layers' that are relevant for a
+      library: 1) underlying theory and algorithms (the math behind it)
+      2) the actual implementation (what exact specifications have been used and
+      why, some pseudo code, what optimization techniques have been used, which
+      algorithms and why, arithmetic cost and performance analysis, maybe other
+      analyses, etc.) 3) how to install and use the library (Makefiles,
+      concrete code examples) In a library paper I would expect a short version
+      of 1) as background, 2) as the focus and then 3) very briefly.
+    \end{quote}
+    In the terminology of TOMS, this paper is a \emph{research paper} and not a
+    \emph{library paper}. The aim of the article is to give a mathematical
+    description of the algorithms implemented in the NFFT 3 software library
+    with some more mathematical background on the core NFFT algorithm. A second
+    goal is to mention some applications of the implemented methods.
+    The focus of this paper is not the description of technical details of the
+    implementation (code optimizations, software engineering concerns,...) and
+    the full programming interface. 
+  \item
+    \begin{quote}
+      Referee:
+      As it is right now the authors put the emphasis on 3) (including details
+      on how to untar a file that is really way too much) and have some of 2)
+      in the appendix, but not enough. Also, the cost and performance analysis
+      is far too brief for a library paper.
+    \end{quote}
+    We have shortened the installation instructions. They have also been moved
+    to Appendix A.1.
+
+    As mentioned, our aim is not to describe all details of the implementation.
+    But we now summarise performance related tests in Section 5. The focus is
+    to observe how the NFFT algorithm does behave in comparison to the
+    direct implementation.
+
+    It is nevertheless true that more extensive numerical tests at a
+    mature state of the library are desirable. At the current stage, an
+    extensive and in-depth performance analysis is not available.
+  \item
+    \begin{quote}
+      Referee:
+      Concrete, I recommend (following my above numbering) to have a
+      background section on 1), then all relevant details on 2) (some of which are
+      not in the paper) and then a very short section, or appendix, on 3). (The
+      authors may want to look at some existing library papers of popular
+      libraries.) Further, there have to be more details on the relevant
+      implementation decisions, optimization techniques performed, and, most
+      important, a more extensive evaluation of operations count and runtime
+      performance (which should be given also in Gflop/s or pseudo Gflop/s, i.e.,
+      a number of ops is stipulated in case the exact one is not available).
+    \end{quote}
+    Section 2 has been extended to start with the classical discrete Fourier
+    transform (DFT) and mention more relevant properties of the NFFT algorithm.
+    Details are found in the Appendices A.2 and A.3.
+  \item
+    \begin{quote}
+      Referee: Detailed comments \ldots
+    \end{quote}
+    In the text, the library is now consistently denoted NFFT 3. We include the
+    major version number in the name since earlier versions offered
+    substantially less functionality. The rest of the comments have been
+    incorporated into the paper and all mentioned mistakes have been fixed.
+\end{itemize}
+
+\end{document}
diff --git a/doc/tutorial/comments3.tex b/doc/tutorial/comments3.tex
new file mode 100755
index 0000000..ec8ae19
--- /dev/null
+++ b/doc/tutorial/comments3.tex
@@ -0,0 +1,253 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+  \hspace*{0ex} \hfill
+  \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+  1.4ex\hrule  width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\begin{document}
+\begin{center}
+Answer to the Referee Report\\[2ex]
+{\Large
+``Using NFFT 3 -- a software library for various \\ nonequispaced fast
+  Fourier transforms'' }\\[2ex]
+by Jens Keiner, Stefan Kunis, and Daniel Potts
+\end{center}
+%===============================================================================
+
+First of all, we thank all three referees for their helpful comments and valuable
+suggestions.
+
+\section*{Referee 3}
+\label{sect:1}
+
+\begin{itemize}
+  \item
+    \begin{quote}
+      Referee:
+      The authors may consider to follow or mention the other commonly
+      recognized names, such as USFFT by many mathematicians
+      and NUFFT by engineers.
+    \end{quote}
+    %We now mention the alternative abbreviations USFFT and NUFFT on the first
+    %Ppage of the paper.
+    References and the alternative abbreviations USFFT and NUFFT are contained
+    in the Appendix ``Further NFFT approaches'' (now A.4).
+  \item
+    \begin{quote}
+      Referee:
+      This package does not take arbitrary sample nodes as it claims.
+      The samples are required to be on a Kronecker grid, which
+      may be non-equally spaced in each and every dimension involved.
+    \end{quote}
+    The software library \emph{does} take arbitrary sample nodes. We do not
+    require samples to be on a Kronecker grid or anything similar.
+  \item
+    \begin{quote}
+      Referee:
+      The package limits the data structure to linearized arrays,
+      which entails additional code and time for data re-formatting
+      for high-dimensional NUFFTs.
+    \end{quote}
+    Data structures are linear and we do not see this as a
+    substantial limitation. Like FFTW, we expect multi-dimensional data to be
+    stored as a consecutive block in row-major order ('C order').
+    Fixed-size arrays allocated by the user are amenable to convenient multiple
+    applications of the \verb"[]" operator, e.g. \verb"a[2][4][1]", but the use
+    of such arrays cannot  recommended in general (e.g., they are allocated on
+    the stack). For dynamic arrays, the linear index has to be computed.
+
+    Additionally, for nonequispaced transforms, nodes can be
+    completely unstructured and multi-dimensional structures, like grids,
+    are special cases. Most often, nodes will not be aligned
+    and the most appropriate data structure for such nodes is, without further
+    assumptions, a linear array.
+
+    A current limitation is that (for now) we do not support strided
+    data (i.e., general FFTW-style i/o tensors) or vectors of transforms.
+  \item
+    \begin{quote}
+      Referee:
+      The algorithm description in Section 2.2 is unacceptable. It mentions the
+      arithmetic complexity only.
+    \end{quote}
+    Memory requirements strongly depend on the precomputation technique
+    employed. NFFT 3 offers different strategies here ranging from no
+    precomputation at all (everything evaluated on-line) to
+    full precomputation (can be expensive in terms of memory). In
+    Section 2.4 (which was 2.2), we now include a forward reference to
+    Appendix 2.3 where details are given.
+  \item
+    \begin{quote}
+      Referee:
+      It fails to specify the essential algorithm components. It
+      uses the standard FFT, which is preceded by a numerical
+      re-sampling step with arithmetic complexity proportional linearly
+      to the data size.
+    \end{quote}
+    The last paragraph of Section 2.4 (was 2.2) now briefly mentions
+    the essential components of the NFFT algorithm. For details, we still refer the
+    reader to Appendix A.2.
+  \item
+    \begin{quote}
+      Referee:
+      Unlike the FFT, the complexity grows fast with the dimensionality.
+    \end{quote}
+    A $d$-dimensional FFT of degree $N$ (in each dimension) has a complexity of
+    $\mathcal{O}(N^{d} \log N)$.
+    A $d$-dimensional NFFT of degree $N$ (in each dimension) with $M$ nodes has
+    a complexity of $\mathcal{O}(N^{d} \log N + |\log\varepsilon|^d M)$. Both
+    algorithms grow exponentially with the number of dimensions $d$. But it is
+    true that for the NFFT, also the constant $|\log\varepsilon|^d$ in front
+    of the number of nodes $M$ grows exponentially which does not happen in
+    the FFT.
+  \item
+    \begin{quote}
+      Referee:
+      In addition, an algorithm shall be described with companion
+      data structures and the features of algorithm parameters.
+      Specifically, the re-sampling factor shall be singled out at least
+      and explained.
+    \end{quote}
+    The last paragraph of Section 2.4 (was 2.2) now mentions the oversampling
+    factor and the truncation parameter. For details, we still refer the reader to
+    Appendix A.3. The chief aim of this article is to describe the math behind the NFFT
+    routines implemented in the NFFT 3 library, as well as basic usage principles
+    and applications. We do not think it would serve the purpose of
+    the paper to give details of the implementation and technical concerns.
+  \item
+    \begin{quote}
+      Referee:
+      There are many typos and grammar errors. (Need a professional
+      proof-reader to help out.)
+    \end{quote}
+    We have done our best to fix the mistakes.
+  \item
+    \begin{quote}
+      Referee:
+      Performance metrics and comparison objectives shall be clearly
+      noted.
+    \end{quote}
+    As mentioned, our aim is not to describe all details of the implementation.
+    But we now summarise performance related tests in Section 5. The focus is
+    to observe how the NFFT algorithm does behave in comparison to the
+    FFT and to the direct evaluation NDFT.
+
+    It is nevertheless true that more extensive numerical tests at a
+    mature state of the library are desirable. At the current stage, an
+    extensive and in-depth performance analysis is not available.
+  \item
+    \begin{quote}
+      Referee:
+      This manuscript uses more space on examples and applications.
+      It will serve the purpose of the paper if the examples and applications
+      are used to demonstrate the range of functions and their
+      parameters and the scope of performance tuning the library supports.
+      The complexity in terms of arithmetic operations explains
+      only why the fast algorithms are implemented, but does not say
+      how well they are implemented in this particular software library.
+    \end{quote}
+    Clearly, the numerical results support the theoretical complexity
+    and error estimates.
+    New columns in Table 5.2 have been added to show that the NFFT
+    is only a reasonable factor slower than the FFT.
+    Moreover, our library is open source (i.e., improvements are very welcome)
+    and it is to the best of our knowledge the only available implementation
+    (besides various \textsc{MatLab}-implementations).
+  \item
+    \begin{quote}
+      Referee:
+      There are two fundamental assumptions/limitations (a) the sample
+      locations for higher-dimensional FFTs on unequispaced be on
+      a Kronecker grid and (b) the sample data be in linearized and
+      consecutively packed data arrays.
+    \end{quote}
+    See comments above.
+  \item
+    \begin{quote}
+      Referee:
+      No README file or other documentation is found in the third
+      party code directory.
+    \end{quote}
+    Had been added in the meantime.
+  \item
+    \begin{quote}
+      Referee:
+      No explicit mention of using the third party code FFTW, although
+      it is mentioned in the installation section.
+    \end{quote}
+    We now mention the internal use FFTW in Sections 1 (first paragraph) and
+    2.4 (last paragraph).
+  \item
+    \begin{quote}
+      Referee:
+      The input and output data structures for high-dimensional transforms
+      are not clear, especially, on each particular type of grids,
+      such Cartesian grid or spherical grid.
+    \end{quote}
+    The referee is right in that details of input and output data
+    structures for generalisations of the NFFT (NFSFT, NNFFT,...)
+    are not given explicitly. Details are found in the API
+    documentation acompanying the downloadable software package.
+    We do not think that it would improve the paper to mention
+    the same here.
+\end{itemize}
+
+\end{document}
diff --git a/doc/tutorial/images/accuracy1.eps b/doc/tutorial/images/accuracy1.eps
new file mode 100755
index 0000000..f304ee1
--- /dev/null
+++ b/doc/tutorial/images/accuracy1.eps
@@ -0,0 +1,503 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy1.eps
+%%CreationDate: 07/27/2004  11:00:44
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt 
+(0) s
+2684 4615 mt 2684 4561 L
+2684  389 mt 2684  442 L
+2611 4894 mt 
+(5) s
+4469 4615 mt 4469 4561 L
+4469  389 mt 4469  442 L
+4323 4894 mt 
+(10) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3206 mt  952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1797 mt  952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 2 357 5 357 -2 357 15 357 -19 357 16 357 -31 357 428 
+357 638 357 530 357 502 357 529 357 566 357 307 899 565 15 MP stroke
+gr
+
+24 w
+gs 753 419 5291 3793 MR c np
+  60   60  899  565 FO
+  60   60 1256  872 FO
+  60   60 1613 1438 FO
+  60   60 1970 1967 FO
+  60   60 2327 2469 FO
+  60   60 2684 2999 FO
+  60   60 3041 3637 FO
+  60   60 3398 4065 FO
+  60   60 3755 4034 FO
+  60   60 4112 4050 FO
+  60   60 4469 4031 FO
+  60   60 4826 4046 FO
+  60   60 5183 4044 FO
+  60   60 5540 4049 FO
+  60   60 5897 4051 FO
+gr
+
+gs 899 389 5357 4227 MR c np
+357 3 357 5 357 -1 357 77 357 313 357 363 357 319 357 348 
+357 450 357 349 357 300 357 341 357 415 1256 770 14 MP stroke
+gs 1110 624 4934 3575 MR c np
+1214  728 mt 1298  812 L
+1298  728 mt 1214  812 L
+1571 1143 mt 1655 1227 L
+1655 1143 mt 1571 1227 L
+1928 1484 mt 2012 1568 L
+2012 1484 mt 1928 1568 L
+2285 1784 mt 2369 1868 L
+2369 1784 mt 2285 1868 L
+2642 2133 mt 2726 2217 L
+2726 2133 mt 2642 2217 L
+2999 2583 mt 3083 2667 L
+3083 2583 mt 2999 2667 L
+3356 2931 mt 3440 3015 L
+3440 2931 mt 3356 3015 L
+3713 3250 mt 3797 3334 L
+3797 3250 mt 3713 3334 L
+4070 3613 mt 4154 3697 L
+4154 3613 mt 4070 3697 L
+4427 3926 mt 4511 4010 L
+4511 3926 mt 4427 4010 L
+4784 4003 mt 4868 4087 L
+4868 4003 mt 4784 4087 L
+5141 4002 mt 5225 4086 L
+5225 4002 mt 5141 4086 L
+5498 4007 mt 5582 4091 L
+5582 4007 mt 5498 4091 L
+5855 4010 mt 5939 4094 L
+5939 4010 mt 5855 4094 L
+gr
+
+357 13 357 162 357 284 357 275 357 258 357 296 357 237 357 283 
+357 363 357 264 357 250 357 280 357 358 357 340 899 389 15 MP stroke
+gr
+
+gs 753 243 5291 3956 MR c np
+ 839  389 mt  959  389 L
+ 899  329 mt  899  449 L
+1196  729 mt 1316  729 L
+1256  669 mt 1256  789 L
+1553 1087 mt 1673 1087 L
+1613 1027 mt 1613 1147 L
+1910 1367 mt 2030 1367 L
+1970 1307 mt 1970 1427 L
+2267 1617 mt 2387 1617 L
+2327 1557 mt 2327 1677 L
+2624 1881 mt 2744 1881 L
+2684 1821 mt 2684 1941 L
+2981 2244 mt 3101 2244 L
+3041 2184 mt 3041 2304 L
+3338 2527 mt 3458 2527 L
+3398 2467 mt 3398 2587 L
+3695 2764 mt 3815 2764 L
+3755 2704 mt 3755 2824 L
+4052 3060 mt 4172 3060 L
+4112 3000 mt 4112 3120 L
+4409 3318 mt 4529 3318 L
+4469 3258 mt 4469 3378 L
+4766 3593 mt 4886 3593 L
+4826 3533 mt 4826 3653 L
+5123 3877 mt 5243 3877 L
+5183 3817 mt 5183 3937 L
+5480 4039 mt 5600 4039 L
+5540 3979 mt 5540 4099 L
+5837 4052 mt 5957 4052 L
+5897 3992 mt 5897 4112 L
+gr
+
+gs 899 389 5357 4227 MR c np
+357 96 357 238 357 275 357 262 357 248 357 283 357 226 357 271 
+357 347 357 257 357 241 357 264 357 330 1256 712 14 MP stroke
+gs 1110 566 4934 3631 MR c np
+0 j
+-69 119 -69 -119 138 0 1187 752 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1082 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1346 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1587 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1844 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2191 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2462 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2688 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2971 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3219 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3481 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3756 4 MP
+DP
+-69 119 -69 -119 138 0 5471 3994 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4090 4 MP
+DP
+gr
+
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy1.pdf b/doc/tutorial/images/accuracy1.pdf
new file mode 100644
index 0000000..ab63e6f
Binary files /dev/null and b/doc/tutorial/images/accuracy1.pdf differ
diff --git a/doc/tutorial/images/accuracy2.eps b/doc/tutorial/images/accuracy2.eps
new file mode 100755
index 0000000..6d3e887
--- /dev/null
+++ b/doc/tutorial/images/accuracy2.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy2.eps
+%%CreationDate: 07/27/2004  11:00:44
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt 
+(0) s
+2684 4615 mt 2684 4561 L
+2684  389 mt 2684  442 L
+2611 4894 mt 
+(5) s
+4469 4615 mt 4469 4561 L
+4469  389 mt 4469  442 L
+4323 4894 mt 
+(10) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3206 mt  952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1797 mt  952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 15 357 -27 357 -35 357 21 357 17 357 -25 357 11 357 416 
+357 568 357 584 357 564 357 539 357 537 357 427 899 562 15 MP stroke
+gr
+
+24 w
+  60   60  899  562 FO
+  60   60 1256  989 FO
+  60   60 1613 1526 FO
+  60   60 1970 2065 FO
+  60   60 2327 2629 FO
+  60   60 2684 3213 FO
+  60   60 3041 3781 FO
+  60   60 3398 4197 FO
+  60   60 3755 4208 FO
+  60   60 4112 4183 FO
+  60   60 4469 4200 FO
+  60   60 4826 4221 FO
+  60   60 5183 4186 FO
+  60   60 5540 4159 FO
+  60   60 5897 4174 FO
+gs 899 389 5357 4227 MR c np
+357 14 357 -27 357 -36 357 139 357 353 357 359 357 362 357 350 
+357 361 357 369 357 365 357 367 357 338 1256 859 14 MP stroke
+gr
+
+1214  817 mt 1298  901 L
+1298  817 mt 1214  901 L
+1571 1155 mt 1655 1239 L
+1655 1155 mt 1571 1239 L
+1928 1522 mt 2012 1606 L
+2012 1522 mt 1928 1606 L
+2285 1887 mt 2369 1971 L
+2369 1887 mt 2285 1971 L
+2642 2256 mt 2726 2340 L
+2726 2256 mt 2642 2340 L
+2999 2617 mt 3083 2701 L
+3083 2617 mt 2999 2701 L
+3356 2967 mt 3440 3051 L
+3440 2967 mt 3356 3051 L
+3713 3329 mt 3797 3413 L
+3797 3329 mt 3713 3413 L
+4070 3688 mt 4154 3772 L
+4154 3688 mt 4070 3772 L
+4427 4041 mt 4511 4125 L
+4511 4041 mt 4427 4125 L
+4784 4180 mt 4868 4264 L
+4868 4180 mt 4784 4264 L
+5141 4144 mt 5225 4228 L
+5225 4144 mt 5141 4228 L
+5498 4117 mt 5582 4201 L
+5582 4117 mt 5498 4201 L
+5855 4131 mt 5939 4215 L
+5939 4131 mt 5855 4215 L
+gs 899 389 5357 4227 MR c np
+357 13 357 102 357 284 357 278 357 279 357 289 357 286 357 286 
+357 281 357 300 357 298 357 324 357 370 357 384 899 399 15 MP stroke
+gr
+
+ 839  399 mt  959  399 L
+ 899  339 mt  899  459 L
+1196  783 mt 1316  783 L
+1256  723 mt 1256  843 L
+1553 1153 mt 1673 1153 L
+1613 1093 mt 1613 1213 L
+1910 1477 mt 2030 1477 L
+1970 1417 mt 1970 1537 L
+2267 1775 mt 2387 1775 L
+2327 1715 mt 2327 1835 L
+2624 2075 mt 2744 2075 L
+2684 2015 mt 2684 2135 L
+2981 2356 mt 3101 2356 L
+3041 2296 mt 3041 2416 L
+3338 2642 mt 3458 2642 L
+3398 2582 mt 3398 2702 L
+3695 2928 mt 3815 2928 L
+3755 2868 mt 3755 2988 L
+4052 3217 mt 4172 3217 L
+4112 3157 mt 4112 3277 L
+4409 3496 mt 4529 3496 L
+4469 3436 mt 4469 3556 L
+4766 3774 mt 4886 3774 L
+4826 3714 mt 4826 3834 L
+5123 4058 mt 5243 4058 L
+5183 3998 mt 5183 4118 L
+5480 4160 mt 5600 4160 L
+5540 4100 mt 5540 4220 L
+5837 4173 mt 5957 4173 L
+5897 4113 mt 5897 4233 L
+gs 899 389 5357 4227 MR c np
+357 41 357 257 357 271 357 265 357 270 357 276 357 274 357 274 
+357 261 357 295 357 293 357 307 357 320 1256 770 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 810 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1130 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1437 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1730 4 MP
+DP
+-69 119 -69 -119 138 0 2615 2025 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2286 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2560 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2834 4 MP
+DP
+-69 119 -69 -119 138 0 4043 3110 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3380 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3645 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3916 4 MP
+DP
+-69 119 -69 -119 138 0 5471 4173 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4214 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy2.pdf b/doc/tutorial/images/accuracy2.pdf
new file mode 100644
index 0000000..287b3d6
Binary files /dev/null and b/doc/tutorial/images/accuracy2.pdf differ
diff --git a/doc/tutorial/images/accuracy3.eps b/doc/tutorial/images/accuracy3.eps
new file mode 100755
index 0000000..0546c5e
--- /dev/null
+++ b/doc/tutorial/images/accuracy3.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy3.eps
+%%CreationDate: 07/27/2004  11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt 
+(0) s
+2684 4615 mt 2684 4561 L
+2684  389 mt 2684  442 L
+2611 4894 mt 
+(5) s
+4469 4615 mt 4469 4561 L
+4469  389 mt 4469  442 L
+4323 4894 mt 
+(10) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3206 mt  952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1797 mt  952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -103 357 -74 357 21 357 8 357 -22 357 -38 357 335 357 533 
+357 552 357 514 357 582 357 543 357 503 357 376 899 463 15 MP stroke
+gr
+
+24 w
+  60   60  899  463 FO
+  60   60 1256  839 FO
+  60   60 1613 1342 FO
+  60   60 1970 1885 FO
+  60   60 2327 2467 FO
+  60   60 2684 2981 FO
+  60   60 3041 3533 FO
+  60   60 3398 4066 FO
+  60   60 3755 4401 FO
+  60   60 4112 4363 FO
+  60   60 4469 4341 FO
+  60   60 4826 4349 FO
+  60   60 5183 4370 FO
+  60   60 5540 4296 FO
+  60   60 5897 4193 FO
+gs 899 389 5357 4227 MR c np
+357 -60 357 -98 357 99 357 344 357 353 357 330 357 375 357 342 
+357 353 357 336 357 416 357 343 357 371 1256 734 14 MP stroke
+gr
+
+1214  692 mt 1298  776 L
+1298  692 mt 1214  776 L
+1571 1063 mt 1655 1147 L
+1655 1063 mt 1571 1147 L
+1928 1406 mt 2012 1490 L
+2012 1406 mt 1928 1490 L
+2285 1822 mt 2369 1906 L
+2369 1822 mt 2285 1906 L
+2642 2158 mt 2726 2242 L
+2726 2158 mt 2642 2242 L
+2999 2511 mt 3083 2595 L
+3083 2511 mt 2999 2595 L
+3356 2853 mt 3440 2937 L
+3440 2853 mt 3356 2937 L
+3713 3228 mt 3797 3312 L
+3797 3228 mt 3713 3312 L
+4070 3558 mt 4154 3642 L
+4154 3558 mt 4070 3642 L
+4427 3911 mt 4511 3995 L
+4511 3911 mt 4427 3995 L
+4784 4255 mt 4868 4339 L
+4868 4255 mt 4784 4339 L
+5141 4354 mt 5225 4438 L
+5225 4354 mt 5141 4438 L
+5498 4256 mt 5582 4340 L
+5582 4256 mt 5498 4340 L
+5855 4196 mt 5939 4280 L
+5939 4196 mt 5855 4280 L
+gs 899 389 5357 4227 MR c np
+357 254 357 216 357 314 357 281 357 268 357 261 357 284 357 274 
+357 285 357 255 357 331 357 285 357 317 357 314 899 389 15 MP stroke
+gr
+
+ 839  389 mt  959  389 L
+ 899  329 mt  899  449 L
+1196  703 mt 1316  703 L
+1256  643 mt 1256  763 L
+1553 1020 mt 1673 1020 L
+1613  960 mt 1613 1080 L
+1910 1305 mt 2030 1305 L
+1970 1245 mt 1970 1365 L
+2267 1636 mt 2387 1636 L
+2327 1576 mt 2327 1696 L
+2624 1891 mt 2744 1891 L
+2684 1831 mt 2684 1951 L
+2981 2176 mt 3101 2176 L
+3041 2116 mt 3041 2236 L
+3338 2450 mt 3458 2450 L
+3398 2390 mt 3398 2510 L
+3695 2734 mt 3815 2734 L
+3755 2674 mt 3755 2794 L
+4052 2995 mt 4172 2995 L
+4112 2935 mt 4112 3055 L
+4409 3263 mt 4529 3263 L
+4469 3203 mt 4469 3323 L
+4766 3544 mt 4886 3544 L
+4826 3484 mt 4826 3604 L
+5123 3858 mt 5243 3858 L
+5183 3798 mt 5183 3918 L
+5480 4074 mt 5600 4074 L
+5540 4014 mt 5540 4134 L
+5837 4328 mt 5957 4328 L
+5897 4268 mt 5897 4388 L
+gs 899 389 5357 4227 MR c np
+357 254 357 203 357 304 357 269 357 254 357 251 357 271 357 265 
+357 271 357 243 357 319 357 275 357 294 1256 682 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 722 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1016 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1291 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1610 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1853 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2124 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2389 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2660 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2911 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3165 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3434 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3738 4 MP
+DP
+-69 119 -69 -119 138 0 5471 3941 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4195 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy3.pdf b/doc/tutorial/images/accuracy3.pdf
new file mode 100644
index 0000000..782b339
Binary files /dev/null and b/doc/tutorial/images/accuracy3.pdf differ
diff --git a/doc/tutorial/images/accuracy4.eps b/doc/tutorial/images/accuracy4.eps
new file mode 100755
index 0000000..3139cf7
--- /dev/null
+++ b/doc/tutorial/images/accuracy4.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy4.eps
+%%CreationDate: 07/27/2004  11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt 
+(0) s
+2684 4615 mt 2684 4561 L
+2684  389 mt 2684  442 L
+2611 4894 mt 
+(5) s
+4469 4615 mt 4469 4561 L
+4469  389 mt 4469  442 L
+4323 4894 mt 
+(10) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3206 mt  952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1797 mt  952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -15 357 -55 357 -31 357 84 357 -71 357 -70 357 176 357 543 
+357 575 357 574 357 567 357 566 357 518 357 393 899 580 15 MP stroke
+gr
+
+24 w
+  60   60  899  580 FO
+  60   60 1256  973 FO
+  60   60 1613 1491 FO
+  60   60 1970 2057 FO
+  60   60 2327 2624 FO
+  60   60 2684 3198 FO
+  60   60 3041 3773 FO
+  60   60 3398 4316 FO
+  60   60 3755 4492 FO
+  60   60 4112 4422 FO
+  60   60 4469 4351 FO
+  60   60 4826 4435 FO
+  60   60 5183 4404 FO
+  60   60 5540 4349 FO
+  60   60 5897 4334 FO
+gs 899 389 5357 4227 MR c np
+357 -45 357 -9 357 13 357 342 357 360 357 364 357 361 357 361 
+357 347 357 352 357 355 357 361 357 428 1256 806 14 MP stroke
+gr
+
+1214  764 mt 1298  848 L
+1298  764 mt 1214  848 L
+1571 1192 mt 1655 1276 L
+1655 1192 mt 1571 1276 L
+1928 1553 mt 2012 1637 L
+2012 1553 mt 1928 1637 L
+2285 1908 mt 2369 1992 L
+2369 1908 mt 2285 1992 L
+2642 2260 mt 2726 2344 L
+2726 2260 mt 2642 2344 L
+2999 2607 mt 3083 2691 L
+3083 2607 mt 2999 2691 L
+3356 2968 mt 3440 3052 L
+3440 2968 mt 3356 3052 L
+3713 3329 mt 3797 3413 L
+3797 3329 mt 3713 3413 L
+4070 3693 mt 4154 3777 L
+4154 3693 mt 4070 3777 L
+4427 4053 mt 4511 4137 L
+4511 4053 mt 4427 4137 L
+4784 4395 mt 4868 4479 L
+4868 4395 mt 4784 4479 L
+5141 4408 mt 5225 4492 L
+5225 4408 mt 5141 4492 L
+5498 4399 mt 5582 4483 L
+5582 4399 mt 5498 4483 L
+5855 4354 mt 5939 4438 L
+5939 4354 mt 5855 4438 L
+gs 899 389 5357 4227 MR c np
+357 305 357 285 357 260 357 260 357 266 357 279 357 326 357 296 
+357 241 357 285 357 311 357 283 357 440 357 289 899 439 15 MP stroke
+gr
+
+ 839  439 mt  959  439 L
+ 899  379 mt  899  499 L
+1196  728 mt 1316  728 L
+1256  668 mt 1256  788 L
+1553 1168 mt 1673 1168 L
+1613 1108 mt 1613 1228 L
+1910 1451 mt 2030 1451 L
+1970 1391 mt 1970 1511 L
+2267 1762 mt 2387 1762 L
+2327 1702 mt 2327 1822 L
+2624 2047 mt 2744 2047 L
+2684 1987 mt 2684 2107 L
+2981 2288 mt 3101 2288 L
+3041 2228 mt 3041 2348 L
+3338 2584 mt 3458 2584 L
+3398 2524 mt 3398 2644 L
+3695 2910 mt 3815 2910 L
+3755 2850 mt 3755 2970 L
+4052 3189 mt 4172 3189 L
+4112 3129 mt 4112 3249 L
+4409 3455 mt 4529 3455 L
+4469 3395 mt 4469 3515 L
+4766 3715 mt 4886 3715 L
+4826 3655 mt 4826 3775 L
+5123 3975 mt 5243 3975 L
+5183 3915 mt 5183 4035 L
+5480 4260 mt 5600 4260 L
+5540 4200 mt 5540 4320 L
+5837 4565 mt 5957 4565 L
+5897 4505 mt 5897 4625 L
+gs 899 389 5357 4227 MR c np
+357 282 357 277 357 249 357 246 357 256 357 266 357 316 357 286 
+357 228 357 271 357 311 357 273 357 401 1256 694 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 734 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1135 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1408 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1719 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1990 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2218 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2504 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2820 4 MP
+DP
+-69 119 -69 -119 138 0 4043 3086 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3342 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3588 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3837 4 MP
+DP
+-69 119 -69 -119 138 0 5471 4114 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4396 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy4.pdf b/doc/tutorial/images/accuracy4.pdf
new file mode 100644
index 0000000..e31fdfb
Binary files /dev/null and b/doc/tutorial/images/accuracy4.pdf differ
diff --git a/doc/tutorial/images/accuracy5.eps b/doc/tutorial/images/accuracy5.eps
new file mode 100755
index 0000000..cc05392
--- /dev/null
+++ b/doc/tutorial/images/accuracy5.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy5.eps
+%%CreationDate: 07/27/2004  11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt 
+(0) s
+2684 4615 mt 2684 4561 L
+2684  389 mt 2684  442 L
+2611 4894 mt 
+(5) s
+4469 4615 mt 4469 4561 L
+4469  389 mt 4469  442 L
+4323 4894 mt 
+(10) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3206 mt  952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1797 mt  952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -100 357 -32 357 -29 357 -2 357 -48 357 -5 357 371 357 543 
+357 546 357 541 357 515 357 559 357 465 357 397 899 426 15 MP stroke
+gr
+
+24 w
+  60   60  899  426 FO
+  60   60 1256  823 FO
+  60   60 1613 1288 FO
+  60   60 1970 1847 FO
+  60   60 2327 2362 FO
+  60   60 2684 2903 FO
+  60   60 3041 3449 FO
+  60   60 3398 3992 FO
+  60   60 3755 4363 FO
+  60   60 4112 4358 FO
+  60   60 4469 4310 FO
+  60   60 4826 4308 FO
+  60   60 5183 4279 FO
+  60   60 5540 4247 FO
+  60   60 5897 4147 FO
+gs 899 389 5357 4227 MR c np
+357 -129 357 -75 357 -85 357 254 357 303 357 426 357 368 357 356 
+357 363 357 368 357 336 357 389 357 339 1256 727 14 MP stroke
+gr
+
+1214  685 mt 1298  769 L
+1298  685 mt 1214  769 L
+1571 1024 mt 1655 1108 L
+1655 1024 mt 1571 1108 L
+1928 1413 mt 2012 1497 L
+2012 1413 mt 1928 1497 L
+2285 1749 mt 2369 1833 L
+2369 1749 mt 2285 1833 L
+2642 2117 mt 2726 2201 L
+2726 2117 mt 2642 2201 L
+2999 2480 mt 3083 2564 L
+3083 2480 mt 2999 2564 L
+3356 2836 mt 3440 2920 L
+3440 2836 mt 3356 2920 L
+3713 3204 mt 3797 3288 L
+3797 3204 mt 3713 3288 L
+4070 3630 mt 4154 3714 L
+4154 3630 mt 4070 3714 L
+4427 3933 mt 4511 4017 L
+4511 3933 mt 4427 4017 L
+4784 4187 mt 4868 4271 L
+4868 4187 mt 4784 4271 L
+5141 4102 mt 5225 4186 L
+5225 4102 mt 5141 4186 L
+5498 4027 mt 5582 4111 L
+5582 4027 mt 5498 4111 L
+5855 3898 mt 5939 3982 L
+5939 3898 mt 5855 3982 L
+gs 899 389 5357 4227 MR c np
+357 262 357 269 357 276 357 256 357 260 357 275 357 249 357 278 
+357 283 357 276 357 266 357 303 357 285 357 312 899 389 15 MP stroke
+gr
+
+ 839  389 mt  959  389 L
+ 899  329 mt  899  449 L
+1196  701 mt 1316  701 L
+1256  641 mt 1256  761 L
+1553  986 mt 1673  986 L
+1613  926 mt 1613 1046 L
+1910 1289 mt 2030 1289 L
+1970 1229 mt 1970 1349 L
+2267 1555 mt 2387 1555 L
+2327 1495 mt 2327 1615 L
+2624 1831 mt 2744 1831 L
+2684 1771 mt 2684 1891 L
+2981 2114 mt 3101 2114 L
+3041 2054 mt 3041 2174 L
+3338 2392 mt 3458 2392 L
+3398 2332 mt 3398 2452 L
+3695 2641 mt 3815 2641 L
+3755 2581 mt 3755 2701 L
+4052 2916 mt 4172 2916 L
+4112 2856 mt 4112 2976 L
+4409 3176 mt 4529 3176 L
+4469 3116 mt 4469 3236 L
+4766 3432 mt 4886 3432 L
+4826 3372 mt 4826 3492 L
+5123 3708 mt 5243 3708 L
+5183 3648 mt 5183 3768 L
+5480 3977 mt 5600 3977 L
+5540 3917 mt 5540 4037 L
+5837 4239 mt 5957 4239 L
+5897 4179 mt 5897 4299 L
+gs 899 389 5357 4227 MR c np
+357 251 357 257 357 263 357 245 357 246 357 264 357 238 357 267 
+357 271 357 267 357 258 357 287 357 268 1256 683 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 723 4 MP
+DP
+-69 119 -69 -119 138 0 1544 991 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1278 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1536 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1803 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2074 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2341 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2579 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2843 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3089 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3334 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3597 4 MP
+DP
+-69 119 -69 -119 138 0 5471 3854 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4105 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy5.pdf b/doc/tutorial/images/accuracy5.pdf
new file mode 100644
index 0000000..10e1225
Binary files /dev/null and b/doc/tutorial/images/accuracy5.pdf differ
diff --git a/doc/tutorial/images/accuracy6.eps b/doc/tutorial/images/accuracy6.eps
new file mode 100755
index 0000000..4b8ef2b
--- /dev/null
+++ b/doc/tutorial/images/accuracy6.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy6.eps
+%%CreationDate: 07/27/2004  11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt 
+(0) s
+2684 4615 mt 2684 4561 L
+2684  389 mt 2684  442 L
+2611 4894 mt 
+(5) s
+4469 4615 mt 4469 4561 L
+4469  389 mt 4469  442 L
+4323 4894 mt 
+(10) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3206 mt  952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1797 mt  952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -88 357 10 357 -72 357 102 357 -57 357 2 357 251 357 551 
+357 532 357 524 357 542 357 527 357 531 357 442 899 502 15 MP stroke
+gr
+
+24 w
+  60   60  899  502 FO
+  60   60 1256  944 FO
+  60   60 1613 1475 FO
+  60   60 1970 2002 FO
+  60   60 2327 2544 FO
+  60   60 2684 3068 FO
+  60   60 3041 3600 FO
+  60   60 3398 4151 FO
+  60   60 3755 4402 FO
+  60   60 4112 4404 FO
+  60   60 4469 4347 FO
+  60   60 4826 4449 FO
+  60   60 5183 4377 FO
+  60   60 5540 4387 FO
+  60   60 5897 4299 FO
+gs 899 389 5357 4227 MR c np
+357 -86 357 -27 357 -70 357 330 357 300 357 471 357 363 357 340 
+357 317 357 391 357 361 357 347 357 418 1256 808 14 MP stroke
+gr
+
+1214  766 mt 1298  850 L
+1298  766 mt 1214  850 L
+1571 1184 mt 1655 1268 L
+1655 1184 mt 1571 1268 L
+1928 1531 mt 2012 1615 L
+2012 1531 mt 1928 1615 L
+2285 1892 mt 2369 1976 L
+2369 1892 mt 2285 1976 L
+2642 2283 mt 2726 2367 L
+2726 2283 mt 2642 2367 L
+2999 2600 mt 3083 2684 L
+3083 2600 mt 2999 2684 L
+3356 2940 mt 3440 3024 L
+3440 2940 mt 3356 3024 L
+3713 3303 mt 3797 3387 L
+3797 3303 mt 3713 3387 L
+4070 3774 mt 4154 3858 L
+4154 3774 mt 4070 3858 L
+4427 4074 mt 4511 4158 L
+4511 4074 mt 4427 4158 L
+4784 4404 mt 4868 4488 L
+4868 4404 mt 4784 4488 L
+5141 4334 mt 5225 4418 L
+5225 4334 mt 5141 4418 L
+5498 4307 mt 5582 4391 L
+5582 4307 mt 5498 4391 L
+5855 4221 mt 5939 4305 L
+5939 4221 mt 5855 4305 L
+gs 899 389 5357 4227 MR c np
+357 284 357 219 357 331 357 280 357 266 357 270 357 267 357 271 
+357 264 357 297 357 283 357 268 357 338 357 308 899 497 15 MP stroke
+gr
+
+ 839  497 mt  959  497 L
+ 899  437 mt  899  557 L
+1196  805 mt 1316  805 L
+1256  745 mt 1256  865 L
+1553 1143 mt 1673 1143 L
+1613 1083 mt 1613 1203 L
+1910 1411 mt 2030 1411 L
+1970 1351 mt 1970 1471 L
+2267 1694 mt 2387 1694 L
+2327 1634 mt 2327 1754 L
+2624 1991 mt 2744 1991 L
+2684 1931 mt 2684 2051 L
+2981 2255 mt 3101 2255 L
+3041 2195 mt 3041 2315 L
+3338 2526 mt 3458 2526 L
+3398 2466 mt 3398 2586 L
+3695 2793 mt 3815 2793 L
+3755 2733 mt 3755 2853 L
+4052 3063 mt 4172 3063 L
+4112 3003 mt 4112 3123 L
+4409 3329 mt 4529 3329 L
+4469 3269 mt 4469 3389 L
+4766 3609 mt 4886 3609 L
+4826 3549 mt 4826 3669 L
+5123 3940 mt 5243 3940 L
+5183 3880 mt 5183 4000 L
+5480 4159 mt 5600 4159 L
+5540 4099 mt 5540 4219 L
+5837 4443 mt 5957 4443 L
+5897 4383 mt 5897 4503 L
+gs 899 389 5357 4227 MR c np
+357 307 357 211 357 318 357 274 357 251 357 266 357 254 357 263 
+357 247 357 299 357 273 357 237 357 326 1256 778 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 818 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1144 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1381 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1654 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1953 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2200 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2463 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2717 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2983 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3234 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3508 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3826 4 MP
+DP
+-69 119 -69 -119 138 0 5471 4037 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4344 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy6.pdf b/doc/tutorial/images/accuracy6.pdf
new file mode 100644
index 0000000..00811af
Binary files /dev/null and b/doc/tutorial/images/accuracy6.pdf differ
diff --git a/doc/tutorial/images/front_pic1.eps b/doc/tutorial/images/front_pic1.eps
new file mode 100755
index 0000000..f6a0e69
--- /dev/null
+++ b/doc/tutorial/images/front_pic1.eps
@@ -0,0 +1,240 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: front_pic1.eps
+%%CreationDate: 07/26/2004  11:13:52
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    92   223   543   573
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    92   223   543   573
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  899   460  5405  4199 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+gs 899 389 5357 4227 MR c np
+24 w
+gr
+
+24 w
+0 sg
+  60   60 1434 1938 FO
+  60   60 1702 4441 FO
+  60   60 1970 4512 FO
+  60   60 2238 1564 FO
+  60   60 2505  871 FO
+  60   60 2773  654 FO
+  60   60 3041  707 FO
+  60   60 3309 1418 FO
+  60   60 3577 3020 FO
+  60   60 3844 1089 FO
+  60   60 4112 1713 FO
+  60   60 4380 2268 FO
+  60   60 4648 4250 FO
+  60   60 4916 2270 FO
+  60   60 5183 1743 FO
+  60   60 5451 2808 FO
+gs 899 389 5357 4227 MR c np
+0 -564 1434 2502 2 MP stroke
+0 1939 1702 2502 2 MP stroke
+0 2010 1970 2502 2 MP stroke
+0 -938 2238 2502 2 MP stroke
+0 -1631 2505 2502 2 MP stroke
+0 -1848 2773 2502 2 MP stroke
+0 -1795 3041 2502 2 MP stroke
+0 -1084 3309 2502 2 MP stroke
+0 518 3577 2502 2 MP stroke
+0 -1413 3844 2502 2 MP stroke
+0 -789 4112 2502 2 MP stroke
+0 -234 4380 2502 2 MP stroke
+0 1748 4648 2502 2 MP stroke
+0 -232 4916 2502 2 MP stroke
+0 -759 5183 2502 2 MP stroke
+0 306 5451 2502 2 MP stroke
+5356 0 899 2502 2 MP stroke
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/front_pic1.pdf b/doc/tutorial/images/front_pic1.pdf
new file mode 100644
index 0000000..1ed6920
Binary files /dev/null and b/doc/tutorial/images/front_pic1.pdf differ
diff --git a/doc/tutorial/images/front_pic2.eps b/doc/tutorial/images/front_pic2.eps
new file mode 100755
index 0000000..d3ad0a9
--- /dev/null
+++ b/doc/tutorial/images/front_pic2.eps
@@ -0,0 +1,257 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: front_pic2.eps
+%%CreationDate: 07/26/2004  11:13:52
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    92   243   543   547
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    92   243   543   547
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  899   772  5405  3646 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+gs 899 389 5357 4227 MR c np
+DO
+24 w
+0 sg
+54 -32 54 -86 53 -109 54 -90 53 -28 54 67 53 174 54 270 
+54 330 53 334 54 277 53 162 54 8 53 -159 54 -309 53 -414 
+54 -451 54 -417 53 -314 54 -161 53 11 54 174 53 297 54 358 
+53 347 54 272 54 145 53 -5 54 -151 53 -264 54 -320 53 -313 
+54 -239 54 -113 53 45 54 209 53 356 54 461 53 515 54 508 
+53 449 54 350 54 226 53 102 54 -8 53 -86 54 -127 53 -126 
+54 -92 53 -33 54 33 54 92 53 126 54 127 53 86 54 8 
+53 -102 54 -226 54 -350 53 -449 54 -508 53 -515 54 -461 53 -356 
+54 -209 53 -45 54 113 54 239 53 313 54 320 53 264 54 151 
+53 5 54 -145 53 -272 54 -347 54 -358 53 -297 54 -174 53 -11 
+54 161 53 314 54 417 54 451 53 414 54 309 53 159 54 -8 
+53 -162 54 -277 53 -334 54 -330 54 -270 53 -174 54 -67 53 28 
+54 90 53 109 54 86 952 3476 100 MP stroke
+53 32 899 3444 2 MP stroke
+SO
+gr
+
+24 w
+0 sg
+  60   60 3208 1056 FO
+  60   60 5501 2344 FO
+  60   60 3400 1153 FO
+  60   60 2432 2872 FO
+  60   60 1248 3644 FO
+  60   60 4417 4197 FO
+  60   60 4274 3594 FO
+  60   60 4817 2801 FO
+  60   60 6013 3785 FO
+  60   60 2877 3611 FO
+  60   60 1270 3561 FO
+  60   60 5545 2191 FO
+  60   60 2477 3056 FO
+  60   60 3862  966 FO
+  60   60 5088 4256 FO
+  60   60 1274 3544 FO
+gs 899 389 5357 4227 MR c np
+0 -1747 3208 2803 2 MP stroke
+0 -459 5501 2803 2 MP stroke
+0 -1650 3400 2803 2 MP stroke
+0 69 2432 2803 2 MP stroke
+0 841 1248 2803 2 MP stroke
+0 1394 4417 2803 2 MP stroke
+0 791 4274 2803 2 MP stroke
+0 -2 4817 2803 2 MP stroke
+0 982 6013 2803 2 MP stroke
+0 808 2877 2803 2 MP stroke
+0 758 1270 2803 2 MP stroke
+0 -612 5545 2803 2 MP stroke
+0 253 2477 2803 2 MP stroke
+0 -1837 3862 2803 2 MP stroke
+0 1453 5088 2803 2 MP stroke
+0 741 1274 2803 2 MP stroke
+5356 0 899 2803 2 MP stroke
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/front_pic2.pdf b/doc/tutorial/images/front_pic2.pdf
new file mode 100644
index 0000000..32a8851
Binary files /dev/null and b/doc/tutorial/images/front_pic2.pdf differ
diff --git a/doc/tutorial/images/glacier1.eps b/doc/tutorial/images/glacier1.eps
new file mode 100755
index 0000000..85fc084
--- /dev/null
+++ b/doc/tutorial/images/glacier1.eps
@@ -0,0 +1,27242 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: glacier1.eps
+%%CreationDate: 09/01/2004  09:56:03
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    92   227   543   592
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    92   227   543   592
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 2.08333 def
+portraitMode 0037 1275 csm
+
+  155    41   939   761 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+gs 0 0 1200 901 MR c np
+/picstr 1200 string def
+gs
+1200 436 scale
+1200 436 8
+[1200 0 0 436 0 0] L1i
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C7274767261FFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F81847F796C6155FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C87898C89877F766A5C51FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898F92949289847C746A57FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E92949A9A948F877F79716154FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929A9C9E9C94928C877C726657FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F929A9EA49E9C9A948F877F746A5CFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C8C9A9EA4A6A49E9C9992897F746C5F51FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87999EA4A9A9A6A39E9A928981766C6155FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F929CA4ABB1ABA6A4A19C928981797167574FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8799A4ABB1B4AEA9A6A49C9489847C726A5D4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C929CA6B1B7B7B1AEA9A49C9489847C726A5F55FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8994A1ACB7BEB9B6B1AEA69C948C857C746C6457FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A929CA6B1BEC1BEB7B1AEA69E948E877F766C675C4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89949EABB7C1C1BEB9B6AEA69E948F877F7671675F54FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9AA4AEBCC6C1BEB9B3AEA69E998F877F76726A6157FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF87929CA9B6C1CCC1BEB9B3AEA69E9992877F79726A6157FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF8C99A4AEBCC6CCC1BBB9B3B1A99E9A92877F7C746C615C4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF81929CA6B4C1CCCCC1BBB9B3B1A9A39A9289817C746C665D54FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF89949EA9B9C6D3CCC1B9B7B3B1A9A39C9289817C746C675F55FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7F8F9CA4AEBCCCD4CCC1B9B6B1B1A9A49C9289847F76716A5F574FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF87949EA6B4C4D1D4CCC1B9B6B1B1A9A49C948C857F76726A61574FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7C8C9AA1A9B7C6D7D9CCC4B9B6B1AEA9A49C948E877F79726A615951FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF85949CA4AEBCCCD9D4CCC1B9B6B1AEA9A49C948E877F7C746C615C54FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF8C949EA6B1C1CFD9D4CCC1B9B6B1AEA9A49C948F877F7C746C665D554F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF849299A1A9B6C4D1D9D3C8C0B9B3B1AEA9A49C969287817C746C675F554F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF89949CA4AEB7C4D1D4D1C6BEB9B3B1AEA9A49C999289817C76716A5F5751
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7F92949CA6AEB9C6D3D3CFC6BBB9B3B1AEABA49E999289817C76726A615754
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF8992999EA6B1B9C6D3CFCCC6BBB9B3B1AEA9A69E9A9289847F79726A615955
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF7C8F949AA4A9B1BCC6D1CFC9C1BBB9B3B1AEA9A69E9A9289847F79746C665D55
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF8992949CA4A9B4BECBCFCCC6C1BBB9B1B1AEA9A49E9A9289877F7C746C675F55
+51FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7C8F949A9CA4ABB7BFCCCCC6C6C1BBB9B1AEAEA6A49E9A928C877F7C7471675F57
+54FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF8992949C9EA6AEB7C4CCC8C6C1BEBBB7B1AEABA6A49E9A948C877F7C76726A6157
+544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF6A8C949A9CA3A6AEB9C4C6C6C1BEBBB9B7B1AEABA6A49E9A948E87817C76726A615C
+554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF8792949A9CA4A9B1B9C1C6C4BEBBB9B9B6B1AEA9A6A49E9A948E87817C76726C665F
+5551FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF678994999C9EA6A9B1B9C1C1C1BEB9B9B6B1AEAEA9A6A49C9A948F87817F79746C675F
+5751FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF878F949A9CA3A6A9AEB7BEBEBEB9B9B6B3B1AEABA9A6A39C9A948F89817F79746C6761
+57544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF678992999C9CA4A6A9AEB7B9B9B9B7B6B1B1AEAEA9A6A4A19C99928F89817F7C74716A61
+59544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF878F94999C9EA4A6A9AEB6B9B7B7B3B1B1AEAEABA9A6A49E9C99928E89817F7C74726A61
+5D554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF678994949A9C9EA4A6A9AEB6B6B3B1B1B1AEAEABA9A6A6A49E9C96928E89847F7C76726A66
+5F574FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF879294949A9C9EA4A6ABAEB1B1B1B1B1AEAEABA9A6A6A6A49E9A94928C87847F7C76726C67
+5F57514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF81899294999C9C9EA4A6ABAEB1B1AEAEAEAEABA9A6A6A6A4A19C9A94928C87847F7C76726C67
+5F59544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF879292949A9A9C9EA4A6A9AEAEAEAEAEAEABA9A6A6A6A4A49E9C9994928987817F7C74726C67
+615C554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF818C9294949A9A9C9EA3A6A6ABABABA9A9A9A9A6A6A6A4A4A39E9C94928F8987817F7C74726C67
+615D574FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF8992949494999A9C9EA1A4A6A9A9A9A9A9A6A6A6A6A4A4A19E9C9A94928E8987817F7974726C67
+615F574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+848F94949494999A9C9C9EA4A6A6A6A6A6A6A6A6A6A4A39E9E9C9C99948F898987817F7974726C6A
+615F57514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
+8C9294949494949A9C9C9EA1A4A4A4A4A4A4A4A4A4A39E9E9C9C9A94928E898785817C7974726C6A
+615F59544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87
+92949499949494999A9C9E9EA3A3A3A3A4A4A4A4A39E9E9C9C9A9994928C8987847F7C7974726C6A
+645F5C554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8E
+94949996949494949A9C9C9E9E9E9E9E9EA19E9E9E9E9C9C9A9994928F898787817F7C7974726C6A
+665F5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8792
+94999A9494949494999A9C9C9C9C9C9C9E9E9E9C9C9C9C9A999494928E8987847F7F7C7674726C6A
+66615D57544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF849294
+969A99949494949494999A9C9C9C9C9C9C9C9C9C9C9A9A999494928F8C8987817F7C7C7674716C6A
+66615D57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8F9499
+9A9A99949494949494949A9A9A9A9A9A9C9A9A9A999994949492928E898785817F7C7974746E6A6A
+64615F57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF748992999A
+9C9A969494929492949494949496999A9A9994949494949292928E898987847F7C7C7674726C6A6A
+61615F5955514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8492949A9C
+9A9A949494929292929494949494949494949492929292928F8E8C898787817F7C767474726C6A67
+61615F5955544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F92949A9C9C
+9A99949492929292929292929494949494929292928F8F8E8C89898787847F7F7C767472716C6A66
+615F5F5957554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF798C94999C9C9C
+9A99949292928F928F8F92929292929292928F8F8F8E8E898989878784817F7C7C7472726C6A6761
+615F5F5957554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6789949A9C9E9C9C
+9A9492928F8E8E8C8C8E8F8F8F92928F8F8E8E8F8E8E8C8989878784817F7F7C7974726C6C6A6761
+615F5F595755514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929A9C9E9E9C9A
+9A94928F8E8C898989898C8C8E8E8E8E8E8E8E8E8E8C8989898787847F7F7F7C7674726C6A6A6661
+5F5F5D5C5754544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878E969E9EA19E9C9A
+94928F8E8989898789898989898C8E8E8E8E8E8E8E8C898989878785817F7C7C7674726C6A676661
+5F5D5C595754544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848E949CA3A3A49E9C9A
+948F8E898987878787898989898C8E8E8E8E8E8E8E8E898989878787847F7C7C7674726C6A616161
+5F5D5C595754544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E949CA4A4A4A49E9C94
+928E8989878784858787898989898C8E8E8E8E8E8E8E8C898989878785817F7C767474716A665F5F
+5D5C5957575551514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949CA4A6A4A6A49E9C94
+8F8989878581818787878989898C8E8F8F8F8E8E8E8E8E898989878787847F7C797674726C6A615D
+5C595757575551514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949EA4A6A6A6A6A49E9992
+898987857F7F818787878989898E8F8F928F8F8E8E8E8E8C898989878785817F7C7674726C6A665F
+5757575755554F514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949EA4A6ABA9A6A6A69C948F
+8987857F7F7F8587878989898E8E8F9292928F8E8E8E8E8E898989878787817F7F7C7674726C6761
+5C5757555555514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF676A6A6C72726C6757
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7989949CA4A6ABAEAEA9A9A39A9289
+87857F7C7F84878789898C8E8F9292929292928F8E8E8E8E8C898987878784817F7C7C7674716A66
+5F5755555554544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5972727274767C7C797674716A
+4F55FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7687949CA4A6ABB1B1AEAEA69E949287
+8781797C81878789898E8F9292929494949492928F8F8F8E8C89898987878584817F7C7C7674716C
+675F54555551554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF676A5757747C79797C7C7F8181817F7C7C7674
+726C61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7987929CA4A9AEB1B3B3B1ACA49C928987
+81767C7F8787898C8E8F929294949494949494929292928F8E8C898987878784817F7F7C79767471
+6C675D515451544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727C7F7C767F848484817F818787878784847F7F7F7C
+767471675FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF768C999CA4A6AEB1B6B9B7B1A99E99928781
+7C797F8789898E8F9292929494949494949494949292928F8E8C89898987878584817F7F7C797674
+716C675C4F544F514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF5F6C744F6C7F878184898E8E8E87878989898989898787878581817F
+7F76726C66614FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76929A9EA4A6AEB1B7B9BBB3AEA69C948C847F
+767F878C8E8F9292949494949999999999999994949492928F8E89898987878784817F7F7C7C7674
+726E6C6657514F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF67616A747F877F7C7C858E928F89878E9294928C898E9292928C8989898787878781
+7F7C74746C6A6659FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79949C9EA4A9AEB1B9BBBBB9B1ABA49C92878174
+7F878E9292949494969999999A9A9A9A9A9A9A9994949492928F8C898987878784817F7F7F7C7B76
+74726C6A6157514F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF5F6C7C7C7F7C7C878E898C89858E949494928C92999994928C929294928F8C8E898989898785
+817F7976746C6C6761FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F949C9EA6ABAEB3B9BBBBBBB7AEA69E998E857F7F
+878E929494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8E898987878584817F7F7C7B76
+7472716C6A5F574F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7974
+7C817C898781878E8F94928C8F9492949994949A94969A9999949292949494928E8F8F8E8C898787
+81817C79767274746C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C949CA4A6AEB1B6B9BBBBBBBBB3AEA69C9289817987
+8C9294999C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9994949492928F8E8987878784817F7F7C7976
+7472726C6A675F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8789877F
+818992928F898C929A9A949292949C9C9A99999A9C9C9C9A9A9A9494999494928F8F928F8E898987
+85847F7C7C79767676726A61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929CA4A9AEB1B9BBBBBBBBBBBBB1A9A49A8E877C8589
+92949A9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9994949492928E8989878784817F7F7C7976
+747472716C6A615F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF748794929289
+89929494949292999C9C9A94949A9C9E9C9A9A9C9C9C9C9A9A9A9A9999999494929292928F8C8987
+8784847F7F7C7C7C7B76726A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929CA4ABB1B3B9BBBEC1C0BBBBB9B1A69E9489817F8992
+949A9C9EA3A4A4A4A4A4A4A39E9E9E9E9C9C9C9C9A9A9994949492928F8C89878784817F7C7C7976
+7474726C6C6A665F574F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7176879A99949494
+929A99949A9A949C9C9C9C9A949C9E9E9C9C9A9C9C9E9C9C9A9A9A9A9A99949492929292928E8989
+878785817F7F7C7C7C7C76726C5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9CA4ABB1B9BBBEC0C1C1C0BBBBB9AEA69C928779878F94
+9A9CA1A4A6A6A6A6A6A6A4A4A4A3A19E9E9C9C9C9C9A9996949492928F8C89878784817F7C7C7976
+7472716C6C6A66615C554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8189929A9E9C949A9C
+9C9C9A999A9C9C9E9E9C9C9C9A9C9E9E9E9C9A9C9E9E9E9C9C9C9C9A9A99999494949492928F8C89
+87878785817F7F7F7F7F7F76726A5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF899AA4ABB3B9BBC0C1C1C4C6C1BBBBB6AEA3948981818E9499
+9CA3A6A6A9A9A9A9A9A9A6A6A6A6A4A39E9E9C9C9C9A9A99949492928F8C89878784817F7C7C7674
+74726E6C6A6A66615F574F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898F999EA6A49E9C9C9C
+9E9E9C9A9C9EA1A19E9E9C9C9C9E9E9E9E9E9C9C9E9E9E9C9C9C9C9C9A9A99969494949292928E89
+8987878785817F7F7F7F7F7F76726A5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF8794A4ABB3BBBEC1C1C6C6C6C6C1BBBBB1A69C9287798992969C
+9EA6A9A9AEAEAEAEAEAEAEACABA6A4A4A49E9E9C9C9C9A99949492928E89898787847F7F7C797674
+72726C6C6A6A66615F59554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F92929CA4A6A6A49E9C9E
+9E9E9E9C9C9EA4A49E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C9A9A9A999494949492928F8C
+8987878787848181848181847F76726A59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7F929EABB3B9C1C1C6C6C6C6C8C6C1BEB9AEA49A8E858492949A9E
+A4A9AEAEB1B6B6B6B6B4B1B1B1ABA6A6A4A49E9E9C9C9A9A999494928F89898787817F7C7C767474
+72716C6A6A6766615F5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF769499999EA6A6A6A6A39EA4
+9E9E9E9C9E9EA4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A99969494949292928E
+898987878787848485858587857F76746757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF748E9CA9B1B9C1C6C6C6C9C9C9CCC8C6C0B6A99E94897189929A9CA3
+A6AEB4B6B7B9BCBCBCB9B7B6B4AEA9A6A6A4A39E9E9C9A9A999494928F89898785817F7C79767472
+726C6C6A6A6764615F5D57544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C899C9C9CA3A9A6A6A6A6A4A4
+A19E9E9E9EA3A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A999494949492928F
+8C898987878787858787878787847F76746757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF717C879AA6B1B9BEC6C8C8CCCFCFCFCFC9C4BBB1A69C9287848F949C9EA6
+ABB1B7BCBEBEBFBFBEBEBEB9B7B1AEA9A6A6A4A19E9C9C9A99969492928C8987847F7F7C76747472
+716C6A6A676761615F5F5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74879CA3A3A3A6A9A6A6A6A6A6A4
+A39E9EA19EA4A4A4A4A49E9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9994949494929292
+8E89898989878787878789878787847F79746657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF747F7C94A4AEB9BEC4CCCFCFCFCFCFCFCFC6C0B9AEA3998C728992999CA4A9
+AEB6BCBFC4C4C6C6C6C1C1C0B9B6AEABA9A6A6A49E9E9C9A9A9994928F898987817F7C7976747272
+6C6C6A6A676661615F5F5C57544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8F9AA4A4A6A6A9A9A6A6A6A6A6A4
+A49E9EA3A3A4A4A4A4A4A3A19E9E9EA1A39E9E9E9E9EA19E9E9E9C9C9C9C9A9A9994949494949292
+8F8C89898989878787898989898989847F7C74664FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF79856C899EABB7BFC4CCD1D1D1D3D3D3D3CCC4BEB1A69C9287818E949A9EA6AE
+B1B9BFC6C6CBCCCCC9C6C6C1BEB7B1AEAEA9A6A4A49E9C9C9A9994928E898987817F7C767472726C
+6C6A6A67676661615F5F5D59554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949CA4A4A6A9A9A9A6A6A6A6A6A6
+A4A1A1A3A4A4A4A4A4A4A4A3A19E9EA1A3A19E9E9EA1A39E9E9E9E9C9C9C9C9A9994949494949292
+928E8989898989878989898989898989857F7C74664FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF76878E7F9AA6B4BEC6C9D1D4D4D4D4D4D4CFC6BFB9AEA49A8F72878F949CA4ABB1
+B7BEC6CCCFCFCFCFCCC8C6C1BEB9B6B1AEAEA9A6A4A39E9C9A9994928E898787847F7974726C6C6C
+6A6A6A67666661615F5F5D5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878C999EA4A4A6A9A9A9A6A6A6A6A6A6
+A4A3A1A3A4A4A4A4A4A4A4A4A39EA1A3A4A3A19E9EA1A3A19E9E9E9C9C9C9C9A9994949494949292
+928F8C89898989898989898C8C8C8C8C89877F7B746657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF74898F928E9EACB9C6CCD1D4D9D9D9D9D4D1CFC6BEB6A99E94897F8992999EA6AEB6
+B9C1C8CFD1D1D1CFCFC9C6C6C1BEB7B6B1B1AEA9A6A49E9C9A9494928C898787817C76746C6A6A6A
+6A6A6766616461615F5F5C5C57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76898E949C9EA4A4A6A9A9A9A9A6A6A6A6A6
+A4A4A3A4A4A4A4A6A4A4A4A4A3A1A1A3A4A4A39E9EA3A3A19E9E9E9E9C9C9C9A9A94949494949492
+92928E8C8C89898989898C8E8F8F8F8F8E89857F79746657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF748E8F928199A6B4C1CCD1D7D9DEDFD9D9D3CFCCC1B9B1A69C9287878E949CA1A6B1B9
+BEC6CCD3D3D3D3D1CFCCC8C6C6BEB9B9B6B1AEABA6A49E9C9A9994928E898787817C76726C6A6666
+66676766616161615F5F5C5C57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF748792949A9E9EA4A4A6A6A6A6A6A6A6A6A6A6
+A4A4A3A4A4A4A4A6A6A4A4A4A4A3A3A3A4A4A3A1A1A3A4A39E9E9E9E9C9C9C9A9A96949494949492
+92928F8E8C8C8989898C8E8F8F92928F8F8C89857F79746A5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF6C7F8E929294929EACBCC9D4D9DCE1DFDCD9D4CFCCC6BEB6AEA3998E7F8992949CA4ABB4BB
+C1C8CFD4D4D4D4D3CFCFCCC8C6C1BEB9B9B6B1ABA6A49E9C9A9994928E8987847F7C76726A676161
+61646661616161615F5F5C5C5957514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79878E92949A9C9EA4A4A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A6A6A6A4A4A4A3A3A4A4A4A4A3A1A3A4A39E9E9E9E9E9C9C9A9A99949494949492
+9292928F8E8E8C8C8C8E8E8F929292928F8E8989877F7C746C61FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF6A76898E9294948794A4B4C4D1D9DFE1E1DFDCD9D3CFC9C4B9B1A69C9489848C929A9EA6AEB7C0
+C6CCD3D7D9D9D9D4D3CFCCCCC6C6C1BEB9B3AEA9A6A49E9C9A9994928E8987817F76726C6A61615F
+5F616161615F61615F5F5C595957544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F85898E92949A9C9EA3A4A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A6A6A6A6A4A4A4A4A3A4A4A4A4A3A3A4A3A19E9E9E9E9E9C9C9C9A99949494949492
+9292928F8F8E8E8E8C8E8F9292929292928F8C898987847F76726C66FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A
+7484898E929494968F9CABBCC9D9DFDFE1E1DFD9D9D1CCC6BEB7AEA49A8F7C878F949CA4A9B1B9C1
+C8CFD4D9D9D9D9D4D4D1CFCCC9C6C1BEB9B3AEA9A6A39E9C9A9494928987847F7C746C6A66615F5C
+5D5F6161615F5F5F5F5D5C595957544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8187898F92949A9C9C9EA4A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A4A3A19E9E9E9E9E9C9C9C9A99949494949492
+929292928F8F8F8F8E8F92929292929292928F8F8E898987857F7C76726C675FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747F
+898E8F92949A996194A4B1C1D1DFDFDFE1DFDCD9D7CFC8C6BEB1A99E94897F8992999EA6ACB6BEC6
+CCD3D9D9D9D9D9D9D4D3CFCFC9C6C1BBB9B1AEA9A6A19C9C9994928F8987817C76726C67615F5C59
+57595D5F5F5F5F5F5F5D5C575757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F85898C929294999A9C9EA3A4A6A6A6A6A4A6A6A6A6
+A6A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9C9C9C9C9A99949494949492
+92929292928F8F8F8F8F92929292949292929292928F8C898989878787817F76726C675FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57796E7276FF
+546E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878F
+929294999A9A9A899CA9B9C6D4DFDFE1E1DFDCD9D4CFC6C1B9AEA69C9279858C949CA1A6AEB9C1C8
+CFD4D9DCDCDEDCD9D7D4D1CCC8C6C1BBB7B1AEA6A49E9C9A9694928E89877F76746C6A66615C5757
+5757575D5F5F5F5D5F5D5C595757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C818789898F9294949A9C9C9EA4A4A4A4A4A4A6A6A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9A99949494949492
+9292929292928F9292929292929494949494949494929292928F8C8C89898987878584817F7F7C54
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6C76848E8F897F7C8489
+897C6C61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878F92
+94949A9A9C9A9A929EB1BECCD7DFDFE1E1DFD9D9D3CCC6BEB6AB9E998E7F878F949CA4A9B4BCC6CC
+D3D9DCDFDFDFDED9D9D4CFCCC8C6C0BBB6B1ABA6A49E9C9A94928F8987817C746C6A6A675F5D5755
+545557575D5F5F5C5D5D5C595757574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F818587898F929494999A9C9EA1A4A4A4A4A4A4A6A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A99949494949292
+9292929292928F9292929294949494949494949494949694949492929292928F8E89898989878785
+7F797471FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A7F817F879294929492878E92
+8E897C6C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74898F9294
+999A9C9C9C9A8794A6B6C1CCD9DFDFE1E1DFD9D9D1C9C1B9AEA69C92878189929A9EA6AEB7BEC8CF
+D4D9DFDFE1E1DFD9D4D3CFCCC6C1C0B9B6B1ABA6A49E9C9994928E89857C726C6C7172726C675F55
+54515557595D5D5C5C5C5C59575757544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F7C7F7F8587898E92929494999A9C9EA1A3A4A4A4A4A6A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9A9A969494949292
+9292929292929292929292949494949499999A9A9A9A9A9A9A9A9A9A9A9994949492929292928F8E
+8987817F7C74716C5555FFFFFFFFFFFFFFFFFFFFFFFF6C74767F878F929494929C9A94999A949A94
+928C8776746CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A898F929499
+9C9C9C9C9C9C8C9CAEB9C4D1DCDFDFE1E1DCD9D4CFC6BEB6ABA3998F7C878E949CA4A9B1BCC4CCD3
+D9DFE1E1E1E1DCD9D4D1CFC9C6C1BEB9B3AEA9A6A19C9A94928F89877F726C727476767676746C61
+55514F5557595C5C5759595C575757544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF6C76797C7F8487898C8F929294999A9C9C9E9EA1A4A4A4A4A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9C9C9A9A999494929292
+929292929292929292929494969999999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99
+9494928E8987817C7C7976747474747476747679797C7F848589929494999C9E9E9C9A9A9C9C9C9A
+94928C877C76715FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A878F92949A9C
+9C9C9C9C9C8192A4B1BBC6D3DFDFE1E1DFDCD9D4CCC4B9B1A69C94897F8792999EA6AEB6BEC6CFD4
+D9E1E1E1DFDFD9D9D3D1CFC8C6C1BBB9B1AEA6A49E9C9A94928E87817474797C7F7F7F7F7F7C766C
+61554F545557575957575959575757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7474797C7F848787898E8F929494999A9C9E9E9EA1A4A4A4A6A6
+A6A6A4A4A4A6A6A6A6A4A6A6A6A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9C9A9A999494929292
+929292949492929292949494999A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9A9A949492928E89898787818181818181848487898E929294949C9C9A9C9EA4A4A19C9C9E9E9E9C
+9A949289877C746A57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A858F92949A9C9C
+9C9C9C9C9C8799A6B1BECCD4E1E1E1E1DFDCD9D1C6BEB6ACA49A8F768189929CA3A9AEB9C1CCD3D9
+DFE1DFDFDFDCD9D4D3CFCCC8C6C1BBB9B1A9A6A49E9C94928F898479797F84898989898787817F76
+6C61544F5555575757575757595757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF6E6C747B7F8184878789898E929294949A9A9C9C9E9EA3A4A4A4A6
+A6A6A4A4A4A6A6A6A4A4A6A6A6A6A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9C9C9A9A9A999494929292
+9292929494929292949494999A9A9A9A9C9C9C9E9E9E9E9E9E9EA1A3A3A4A4A4A3A3A3A3A3A39E9E
+9C9C9C9A9996949292928F8E8C8E8E8E8E8E8E929294949A9CA1A39E9C9EA4A6A4A4A39EA1A39E9E
+9C99948F898179716151FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E92949A9C9C9E
+9E9E9E9C7C8E9CABB7C1CCD9E1E1E1E1DFD9D3CCC4B9B1A69E94897C878F949CA4ABB1BCC6CFD4D9
+DCDFDFDCDCD9D9D4D1CFCCC6C4C0B9B6AEA9A4A19C9A94928E876A7F87898F92929292928C89877F
+746A5F4F4F55555757575757575757554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF6A6A6C72747B7F7F8181858787898C8F929494999A9C9C9C9EA1A4A4A4A4
+A4A4A4A4A4A6A6A6A4A4A4A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9C9C9A9A9A999494949292
+92929494949492929494969A9A9C9C9C9C9C9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A3A39E9E9C9C9C9A9A999494949494949499999A9C9A9A9C9EA4A4A4A3A3A6A6A4A6A6A3A4A4A19E
+9E9C99928E877F746A59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8C92949A9C9C9E9E
+9E9E9C9C8494A1AEB9C6CFD9E1E1E1E1DCD4CFC6BEB7AEA49A92877F89929A9EA6AEB6BEC6D1D4D9
+DCDCDCD9D9D9D9D3CFCFCCC6C1BBB9B1AEA6A49E9C96928F89717F89929499999A9A999494928E87
+7C7161574F4F55555557575757575555544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF6A616AFF5F797974767474797C7F7F7F818184878789898E92929494999A9C9C9E9EA3A4A4A4
+A4A4A4A4A4A4A6A6A4A4A4A4A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9C9A9A9A9A999494949292
+92949494949494949494999A9C9C9C9C9C9E9EA1A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A3A19E9E9C9C9C9C9C9C9A9C9EA1A19E9E9EA4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A1
+9E9E9C949289847C716455FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67848C92949A9C9C9E9E9E
+9E9C9C9A899AA4B1BEC6D3DFE1E1E1DFD9D1CCC4BCB1A69E948C79848C949CA3A9B1B9C1CCCFD3D9
+D9D9D9D9D9D9D4D3CFCCC8C6C0B9B6B1A9A6A39E9A94928E72818F949A9E9E9E9E9E9E9C9C9A948E
+81746A5D514F51555555555757575755544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74
+87847F74747F87877F7C7C7F7F8184817F81818184878787898C8F929294949A9A9C9C9E9EA4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A9A9A99999494949292
+929494949494949494999A9A9C9C9C9C9C9E9EA3A4A4A4A4A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9
+A9A9ABA9A9A6A6A6A6A4A4A4A4A4A49E9C9EA3A4A6A6A4A4A9A6A6A6A9A9A9A6A6A6A6A6A6A6A4A4
+A19E9C9A948F877F746A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72898C92949A9C9C9E9EA3A1
+9E9C9A7C929CA6B6C1CCD4DFE1E1DFD9D3CCC6BEB7AEA49C92897C878F949CA4AEB3BEC4CCCFD3D4
+D9D9D9D9D4D4D4D1CFCCC6C1BEB9B1AEA6A49E9C99928F8984929A9CA4A6A6A6A6A4A4A4A49E9A94
+897C7161554F4F515555555557575755544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A617489
+898789898189898787817F8487878784818181818485878789898E8F929494999A9C9C9E9EA3A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9A9A9A9999969494949492
+949494949494949494999A9C9C9C9E9E9E9EA1A4A4A4A6A6A6A6A6A9A9A9ABABABABABABACAEAEAE
+AEAEAEAEAEAEA9A9A9A6A6A6A9A9A6A49EA3A4A6A6A9A9A6ABA9A6A9A9ABA9A9A6A6A6A6A6A6A4A4
+A39E9E9C999289857F746A59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C7C898E92949A9C9C9E9EA3A39E
+9C9C9A87949CABB9C6CFD9E1DFDFDCD4CFC6C1B9B1A99E998F847F89929A9EA6AEB9BEC6CCCFD1D4
+D9D9D4D4D4D3D3CFCCC6C6BEB9B6B1ABA6A49E9A94928C84929C9EA4A9ABABABABA9A6A6A6A49E9A
+9487766A5C544F4F5155555555575755544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B8789928E94
+9289898E928F8C898989858789898787848184848485878787898C8F92929494999A9C9C9E9EA3A3
+A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A9999949494949492
+9494949494969999999A9A9C9C9E9E9E9E9EA3A4A6A6A6A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEB1B4
+B4B4B6B6B4B4AEAEAEABA6A9ABAEABA9A6A6A6A6A6A9ABAEAEABA9A9ABABABA9A9A6A6A9A6A6A6A4
+A4A39E9E9C948F89817C726657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72747C87898F92949A9C9C9E9EA3A39E9E
+9C9A998999A1AEBCC6D1D9DFDCD9D9D1CCC6BEB6AEA69C948979848C949CA1A9B1B9BEC6CCCFD1D4
+D4D4D4D4D3D1CFCFC8C6C1BEB7B1AEA9A49E9C99948F85929CA3A6ABAEAEAEAEAEAEAEABA9A6A49C
+998E7F7261554F4F4F51555555555755554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87898F949A9A
+94928F9292928F8C898989898989898785848484858487878789898C8F929294949A9C9C9C9E9EA1
+A1A1A1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A999996949494949494
+949494949499999A9A9A9C9C9C9E9EA1A1A1A4A4A6A6A6A6A9A9A9A9ABAEAEAEAEAEB1B1B1B1B6B7
+B7B7B9BCBCB7B6B1B1AEABABAEAEAEAEA9A6A9A9A9ABAEAEAEAEA9A9ABAEABABA9A9A9A9A9A6A6A6
+A4A4A39E9C9A948E87817C716155FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C797F87898F8F9294999A9C9C9E9EA3A3A19E9C
+9C9A7B929AA4B1BECCD3D9DCD9D9D4CFC6C1B9B1A9A39A92857F878F949CA4ABB1B9BEC6CCCFCFD4
+D4D3D3D1CFCFCCCCC6C1BEB9B6B1ABA6A49E9C94928C8F9AA4A6AEB1B6B6B6B6B6B1B1AEAEA9A69E
+9C9487766759544F4F4F51555555555555514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848C8E92999A9A
+999492949292928F8E8E8E8C898989878787858584848487878789898E92929494999A9C9C9E9E9E
+9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A999994949494949494
+949494949699999A9A9A9C9C9C9EA3A3A4A4A4A6A6A6A9A9A9A9ABABAEAEAEAEAEAEB1B6B6B7B9BC
+BCBEBEC1BEBEB9B6B3B1AEAEAEAEAEAEAEABAEABA9AEAEB1AEAEABABAEAEAEABABA9A9A9A9A9A6A6
+A6A4A4A19E9C999289877F766C5F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878787899292929292949A9A9C9C9C9EA3A3A19E9E9C
+9A9485949CA6B6C1C9D1D9D9D9D4D3CCC1BBB3AEA69C94897F7F89929A9EA6AEB6BBC1C6CCCFCFD3
+D3D1CFCFCCCCC8C6C4C0B9B7B1AEA9A49E9C9A948F8E9AA4ABAEB4B9B9B9B9B9B9B7B3B3B1AEA9A4
+9E998E7F715F554F4F4F4F515555555554514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67929292949A9A99
+99949494928F92928F8F8E89898989898787878484848485878787898C8F929294949A9A9C9C9E9E
+9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9A9A99999694949494949494
+9494949499999A9A9A9C9C9C9C9EA3A4A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEB1B1B1B6B9B9B9BEC1
+C1C4C6C6C6C1BEB9B9B3B1B1B1B1AEAEAEAEAEAEABAEB1B1B1AEAEAEAEAEAEABABA9A9ABABA9A9A6
+A6A6A4A49E9C9A949289857F766A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7681898F929494949499999A9C9C9C9C9C9EA1A3A19E9E9C9C
+96928E949EABB9C4C8CFD9D7D4D3CFC6BEB9B1A9A39A928779848C949CA1A6AEB9BBC1C6CCCFCFD1
+CFCFCCCCC8C6C6C6C1BEB9B6AEABA6A49E9C94928794A3AEB1B7B9BEBEBEC1BEBEB9B9B7B3B1AEA6
+A39C9287766757514F4F4F4F5455555554544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF879494999A9A9A99
+94949494928F8F9292928E8989898989898787848481818487878789898E8F929494999A9C9C9C9E
+9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9A9A99999494949494949494
+94949494999A9A9A9A9C9C9C9C9EA3A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEB1B1B1B3B7B9BBBEC1C6
+C6C6C8C8C6C4C1BBBBB9B3B1B1B1AEAEAEB1B1AEAEAEB1B1B1B1AEAEAEAEAEAEABABABABABABA9A9
+A6A6A6A4A19E9C99948F89857F766A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF79848E9299999A9A9A9A9C9C9C9C9C9C9C9C9E9EA19E9E9E9C9A
+9476929A9EAEB9C1C8CFD4D4D3CFCCC1B9B3ABA49C948E7F7F8792999CA4A9B1B9BEC1C8CCCCCFCF
+CCCCC8C6C6C4C1C1BEB9B6B1AEA9A49E9C9A947B949EABB6B9BEC1C6C6C6C6C4C1C0BBB9B9B3B1AB
+A69E94897F6E5F554F4F4F4F4F54555554544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF599494949999999999
+94949492928F8F8F928F8E898989898989878784818181848587878789898E92929494999A9C9C9C
+9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A99949494949494949494
+94949494999A9A9A9A9C9C9C9E9EA1A4A4A6A6A6A6A9A9A9ABAEAEAEAEB1B1B1B1B7B9BEC0C1C6C6
+C9CCCCCCC6C6C1BBBBB9B9B3B3B1AEB1B1B1B1B1AEB1B1B1B1B1AEAEAEAEAEAEAEABAEAEAEAEABA9
+A9A6A6A6A49E9E9A94928F89877F766A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7F878F999A9A9A9C9C9C9C9E9E9E9E9C9C9C9E9E9E9E9E9E9C9A99
+9281929CA4B1B9C1C6CFD4D1CFCFC6BEB7AEA6A19A9287767F89929A9EA4ABB1B9BEC6C6C8C8CCC8
+C6C6C6C4C1C1BEBEBBB7B1AEA9A6A49E9C9992899CA6B3B9BEC1C6C6C6C6C6C6C4C1C0BBB9B7B3AE
+A6A49A8F857666574F4F4F4F4F5154555451514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D8E9294949494949494
+94949292928F8E8F8F8F8E898989898987878784818181818487878789898C8F929294999A9A9C9C
+9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A99949494949494949494
+94949494999A9A9A9A9A9C9C9E9EA1A4A4A6A6A6A6A9A9ABABAEAEAEB1B1B1B1B6B9BBBEC1C6C6C8
+CCCCCCCCC6C6C1BEBBB9B9B9B6B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAB
+A9A9A6A6A4A49E9C9A94928F89847C746C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF727F8C949A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A94
+9289949CA6B1BEC1C6CFD1CFCFCCC1B9B1ABA49C948F8179848C949C9EA6AEB6BBC1C4C6C6C6C6C6
+C6C1C1C1BEBEBBB9B9B3AEABA6A49E9C9A947C9AA6AEB9BEC1C6C9C9C9CCCCC8C6C6C1BEBBB9B6B1
+ABA69C94877C6C5F554F4F4F4F4F5154544F514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929292929492929294
+949492928F8F8E8E8E8E8C898989898787878784817F7F81848587878789898E929294949A9A9C9C
+9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A99949494949494949494
+94949494969A9A9A9A9A9C9C9E9E9EA4A4A4A6A6A9A9A9ABAEAEAEAEB1B1B1B1B6B9BBC0C4C6C8CC
+CFCFCFCFC8C6C1BEBBB9B9B9B7B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+ABA9A9A6A6A4A39E9C9A94928F89847F76726657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF6C748192999A9C9C9C9C9E9EA4A39E9E9E9E9E9E9E9E9E9E9E9E9E9C9A9992
+748F969EA9B1BEC1C6CCCFCCCCC6BEB6AEA69E9A92897C7F8792999CA3A6AEB9BBBEC1C1C1C1C1C1
+C1BEBEBEBBB9B9B7B3B1AEA6A6A39E9C99748FA4ACB7C1C4C6CCCFCCCFCFCFCCC8C6C4C0BEB9B7B1
+AEA9A394897F7461574F4F4F4F4F4F51544F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C898F9292929292929292
+929292928F8E8C8C8C8C898989898787878787847F7F7F7F818485878787898C8F929294999A9A9C
+9C9C9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9A9A969494949494949494
+9494949494999A9A9A9A9C9C9C9E9EA3A4A4A6A6A9A9A9ABAEAEAEAEB1B1B1B3B7B9BEC1C6C6CCCC
+CFCFD1CFC8C6C1BEBBB9B9B9B9B6B1B1B1B1B1B1B1B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEABA9A9A6A6A49E9E9C9C96929289877F79726A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF6C6C747C818E94999A9C9E9E9E9EA3A4A4A3A19EA1A3A39E9E9E9E9E9E9C9C9C9A948F
+81929AA1A9B4BEC1C6CCCCC9C6C1B9B1A9A49C948F87747F89949A9EA4A9B1B7B9BEC1BEBEBEBEBE
+BEBBB9B9B9B7B6B3B1AEA9A6A49E9C9A94879CA9B4BEC6C6CCCFCFCFCFCFCFCFCCC9C6C1BEBBB7B1
+AEA9A69A8F84796A5F554F4F4F4F4F4F51514F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76818C8C8C8C8F8F8E8E8E8F
+9292928F8E8C89898989898989878787878787817F7F7F7F81818487878789898E92929499999A9A
+9C9C9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9A9A949494949294949494
+949494949499999A9A9A9C9C9C9E9EA3A4A4A6A6A6A9ABABAEAEAEB1B1B1B1B3B9B9BEC1C6C8CCCF
+D1D3D3CFC9C6C1BEB9B9B9B9B9B6B3B1B1B1B1B1B1B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEABA9A6A6A4A4A39E9E9C9994928C87847F79746A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+7474767C7C7F84878E92949A9A9C9E9E9EA3A4A4A4A4A3A1A1A3A4A39E9E9E9E9E9C9C9C9A969289
+89949CA4A9B6BEC1C6CCC8C6C6BEB6AEA69E9A92897F79878F949C9EA6AEB1B6B9B9BEBBB9B9B9B9
+B9B9B9B6B6B3B1B1AEABA6A49E9C9C9A8199A6B1BCC4CCCCCFD1D3D3D3D3D3D1CFCCC6C1C1BEB9B1
+AEABA69C92877C7161574F4F4F4F4F4F4F544F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8787878789898C89898E8E
+8F928F8E8C8C89898989898987878787878785817F7F7F7F7F818485878787898C8F929494999A9A
+9C9C9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9C9A9A949494929292949494
+949494949494999A9A9A9C9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEAEB1B1B1B1B6B9BBC0C1C6CCCFCF
+D3D4D4CFCCC6C1BEB9B9B9B9B9B6B3B1B1B1B1B1B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEA9A9A6A6A4A4A4A19E9C9C99928E898987857C76726A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F
+7F8187898F92929292949A9C9C9E9EA3A4A4A4A4A4A4A4A3A3A4A3A19E9E9E9E9C9C9C9A99948E76
+8C949CA4ABB6BEC1C6C8C6C4C1B9B1A9A39C948F87797F8992999C9EA6ABB1B3B6B9B9B9B7B7B7B7
+B7B6B3B1B1B1AEAEA9A6A49E9E9C9A9692A1AEB9C1CCCFD1D1D4D4D4D4D4D4D3D1CFC9C6C1BEB9B1
+AEABA69E94897F766A5F554F4F4F4F4F4F514F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F8181818787878989898C8E
+8E8E8E8C8C8989898989898787878787878785817F7F7F7F7F7F818487878789898E92929496999A
+9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A9A949492929292949494
+94929494949496999A9A9A9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEAEB1B1B1B3B7B9BBC1C6C8CCCFD1
+D4D4D4CFCCC6C1BEB9B9B9B9B9B6B3B3B1B1B1B1B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEABA9A6A6A6A4A4A4A4A19E9C9A94928F8E898987878181817F7C746C576657575F5F5F5F61
+6167676A6C7474767C7F816C4F54666C616A717474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF798489
+8E92929294949494969A9C9E9EA1A4A4A4A4A4A4A4A4A4A3A4A39E9E9E9E9E9C9C9C9C9A94928981
+8F999EA6AEB6BEC1C6C6C4C1BEB4ACA49E9A948C8174818C929A9CA4A6ABB1B1B3B9B7B6B3B3B3B3
+B3B1B1B1AEAEABA9A6A4A39E9C9C99899CABB7BFC8D3D3D4D4D9D9D9D9D9D9D4D4D1CCC6C6BEB9B3
+B1ABA69E9A8E81796C61574F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797C7C7F818787898989898C8E
+8E8E8C8C898989898989878787878787878785817F7F7F7F7F7F818184878789898C8F9294949999
+9A9C9C9E9E9E9E9EA3A4A4A3A3A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A9A99949492929292929494
+9292929494949496999A9A9C9C9E9E9EA4A4A4A6A6A9A9ABAEAEAEB1B1B1B3B9B9BEC1C6C9CFD1D3
+D4D9D4D1CCC6C4C0B9B9B9B9B9B7B6B3B3B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAE
+AEAEAEACA9A9A6A6A6A6A4A4A4A4A49E9C9A94949292928E8989898989898989878989898E898987
+8787817F84878181878987898E928F877C7C7F817C7F814F4F6154FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A79898E92
+949494949699999A9C9EA1A3A4A4A4A4A4A4A4A6A4A4A4A3A19E9E9E9E9E9C9C9C9C9A94928C8487
+929A9EA6AEB7BEC1C4C1BEBEB7AEA69E9C9992897C7C878F949A9EA4A6ABB1B1B3B6B3B1B1B1B1B1
+B1AEAEAEABA9A9A6A4A19E9C9C9A8194A4B7BEC6D1D7D9D9D9DCDCDCD9D9D9D9D9D3CFC8C6C1B9B6
+B1AEA6A39A92877C746A5F544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7674767C7F81878989898989898E
+8E8E8C89898989898987878787878787878584817F7F7F7F7F7F7F818487878789898F9294949499
+9A9C9C9E9E9E9E9EA3A4A4A3A1A3A4A4A49E9E9E9E9E9E9C9C9C9C9C9A9A99949492929292929292
+929292929494949496999A9C9C9C9E9EA3A4A4A6A6A9A9ABAEAEAEB1B1B1B3B9BBBEC1C6CCCFD3D4
+D9D9D4D1CCC8C6C0BBB9B9B9B9B7B6B3B3B3B1B1B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEABA9A9A6A6A6A6A6A4A4A4A4A19E9C9C9A9A9A94949292929292928F8F8F929292949494
+999A9C999994928E9292929294949499948E928C878789898979665F57FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727F89929494
+9499999A9A9C9C9C9EA4A4A4A4A4A4A4A4A6A6A6A6A4A4A19E9E9E9E9C9C9C9C9C9A99928F877989
+949C9EA6AEB9BBBEC1BEBEB9B4ABA49E9C948F85747F8992949C9EA4A6ABAEB1B1B1B1B1AEAEAEAE
+AEAEABA9A9A6A6A4A19E9E9C9A9992A1AEBEC6CFD4D9D9DCDFDFDFDFDFDEDCD9D9D4CFCCC6C1BBB6
+B1AEA6A49C92897F746C61574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74727981818487898C8E8E8E8E8C8C
+8E8E8E89898989898787878787878785858481817F7F7F7F7F7F7F818184878789898E9292949496
+999A9C9E9E9E9E9EA1A4A3A19EA3A4A4A39E9E9E9E9E9C9C9C9C9C9A9A9994949492929292929292
+929292929294949494999A9C9C9C9E9EA3A4A4A6A6A6A9ABAEAEAEB1B1B1B1B7B9BEC1C6CCCFD1D3
+D4D7D4CFCCC6C6C0BBB9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEABA9A9A9A9A6A6A6A6A6A6A4A4A19E9E9E9E9E9E9C9C9A9A9A9996949494999A99999A9C
+9C9C9C9E9E9E9E9C9C9A99999A9A9A9A9C9E9C94928E92928C897F726C66FFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76878F9494969A
+9A9A9C9C9C9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A4A49E9E9E9E9C9C9C9C9C9A999492897F818E
+949CA3A9B1B9B9BEBEBEB9B7AEA69E9C9A92897F76858C92999CA3A4A6ABAEAEB1B1AEAEAEAEABAB
+A9A9A6A6A6A6A4A19E9C9C9C99879CABB9C4CCD1D9D9DCDCDFDFDFDFDFDFDFDCD9D9D3CFC8C1BEB7
+B1AEA6A49C9489817671665D544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727F87878989898F8F8F9292928F8F
+8E8E8E898989898989878787878785858481817F7F7F7F7F7F7F7F7F8184878789898C8F92949494
+999A9C9C9E9E9E9EA1A4A3A19E9EA3A49E9E9C9C9C9C9C9C9C9C9C9A99949494929292928F929292
+929292929292949494999A9C9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEB1B1B1B1B6B9BBC0C6C6CCCFD1
+D3D4D3CFC9C6C1C0BBB9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B1B3B3B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEABABABA9A9A9A9A6A6A6A6A6A4A4A3A3A4A4A4A4A4A4A3A19E9E9C9C9C9C9C9C9C9C9C9E
+9E9E9EA4A1A3A4A4A4A19E9C9E9E9C9C9E9E9E9E9A949994928F8E857F7267FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F7F898F94949A9A9C
+9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A6A6A6A6A6A4A4A39E9E9E9C9C9C9C9C9A9994928C84748792
+999CA4A9B1B7B9B9BCB9B7B1A9A49E9C968F87797C8992949A9EA4A6A6ABAEAEAEAEAEAEABA9A9A9
+A6A6A6A6A4A4A19E9C9C9A9A7C9AA6B4C1C6CCD3D9D9DCDCDFDFDFDFDFDFDFDFDCD9D4D1CCC6BEB9
+B1AEA9A49C94898479726A5F574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C7276848E89898E8F929292929292929292
+8F8E8E8C89898989898787878785848481817F7F7F7F7C7F7F7F7F7F7F8185878989898E92929494
+949A9C9C9E9E9E9E9EA3A19E9E9EA1A19E9E9C9C9C9C9C9C9C9C9A9A99949492929292928F8F9292
+929292929292929494999A9A9C9C9C9EA1A4A4A6A6A6A9A9ABAEAEAEB1B1B1B3B9B9BEC1C6CCCCCF
+CFD1CFCCC8C6C1BEB9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B1B1B3B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEABABABABA9A9A9A9A6A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A39EA3A3
+A3A4A4A4A4A4A4A4A4A4A6A4A4A39E9EA3A39E9E9E9C9C999492928F897C7267FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF6C76767471716A675FFFFFFFFFFFFFFFFFFFFFFFFFFF6C7F878C8F94999A9C9C9E
+9E9E9E9EA1A1A3A4A4A6A6A6A6A6A6A6A6A6A6A6A4A4A19E9E9C9C9C9C9A9A9694928E877F7C8992
+9A9EA4ABB1B6B7B9B9B6B1AEA6A19C9A94898174818C92949C9EA4A6A9A9ABAEAEAEABA9A9A6A6A6
+A6A4A4A4A4A19E9C9C9A99948FA1ACBCC6C6CFD4D9D9DCDEDFE1E1E1E1E1DFDFDFDCD9D3CFC6C1BC
+B3AEA9A49C948C877C726C6159514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F878E9492928E9292949494929494949492
+928F8E8C8989898989878787858484817F7F7F7F7F7C7C7F7F7F7F7F7F8184878989898E8F929494
+94999A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A99949494929292928F8F8F8F92
+929292929292929494969A9A9C9C9C9E9EA4A4A4A6A6A9A9ABAEAEAEB1B1B1B1B7B9BBC1C6C6CCCC
+CFCFCFCCC6C6C1BEB9B9B9B9B9B9B6B3B3B3B3B1B3B3B3B3B3B1B1B1B3B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEABABABABABA9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A19E9E9C9C999494928E877C726AFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF6E7F8487858587877F7C7C76726C6766615F616A727C7F84898E9294999A9C9C9E9E
+9EA1A3A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A19E9C9C9C9C9A9A9694928F898179858C94
+9A9EA6AEB1B3B3B7B6B1AEABA49E9C9492877C7C878F94999CA1A4A6A6A9A9ABABA9A9A6A6A6A6A4
+A4A4A4A39E9E9C9A9A9694879CA9B4BFCCC9CFD4D9D9DCDFDFE1E1E1E1E1E1E1E1DFD9D4D1CCC6BE
+B6B1A9A49E948E877F746C675F554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8987878E94999494929494969694949494949494
+92928F8E8989898989878787848484817F7F7F7F7C7C7C7C7C7F7F7F7F7F8187878989898F929494
+94969A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9C9C9A9C9C9C9C9C9A99949494929292928F8F8E8E8F8F
+92929292929292949494999A9C9C9C9C9EA3A4A4A6A6A9A9A9AEAEAEB1B1B1B1B6B9B9BEC1C6C6C9
+CCCCCCC8C6C1C1BEB9B9B9B9B9B9B6B3B3B3B3B1B3B3B3B3B1B1B1B1B1B3B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A39E9E9C9C9994929289877C746AFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF7284899292929292928F8E8C898987848181818184878789898F92949A9C9C9C9E9EA3
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A39E9C9C9C9C9A9A999492928C877F76878F96
+9C9EA6AEB1B1B1B6B1AEAEA6A39C9A948C84767F8C92949A9EA4A4A6A6A6A9A9A9A6A6A6A6A6A4A4
+A4A39E9E9E9C9C9A94947F94A6AEB9C6CFCFD1D9D9DCDCDFDFE1E1E1E1E4E1E1E1E1DCD9D4CFC6C1
+B9B1ABA69E948E877F746E6A5F57514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494928E949C9A9999949499999999999999969494
+9492928F8C898989898987878484817F7F7F7C7C7C7C7C7C7C7C7F7F7F7F8184878989898E929294
+9494999A9A9C9C9E9E9E9E9E9E9E9C9C9C9C9C9A9A9C9C9C9A9A999494929292928F8F8F8E8E8E8F
+92929292929292949494999A9A9C9C9C9E9EA4A4A6A6A6A9A9ABAEAEAEB1B1B1B3B7B9BBC1C1C6C6
+C8C9CCC6C4C1C0BBB9B9B9B9B9B9B6B3B3B3B3B1B1B3B3B3B1B1B1B1B1B1B3B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A9A6A6A6A6A6A9
+A9A9ABA9A9A9A9A9A6A6A9A6A6A6A6A6A6A6A6A4A4A39E9E9C9A9994928F89877C746A4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF74879294949494949494949292928F8C8989898989898C8F929494999A9C9C9C9E9EA3A4
+A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A49E9E9C9C9C9A9A999494928E89847C7F899299
+9CA3A6ABAEB1B1B1AEAEA9A49E9A9492877F76878F92949C9EA3A4A4A6A6A6A6A6A6A6A6A6A4A4A3
+9E9E9E9E9C9C9A9694928EA1AEB7C1CCCFCFD3D9D9DCDCDFDFE1E1E1E4E6E4E4E4E4DFD9D4D1CCC4
+B9B1AEA6A3998F877F76716A615D554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949A9A9C9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A999694
+949492928F8C8989898987878581817F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F84878789898C8F9292
+949494999A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A999494929292928F8F8E8E8E8E8E
+8F92929292929292949499999A9A9C9C9E9EA1A4A6A6A6A9A9A9ABAEAEAEAEB1B1B6B9B9BEC1C1C6
+C6C6C6C6C1C1BEBBB9B7B7B9B9B9B7B6B3B3B1B1B1B1B3B3B1B1B1B1B1B1B1B3B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A6A9A9A9A9A9A9A6A9
+A9ABABABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A6A4A49E9E9C9C9A9994928C87847C746A4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF5F7F8E9494999A9A9A9A9A9A99949494949292929292929494949499999A9C9C9E9E9EA3A4A4
+A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9C9C9C9A9A999694928F8987817C878C949A
+9EA3A6A9AEAEAEAEABA9A6A19C99928C857B7F899294999C9E9EA4A4A6A6A6A6A6A4A4A4A4A4A39E
+9E9E9C9C9C9A999492879AABB7BEC6D3D3D3D4D9D9DCDCDFE1E1E4E4E6E6E6E6E6E6E1DED9D4CCC6
+BEB6AEA9A49A92877F76726A665F574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F929C9C9C9E9EA39E9C9A9A9C9A9C9C9C9C9C9A9A9A9996
+94949492928F8C89898987878584817F7F7C7C7C7C7C7979797C7C7C7C7F7F8184878989898E9292
+92949494999A9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9994929292928F8F8E8E8E8E8E8E
+8E8F929292928F9294949699999A9A9C9C9E9EA3A4A6A6A6A6A9ABAEAEAEAEAEB1B3B7B9BBBEC1C1
+C6C6C6C4C1C0BEB9B9B7B7B7B9B9B7B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9
+A9ABABABABABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A4A39E9E9C9C9A94948F8987817C746A4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878989878787878481FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF5C878C94999A9C9C9C9E9E9C9C9C9C9A9A9A9999999494949999999A9A9C9C9E9E9E9EA3A4A4A6
+A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A19E9E9E9C9C9A9A9A999494928F8C89857F7F878F949C
+9EA3A6A9AEAEAEABA9A6A49C9A9492897F74878E9294999C9E9EA3A4A4A4A4A4A4A4A4A4A4A49E9E
+9C9C9C9C9A9994949292A4B7BEC6CCD4D4D4D4D9D9DCDEDFE1E1E4E6E6E7E7E6E6E7E4DFD9D9D1C6
+BEB7B1ABA69C92877F76726C676159554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6C6A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F899A9C9C9C9EA3A39E9E9C9C9C9C9C9C9C9C9C9C9A9A9A99
+9694949492928F8C898989878784817F7F7C7C7C797979797676797C7C7C7F7F81858789898E9292
+9294949494999A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9999949292928F8F8E8E8E8E8E8E8E
+8E8E8F92928F8F929294949494999A9A9C9C9E9EA4A6A6A6A6A9A9ABABAEAEAEB1B1B3B9B9BBBEC1
+C1C1C1C1C0BEBEB9B9B7B6B7B7B7B6B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9A9A9A9A9
+ABABABABABABABABABABABA9A9A9A9A6A6A6A6A6A6A4A4A19E9C9C9A9994928E89877F7C746C61FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76818C8F9292928F8E8C8989877F7CFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C
+81898E929A9C9C9E9EA1A3A4A19E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9C9C9C9E9EA3A3A4A4A4A6A6
+A6A6A6A6A6A6A6A6A4A4A4A4A4A4A3A3A19E9E9C9C9C9C9A9A99949492928E8987847F858992999C
+9EA3A4A9A9ABABA9A6A49E9C94928E877C7F898F9294999C9C9EA1A4A4A4A4A4A3A1A3A4A4A19E9C
+9C9C9C9A99949492899CAEBEC6CFD4D9D9D9D9D9D9DCDFDFE1E4E6E6E7E7E7E7E7E7E6E1DFD9D3CC
+C1B9B1AEA69E94898179726C67615D574F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF6C72747676746A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF6C89949E9E9E9E9EA4A39E9E9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+999694949492928E8C8989878784817F7F7C7C7C79797676767676797C7C7C7F7F848787898C8F92
+929294949494999A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A999994949492928F8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F929494949494999A9A9C9C9EA1A4A6A6A6A6A9A9A9ABABAEAEB1B3B6B9B9BBC0
+C0C1C1C1BEBEBBB9B9B7B6B6B6B6B6B3B3B3B1B1B1B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9A9
+ABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A49E9E9C9C9A9994928C87847F7C76716A
+61FFFFFFFFFFFFFFFFFFFFFFFFFFFF747C848E949499999994949492928F89847F7C74FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F7F7C797976726A665FFFFFFFFFFFFFFFFFFFFF597F85
+8992949A9C9EA1A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9EA1A4A4A4A4A4A4A6A6
+A6A6A6A6A6A6A6A4A4A4A4A3A3A1A19E9E9E9C9C9C9A9A9999949494928F8989878481878C929A9C
+9EA3A4A9A9A9A9A6A49E9C99948F898174858C929494999C9C9E9EA1A1A3A39E9E9E9EA1A19E9C9C
+9C9C9C9A9494927C99A6B9C1C9D1D9D9D9D9D9D9DCDCDFDFE1E4E6E7E7E7ECECECECE7E4DFDCD4CC
+C4B9B3AEA6A49A8F877B726C67615F57544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7274767C7C767472665DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF89949EA4A39E9EA3A3A19E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9996949494928F8E8C89898785817F7F7F7C7C7976767676767676797C7C7F7F81848789898E92
+929292949494949999999A9A9A9A9C9A9A9A9A9A9A9A9A9A999694949492928F8E8E8E8E8E8E8E8E
+8E8C8E8E8F8F8E8E92929294949494999A9A9C9C9EA3A4A6A6A6A6A6A9A9A9ABAEB1B1B3B7B9BBBE
+BEBEBEC0BEBBB9B9B9B6B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1AEAEAEB1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEABABA9A9ABABABABABABABABABABABABABABABABABABABABABABABABABABABA9
+ABABABABABABABABABABABABABABA9A6A6A6A6A6A6A6A4A4A19E9E9C9C9A94928F898787817C7974
+6C6A61FFFFFFFFFFFFFFFFFFFF6A79878C929A9C9C9E9E9E9C9C9C9A9A96928E8987817C76FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF767C8187898787878987847F7C74726C6A6A5757767C7F87898E
+92999C9E9E9EA3A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9E9E9EA1A4A4A4A4A4A4A6A6A6
+A6A6A6A6A6A6A6A4A4A3A3A19E9E9E9E9E9C9C9A9A9A9999949494928F8C8989878484898F949A9C
+9EA1A4A6A6A6A6A49E9C9A94928C877C7F878E9294999A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9A9A9494928F8EA4B1C1C4CCD1D9D9D9D9D9D9D9DCDFDFE1E4E6E7E7ECECECECECECE6E1DCD9CF
+C6BEB7B1A9A49C92897F726C67615F57554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF72747C7C79767674726C6159FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF89949A9EA3A3A4A3A4A39E9E9E9E9E9C9C9C9C9E9E9C9C9C9C9C9A
+9A9A9996949492928F8E8C89878784817F7F7C7C7976767676767476797C7C7C7F7F818587898C8F
+92929292949494949496999A9A9A9A9A9A9A9A9A9A9A9A9996949494949292928E8E8E8E8E8E8E8E
+8C898C8E8F8E8E8E8F929292929294949A9A9A9C9C9EA4A4A4A6A6A6A6A6A9ABAEAEB1B1B3B7B9BB
+BBBBBEBEBBB9B9B9B7B6B3B6B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABABA9A9A9A9A9A9ABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9C9C9A9994928F8C8987817F7C
+7976746C6A67676666676C727C858E94999C9E9EA1A4A4A4A4A4A4A19E9E9C9994928C87847C7672
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7C8187898E9292928F8C8C89878484817F7F7F7F7F8487898F9494
+999C9C9E9EA1A3A4A4A4A4A4A6A4A4A3A19E9E9EA19E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6
+A6A6A6A6A6A6A6A4A4A39E9E9E9E9E9E9C9C9A9A9A999694949492928E8989878785878992949C9C
+9EA1A4A4A4A4A49E9C9A94928F89817481898F9494999A9A9C9C9C9E9E9E9E9C9C9C9C9E9C9C9C9A
+9A9A969492927C9CABB7C6C6CCD3D9D9D9D9D9D9D9DCDFDFE1E4E6E7E7ECECECECECECE6E1DFD9D1
+C6BEB9B1ACA69E948C81766C67615F5957544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF6C74767C7976767676747272675F57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF8F949C9E9EA1A3A3A3A19E9E9E9E9E9E9C9C9C9E9E9E9C9C9C9C9C
+9A9A9A99969494928F8F8E8C898785817F7F7C7C797676767474747676797C7C7C7F7F848787898E
+8F929292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9994949494949292928F8E8E8E8E8E8E8C
+8C89898C8E8E8E8E8E8F929292929494999A9A9A9C9E9EA3A4A4A6A6A6A6A6A9ABAEAEB1B1B6B9B9
+B9BBBBBBBBB9B9B9B7B6B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABA9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9E9C9C9A9494928F8C89878781
+7F7F7C7C7C7C7C7C7F7F7F87899294999C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A39E9C99948F89847F
+79726CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF81878C9292929494949292928F89898989898989898C8F929494999A
+9A9C9E9E9EA1A4A4A6A6A6A6A6A6A4A4A4A3A4A4A4A4A39E9E9EA1A3A3A4A4A4A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A4A4A4A19E9E9E9E9E9C9C9C9A99999494949492928F8E8989878787898E92999C9C
+9CA1A4A4A4A49E9C9C9994928C877C7F878C929494999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A999492927294A1AEBEC6C6CCD3D4D7D7D7D9D9D9DCDFDFE1E4E7E7ECECECECECECECE7E4DFD9D3
+CCC1B9B3AEA6A1998F877B6C67615F5C57554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF676A6A7276797676747674747474726C665F54FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF8992999E9E9E9E9EA1A39E9E9E9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C
+9C9A9A9A99969492928F8F8E898987847F7F7F7C7C767674747474747676797C7C7F7F818587898C
+8F8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A999494949494949292928F8E8E8E8E8E8E
+898989898C8E8E8E8E8E8F8F8F92929494999A9A9C9C9E9EA3A4A6A6A6A6A6A9A9AEAEAEB1B3B6B9
+B9B9B9B9B9B9B9B7B6B6B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABAEAEABABABABABAEAE
+AEAEAEAEABABA9A9A9A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A19E9E9C9C9C9A9494928F8C898989
+8785848481818484858787899294999A9C9EA3A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A39E9C96928C
+87817C746E67FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7F8E9292949494949494949494949494929292929292929494999A9C9C
+9C9EA1A1A1A3A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A4A4A4A4A39E9E9E9E9C9C9C9C9A9A99949494949292928E8C89898787878C8F949A9A9C
+9C9EA3A19E9E9C9C9A94928E89817484898E92949496999A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A99
+999492928C8C9EA9B4C4C8C8CCD3D4D4D4D4D9D9D9DCDFDFE1E4E7E7ECECECECECECECE7E4E1DCD4
+CCC6BBB7B1A9A49C92897F7267615F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF6A6C727272727274747474747472727474747472716A615CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF818F949A9E9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9A9A9A99949492928F8F8C898787817F7F7C7C797674747474747476797C7C7C7F7F84878789
+8E8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292928F8F8E8E8E8E
+89898989898C8E8E8E8E8E8E8F9292949494999A9C9C9C9E9EA4A4A4A6A6A6A9A9ABAEAEB1B1B3B6
+B9B9B9B9B9B9B7B6B6B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A9A9A9A9A9AB
+AEAEAEABABA9A9A9A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A6A6A6A6A6A6A6A4A4A19E9E9C9C9C9A9A949492928F8E8C
+8989898989898989898E8F92949A9C9C9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A49E9E9C9C
+94928987817C726A61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF677F92929494949499999A9A9A9A9999969494949494949494999A9C9C9E9E
+9E9EA3A3A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A4A19E9E9C9C9C9C9C9C9A99949494929292928F8E8C89898787898E92949A9A9C
+9C9E9E9E9E9C9C9A94928F89877C7F87898F9294949499999A9A9A9A9A9C9C9C9A9A9A9A9A999996
+9494928E8799A6AEBCC6CCC9CFD4D4D4D4D4D9D9D9DCDFDFE1E4E7ECECECECECECECECECE6E1DFD9
+CFC6BEB9B1ABA69C948F87766A615F5D5757554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72
+767F7C7C7C7C7C767474727272726E6C7272727472726C6A6157FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF6C8992949C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9C9A9A9A99949292928F8E898987847F7F7C7C79767474747474747676797C7C7F7F81858789
+8C8E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9999949494949492929292928F8E8E8E8E
+8C89898989898C8E8E8E8E8E8F9292929494999A9A9C9C9E9EA1A4A4A4A6A6A6A9A9ABAEAEB1B1B3
+B6B7B9B9B9B7B6B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABA9A9A9A9A9A9A9A6A6A6A9
+A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9C9C9C9C9A99949494929292
+8F8E8E8F8F8F9292929494999A9C9E9EA4A4A4A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A4A4A19E9E
+9C9C9A99949289857F766C675FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF74899294949499999A9A9A9C9C9C9C9C9A9A9A999A9A9A9A9A9A9C9C9E9EA3A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A6A6A6A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9E9C9C9C9C9C9A9A99949492929292928F8E8C8C8987898C8F92999A9A9A
+9C9E9E9C9C9C9A9994928E8981748587898F929494949699999999999A9A9A9A9A9A9A9999969494
+94928F7C92A4AEB7BFCCCCCCCFD4D4D4D4D4D9D9D9DCDFDFE1E4E7ECECECECEEEEECECECE6E1DFD9
+D1C8C1B9B3AEA69E9A92897F6C615F5C575755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C81
+8787878785847F7C79747472716C6C6A6C6C71727272716C675F54FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF7F8E92949A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9C9A9A9A94949292928F8C898787817F7C7C7C76767474747474747676797C7F7F81848787
+898E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A99969494949292929292928F8E8E8E
+8C8989898989898C8E8E8E8E8E9292929494969A9A9C9C9C9E9EA3A4A4A6A6A6A9A9ABAEAEAEB1B1
+B3B6B6B7B7B6B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABABABA9A9A9A9A9A6A6A6A6A6A6A6A6
+A6A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9ABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9E9C9C9C9C9A999994949494
+929292929292929494969A9C9C9E9EA4A4A4A6A6A6A6A9A9A9A9A9A9A9A9A6A6A6A6A6A6A4A4A4A1
+9E9C9C9C9A99949492928E877F79726C61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF5D7F878E9494999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9EA3A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A3A39E9E9C9C9C9C9C9A9A99949494929292928F8F8E8E898989898E9294999A9A9A
+9C9C9C9C9C9A9A94928F89877C7F8787898F9292949494999694949499999A9A9999999694949494
+928F89899CAEB6BEC6CFCFCFCFD3D3D3D4D4D4D9D9DCDFDFE1E4E7ECECECEEEEEEEEECECE7E4E1D9
+D3CCC4BBB6AEA6A39C948E8774665D57575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848789
+8C8C89898987847F7C7974726E6C6A676A6A6C72727272716A6157FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7C898C9294949A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA39E9E9E9E9E
+9C9C9C9C9C9A9A9994949292928E89898785817F7C7C79767474747474747476767C7C7F7F818587
+898E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949492929292928F8E8E8E
+8E898989898989898C8E8E8E8E8F9292949494999A9C9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEAEAEB1
+B1B3B3B6B6B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEABABABABA9A9A9A9A9A6A6A6A6A6A6A6A4A4A6
+A6A6A6A6A6A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A19E9E9E9C9C9C9C9A9A9A999994
+94949494949494969A9A9C9E9E9EA3A4A4A6A6A6A6A9A9A9ABABABA9A9A9A9A9A9A9A6A6A6A6A6A4
+A39E9E9C9C9C9A9A94949492928F8C89877F746C675FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF5C7F8487899294999A9C9C9C9C9C9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9EA3A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A4A4A3A3A1A19E9E9E9C9C9C9A9A9A9A99949492929292928F8F8F8E8989898E8F929499999A9A
+9A9C9C9C9A999494928C898176848789898E92929494949494949494949494999494949494949292
+8F8C8794A6B6BEC4CCD1CFCFCFD3D3D3D3D4D4D9D9DCDFDFE1E6E7ECECECEEF1F1EEEEECE7E6E1DF
+D4CFC4BBB3AEA6A49C9492897F6C5F57575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF879294
+949292928E898785817C76746C6A6766676A6C6C727272726C675F54FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF768789898E929494999A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9EA1A3A19E9E9E9E
+9E9C9C9C9C9C9A9A9994949292928E8C8987847F7C7C7976747474747474747476767C7F7F818487
+898C8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492929292928F8E8E8E
+8E89898989898989898C8E8E8E8F9292949494999A9A9C9C9E9EA1A4A4A4A6A6A9A9ABAEAEAEAEB1
+B1B1B1B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEABABA9A9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9C9C9C9A9A9A
+9999969999999A9A9C9C9E9E9EA3A4A6A6A6A6A6A6A9A9ABABABABABABABABA9A9A9A9A9A6A6A6A6
+A4A4A39E9E9E9C9C9C9A9A969494928F8E8C89898787857F766C5757FFFFFFFFFFFFFFFFFFFFFFFF
+FF5C7C7F8187898F9294999A9C9C9C9C9C9E9E9E9EA1A3A19E9E9E9E9E9E9EA1A1A3A3A4A4A4A4A4
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A4A4A3A19E9E9E9E9E9C9C9C9A9A9A99999494949292929292928F8F8C89898C8F9292949999999A
+9A9A9A9A999494928F89877C7F848789898E92929494949494949492949494949494949292928F8E
+897294A4B1B9BEC6CFCFD1D1D1D1D1D3D3D4D4D9D9DCDFE1E1E6E7ECECEEF1F2F2F1EEECECE6E1DF
+D4CCC1BBB3AEA6A49E99928E8974615757555554514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848C949A
+99999994928E8987847F7C74716A66616166676C6E727272726A6659FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF81878989898F929294999A9A9C9C9C9E9E9E9E9E9E9E9E9E9EA3A4A3A19E9E9E
+9E9E9E9E9E9C9C9C9A9994949292928E898785817F7C7976767474747474747474767C7C7F818487
+898C8E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A96949492929292928F8E8E8E
+8C8C89898989898989898C8E8E8F9292929494999A9A9C9C9E9E9EA3A4A4A6A6A6A9ABAEAEAEAEAE
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABABA9A9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A3A3A3
+A4A4A4A3A39E9E9E9EA1A3A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9A
+9A9A9A9A9A9C9C9C9E9EA3A4A4A4A6A6A6A6A9A9A9A9A9ABABABABABABABABABABABABA9A9A9A9A9
+A6A6A4A4A3A3A19E9E9E9C9C9A9994949492928F8C89898989878784817F7F7C7C7C797676797B7C
+7C818787898F929494999A9C9C9C9C9C9E9EA3A4A4A4A4A4A39EA1A1A3A3A4A4A4A4A4A4A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A39E9E9E9E9E9E9E9C9C9C9A999994949494929292929292928F8E8989898E8F9292949499999A
+9A9A9A999494928F8C877F7981858989898E9292929494949292929292929294929292928F8E8C89
+87929EABB7B9BEC6CFCFCFCFCFD1D1D1D1D3D4D9D9DCDFE1E1E6E7ECECEEF1F2F2F1EEEEECE6E1DC
+D4CCC1BBB3AEA6A49E9A9492897F6C5C55555554544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C87929A9C
+9C9C9C9A94928E8987847F76726A61615F61666A6C727272726C6A6154FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7C81878789898E8F929494969A9A9C9C9E9E9E9E9E9E9E9E9EA1A3A4A4A3A19E9E
+9E9E9E9E9E9E9C9C9C9A9994949292928E8987847F7F7C7676747474747474747476767C7F818487
+87898E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494929292928F8F8E8E8C
+8C898989898989898989898C8E8E8F9292949496999A9A9C9C9E9EA3A4A4A6A6A6A9A9ABABAEAEAE
+AEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABABA9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A3A19E9EA1
+A1A3A19E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9EA3A4A4A6A6A6A6A6A9A9A9A9A9ABABABABABABABABABABABABABABABABABAB
+A9A6A6A6A6A4A4A4A4A4A39E9E9C9C9A9A9A9994949292928F8E8989898987878787848184848787
+898C8F92929494999A9A9C9C9C9C9C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A39E9E9E9E9E9E9C9C9C9C9A9A999494949494929292929292928F8C89898E8F9292949494969999
+9A9999949494928E89857C7C81878989898E9292929492929292929292929292928F8E8E89898987
+7F9AA4AEB9B9C1C6CFCFCFCFCFCFCFCFD1D3D4D9D9DCDFE1E1E6E7ECEEF1F2F2F2F2F1EEECE6E1D9
+D4CCC1B9B3AEA6A49E9C96928E89766157545554514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848E999C9E
+9E9E9E9C9A94928E89877F7C746C665F5D5F61676C6C727272726C6759FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF6A7F8184878789898F9292949494999A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A3A19E
+9E9EA1A1A19E9E9C9C9C9A9994949492928C8985817F7C7976747474747474747474767C7C7F8185
+87898E8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8F8E8E8E8C
+8989898989898989898989898C8E8E8F9292949499999A9C9C9E9EA1A4A4A4A6A6A6A9ABABABABAE
+AEAEAEB1B1B1B1B1AEAEB1B1B1AEAEAEAEABA9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9E9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A3A3A19E9E9E9E9E9E9E9E9E9E
+9C9C9E9E9E9E9E9E9EA4A4A4A6A6A6A6A9A9A9A9A9A9ABABABABABABABABABABABABABABABABABAB
+A9A9A6A6A6A6A6A6A6A6A6A4A4A39E9E9E9E9C9C9A9A9994949492929292928F8F8F8E8E8F8F9292
+929294949494999A9C9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A3A3A1
+9E9E9E9E9E9C9C9C9C9C9C9A99949494949292929292929292928E8C8C8C8F929292949494949999
+9994949494928F89877F767F87898989898F92929292929292928F8F8F8F8F8E8E8C89898987876A
+949CABB6B9B9C1C8CCCCCCCFCFCFCFCFCFD3D4D9D9DCDFE1E1E6E7ECEEF1F2F2F2F2EEECE7E4DFD9
+D3C8C1B9B3AEA9A49E9E9A94928E816C5D5454554F514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949C9EA3
+A4A4A19E9C9A94928E89857F7672675F5C575F616A6C727272726E6A6154FFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7C7F7F81848787898E8F92949494949A9C9C9C9E9E9E9E9E9EA1A3A4A4A4A4A4A3A3
+A3A3A3A3A4A19E9E9C9C9C9A99949494928F8987847F7F7C7674747474747474747476797C7F8184
+8789898F9292929494949494969A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949492928F8E8E8E8E8C
+898989898989898989898989898C8E8E8F9294949496999A9C9C9EA1A4A4A4A4A6A6A9A9A9ABABAE
+AEAEAEAEAEB1AEAEAEAEAEB1B1AEAEAEAEABA9A9A6A6A6A6A6A4A4A4A4A4A3A39E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A6A4A4A4A4A3A3A1A19E9E9E9E9E9E9E
+9E9E9E9EA19E9E9EA3A4A4A4A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABABAB
+A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A39E9E9C9C9C9A9A9A9A9A9A9A9994949494949494
+949499999A9A9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A19E9E9E
+9E9E9C9C9C9C9C9C9C9C9A9A999494929292929292929292928F8E8E8C8F92929292949494949499
+9494949492928C8984797C81878787898C8F8F929292928F8F8F8E8E8E8C8C898989878785817F8F
+9CA4AEB9BEBEC1C8CCCCCCCCCFCFCFCFCFD3D4D9D9DCDFE1E1E6E9ECEEF1F2F2F2F1EEECE7E1DFD9
+D1C8C1B9B1AEA9A49E9E9C969492897666574F51514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85929A9EA4A6
+A6A6A4A4A19C9C96928E89817C746A5F5C57595F666A6E727474726C675CFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF767C7C7C7C7F858789898E9292949494999A9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A19E9E9C9C9C9A99949492928C8785817F7C7976747474747474747476767C7C7F81
+8787898E8F929294949494949499999A9A9A9A9A9A999A9A9A9A9999949494949292928F8E8E8E8C
+89898989898989898989898989898C8E8E9292949494969A9A9C9C9EA3A4A4A4A4A6A6A6A9A9A9AB
+ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9E9E
+9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABABA9A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A3A1A19E9E9E9E
+9E9EA1A3A4A4A3A1A4A4A4A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABABAB
+A9A9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9A9A999A9994969999
+9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A19E9E9E9C
+9C9C9C9C9C9C9C9C9A9A9A99949494929292929292929292928E8E8E8E8F92929294949494949494
+94949492928E89877F797F85878789898C8E8F928F8F8F8E8E8E8C8C89898989898787817F7F8799
+A4ABB6C0BEBEC1C8C8C9CCCCCCCFCFCFCFD3D4D7D9DCDFE1E4E6ECECEEF1F2F2F2F1EEECE6E1DED7
+CFC6C1B9B1AEA6A4A19E9C9A949292816C5D544F514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF798E949EA4A6A9
+ABA9A6A6A4A19E9C99928C877F766C615957575C616A6C727272726C6A6154FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF74767674767C7F818787898C8F92929494949A9C9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A19E9E9C9C9C9A999494928E8987847F7F7C7676747474747474747476797C7F7F
+848789898E92929294949494949499999A9A9A9A9999999A9A9A9996949494949292928F8E8E8E8E
+8989898989898989898987898989898C8E8F9292949494999A9A9C9E9EA3A4A4A4A6A6A6A6A6A9A9
+A9ABABAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A9A9A6A6A6A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9C9C
+9C9C9C9C9A9C9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A3A3A19E9E
+9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABA9A9A9A9A9A9A9A9A9A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9A9A9A9A9A9A9C9C
+9C9C9C9E9E9E9E9E9E9E9E9E9E9EA1A1A3A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9C9C
+9C9C9C9C9C9C9A9A9A9A99999494929292929292929292928F8E8E8E8F9292929292949494949494
+949492928F898781767F8187878789898C8E8E8F8E8E8E8E8E8C8989898989898784817F7C81929E
+A9B1B9C1C1C1C1C6C8C8C8C8CCCCCCCFCFD1D4D4D9DCDFE1E4E7ECECEEF2F2F2F2F1EEECE6E1DCD4
+CFC6C1B9B1AEA6A4A39E9E9C9A94928E7664574F4F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949CA4A6ABAE
+AEAEA9A9A6A4A19E9C949289847C74675C5755575F666A6C727272716A6759FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF6A74727174767C7F81858789898E9292949494999A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A39E9C9C9C9C9A9994928F898785817F7C7976747474747474747676797C7C7F
+818787898C8F9292929294949494949999999A999994969999999994949494949292928F8F8E8E8E
+8C898989898989898987878789898989898E8F929292949496999A9C9E9EA1A4A4A4A4A6A6A6A6A6
+A6A9A9ABABAEAEAEABABABAEAEAEAEABABA9A9A6A6A6A6A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A3A3A1
+A1A1A3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9C9C9C9C
+9C9C9C9C9A9A9A9A999996949494929292929292929292928F8E8E8E8F9292929292929494949494
+949292928C89847C7C7F818787898989898C8E8E8E8E8E8E8E89898989878787847F7F7C7F8E9AA6
+AEB9C1C6C1C1C1C6C6C6C6C8C9CCCCCCCFD1D4D4D9DCDFE1E4E7ECECEEF2F2F2F2F1EEECE4DFD9D4
+CFC6BEB6AEABA6A4A49E9E9E9C9A949284715C544F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C929AA3A6AEAEB1
+B1AEAEAEA9A6A4A19E9A9492897F766C5F5754575C616A6C717272726C6A6155FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF6C6A6C727476797C7C7F848787898C8F92929494999A9C9C9C9E9EA1A3A4A4A4A4A4A4A4A4A4
+A4A6A6A6A6A4A4A4A49E9E9C9C9C9A9994928F898987817F7F7C76767474747474767676767C7C7F
+7F848789898E929292929294949494949499999996949494999994949494949292929292928F8E8E
+8C89898989898989898787878787898989898C8E8F9292929494999A9C9C9E9EA1A4A4A4A4A6A6A4
+A6A6A6A9A9ABABABA9A9A9ABABA9A9A9A9A9A9A6A6A6A6A4A4A4A19E9E9E9C9C9C9C9A9C9C9C9C9C
+9C9C9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABAB
+ABABABA9ABABABABABABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABA9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A39E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9EA1A4A4A3A3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A1A19E9E9C9C9C9C9C
+9C9A9A9A9A9A99999694949494929292929292929292928F8E8E8E8E8F9292929292929294949492
+9292928E89877F767F7F858789898989898C8E8E8E8E8E8E8C898987878785817F7F7C76899AA4AB
+B4B9C1C4C6C6C6C6C6C6C6C6C8CCCCCCCFD1D3D4D9DCDFE1E4E7ECECF1F2F2F2F1EEECE7E4DFD9D3
+CCC4BCB4AEABA6A4A49E9EA19E9C99948E7C67574F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949EA6AEB1B6B6
+B6B1B1AEAEA9A6A4A39E9A948F877F7467575455575F666A6C7272726C6A6759FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A
+6A6A6C6E7274767C7C7C7C7F84878789898E92929494999A9A9C9C9E9EA3A4A4A4A4A4A4A4A4A4A4
+A6A6A6A6A6A6A4A4A4A39E9E9C9C9C9A9492928C8987847F7F7C7976767474747476767676797C7C
+7F818787898C8F929292929294949494949499999494949494969494949494929292929292928F8F
+8C8989898989898989878787878787878989898C8E8F8F92929494999A9C9C9C9E9EA1A4A4A4A4A4
+A4A6A6A6A6A9ABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A4A4A4A39E9E9E9C9C9C9C9A9A9A9A9A9A9C
+9C9C9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABAB
+ABABA9A9A9A9A9ABABABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABA9A9A9ABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9EA1A3A1A19EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E9E9E9C9C9C9C9A9A
+9A9A9A99999994949494949492929292929292929292928F8E8E8E8E8F8F92929292929292949292
+92928F8987817C7C7F84878789898989898E8E8E8E8E8C8C898989878784817F7F7C6E89949EA9AB
+B4B9C1C1C1C4C4C6C6C6C6C6C8C8CCCCCFD1D3D4D9DCDFE1E4E7ECECF1F2F2F2F1EEECE7E1DFD9CF
+C6C1B9B1AEA9A6A4A49EA1A3A19C9A949285725F544F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76929CA4ABB1B6B9B9
+B9B6B3B1AEAEA9A6A6A49C9A948C847C6C5F554F555C61676A6E7272716A6A5F55FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C72727272
+72727274767C7C7C7C7C7C7F81878787898C92929494999A9A9C9C9E9EA1A4A4A4A4A4A4A4A4A4A4
+A6A6A6A6A6A6A6A4A4A39E9E9C9C9C9A9494928E8987847F7F7C7C79767474747476767676797C7C
+7F7F848789898E8F8F9292929292949494949494949494949494949494949292929292929292928F
+8E89898989898989898787878787878787878789898C8C8E8F92929494999A9C9C9C9C9EA3A3A3A1
+A3A4A4A4A4A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A19E9E9E9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9A9ABABABABABAB
+ABABA9A9A9A9A9A9A9ABABABABABABA9A9A6A6A6A6A4A4A6A6A4A4A4A3A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A
+9A999996949494949494929292929292929292929292928E8E8E8E8E8E8F8F929292929292929292
+8F8F8C89847F797C81878789898989898C8E8E8E898989898989878785817F7F7C7484929CA4A9AE
+B6BBC1C1C1C1C1C4C6C6C6C6C6C8C9CCCFCFD3D4D9DCDFE1E4E7ECECF1F2F2F2F1EEECE6E1D9D3CC
+C4BEB7AEAEA9A6A4A4A1A3A4A39C9A94948E7C6A574F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949EA9B1B6B9BEBB
+B9B9B7B3B1B1AEA9A6A6A19C9A9489817667575455575F646A6C7271716C6A6759FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6C6C6C74767674747474
+747676797C7C7C7C7C7C7F7F8185878789898F92949496999A9C9C9E9EA1A3A4A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A4A4A39E9E9E9C9C9A9694928E898787817F7C7C7C767674747474767676797C7C
+7F7F81878989898E8F9292929292929494949494949494949494949494949492929292929292928F
+8E8C89898989898989898787858787878787878789898989898E8F9294949499999A9A9C9C9E9E9E
+9E9E9E9EA3A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A3A3A19E9E9E9E9C9C9C9C9A9A99999999999A
+9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A3A3A4A4A4A4A6A6A6A6A6A6A9A9A9A9A9ABABABAB
+ABABA9A9A9A9A9A9A9A9A9A9ABABABA9A9A6A6A6A6A4A4A4A4A4A4A4A3A3A3A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A39E9E9E9E9EA1A1A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9999
+999494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8F8F929292929292928F
+8E8C89877F767C7F858787898989898C8E8E8E8C8989898987878785847F7C79748492969EA9AEAE
+B6BEC0C1C1C1C1C4C4C4C6C6C6C6C8CCCFCFD3D4D9DCDFE1E6E7ECECF1F2F2F2F1EEECE6DFD9CFC6
+C1B9B6AEABA9A6A4A4A3A4A4A19E9A99949284725F544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9AA4AEB3B9BEC1C0
+BEBBB9B9B6B1B1AEABA9A6A39C9A92897F715F554F555C61676A6C71716C6C6A5F55FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72727274767676767676747679
+7C7C7C7C7C7C7C7C7C7F7F7F8184878787898E92929494999A9C9C9E9E9EA1A3A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A4A4A19E9E9C9C9A9994928F898987817F7F7C7C797676747474767676767C7C
+7F7F81858789898C8E8F92929292929494949494949494949494949494949492929292929292928F
+8E8C8989898989898989878787878587878585878789898989898C8E92929494949494999A9C9C9C
+9C9C9C9C9E9E9E9EA3A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9C9C9C9C9C9C9A9A9A999494969999
+999999999A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9EA1A1A3A4A4A6A6A6A6A6A6A6A9A6A6A9A9A9ABAB
+ABA9A9A9A6A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A4A4A4A4A4A4A4A3A19EA1A1A3A3A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A3A1A1A3A3A3A3A4A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A3A3A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A3A3A3A3A3A1A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9999999494
+949494949494929292929292929292929292929292928F8E8E8E8E8E8E8E8E8F8F8F929292928F8E
+8C898781767C7F84878789898989898E8E8E8C8989878787878785817F7C79747F8E969CA4AEAEB1
+B6BEBEC1C1C1C1C1C1C4C4C6C6C6C8CCCFCFD3D4D9DCDFE1E6E7ECECF1F2F2F2F1EEE7E1DCD4CCC6
+BEB9B1AEA9A6A6A4A3A4A4A49E9E9C9A9492897666594F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85949EA9B1B9BBC1C1C1
+C0BEBEB9B9B7B1B1AEABA9A49E9C9992897C6A594F54575F616A6C6E6E6E6C6A6759FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72747476797676767676767679767C
+7F7F7C7C7C7C7C7F7F7F7F7F8184858787898C8F92949496999A9C9C9E9E9EA3A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A4A4A19E9E9C9C9C9A9492928C8987847F7F7C7C79767676747476767676797C
+7F7F81858789898C8E8F929292929294949494949494949494949494949494929292929292929292
+8F8E89898989898989898987878787858585858787898989898989898C8F92929292929494999A9A
+9A9A9C9C9C9C9C9C9C9E9E9E9E9EA1A19E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A99949494949494
+94949699999999999A9A9C9C9C9E9E9E9E9E9E9E9E9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A9A9A9
+A9A9A9A6A6A6A6A6A9A9A6A6A6A6A9A6A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9E9EA1A1A3A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABAB
+ABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A4A4A4A4A4A4A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A3A3A3A3A3A1A1A1A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A9994949494
+9494949492929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8F8F8F92928F8E8C
+8987846C797F81878789898989898C8E8E8E8989898787878585847F7C79747C89969CA4A9AEB1B1
+B6BBBEC0C0C1C1C1C1C1C1C6C6C6C6CCCCCFD3D4D9DCDFE1E6E7ECECF1F2F2F1EEECE6DFD9D1C8C1
+B9B6B1AEA9A6A6A4A4A4A4A39E9E9C99948F897F6C59544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF899AA4AEB7B9BEC4C6C6
+C1C1C0BEBCB9B7B3B1AEABA6A49E9C948F877461554F55595F676A6C6C6C6C6C6A5F55FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7976767676767676797C7C
+7F7F7F7C7C7C7C7C7F7F7F7F818184878789898F92949494999A9C9C9E9E9EA1A3A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A4A4A39E9E9C9C9C9A9494928E8987857F7F7C79797676767476767676767B7C
+7F7F8185878989898E8F929292929292949494949494949494949494949494949292929292929292
+8F8E8C8989898989898989898787878785858585878789898989898989898C8E8F8F929292949494
+949496999A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99999999949494949494
+9494949494949699999A9C9C9C9C9C9C9E9E9E9E9E9E9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A3A3A3A4A4A3A19E9E9E9E9E9E9EA1A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABAB
+ABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E
+9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A1A1
+A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A9694949494
+94929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8C89
+89857F797F81858787898989898C8E8E8E8C89898787858585847F7C79747F89949CA4A6AEB1B1B3
+B7B9BBBEC0C0C1C1C1C1C1C4C6C6C6C8CCCFD1D4D9DCDFE1E6E7ECECF1F2F2EEECECE1DCD7CFC6BE
+B9B1AEAEA9A6A4A4A4A4A4A19E9E9C99928E87817461574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81929CA6B1B9BEC1C6C6C6
+C6C4C1C1BEBEB9B7B6B1AEABA6A4A39C948C7F6C5C4F51575D61676C6C6C716C6C6759FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76797C7C7C7C7C76767676767676797C7C
+7C7F7F7C7C7C7C7C7F7F7F7F7F8184858787898E9292949494999A9C9E9E9E9EA1A3A4A4A4A4A4A6
+A6A6A6A6A6A6A6A4A4A4A39E9E9E9C9C9A9694928F898987817F7C79767676767676767676767C7C
+7F7F8185878789898C8E929292929292949494949494949494949494949494949292929292929292
+8F8E8E8C89898989898989898989878787878585878787878989898989898989898C8E8F8F929292
+92929294949494949494949499999A9A9A9A9A9A9A9A9A9999949494969694949694949494949494
+9494949494949494999A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A6A6A6A6A4A4A4A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A19EA1A1A1A3A39E9E9E9E9E9E9E9EA1A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E
+9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A3A3A3A3A3A1A1A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A969494949292
+9292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8989
+877F797F818487878989898C8C8E8E8E8C89898787878585857F7C7976818C949C9EA4A9AEB1B3B6
+B9B9BBBBBEC0C1C1C1C1C1C1C6C6C6C8CCCFD1D4D9D9DFE1E6E7ECECEEF2F1ECECE7DFD9D3CCC1B9
+B6B1AEABA9A6A4A4A4A4A4A19E9C9A94928C87817C7159544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8794A3ABB6BEC1C6C8C8C8
+C6C6C6C6C1BEBEB9B7B6B1AEA9A6A69E9A92877967574F54575F666A6C6C6E6E6C6C5F55FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C7C7C797C79797976767676767676797C
+7C7C7C7C7C7C7C7C7F7F7F7F7F7F81848787898C8F92929494969A9C9C9E9E9E9EA1A3A4A4A4A4A4
+A6A6A6A6A6A6A6A4A4A4A49E9E9E9C9C9C9A94928F8C8987817F7C79767676767676767676797C7C
+7F7F8185878789898C8E8F9292929292949494949494949494949494949494949292929292929292
+928F8E8E8C898989898989898989898787878785858787878789898989898989898989898C8E8F8F
+8F8F8F92929292929492929292949494949496969494949494949494949494949494949494949494
+9494949494949494999A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6
+A6A6A6A6A4A4A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E
+9E9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9EA1A1A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A94949292929292
+92929292929292929292929292929292928F8E8E8E8E8E8C8C8E8E8E8E8C89898E8E8E8E8E8C8987
+81797F818487878989898C8E8E8E8E8E89898987878584847F7C7C767F89949C9EA1A6AEB1B1B3B6
+B9B9B9BBBBBEC0C1C1C1C1C1C4C6C6C8CCCFD1D4D9D9DFE1E6E7ECECEEF1EEECECE6DFD9CFC6BEB9
+B3B1AEA9A6A6A4A4A4A4A49E9E9C9A94928987817C7466514F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F9CA6AEB9BEC4C8CCCCCC
+CCC8C6C6C6C1BEBBB9B7B3B1AEABA9A49C948C7F725F514F555C61676C6C6C726E6C675C4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C7C7C79767679767676767676767676767B
+797C7C7C7C7C7C7C7F7F7F7F7F7F8181858789898E8F929294949A9A9C9C9E9E9E9EA1A3A4A4A4A4
+A4A6A6A6A6A6A4A4A4A4A4A19E9E9C9C9C9A9492928E8987847F7C79767676767676767979797C7C
+7F7F818787878989898E8F9292929292929494949494949494949494949494949292929292929292
+928F8E8E8E8E89898989898989898989878787878785878787878989898989898989898989898C8C
+8C8C8C8C8E8F8F929292929292929292929294949494949494949494949494949494949494949494
+949494949494949494999A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA1A3A4A4A4A4A3A4A4A4A4A4
+A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9
+A9A9A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A999494929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8C898C8C8E8E8C89898C8E8E8E8E8E898784
+767F818487878789898C8E8E8E8E8E8C898987878581817F7F7C797C8F949CA4A4A4A9AEB1B1B3B6
+B9B9B9BBBBBBC0C1C1C1C1C1C1C6C6C6C9CCCFD4D9D9DFE1E6E7ECECEEEEECECECE1D9D4CCC4BBB6
+B1AEABA9A6A6A4A4A4A4A39E9E9C9994928987847C746A5E4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949EABB6BEC1C6CCCFCFCF
+CCCCCCCCC6C6C1C0BEB9B7B3B1AEAEA9A19A92877C6A574F51575F666A6C6C72726C6C6157FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7C76767676767676767676767474747679
+79797C7C7C7C7C7C7C7F7F7F7F7F7F8184858789898E92929494999A9A9C9C9E9E9E9EA1A3A4A4A4
+A4A4A6A6A6A6A4A4A4A4A4A39E9E9E9C9C9C9994928F8C8987817F7C76767476767679797B7C7C7C
+7F7F848787878989898E8F9292929292929494949494949494949494949494949492929292929292
+928F8E8E8E8E8C898989898989898989898987878787878587878789898989898989898989898989
+898989898C8C8C8E8F8F8F8F8F8F9292929292929292929292929292929292949494949494949494
+949494949494949494999A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9EA1A3A3A1A1A1A3A3A4A4
+A4A4A4A4A4A3A4A4A4A4A3A1A1A3A3A3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A39E9E9C9C9C
+9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99999999949492929292929292
+92929292928F8F9292929292928F8F8E8E8E8E8E8E8C898989898C8C8989898E8E8E8E8E89878576
+7F848587878789898C8E8E8E8E8E8E898987878784817F7F7F7C7692999CA3A6A6A6A9AEB1B1B3B6
+B9B9B9BBBBBBC0C1C1C1C1C1C1C4C6C6C8CCCFD3D4D9DFE1E6E7ECECEEECECECE7E1D9D1C8C1B9B3
+B1AEABA9A6A6A4A4A4A4A19E9E9C99928F8987817C746A61544F4F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B8C99A4AEB9C0C6CCCFCFCFCF
+CFCFCFCFCCC6C6C1C0BBB9B7B1B1AEABA49C94897F7461554F555761676C6C7172716C675D54FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7C7C76747474747676767674747474747676
+767676797C7C7C7C7C7C7F7F7C7F7F8181848787898C8F92929494999A9C9C9C9E9E9E9EA1A3A4A4
+A4A4A4A6A6A4A4A4A4A4A4A39E9E9E9E9C9C9A9492928F8987847F7C767474747676767C7C7C7C7C
+7F7F848787878789898E8F8F92929292929494949494949494949494949494949492929292929292
+928F8E8E8E8E8C898989898989898989898989898787878787878789898989898989898989898989
+89898989898989898C8C8E8E8E8E8F8F8F8F8F929292929292929292929292929292929292949494
+949494949494949494969999999A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA1A3A3
+A3A4A4A3A19E9EA1A1A39E9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9C9C9C9C
+9C9C9C9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9999999996949494949292928F8F8F9292
+9292928F8F8E8F8F92928F8F8E8E8E8E8E8E8E8E898989898989898989898C8E8E8E8E8C8971767F
+85878787898989898E8E8E8E8E8E8C8989878784817F7F7F7C748E9C9EA4A9A9A9A9AEB1B1B1B3B6
+B9B9B9BBBBBBBEC0C1C1C1C1C1C4C6C6C8CCCFD3D4D9DFE1E6E7ECECECECECECE6DFD4CFC6BEB9B3
+B1AEA9A6A6A4A4A4A4A39E9E9C9A94928E8989847F72675D594F4F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85929CA6B1BBC1C6CFD1D1D1D3
+D1D1CFCFCCC9C6C4C1BEBBB9B6B1B1ABA69E9A8F85796C5D4F4F555F616A6C717272716C6157FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7C7C7974747474747474747474747474747476
+76767676797C7C7C7C7C7C7C7C7F7F7F8184858789898C8F92929494999A9C9C9E9E9E9E9EA1A3A4
+A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9C9994928F8E89877F7C79767474747676797C7C7C7C
+7F81848787878989898E8F9292929292929494949494949494949494949494949492929292929292
+92928F8E8E8E8E898989898989898989898989898987878787878789898989898989898989898989
+89898989898989898989898C8C8C8E8E8E8E8E8F8F8F8F8F8F8F9292929292929292929292929292
+929494949494949494949494969999999A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA1
+A1A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A3
+A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A1A19E9E9E9E9E9E9E9E9C9C9C9C9C
+9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999999999494949494949492928F8F8E8E8F8F92
+8F8F8F8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8C89898989898989898989898E8E8E8E8C8974797F85
+878789898989898C8E8E8E8E8E8C8989878785817F7F7F7C748E9C9EA4A6ABAEAEAEAEB1B1B1B3B6
+B9B9B9BBBBBBBBC0C0C1C1C1C1C1C6C6C6CCCFD3D4D9DFE1E6E7E9ECECECECE7E4D9D3CCC6BEB9B1
+AEABA9A6A6A4A4A4A3A19E9E9C9994928989877F76726A5F55514F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89949CA9B6C1C6CCCFD3D3D3D3
+D3D3D1CFCFCCC8C6C6C1BEB9B7B3B1AEA69E9A94897F746A574F545761676C6E7272726E675F54FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7F7C797674747272727274747474747474747474
+76767676797C79797C7C7C7C7C7C7F7F7F8184858789898E8F92949494999A9C9C9E9E9E9E9EA1A3
+A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9A9492928F8987817F7C767474747676797C7C7C7C
+7F81848787898989898E929292929292929294949494949494949494949494949492929292929292
+92928F8E8E8E8E8C8989898989898989898989898989898787878789898989898989898989898989
+898989898989898989898989898989898C8C8E8E8E8E8E8E8E8F8F8F8F8F92929292929292929292
+9292929292949494949494949494949999999A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E
+9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1
+A1A3A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9C9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A999999999999969494949494949494949492928E8E8E8E8E8E8F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898C8E8E8C8989747C7F8587
+89898989898C8E8E8E8E8E8E8E898989878784817F7F7C748E999EA1A6A9AEAEAEAEAEB1B1B1B3B6
+B7B9B9B9BBBBBBBEC0C0C0C1C1C1C4C6C6CCCFD1D4D9DFE1E6E7E7ECECECE7E7E1D9D1C9C1BBB6B1
+AEA9A9A6A6A4A4A4A19E9E9E9C94928E8987817C76716A6157544F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F99A1AEB9C1C8CFD3D4D4D4D4
+D4D4D3D3CFCFC9C6C6C4C1BEB9B6B1AEA6A19C948E84796C61544F555F616A6E727272726C6157FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74797C7C7C7C7C797674727272727272727474747474747474
+7676767676797979797C7C7C7C7C7C7F7F7F8184878789898F9292949494999A9C9C9E9E9E9E9EA1
+A3A3A4A4A4A4A4A4A4A4A4A4A3A1A19E9E9E9C9C9994928F8987817F7C76747474747676797C7C7C
+7F81848787898989898E929292929292929294949494949494949494949494949492929292929292
+92928F8E8E8E8E8C8989898989898989898989898989898989878989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+9292929292929292949494949494949494969999999A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9E
+9E9EA1A3A3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6
+A6A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999A9999999999969499999A9A9A
+9A9A9A9999999A9999999999999996949494949494949494949494929292928E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898E8E8E8989767C81878989
+89898C8C8E8F8F8F8E8E8E8E8C8989878784817F7F7C7489949CA3A4A6AEAEAEAEAEAEB1B1B1B3B6
+B7B9B9B9B9BBBBBEBEBEC0C0C1C1C1C6C6C9CFD1D4D9DFE1E4E6E7ECECE9E7E6DFD7CFC6C1B9B6B1
+AEA9A6A6A6A4A4A39E9E9E9C9A94928989847F7C79746C6159544F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929AA4B1BEC6CCD1D4D4D4D4D4
+D7D4D4D3D1CFCCC9C8C6C1BEB9B9B3AEA6A39C9992877F746A5C4F545761676C71727272716A5F55
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7C7C7C767674727272727171727274747474747474
+747676767676767676797C7C7C7C7C7F7F7F8181848787898E9292949494999A9C9C9C9C9E9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9A9994928F8987847F7C79747472747476767C7C7C
+7F7F8487878989898C8E929292929292929294949494949494949494949494949292929292929292
+9292928F8E8E8E8E8C8C898989898989898989898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929494949494949494969999999A9A9A9A9A9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E
+9E9E9E9EA19EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A999999
+999494999A9A9A9A9A9A9A9999999999999999969494949494949494949494949494949494999996
+9494949494949499969494949494949494949494949494929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898C8E8E8C89797F8487898989
+8C8E8E8F8F92928F8E8E8E8E8989878785817F7F7C7487929AA4A4A6A9AEAEAEAEAEAEB1B1B1B3B6
+B7B9B9B9B9B9BBBBBEBEBEBEC0C1C1C4C6C9CFD1D4D9DFE1E4E6E7ECECE7E7E4DCD4CCC6C0B9B3B1
+ABA9A6A6A4A4A3A19E9E9E9C99928F89877F7C7674726C665F54514F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7689949CABB7C6C8CFD3D9D9D9D9D9
+D9D9D7D4D3CFCFCCCCC6C6C1BBB9B3AEA9A49C9A948981796C61574F555D616A6C717272726E645D
+5C4FFFFFFFFFFFFFFFFFFFFFFF727476797C7C7C7C76767474727271716E6E6C7172727272747474
+747476767676767676797C7C7C7C7C7C7F7F7F8184858789898F9292949494999A9C9C9C9E9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9C9A9994928F8987857F7C7974747272747476797C7C
+7C7F8487878789898C8F929292929292929292949494949494949494949494929292929292929292
+9292928F8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292
+929292929292929292929292929294949494949494949999999A9A9A9A9A9C9C9C9E9E9E9E9E9E9E
+9C9E9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9E
+9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A999999999494
+94949494969999999999999996949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898E8E8E897C7F878789898C8E
+8E8F8F929292928F8E8E8E8C8989878784817F7C748492999EA6A6A9AEAEAEAEAEAEAEB1B1B1B1B3
+B7B9B9B9B9B9BBBBBBBBBEBEC0C1C1C1C6C8CCCFD4D9DEE1E4E6E7ECE7E6E6E1D9D3CCC6BEB9B1AE
+A9A9A6A6A4A4A19E9E9E9C9C94928C89817C76726E6C6C675F574F4F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E99A3AEBEC8CCD1D4D9D9D9D9D9
+D9D9D9D4D4D3CFCFCCCCC6C1BEB9B3AEA9A49E9C948E877F746A5F51545761676C6C727272726A61
+575F5C55FFFFFFFFFFFFFFFF7274747676797C7C767674747472716C6C6C6C6C6C71727272747474
+74747476767676767676797C7C797C7C7C7F7F7F81848787898E9292929494999A9C9C9C9E9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A49E9E9C9A9994928F8C89857F7C797472716E72727476797C
+7C7F8184878787898C8F8F9292929292929292949494949494949494949494949292929292929292
+9292928F8E8E8E8E8E8E8E8C8C898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292
+92929292929292929292929292929294949494949494949499999A9A9A9A9A9C9C9C9E9E9E9E9E9E
+9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A999999999999969494949494
+94949494949494969494949494949494949494949494949494949494949292929292929292929292
+929292929292949494949494949492929292929292929292928F8F8F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898C8E8E6C7C818789898C8E8E8F
+8F92929292928F8E8E8E8C8989878784817F7C747F92999EA6A9A9AEAEAEAEAEAEAEAEAEB1B1B1B3
+B6B9B9B9B9B9B9BBBBBBBBBBBEC1C1C1C6C6CCCFD3D9DCE1E1E4E6E7E6E4E1DFD9CFC8C1BEB7B1AE
+A9A9A6A6A4A4A19E9E9C9C9A948F89857F676A6C6C67666A5F59514F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929CA6B4C4CCCFD4D9D9D9D9D9D9
+D9D9D9D9D4D4D3CFCFCCC6C1C0B9B3AEA9A49E9C99928981766C61574F555D616A6C6C7272727267
+5F515F5F5CFFFFFFFFFFFF717272747476767679767474747272726C6C6C6C6C6C6C6E7272727474
+7474747676767676767676797979797C7C7C7F7F81848787898C8F92929494999A9A9C9C9E9E9E9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9C9A9994928F898987817F7C74726E6C6C7274767679
+7C7C7F81848787898C8E8E8F92929292929292949494949494949494949494949292929292929292
+929292928F8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989
+898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+92929292929292929292929292929292949494949494949494999A9A9A9A9A9C9C9C9E9E9E9E9E9C
+9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9C9C9C9C9C9C
+9C9C9C9E9C9C9C9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A4A4A4A3A3A3
+A3A3A19E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9999999999999999999694949494949494949494
+94929292949494949494949494949494949494949292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898E8E747F8487898C8E8F8F8F92
+9292929292928E8E8E8E8989898785817F7C747989999CA4A6A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1
+B3B7B9B9B9B9B9B9BBBBBBBBBEC0C1C1C4C6CCCFD1D4D9DFE1E1E6E6E4E1E1DCD4CFC6C1BBB6B1AE
+A9A6A6A6A4A49E9E9E9C9C99928E87816C747676726A5F61615C554F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949EACBCC8CFD3D4D9DCDCDCDCDC
+DCDCD9D9D9D4D3D1CFCCC6C1C0B9B3AEA9A6A19C99948C877C746A5F55545761676A6C727272726C
+64595F5F5F5F5C57FFFF6C6A6C6C71727474767676747472727272716C6C6C6C6C6C6C6C71727274
+747474747676747474747676797676797C7C7F7F8184858787898E9292949494999A9C9C9C9E9E9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9A9494928E898987817F7C76746E6A6C6C72747676
+797C7C7F81848787898C8E8E8F8F9292929292949494949494949494949494949292929292929292
+929292928F8F8E8E8E8E8E8F8F8E8E8C8C8C8C8C8E8C8C8989898989898989898989898989898989
+898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F92929292929292
+92929292929292929292929292929292949494949494949494999A9A9A9A9A9C9C9C9C9C9E9E9C9C
+9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9C9C9A
+9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E
+9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A999996949494949494949494949494949494949292
+92929292929294949494949494929292929292929292929292929292928F8F8F8F8E8E8E8F8F8F8F
+8F8F8F8F8E8F8F929292929292929292928F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989898C8E747F85898C8E8F8F92929292
+92929292928F8E8E8E8C89898787847F7C767C89949C9EA6A9A9AEAEAEAEAEAEAEAEAEAEB1B1B1B1
+B1B6B7B9B9B9B9B9B9B9BBBBBBC0C1C1C1C6C8CCCFD4D9DCDFE1E1E4E1E1DFD9D3CCC6BEB9B3B1AB
+A9A6A6A6A4A39E9E9C9C9C9492896A72767F857C746C615F5F5C574F4F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E9AA4B4C1CFD3D4D9DCDCDEDFDFDF
+DFDFDCD9D9D4D3D1CFCCC6C1BEB9B1AEA9A6A39C9A99928981766C615751555D616A6C6C72727272
+6A61555F5F5F5F5F5D5C5C61676A6C717272747474747472727272726C6C6A6A6A6A6A6C6C6E7272
+747474747474747474747476767676767C7C7F7F7F81858787898C9292949494999A9C9C9C9E9E9E
+9E9EA1A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9A9492928C898787817F7C7674716C6A6C6C727476
+76797C7C7F81848789898C8C8E8F9292929292929494949494949494949494949494929292929292
+9292929292928F8F8E8E8F8F8F8F8E8F8F8F8F8F8F8E8E8C8C8989898C8C8C8C8C89898989898989
+8C8989898989898989898C8C8989898C8E8F8F8E8E8E8E8E8E8E8F9292928F8F9292929292929292
+9292929292929292929292929292929294949494949494949494999A9A9A9A9A9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9C9C9A9A9A9C9C9C9C9C9C9E9E9E9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E
+9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A96949494949494949494949494949494929292929292
+9292929292929492929292929292929292929292929292928F8E8E8E8C8C8C89898989898C8E8E8E
+8E8E8E8C8C8C8E8F8F9292928F8F8F8F8F8E8E8E8E8C8C8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898E6A7F87898E8F8F929292929292
+92929292928F8F8E8E89898787817F7C767C89949C9EA4A9A9ABAEAEAEAEAEAEAEAEAEAEB1B1AEB1
+B1B3B6B6B9B9B9B9B9B9B9BBBBBEC0C1C1C6C8CCCFD3D9D9DFDFE1E1DFDFD9D4D1C8C1BEB9B3AEA9
+A9A6A6A4A4A19E9E9C9C9A948F6C747C7F87847F746C675F5F5D57544F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7487929CABB7C6D3D4D9DCDFDFDFDFDFDF
+DFDFDCD9D9D4D3D1CFCCC6C1BEB9B1AEA9A6A49E9C9A948C877F746A5F554F575F666A6C72727474
+6E675F5F6161616161615F5F61676A6C71727272727472727171716E6E6C6A6A6A6A6A6A6C6C7172
+72747474747474747474747476767676797C7C7F7F8184878789898F92929494999A9C9C9C9E9E9E
+9E9EA1A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9C9A9694928E898787817F7C7674726C6A6A6C6C7274
+7676797C7C7F8187878989898C8F9292929292929294949494949494949494949494949292929292
+929292929292928F8F8F8F929292929292929292928F8F8E8E8E8E8E8E8F8F8F8E8C8C898C8C8C8E
+8E8E8C8C89898C8C8E8E8E8E8E8E8C8E8F8F928F929292928F8F9292929292929292929494929292
+9292929292929292929292929292929292949494949494949494999A9A9A9A9A9C9A9A9A9C9C9C9C
+9A9A9A9A9A9A9A9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99999A9A9A9999
+9499999A9A9A99999A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A999694949494949494949494949292929292929292929292
+928F8F929292929292929292929292929292928F8F8F8F8E8C898989898989898987898989898989
+898989898989898C8C8E8F8E8E8E8E8E8C8C8C8989898C8E8E8E8E8C8C8989898C8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E898989898989898989898989898989898C767F87898C8F9292929292929292
+9292929292928F8E8C898987817F7C767F89929C9EA3A6A9ABABAEAEAEAEAEAEAEAEAEAEB1AEAEAE
+B1B1B3B3B6B7B9B9B9B9B9BBBBBBC0C1C1C4C6C9CCD1D4D9DCDFDFDFDFDCD9D3CFC6C1B9B6B1AEA9
+A9A6A6A4A4A19E9C9C9C99926C747C848787847F76716A615F5F57554F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8994A4AEBECCD4D9D9DFDFDFDFDFDFDF
+DFDFDCD9D9D4D3D1CFCCC6C1BEB9B1AEA9A6A49E9C9C999289847C72675D55555C61676A6C727474
+746C665961616161616161616166676A6C6C7172727272716E6C6C6C6C6C6C6A6A6A6A6A6A6C6C71
+7274747474747474747474747676767676797C7F7F8184878787898F92929494999A9A9C9C9E9E9E
+9E9E9EA3A3A4A4A4A4A4A4A4A4A3A19E9E9C9C9A9994928F8C8987847F7C7974726C6A6A6A6C6C72
+7476767B7C7F7F84878789898C8E8F92929292929292929494949494949494949494949494929292
+929292929292929292929292929292929292929292928F8F8F8F8F9292929292928F8E8E8E8F8F8F
+92928F8F8E8E8E8F8F929292928F8F8F8F9292929292929292929292929292929292949494949494
+9292929292929292929292929292929292929494949494949494999994999A9A9A9A99999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A99969999999994
+94949494999494949499999A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA1A1A3A39E9E9E9E9E9E9E
+9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949492929292929292929292929292928F8F8F8F
+8E8E8F8F92929292929292928F8F8F8F8F8F8F8E8E8E8E8989898787878787878787878787898989
+898989898989898989898C8C8C8C8989898989898989898C8C89898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C89898989898989898989898989898C8E767F87898C8F929292929494929292
+9292929292928F8E898987817F7C767F89929A9EA4A6A9ABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEB1B1B1B3B3B6B7B9B9B9B9BBBBBEC0C1C1C6C8CCCFD3D4D9DCDCDCD9D9D4CFCCC6BEB9B3B1AEA9
+A6A6A6A4A49E9E9C9C9C6A72747C84878787817F79726C665F5F5C55544F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818F9CA6B6C4D1D9D9DCDFDFDFDFDFDFDF
+DFDFDCD9D9D4D3D1CFC9C6C1BEB7B1AEA9A6A4A39E9C9A948F877F766C615755575F646A6C727474
+74726A6655616461616161676667676A6C6C6C6E6E6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6C6C
+7172747474747474747474747476767676767C7F7F8184878787898E92929494969A9A9C9C9C9E9E
+9E9E9EA1A1A3A4A4A4A4A4A4A4A19E9E9E9E9C9A969492928F898987817F7C74726C6A676A6A6C6E
+727476797C7C7F8185878989898E8F92929292929292929294949494949494949494949494949492
+92929294949292929292929292929292949492929292929292929292929292929292928F92929292
+92929292928F92929292929292929292929292929494949494949494949492929494949494949494
+94949492929292929292929292929292929292929494949494949494949494999999949494999999
+999999999999999A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9996949494999494
+94949494949494949494949499999A9A9A9C9C9C9C9A9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9C9C9A9A9999999999999999999694949292929292929292929292928F8F8F8F8F8E8E8E8E
+8C8C8E8F928F8F8F8F8F8F8F8E8E8E8E8E8E8C8C8989898987878787878787878787858587878787
+8787878787878789898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C89898989898989898989898989898C8E7681878C8E9292929294949494949292
+92929292928F8E8C8987817F7C767F89929A9EA4A6A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEB1B1B1B1B3B3B6B7B9B9BBBBBBC0C1C1C6C6C9CFD1D4D9D9D9D9D9D9D3CFC6C1BEB6B1AEABA9
+A6A6A4A4A39E9E9C9C6C72767C8487878785817F7C726C6A615F5D57554F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7687949EAEBCC6D4D9D9DFDFDFDFDFDFDFDF
+DFDFDCD9D9D4D3CFCFC9C6C1BEB6AEAEA9A6A4A49E9E9C99928C857C746A5F57515961666C717474
+74746E6A61616666666666676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A67676A6A6A6A6C
+6C7272747474747272747474747476767676797C7F7F81848787898C9292949494999A9C9C9C9C9E
+9E9E9E9E9EA1A3A3A4A4A4A4A39E9E9E9E9E9C9A99949492928F8C8987817C7674716A67676A6A6C
+717474797C7C7F7F81878789898C8F92929292929292929294949494949494949494949494949494
+92929494949494929494949494929494949494949292929292929292929294949494929292929292
+94949492929292929292949494949492929494949494949494949494949494949494949994949494
+94949494949492929292929292929292929292929292949494949494949494949494949494949494
+949494949699999999999999999A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9999999994949494949494
+94949494949494929292949494949499999A9A9A9999999A9A9A9A9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9999999996969494949494949494929292929292928F8F8F8F8F8E8E8E8E8C8C8C8989
+898C8E8E8E8E8E8E8E8E8E8C8C898989898989898787878787858585858585858585858585878787
+878787878787878789898989898989898989898989898989898989898989898989898C8E8E8E8E8E
+8E8E8E8E8E8E8E89898989898989898989898989898E6A7C81878C92929292929494949494949492
+929292928F8E8E8987847F7F767C89929A9EA4A6A9AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAB
+AEAEAEB1B1B1B1B1B3B3B6B9B9BBBBBEC0C1C4C6C8CCCFD3D4D9D9D9D4D4CFC9C6C1B9B3B1AEABA9
+A6A4A4A4A39E9E9C7274767C818787878584817F7C74716C645F5F5755514F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8999A4B1BECCD9D9DCDFDFDFDFDFDFDFDF
+DFDFDCD9D9D4D3CFCCC8C6C1B9B6AEAEA9A6A6A4A49E9C9A9492897F7671665C55555F616A6C7274
+7474746C6A5F6167676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A676A6A6A6A6A
+6C6E72727272727272747474747474767676767C7C7F81818787898C8F92929494999A9C9C9C9C9C
+9C9E9E9E9E9E9EA1A3A3A4A4A19E9E9E9E9E9C9C9A9A99949492928F8E87817C76746C6A67676A6A
+6C7274767C7C7C7F7F858789898C8E8F929292929292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494929294949494949494949494949494949492
+94949494949494949494949494949494949494949494969996949494949494949699999999999994
+94949494949494949292929292929292929292929292929292929292929292929494949292929494
+949494949494949494949496999999999999999A9A9A9A9A9A9A9999949496999494949494949494
+94929292949492929292929292949494949494949494949494949999999A9A9A9A9A9A9A9A9A9A99
+99999999999494949494949494949494949292928F8F8F8F8F8F8E8E8E8E8C8C8C89898989898989
+89898C8C8C8989898989898989898787878787878585848484818184848585858585858585878785
+8585858585878787878787878789898989898989898989898989898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8C8989898989898989898989898C8E767F87898E9292929294949494949494949492
+92928F8F8E8C898784817F767C87949A9EA4A6A9AEAEAEAEAEB1AEAEAEAEAEAEAEAEAEAEABABABAB
+ABAEAEAEAEB1B1B1B1B1B3B6B9B9BBBBBEC1C1C6C6C9CFCFD4D4D4D4D3D1CCC6C1BEB7B1AEAEA9A6
+A6A4A4A3A19E717274797C81878787858481817F7C76726C67615F5957554F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858F9CA6B6C4D1D9D9DCDFDFE1E1E1E1E1E1
+DFDFDCD9D9D4D3CFCCC6C4BEB9B1AEAEA9A6A6A6A49E9C9A94928C857C726A5F5755575F666C7274
+747474726C6A576467676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A67676A6A6A6A
+6A6C6E72727272727272747474747476767676797C7F7F81848789898F92929294949A9A9A9A9A9C
+9C9C9E9E9E9E9E9E9EA1A3A39E9E9E9E9E9E9C9C9C9C9C9A99949494928E877F7C76726C6A67676A
+6C6C7274767C7C7F7F848789898C8E8F929292929292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494999A99999999969494999A9A9A9A9A9A9999
+99969494949494949494929292929292929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949699999999999999999494949494949494949494949492
+92929292929292929292929292929292929292929292929294949494949494949494949494949494
+9494949494949494949494949494949492928F8F8E8E8E8E8E8C8C8C898989898989898989898987
+8989898989878787878787878787858584848481818181817F7F8181848484848485858585858585
+8585858585858787878787878787898989898989898989898989898989898989898E8E8E8E8E8E8E
+8E8E8E8E8E8C8989898989898989898989898E8E7C8187898F929292949494949496999694949492
+928F8E8E89898785817F767C87929A9EA4A9ABAEAEB1B1AEB1B1AEAEAEAEAEAEAEABAEABABA9A9A9
+A9A9ABAEAEAEAEB1B1B1B1B3B6B9B9BBBBBEC1C1C6C6CCCFD1D3D1CFCFCFC6C4BEB9B6B1AEABA9A6
+A4A4A4A19E727274767C7F8484848584817F7F7F7C76726C6A66615D57554F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949EABB9C6D4D9DCDFE1E1E1E1E1E1E1E1
+DFDFD9D9D9D4D1CFC9C6C1BEB7B1AEAEA9A9A6A6A6A39E9C94928E877F746C675F57545C616A7174
+74767676726C66556467676A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6767676A6A6A
+6A6C6C6E72727272727272747474747476767676797C7F7F818787898C8E9292929499999A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9EA19E9E9E9E9E9E9E9C9C9E9E9C9C9A9A99949289877F7C74726A6A6767
+6A6C727476797C7F7F81878989898E8F929292929292929292949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949499999A9A9A9A99999999999A9A9A9A9A9A9A9A
+9A999994949494949494949494929292929292928F8F9292928F8F8F8F8F8F929292928F8E8E8F8F
+8F929292949494949494949494949494949494949494969994949494949494949494949292929292
+92929292929292928F8F8F8F8F92929292928F8F8F8F929292929292929294949494949494949494
+94949292929494949494929292929292928F8E8E8C8C8C8989898989898989898989878787878787
+8787878787878585848484848481818181817F7F7F7F7F7F7F7F7F81818181818184858585858585
+85858585858585858585858787898989898989898989898989898989898989898C8E8E8E8E8E8E8E
+8E8E8E8E8E89898989898989898989898C8E767F85898E8F92949494949494949999999994949492
+928F8E89898787847F797C8792999EA4A9AEAEB1B1B1B1B1B1B1B1AEAEAEAEAEAEABABA9A9A9A9A9
+A9A9A9ABABAEAEAEAEB1B1B1B3B6B9B9B9BBBEC1C1C6C6CCCCCFCFCCCCC8C6C1BBB7B1AEAEA9A6A6
+A4A4A371727474767C7F7F81818181817F7F7F7F7C74726E6A67615F5755544F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818C99A4AEBECCD9DCDFDFE1E1E1E1E1E1E1E1
+DFDFD9D9D4D3CFCCC6C4C0B9B6AEAEAEA9A9A9A6A6A49E9C99928E878179726A615C55515F676C72
+7476767674726C616166676A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A67676767676A6A
+6A6A6C6C71717171716E72727472727474747474767B7C7F8184878989898E929294949494999999
+9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA39E9E9C9C9C99928F89847F79746C6A6767
+6A6A6C7274767C7C7F81858789898C8E929292929292929292949494949494949494949494949699
+94949494999996949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A969494949494949494949292929292928F8F8E8F8F8F8F8E8E8E8E8E8F8F8F8F8E8E8E8E8E
+8E8E8F9292929292929294949494949494949494949494949494929292949494949292929292928F
+8F8F8F8F9292928F8F8E8E8E8F8F8F8F8F8E8E8C8C8C8E8E8F8F8F8F929292929292929292929292
+929292929292929292929292929292928E8C89898989898989898989898787878787878787878785
+85858585848181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585
+858585858585858585858787878989898989898989898989898989898989898C8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898C8E747C7F87898F929294949494949499999A9A9A9994949292
+8F8E8C898987857F7C7C878E949EA4A9AEB1B1B1B6B3B1B1B1B1B1AEAEAEAEAEAEABA9A9A9A9A6A6
+A6A6A9A9A9ABABAEAEAEAEB1B1B3B6B9B9B9B9BEBFC1C4C6CCCCC8C6C6C6C1BEB9B3AEAEABA9A6A4
+A46E72727474767C7F7F7F7F817F7F7F7F7F7F7C7C7674716C6A615F5957554F4F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7687929CA6B4C1D1DCDFDFE1E1E1E1E1E1E1E1E1
+DFDCD9D9D4D1CFC9C6C1BEB9B1AEAEABA9A9A6A6A4A39E9C99948F89817C746C675F575551616A72
+747676767674726C5F6166676A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6767676767676A
+6A6A6A6C6C6E6E6C6C6C6E72727272727274747474767C7C7F8184878789898E9292929494949494
+999A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A19E9C9A94928C87817C76726C6A67
+676A6A6C7274797C7F7F848789898C8E8F9292929292929292949494949494949999969494949999
+99949496999A99999494949494949494949494949699949494949494949494949494949494949494
+9494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A999494949494949494949292929292928F8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292949494949494949492929292929292929292928F928F8F8E
+8E8E8E8E8F8F8F8F8E8E8C8C8E8E8E8C8C898989898989898C8C8C8C8E8E8E8E8E8F8F8F8F8F8F8F
+8F8E8E8E8F9292929292928F8F8F8E8E898989898989898987878787878787878787858585858585
+8585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818181818485858585858585
+858585858585858585878787898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E
+8E8E8E8E8C89898989898989898C727C7F8789898F9292949494969999999A9A9A9A999494949292
+8F8E898987857F7C7C818C949CA4A9AEB1B3B6B7B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A6A6A6A6
+A6A6A6A6A9A9A9ABABAEAEAEB1B1B3B6B7B9B9B9BEBEC1C4C6C6C6C6C4C1BEB9B6B1AEAEA9A6A6A4
+727274747476797C7C7F7F7F7F7F7F7F7F7C7C7C7C7674726C6A66615D5755514F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949EABB7C4D3DCDFDFE1E1E1E1E1E1E1E1E1
+DFDCD9D4D3CFCCC6C4C0B9B6B1AEAEA9A9A6A6A4A4A19E9C99948F89847C76726A615D575551676C
+72747676797974726C5F6166676A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A67676767676767
+6A6A6A6A6C6C6C6C6C6C6C7172727272727274747476767C7F7F8184858787898E92929292929494
+9494999A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A49E9C99948F89877F7C74726A67
+67676A6A6E74767C7C7F81878789898E8F929292929292929292949494949499999A99999499999A
+9A999699999A9A999994949494949699949494949999999694949494949496999494949494949494
+9494949494949494949494949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999
+9A9A9A99949494949494949494929292929292928F8E8E8E8E8E8E8E8E8E8C898C8C8C8E8E8E8E8E
+8E8E8E8F8F9292929292929292929292929292929292929292929292929292928F8F8E8F8F8F8E8E
+8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898989898989898C
+8C8C89898C8E8E8E8E8E8C8C89898989898989878787878787878787878585858585858585858585
+85858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184848484848485858585858585858585
+85858585878787878787878989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C89898989895F767C818487898E929494949499999A9A9A9A9A9A9A9A999494929292
+8E8C898785817C7C7F89929CA4A6AEB1B3B6B7B9B9B7B6B3B1B1B1AEAEAEAEAEABA9A9A9A6A6A6A6
+A6A6A6A6A6A6A9A9A9ABABAEAEB1B1B3B6B6B6B9B9B9BEBFC1C1C1C1BEBEBBB9B1AEAEABA9A67172
+747476767676797C7C7C7F7F7F7F7F7F7C7C7C7C7C7674726C6A67615F5757544F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848C99A4AEBCC9D9DFDFE1E1E1E1E1E1E1E1E1DF
+DED9D9D4D1CFCCC6C1BBB9B3AEAEABA9A6A6A4A4A49E9C9A99928F89877F76726A665F575755516A
+7174767979797674746A5F6166676A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A676767676767
+676A6A6A6A6C6C6C6C6C6C6C7172727171717274747476797C7C7F7F81848787898C8E8F8F929294
+949494999A9C9C9C9C9E9E9E9E9E9E9EA3A1A19EA1A4A4A4A4A4A39E9C9A94928C87847C76746E6A
+6767676A6C7274797C7F81848789898C8F8F9292929292929292949494949496999A9A9999999A9A
+9A9A99999A9A9A9A999996949494999999969499999A9A9999969494949499999999969494949494
+94949494949494949494949494949999999494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999
+99999996949494949494949494929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898C8C8C8C
+8E8E8E8E8E8F8F8F8F8F8F929292929292929292929292928F8F8F8F8F92928F8F8E8E8E8E8E8E8E
+8E8E8E8C898C8C8C8C89898989898989898989898989898989898989898989898787878787878989
+89898989898989898989898989898787878787878787878785858585858585858585858584848481
+818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585858585858585858585858585
+858585878787878787878989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C8989727C7F8489898C8F9294949499999A9A9A9C9C9C9A9A9A9A9A96949492928F
+8E898785817F7C7F87929AA1A6AEB1B6B7B7B9B9B9B6B6B3B1B1B1AEAEAEAEABABA9A9A6A6A6A6A4
+A4A4A4A6A6A6A6A6A9A9A9ABAEAEB1B1B1B1B3B6B7B9B9BEBEBEBEBEBBB9B9B3B1AEABA9A6727476
+7C7C7C7C7976797C7C7C7F7C7F7F7C7C7C7C7C7C7C7674726E6A67615F5C57554F4F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C87929CA6B1BFCCD9DFE1E1E1E1E1E1E1E1E1E1DF
+DCD9D7D3CFCCC8C4C0BBB7B1AEABA9A6A6A6A4A4A19E9C9A94928F89877F79746C67615C57555566
+6C727479797C7C7674746A5F6166676A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A676767676767
+67676A6A6A6A6C6C6C6C6C6C6C716E6E6E6C717272747476797C7C7C7F7F8185878989898C8F9292
+94949494999A9C9C9C9E9E9E9E9E9EA1A4A3A3A3A3A4A4A4A4A4A39E9E9C9A948F89877F7C76726C
+676767676A6C7276797C7F818787898C8E8F8F92929292929292949494949494999A9A9A99999A9A
+9A9A9A9A9A9A9A9A9A9A99999499999A9A9999999A9A9A9A9A9999949499999A9A99999996949494
+9494949494949494949494949499999A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494
+9496999494949494949494949292929292929292928F8E8E8E8E8E8E8E8C89898989898989898989
+898C8C8C8C8E8E8E8E8E8E8F8F8F8F8F9292929292928F8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989898989898987878787878787878787878785878787878787
+89898989898787878787878787878787878787878584858585858585858585848484818181817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181818485858585858585858585858585858585
+8585878787878989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E6E767F8789898F8F9292949494999A9A9A9C9C9C9C9C9C9C9A9A9A9994949492928E
+898784817F7C7F878F9A9EA6ABAEB6B9B9B9B9B9B9B6B3B3B1B1B1AEAEAEAEABA9A9A9A6A6A6A6A4
+A4A4A4A4A4A6A6A6A6A6A9A9A9AEAEB1B1B1B1B1B6B6B7B9B9B9B9B9B9B7B6B1AEABA97274767C7F
+81817F7C7C76767C7C7C7C7C7C7C7C7C7C7C7C7C7C767472716C6A61615D5755544F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89929EA9B7C4D1DFDFE1E1E1E1E1E1E1E1E1E1DF
+D9D9D4D1CFCCC6C1BBB9B3AEABA9A9A6A6A4A4A19E9E9C9A94928F8987817C746C6A615F59575555
+6A7172767C7C7C7C7976746A5F6166676A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6767676767
+6767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C717272747476797C7C7C7F7F8484878789898C8F92
+9292949494999A9C9C9C9E9E9E9E9E9EA3A3A3A4A4A4A4A4A4A3A19E9E9C9A94928987847F7B7472
+6C676767676A6C7476797C7F848789898C8E8F8F929292929292949494949494999A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A99999A9A9A9A9A9A999999999A9A9A9A9A9A99999994
+94949494949494949999969494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694
+94949494949494949494949292929292929292928F8F8E8E8E8E8E8E8C8989898989898989898989
+898989898989898C8C8C8C8E8E8E8E8E8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8C89898989898989898989898989898989898787878787878787878787878585858585858787
+87878787878787878787878787878585848484818184848585858484848181817F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184848484858585878787878787878787878787878787
+8787878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E7F818789898F929294949494999A9A9C9C9C9C9C9E9C9C9C9C9A9A9A99949492928F8E
+8987817F7C7F848E949EA4ABAEB4B9BBB9B9B9B9B9B6B3B1B1B1B1AEAEAEABABA9A9A6A6A6A6A4A4
+A4A3A3A4A4A4A4A6A6A6A6A6A9A9AEAEAEAEAEB1B1B1B3B6B6B6B7B6B3B3B1B1AEA974767C7F8187
+87817F7C7C79797C7C7C7C7C7C7C7C7C7C7C7C7C79767472726C6A66615F5757554F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72858E94A3AEB9C6D4DFE1E1E1E1E1E1E1E1DFDFDFDC
+D9D9D4CFCCC8C6C0BBB7B1ABA9A9A6A6A4A4A39E9E9E9C9A9492928987847C746E6A615F5D575757
+556C7274797C7C7C7C7976766C616166676A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6767676767
+676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C71727274747676797C7C7F818184878789898E8F
+9292929494969A9C9C9C9E9E9E9E9E9E9EA1A1A3A3A3A4A4A4A39E9E9C9C9A96928E8987817C7974
+726A6767676A6A717476797C7F85878789898E8E8F8F92929292929494949494999A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9999
+99969494949494969999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+949494949494949494949292929292929292928F8F8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898987878787878787878585858585878787858585858585858587
+878787878585858584848484848181818181817F81818484848181817F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585878787878787878787878787878787878787
+8787878789898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E84878C929292949999999A9A9A9A9C9C9C9C9E9E9E9E9E9C9C9C9C9A9994949492928F89
+87847F7F7F8489949CA4A9B1B4B7BEBEBBB9BBB9B7B6B3B1B1B1B1AEAEABA9A9A9A9A6A6A6A6A4A4
+A4A3A1A3A3A4A4A4A4A6A6A6A6A9A9ABABAEAEAEAEB1B1B1B1B3B3B1B1B1AEAEA97C7C7C81878989
+87847F7F7C7C797C7C7C7C7C7C7C7C7C7C7C797979767474726C6A67615F5C5755514F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F87929AA6B1BECCD9DFE1E1E4E1E1E1E1E1DFDFDFDC
+D9D4D3CFCCC6C1BEB9B3AEA9A9A6A6A6A4A4A19E9E9C9C9A9494928F89877F76726A615F5D5C5757
+57546C74767C7C7C7C7C7979796C674F66676A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6767676767
+67676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C71727274747676797C7C7F818184878789898E
+929292929494999A9C9C9E9E9E9E9E9E9E9E9E9EA1A1A3A3A4A19E9E9C9C9C99948F8987857F7C76
+746E6A6767676A6C7274767C7F8185878789898E8E8F8F92929292949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999999949494999A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+9494949494949494949492929292929292928F8F8E8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C898989898989898989898989898787878787878787858585858484848484848484848484848484
+8484848181818181818181817F7F7F7F7F7F7F7F7F81817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8181818181848585858587878787878989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E76878C9294999A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9A99949492928F8E89
+87817F7F8489949CA3A6AEB6B9B9BEBEBBBBBBB9B7B3B3B1B1B1AEAEABA9A9A9A6A6A6A6A6A4A4A4
+A3A19E9EA1A3A3A4A4A4A4A4A6A6A6A9A9A9A9ABABAEAEAEB1B1B1B1AEAEAEAB7F7F7F7F87898C89
+8784817F7C7C7C7C7C7C7C7C7C7C7C7C7C7979797976747472716A6761615F5755544F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8189929CA9B3C1CFD9E1E1E4E4E4E1E1E1E1DFDFDCD9
+D9D4D1CFC8C6C0BBB7B1ABA9A6A6A6A4A4A39E9E9E9C9C9A999494928E898179726A615F5D5C5757
+5757547274767C7C7C7F7C7C7C7972675F666A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A67676767
+67676767676A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C71727474747476767C7C7F7F818487878989
+8E8F9292929494999A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9EA3A39E9E9C9C9C9A94928E8987857F7C
+76726C6A6767676A6C7274767C7F8184878789898C8E8F8F929292949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A99999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996
+9494949494949494949292929292929292928F8E8E8E8E8E8E8C8989898989898989898989898989
+8989898989898989898989898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8C
+898989898989898989898989898787878585858585858585858484817F818181818181818181817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8184848585858587878787878789898989898989898989898989898989
+8989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E7B8792949A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A96949492928F8987
+847F7F8489929A9EA6AEB3B9BBBEC1C1BEBBBBB9B7B3B1B1B1B1AEAEA9A9A9A6A6A6A6A6A4A4A4A4
+A39E9E9E9E9EA1A3A3A4A4A4A4A6A6A6A6A6A6A6A9A9ABAEAEAEAEAEAEAB7F7F7F818787898C8C89
+8784817F7C7C7C7C7C7C7C7C7C7C7C7B797979797676747472716C6A66615F5957554F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C858C94A1ABB7C4D1DFE1E1E4E4E4E1E1E1DFDFDFDCD9
+D9D3CFCCC6C1BEB9B3AEA9A6A6A4A4A4A4A19E9E9C9C9C9C9A9994949289877F746C645F5F5C5957
+575757517274797C7C7C7F7F7F7C766E675F676A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A67676767
+6767676767676A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6E72727474747476767C7F7F7F8184878789
+898C8E8F929294949A9A9C9C9C9C9C9E9E9E9E9E9E9E9E9EA3A39E9E9E9C9C9A9492928E8987847F
+7C74726C6A6767676A6E7274767C7F8184878789898C8E8E8F9292949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A999A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+94949494949494949494929292929292928F8E8E8E8E8E8E8E898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8C89
+8989898989898989898989898787878585858585848184848484817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181
+7F7F7F7F7F7F7F7F7F7F81848585858587878787878787898989898989898C8C8C8C8C8C8C8C8C8C
+8C8C8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+7C8992949A9C9C9E9E9E9E9E9E9E9E9EA1A1A3A3A4A3A3A1A19E9E9C9C9C9A99949492928F8E8985
+7F7F818792949EA6ABB1B9BBC0C1C4C1C0BBBBB9B7B3B1B1B1AEAEABA9A6A6A6A6A6A4A4A4A4A4A3
+A19E9E9E9E9E9E9EA1A1A3A3A4A4A4A4A6A6A6A6A6A6A9A9ABABABA96E818184848587898C8C8C89
+8785817F7F7C7C7C7C7C7C7C7C7C7979797976767676747472716C6A6661615C5755514F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F87929AA4AEB9C6D4E1E1E4E4E4E4E1E1E1DFDFDFD9D9
+D4D1CCC6C1BEB9B7B1ABA6A6A4A4A4A4A39E9E9E9E9E9E9C9C9C9A9A948F89847972675F5D595957
+575757555172747C7C7C7F7F7F7C7C746C6A5F676A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A676767
+666666666666676A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C7172747474747476797C7F7F7F81848787
+8989898E8F929494999A9A9A9C9C9C9C9C9C9E9E9E9E9E9EA1A4A19E9E9C9C9C999492928E898781
+7F7974726C6A67676A6C717274767C7F7F84878989898C8E8F9292929494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9C
+9C9C9C9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99
+949494949494949494949492929292928F8F8E8E8E8E8E8E8E8C8989898989898989898989898989
+8989898989898989898989898989898989898989898989898989898989898E8E8E8C898C8C8C8989
+898989898989898989898987878785858585858481817F7F7F817F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181848484858481
+817F81818181818181848485858585878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6C
+8992949A9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9C9A9A99949492928E898781
+7F7F878F949CA4A9B1B9BBC0C1C4C1C1BEBBB9B9B6B3B1B1B1AEAEABA9A6A6A6A4A4A4A4A3A3A19E
+9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A4A4A4A4A4A4A6A6A6A9A9A674848481858787898C8C8C8989
+898784817F7F7C7C7C7C7C7C79797979797676767676747472726C6A6764615F5755544F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8189929CA6B1BECCD9E1E1E4E6E6E4E1E1E1DFDFD9D9D4
+D1CFC8C6C1BEB9B3AEA9A6A4A4A3A4A4A3A19EA1A4A3A19E9E9E9C9C9A948F897F746C615C595757
+57575957556C72767C7C7C7C7F7C7C79746C6A5F676C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A676767
+66616164646666676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6E7272747474747676797C7F7F7F7F8485
+878789898C8E9294949499999A9A9A9C9C9C9C9C9C9C9E9EA1A4A19E9E9E9C9C9A999492928F8987
+817F7974726C6A6A6A6C71727476797C7F8185878989898C8E8F9292949494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9C
+9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99
+99999694949494949494949494949292928F8E8E8E8E8E8E8E8E8989898989898989898989898989
+8989898989898989898989898989898989898989898989898989898989898C8E8C89898989898989
+8989898989898989898987878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818184848585878787878484
+8484848484858585858787878787878787898989898989898C8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F
+8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E87
+8F949A9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6A6A4A4A4A39E9E9C9C9A99949494928F8987817F
+7F878E949CA4A9AEB6BBBBC0C1C6C1C1BEBBB9B9B6B1B1B1AEAEAEA9A6A6A6A4A4A4A4A39E9E9E9E
+9E9E9C9C9E9E9E9E9E9E9E9E9E9EA1A1A3A3A3A3A4A4A4A664727C84858584878789898C8C898989
+898784817F7F7C7C7C7C7B7979797976767676767676747472726C6A6766615F5957554F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878C949EA9B3C1CFDCE1E4E6E6E4E4E1E1DFDFDCD9D4D3
+CFCCC6C1BEB9B7B1ABA6A4A4A1A1A1A4A4A4A3A4A6A4A4A4A4A39E9E9E9A948E857C72675F575757
+57575C5957557174767C7C7C7C7C7C7C7674716C5F6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6767
+6766616161616164676A6A6A6C6C6C6C6C6C6C6C6C6C6C6C7172747474747476797C7C7C7F7F7F81
+8487878989898E92929494949699999A9A9A9C9C9C9C9E9E9EA3A3A3A19E9E9C9C9A999492928F89
+87817C7974716C6A6A6C6C727274767C7C7F81878789898C8E8F9292949494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9C9A9A9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9999999994949494949494949292928F8F8F8F8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898989898989898989898989898C8989898989898989
+89898989898989898987878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818484858585858587878787878785
+87878787878787878787878787878787878989898989898C8E8E8E8E8E8F92929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292928F8F8E8E8E8E8E8E8E8E8E8E8E878C
+929A9C9EA3A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A3A19E9C9C9A99949492928C89847F7C
+8489949CA4A6AEB1B9BEC0C1C1C4C1C0BBBBB9B7B3B1B1AEAEAEABA9A6A6A4A4A4A3A19E9E9E9E9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9EA1A1A1A3616A71767C7F818587878789898C8C89898989
+878784817F7F7F7C7C7C7C7979797676767676767676747472726E6C6A6661615D5755514F4F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878F99A3AEB9C6D1DFE1E4E6E6E4E1E1DFDEDCD9D4D3CF
+CCC6C4C0BBB9B3AEA9A4A39E9E9EA1A4A4A4A4A6A6A6A6A6A6A6A4A4A49E9A92897F766C615C5757
+5757595C5C57556C72747676767C7C7C797674726C61556A6A6C6C6C6C6C6C6C6C6C6C6C6A6A6767
+676661616161616164676A6A6A6C6C6C6C6C6C6C6C6C6C6C717272747474747676797C7C7C7F7F7F
+7F8185878789898E8F92929294949494999A9A9C9C9C9C9E9EA3A4A4A3A19E9C9C9C9A999492928E
+8987817C76746E6C6A6C6C71727474767C7F7F84878989898E8F9292949494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A9A9A9A999999999694949494949292929292928F8F8F8F8F8E89898989898989898989898989
+89898987878789898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898787878785858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181858585858585858787878987878787
+878787878787878789898989898989898989898C8E8E8E8E8E8E8E8E8E8F92929292929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8F8F9292929292929292928F8E8E8E8E8E8E8E8E8E8E818992
+999C9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A39E9C9C9A999494928E89857F7C81
+89929CA3A6AEB1B7BBC1C1C1C4C1C1C0BBB9B9B6B3B1AEAEAEABA9A9A6A6A4A4A4A39E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E676C7274797F7F7F818487878789898C8989898989
+878784817F7F7F7C7C7C7C7976767676767676767676747474726E6C6A6764615F5755544F4F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF768489929AA4AEB9C6D4E1E1E4E6E4E1E1DFDFD9D9D9D3CFCC
+C8C6C1BBB9B6B1ABA6A39E9E9E9EA3A4A4A4A6A6A9ABABA9A9A6A6A6A6A49C9992877C726A5F5755
+5757595D5C5957546C71727474767B7C79767674726C6457676A6A6A6C6C6C6C6C6C6C6C6C6A6A67
+67676461616161616166676A6A6C6C6C6C6C6C6C6C6C6C6C6C72727474747474767676797C7C7C7F
+7F7F818487878989898C8E929294949494999A9C9C9C9C9E9EA1A4A4A4A39E9E9E9C9C9A99949292
+8E89877F7C7672716C6C6C6E72727476797C7F81858789898C8F9292929494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9C9C9C9C9E9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C
+9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C
+9C9A9A9A9A9A9A9A9A999999949494929292929292929292928F8E8C898989898989898989898989
+89898987878787878989898989898989898989898989898989898989898989898989898989898989
+8989898989898987878787858585858585858481818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184858585858587878787898987878787
+8789898989898989898989898989898989898C8E8E8E8E8E8F8F8F8F8F9292929292929292929292
+92929292928F8F8F8F8F8F8E8E8E8F9292929292929292929292928F8E8E8E8E8E8E8E8E7C899294
+9C9C9EA4A4A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A4A39E9C9A999494928F89877F7C7F89
+929CA1A6ABB1B6B9BEC1C1C1C6C1C1BEBBB9B9B6B1B1AEAEABA9A9A6A6A6A4A4A3A19E9E9E9C9C9C
+9C9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E676C7274797F7F7F7F81818487878789898C8989898989
+878785817F7F7F7F7C7C7C797676767676767676747474747472716C6A6766615F5957554F4F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8789949CA6B1BECCD9E1E4E4E6E4E1DFDFDCD9D9D4D1CCC8
+C6C1BEBBB7B1AEA9A49E9E9E9E9EA4A4A6A6A6ABAEAEAEAEAEABA9A9A9A6A39C9489817671665C55
+5557575C5D5D5957546A6C717274767679767679767471675D66676A6A6C6C6C6C6C6C6C6C6A6A6A
+6A67666161616161616166676A6A6C6C6C6C6C6C6C6C6C6C6C7172747474747474747676797C7C7C
+7C7F7F7F818587878789898E929294949496999A9C9C9C9E9EA1A4A4A4A4A39E9E9E9C9C9A999492
+928E89847F7C7472716C6C6C72727474767C7F7F848787898C8E8F9292949494949496999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9C9C9C9A9A9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9E9E9E9C9C9C9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A99949494949292929292929292928F8F8E8C8989898989898989898989
+89898787878787878989898989898989898989898989898989898989898989898989898989898989
+898989898989898787878585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F81818181818181817F7F7F7F7F7F7F7F8181818184848485858787878787878789898989898989
+8989898989898989898989898989898C8C8C8E8E8E8E8E8F92929292929292929292929292929292
+929292929292929292928F8E8E8F929292929292929292929292928F8E8E8E8E8E8E8E76878F949C
+9C9EA4A4A6A6A6A9A9A9A9A9A9A9A9A9A9ABABA9A9A9A6A6A4A19E9C9A999492928C877F7C7F8792
+9A9EA6ABB1B6B9BEC1C4C1C1C6C1C0BBBBB9B7B3B1B1AEABA9A9A6A6A6A4A4A4A39E9E9E9C9C9C9C
+9A9A9A9A9A9C9C9C9C9C9C9E9E9E9E71727274767F8181817F818181848587878989898989898989
+878785817F7F7F7F7C7C7C797676767676767676747474747472716C6A6A6761615D5755514F4F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878F949EA9B3C1CCD9E1E4E4E6E1DFDFDCD9D9D4D3CFC9C6
+C1C0BBB9B3B1ABA6A19E9E9E9EA1A4A4A6A9ABAEB1B1B1B1B1AEAEAEABA6A49E9C92877C766C6157
+555555595D5D5D5C5754616A6C727474767976797C7674726A5F6167676A6A6C6C6C6C6C6C6C6A6A
+6A6A676461616161616166676A6A6C6C6C6C6C6C6C6C6C6E7171727274747474747474767676797C
+7C7C7F7F7F818587878789898F9292949494999A9A9C9C9E9E9EA3A4A4A4A3A39E9E9E9C9A9A9994
+92928C87817C797472726C6C7172747476797C7F81858789898E8F8F92949494949494999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9EA1A3A19E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494949292929292928F8E8E8E8E8C8C8C8C89898989
+89898787878787878789898989898989898989898989898989898989898989898989898989898989
+89898989898989898787878787878787878787878787858481818181818181818181848484848484
+848484848484848481817F7F81818181848484858585858787878787878789898989898989898989
+8989898C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292
+929292929292929292928F8F8F8F9292929292929292929292928F8E8E8E8E8E8E8E8E818E949A9E
+9EA1A4A6A6A6A9A9ABABABABABABABACAEAEAEABABA9A6A6A49E9C9A9A9494928E89817C7F878F96
+9EA6ABAEB6B9BEC1C6C6C6C4C4C1C0BBB9B9B6B1B1AEAEA9A9A6A6A6A6A4A4A3A19E9E9E9C9C9C9A
+9A9A9A9A9A9A9A9C9C9C9C9C9E7C7976767C7C7F8785848181818181848587878989898989898989
+87878584817F7F7F7C7C7C797676767676767676767474747472716C6C6A6764615F5755554F4F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8489929AA3AEB9C1CFD9E1E4E6E6E1DFDFD9D9D4D4CFCCC6C4
+C1BBB9B6B1AEA6A49E9E9E9E9EA3A4A6A9AEAEB4B6B7B7B7B6B1AEAEAEA9A49E9C968C817C746A5D
+555155575C5F5F5F5D57545F676A6C72747676767C7C7674726A614F64676A6A6A6A6A6C6C6C6A6A
+6A6A67676161616161616166676A6C6C6C6C6C6C6C6C6C6C72727272747474747474747474767679
+7C7C7C7C7F7F8185878787898E9292949494999A9A9C9C9C9E9EA3A4A4A3A1A3A39E9E9C9A9A9A99
+94928E89857F7C76747272716E72727474767C7C7F818787898C8E8F92929494949494999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9E9EA1A3
+A3A19E9E9E9E9EA1A3A4A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9A9A9A9A9A9A9A9A9A999494949494949494949494949292928F8F8F8F8E8E8E8E8C898989
+89898987878787878989898989898989898989898989898989898989898989898989898989898989
+89898989898989898787878787878787878787878787878585858585858585878787878787878787
+878787858585858584818484848485858585858585858587878989898989898989898989898C8C8C
+8C8E8E8E8E8E8F8F929292929292929292928F8F8F8F8F9292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E7F8992999C9E
+A3A4A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A4A39E9C9A9994928F89847F7C848C949C
+A4ABAEB6B9BEC1C6C6C6C6C6C1C1BEBBB9B6B3B1AEAEABA9A6A6A6A6A4A4A4A39E9E9E9C9C9C9C9A
+9A9A9A9A9A9A9A9A9A9C9C9C8781817F7F8185878787858481818184848587878789898989898989
+87878784817F7F7F7F7C7C797676767676767676767474747472726C6C6A6766615F5957554F4F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8789929CA4AEB9C4D1DCE1E4E6E4E1DFDCD9D9D4D3CFC8C6C1
+BEBBB9B1AEA9A69E9E9E9E9E9EA4A6A9AEB1B6B7B9B9B9B9B9B6B1B1AEA9A6A39C9A92877F797266
+57544F55595D5F5F5F5D57555C646A6C727474767679797674726C614F6166676A6A6A6A6C6C6A6A
+6A6A6A676761616161616166676A6A6C6C6C6C6C6C6C6C6C71727272727474747474747474747676
+76797C7C7C7F7F81858787898C8F9292949496999A9C9C9C9E9EA1A4A4A39EA1A3A49E9C9A9A9A9A
+94928F8987817F7C76747472717272747476797C7F7F848789898C8E8F929294949494999A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9EA1A3A4
+A4A3A3A19E9E9EA3A4A4A4A4A4A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9C9C9A9A9A9A9A9A9A9A999694949494949494949494949494929292928F8F8F8F8F8F8C8989
+89898989898787898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898787878787878787878787878787878787878787
+878787878585858585858585858585858585858585858787898989898989898C8C8C8E8E8E8E8E8E
+8F8F8F8F8F9292929292929292949494929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E798792949CA3A4
+A4A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEA9A6A4A19E9C9A94949289877F797F89929CA3
+A9AEB6B9BEC1C6C6C6C6C6C6C1C0BBB9B6B3B1AEAEABA9A6A6A6A4A4A4A4A3A19E9E9E9E9C9C9A9A
+9A9A9A9A9A9A9A9A9A9C9C8989878787848789898787878481818484858585878787898989898987
+87878784817F7F7F7F7C7C7C7976767676767676767474747472726C6C6A6A6761615D5755544F4F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7681878E949CA6B1BBC6D3DFE1E4E6E4E1DCD9D9D4D3CFCCC6C1C0
+BBB9B6B1ABA6A49E9E9E9E9EA3A6A9AEB1B6B9BEBEBEBEBEB9B9B3B3AEABA6A49E9C948E857C766C
+5F554F4F575C5F5F5F5F5D57545761676C717274767679767674726C61575F616667676A6A6C6C6A
+6A6A6A67676764616161616166676A6A6A6C6C6C6C6C6C6C6E727274747474747474747474747476
+767679797C7C7F7F81858789898C8F92929494999A9C9C9C9C9E9EA4A3A19E9EA1A39E9C9C9A9A9A
+9994928C8987817F7C767474727272747476767C7C7F81878789898C8E8F929494949496999A9A9A
+9A9A9A9A9A9A9A9A9C9C9C9C9C9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A1A19E9EA3A4A4
+A4A4A4A3A3A1A1A3A4A4A4A4A4A4A4A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9C9C9C9C9A9A9A9A9A9A9A9A9A9999999996949494949494949494949292929292929292928F8E8E
+8E8E8C8C898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898987878787878787878787878787878989898989
+8987878785858585858585858585858585878787878787878989898989898C8E8E8E8E8F8F8F8F8F
+92929292929294949494949494949494949492929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8C848E949C9EA4A6
+A6A9A9A9ABAEAEAEAEB1B1B1B1B1B1B1B1B1AEAEAEA9A6A49E9C9A9494928E877F797C87929A9EA6
+AEB6B9BEC1C4C6C8C6C6C6C4C1BEBBB9B3B1AEAEABA9A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A
+9A9A9A9A9A9A9A9A768792928E898989898C89898787878584848485858585878787898989898787
+87878784817F7F7F7F7F7C7C7976767676767676767474747472726E6C6A6A6764615F5755554F4F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7C858992999EA9B1BEC6D4DFE1E4E6E1DFDCD9D7D4D1CFC8C6C1BE
+B9B9B1AEA9A49E9C9C9E9EA3A4A9AEB1B6B9BEC1C1C1C1C1BEB9B9B3B1AEA9A49E9C949289817C74
+6759544F54575D5F61615F5D5754575F666A6E7274767676767472716A61575F5F6166676A6A6A6A
+6A6A6A6A6767676461616161666767676A6A6C6C6C6C6C6C6C717274747474747474747474747474
+76767676797C7C7F7F81858789898C8F929294949A9A9C9C9C9C9EA1A39E9E9E9E9E9E9E9C9A9A9A
+9994928E8987857F7C79767474727272747476797C7F7F84878989898C8F92929494949499999A9A
+9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A4A3A1A1A3A4A4
+A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494929292929292929292929292
+92928F8F8F8E8E8C8C89898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+89898787878585858585858787878787878787878787898989898989898C8E8E8E8E8F9292929292
+92929292929494949494949496969694949492929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F8E8E8E8E8E8E8E8C8C89897F89949A9EA4A6A9
+ABAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEABA6A4A39E9C9A94928F8984797C878E999EA6AE
+B3B9BBC1C1C6C6C9C6C6C6C1BEBBB9B6B1AEAEABA9A6A6A6A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9A
+9A9A9A9A9A9A74747F8E9494928E8C8E92928C898987878785848585858585858787878989878787
+87878784817F7F7F7F7F7C7C7C76767676767676767474747474726E6C6A6A6766615F5957554F4F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7F8789929AA3ABB6BECCD4DEE1E4E6E1DFD9D9D4D1CFCCC6C1C0BB
+B9B6B1ABA6A49E9C9C9EA1A4A6AEB1B6B9BEC1C4C6C6C6C6C1BEB9B6B1AEA9A6A49E9A928C877F76
+6C61574F4F575C5F5F61615F5D5754575F616A6C72747474747474726C6A5F555D5F616167676A6A
+6A6A6A6A6A6767676661616161666767676A6A6C6C6C6C6C6C6E7272747474747474747474747474
+76767676767C7C7C7F7F81858789898E8F929294949A9A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9A9A9A
+9994928F8C8987817F7C797674747472747476797C7C7F8187878989898E8F92949494949499999A
+9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9E9EA3A4A4A4A4A3A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494929292929292929292
+92929292929292928F8F8E8E8C8C8989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898987878787878787878787878787878989898989898989898989898C8E8E8E8E8E8F9292929292
+92929292929494949494949699999994949494949494949494949494949492929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8C8C898989897B8792999CA4A6A9AE
+AEAEAEAEB1B1B1B1B3B6B6B6B6B6B3B3B6B1AEAEABA6A4A19E9C99949289877C76818C949CA6ABB1
+B7B9BEC1C6C6C8C9C6C6C6C1BEBBB9B3B1AEABA9A6A6A6A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9A
+9A9A9A9A9A8584818994949494928F9292928E898989878787858585858585858787878987878787
+87878785817F7F7F7F7F7C7C7C7976767676767676747474747472716C6C6A6A6761615D5755544F
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7984878E949CA4AEB9C1CCD9DEE1E1E4DFDCD9D4D3CFCCC8C6C1BEB9
+B7B1AEA9A49E9C9C9C9EA4A6ABB1B6B9BEC1C6C6C6C6C8C6C1C0BBB9B3B1ABA6A49E9C948F89847C
+746A5D544F54575D5F6161615F5F5754555D61676C717274747272726E6A675D515C5F616166676A
+6A67676A6A6A6A6A6766616161646767676A6A6A6C6C6C6C6C6C7172747474747474747474747474
+7476767676797C7C7F7F7F81878789898C8E8F929494999A9C9C9C9C9E9E9E9E9E9E9E9C9C9A9A9A
+999494928E8987857F7F7C7676767474747476767C7C7F7F8487898989898E929294949494949699
+9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A1A1A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494949494949494
+929292929292929292929292928F8F8E8E8C8C898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898C8C8C8C8C8C8C8C8C8989898989898989
+89898987878787878787898989898989898989898989898C8C8C8C8E8E8E8E8E8E8F929292929292
+9294949494949494949494999A9A9999949494949494949494949494949492929292929292929292
+92929292929292929292929292928F8F8F8F8F8E8E8E8C8C8989898989896A848C949CA3A6ABAEB1
+B1B1B1B1B1B3B3B6B7B9B9B9B9B9B7B7B6B1B1AEABA6A49E9C9A94928E877F747F89949CA4A9B1B7
+B9BEC1C6C6C6C9C8C6C6C6C1BEB9B7B1AEABA9A6A6A6A4A4A3A1A1A1A1A19E9E9E9C9C9C9E9C9C9C
+9A9A9A9A898C9292929A99949494929292928F8C8989878787858585858585858587878787878787
+8787878584817F7F7F7F7C7C7C7976767676767676767474747472716C6C6A6A6764615F5755554F
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7F878992999CA6AEB9C4CFD9DCDFE1E1DFD9D4D3CFCFC9C6C1BEBBB9
+B6B1ABA6A39E9C9C9EA3A6A9AEB3B9BBC1C6C8C8C9CCCCC8C6C1BEB9B6B1AEA9A6A19C99928E877F
+796C61574F4F55595F61666661615F5755555D61676A6C72727271716C6C6A64594F595F5F616667
+676767676A6A6A6A6A6766666666666767676A6A6A6A6C6C6C6C6C72727474747474747474747474
+7476767676767C7C7C7C7F7F8487878989898E8F929294999A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+999494928F898987817F7C7C7976767474747476797C7C7F8185878989898C8F9292949494949496
+999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A3A3A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494949494
+94949494949492929292929292929292928F8F8F8E8E8C8989898989898989898989898989898989
+898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8C8989898989898989
+89898989878989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8F8F8F8F92929292929292
+9494949494949494949496999A9A9A99949494949494949494949494949494929292929292929292
+9292929292928F8F8F8F8F8F8F8F8E8E8E8E8C8C898989898989898787877F89929C9EA6ABAEB1B3
+B6B3B3B3B6B7B9B9B9B9B9B9B9B9B9B9B7B3B1AEA9A6A39E9C9A94928984797C89949CA3A6AEB6B9
+BEC1C6C6C6C8CCC8C6C6C1C0BBB9B3B1AEA9A6A6A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9A9A9A87898E92949A9A99949494949492928F8E8989898787878585858585858585878787878787
+8787878784817F7F7F7F7C7C7C7C79767676767676767474747472716C6C6A6A6766615F59575551
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7681878C929A9EA6B1BBC6D1D9D9DFDFDFD9D9D4D1CFCCC6C6C1BBB9B7
+B1AEA6A49E9C9C9C9EA4A9AEB1B9BBC1C6C6CCCCCCCFCCCCC6C6C0B9B7B1AEA9A6A49E9C94928984
+7C746A5F544F4F575C5F61676764615F5957575C5F666A6C6E6C6C6C6C6C6A67615751595F5F6164
+6767676767676A6A6A6A67676767676767676A6A6A6A6A6C6C6C6C6C717272747474747474747474
+747476767676797C7C7C7C7F7F8185878789898C8F929294949A9A9A9A9C9C9C9C9C9C9C9A9A9A99
+999494928F8E898787817F7C7C79767674747476797C7C7F7F8487878989898E9292929294949494
+999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494
+949494949494949494949492929292929292929292928F8F8E8E8989898989898989898989898989
+8989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8C89898989898989
+89898989898989898989898C8C8C8E8E8E8E8E8F8E8E8E8E8E8E8E8E8F9292929292929292929294
+94949494949494949696999A9A9A9A999999999994949494949494949494929292929292928F8F8F
+8F8F8F8F8F8F8E8E8E8E8E8E8E8C8C8C8989898989898989878787878779878F999EA4A9AEB1B3B9
+B9B9B9B9B9B9B9B9BBBBBBBEBBBBBBBBB9B3B1AEA9A4A19E9C99928E877C7C87929A9EA6ACB1B9BE
+C1C4C6C8C8C9CCC8C6C6C1BEB9B6B1AEA9A6A6A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A
+9A677F8C8E8F92969A9A99949494949492928F8E8989898787878585858585858585878787878787
+8787878584817F7F7F7F7C7C7C7C79767676767676767474747472726C6C6A6A6A6761615D575554
+4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7C87898F949CA3A9B3BEC6D1D9D9DCDFDCD9D4D1CFCCC8C6C1BEBBB9B3
+AEA9A69E9C9C9C9EA3A6ABB1B6B9C1C6C6CCCFCFCFCFCFCCCCC6C1BBB9B3AEA9A6A49E9C99948E87
+7F766C61594F4F55595D6167676761615F5C59595F61666A6C6C6C6C6C6C6A6A66615754575D5F61
+616767676767676A6A6A6767676767676767676A6A6A6A6C6C6C6C6C6C6E72727474747474747474
+747676767676797C7C7C7C7C7F7F818487878789898E929294949999999A9A9C9C9C9C9C9A9A9999
+96949492928E898987847F7F7C7C7C7674747476767C7C7F7F8185878789898C8F92929292949494
+999A9A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494949494949494
+949494949494949494949494949494949292929292929292928F8E89898989898989898989898989
+8989898989898989898C8C8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+8989898989898C8C8C8E8E8E8E8F8F8F8F8F92928F8E8E8E8E8E8E8F929292929292929292929294
+94949999999999999999999A9A9A9A9A99999999999494949494949494929292929292928F8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787878785747F8C949CA4A9AEB1B6B7B9
+B9B9B9B9B9B9BBBBBBBEC0C0C0BEBBBBB9B3B1ABA6A49E9C9A9492897F7C8792999CA4A9B1B7BEC1
+C4C6C9CCCCCCCCC8C6C6C1BBB7B1AEA9A6A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A
+5F7F8C8F92929499999999949494949492928F8E8C89898987878785858585858585858787878787
+8787858584817F7F7F7F7F7C7C7C7C767676767676767474747472726C6C6A6A6A6764615F595755
+4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7F878992999CA4AEB6BEC6D1D4D9D9DCD9D4D3CFCCC8C6C1C0BBB9B3B1
+AEA6A49E9C9A9C9EA4A9AEB6B9BEC6C6CCCFD1D1D3D3D1CFCCC6C1BEB9B6B1ABA6A4A39E9A949289
+847C72675F554F4F575C5F6167676761615F5F5D5F6161676A6A6A6A6A6A6A6A67615F5755595D5F
+61616767676767676A6A6A67676767676767676A6A6A6A6A6C6C6C6C6C6C6E727274747474747474
+76767676767676797C7C7C7C7C7C7F7F8185878789898E8F929294949496999A9A9A9A9A9A9A9999
+94949492928F8C898787847F7F7C7C7B76747476767B7C7C7F7F8187878789898E92929292929494
+999A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292928F8E8E8C8C8C8C89898989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+898C8C8C8E8E8E8E8E8E8F8F8F929292929292928F8F8E8E8E8F8F8F929292929292949494949494
+9499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494929292929292928F8E8E8E
+8E8E8E8E8E8E8E8E8C898989898989898989898989898787858484817C87929AA3A6AEB1B6B7B9BB
+BBBBBBBBBBBBBBBEC0C1C1C1C1C0C0BBB9B3B1A9A6A49E9C99928E856C878F999CA3A6AEB6B9C1C4
+C6C8CCCCCCCCCCC6C6C1BEB9B3B1ABA6A4A4A19E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9C9A74
+7F89898E929494949494949494949492928F8F8E8E89898987878785858585858585858787878787
+8785858484817F7F7F7F7F7C7C7C7C797676767674747474747472726E6C6A6A6A6766615F5C5755
+514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF7C85878E949A9EA6AEB9C1C8D3D4D4D9D9D4D4CFCFC9C6C4C1BBB9B6B1AE
+A9A49E9C9C9C9EA3A6AEB1B9BEC4C6CCCFD3D3D4D4D4D3D1CFCCC6C0BBB6B1AEA9A6A49E9C99948F
+877F766C615C544F54595D5F6667676766615F5F5F616166676A6A6A6A6A6A6A6A67615F55555C5F
+5F61616767676767676A6A6767676767676767676A6A6A6A6C6C6C6C6C6C6C727274747474747474
+76767676767676797B7C7C7C7C7C7C7F7F8184878789898C8F929292949494999A9A9A9A9A999994
+94949492928F8E8989878784817F7F7C7976767676797C7C7F7F8184878787898C8F929292929494
+96999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292928F8F8F8E8E8E8E8E8E8C8C8C8C8C
+898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8C8E8E
+8E8E8E8E8E8E8E8E8E8F92929292929292929292928F8F8F8F929292929292929292949494949494
+94999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494929292929292928F8E8E8E8E
+8E8E8E8E8E8E8E8E8989898989878789898989898987878481817F76848F969EA6ACB1B7B7B9BEBE
+BEBEBEBEBEBEC0C1C1C1C4C4C1C1C1BBB7B3AEA9A4A19C9A9492897F878E949CA3A6AEB1B9BEC6C6
+C8CCCFCFCFCFC8C6C1BEB9B6B1AEA9A6A49E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A767F
+878989898E9294949494949494949492928F8E8E8E89898989878787858585858585858587878787
+8585848484817F7F7F7F7F7C7C7C7C797676767674747474747474726E6C6A6A6A6A6761615D5755
+544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF7F87898F949C9EA6B1B9C1C8D3D3D4D9D4D4D1CFCCC6C6C1BEBBB9B1AEA9
+A6A19C9C9A9C9EA4ABB1B9BEC1C6CCCFD3D4D4D7D9D4D4D3D1CCC6C1BBB9B1AEA9A6A4A49E9C9992
+89847C72675F574F4F575C5F6167676A6767616161616166676A6A6C6C6C6C6C6A6A67615D55555D
+5F6161666767676767676A6A67676767676767676A6A6A6A6A6C6C6C6C6C6C717272747474747474
+747676767676767676797C7C7C7C7C7C7C7F7F8487878789898E9292929494949999999999999694
+9494949292928F8C8987878784817F7F7C79767676797C7C7F7F818487878789898E8F8F92929494
+94999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494929292928F8F8F8F8F8F8F8E8E8E8E8E
+8E8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929294949494949494
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996949494949494949292928F8F8F8F8E8E8E8E8E
+8E8E8E8E8C8C8C8C8989898787878787898989878785817F7F7F747F89949CA4ABB1B7B9B9BEC0C1
+C1C0C0BEBEC0C1C1C6C6C6C6C6C4C1BBB7B1AEA9A49E9C99928E728992949CA3A6ABB1B7BEC1C6C8
+CCCFCFCFCFCCC6C1C1B9B7B1AEA9A6A49E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99997F8487
+89898989898F92929494949494949292928F8E8E8E8C898989878787858585858585858587878785
+8585848481817F7F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6A6A6A6764615F5C57
+554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7684878992999CA3A9B1B9C1C8D1D3D3D4D3D1CFCCC8C6C1C0BBB9B3AEABA6
+A49E9C9C9A9CA4A6AEB6BEC1C6CCCFD3D4D9D9D9D9D9D4D4D3CCC6C1BBB9B3AEABA9A6A49E9C9A94
+8F877F766C615D554F4F575D5F64676A6A6A676661616166676A6A6A6C6C6C6C6C6C6A67615C5557
+5F5F61616767676767676767676767676A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C7272747474747474
+7476767676767676767679797C7C7C797C7C7F7F8185878789898C8F929292949494949494969494
+9494949292928F8E898987878784817F7F7C767676797C7C7F7F7F818587878989898E8F92929494
+9499999A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A3A4
+A4A4A4A4A4A4A4A4A3A1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494929292929292929292928F8F8F8F8F8F
+8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292949494999999999999
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999949494929292929292928F8E8E8E8E8E8C8C8C8C
+8989898989898989898987878787878787878584817F7F7C7C6A7C87929AA3A9AEB7BEBEBEC1C1C1
+C1C1C1C1C1C1C1C6C6C6C6C6C6C6C1BBB6B1AEA6A39E9A94926C87949A9CA3A6ABB1B4B9BEC6C6CC
+CCCFCFCFCFCCC4C1BEB9B1AEA9A6A4A19E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99968187898E
+8989898989898F929292929294929292928F8E8E8E8C898989898787878585858585858587878585
+858584818181817F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6A6A6A6766615F5D57
+55514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7C87898F949A9CA4AEB3B9C1C9CFD1D3D3D1CFCCC9C6C4C1BEB9B9B1AEA9A4
+9E9C9C9C9C9EA6ACB4B9C1C6CCCFD3D4D9D9D9D9D9D9D9D4D3CFC8C1C0B9B6B1AEABA6A6A49E9C9A
+948C877C726A6157514F55575D61676A6A6A6A6A676666676A6A6A6A6C6C6E71716C6A6A615F5955
+575F6161666767676767676767676767676A6A6A6A6A6A6A6A6A6C6C6C6C6C6C7172747474747474
+747476767676767676767676797B7979797C7C7C7F8184878789898C8E8F92929494949494949494
+9494949292928F8E8E898989878785817F7C7C7979797C7C7C7F7F818487878989898E8F92929294
+949499999A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A3A3
+A3A4A4A4A4A4A4A3A19E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9C9C9C9A9A9A
+9A9A9A9A9A9A9A9A99999A9A99949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292928F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F92929292929292929292929292929292949494949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949292929292928F8E8E8E8E8E8C89898989
+8989898989898989898787858484848584817F7F7C7C79766C76818E949EA6AEB6BCC1C1C1C1C6C6
+C6C6C4C1C1C1C6C6C8C8C9C8C8C6C1BEB6B1ABA69E9C99947C89949A9EA4A6A9AEB3B7BCC1C6C9CC
+CFCFCFCFCFC6C1BEB9B6B1ABA6A4A39E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9981898E928F
+8E8C89898789898F92929292929292928F8E8E8E8E8C898989898787878585858585858585878585
+858584818181817F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6A6A6A6A6761615F59
+5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7F878992949C9EA6AEB3B9C1CCCFCFCFCFCFCCC9C6C6C1BEBBB9B3AEA9A6A3
+9E9C9C9A9EA4A9B1B9BEC4C8CFD3D4D9D9D9D9DCD9D9D9D4D3CFC9C6C1BBB9B1AEAEA9A6A6A39E9C
+9992897F766C665F574F4F55595F61676A6A6A6A6A6767676A6A6C6C6C6C727272716C6A67615F57
+545C5F61666767676767666666666767676A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C72727474747474
+7474767676767676767676767679767676797C7C7C7F7F8487878989898E8F929294949494949494
+9494929292928F8E8E8C8989898987817F7F7C7C7B7C7C7C7C7F7F818487878789898C8E8F929294
+94949499999A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A3A4A4A4A4A4A3A19E
+A1A1A3A3A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+9A9A9A9A9A9A9A999999999999949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F92929292929292929292929292929294949494949494949494949494999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949492929292928F8F8F8E8E8E8E8C8989898989
+898987878787878787858481817F7F7F7F7F7C7976747472767C89949CA4AEB4B9C1C6C6C6C6C6C6
+C6C6C6C6C6C6C6C8CCCCCCCCC9C8C1BEB7AEA9A49E9A947F89999C9EA4A9ABAEB1B9B9BEC6C8CCCF
+CFCFCFCFCFC6C1BBB9B1AEA9A6A49E9E9C9C9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A81898F929492
+928F89898787898C8E8F92929292928F8F8E8E8E8E8C898989898987878785858585858585858585
+8585858181817F7F7F7F7F7C7C7C7C7C797676767474747474747472726C6C6A6A6A6A6764615F5D
+5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF7C84898E94999C9EA6AEB6BBC1CCCCCFCFCFCCC9C6C6C1C1BBB9B7B1AEA6A49E
+9C9C9A9CA3A6AEB6BEC1C6CCD1D4D4D9DCDCDCDCDCD9D9D7D4CFCCC6C1BEB9B6B1AEAEA9A6A4A19E
+9A948E877C746A615C554F51575C6166676A6C6C6A6A6A6A6A6A6C6C6C6E727272726E6C6A615F5C
+574F5F6166676767676766616464666767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C71727474747474
+7474747676767676767676767676767676767B7C7C7C7F7F8185878789898E8F9292929292929494
+9494929292928F8E8E8E8C8989898784817F7F7C7C7C7C7C7C7F7F818485878789898C8E8F929294
+9494949499999A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A4A4A4A39E9E
+9E9EA1A1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929294949494949494949494949494949494949499999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949494949292928F8F8F8E8E8E8E8E8E8E898989898989
+898787878787878584817F7F7F7F7F7F7C7C7674746E74767687929AA3A9B1B9BEC6C8C8C8C8C8C8
+C8C6C6C6C6C6C8CCCCCFCFCCCCC9C4BCB3AEA69E9C9A8589999EA4A6A9AEAEB1B7B9BEC1C6CCCFCF
+D1CFCFCFCCC6BEB9B3AEA9A6A4A19E9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C7F898F92949494
+94928E8787878789898E8F929292928F8E8E8E8E8E8E898989898987878785858585858585858585
+85858581817F7F7F7F7F7F7F7C7C7C7C797676767674747474747472726C6C6A6A6A6A6766615F5F
+595754514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF7F878992949A9CA4A6AEB7BEC1C9CCCCCFCCCCC8C6C4C1BEB9B9B3AEA9A4A39E
+9C9A9C9EA6A9B1B9C1C6CCCFD4D4D9D9DCDCDCDFDCDCD9D9D4D1CCC6C1C0B9B7B3B1AEABA9A6A49E
+9C949289817672675F57514F55575F61676A6C6C6C6A6A6A6A6A6C6E727272727474726E6C6A665F
+5C55575F61676A6A6A6767616161616667676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6E727274747474
+747476767676767676767676767676767676797C7C7C7C7F7F8484878789898E8F92929292929292
+929292929292928F8E8E8E8C89898787817F7F7F7C7C7C7C7C7F7F81818487878989898E8F929292
+9494949494999A9A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A19E9E
+9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A99969494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292928F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92
+929292929292929292949494949494949494949494949494969999999999999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9999999999949494929292929292928F8E8C8C8C8C8C898989898989898989
+87878785858484817F7F7C7C7C7C7C7C767472716A747976818C949EA6AEB7BEC4C8C9C9C9C9C8C8
+C8C8C8C8C8C8CCCCCFCFCFCFCFC8C1B9B1A9A49E9C8C949CA4A6A9AEB1B1B6B7B9BEC1C4C9CCCFD1
+D3D1CFCFC9C4BEB7B1AEA6A6A49E9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C7F898F9294999A9C
+9A948F898784878789898E8F8F928F8E8E8E8E8E8E8E898989898989878787858585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C797676767674747474747472726E6C6C6A6A6A676661615F
+5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7981878C92949A9EA4A9B1B9BEC6C8C9CCCCC9C8C6C4C1C0BBB9B6B1AEA6A49E9C
+9A9C9CA4A6AEB6BEC6C9CFD3D4D9D9DCDFDFDFDFDFDCD9D9D4D3CFC8C6C1BBB9B6B1B1AEABA6A6A1
+9C99948F877C746C645D554F4F55595F64676A6C6C6C6C6C6C6C6C6E7272747474747472716C6A66
+5F59545961666A6A6A6A67666161616166676A6A6A6A6A6C6C6C6C6C6C6E71717171727274747476
+767676767676767676767676767676767676767C7C7C7C7C7F818184878789898C8F929292929292
+9292929292928F8F8E8E8E8C8989878784817F7F7F7C7C7C7C7F8181848487878789898C8F929292
+9494949494999A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9EA19E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9C9A9A9A9A9A
+9A999999999999949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F92
+9292929292929292929494949494949494949699999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A99949494949494929292929292928F8E8C8989898989898989898989898987
+8784818181817F7F7C7C7C797674747472727171797C797C89929CA4AEB6B9C1C6CCCCCCCCCCC9C8
+C8C8C8C8C8CCCCCFD1CFCFCFCCC6BEB7AEA6A39C929A9EA4A6ABAEB1B3B9B9BBBEC1C6C6CCCFCFD3
+D3D1CFCFC6C1B9B3AEA9A6A49E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C7F898F92949A9A9C9C
+9C9492898781848787898C8E8F8F8F8E8C8E8E8E8E8E8C8989898989878787858585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C797676767674747474747474726E6C6C6A6A6A676661615F
+5D5757544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7C85898F94999C9EA6A9B1B9BEC6C6C8C8C8C6C6C6C1C0BBB9B7B1AEA9A49E9C9A
+9C9C9EA6ABB1B9C1C8CCD1D4D9D9D9DFDFDFDFDFDFDEDCD9D4D3CFC9C6C1BEBBB9B6B1AEAEA9A6A4
+9E9A9492898176726A6159554F51575D61676A6C6C6C6C6C6C6C6C71727474747474747474716C6A
+666157545F646A6A6A6A6A6A666161616166676A6A6A6A6C6C6C6C6C6C6E72727272727272747476
+76767676767676767676767676767676767676797C7C7C7C7F7F818184878789898C8F8F8F8F8F92
+92929292928F8F8F8E8E8C8C898987878781817F7F7F7C7C7F7F8184848587878789898C8E8F9292
+949494949494999A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9C
+9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999494949494949494949494949292929292949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292928F8E8F8F8F8F8F8F8F8F8F8F8F8F8F9292929292
+929292929292929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A99949494949494949292928F8F8F8F8E8C898989898989898787878787878785
+81817F7F7F7F7C7976747472727274747472767C7F7C76848F9AA3ABB1B9BEC4C9CCCCCCCCCCC9C9
+C9C9C9C9C8CCCFCFD3CFCFCFCCC4BCB1AEA69E899A9CA4A9ABAEB1B3B6B9BBBEC1C6C6CCCFCFD3D4
+D4D1CFCCC6BEB7B1ABA6A4A19E9C9C9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E76898E92949A9C9C9E9E
+9C9A948F898181858789898C8E8E8E8C8C8E8E8E8E8E8C8989898989898787878585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C7B767676767474747474747472716C6C6A6A6A6A6761615F
+5F5C5755514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF727F878C92949A9CA3A6ABB1B9BEC4C6C6C6C6C6C6C1C0BBBBB9B3B1ABA6A39E9C9A
+9C9EA4A9AEB6BEC6CCCFD4D9D9D9DCDFDFDFDFDFDFDFDCD9D4D3CFCCC6C1C0BBB9B6B1B1AEABA6A4
+9E9C969289877C746C675F57544F55575F61676A6C6C6C717171727272747474747474747474726C
+6A665F575161676A6C6C6C6A6766615F6161676A6A6A6A6C6C6C6C6C6C6C71727272727274747476
+7676767676767676767676767676767676767676797C7C7C7C7F7F818184878789898C8E8E8E8E8F
+8F8F9292928F8F8E8E8C8C8989898987878481817F7F7C7F7F7F8184858787878789898C8E8F9292
+949494949494999A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C
+9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A99999A9A9A9A9A9A
+99969494949494949494949494929292929292929494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292928F8F929292929292929292929292929292929292
+929292929292929494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A99999494949494949292928F8E8E8E8E8E89898989898989878787878787858481
+7F7F7F7F7C7976747472727274767674767F7F7F7F7C7F89949EA6AEB7BEC1C6CCCFCCCCCCCCCCCC
+CCCCCCC9C9CCCFD1D3CFCFCCC8C1B9B1A9A47F969EA4A9AEAEAEB1B6B9B9BEC1C1C6C8CCCFD1D3D4
+D3CFCFC8C1B9B3AEA9A4A39E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E72878C9294999C9E9EA3A3
+9E9C949289877F84878789898C8C8C8C898C8E8E8E8E8C8989898989898787878585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6C6A6A6A6764615F
+5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7C81898E92949A9EA4A6AEB3B9BEC1C6C6C6C6C4C1C1BEBBB9B3B1AEA6A49E9C9C9C
+9EA1A6AEB4B9C1C6CFD3D9DCDCDCDFDFE1E1E1E1DFDFDED9D4D3CFCCC6C1C0BBB9B6B1B1AEABA6A4
+A39C9A928E877F76726A615D554F4F555C61666A6C71717272727272727474747476767674747472
+6C6A6661574F666A6C6C6C6C6A67665F5F61616A6A6C6C6C6C6C6C6C6C6C71727274747474747474
+767676767676767676767676767676767676767676797C7C7C7F7F7F81818485878989898C8C8C8E
+8E8E8F928F8F8E8E8C8C898989898987878584817F7F7F7F7F7F818487878787878989898E8F9292
+929494949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A999999999999999999
+99949494949494949494949494929292929292929494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494929292929292929292929292929292929292929292929292929292929292
+9292929494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+9999999999999999949494929292929292928F8C8C8C89898989898989898787878585848481817F
+7F7C7C79767674747476797C7C797B7F8181847F7C7687929CA6ACB6BEC1C6CCCFCFCFCFCFCCCCCC
+CCCCCCCCCCCFD1D3D4CFCCCCC6BEB7AEA6768EA3A4A6AEB1B1B1B3B9B9BBBEC1C6C6CCCFCFD3D4D4
+D1CFCCC6BEB9B1ABA6A49E9C9C9C9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E84899294999C9EA1A4A6A4
+A39C99928E8781818787898989898C8C89898E8E8E8E8C8989898989898987878785858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C7C767676767674747474747472716C6C6C6A6A6A6766615F
+5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7F87899294999C9EA4A9AEB3B9BEC1C1C4C6C1C1C1BEBBB9B7B1AEA9A69E9C9C9A9C
+9EA4ABB1B9BEC4CCD3D4D9DFDFDFDFE1E1E1E1E1DFDFDCD9D4D3CFCCC6C1C0BBB9B6B1AEAEA9A6A4
+A19E9A948F89817C746C676159554F51555F61676A71717272727474747474767676767676767474
+726C6A6661575F6A6A6C6C6C6C6A67615F5F61676A6A6C6C6C6C6C6C6C6C6C727274747474747474
+76767676767676767676767676767676767676767676797C7C7C7F7F7F8181848587898989898989
+8C8E8E8F8F8E8E8E8C8989898989898787858584817F7F7F7F7F818485878787878789898C8F9292
+929494949494999A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A9A9A9A9A9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999494949494949496
+94949494949494949494949494949494949292949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494929292929292929292929292929292929292929292929494929292929292
+92929294949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+949494949494949494949492929292928F8E898989898989898989898987878784818181817F7F7F
+7C7976767676767C7F7F7F7F7F7F81858787817F797F8C96A1ABB4BCC4C6C6CCD1CFCFCFCFCFCCCC
+CCCCCCCCCCCFD3D4D4CFCCCCC4BCB1AEA4879CA6A9AEB1B3B3B1B7B9B9BEC0C1C6C8CCCFD1D3D4D4
+CFCCC9C4BCB6AEA9A49E9E9C9C9C9A9C9C9E9E9EA19E9E9E9E9E9E9E7F898F94999C9C9EA4A6A6A6
+A49E9A94928985818587878989898C8989898C8E8E8E8C8989898989898987878785858585858585
+85858585817F7F7F7F7F7F7F7C7C7C7C7C797676767674747474747472726C6C6C6A6A6A67666161
+5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF7C7F878C92949A9CA1A6ABB1B3B9BEC1C1C1C1C1C0BEBBB9B9B3AEABA6A49E9C9C9A9C
+A3A6AEB6BEC4C8D1D4D9DEDFE1E1E1E1E1E1E1DFDFDFD9D9D4D1CFCCC6C1C0BBB9B6B1AEAEA9A6A4
+9E9C9A949289857F76726A665F57554F51575F646A6C727274747474747476767676767679797676
+74746C6A666157616A6C6C6C6C6C6A67615F5F61676A6C6C6C6C6C6E6E7171717274747474747476
+7676767979797976767676767676767676767676767676767B7C7C7F7F7F7F818185878989898989
+898C8E8E8F8E8E8C89898989898989878787858481817F7F7F7F7F8185878787878989898C8E8F92
+9294949494949499999A9A9A9A9A99999A9A9A9A9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9A9A9A
+9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A99999A9A99969494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292949494949494949494949494949494949292929292
+92929494949494949494949499999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996
+94949494949494949492929292928F8F8C89898989898987878787878787878481817F7F7F7F7C79
+767679797C7C7F8484848484848787878787817C7C87929CA6AEB7BFC6CCCCD1D3D1CFCFCFCFCCCC
+CCCCCCCCCFD1D4D4D3CFCCC8C1B9B1A98194A6AEB1B3B9B9B7B6B9B9BBBEC1C4C6C9CCCFD3D4D4D3
+CFCCC6C1B9B1AEA6A39E9C9C9A9A9C9C9C9E9EA3A39E9E9E9E9C9C7C898F92949A9C9EA4A6A9A9A6
+A4A19C94928C878484878787898989898989898E8E8C8C8989898989898989878785858585858585
+85858584817F7F7F7F7F7F7F7F7C7C7C7C797676767674747474747472726C6C6C6C6A6A67666161
+5F5F5D5757544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF7F84898F92949A9EA4A6AEB1B3B9BEBEC0C1C1C0BEBEBBB9B7B1AEA6A49E9E9C9C9C9E
+A4ACB4B9C1C6CCD4D9DCDFE1E1E1E1E1E1E1E1DFDFDCD9D9D4CFCFCCC6C1C0BBB9B6B1AEAEA9A6A4
+9E9C9A94928C877F79746C67615D57514F545D61676A7172747474747676767676767979797C7C79
+7676746E6A676157676A6C6C6C6C6C6A665F5F61666A6C6C6E717171717272727272747474767676
+76767C7C7C7C7C797976767676767676767676767676767676797C7C7C7F7F7F7F81858787878989
+89898C8E8E8E8C8C89898989898987878787858584817F7F7F7F7F8184878787898989898C8E8F92
+929292949494949499999A9A9A9A999699999A9A9A9A9C9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A
+9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999699999999949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+929494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+949494949494949492928F8F8F8E8E8989898787878787878787878785858581817F7F7C7C7C7979
+7C7C7F7F84878787878787878789898987857F76848E9AA4AEB6BEC6CCCFD1D4D4D3D1D1CFCFCFCC
+CCCCCCCCCFD3D4D9D3CFCCC6BEB6AE7F92A4B1B3B7B9BBB9B9B9B9BBBEBEC1C6C6CCCFD1D3D4D9D3
+CCC8C6BEB6AEA9A49E9E9C9A9A9A9C9C9E9E9EA3A19E9E9C9C9C66878E9294999C9EA4A6A9ABA9A6
+A6A49C96928F898784878787898989898989898C8E8C8C8989898989898989878785858585858585
+8585848484817F7F7F7F7F7F7F7C7C7C7C797676767676747474747472726E6C6C6C6A6A67666161
+5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF767F87899294999C9EA4A9AEB1B3B9BBBEBEC0C0BEBEBBB9B9B3AEA9A6A49E9C9C9A9CA4
+A6AEB7BEC6CCD1D7D9DFE1E1E1E1E1E1E1E1DFDFDEDCD9D4D3CFCFCCC6C1C0BBB9B6B1AEAEA9A6A4
+9E9C9A94928C877F7C746E6A665F59554F4F575F61676C727474767676767979797979797C7C7C7C
+7C797674726C6A61596A6A6C6C6C6C6A6A646161616A6A6C6E727272727272727272747476767676
+76797C7C7C7C7C7C7C7C79797976767676767676767676767676797C7C7C7C7F7F7F818587878789
+8989898C8E8C8C898989898989878787878785858584817F7F7F7F818487878789898989898E8F92
+92929292949494949496999999999994949999999A9A9A9A99999999999A9A9A9A9A9C9C9A9A9999
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494
+9492929292929292928F8E8E8E8C8989878787878787858585858585858584817F7F7C7C7C7C7C7F
+7F8185878989898C8C898989898E8C8987817C7F89949EA9B1BCC4CCCFD1D3D4D4D3D3D1CFCFCFCC
+CCCCCCCCCFD3D4D9D3CFC9C6BCB1A9929EABB1B6B9BBBBBBBBBBBBBBBEC1C1C6C8CCCFD1D4D4D9D1
+CCC6C1B9B1AEA6A49E9C9A9A9A9A9C9C9E9E9EA19E9E9C9C9C9C87899294949A9EA3A6A6ABABA9A9
+A6A69E9A929289878785878789898989898989898C8C898989898989898989878785858585858585
+8584848484817F7F7F7F7F7F7F7C7C7C7C797676767676747474747474726E6C6C6C6A6A67666161
+5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF7C81878E92949A9C9EA6A9AEB1B3B7BBBBBBBEBEBBBBB9B9B6B1AEA6A4A39E9C9C9CA1A6
+AEB6BEC1C8CFD4D9DCDFE1E1E1E1E1E1E1E1DFDFDCD9D9D4D1CFCCC9C6C1C0BBB9B6B1AEABA6A6A3
+9E9C9A94928E89817C74726A67615F57554F4F595F666A717474767679797C7C7C797C7C7C7C7C7C
+7C7C7C7974726C6A615C6A6A6C6C6C6C6A6A616164676A6C6C727272727272727272747476767679
+79797C7C7F7F7F7C7C7C7C7C7C7976767676767676767676767676797C7C7C7C7C7F7F8185858787
+898989898C8C89898989898987878787878785858584817F7F7F7F818485878787898989898C8E8F
+929292929294949494949494949494949494949999999A99969494949999999A9A9A9A9A9A999996
+999999999A9A9A9A9A9A9A9A9A9A9A999999999999999A9A99949494949494949494949494949494
+94949494949494949494949494949494999999999999999999969494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494
+949292929292928F8E8C8C89898987878787858585858585858585858584817F7F7C7C7C7F7F7F81
+878789898E8F928F8F8F8E8E8F8E8989857F7987929AA4AEB9BEC6CFCFD1D4D4D4D4D3D1CFCFCFCF
+CFCFCFCFD1D4D9D9D3CFC8C1B7AE8E9AA6B1B1B6B9BBBBBBBBBBBBC0C1C1C6C6CCCFCFD3D4D9D4CF
+CCC6BEB7AEA9A69E9C9C9A9A9A9C9C9C9E9E9E9E9E9C9C9C9C85899292949A9C9EA4A6ABAEAEA9A9
+A6A69E9A92928E898787878789898989898989898C89898989898989898989878785858585858585
+8584848481817F7F7F7F7F7F7F7C7C7C7C7B767676767676747474747472716C6C6C6C6A6A676161
+5F5F5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF727F85898F92969A9EA4A6A9AEB1B3B7B9B9BBBBBBBBBBB9B7B3AEA9A6A49E9E9C9C9EA4A9
+B1B9C1C6CCD1D7D9DCDFE1E1E1E1E1DFDFDFDFDCDCD9D9D4D1CFCCC8C6C1C1BBB9B9B3B1ABA9A6A4
+9E9C9994928E89847F76726C67615F5C57554F545D61676C727476797C7C7C7C7C7C7C7C7C7C7C7F
+7F7C7C7C7C7674716A665C6A6C6C6C6C6C6A676664676A6C6C717272727272747474747474767979
+7C7C7C7C7F7F7F7F7F7F7F7C7C7C7B767679797676767676767676767979797C7C7C7F7F81848485
+87898989898989898989898787878787878785858484817F7F7F7F7F8185878787898989898C8E8E
+8F8F92929292929494949494949494949494949494999999949494949494969999999A9A9A999494
+94949499999999999A9A9A9A9A9A9A99949494949699999999949494949494949494949494949494
+94949494949494949494949494949496999A9A9A9A9A9A9999999999999999999694949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494969699999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494
+9292929292928F8C898989898987878585858585858585858585858584817F7F7F7F7F8184878787
+898C8F9292929292929292928F8E89878176818C949EA9B6B9C1CCCFCFD3D4D4D4D4D3D1CFCFCFCF
+CFCFCFCFD1D4D9D4CFCCC6BCB487949EA9B6B6B9B9BBBBBBBBBBBEC0C1C1C6C8CCCFD1D4D4D9D4CF
+C8C1B9B1A9A6A49E9C9C9A9A9A9C9C9C9C9E9E9E9C9C9C9A8189929294999C9EA1A6A9AEAEAEA9A9
+A6A6A39C94928F898987878789898989898989898989898989898989898989878785858585858585
+8585848181817F7F7F7F7F7F7F7C7C7C7C7C767676767676747474747472716C6C6C6C6A6A676461
+5F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF7C8187899294999C9EA4A6ABAEB1B3B7B9B9B9BBBBBBB9B9B6B1AEA9A4A49E9C9C9CA3A6AE
+B6BEC6C8CFD4D9D9DCE1E1E1E1E1E1DFDFDFDFDCD9D9D4D3CFCFCCC8C6C1C1BBBBB9B3B1AEA9A6A4
+9E9C9A94928F89877F7C746E6A615F5F5757544F575F616A6C7474767C7C7C7F7F7C7C7C7C7F7F7F
+7F7F7F7C7C7C7974726C675F4F6C6C6C6C6C6A6A66676A6A6C6E727274747474747474747476797C
+7C7C7C7C7F7F7F7F7F7F7F7F7F7C7C7B79797C7976767676767676767676767679797C7C7F7F8181
+8587898989898989898987878787878787858584848181817F7F7F7F818485878787898989898C8E
+8E8F8F92929292929494949492929292949494949494949494949494949494949499999999999494
+9494949494949699999999999A9A9996949494949494949494949494949494949494949494949494
+949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999999969494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949496999999
+999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494
+9292928F8F8E89898989898787878585858585858585858585858584817F8181848587878989898E
+8F9292949494929292929292928E89847C7C89929CA6B1B9BEC6CCCFCFD3D4D4D4D4D3D1D1CFCFCF
+CFCFCFCFD3D4D9D1CCC6C1B77C999CA4B1B7B7B9BBBEBBBBBBBBC0C1C1C6C6C9CCCFD3D4D9D9D4CF
+C6BEB7AEA6A49E9C9C9A9A9A9A9C9C9C9C9E9E9C9C9A9A7F89929294949A9C9EA3A6AEB1B1AEABA9
+A6A6A39C94928F8E8987878787898989898989898989898989898989898989878787858585858585
+8585848181817F7F7F7F7F7F7F7C7C7C7C7C767676767676747474747472716C6C6C6C6A6A676661
+615F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF7F84898E92949A9C9EA4A6ABAEB1B3B7B9B9B9B9B9B9B9B6B1AEABA6A49E9E9E9E9EA4A9B1
+B9C1C8CCD1D4D9D9DFE1E1E1E1E1E1DFDFDFDCD9D9D9D4D3CFCFCCC8C6C4C1BEBBB9B6B1AEA9A6A4
+A39E9C9994928C89847F79746C665F5D5C5757514F575F666A7274767C7C7F7F7F7F7C7C7F7F7F7F
+817F7F7F7F7F7F7C76746E6A5F516C6C6C6C6C6A6A676A6A6C6E727274747474747474747476767C
+7C7C7C7C7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676767676767676767676797C7C7F7F
+8185878787878989898787878787878785858484818181817F7F7F7F7F8184858787878989898989
+8C8E8F8F929292929292949292929292929494949494949494949494949494949494949499949494
+94949494949494949494969999999994949494949494949494949494949494949494949494949494
+949494949494949494949999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999999
+99999694949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494999999999999999A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494929292
+92928F8E8C8989898787878787858585858585858585858585858584818485878789898C8E8F9292
+9294949494949494949292929289877F76878F99A1ABB6BEC1C6CFD1D1D3D4D4D4D4D3D3D1CFCFCF
+CFCFCFCFD3D4D9CFC8C4BE728E9EA4A9B6B9B9B9BBBEBEBEBBBEC0C1C4C6C8CCCFD1D3D4D7D9D1C8
+C1B9B4ABA6A39E9C9C9A9A9A9A9C9C9C9C9E9C9C9C9A7C8792929494999A9C9EA4A9AEB1B1AEABA9
+A6A6A39C9692928E8989878787898989898989898989898989898989898989898787858585858585
+8585848181817F7F7F7F7F7F7F7C7C7C7C7C797676767676767474747472726C6C6C6C6A6A676661
+615F5F5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF7C7F87898F94999A9CA3A6A9ABAEB1B3B6B7B9B9B9B9B9B7B3B1AEA9A4A39E9E9E9EA3A6AEB6
+BEC6CCCFD3D9D9DCDFE1E1E1E1E1E1DFDFDFDCD9D9D4D4D1CFCCC9C8C6C4C1BEBBB9B6B1AEA9A6A4
+A49E9C9A94928F8987817C76726A615F5C5757554F545C5F676C74767C7F7F7F7F7F7F7F7F7F7F81
+8181818181817F7F7C7674726A61546C6C6C6C6A6A6A6A6A6C6E7172747474747474747474747679
+7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676767676767474747676767C7C7F
+7F818587878787878787878787878785858484818181817F7F7F7F7F7F7F81848587878787898989
+898C8E8E8F8F92929292929292929292929292949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999999999996949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949492929292
+928F8E8C898989878787878585858585858585858585878787878785878789898E8F929292929494
+9494999999949494949492928E87817C7F89949CA6AEBCC1C4CCD3D3D3D4D4D4D4D4D3D3D1CFCFCF
+D1D1D1D1D3D4D4CCC6C172849EA6ABB1B9B9B9BBBEC0C0BEBEC0C1C1C6C6C8CCCFD1D1D4D4D4CCC6
+BEB7AEA6A49E9C9C9C9A9A9A9A9A9C9C9C9C9C9C9A76878F929494969A9C9EA1A6A9AEB3B1AEAEA9
+A6A4A39C9994928F8C89878787898989898989898989898989898989898989898787858585858585
+85858481817F7F7F7F7F7F7F7F7F7C7C7C7C797676767676767474747472726C6C6C6C6A6A6A6764
+615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF7F84878C9294999C9EA4A6A9AEB1B1B3B6B6B7B9B9B9B7B3B1AEA9A6A49E9E9E9E9EA4A9B1B9
+BFC6CFD1D4D9DCDEDFE1E1E1E1E1DFDFDFDCD9D9D9D4D3D1CFCCC8C6C6C4C1C0BBB9B7B1AEA9A6A6
+A4A19C9C9994928E8987817C76716A5F59575757554F555C616A7276797C7F7F7F7F7F7F7F7F8184
+84848484848484817F7F7C76746C61556C6C6C6C6C6A6A6A6C717272727474747474747474747676
+797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C79767676767676767674747474747676797C
+7F7F818485878787878787878787858585848181817F7F7F7F7F7F7F7F7F7F818485878787878989
+89898C8C8E8F8F929292929292929292929292929292949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9999999999999996949494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A
+9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494929292929292
+928F8E89898987878785858585858585858787878787878787878787898E8F929292929494949494
+999A9A9A999994949494929289857C7C87929AA4ACB7C1C6C6CFD3D3D3D4D4D4D4D4D3D3D1CFCFD1
+D1D1D1D1D3D4D1C8C184929EA6AEB1B9BBBBBBBEC0C0C0C0C0C0C1C4C6C6CCCFD1D1D1D3D4D1C6C1
+B9B1ABA49E9E9C9C9A9A9A999A9A9C9C9C9C9C9C9A878F92949494999A9C9EA3A6AEB1B3B1AEAEA9
+A6A4A19C9A94928F8E89898787898989898989898989898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C797676767676767474747472726E6C6C6C6A6A6A6766
+615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF767F85898F92949A9C9EA4A6A9AEB1B1B3B3B3B6B7B6B6B3B1AEABA6A4A3A19E9EA1A3A6AEB3BE
+C4CCD1D4D9DCDEDFE1E1E1E1E1E1DFDFDEDCD9D9D9D4D3CFCFCCC8C6C6C4C1C0BBBBB7B1AEABA9A6
+A4A49E9C9A9A9492928E89847F766E675F57575757554F575F676C74797C7F7F7F7F817F81818484
+878787878787878584817F7C79746C5F546C6C6C6C6C6A6A6C717272727474747474747474747476
+76797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7C7C7F7C7C7C7B79767676767676747474747474747679
+7C7F7F81848484858787878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F8184858787878789
+898989898C8E8E8F8F92929292929292929292929292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999999999996949494949494949494949494949494949494949494
+9494949494949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9C
+9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949292928F8F8F
+8E8E8C8989878787858585858587878787878787878789898989898E92929294949494949499999A
+9A9A9C9A9A9994949494928C877F76848E949EA6B4BCC6C6CCD1D4D4D4D4D4D4D4D4D4D3D1CFD1D3
+D3D3D3D3D3D7CFC689929CA6A9AEB3B9BBBBBEC0C0C0C0C0C0C1C1C6C6C8CCCFD3D1CFD3D4CCC4BE
+B7AEA6A19E9C9C9A9A9A99999A9A9A9C9C9C9C9A7F8E9294949494999A9C9EA4A9AEB1B3B1B1AEA9
+A6A4A19C9A9492928E8C898987898989898989898989898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C797676767676767474747474726E6C6C6C6C6A6A6766
+61615F5F5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF7C8187899294949A9CA1A4A6A9AEAEB1B1B3B3B3B3B3B3B1AEABA9A6A4A4A39EA3A4A4ABB1B9BF
+C6CFD3D4D9DCDFDFE1E1E1E1E1E1DFDFDCD9D9D9D7D4D3CFCFCCC8C6C6C6C1C1BEBBB9B3B1AEA9A6
+A6A4A39E9C9C9A949494928C877F766C665D57555757555459616A7276797C7F7F7F818181848487
+8787878787878787878484817F7C766C5F6C6C6C6C6C6C6C6C717272727474747474747474747474
+7676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C797979797676767474747474747476
+797C7F7F7F8184818484858785858585858584817F7F7F7F7F7F7F7F7F7F7F7F8184858585878787
+89898989898C8C8E8E8F8F9292929292929292929292929292929494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999999996969494949494949494949494949494
+9494949494949494949494949494949494949494949494949499999999999A9A9A9A9A9A9A9A9A9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949292928F8E8E8E
+8C8C8989898787858587878787878787878789898989898C8E8F9292949494949499999A9A9A9A9C
+9C9C9C9A9A99999494928F89817C7F89949CA4AEB7C1C6CCCFD4D4D4D4D4D4D4D4D4D4D3D1D1D1D3
+D3D3D3D3D4D4CC8C9299A4AEAEB1B6BBBBBBC0C0C1C1C0C0C0C1C4C6C6C9CFCFD3D1CFD1D1CBC1B9
+B1A9A49E9C9C9C9A9A9994999A9A9A9C9C9A9A7C8E9292949494999A9C9CA3A6A9AEB3B3B1B1AEA9
+A6A4A19C9A9492928F8E898989898989898989898989898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C79767676767676747474747472716C6C6C6C6A6A6A67
+64615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+727F85878E9294999C9EA3A6A6ABAEAEB1B1B1B1B3B1B1B1B1AEA9A6A4A4A4A3A3A4A4A6AEB3BBC4
+CCD3D4D9DCDFDFE1E1E1E1E1E1DFDFDCDCD9D9D9D4D4D1CFCCC9C6C6C6C6C1C1C0BBB9B6B1AEABA9
+A6A6A4A39E9E9C9C9C9C9A948F8981766C615C5555555554555D646C7476797C7F7F818484858587
+878789898989898987878787847F7C766A5D6C6C6C6C6C6C6C717274747474747474747474747474
+747676797C7C7C7F7F7F7F7F7F7F7F817F7F7F7F7F7F7F7C7C7C797C7C7976767474747474747474
+76767C7F7F7F81818181818484858585858584817F7F7F7F7F7F7F7F7F7F7F7F8184858585878787
+898989898989898C8C8E8E8F8F929292929292929292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999494949494949494949494949494
+9494949494949494949494949494949494949494949494949999999A9A9A9A9A9A9A9A9A9A9A9C9C
+9C9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9999999999949492929292928F8E8C8989
+898989898787878787878787898989898989898C8E8E8F92929292949494999A9A9A9A9A9C9C9C9C
+9C9C9C9A9A9A9994928F89877F7C87929AA3ABB4BEC6CCCFD3D4D4D4D4D4D4D4D4D4D4D3D1D1D3D3
+D4D4D4D4D461879C9C9EA6AEAEB1B9BBBBBBBEC0C1C1C1C1C1C1C6C6C6CCCFD1D3D1CFCFCFC6BEB6
+AEA6A19E9C9C9A9A999494999A9A9A9A9A9A7F899292949494999A9A9C9EA4A6ABB1B3B3B1B1AEA9
+A6A49E9C9A9494928F8E898989898989898989898989898989898989898989898787858585858585
+858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C767676767676747474747472716C6C6C6C6A6A6A67
+66615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+7C8187898F9294999C9EA4A6A9ABAEAEB1B1B1B1B1B1B1B1AEA9A6A4A4A4A4A4A4A4A6A9B1B9BEC6
+D1D4D9D9DFDFDFE1E1E1E1E1DFDFDFDCD9D9D9D4D4D3D1CFCCC8C6C6C6C6C4C1C1C0BBB9B3B1AEAB
+A9A6A6A4A4A19E9E9E9C9C9A9492897F746C61595555555551575F676C74767C7F7F7F8185858787
+87898989898989898989878787877F7C7266596C6C6E6E6E6E727274747474747474747474747474
+74747676797C7C7C7F7F7F7F7F7F8181817F7F7F7F7F7F7F7C7C7C7C7C7C79767474747474747474
+7476797C7F7F7F817F7F7F8184848585858584817F7F7F7F7F7F7F7F7F7F7F7F7F81848585858787
+8989898989898989898E8E8E8F8F8F92929292929292929292929292929292929494949494949494
+94949494949494949494949494949494949494949494949292929294949494949494949494949494
+9494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494
+949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C
+9C9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A99999996969494949292929292928F8E898989
+898989898787878787898989898C8C8E8E8E8F8F9292929294949496999A9A9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A999494928E877F76848E949EA6AEB9C1C8CCCFD1D4D4D4D4D4D4D4D4D4D3D3D1D1D3D4
+D4D4D4D4717FA3A4A4A4AEB1B1B3B9BBBBBBBEC0C1C1C1C1C1C4C6C6C8CCCFD3D3D1CFCFCCC1B9B1
+ABA49E9C9C9A9A999494969A9A9A9A9A9A7F899292949494999A9A9A9CA3A6A9AEB1B3B3B3B1AEA9
+A6A49E9C9A9694928F8E8E8989898989898989898989898989898989898989898787878585858585
+85858581817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767474747472716C6C6C6C6A6A6A67
+6661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+7F8587899294949A9C9EA4A6A9ABAEAEAEB1B1B1B1B1B1AEABA6A6A4A4A4A4A4A4A6A6AEB3BBC1CC
+D4D9D9DCDFDFDFE1E1E1E1E1DFDFDCD9D9D9D9D4D4D3CFCFCCC8C8C6C6C6C6C1C1C0BEB9B6B1AEAE
+ABA9A6A6A6A4A4A4A19E9E9C9A9492877C726A5F57555555554F59616A7174767C7F7F8184878787
+8989898C8E8C8989898989898987817C766C61576C71717171727274747474747474767474747474
+7474767676797C7C7C7F7F7F7F7F818481817F7F7F817F7F7F7C7C7C7C7C7C767674747474747474
+7474767B7C7F7F7F7F7F7F7F81848485858584817F7F7F7F7F7F7F7F7F7F7F7F7F81848585858787
+8789898989898989898C8E8E8E8E8F8F8F9292929292929292929292929292929292929494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929494
+9494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494
+9494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9996949494949494929292928F8F8F8E8C898989
+8989898989878989898C8E8F8F8F929292929292929494949499999A9A9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9A9A9994928F8981767F89949CA4AEB4BCC4C9CCCFD1D3D3D3D3D3D3D4D4D4D3D1D1D1D3D3
+D4D38F969EA6ABAEAEAEB3B3B3B3B9BBBBBBBEC0C1C1C1C1C1C6C6C6CCCFD1D4D3D1CFCFC6BEB6AE
+A9A49E9C9A9A99949494999A9A9C9C9C7C898E92949494999A9A9A9C9EA4A6ABB1B3B3B3B3B1AEA9
+A6A49E9C9A999492928F8E8C89898989898989898989898989898989898989898987878585858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767474747472726C6C6C6C6A6A6A6A
+6764615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
+8187898E9294949A9C9EA4A6A9ABAEAEAEB1B1B1B1AEAEAEA9A6A6A4A4A4A4A4A6A6A9B1B9C0C6CF
+D4D9D9DCDFDFDFE1E1E1DFDFDFDEDCD9D9D9D4D4D3D3CFCFCCC8C8C8C6C6C6C6C1C1C0B9B9B3B1AE
+AEA9A9A9A6A6A6A6A4A4A39E9C9A928E857972675F5754555555555D666C7274797C7F8184878787
+8989898E8E8E8C89898989898989877F7C746A5F5471727272727274747474747676767674747474
+747476767676797C7C7C7F7F7F7F8184848181818181817F7F7F7F7C7C7C7C797674747474747474
+747476797C7C7F7F7F7F7F7F7F81818485848481817F7F7F7F7F7F7F7F7F7F7F7F81848585858587
+8789898989898989898C8E8E8E8E8E8E8F8F92929292929292929292929292929292929292929494
+94949494949494949494949494929294949494949494929292929292929292929292929292929292
+929494949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494
+9494949494949494949494949494949494949496969699999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949292928F8F8F8E8E8E8C89898989
+89898989898989898E8F92929292929294949494949494999A9A9C9C9C9C9C9E9E9E9E9E9C9C9E9E
+9C9C9C9A9994948F89847C7B87929AA1A9B1B6BEC6CCCCCFD1D3D3D3D3D3D3D3D3D3D3D1CFCFD1D3
+D489949CA4ABAEB1B1B6B9B7B7B7BBBBBBBBBEC0C1C1C1C1C4C6C6C8CCCFD3D4D3D1CFCCC4B9B1AB
+A69E9C9C9A9994949494999A9C9C9C81898C92949496999A9A9A9C9CA3A6A9AEB1B3B3B3B3B1AEA9
+A6A49E9C9C999492928F8E8C89898989898989898989898989898989898989898987878585858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7676767676767474747472726C6C6C6C6A6A6A6A
+6766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
+8487898F9294969C9EA1A4A6A9ABAEAEAEAEAEB1AEAEAEA9A6A6A4A4A4A4A4A4A6A6AEB3BBC1C8D1
+D9D9D9DCDFDFDFDFDFDFDFDFDFDCD9D9D9D9D4D4D3D1CFCFCCC9C9C8C8C6C6C6C4C1C1BEB9B6B1AE
+AEABABABA9A6A6A6A6A6A4A49E9C948F897F766C675F5751555555575F676C72767C7F8184878787
+89898C8E8E8E8E8C898C8C8C898987847F7672675D6C727272727274747476767676767676747474
+74747476767676797C7C7C7F7F7F7F8185848181818181817F7F7F7F7F7F7F7C7676747474747474
+74747676797C7C7F7F7F7F7F7F7F818184848181817F7F7F7F7F7F7F7F7F7F7F7F7F818485858587
+878989898989898989898E8E8E8E8E8E8E8E8F929292929292929292929292929292929292929292
+92929494949494949494949494929292929292929292929292929292929292929292929292929292
+929494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494
+94949494949494949494949494949494949499999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9994949494949492928F8E8E8E8C8C89898989898989
+8989898989898C8E929292949494949494949496999A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E
+9C9C9C9A99949289877C76848E949EA6AEB6B9C1C9CCCCCFD1D1D1D1D1D1D1D3D3D3D1CFCFCFD1D3
+7C9C9C9EA6AEAEB1B3B7B9B9B9B9BBBBBBBBBBC0C1C1C1C1C6C6C6C8CCCFD3D4D1CFCCC6BEB6AEA9
+A49E9C9A9994949494999A9C9C9C81898F92949499999A9A9C9C9C9EA4A6ABAEB3B3B3B3B3B1AEA9
+A6A49E9C9C9A9494928F8F8E8C898989898989898989898989898989898989898987878585858585
+8585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767474747472726E6C6C6C6A6A6A6A
+676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7981
+87898C929294999C9EA3A4A6A9ABAEAEAEAEAEAEAEAEABA9A6A4A4A4A4A4A4A6A6A9B1B7BEC4CCD3
+D9D9D9DFDFDFDFDFDFDFDFDFDCDCD9D9D9D4D4D3D3D1CFCFCCCCCCC9C8C8C6C6C6C1C1BEB9B6B1B1
+AEAEAEAEABA9A9A9A9A6A6A6A49C949289877F746A665F575455555557616A6C74767C8184858787
+8989898E8E8E8E8C8C8C8E8E8C8989877F7C746C6457727272727274767676767679767976767474
+7476767676767676797C7C7C7F7F7F8184858481848484848181817F7F7F7F7C7C76767474747474
+74747476797C7C7C7F7F7F7F7F7F7F81818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858587
+878789898989898989898C8E8E8E8E8E8E8E8F929292929292929292929292929292929292929292
+92929292929294949494949492929292929292929292929292929292929292929292929292929292
+929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494
+949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A99999994949492929292928F8E8C8C89898989898989898989
+8989898C8C8E8F929294949494969999999A9A9A9A9C9C9C9C9C9E9E9E9EA1A3A4A39E9E9E9E9E9E
+9C9C9A9A949289877F767F89949CA4ABB6B9BEC4CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1CFCFCFCF72
+92A6A4A4ABB1AEB1B3B9B9B9BBBBBBBBBBBBBBC0C1C1C1C1C6C6C8CCCFCFD3D3CFCCCCC4B9B1A9A6
+9E9C9A999494949494999A9C9C81899294949499999A9A9A9C9C9EA3A6A9AEB1B6B3B3B3B3B1AEAB
+A6A49E9C9C9A969492928F8E8C898989898989898989898989898989898989898987878585858585
+8585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767474747472726E6C6C6C6C6A6A6A
+6A6764615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F84
+87898E9292949A9C9EA4A6A6A9ABAEAEAEAEAEAEAEABA9A6A6A4A4A4A4A4A4A6A9AEB1B9C1C6CFD4
+D9D9DCDFDFDFDFDFDFDFDFDFDCD9D9D9D7D4D4D3D3D1CFCFCCCCCCCCC9C8C8C6C6C4C1BEB9B6B3B1
+B1AEAEAEAEAEAEAEA9A9A6A6A49E9A928E878179726A615D555555555559616A7174797F81858787
+898989898E8E8E8E8C8E8E8E8C898987847F79746A6155727272747476767679797C7B7979767676
+767676767676767676797C7C7C7F7F8184858584848485858484848181817F7F7C7C767674747474
+7474747676797C7C7C7F7F7F7F7F7F7F8181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585
+87878989898989898989898E8E8E8E8E8E8E8F929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494
+9494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A999494949292929292928F8C89898989898989898989898989
+8C8C8E8E8F9292949499999A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9EA3A4A4A4A4A3A19E9E9E9E9C
+9C9C9A94928E877F767C87929A9EA6B1B9BEC1C6CCCCCCCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6C87
+A4ABA9A6B1B3B1B1B6B9B9B9BBBBBBBBBBBBBBC0C0C1C1C1C6C6C8CCCFD1D4D1CFCCC6BEB6AEA6A4
+9E9C9A9494949494949A9A9C858992949499999A9A9A9A9C9C9C9EA4A6ABAEB3B6B3B3B3B1B1AEAB
+A6A49E9E9C9A999492928F8E8E898989898989898989898989898989898989898987878585858585
+858585858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676747474747472716C6C6C6C6A6A6A
+6A6766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F87
+89898F9294949A9C9EA4A6A6A9ABAEAEAEAEAEAEABA9A9A6A4A4A4A4A4A4A6A6A9AEB7BEC4C8CFD9
+D9D9DCDFDFDFDFDFDFDFDFDCDCD9D9D9D4D4D4D3D1CFCFCCCCCCCCCCCCC9C8C6C6C6C1C0B9B7B3B1
+B1B1B1B1AEAEAEAEABA9A9A6A49E9C949289847F746C6A615C55555555545C666A72767C81848787
+878989898C8E8E8E8C8E8E8E8E8C898787817C76726A5F72747474747679797C7C7C7C7C7C797676
+76767676767676767676797C7C7C7F7F8485858585858587878787858484817F7F7C7C7674747474
+747474767676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+87878989898989898989898C8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F92929292929292929292929292929292
+92929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494
+9494949494949494949699999999999999999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9A9A9994949492929292928F8E898989898989898989898989898C8E
+8E8E8F92929494999A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A39E9E9E9E9C
+9C9A94928F89817C79848E949CA6AEB7BEC1C6CCCCCCCCCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF879A
+B6B1AEAEB6B6B1B1B6B9B9B9BBBBBBBBBBBBBBBEC0C1C1C4C6C8CCCCCFD3D4CFCCC8C4BCB1A9A49E
+9C9A999494949494999A74878E94949499999A9A9A9A9A9C9C9EA3A6A9AEB1B6B6B3B3B3B1B1AEAB
+A6A4A19E9C9C99949292928F8E8C8989898989898989898989898989898989898987878585858585
+858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676747474747472726C6C6C6C6A6A6A
+6A676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8487
+898E929294999C9C9EA4A6A6A9ABAEAEAEAEABABA9A9A6A6A4A4A4A4A4A6A6A9ABB1B9C1C6CCD3D9
+D9D9DCDFDFDFDFDFDFDFDFDCD9D9D9D4D4D4D4D3D1CFCFCCCCCCCCCCCCCCC8C8C6C6C1C0BBB9B6B3
+B1B1B1B1B1B1AEAEABA9A9A6A49E9C949289877F7C726C67615957555555545F676C74767F848787
+87878789898E8E8C8C8C8E8E8E8E8C8987857F7C746E66597274747476797C7C7C7C7C7C7C7C7C79
+7676767676767676767676797C7C7C7F818585858585858787878787858484817F7F7C7C76767474
+74747474767676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+87878789898989898989898C8E8E8E8E8E8E8E8F8F8F929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8E8F929292929292929292929292929292
+92929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494
+94949494949494949699999999999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9C9C9C9A9A9A9A9A9994949292928F8F8F8F8C898989898989898989898989898C8E8F
+8F92929494949A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A39E9E9E9C9C
+9A99948F89857C767F89929AA3ABB1BBC1C6C8CCCCCCCCCFCFCFCFCFCFCFCFCFCFCFCFCFCF92A4B6
+BBB9B7B3B9B7B3B3B7B9B9B9BBBBBBBBBBBBBBBEC0C1C1C6C6C8CCCFCFD3D4CFC8C6C1B7AEA6A39E
+9C9994949494949499748592949499999A9A9A9A9A9A9A9C9C9EA4A6ABAEB3B9B6B3B3B3B1B1AEA9
+A6A4A39E9C9C9A949492928F8E8C8989898989898989898989898989898989898987878585858585
+858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C76767676767474747472726E6C6C6C6C6A6A
+6A676761615F5F5F5D5957554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F8789
+898F9292949A9C9E9EA4A6A6A9ABABAEAEABABA9A9A9A6A4A4A4A4A4A6A6A6A9AEB6BEC4C8CFD4D9
+D9DCDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D3D3D3D1CFCFCCCCCCCFCCCCCCC9C8C6C6C1C0BBB9B9B6
+B3B3B1B1B1B1B1AEAEA9A9A6A49E9C94928C87817C74726C675F5957555555545F6771747C7F8587
+8787878789898C8C898C8E8E8E8E8E898787847F79746C615574747476797C7C7C7F7F7F7F7C7C7C
+797676767676767676767676797C7C7F7F848585858585858787878787858481817F7F7C7C767674
+7474747476767676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+8587878989898989898989898E8E8E8E8E8E8C8E8E8F8F8F92929292929292929292929292929292
+9292929292929292929292929292929292929292928F8E8E8E8F9292929292929292929292929292
+9292929494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494
+9494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9A9A9A9A9A99949492928F8E8E8E8E8C89898989898989898989898989898E8F92
+9292949494999A9A9C9C9C9C9E9E9E9E9E9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9C9C9A
+9994928C877F767F8992999EA6AEB9C0C1C6C8CCCCCCCCCCCCCCCCCCCFCFCFCFCFCFCFCF99A4AEB9
+BBBBBBB9B9B9B6B3B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C6CCCCCFD1D3D3CFC6C4BEB1A9A49E9C
+9A949494949494967485929494999A9A9A9A9A9A9A9A9C9C9EA3A6A9AEB1B6B9B6B3B3B1B1B1AEA9
+A6A4A39E9C9C9A949492928F8F8E8C89898989898989898989898989898989898987878785858585
+85858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676747474747472716C6C6C6C6A6A
+6A676766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C818789
+8C8F9294969A9C9E9EA4A6A6A9ABABAEABABA9A9A9A6A6A4A4A4A4A6A6A6A9AEB1B9BFC6CCD3D9D9
+DCDCDFDFDFDFDCDCDCDCDCD9D9D9D4D4D3D3D3D3D1CFCFCCCFCFCFCFCCCCC9C8C6C6C1C0BBB9B9B6
+B3B3B3B1B1B1B1AEAEA9A9A6A49E9A94928E89847F79746E6A645F595755555554616A72767C8184
+848587878789898989898C8E8E8E8C89898787817C76726A5F51747476797C7F7F7F7F7F7F7F7F7C
+7C797676767676767474747676797C7C7F81848585858585878787878785858481817F7F7C7C7976
+7674747676767676797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585
+8587878989898789898989898C8E8E8E8E8E8C8C8C8E8E8E8F8F8F929292929292928F8F8F8F8F92
+9292929292929292929292928F8F8F8F8F8F8F8F8F8F8E8E8E8F9292929292929292929292929292
+9292929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949494
+94949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9A9999999994949492928F8E8C8C8989898989898989898989898989898C8C8E8F92
+9292949496999A9C9C9C9C9E9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A19E9E9C9A9A
+94928E877F767C878E949CA4ABB1B9C1C1C6C8CCCCCCCCCCCCCCCCCCCCCCCCCCCCCFCF929CA6B1BB
+BBBBBBBBBBB9B9B6B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C8CCCFCFD1D4D1CCC6C1B9AEA6A39E9C
+999494949494946787929494999A9A9A9A9A99999A9A9C9C9EA4A6ABAEB3B9B9B6B6B3B1B1AEAEA9
+A6A6A49E9C9C9A99949292928F8E8C89898989898989898989898989898989898989878785858585
+85858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676747474747472726C6C6C6C6A6A
+6A67676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727C878789
+8E8F9294999C9C9E9EA4A6A6A9A9ABABABA9A9A9A6A6A4A4A4A4A6A6A6A6ABAEB1BCC4C8CFD4D9D9
+DCDCDFDEDCDCDCDCD9D9D9D9D9D7D4D4D3D3D3D1CFCFCFCFCFCFCFCFCCCCCCC8C6C6C1C0BBB9B9B7
+B6B6B3B3B3B1B1AEAEABA6A6A39E9A94928E89857F7974726C6A615F595557555555616C74767C7F
+81848485878789898989898C8E8C8C89898787857F7C746E665C747476797C7F7F7F7F7F7F7F7F7F
+7F7C797676767474747474747676797C7C7F81848585858587878787878585858481817F7F7C7C7C
+7976767676767676797B7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585
+85878787898787878989898989898C8E8E8C898989898C8C8E8E8E8F8F8F9292928F8F8E8E8E8E8F
+8F8F8F8F929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+929292929494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494949494
+94949499999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9A9996949494949492928F8E8C89898989898989898989898989898C8C8E8E8F929292
+94949494999A9A9C9C9C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4A3A3A19E9E9C9C9A96
+948E8781767C8789929AA1A6AEB6BBC1C1C6C8C9C9C9CCCCCCCCCCCCCCCCCCCCCCCC859E9EA6B1BB
+BBBBBBBBBBBBB9B7B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C8CCCFCFD3D4CFC9C6BEB4ABA49E9C9A
+99949494949494878E9494999A9A9A9A999996999A9C9C9C9EA4A9AEB1B6B9B7B6B3B3B1B1AEAEA9
+A6A6A49E9C9C9C99949292928F8F8E8C898989898989898989898989898989898989878785858585
+85858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676747474747272716C6C6C6C6A
+6A6A676761615F5F5F5D5957554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F87898C
+8F9292949A9C9C9EA1A4A6A6A9A9ABABA9A9A9A6A6A6A4A4A4A6A6A6A6A9AEB1B7BEC6CCD1D4D9D9
+DCDFDEDCDCDCD9D9D9D9D9D9D9D4D4D3D3D3D1D1CFCFCFCFCFCFCFCFCCCCCCC8C8C6C1C0BBBBB9B9
+B7B7B6B6B3B3B1AEAEA9A6A49E9C9A94928C89847F7C74746C6A67615D575557575555666C74767C
+7F81818484878789898989898C8C898989898787857F79746A61577474797C7F7F7F81818181817F
+7F7F7C797676747474747474747676797C7C7F81848585848487878787858585858481817F7F7C7C
+7C7B767676767679797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818485
+858587878787878787878989898989898C898989898989898C8C8C8E8E8E8F8F8E8E8C8C8C8C8C8E
+8E8E8E8F8F8F8F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+929292929494949494949494949494999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494
+949499999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9A9994949494949292928F8F8E89898989898989898989898989898C8E8F8F8F92929494
+949494999A9A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A4A4A3A19E9E9E9C9C9A9994
+8F89817676848992999EA4A9AEB6BBC1C1C6C8C8C8C8C8C8C8C9C9CCCCCCCCC8C97694A6A6ABB6BB
+BBBBBBBBBBBBB9B9B9B9B9BBBBBBBBBBBBBBBBC0C0C1C4C6C9CFCFD1D3D4CFC6C1B9AEA69E9C9C9A
+949494949494878992999A9A9A9A9A99969494999A9C9C9EA4A6ABAEB1B9B9B7B6B3B3B1B1AEAEA9
+A6A6A49E9C9C9C9A94949292928F8E8C898989898989898989898989898989898989878785858585
+85858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676747474747472716C6C6C6C6A
+6A6A676766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8487898E
+8F9294999C9C9E9EA3A4A6A6A9A9ABA9A9A9A6A6A6A6A4A4A6A6A6A6A6ABAEB1B9C1C8CFD3D9D9D9
+DCDFDCDCDCDCD9D9D9D9D9D9D4D4D4D3D1D1D1D1CFCFCFCFCFCFCFCFCCCCCCC9C8C6C1C0BBBBB9B9
+B9B9B7B6B3B1B1AEABA6A6A49E9C9A94928C87817F7C7474716C6A645F5D575757575755676C7476
+7C7F7F7F7F84878789898989898989898989878785817C7672675D5174767C7C7F7F818181848481
+817F7F7C797676747474747474747476767C7C7F81848484848487878785858585858481817F7F7F
+7C7C7976767676797C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184
+8485878787878787878787878989898989898989898989898989898C8C8C8C8C8989898989898989
+8C8C8C8C8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92929292929292929292929292
+9292929294949494949494949494949494969999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9996
+99999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C
+9A9A9A9A99949494929292928F8E8E8E8C89898989898989898989898989898E8F8F929292949494
+9494999A9A9C9C9C9E9E9EA1A4A4A4A4A4A4A6A6A4A4A4A4A4A6A6A4A4A19E9E9E9E9C9C9A94948F
+89847976818992949CA3A6AEB1B9BEC1C1C6C6C6C8C8C8C8C8C8C8CCCCCCCCC87287A4ABABAEB9BB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBBEC0C0C1C4C6C9CCCFCFD3D1CCC4BBB6ABA49E9C9A99
+9494949494848C92999A9A9A9A9999949494999A9A9C9C9EA6A9AEB1B3B9B9B7B6B3B1B1B1AEAEA9
+A6A6A49E9C9C9C9A94949292928F8E8E898989898989898989898989898989898989878787858585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676747474747472726C6C6C6C6A
+6A6A67676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F85898C8F
+9292949A9C9C9E9EA3A4A6A6A9A9A9A9A9A6A6A6A6A6A4A6A6A6A6A6A9AEB1B6BEC4CCCFD4D9D9DC
+DCDFDCDCDCD9D9D9D9D9D9D9D4D4D3D1D1D1D1D1CFCFCFCFCFCFCFCFCFCCCCC9C8C6C1BEBBBBB9B9
+B9B9B9B6B1B1AEABA9A6A49E9C9A96928F8987817C7C7674726C6C6A615F5C575757575757676C74
+767C7F7C7C7F818587878989898989898989878785847F79746C615774767C7C7F7F818184848584
+81817F7F7C797674747474747274747474767C7C7F81848481848487858585858585858481817F7F
+7F7C7C79767676797C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81848585858585858587878787878989898989898787898989898989898989898989898989898989
+8989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F928F8F8F8F92929292929292929292929292
+92929294949494949494949494949494949494949494969999999999999A9A9A9A9A9A9A9A999694
+94949494999A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A
+9A9A9A9694949292928F8F8E8E8C8C8989898989898989898989898989898C8E8F92929294949496
+99999A9A9C9C9C9E9E9E9EA3A4A4A6A6A6A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9E9C9C9A94929289
+847C767F878F949A9EA6ABAEB1B9BEC1C1C6C6C6C6C6C6C6C6C6C8C9CCCCC87F8994B1B1B1B1BBBB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C6CCCCCCCFCFCCC6BEB9B1A69E9C9A9996
+94949494818E92999A9A9A9A999694949494999A9C9C9EA4A6AEB1B1B7BBB9B7B3B3B1B1AEAEABA9
+A6A4A49E9C9C9C9A9994929292928F8E8C8989898989898989898989898989898989878787858585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747272716C6C6C6C
+6A6A67676761615F5F5F5D5957554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8187898E8F
+9294949A9C9C9E9EA4A4A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A9A9AEB1B7BEC6CCD1D4DCDCDC
+DCDFDCD9D9D9D9D9D9D9D4D4D4D4D3D1D1D1D1CFCFCFCFCFCFCFCFCFCFCCCCC8C6C6C1BEBBBBBBB9
+B9B9B6B1B1AEAEA9A6A4A39E9C9A94928E89877F7C797674726E6C6A67615F5C57595C595C57546C
+7274767C7C7C7F818487878989898989898987878581817C76726A5F55767C7C7F7F818484858585
+8481817F7F7C797674747474727272747474767C7C7F7F8181818484858585858585858584817F7F
+7F7F7C7C797676797C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81818481818181818484858787878787878989878787878787898989898989898989898989898989
+89898989898989898E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949496999999999999999A9A999494
+9494949496999A9A9A9A9A9A9A999999999999949494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A
+999994949492928F8E8C8C8989898989898989898989898989898C8C8E8E8E8F9292929494949999
+999A9C9C9C9E9E9EA1A1A1A3A4A4A6A6A6A6A6A6A4A4A4A4A4A4A4A39E9E9E9E9C9C9A94928F8984
+7C767C878E949A9EA4A9AEB1B6BBBEC1C1C6C6C6C6C6C6C6C6C6C6C8C9C9C894A3AEB9B7B6B6BBBB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C6CCC9C9CCCFC6C4B9B6ACA49C9C9A9994
+9494727F899494999A9A9A9A9994949494969A9A9C9EA3A6A9B1B1B6B9BBB9B7B3B3B1B1AEAEABA9
+A6A4A49E9E9C9C9A9994949292928F8E8C8989898989898989898989898989898989898787858585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472716C6C6C6C
+6A6A67676766615F5F5F5F595755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C84878C8F92
+9294999A9C9C9EA1A4A4A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A9A9ABAEB1B9C1C6CFD3D9DCDCDC
+DEDEDCD9D9D9D9D7D4D4D4D4D4D3D3D1D1D1D1CFCFCFCFCFCFCFCFCFCFCCCCC8C6C6C1BEBBBBBBBB
+B9B6B3B1AEAEABA6A6A49E9C9A9694928C87857F7C767472726C6C6A6A66615F5C5C5D5D5D5F5C55
+6A71727476767C7F8184858787878989898787878581817F7C746C615774797C7F7F7F8185858585
+858481817F7F7C79767474747472717272747476797C7C7F7F7F8184858585858585858584817F7F
+7F7F7C7C7C797676797C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F81817F7F7F818181848485878787878787878787878787878787878989898989898989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949496999999949494
+9494949494999A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494
+949496999A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A99
+9994949492928E8C8989898989898987878789898989898989898E8E8F8F8F8F929292949496999A
+9A9C9C9C9E9E9EA3A3A4A4A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A49E9E9E9C9C9C9994928F89847C
+767C878C92999CA4A6ABB1B3B9BBBEC1C1C6C6C6C6C6C6C6C6C6C6C8C9C89AA4ABB6B9B9BBBBBBBB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBC0C0C1C1C6C6CCC8C6C9CCC4BEB7AEA69E9C9A999494
+9494818C929494999A9A9A9A9994949494999A9C9EA1A4A9AEB1B6B9B9BBB9B6B3B3B1B1AEAEABA9
+A6A4A49E9E9C9C9A9994949292928F8F8E8C89898C89898989898989898989898989898787878585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472726C6C6C6C
+6A6A6767676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8185898E8F92
+92949A9C9C9E9EA1A4A4A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A9A9AEB1B3B9C1C9CFD4D9DCDCDC
+DFDCDCD9D9D9D9D4D4D4D4D4D4D3D1D1D1D1D1CFCFCFCFCFCFD1CFCFCFCCCCC8C6C6C1C0BBBBBBB9
+B7B3B1AEAEABA9A6A4A39E9C9C9994928987817F79747472726C6C6C6A6761615F5D5D5F5F5F5F5D
+57676C717274767C7F7F7F84878787878787878784817F7F7C76726A5F55767C7C7F7F8184858585
+85858481817F7F7C7B7674747472726C6E72727476767C7C7F7F7F8184858585858585858581817F
+7F7F7F7C7C7C7979797C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F818485858587878787878785858587878787878787878789898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494999A9A9A9A9A9A99969494949494949494949494949494949494949494949494949494
+949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9996
+949492928F8E898989898989878787878787878989898989898C8E8F929292929292949494999A9A
+9C9C9C9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A49E9E9C9C9C9C9994928F89847C76
+7C858992999CA3A6ABAEB1B6B9BBBEC1C1C4C4C6C6C6C6C6C6C6C6C6C8949CA6AEB9B9B9BBBBBBBB
+BBBBBBBBBBBBB9B9B9BBBBBBBBBBBBBBBBBEC0C0C1C1C6C8C9C6C6C8C6BFB9B1ABA49C9C99949494
+94858992929494999A9A9A9994949494949A9C9C9EA4A6AEB1B3B9B9BBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9A9A9494929292928F8E8C89898C8C898989898989898989898989898787878585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767474747472726E6C6C6C
+6C6A6A67676761615F5F5F5D595755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797C8187898F9292
+94999A9C9C9E9EA3A4A4A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B7BEC6CCD1D4DCDEDEDF
+DFDCDCD9D9D9D4D4D4D4D4D4D4D3D1D1D1D1D1CFCFCFCFCFD1D1CFCFCFCCC9C8C6C4C1C0BEBBB9B9
+B6B1B1AEABA9A6A6A49E9E9C9C9994928F89847C76747271716C6C6C6A6A66615F5F5F5F615F5F5F
+5F5C556A6C6C7274767C7F7F848787878787878484817F7F7F7C746E665C547C7C7F7F8184858585
+8585858481817F7F7C7C7676747472716C6C6E72747476797C7C7F7F81848585858585858584817F
+7F7F7F7F7C7C7C797B7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8184858585858587878585858585858585878787878787878789898989
+898989898989898989898989898E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292
+92929292929292949494949494949494949494949494949494949494949494949494949494949494
+94949494949499999999999999949494949494949494949494949494949494949494949494949494
+949494999A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A999494
+92928F8E8C898989878787878787878787878989898989898C8E8F92929292929294949696999A9C
+9C9C9C9E9EA1A3A4A4A4A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A19E9C9C9C9A9994928E87817C767C
+848992949CA1A6A9AEB1B1B7B9BBBBC0C1C1C1C1C1C1C1C1C1C6C6C689A3A3A6B1B9B9B9BBBBBBBB
+BBBBBBBBBBBBBBB9B9BBBBBBBBBBBBBBBBBEC0C1C1C4C6C8C8C6C6C6C1BEB6AEA69E9C9A94949494
+85898E9292949499999A9A9994949494999A9C9EA4A6A9AEB3B7B9BBBBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9A9A9694949292928F8E8E898C8C8C898989898989898989898989898987878785
+8585858585858585817F7F7F7F7F7F7F7C7C7C7C7C7C7C79767676767676747474747472716C6C6C
+6C6A6A67676766615F5F5F5F595755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F84898E8F9294
+94999A9C9C9E9EA3A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEB1B3B9BFC6CFD3D9DEDFDFDF
+DFDCD9D9D9D9D4D4D4D4D4D4D3D3D1D1D1D1CFCFCFCFCFCFD1D1CFCFCFCCC8C6C6C1C1C0BBB9B9B6
+B3B1AEABA9A6A6A4A39E9C9C9C9994949289857F7674726C6C6C6C6C6A6A676661615F5F61616161
+615F5D5761676A7274767C7C7F8485858585848481817F7F7F7C76726C6157797C7C7F8184858585
+858587858481817F7F7C7C79767474726C6C6C6C72747474767C7C7F7F818485858585858584817F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8184858585858585858585858585858585858585878787878789898989
+898989898989898989898989898C8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292
+92929292929292929292929294949494949494949494949494949494949494949494949494949494
+94949494949494949494949694949494949494949494949494949494949494949494949494949494
+94949494999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A99949492
+8F8E8989898787878787878585858587878989898989898C8E8F92929292929494949999999A9A9C
+9C9C9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A3A19E9E9C9C9A9994928C87817C767C84
+898F949C9EA4A6A9AEB1B3B9B9BBBBBEC1C1C1C1C1C1C1C1C1C1C17F99A6A6ABB3B9B9B9BBBBBBBB
+BBBBBBBBBBBBBBBBB9BBBBBBBBBBBBBBBBBEC0C1C1C6C6C8C6C6C4C6BEB9B1ABA49E9A999494947F
+878992929494949499999994949494999A9C9EA3A6A9AEB1B9B9B9BEBBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9A9A999494929292928F8E8C8C8C8E898989898989898989898989898987878785
+8585858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C767676767676747474747472716C6C6C
+6C6A6A6767676661615F5F5F5C575554514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C8187898E929294
+949A9A9C9C9E9EA4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9AEB1B3B9C1C8CFD4D9DFDFDFDF
+DCD9D9D9D9D4D4D4D4D3D3D3D3D3D1D1D1D1CFCFCFCFCFCFD1D1CFCFCFCCC8C6C6C1C0BBBBB9B7B3
+B1AEAEA9A6A6A4A39E9E9C9C9A9A9494928C877F76726C6C6A6C6C6C6A6A6A676461616161616461
+6664615F5C5761676C7274797C7F7F81818181817F7F7F7F7F7C797471675F557C7C7F7F81858585
+85878787878484817F7F7F7C79767472716C6A6A6C72747474767C7C7F7F8184858585858585817F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81848485858585858585858585858585858585858585878787898989
+89898989898989898989898989898E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292
+92929292929292929292929292929294949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929294949494949494949494
+94949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A999999999999999492928E
+89898787878787878585858585858787878989898989898C8E8F92929294949494999A9A9A9A9C9C
+9C9C9E9EA1A3A4A4A6A6A6A6A6A6A6A6A6A6A4A4A3A19E9E9E9E9C9C9A96949289877F7C767C8187
+8E949A9CA3A6A6ABAEB1B3B9B9B9BBBBBEBEBEC0BEBEBEBEBEC0768EA4ABABAEB9B9B9BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBC0C0C1C1C6C6C8C6C6C1C1B9B3AEA6A39C9A9494947C87
+898F929294949494969494949494999A9C9C9EA4A6AEB1B7B9B9BBC0BBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9C9A999494949292928F8E8C8C8E8E8C8989898989898989898989898989878785
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C767676767676767474747472716C6C6C
+6C6A6A6A67676761615F5F5F5D595755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F84878C8F929294
+969A9C9C9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B6BEC6CCD1D4D9DFDCDCDC
+DCD9D9D9D7D4D4D3D3D3D3D3D3D1D1D1D1D1CFCFCFCFCFCFD1D1CFCFCFCCC8C6C6C1BEBBB9B9B3B1
+B1AEA9A6A6A4A19E9E9C9C9C9A9A9494928C877F79726C6A6A6A6C6A6A6A6A6A6761616161616667
+676A6766615F5D57666C717476797C7F7F7F7F7F7F7F7F7C7C7C7C74726C615C4F7C7C7F7F848585
+878787878787858481817F7F7C7C767472716A6A6A6C71727474767C7C7F7F818485858585858481
+7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F818181848485858585858585858585858585858585878787878789
+89898989898989898989898989898C8C8C8C8E8E8E8E8E8E8F8F8F8F8F8F92929292929292929292
+92929292929292929292929292929294949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929294949494949494949494
+9494949496999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A99999696949494928F8C89
+898787878784848485858585858787878989898989898C8E8F929292949494999A9A9A9A9A9A9C9C
+9C9E9E9EA3A4A4A4A6A6A6A6A6A6A6A6A6A6A4A49E9E9E9E9C9C9C9A99948F89877F7C767C7F878C
+92999C9EA4A6A9AEB1B1B3B9B9B9B9BBBEBEBEBEBEBEBEBEBEBE879AB1B1B1B1BBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEC0C0C1C1C6C6C6C6C1C1BBB7B1A9A69E9A999494798789
+8E929294949494949494949499999A9C9C9EA4A6ABB1B6B9BBBEBEC1BBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9C9A999494949292928F8F8E8E8E8E8C8989898989898989898989898989878787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C767676767676767474747472716C6C6C
+6C6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C8187898C8F929494
+999A9C9C9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEB1B3B9BEC6CFD3D9DCDCDCDCDC
+D9D9D9D9D4D4D3D3D3D3D3D3D3D1D1D1D1D1CFCFCFCFCFD1D1D1D1CFCFCCC8C6C4C1BEB9B9B6B1B1
+AEABA9A6A4A19E9E9C9C9C9C9A9994948F8987817C746C6A67676A6A6A6A6A6A6A67666664616767
+6A6A6A6A6A6766615F5C6A6C727474767C7F7F7F7F7F7C7C7C7C7C7674726A6157767C7C7F818787
+87878787878787858481817F7F7C7C7674726C6A67676A6C727474767C7C7F7F8184858585858584
+81817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181848485858585858585858585858585858787878787
+87878787898989898989898989898989898989898C8C8C8E8E8E8E8E8E8F8F8F8F8F8F9292929292
+92929292929292929292929292929292949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929294949494949494949494
+9494949499999A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A99969494949494928F8C8987
+8787858481818181848585858787878989898C8C8C8C8E8F92929294949496999A9A9C9C9C9C9C9C
+9C9E9E9EA1A4A4A4A6A6A6A6A6A6A6A6A6A4A49E9E9C9C9C9C9C9A94928F89857F7C767C7F878992
+949A9CA3A6A6ABAEB1B1B6B9B9B9B9B9BBBBBBBBBBB9B9B9B9899AA6B6B6B6B6BBBBBBBBBBBBB9B9
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEC0C1C1C1C6C6C6C1C1BEB9B1ACA6A39C9A96947984898C
+8F92929494949494949699999A9A9C9C9EA4A6A9AEB6B9BEBEBEC1C1BEB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9C9A99949494929292928F8E8E8E8E8E8C89898989898989898989898989878787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767474747472726C6C6C
+6C6A6A6A6767676661615F5F5F5C575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898E92929494
+999A9C9C9E9EA3A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B6B9C1C8CFD3D9DEDCDCDCDC
+D9D9D9D4D4D4D3D3D3D3D1D1D1D1D1D1D1D1CFCFCFCFCFD1D1D1D1CFCFCCC8C6C1C1BBB9B7B3B1AE
+AEA9A6A4A39E9E9C9C9C9C9A9A9994928E89877F7C746C6A6766676A6A6A6A6A6A6767676767676A
+6A6C6C6C6C6C6A6A6761615F576C727274797C7C7C7C7C7C7C79797674726E675F55767C7F7F8487
+878787878987878787848481817F7C7C7674726C6766676A6C717274767C7F7F7F81848585858585
+8481817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181848485858585858585858585858585878787
+878787878787878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F92
+92929292929292929292929292929292949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292949494949494949494
+94949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949492928E898787
+858584817F7F81848585858587878989898C8E8E8E8F8F8F929292949494999A9A9C9C9C9C9C9C9C
+9E9E9E9EA1A3A4A4A6A6A6A6A6A6A6A6A4A4A19E9C9C9C9A9A9A94928E89857F7C79797F87898F94
+9A9C9EA4A6A9AEAEB1B3B6B9B9B9B9B9B9B9B9B9B9B9B9B95F9AA9B3B9B9BBBBBBBBBBBBBBBBB9B9
+B9BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEC0C1C1C1C6C6C4C1BEB9B6AEA6A49E9A99947981898C8F
+929294949494949499999A9A9A9C9C9EA4A6A9AEB1B9BEC1C1C1C1C1BEB9B9B6B3B1B1B1AEAEA9A9
+A6A4A49E9E9C9C9C9A99949494949292928F8E8E8E8E8E8C89898989898989898989898989898787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767474747472726C6C6C
+6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818789898E92929494
+999A9C9C9E9EA4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEAEB1B7BBC4CCCFD4D9DFDCDCDCD9
+D9D9D9D4D4D3D3D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCFD1D1D1D1CFCCCCC6C6C1C0BBB9B6B1B1AE
+A9A6A6A49E9C9C9C9C9C9C9A9994928F8C8984557674716A676466676A6A6A6A6A6A67676767676A
+6A6C71727272726E6C6A6A66615F5D6C7172747676767C79797676767674716A61594F767C7F8185
+87878789898989898787858585847F7C7C7674726A676466676A6E7274797C7F7F81818485858585
+8584817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181848484858585858585858585858585
+85858587878787878789898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929292929292929294949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949292929292929292929292949494949494949494
+949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949292928F89898785
+858584818181848585858587878789898C8E8F8F8F929292929294949499999A9C9C9C9C9C9C9C9C
+9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9C9A999694928C87857F7C79797F8789929499
+9C9EA4A6A9ABAEAEB1B3B6B9B9B9B9B9B9B9B9B9B9B7B7B79AA4AEB9B9B9BBBBBBBBBBBBBBBBB9B9
+B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBBBC0C0C1C1C1C6C6C1BEBBB7B1ABA49E9C9A99617F878C8F92
+92949494949494969A9A9A9C9C9C9EA4A6A9AEB1B7BEC1C1C1C4C6C1BEB9B9B6B3B1B1B1AEAEA9A9
+A6A4A4A19E9E9C9C9A9999949494929292928F8E8E8E8E8E89898989898989898989898989898787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676767474747472726E6C6C
+6C6C6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F92929496
+9A9C9C9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B3B9BEC6CCD1D4D9DFDCD9D9D9
+D9D9D4D4D3D3D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCFD1D1D1D1CFCCCCC6C6C1BEB9B7B3B1AEAB
+A6A6A49E9E9C9C9C9C9A9A9694928E87877255675F71726A6764616667676A6A6A6A6767676A6A6A
+6C6C7272747474747472716C6A676661615F6C7274747676767676747474726C675F5774797C7F84
+8787898989898989898987878787847F7F7C7974716A666161676A6C7274797C7F7F818184858585
+858584817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818484848485858585858585
+85858585858585878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929292929292929292929292949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292949494949494949494
+949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949292928E8C89878585
+858584848485858585858787878989898E8E8F92929292929292949494999A9A9C9C9C9E9E9E9C9E
+9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A39E9E9C9A99949494928C87857F7C7C797F87899294999A
+9CA1A4A6A9ABAEAEB1B1B6B6B6B7B7B6B7B7B9B7B6B6B3929CA6B1B9B9B9B9BBBBBBBBBBBBBBB9B9
+B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBEC0C0C1C1C1C6C6BEB9B9B1AEA6A19C9C9A5F7F878E8F9292
+94949494949494999A9C9C9C9C9EA4A6A9AEB1B6B9C0C6C6C6C6C6C1BEB9B9B6B1B1B1AEAEAEA9A9
+A6A4A4A19E9E9C9C9A9A99949494949292928F8E8E8E8E8E8C898989898989898989898989898787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747474726E6C6C
+6C6C6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818787898E8F92949499
+9A9C9C9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEAEB1B6B9C1C6CFD3D9DCDEDCD9D9D9
+D9D7D4D4D3D1D1D1CFD1D1D1D1D1D1D1D1D1D1CFCFD1D1D1D1D1D1CFCCCCC6C4C1BEB9B6B1AEAEA9
+A6A4A19E9C9C9C9C9A9A9494928E87817474726A61596A6A676161616666676A6A6A6A6A676A6A6A
+6C6E72747476767676767472726C6C6A6A6761615F597474747474747474726C6A615C54767C7F81
+8487898989898C8C8C89898989898787847F7C7C746E6A646161666A6C7274797C7F7F7F81848585
+858484817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181848484858585
+858585858585858787878787898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929292929292929292929292929292929292949494949494949494949494
+94949494949494929292929292929494949494949494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8E898987858585
+8585858585858585858787878989898C8E8F92929292929292949494999A9A9A9C9C9C9E9E9E9E9C
+9C9E9E9E9EA1A4A4A4A4A4A4A4A4A4A39E9E9C9A99949492928C87817F7C79797F87899294949A9C
+9EA4A6A6A9ABAEAEB1B1B3B3B6B6B6B3B3B3B6B3B3B1899CA3A9B6B9B9B9B9BBBBBBBBBBBBBBB9B9
+B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBEC0C1C1C1C1C6C1BEB9B6AEA9A49E9C9A617F87898F929494
+949494949494999A9C9C9C9E9EA4A6A9AEB1B3B9BEC1C6C6C6C6C1C1BEB9B9B6B1B1B1AEAEAEA9A6
+A6A4A4A19E9E9C9C9A9A99969494949292928F8F8E8E8E8E8C898989898989898989898989898787
+858585858585858585817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474747472716C6C
+6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F848789898E9292949499
+9A9C9C9E9EA3A4A6A6A6A6A4A6A6A6A6A6A6A6A6A6A6A9ABAEB1B3B9BBC1CCCFD4D9DCDCDCD9D9D9
+D9D4D4D3D1CFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC9C6C1C1BBB9B1B1AEA9A6
+A4A39E9C9C9C9A9A999494928E8981747C76726A675F55676661616161646467676A6A6A6A6A6A6A
+6C71727476797C7C7C7C7C7674747272716C6C6A6766615F727472747472726E6A675F5774767C7F
+8487898989898C8E8E8F8E8C8C8989898787817F7C746C6A616161646A6C7276797C7C7F7F818484
+848481817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818184
+8485858585858585878787878787878787878989898989898989898989898C8C8C8E8E8E8E8E8E8E
+8F8F9292929292929292929292929292929292929292929292929292949494949494949494949494
+94949494949494929292929292929292929494949494949494949494949494949494949494949494
+9499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949492928F8C89898785858585
+85858585858587878787878989898C8E8F9292929292929294949494999A9A9A9A9C9C9C9E9E9E9C
+9C9C9C9C9E9EA3A3A3A4A4A4A3A3A19E9C9C9A94949292928987817F7C767B7F87899294949A9C9E
+9EA4A6A6A9ABAEAEB1B1B3B3B3B3B3B1B1B1B1B1B17F94A4A6AEB9B9B9B9B9BBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C1C4C6C1BBB7B1ABA6A19E9C727F85898E92949494
+9494949496999A9C9C9E9E9EA4A6A9AEB1B1B7B9C1C6C6C6C6C6C1C0BBB9B9B6B1B1B1AEAEAEA9A6
+A6A4A4A19E9E9C9C9A9A9999949494929292928F8E8E8E8E8E8C8989898989898989898989898787
+878585858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7676767676747474747472716C6C
+6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818787898E8F9292949499
+9A9C9C9E9EA4A4A6A6A6A4A4A6A6A6A6A6A6A6A6A6A9A9AEAEB1B3B9BEC6CCD1D4D9DFDCDCD9D9D9
+D4D4D4D3D1CFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC9C6C1C0BBB6B1AEABA9A6
+A49E9E9C9C9A9A949494928E8476767C7674726C6A6159556161616161616166676A6A6A6A6A6A6C
+6C72727476797C7F7F7C7C7C7C7B767674747472716C6A6764615771727272726C6A615C5574797F
+81878789898C8E8E8F8F92928F8E8E8C898987817F7C746C6A616161666A6C7274767C7C7F7F8181
+8181817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+84858585858585858585858787878787878787878787898989898989898989898989898C8C8C8E8E
+8E8E8F8F8F8F8F929292929292929292929292929292929292929292929494949494949494949294
+94949494949492929292929292929292929294949494949494949494949494949494949494949494
+94999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949492928F8C8987878785858585
+858587878787878787878989898C8E8F8F92929292929292949494999A9A9A9A9A9C9C9C9E9E9C9C
+9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9A949492928F89877F7C7C767C7F87899294999A9C9C9E
+A4A6A6A6A9ABAEAEAEB1B1B1B1B1B1B1B1B1B1AE798EA4A9AEB1BBB9B9B9B9B9B9BBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBEC0C1C1C1C4C1BEB9B3AEA9A49E9C727F84878C8F92949494
+96999999999A9C9C9E9EA1A4A6A9AEAEB1B7B9BEC4C8C6C6C6C6C1BEBBB9B9B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9A9A99949494949292928F8E8E8E8E8E8C8989898989898989898989898787
+87858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747472716C6C
+6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F92929494969A
+9C9C9C9EA1A4A4A6A6A4A4A4A4A6A6A6A6A6A6A6A9A9ABAEAEB1B6B9C0C6CFD3D9D9DFDCD9D9D9D4
+D4D3D3D1CFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC8C6C1BEB9B3AEAEA9A6A4
+9E9E9C9C9A9A99949292898476767C79767472716C676157545F5F5F5F61616166676A6A6A6A6C6C
+71727474767C7C7F7F7F7F7F7F7F7C7C7C7B7676767472716C6A615C6C71716E6C6A665F574F767C
+7F858789898C8E8F8F9292929292928F8F8E8987817F7C746C6A616161676A6E7474767C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+8184858585858585858585858585858587878787878789898989898989898989898989898989898C
+8E8E8E8E8E8E8F8F8F8F8F9292929292929292929292929292929292929494949494949494929292
+92929292929292929292929292929292929494949494949494949494949494949494949494949494
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999494928E89898787878585858585
+878787878787898989898989898C8E8F9292929292929294949496999A9A9A9A9A9C9C9C9E9E9C9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9A999494928F8E89877F7C7C76797F878992949A9C9C9C9EA3
+A4A6A6A9A9ABAEAEAEB1B1B1B1B1B1AEAEAEAE7C899CA9AEB1B7BBB9B9B9B9B9B9B9B9BBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBEC0C0C1C1C1C1B9B7B1AEA69E9E9C7C87898C8F9294949999
+999A9A9A9A9C9C9E9EA1A4A6A9AEAEB4B7B9BEC1C6CCC8C6C6C6C1BEB9B9B9B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9A9A9999949494929292928F8E8E8E8E8E8989898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747472726E6C
+6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818789898E8F92929494999A
+9C9C9E9EA3A4A4A6A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABAEB1B3B9BBC1C8CFD4D9D9DCD9D9D9D4D4
+D3D3D1CFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC8C6C1BBB7B1AEABA6A6A3
+9E9C9C9A9A9994948F898474767C7C767474726E6C6A615F574F5D5C5F5F5F6161676A6A6A6A6C6C
+71727476797C7F7F818181818181817F7F7F7F7C7C7C797674726C675F4F6C6C6C6A67615C557479
+7F818789898C8E8F9292929292949292928F8E8987817F7C746C6A616164676A71727476797C7C7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+8181848484848585858585858585858585858585878787898989898989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F92929292929292929292929292929294949494949492929292
+92929292929292929292929292929292949494949494949494949494949494949494949999999694
+94999A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494928F8989878784818484858787
+8787898989898989898989898C8E8F9292929292929294949494999A9A9A9A9A9A9A9C9C9C9C9C9C
+9C9A9C9C9C9C9C9C9C9C9C9C9C9C9A999492928E8989877F7C7C79767F878992949A9C9C9E9EA1A4
+A6A6A6A9A9ABAEAEAEAEAEB1B1AEAEAEAEAEAB899CA6AEB1B7BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBEBEBEC1C1BEB9B1AEA9A49E9C7C87898E9292929494999A
+9A9A9A9A9C9C9E9EA3A4A6A9AEAEB1B7B9BEC1C4C8CCC9C6C6C6C1BEB9B9B7B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9C9A9A99949494949292928F8E8E8E8E8E8C89898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676767676747474747472716C
+6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F9292949494999A
+9C9C9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9ABAEAEB1B6B9BBC6CCD1D4D9D9D9D9D9D4D4D3
+D3D1D1CFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCCC6C1BEB9B6AEABA9A6A49E
+9C9C9A9A99949492898476767C7C79767472726C6C6A6A645F5754575D5F5F5F6161676A6A6A6C6C
+72747476797C7F7F8184858484848585848481817F7F7F7C7C7974726A61556C6A6A6A615F575176
+7C7F858989898E8F929292929294949492928F898985817F79746C6A6661666A6C6E727476797C7C
+7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F8181818181848484848585858585858585858587878789898989898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292929492929292
+9292929292929292929292929292929294949494949494949494949494949494949494999A9A9994
+94999999999A9A9A9A9A9A9A9A9A9A9A99949494949494949494928F898987848181818485878789
+898989898989898C8C8C8C8C8E8F929292929292929294949499999A9A9A9A9A9A9A9C9C9C9C9C9C
+9A9A9A9A9A9A9A9A9A9C9C9C9C9A9694928F898987857F7C7C7B767F858992949A9C9C9E9E9EA3A4
+A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEABA98E9AA4AEAEB1B9BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBEBBBEBEBEB9B6AEA9A6A19C7C87898F9292929494999A9A
+9C9C9C9C9E9EA1A4A4A6A6ABAEB1B6B9BEC1C6C6CCCFCCC8C6C6C1BBB9B9B7B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9C9A9A99969494949292928F8F8E8E8E8E8C89898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747472726C
+6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818789898E8F92929494999A9A
+9C9C9E9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9ABAEB1B1B7B9C0C6CCD1D4D9D9D9D9D4D4D3D3
+CFCFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCCC6C1BBB7B1AEA9A6A49E9C
+9C9A9A999494928C8779767C7C7C7974727272716C6C6C6A665F5754575C5D5F5F61676A6A6A6A6C
+727474767C7C7F818485878787858787878787858484817F7F7F7C79746C66556A6A6A66615C554F
+7C7F818789898C8E929292929494949494928F8E8987857F7C7974716A6761676A6C6C7274747679
+797C7C7C7F7F7F7F7F7F7F7F7C7F7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818181818184848585858585858587878787878789898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292
+92929292929292929292929292929292949494949494949494949494949494949494999A9A9A9994
+9494969699999999999999999A9A9994949494949494929292928E89898781817F7F818587878989
+89898C8C8C8E8E8E8E8E8E8E8F929292929292929294949494999A9A9A9A9A9A9A9A9A9C9C9C9C9A
+9A999A9A9A9A9A9A9A999A9A999494928F898987847F7C7C7C797F84898F92999C9C9E9E9EA3A4A6
+A6A6A6A6A9A9ABAEAEAEAEAEAEAEABABA9A6949CA6AEAEB3B9BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBB9BBBEB9B7B1ABA6A49E7C85898F9294949494999A9A9C
+9C9C9C9E9EA3A4A4A6A6ABAEB1B6B9BEC1C6C6CCCFCFCCC8C8C6C1BBB9B9B7B6B1B1AEAEAEAEA9A6
+A6A6A4A49E9E9C9C9C9C9A9A9A99949494929292928F8E8E8E8E8E8C898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747472726E
+6C6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F9292949494999A9C
+9C9C9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEAEB1B3B9BBC1C6CFD1D4D9D9D9D4D4D4D3CF
+CFCFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC6C1BEB9B6AEABA6A6A49E9C
+9A9A999494928C877C767C7C7C79747474747272726E6C6C6A665F5755575C5D5F5F61676A6A6A6C
+727476767C7C7F81858787878787878789898987878787878787817F7C766C6757676767615F5754
+747C7F8187898C8E8F929294949494949492928F8C8987847F7C7974726C6A66676A6C6C71727476
+76797C7C7C7F7F7F7F7F7F7C7C7C7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858585878787878787898989898989898989898989
+8989898C8C8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292
+9292929292929292929292929292929294949494949494949494949494949494949496999A9A9994
+94949494949494949496969999969494949292929292928F8F8C898787817F7F7F81848787898989
+8C8E8E8E8F8F8F8F8F8F8F9292929292929292929494949494999A9A9A9A9A9A9A9A9A9C9C9C9C9A
+9A999999999999999494949494949292898785817F7C7C7C7C7F84898F92949A9C9E9EA1A3A4A4A6
+A6A6A6A6A9A9ABAEAEAEAEAEAEABA9A9A6929AA3ABB1B1B3B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBB9B9B9B9B7B1AEA9A49E6681898F9294949496999A9C9C9C
+9E9E9EA1A4A4A6A6A6A9AEB1B6B9BBC1C4C6CCCFD1CFCCCCC6C1BEBBB9B9B7B6B1B1AEAEAEAEA9A6
+A6A6A4A49E9E9E9C9C9C9C9A9A99949494949292928F8E8E8E8E8E8C898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767674747474747271
+6C6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818787898E9292949494999A9A9C
+9C9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B1B6B9BBC1C8CFD1D4D9D9D9D4D4D3D1CF
+CFCFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCCCC6C1BBB9B1AEA9A6A49E9C9A
+9A999494928E897F76797C7C7C747474747474747472716C6C6A645F575557595C5F61676A6A6A6C
+727476797C7F7F818587878787878789898989898989898989898787817F767261556667615F5955
+4F747C7F8187898E8F8F929294949494949292928E898987817F7C7974726C6A676A6A6C6C717274
+7676797C7C7C7C7F7F7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818181817F81818485858585858585858585858787898989898989898989898989
+898989898989898C8C8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929294949494949494949494949494949999999994
+949494949494949494949494949494929292929292928F8E898787847F7F7F7F818487878789898C
+8E8F8F8F929292929292929292949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9996949494949494949494949292928C87857F7F7C7C7C7C7F84898E92949A9C9E9EA1A4A4A4A6A6
+A6A6A6A6A9A9ABAEAEAEAEAEABA9A9A9899A9EA6B1B1B1B6B9B9B9B9B9B7B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B4AEA9A6A36A81878E9294999999999A9C9C9C9E
+9EA1A4A4A6A6A6A9A9AEB1B3B9BBBEC1C6C8CCCFCFCFCCC9C6C1BEB9B9B7B6B6B1B1AEAEAEAEA9A6
+A6A6A4A4A19E9E9C9C9C9C9A9A9994949494929292928F8E8E8E8E8E898989898989898989898987
+87858585858585858585817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767674747474747272
+6C6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F848789898E92929494999A9A9C9C
+9C9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9B9BBC1C8CFD1D4D9D9D4D4D3D1CFCF
+CFCCCCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1CFCCCCC8C4BEB9B6B1A9A6A4A39E9C9A
+999494948F89817C7C7C7C7C7474747476767676767474726C6C6A615F575557575D5F61676A6A6C
+7274767C7C7F7F818487878787898989898C8C8C8C8C8C8C8C8E8E8987857F7672614F6161615D57
+546C747C7F8487898E8E8F9294949494949292928F8C898787817F7C7C74726C6A6A6A6A6C6E7274
+74747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F8181817F7F81818484848181848587878585858585858585878787878989898989898989898989
+8989898989898989898E8E8E8E8E8E8E8E8E8F8F8F8F929292929292929292929292929292929292
+92929292929292929292929292929292929292929294949494949494949494949494949496999494
+94949494949494949494949494929292929292928E8C898987847F7F7F7F7F818485878789898C8E
+8F92929292929292929292949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A
+99949494949494949292929292928C8784817F7C7C7C797C81898E92949A9C9E9E9EA3A4A4A4A6A6
+A6A6A6A6A9A9ABABABABAEABA9A9A97F949EA4A9B1B1B3B6B9B9B9B9B7B7B7B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B9B9B9B9B9B9B9B9B9B7B6B6B1ABA6A49E81898E929499999A9A9A9C9C9C9E9E
+A3A4A4A6A6A9A9ABAEAEB1B7B9BEC1C6C6C8CCCFCFCFCCC8C6C1BEB9B9B7B6B3B1B1AEAEAEABA9A6
+A6A6A4A4A19E9E9E9C9C9C9C9A9994949494949292928F8E8E8E8E8E8C8989898989898989898987
+87878585858585858585817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474747272
+6E6C6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818587898C8F92929494999A9A9C9C
+9C9E9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEAEB1B3B9BBC0C6CCCFD3D4D9D4D4D3D1CFCFCC
+CCCCCCCCCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1CFCFCFCCC8C6C1BEB9B1AEA9A6A49E9C9A99
+9694949289857C7C7C7C7C747476797C7C7C7C7C7C7C767474726E6A645F555557595D61676A6A6C
+7174767C7C7F7F8184878787898989898E8F8F8F8F92929292928F8E8C89857F766C5F4F61615F59
+555172747C7F8487898E8E929294949492929292928E89898784817F7C7974726C6A6A6A6C6C7172
+7474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81817F7F7F
+81818484818181848587858584858787878787878785858587878787898989898989898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F92929292929292929292929292
+92929292929292929292929292929292929292929292949494949494949494949494949494949494
+9494949494929292929494929292928F8E8C8C89898787847F7F7F7F7F7F7F818587878989898E8F
+9292929292929292929294949494949494949494949494949494999A9A9A9A9A9A9A9A9999999999
+949494949494949292928F8E8E898784817F7F7C7B767C81898E92949A9C9C9E9EA1A4A4A4A4A6A6
+A6A6A6A6A6A9A9ABABABABA9A9A6768C9EA4A9AEB3B3B3B7B9B9B9B7B6B6B7B7B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B6B7B9B9B9B9B9B9B7B6B3B1AEA6A4A181878C9294969A9A9A9A9C9C9E9EA1A4
+A4A6A6A6A9ABAEAEAEB1B6B9BBBEC1C6C8C9CFD1CFCFCCC8C6C1BBB9B9B7B6B3B1B1AEAEAEABA9A9
+A6A6A4A4A19E9E9E9C9C9C9C9A9994949494949292928F8F8E8E8E8E8C8989898989898989898987
+8787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472
+716C6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F858787898E8F929494999A9A9C9C9C
+9E9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEB1B1B6B9BBC1C6CCCFD3D4D4D4D3D1CFCFCFCC
+CCCCCCCCCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1CFCFCFCCC9C8C6C0B9B6B1ABA6A49E9C9C9996
+9494928E877F7C7C7C7C7674797C7F7F7F81817F7F7F7C7C797674726C665F5455575C5F61676A6A
+6E7274797C7F7F8184858787898989898E8F929292929294949292928F8E89847C746A5C4F5F5F5D
+57554F71747C7F8587898E8F9292949292929292928F8C89878785817F7C7974726E6C6A6A6C6E72
+72747474767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181817F7F7F7F7F8181818181817F7F7F818184848484
+84858785858484858787878787878787878787878787878787878789898989898989898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F92929292929292
+92929292929292929292929292929292929292929292929292949494949494949494949494949494
+949494949492929292929292928F8E8C898989878785817F7F7F7F7F7F7F848787878989898C8E8F
+9292929494949494949494949494949494949494949494949494999A9A9A9A9A9A9A999994949496
+94949492929292928F8E8C89898784817F7F7C79767C81898F9294999A9C9E9E9EA3A4A4A4A4A4A6
+A6A6A6A6A6A6A9A9A9A9A9A9A6A68799A4A9AEB1B3B6B7B9B9B9B7B6B6B6B6B7B7B7B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B6B6B6B6B6B7B6B3B1B1AEA9A6A37F87899294949A9A9C9C9C9C9E9EA3A4A4
+A6A6A9A9ABAEAEB1B1B6B9BBBEC1C6C8C8CCCFD1CFCCCCC6C4C0BBB9B9B7B6B3B1B1AEAEAEABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9A9A9694949494929292928F8E8E8E8E8E8C89898989898989898989
+8787878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472
+726C6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C81858789898E92929494999A9C9C9C9C
+9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9B9BEC1C6CCCFD3D4D4D3D3D1CFCFCCCC
+CCCCCCCCCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCFCCC8C6C1BEB9B3AEA9A4A39E9C9A9994
+94928F877F7C7C7C7C79767C7F818485878787858484817F7F7C7B76726A645C4F55575D61676A6A
+6C7274797C7F7F7F81848787898989898E929292929294949494949292928E89817C7267554F5F5F
+5755516A6E747C7F8587898E9292949292929292928F8E8989898787847F7C7674726E6C6A6C6C71
+72747474747476767C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F81818181818181848484848181818184848585848484818184848585878787
+87878787878787878787878787878787898989898787878787878989898989898989898989898989
+898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F92
+92929292929292929292929292929292929292929292929292929292929294949494949494949494
+94949494929292929292928F8E8E89898987878785817F7F7F7F7F7F81848787878989898C8E8F92
+929294949494949494949494949494949494949494949494949496999A9A9A9A9A9A999494949494
+9494949292928F8E8C89898787817F7F7F7C7B797C81878E9294999A9C9C9E9EA1A4A4A4A4A4A4A4
+A4A4A4A4A6A6A6A6A6A6A6A6A68594A3A6A9AEB1B3B3B6B9B9B7B6B6B3B6B6B6B6B7B7B9B9B9B9B9
+B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3B1B1AEAEABA6A37F87898F9294999C9C9C9C9C9E9EA1A4A6A6
+A6A9A9ABAEB1B1B1B6B7B9BBC1C1C6C9CCCCCFCFCFCCC9C6C1BEB9B9B7B6B6B3B1B1AEAEABABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9A9A9694949494949292928F8E8E8E8E8E8C89898989898989898989
+8787878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676767474747472
+726E6C6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B7F858587898C8F929294949A9A9C9C9C9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9BBC0C4C6CFCFD3D4D4D3D1CFCFCCCCCC
+CCCCCCCCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCFCCC6C6C1BBB7B1ABA6A49E9C9C999494
+928F89817C7C7C7C7C7C7F8487878989898987878787878784817F7C76726A61574F575C5F61676A
+6C7274767C7C7F7F81848787898989898E929292929294949494949492928F89877F767161514F5D
+5C57544F676C747C7F8487898F9292929292929292928F8E8C89898787847F7C7674726E6C6C6C6E
+7272747474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F8181848484848184858585858585878787878787878785878787878787878787
+89898787878787878787898989878789898989898989898787898989898989898989898989898989
+89898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F8F8F8F8F8F8F8F8F92929292929292929292929292929292929292929294949494949292929292
+92929292929292929292928F8E8C89898987878584817F7F7F7F818187878989898989898E8F9292
+92949494949494949494949494949494949494949494949494949499999999999999969494949494
+94949292928F8E8C89898785817F7F7F7C7C7C7C7F878E9294999A9C9C9E9E9EA3A4A4A4A4A4A4A4
+A4A4A4A4A4A6A6A6A6A6A4A466929CA4A6ABB1B1B1B3B6B7B7B6B6B3B3B3B6B6B6B6B7B7B7B9B9B9
+B9B9B9B9B9B9B7B3B1B1B1B1B1B1B1AEAEABA9A6A47C87898F9294969A9C9C9C9C9E9EA1A4A6A6A9
+A9ABAEAEB1B1B3B6B7B9BBC0C1C6C8CCCCCFCFCFCFCCC8C6C1BEB9B9B7B6B3B3B1B1AEAEABABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9A9A9994949494949292928F8F8E8E8E8E8E89898989898989898989
+898787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676767474747474
+72716C6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C81858787898C8F929494999A9C9C9C9E9E
+9E9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEAEB1B6B9BBC1C6C8CFCFD1D3D3D1CFCFCFCCCCCC
+C9C9CCCCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC8C6C1BEB9B3AEA9A4A19E9C9A949494
+928C877F7C7C7C7C71818789898E8F8F8F8E8E8C898989898787847F7C74716A5F5554575D5F676A
+6C7174767C7C7F7F818487878789898C8E8F929294949494949494949492928E89877F746C5F4F4F
+5C5755514F676C747C818789898F92929292929292928F8F8E8C89898787817F7C7674726E6C6C6C
+7172747474747476797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F
+7F7F7F7F7F7F81818484858585858585858585858585878787878787878787878787878787878789
+89898989898987878789898989898989898989898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F9292929292929292929292929292949494929292929292
+929292929292929292928F8E8C89898987878584817F7F818184848787898989898C8C8C8E8F9292
+92949494949494969999999999999996949494949494949494949494949494969999949494929494
+949292928F8F8E898787848181817F7F7C7C7C7F87899294999A9C9C9C9E9E9EA3A3A3A3A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A39E8E99A1A6A6AEB1B1B1B1B3B6B6B3B3B3B3B3B3B3B6B6B6B6B7B7B7B9
+B9B9B9B9B9B9B6B3B1B1B1B1AEB1AEABA9A6A6A47C85898E929494999A9C9C9C9E9EA1A4A4A6A9AB
+AEAEAEB1B1B3B7B9B9BBBEC1C6C6CCCCCFCFD1CFCFCCC8C6C1BEB9B9B7B6B3B3B1B1AEAEABABA9A9
+A6A6A4A4A39E9E9E9E9E9C9C9C9A999494949494929292928F8E8E8E8E8E8C898989898989898989
+898787878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676767474747474
+72716C6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727C7F85858789898E8F929494999A9C9C9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEB1B1B7B9BEC1C6CCCCCFCFD1D3D1CFCFCCCCC9C9
+C8C8C9CCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC6C6C1BBB7B1ABA6A49E9C9C99949492
+8F87817C7C7C7C6C85898E92929294949494929292928F8E898989847F7C746C665D5455595F616A
+6A6E7274797C7F7F818185878789898C8E8F929294949494949494949494928F89878179726A574F
+4F5755544F5D676C747C8187898C9292929292929292928F8F8E8E89898787817F79747272716E71
+717272747474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F818485858585858585858585858585878787878787898787878787898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292949494929292929292
+9292929292929292928F8E8C89898987878784817F818184858787878789898C8E8E8E8E8F929292
+94949494949494999A9A9A9A9A999999999999999996949494949494949494949494949494929292
+929292928F8E898987858484817F7F7C7C7C7F87899294949A9C9C9C9E9E9E9EA1A1A1A1A1A1A3A3
+A3A3A4A4A4A4A3A19E9E9E89929CA6A6A9AEB1B1B1B1B3B3B3B3B3B1B3B3B3B3B3B6B6B6B6B6B7B7
+B9B7B7B9B9B9B6B1B1B1AEAEAEAEABA6A6A4A37F87898E929494999A9C9C9C9E9EA1A4A4A6A9ABAE
+AEAEB1B1B3B6B9B9BBBEC1C1C6C8CCCFCFCFD1CFCCCCC6C4C0BBB9B9B7B6B3B3B1B1AEAEABA9A9A9
+A6A6A6A4A39E9E9E9E9E9C9C9C9A999494949494929292928F8F8E8E8E8E8C898989898989898989
+89878787858585858585858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726C6C6C6C6C6A6A6A6A67676661615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F81858787898C8F92929494999A9C9C9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9BBC0C4C6CCCCCFCFCFD1CFCFCFCCCCC8C8
+C8C8C9CCCCCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC8C6C1BEB9B6AEA9A49E9E9C9A94949292
+89847F7C7C7C7C848992949494999A9A9A9A9A9999949492928F8E89857F76726A61574F575C5F67
+6A6C7274767C7C7F7F818487878989898E8F92929294949494949494949492928C89857F746C6151
+4F4F57554F4F5D6772767F8487898E9292929292929292928F8F8E8E8C8987857F7C797474727272
+727272747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F818184848485858585858585858585858787878787878787898789898989898787
+87898989898989898989898989898989898989898989898989898989898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292
+92929292929292928F8F8E898989878787848481848487878787878989898C8E8F8F8F9292929292
+94949494949499999A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949492929292
+9292928F8C89898785858584817F7C7C7C7F8789929294999A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C8492999EA6A9ABAEB1B1B1B1B1B3B3B1B1B1B1B1B3B3B3B3B3B6B6B6B6B7
+B7B6B6B6B7B6B3B1B1AEAEAEABA9A6A6A4A17F87898F929494999A9C9C9C9E9EA1A4A4A6A6A9AEAE
+AEB1B1B1B6B9B9BBBEC0C1C4C6CCCFCFCFD1CFCFCCC9C6C1BEB9B9B7B6B6B3B3B1B1AEABABA9A9A9
+A6A6A6A4A49E9E9E9E9E9C9C9C9A99949494949492929292928F8E8E8E8E8E8C8989898989898989
+89898787878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726C6C6C6C6C6A6A6A6A67676761615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747C7F84858789898E8F929294949A9C9C9C9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9AEAEB1B3B9BBC1C6C6CCCCCCCFCFCFCFCFCCCCC8C8C8
+C8C8C9CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC6C1C0BBB7B1AEA6A39E9C9C999494928C
+87817C7C7C7C7F899294999A9C9C9C9C9C9C9C9C9C9C9A999494928F89817C746C675F574F595D61
+6A6C7274767C7C7F7F818487878789898C8F92929294949494949494949292928F89877F7C726A5C
+4F4F4F55544F4F5F6A72767F8787898E8F9292929292929292928F8E8E8C8987847F7C7974747472
+727272747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F81818184858585858585858585858585858787878787878787878989878787
+87878787878989898989898987878789898989898987878787878989898989898989898987898989
+898989898989898989898989898989898989898989898989898989898989898989898C8C8C8C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F929292929292929292929292929292929292
+92929292929292928F8E8C898989878787878485878787878989898989898E8F8F92929292929294
+949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494929292928F
+8F8F8E8989898785858584817F7C7C7C7F87898F9494949A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9C9C9C7C8F949EA6A6A9AEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B6B6B6B6
+B6B3B3B6B6B3B1B1AEAEABABA9A6A6A4A17F878C92929494999A9C9C9C9E9EA1A4A4A6A6A9ABAEB1
+B1B1B1B3B7B9B9BBBEC1C1C6C6CCCFCFCFD1CFCFCCC8C6C1BEB9B9B7B6B3B3B1B1B1AEABABA9A9A9
+A6A6A6A4A4A19E9E9E9E9C9C9C9A99949494949492929292928F8E8E8E8E8E8C8989898989898989
+89898787878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726E6C6C6C6C6A6A6A6A6767676161615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F81858789898C8F92929494999A9C9C9E9E9E9E
+9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEAEB1B6B9BEC1C4C6C8CCCCCFCFCFCFCCCCC9C8C8C8
+C8C8C8CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCCC6C6C1BEB9B6B1A9A49E9E9C9A9494928F89
+847F7C7C7C79898F949A9C9E9E9EA1A3A39E9E9EA3A39E9C9A9994928C877F76726A615C55575C5F
+666C717474797C7F7F818487878789898C8E8F929294949494949494949292928F8987817C766C66
+574F4F4F554F4F545F6A74797F8787898C8F9292928F929292928F8E8E8E8C8987817F7C79767474
+7472747474747679797B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8181848585858585858585858585858585858587878787878787878787
+87878787878787878989898787878787878787898787878787878787878989898989898787878787
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F9292929292929292929292929292
+929292929292928F8E8E8989898987878787878787878989898989898C8C8E8F9292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949292928F8E
+8E8C8989878787858585817F7F7C7C8187898E9294969A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E
+9C9C9C9C9C9C9A9A7487949CA3A6A9ABAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B6B6
+B3B3B3B3B3B1B1AEAEABA9A9A6A6A4A37F878C929294949A9A9C9C9E9E9EA3A4A4A6A6A9ABAEAEB1
+B1B3B3B6B9B9BBBEC0C1C1C6C6CCCFCFCFD1CFCFCCC8C6C1BEB9B9B7B6B3B3B1B1B1AEABA9A9A9A9
+A6A6A6A4A4A19E9E9E9E9E9C9C9A99949494949492929292928F8F8E8E8E8E8E8989898989898989
+8989878787858585858585858581817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726E6C6C6C6C6C6A6A6A6A67676461615F5F5F5D57575555514F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747C7F818587898C8E9292929494999A9C9C9E9E9E9E
+A1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9AEAEB1B1B7B9BEC1C4C6C8C8CCCCCCCCCFCCCCC8C8C8C8
+C8C8C8CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1CFCFCCC8C6C1BEB9B7B1AEA6A49E9C9C999492928985
+7F7F7C7C74878F949A9C9EA4A4A4A6A6A6A4A4A4A4A4A4A39E9C9C949289847C746C6A5F574F575D
+616A6C7274767C7F7F818185878789898C8E8F929294949494949494929292928F8987847F79726A
+5F544F4F4F544F4F55616C747C7F858789898F92928F8F8F92928F8E8E8E8E898784817F7C7C7676
+74747474747476767B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858585858585858585858585858587878787878785
+85858587878787878787878787878787878787878787878787878787878787878789878787878787
+87878787898989898989898989878787898989898989898989898989898989898989898989898989
+8989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292
+92929292929292928F8E8C89898989878787878789898989898C8E8E8E8E8F929292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949292928F8E8E
+898989898787878785817F7F7C7F8187898F9294999A9A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9E9E9C
+9C9C9C9A9A9999948792999EA4A6A9AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3
+B3B1B1B1B1B1AEAEABA9A6A6A6A4A37C898C929494969A9A9C9C9E9E9EA3A4A4A6A6A9A9AEAEB1B1
+B3B6B7B7B9BBBBBEC1C1C1C6C8CCCFCFCFD1CFCCCCC6C6C1BBB9B9B7B6B3B3B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A19E9E9E9E9E9C9C9A9994949494949292929292928F8E8E8E8E8E8C89898989898989
+8989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+7472716C6C6C6C6C6A6A6A6A67676661615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F7F848789898E8F9292949494999A9C9C9E9E9E9E
+A3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9ABAEAEB1B3B9BBBEC1C4C6C6C8C8CCCCCCCCCCC8C8C8C8C8
+C8C8C8C9CCCCCFCFCFCFD1D1D1D1D1CFCFCFCFCCC8C6C4C1BBB9B6B1ABA69E9E9C9A9492928E8781
+7F7C7C7C848E949A9EA1A4A6A6A9A9A9A9A6A6A6A6A6A6A6A4A39C9A948E877F76726A665F554F59
+5F666A717274797C7F7F818487878989898E8F929292949494949492929292928F8C89857F7C766E
+66594F4F4F4F4F4F4F55616C747C7F848789898E8E8F8E8F8F928F8F8E8E8C89898781817F7F7C76
+7674747474747476797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81818484858585858585858584858585858585858585858585878585
+85858585858585878787878787858585858587878787878585858585878787878787878787858587
+87878787878787878989898987878787878787878789898989898989898989898989898989898989
+898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+92929292929292928F8F8E8C898989898787898989898C8E8E8E8F8F8F8F92929292929292949494
+94949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494929292928F8E8C
+898989898987878784817F7C7F81878E92929494999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9A99999494948792949C9EA6A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3
+B1B1B1B1B1AEAEAEA9A6A6A6A4A47C878C929494969A9A9C9C9E9EA1A4A4A4A6A6A6A9AEAEB1B1B3
+B6B9B9B9B9BBBEC0C1C1C6C6C8CCCFCFCFCFCFCCC9C6C6C1BBB9B7B6B6B3B3B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9A9A96949494949492929292928F8E8E8E8E8E8C89898989898989
+898989878787858585858585858481817F7F7F7F7F7F7F7C7C7C7C7C7C7C76767676767674747474
+7472716C6C6C6C6C6A6A6A6A6767666161615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F818587898C8F9292949494969A9C9C9E9E9E9E9E
+A3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9AEAEB1B1B3B9BBC0C1C4C6C6C6C8C8C9CCCCC9C8C6C6C8C8
+C8C8C8C9CCCCCCCFCFCFD1D1CFCFCFCFCFCFCCC8C6C6C1BEB9B6B1AEA9A49E9C9C9994928F89847F
+7F7C7C7F89929A9EA3A4A6A6A9ABAEAEAEA9A6A9A9A6A6A6A6A69E9C949289847C746C6A61595457
+5D61676C7274767C7F7F818487878789898C8F9292929494949492929292928F8F8C8987817F7974
+6A61554F4F4F4F4F4F4F57616C747C7F8487878989898C8E8F8F8F8E8E8C898989878481817F7C7C
+767674747474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818484848585858481818484848585858585858585858485
+85858585858585858585858785858585858585858587858585858585858585858787878785858585
+85858587878787878787878787878787878787878787878787878989898989898989898989898989
+898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929292929292929292
+9292929292929292928F8E898989898989898989898C8E8E8E8E8F92929292929292929292949494
+9494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949292928F8E8C89
+8989898989878784817F7C7C81878E92929499999A9A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A
+9A9994949492848C949A9EA4A6A9ABAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1AEAEB1B1B1B1B1B1B1
+B1B1B1B1AEAEAEABA9A6A4A4A37F87898F9294999A9C9C9C9E9EA3A4A4A6A6A6A6A9ABAEB1B1B3B6
+B9B9B9B9BBBBBEC1C1C4C6C6C8CCCFCFD1CFCFCCC8C6C4C0BBB9B7B6B3B3B1B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9994949494949292929292928F8E8E8E8E8E8C898989898989
+898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79767676767676747474
+7472716C6C6C6C6C6C6A6A6A6A67666161615F5F5F5D57575555514F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72767F7F848789898E8F9292949494999A9C9C9E9E9E9E9E
+A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9ABAEAEB1B1B6B9BBC0C1C4C6C6C6C6C8C8C9C9C8C6C6C6C8C8
+C8C8C8C8CCCCCCCFCFCFCFCFCFCFCFCFCCCCC9C6C6C1BEBBB9B1AEABA6A39E9C9A94928F89877F7F
+7C7C748792969CA1A4A6A9A9ABAEAEAEAEAEABABA9A9A6A6A6A6A49E9A948E877F76726C675F574F
+575F616A717274797C7F818485878789898C8E8F92929494949492929292928F8E8C8987857F7C74
+71675C514F4F4F4F4F4F4F57646C74797F8185878789898C8E8E8E8E8C8989898987878481817F7C
+7976767474747474767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818184848481817F8181818184848485858585848181
+84848485858585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585878787878787878585858585878787878787878787878787878989898989898989
+89898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F92929292
+92929292929292928F8E8C8989898989898989898C8E8E8E8E8F9292929292929292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949292928F8E8C8989
+898989898787857F7C7C7C81878C9294949A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9A9A99
+99949292927F89929A9CA3A6A6A9AEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1AEAEAEAEAEAEAEB1B1B1
+B1B1AEAEAEAEABA9A6A4A4A17F85898F9294999A9C9C9C9E9EA4A4A6A6A6A6A9A9A9AEAEB1B1B3B7
+B9B9B9BBBBBEC0C1C4C6C6C6C8CCCFCFD1CFCFCCC8C6C1C0BBB9B7B6B3B3B1B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9994949494949292929292928F8E8E8E8E8E8C898989898989
+898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79767676767676747474
+7472726C6C6C6C6C6C6A6A6A6A67666161615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F818787898C8E929294949494999A9C9C9E9E9E9EA1
+A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9ABAEB1B1B1B6B9BBC0C1C4C6C6C6C6C6C8C8C8C8C6C6C6C8C8
+C8C8C8C8CCCCCCCCCFCFCFCFCFCCCCCCCCC9C6C6C4C1BBB9B3B1ABA6A49E9C9A9994928C89847F7C
+7C7C818E949C9EA4A6A9AEABAEAEB1B1B1AEAEAEABA9A9A9A9A6A6A39C999289847C74716A615C55
+4F5C5F676C7274767C7F7F818587878989898E8F9292929294929292929292928F8E898987817F79
+726C61554F4F4F4F4F4F4F4F59666C74797C7F8487878789898E8E8C8C8989898987878584817F7F
+7C7B79767674747476767676797B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181817F7F7F7F7F7F8181818184848481817F
+81818181848484858585858585858584848585858585858585858585858585858585858585858585
+85858585858585858585858787858585858585858585858585878787878787878787878787878787
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F
+8F8F8F8F8F8F8F8F8E8C898989898989898989898E8E8E8E8F929292929292929292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494929292928F8E8E8C89
+8989898787847F7C7C7C81878C9294969A9A9A9A9A9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9A9A9994
+9492928F8C89929A9C9EA4A6A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEABABA9A9A6A6A4A17F84898F9294999A9C9C9C9E9EA3A4A6A6A6A9A9ABABAEAEB1B1B1B3B7
+B9B9B9BBBBBEC1C1C6C6C6C6C8CCCFCFD1CFCCCCC8C6C1C0BBB9B7B6B3B3B1B1B1B1AEABA9A9A6A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9C9A9996949494949292929292928F8F8E8E8E8E8E898989898989
+89898989878787858585858585858481817F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474
+7472726C6C6C6C6C6C6A6A6A6A6767616161615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74797F7F848789898E8F9292949494949A9A9C9C9E9E9E9EA3
+A4A4A4A4A4A4A4A4A4A4A6A6A6A9ABAEAEB1B1B3B7B9BBC0C1C4C6C6C6C6C6C6C8C6C6C6C6C6C8C8
+C8C8C6C8C8CCCCCCCCCCCCCCCCCCCCC9C8C6C6C4C1BEB9B7B1AEA9A6A39E9C9A94928F89877F7F7C
+7C7F8992999CA4A6A9AEAEAEAEAEB1B1B1B1AEAEAEABA9A9A9A9A6A49E9A948E877F76746C675F57
+51575D616A6E7274797C7F818487878989898C8F9292929292929292929292928F8E8C8987857F7C
+7471675C544F4F4F514F4F4F5159666C74767C7F8185878789898C8C89898989898787878784817F
+7C7C7C7976767474767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181817F7F
+7F7F7F7F818181818484848585858484818184848485858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585878787878787878787
+8787878787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C898989898989898989898C8E8E8E8E8F929292929292929292929292929294
+949494949494999A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949292928F8E8E8E8E8C
+89898987817F7F7F7F81878C9294999A9A9C9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9C9A9A99949494
+92928E898792999C9EA4A6A6A9ABAEAEAEAEAEAEAEAEAEAEAEABAEAEAEAEAEAEAEAEAEABABAEAEAB
+ABABA9A9A6A6A6A6A4A17C87898E9294999A9C9C9C9E9EA3A4A6A6A9A9ABABAEAEAEAEB1B1B1B6B9
+B9B9BBBBBBBEC1C1C6C6C6C6C8CCCFCFCFCFCCC9C6C6C1BEBBB9B7B6B3B1B1B1B1AEAEABA9A9A6A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9C9A999994949494929292929292928F8E8E8E8E8E8C8989898989
+89898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474
+7472726C6C6C6C6C6C6C6A6A6A6A67646161615F5F5F5D59575555514F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F818787898E8E8F9294949494969A9C9C9E9E9E9E9EA1
+A3A4A4A4A4A4A4A4A4A4A6A6A9A9ABAEAEB1B1B3B9B9BBC0C1C1C4C6C6C6C6C6C6C6C6C6C6C6C6C6
+C6C6C6C6C8C8C9C9CCCCCCCCC9C8C8C8C6C6C4C1BEBBB9B1AEA9A6A49E9C9A9994928C87817F7C7C
+798792949CA1A6A9AEB1B1AEAEB1B1B1B1B1B1B1AEAEAEAEABA9A6A6A49C999289847C74726A645D
+554F575F666C7274767C7F7F8487878789898C8E8F92929292929292929292928F8E8C898987817F
+79726C61574F4F4F4F4F4F4F4F5559666C72767C7F7F848787898989898989898989878787878581
+7F7C7C7C797676767676767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7F7F7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F81818181848484817F7F81818181848484858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858587
+878787878787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C
+8C8C8C8C8C8C898989898989898989898989898E8E8E8E8F92929292929292929292929292929294
+949494949494999A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949292928F8E8E8E8E8E89
+898987817F7F7F7F7F878C929494999A9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9A9A9994949492
+8F8C897C8F949C9EA1A6A9A6A9ABAEAEAEAEAEAEAEAEABAEABABABABAEABABABABABA9A9A9A9A9A9
+A9A9A6A6A6A4A4A4A17987898E9294999A9C9C9C9E9EA3A4A6A6A9ABAEAEAEAEAEB1B1B1B3B3B6B9
+B9B9BBBBBBC0C1C1C6C6C6C6C8CCCFCFCFCFCCC8C6C4C1BBBBB9B7B3B3B1B1B1B1AEAEAEA9A9A6A6
+A6A6A6A6A4A49E9E9E9E9E9C9C9C9A9A9994949494929292929292928F8E8E8E8E8E8C8989898989
+89898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7B7676767676747474
+7472726E6C6C6C6C6C6C6A6A6A6A67666161615F5F5F5F59575755544F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F8587898C8E8E929294949494999A9C9C9E9E9E9E9EA1
+A3A4A4A4A4A4A4A4A4A6A6A6A9ABAEAEAEB1B1B6B9BBBBC0C1C1C1C1C4C6C6C6C6C6C6C6C6C6C6C6
+C6C6C6C6C6C8C8C8C8C9C8C8C8C6C6C6C6C4C1C0BBB9B3B1ABA6A49E9C9C9A94928F89877F7F7C7C
+848E949C9EA4A6ABAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABA9A6A49E9C948E877F79746C6A61
+5954555C616A6C7274797C7F8185878789898C8E8F9292929292929292929292928F8E898989857F
+7C746E675D554F4F4F544F4F4F4F555C666A7274797C7F8185878789898989898989898787878784
+817F7C7C7C7C79767676767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F8181817F7F7F7F7F7F7F818181818484848585858585858585858585
+85858585858585858585858585858585858585858484848484858585858585858585858585858585
+85858585858587878789898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8C898989
+8989898989898989898989898989898989898C8E8E8E8E8F92929292929292929292929292929292
+949494949494999999999A9A9A9A9A9A9A999494949494949494949494949292928F8E8E8E8E8C89
+8987847F7F7F7F7F878C929494999A9A9C9C9C9C9C9C9C9E9E9E9E9C9C9C9C9A9A9994949492928F
+8C89728C929A9EA1A4A6A9A9A9ABAEAEAEAEAEAEAEAEABABA9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6
+A6A6A4A4A4A3A1A17C87898E9294969A9C9C9E9EA1A4A4A6A6A9ABAEAEAEAEB1B1B1B1B3B3B6B7B9
+B9B9BBBBBBC0C1C1C6C6C6C6C8CCCFCFCFCCCCC8C6C1C1BBB9B9B6B3B3B1B1B1B1AEAEAEABA9A6A6
+A6A6A6A6A4A4A19E9E9E9E9C9C9C9A9A999994949492929292929292928F8E8E8E8E8E8C89898989
+8989898989898787858585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474
+747472716C6C6C6C6C6C6A6A6A6A6766616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF767F7F818789898E8E8F929294949494999A9C9C9E9E9E9E9E9E
+A3A4A4A4A4A4A4A4A4A6A6A9A9ABAEAEAEB1B1B6B9BBBBBEC1C1C1C1C1C4C6C6C6C6C6C4C6C6C6C6
+C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C1BEBBB9B6B1AEA9A4A19C9C9A9494928C87817F7C7C7F
+89929A9EA4A6A9AEB1B3B3B1B1B1B1B1B1B1B1B1B1B1AEAEAEABA9A6A6A49C999289847C76726C66
+5F574F575F666A7274767C7F7F8487878989898E8F9292929292929292929292928F8E8989898784
+7F79726A6157514F4F4F554F4F4F54555D666A7274767C7F81848787878787898989898987878787
+847F7F7F7C7C7C79767676767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818184848485858585858585
+84848484858585858585858585858484858585848181818181818184848484848585858585858585
+8585858585858587878787878789898989898989898989898989898989898C8C8C8C8C8C89898989
+89898989898989898989898989898989898C8E8E8E8E8E8F8F929292929292929292929292929292
+9494949494949496969999999A9A9A9A999994949494949494949494949292928F8E8E8E8E8C8989
+8785817F7F7F7F87898F929494999A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9A9A9994949492928E89
+89858792999CA1A4A6A9A9A9A9ABAEAEAEAEAEAEAEABABA9A9A9A6A9A9A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A19E9E9E7F87898E9294949A9C9C9E9EA3A4A4A6A6A9ABAEAEAEAEB1B1B1B1B3B3B6B6B9B9
+B9BBBBBBBBC0C1C1C6C6C6C6C8CCCCCFCFCCC8C6C6C1C0BBB9B9B6B3B3B1B1B1B1AEAEAEABA9A6A6
+A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9994949494929292929292928F8E8E8E8E8E8C89898989
+8989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474
+747472726C6C6C6C6C6C6A6A6A6A6767646161615F5F5F5D59575755514F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+gr
+gs
+0 436 translate
+ 1200 436 scale
+1200 436 8
+[1200 0 0 436 0 0] L1i
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F8587898C8E8E8F9294949494969A9A9C9C9E9E9E9E9E9E
+A1A3A4A4A4A4A4A4A4A6A6A9A9ABAEAEAEB1B3B7B9BBBBBBC0C1C1C1C1C1C4C6C6C4C4C1C4C6C6C6
+C6C4C6C6C6C6C6C6C6C6C6C6C6C6C1C1C1BEBBB9B7B1AEA9A6A39E9C9A9494928E89857F7C7C7687
+8F999CA1A6A9ABAEB1B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEABA9A6A49E9C948E877F7C746E6A
+615C554F5961676C7274797C7F8487878789898C8E8F92929292929292929292928F8E8C89898987
+817C746E675F554F4F4F54544F4F4F55575F646A6E74767C7F818487878787878989898989898787
+87817F7F7F7C7C7C7C7976767679767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181848484858584
+8481818181848484858585858584848181818481817F7F7F7F7F7F81818181818181818484848484
+85858585858585858787878787878787878789898989898989898989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8F929292929292929292929292929292
+9494949494949494949494999A9A9A9A9994949494949494949494949292928F8E8E8E8E8E898989
+87817F7F7F8185898F929294999A9A9C9C9C9E9E9E9E9C9C9C9C9C9C9C9A9A9994949292928E8987
+857F8E949C9EA4A6A6A9A9A9A9ABABAEAEAEAEABABA9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3
+A39E9E9E9C9C7F878C8F9292949A9C9C9E9EA1A4A6A6A6A6A9AEAEAEAEB1B1B1B1B3B3B6B6B7B9B9
+B9BBBBBBBBC0C1C1C4C6C6C6C8C9CCCFCCCCC8C6C6C1BEBBB9B9B6B3B1B1B1B1B1AEAEAEABA9A6A6
+A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9996949494929292929292928F8E8E8E8E8E8C89898989
+898989898989878787858585858585858481817F7F7F7F7F7C7C7C7C7C7C7C7C7C76767676767474
+74747272716C6C6C6C6C6A6A6A6A6767666161615F5F5F5F59575755544F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF74797F7F848789898E8E8E929294949494999A9C9C9E9E9E9E9E9E9E
+A1A4A4A4A4A4A4A4A6A6A6A9A9ABABAEAEB1B3B7B9BBBBBBC0C0C1C1C1C1C1C4C4C1C1C1C1C4C4C4
+C1C1C4C6C6C6C6C6C6C6C6C4C1C1C1BEBEBBB9B7B1B1ABA6A49E9C9A969492928987817F7C76848C
+949C9EA4A6A9AEB1B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEA9A6A4A39C999289847F76726C
+675F574F555F646A7174767C7F8185878789898C8E8F9292929292929292929292928F8E8C8C8987
+847F76726A61594F4F4F5155514F4F4F55575F666A7274767C7F7F81858787878789898989898989
+8785817F7F7F7F7C7C7C7979797979797676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818481
+817F7F7F7F818181818184848484817F7F7F81817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181
+81818184848484848585858787878787878789898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8F929292929292929292929292929294
+9494949494949494949494999A9A9A999694949494949494949494949292928F8E8E8E8E8C898987
+84817F7F8184898E92929494999A9A9C9C9C9E9E9E9E9C9C9C9C9C9C9C9A9A999494928F8E898785
+7C87929A9EA4A4A6A9A9A9A9ABABABABABAEABA9A9A9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E
+9E9E9C9C7481878E8F9292949A9C9C9E9EA1A4A6A6A9A9A9ABAEAEAEB1B1B1B1B3B3B3B6B7B9B9B9
+B9BBBBBBBEC0C1C1C4C6C6C6C8C9CCCCCCC8C6C6C4C1BBBBB9B9B6B3B1B1B1B1B1AEAEAEABA9A9A6
+A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C898989
+898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474
+74747472716C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF767C7F81878789898E8E8F9292949494999A9A9C9C9E9E9E9E9E9E9E
+A1A4A4A4A4A4A4A4A6A6A6A9A9ABABAEAEB1B3B7B9BBBBBBBEC0C0C1C1C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C4C6C6C6C4C1C1C1C1C0BEBEBEB9B9B7B1B1AEA9A6A39E9A999494928E89847F7F7B7F8992
+9A9CA3A6A9ABAEB1B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEABA6A6A49E9C948E87817C7471
+6A615C554F5761676C72767C7F7F8587878989898E8F9292929292929292929292928F8F8E8E8C89
+87817C746C665F574F4F4F55554F4F4F51575961676C7274767C7F7F848487878787878989898989
+87878481817F7F7F7C7C7C7C7C7C7C7C7979797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+7F7F7F7F7F7F7F7F7F7F818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F818181848585858585858585878787898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8F92929292929292929292929292929494
+949494949494949494949494999A9A999494949494949494949494929292928F8F8E8E8C89898787
+8481818485878C92929494999A9A9C9C9C9E9E9E9E9C9C9C9C9C9C9C9A9A99949492928E8987877C
+818F949C9EA3A4A6A6A9A9A9A9A9A9ABABABA9A9A9A6A6A6A6A6A4A4A4A4A49E9E9C9C9C9C9C9C9C
+9C9C9A7487898E8F929294999C9C9E9EA1A4A4A6A9A9ABACAEAEAEB1B1B1B1B3B3B6B6B6B7B9B9B9
+B9BBBBBBBEC0C1C1C4C6C6C6C6C8CCCCC9C8C6C6C1C1BBBBB9B9B6B3B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C898989
+898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474
+74747472726E6C6C6C6C6C6A6A6A6A6767646161615F5F5F5D59575755514F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF767C7F7F848789898C8E8E9292929494999A9A9A9C9C9E9E9E9E9E9E9E
+A3A4A4A4A4A4A4A4A6A6A6A9A9A9ABAEAEB1B3B7B9B9BBBBBBBEBEC0C0C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1C1C0BEBEB9B9B9B7B6B1B1AEA9A6A49E9C9A9494928F8987817F7C7C879294
+9C9EA4A6ABAEAEB1B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEACA9A6A4A19C999289857F7672
+6C675F5751545F646A7174797C7F8487878789898C8E8F9292929292929292929292928F8F8F8E89
+87857F76726A615C544F4F5455544F4F4F54575D616A6C7476797C7F818184858787878789898987
+8787878481817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181817F7F7F
+7F7F8181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81818485858585858585878787878789898989898989898989898989898989898989
+8989898989898989898989898989898989898E8E8E8E8E8F92929292929292929292929292929494
+94949494949494949494949499999994949494949494949494949292929292928F8E8E8989898787
+8584848787899292949494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A99969494928F8989877F7F
+8C92999C9EA3A4A6A6A6A6A6A6A9A9A9A9A9A9A9A6A6A6A6A6A4A4A19E9E9E9E9C9C9A9A9A9A9999
+999A7C87898C92929494999C9C9E9EA1A4A4A6A6A9ABAEAEAEB1B1B1B1B1B3B3B6B6B6B6B7B9B9B9
+BBBBBBBBC0C0C1C1C1C6C6C6C6C8CCC9C8C6C6C4C1C0BBB9B9B7B6B3B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A9996949494929292929292928E8E8E8E8E8E8E898989
+898989898989898987878585858585858585817F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767674
+7474747472716C6C6C6C6C6A6A6A6A6767666161615F5F5F5F5C575755554F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF747C7C7F81878989898E8E8F9292949494999A9A9A9C9C9E9E9E9E9E9E9E
+A4A4A4A4A4A4A4A4A6A6A6A9A9A9ABAEB1B1B3B7B9B9BBBBBBBBBEBEC0C0C1C1C1C1C1C1C1C1C1C0
+C0C0C1C1C1C0BEBEBEBEBEBBB9B9B7B6B6B1B1AEABA9A6A39E9C949492928E89847F7F76818E929A
+9EA3A6A9AEAEB1B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEA9A6A6A49E9A948E87817C74
+726A615D554F5761676C72767C7F8184878789898C8E8F92929292929292929292929292928F8F8E
+8987817C746C665F574F4F4F5555514F4F4F55575F666A7274767C7C7F8181848587878787878787
+8787878584817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F8181818181818184848484818181
+818181848584848481818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818484848485858585858787878787878989898989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8F9292929292929292949494949292949494
+94949494949494949494949494949494949494949494949494949292929292928F8E8C8989878785
+85858787898F92929494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A9A999494928F8C89877F7F89
+92949A9C9EA1A4A4A6A6A6A6A6A6A6A6A9A6A6A6A6A6A6A4A4A4A19E9E9E9C9C9C9A999494949494
+947F87898C92929494999A9C9E9EA3A4A4A4A6A9ABAEAEAEAEB1B1B1B1B3B3B6B6B7B7B6B9B9B9B9
+BBBBBBBBBEC0C1C1C1C6C6C6C6C8C9C8C6C6C6C1C1BEBBB9B9B7B3B1B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C8989
+898989898989898987878785858585858585817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C767676767674
+7474747472726C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF767C7F7F85878989898E8F9292929494999A9A9A9C9C9E9E9E9E9E9E9EA1
+A4A4A4A4A4A4A4A6A6A6A6A6A9A9ABAEB1B1B3B7B9B9BBBBBBBBBBBBBEC0C0C1C1C1C1C1C0C0C0BE
+BEBEBEC0BEBEBEBEBBB9B9B9B7B6B6B1B1B1AEABA9A6A49E9C9A9494928F89877F7F7C7F8992949C
+9EA4A9ABAEB1B1B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEABA9A6A49E9C999289877F79
+746C675F57544F5C616A7174797C7F8185878989898E8F9292929292929292929292929292928F8F
+8C89877F76726A615C554F4F545555514F4F4F555761676A7274767C7C7F7F818184858787878787
+878785848481817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F8181818181818184848484818485858585858484
+8484848585858585858584848484818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F7F7F7F
+7F7F7F7F7F7F7F7F8181818184858585858585878787878789898989898989898989898989898989
+898989898989898989898989898989898C8E8E8E8E8F929292929292929494949494949494949494
+949494949494949494949494949494949494949494949494949292929292928F8E8C898987878585
+858787898E9292949494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A99969492928E89878579878E
+92949C9E9EA1A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A19E9C9C9C9C9A9A99949292929292
+7F87898E92929494999A9C9E9EA3A4A4A6A6A6A9ABAEAEAEB1B1B1B1B3B3B6B6B7B9B7B7B9B9B9B9
+BBBBBBBBBEC0C1C1C1C4C6C6C6C8C8C6C6C6C4C1C1BBBBB9B9B6B3B1B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9C9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C8989
+89898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C767676767676
+7474747472726E6C6C6C6C6A6A6A6A676767646161615F5F5F5D59575755514F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF747C7F7F81878989898C8E8F92929294949A9A9A9A9C9C9E9E9E9E9E9E9EA3
+A4A4724F4F4F4FA6A6A6A6A6A9A9ABAEB1B1B3B9B9B9BBBBBBBBBBBBBBBEC0C0C1C1C0C0BEBEBEBE
+BBBBBEBEBEB9B9B9B9B9B9B7B6B1B1AEAEAEABA9A6A4A39E9C999492928C89817F7C7C878F949A9E
+A4A6ABAEAEB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEA9A6A4A39E9A948E87817C
+76726A615D574F555F666C7274797F7F84878789898C8E929292929292929292929292929292928F
+8E8989817C746C665F57514F4F555555514F4F51555D61676C7274767C7C7F7F8181848484848585
+858584848181817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F818181818181818484848484818485858585858585858585858585
+8585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F81848585858585858587878789898989898989898989898989898989
+898989898989898989898989898989898E8E8E8E8E8F929292929292949494949494949494949494
+949494949494949494949494949494949494949494949494949292929292928F8E89898987878585
+878789898F92929494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A9A999494928F8989876A858992
+949A9C9C9E9EA1A3A4A4A4A4A4A4A6A6A6A4A4A4A4A4A3A39E9E9C9C9A9A9A99949492928F8F8E7F
+878C8F92929494999A9C9EA1A3A4A4A6A6A6A9ABABAEAEAEB1B1B1B1B3B3B6B9B9B9B9B7B9B9B9BB
+BBBBBBBBBEC0C1C1C1C4C6C6C6C6C6C6C6C6C1C1C0BBBBB9B9B6B3B1B1B1B1AEAEAEAEAEABA9A9A6
+A6A6A6A6A6A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8C89
+89898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676
+747474747472716C6C6C6C6A6A6A6A676767666161615F5F5F5F5C575757554F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF767C7F8185878989898E8F9292929494999A9A9A9A9C9C9E9E9E9E9E9E7F89
+94949494928F89847FA6A6A6A9A9ABAEB1B1B3B9B9B9B9B9B9B9BBBBBBBBBBBEC0C0BEBEBEBBBBBB
+BBBBBBBBB9B9B9B9B7B7B6B1B1AEAEAEABABA9A6A6A49E9C9A9494928F89877F7F76818992999CA3
+A6ABAEAEB1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEABA6A6A49E9C969289877F
+79746C676157544F5761676C72767C7F81848789898C8E8F92929292929292929292929292929292
+8F8C89877F76726A615D574F4F515555554F4F4F54575F616A6C7274767C7C7F7F7F818184818181
+81818481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7F7F7C7F7C7C7C7C7C7C7F7C7C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F81817F818181848181818484858484848485858585858585858585858585858585858585
+858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7F7F7F7F7F7F7F7F7F81818485858585858787878789898989898989898C8C89898989898C
+8C89898989898989898989898989898C8E8E8E8E8F92929292929292949494949696949494949494
+9494949494949494949494949494949494949494949494949292929292928F8E8C89898787858585
+8787898E9292949494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A99949492928E89877F84898F92
+949A9C9C9C9C9E9E9E9EA3A4A4A4A4A4A4A4A4A3A19E9E9E9C9C9A9A9494949494928F8E8C897F87
+898F92929494999A9C9E9EA4A4A4A6A6A6A6A9ABAEAEAEAEB1B1B1B3B3B3B6B7B9B9B9B9B9B9B9BB
+BBBBBBBBBEC0C1C1C1C4C4C6C6C6C6C6C6C4C1C1BEBBB9B9B7B6B3B1B1B1B1AEAEAEAEAEABA9A9A6
+A6A6A6A6A6A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8C89
+89898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676
+747474747472726C6C6C6C6A6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF767C7F7F84878989898C8F929292929494999A9A9A9C9C9C9E9E9E9E76858E97
+9E9C9C9A9A99928987816CA6A9ABAEAEB1B1B3B7B9B9B9B9B9B9B9BBBBBBBBBEBEBEBBBBBBBBBBBB
+B9B9B9B9B9B7B6B6B3B3B1B1AEAEABA9A9A9A6A6A49E9E9C9A9494928987817F7C7F8792949C9EA6
+A9AEB1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEACA9A6A4A39E9A948F8981
+7C74726A665F574F545C616A6C74767C7F84878989898E8F92929292929292929292929292929292
+928E8987847C74726A5F57544F4F555555554F4F4F55575F666A6C727476797C7C7F7F7F81817F7F
+7F8181817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181818181
+81818484848481818485858584848485858585858585858585858585858585858585858585858585
+8585858585858585858585858585858585848181818181818181818181817F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858787878789898989898989898C8E8E8E8E8E8E8E8E
+8C8989898989898989898989898C8C8E8E8E8E8F9292929292949494949499999999999999999999
+9694949494949494949494949494949494949494949494929292929292928F8E8989878785858587
+87898C8F92929494999A9A9C9C9C9E9E9E9E9C9C9C9C9A9A9A9A9A999494928F8987847F878C9294
+949A9C9A9A9C9C9C9C9C9E9C9E9EA4A4A3A19E9E9E9E9C9C9C9A94949292928F8F8C898989768789
+8F92929494999A9C9C9EA3A4A4A6A6A6A9A9A9ABAEAEAEB1B1B1B1B3B3B3B6B7B9B9B9B9B9B9B9BB
+BBBBBBBBBBC0C1C1C1C1C1C6C6C6C6C4C1C1C1C0BBBBB9B9B7B3B1B1B1B1B1AEAEAEAEABABA9A9A6
+A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E89
+89898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676
+767474747472726E6C6C6C6C6A6A6A6A676767666161615F5F5F5D59575755544F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF747C7C7F8185878989898E8F929292929494999A9A9A9C9C9E9E9E9E768F929AA1
+A6A4A39E9E9E9A949292816CA9ABAEAEB1B1B3B6B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B6B3B1B1B1B1B1AEAEABA9A6A6A6A4A49E9E9C9A9994928E89857F7C79878C949A9EA4A6
+AEB1B1B1B1B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEA9A6A6A49E9C96928987
+7F76746C6A615C554F555D616A6E74797C81878789898C8F92929292929292929292929292929292
+928F8989877F7C746C665D554F4F51555555544F4F5155595F666A6C72747476797C7C7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F7F7F7F7F7F817F7F7F7F7F7F81818181848485858584848484818184848484848485858584
+84848485858584848585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585848484848484848484818181818181817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F81818485858585878789898989898989898C8E8F8F8F8F8F8F8F8F
+8E8C89898989898989898C8C8E8E8E8E8E8E8E8F92929294949494949496999A9A9A9A9A9A9A9A99
+99999999999696949494949494949494949494949494949292929292928F8E898989878785858587
+89898E9292949494999A9A9C9C9C9E9E9E9E9E9C9C9C9A9A9A9A999494928F8C89847C87898F9294
+999C9A9A999A9A9A9A9C9A9A9A9C9C9C9E9E9E9C9C9C9C9A999494928F8C8989898787877487898E
+92929494999A9C9C9E9EA4A4A4A6A6A6A9A9ABAEAEAEAEB1B1B1B1B3B3B3B6B7B9B9B9B9B9B9B9BB
+BBBBBBBBBBC0C0C1C1C1C1C4C6C6C4C1C1C1C0BEBBBBB9B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A6
+A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E8C
+89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676
+76747474747472716C6C6C6C6A6A6A6A67676766616161615F5F5F5C575757554F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF767C7F7F85878789898C8F929292929294969A9A9A9A9C9C9E9E9E768F9EA1A4AE
+AEABA9A6A6A6A49C9C9C947F745FAEAEB1B1B3B6B9B9B9B9B9B9B9B9B9B9BBBBBBBBB9B9B9B9B9B9
+B9B9B9B6B3B1B1B1B1AEAEAEABA9A6A6A4A4A4A39E9C9C9A94928F8987817F79848992999CA1A6AB
+B1B6B3B3B3B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEABA9A6A6A39C9A948E87
+817C74726A665F57514F575F676A72767C7F848789898C8E8F929292929292929292929292929292
+928F8C8987847F76726A6157514F4F545557554F4F4F54575D61666A6C7172747676797C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7C7C7F7F7F
+7F7F81817F7F7F818181818181848485858787878787878787878787878587878787878787878787
+85848585858585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858587878787878787878785858585848484848481
+81818181817F7F7F7F7F7F7F7F818184858585858787878989898989898C8E8E8F9292929292928F
+8E8E89898989898989898E8E8E8E8E8E8E8E8F92929294949494949494999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9999999999949494949494949494949494949292929292928F8E8C898987878585858787
+898E9292949494999A9A9C9C9C9E9E9E9E9E9E9C9C9C9C9A9A9A999494928E89857687898E929494
+9A9A9994949494949999949494949999999A9A9A9A9A999494928F8C898787878481816781898E92
+929494999A9C9C9C9EA3A4A4A6A6A6A6A9A9ABAEAEAEAEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9BBBB
+BBBBBBBBBBBEC0C1C1C1C1C1C4C1C1C1C1C0BEBBBBB9B9B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A9
+A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E8C
+89898989898989898989878787858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676
+76747474747472726C6C6C6C6A6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF767C7F7F81858789898C8E92929292929494999A9A9A9A9C9C9E9E768FA6AEAEAEB9
+B6B1AEAEAEABA9A6A6A6A49E94895FAEAEB1B1B3B7B9B9B9B9B9B9B9B9B9B9BBB9B9B9B9B9B9B9B9
+B7B7B6B3B1B1AEAEAEAEAEABA9A6A6A4A4A39E9E9C9C9A9494928E89847F7C7F878F949A9EA4A9AE
+B3B9B7B6B6B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEABA9A9A6A49E9C969289
+857F76746C6A615D57514F575F676C74797C818789898C8E8F929292929292929292929292929292
+92928E8987847F7C746E675F554F4F4F555757554F4F4F55575F61666A6C7172747476767C7C7F7C
+7C7C7C7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F
+7F818184818181818484858587878787878787878787878787898989878787878787878987878787
+87878785858585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858787878787878787878787878787878787878787
+858787878785848481817F8181848485858585858587878989898989898C8E8F929292929292928F
+8E8C898989898989898C8E8E8E8E8E8E8E8F9292929494949494949499999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A99949494949494949494949494949292929292928F8E89898787858585878789
+898F9292949494999A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A999494928F8C877481898E92929494
+94949494929292929492929292929292929292929292928F898989878784817F7F7F7F7F878C9292
+9494949A9C9C9E9E9EA4A4A4A6A6A6A9A9ABABAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9BB
+BBBBBBBBBBBEC0C1C1C1C1C1C1C1C1C1C0BEBEBBB9B9B9B7B3B3B1B1B1B1AEAEAEAEAEABA9A9A9A6
+A6A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A9994949494949492929292928E8E8E8E8E8E8E8E8E
+8C898989898989898989898787858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676
+76747474747472726E6C6C6C6C6A6A6A6A676767666161615F5F5F5D59575755544F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF74797C7F8185858789898E8F92929292929494999A9A9A9C9C9E9E768EA6B9B9BEBEC1
+BEB9B7B6B3B1B1AEAEACA6A49E9C945FAEB1B1B3B6B9B9B9B7B7B7B9B9B9B9B9B9B9B9B9B9B7B7B6
+B6B6B3B1B1AEAEABABA9A9A9A6A6A4A39E9E9E9C9C9A9994928F8987817C7C878C92999CA4A6AEB1
+B7B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEABA9A6A49E9C9A948E
+877F7C76726C675F59554F4F5C616A71747C7F848789898E8F929292929292929292929292929292
+92928E898785817F79746C61594F4F4F54555757544F4F4F55575F5F646A6C6E72747474767C7C7C
+7C7C7C7C7C7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F
+81818485848484848485858787878787878787898989878789898989898989878787898989898987
+87878787878585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858587878787878787898989898987878787878989898989898787
+878787898987878787858484848585858585858587878787898989898C8E8F929292929292928F8E
+8C898989898989898C8E8E8E8E8E8F8F8F8F92929294949494949494999A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9994949494949494949494949292929292928F8E8C89898787858585878789
+8E9292949494999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A9A999494928E89817F89898E92929294
+949292928F8E8E8F8E898989898989898989898989898987858481817F7F7C7C7C7C7C87898F9292
+9494999C9C9E9E9EA3A4A4A6A6A6A6A9A9ABAEAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9BB
+BBBBBBBBBBBEC0C1C1C1C1C1C1C1C0C0BEBEBBBBB9B9B9B7B3B1B1B1B1B1AEAEAEAEABABA9A9A9A6
+A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A96949494949492929292928F8E8E8E8E8E8E8E8E
+8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7676767676
+7676747474747472716C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755514F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF767C7F7F84858787898C8F92929292929494949A9A9A9A9C9C9E7689A3B9C1C6C6C6C6
+C1BEBBB9B9B9B7B7B7B4AEA6A49E9A8959B1B1B3B6B9B9B7B7B6B6B7B9B9B9B9B9B9B7B7B6B6B6B3
+B3B3B1B1AEAEABA9A9A6A6A6A6A4A39E9E9C9C9C9A9994928F8987817F74848992949A9EA4A9AEB3
+B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEABABA9A6A49E9C9492
+89847C79746E6A615F57544F555F666A72767C818789898C8E8F9292929292929292929292929292
+92928F89898787817C76716A5F554F4F4F55575757554F515155575F5F616A6A6C72747474767C7C
+7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F81
+81848585858585848585858787878989878789898989898989898989898989898989898989898989
+89878787878787878585858585858585858585858585858585858585858585858585858585858585
+8585858585858585858585858585878787878787878989898989898989898989898C8E8C8C898989
+8989898989898989898787878787878787858587878787898989898C8E8F8F929292929292928F8E
+8989898989898C8C8E8E8F8F8F8F92929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A99949494949494949494949492929292928F8F8F8C898987878585858789898C
+8F9292949494999A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A999494928F89847C8789898E8F929292
+928F8E8C8989898987878584818181848485878787847F7F7F7C7C7C7C797676767C85898E929294
+94969A9C9E9E9EA1A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEB1B1B1B3B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBBBBBC0C1C1C1C1C1C1C0C0BBBBBBBBB9B9B9B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A9A6
+A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E
+8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676
+7676747474747472726C6C6C6C6C6A6A6A6A676767616161615F5F5F5D5757575554514F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF747C7C7F8185858789898E9292929292949494999A9A9A9A9C9C76899EB6C1C6C8CCCCCC
+C6C4C1C1BFBEBEBEBCBCB4ABA6A49C947B51B1B1B6B7B7B6B6B6B3B6B6B7B9B9B7B6B6B6B3B3B3B1
+B1B1B1AEAEABA9A6A6A6A6A6A4A49E9E9C9C9C9A9A9494928E89857F7C7F878E92999CA3A6ABB1B3
+B9B7B7B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEABABA9A6A49E9C9A92
+8C877F7C76726C67615D554F4F575F676C747C7F848789898E8E8F92929292929292929292929292
+92928F8C898987877F7B746C665C514F4F5155575757554F545455575D5F61676A6C72727474767C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81848585858585858585858587878989898989898989898989898989898989898989898989898989
+89898989878787878785858585858585858585858585858585858585858585858585858585858585
+8585858585858585878787878787878789898989878989898989898989898989898E8E8E8E8E8E8E
+8C8C8C898989898989898989898787878787878787878989898989898E8F929292929292928F8E8C
+8C8989898C8E8E8E8E8F9292929292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A999994949494949494949494949292928F8F8E8E8E898989878785858789898E8F
+9292949494999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A9A999492928C877F8489898C8E8F92928F
+8E8C8987878784817F7F7F7C7C79797979797C7C797676767676767674747474618189898F929494
+94999C9C9E9E9EA3A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEB1B1B3B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBBBBBBEC0C0C0C0C0C0BEBBBBBBBBB9B9B9B9B9B6B3B1B1B1B1AEAEAEAEAEABA9A9A9A6A6
+A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E
+8E89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676
+767674747474747472716C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575554514F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF74767C7F7F85858789898E8E9292929294949494999A9A9A9A9C7C899CAEBECCCCCFCFCFCF
+CCC6C6C6C6C4C4C6C4C1B9B1ABA69E9A926CB1B1B3B6B6B6B6B3B3B3B6B6B7B6B6B3B3B3B1B1B1B1
+B1B1AEAEABA9A6A6A6A4A4A4A49E9E9C9C9A9A9A9994928E89877F7C7C878C92949A9EA4A9AEB1B7
+B9B7B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEABABA9A6A39E9A94
+8F89847C76746C6A615F59554F5457616A72767C81878789898E8E8F8F9292929292929292929292
+9292928E8C898987817C76726A61554F4F4F5557575757554F555557575C5F61676A6C7272747476
+797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81848585858585858585858587878789898989898989898989898989898989898989898989898989
+89898987878789878787858585858585858585858585858585858585858585858585858585858585
+8585858585858587878787878787878989898989898989898989898C8C8C8C898C8E8F8F8F8F8F8F
+8E8E8E8E8C8C8C8C8E8E8C89898989898787878787898989898989898C8E8F8F8F8F92928F8C898C
+8C8C8C8E8E8E8E8E8F9292929292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9994949494949494929292929292928F8E8E8E8E8C8989878785858789898E8F92
+9294949999999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9A9A999494928C877F7F8789898C8E8E8F8E8C
+89898784817F7F7C7976767674747472727272727272727474747472727272727F87898E92949496
+9A9A9C9E9E9EA1A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBBBBBBBBEBEBEBEBEBEBBBBBBBBB9B9B9B9B9B7B3B1B1B1B1B1AEAEAEAEABABA9A9A9A6A6
+A6A6A6A4A4A4A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8F8E8E8E8E8E8E8E
+8E89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676
+767674747474747472716C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755544F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF767C7F7F84858787898C8E8F9292929294949494999A9A9A9C61929EABB7C4D1D1D3D4D4D3
+CFCCCCCCCCCCCCCCCCC8BEB6AEABA49C948E6672716A6661B3B3B3B3B3B3B6B3B3B1B1B1B1B1B1B1
+AEAEAEABA9A6A6A4A4A4A4A39E9E9C9C9C9A999994928F8987817F7484898F94999CA3A6ABAEB1B9
+B9B6B6B6B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEABABA6A49E9C99
+9289877F7C74726A67615F57514F555C616A72767F84878789898E8E8F9292929292929292929292
+929292928E8C8989877F7C76716A5D554F4F4F55575757575554555557595D5F61676A6C72727474
+76767C7C7C7C7C7C7C7C7F7F7F7F7F7C7C7F7F7F7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81818585858585858585858587878789898989898989898989898989898989898989898989898989
+89898787878787878787858585858585858585858585858585858585858585858585858585858585
+8585858585858787878789898989898989898989898989898989898C8E8E8E8E8E8F8F9292929292
+8F8F8F8F8E8E8E8F8F928F8F8E8C89898989878789898989898989898C8E8E8E8C8C8E8C8C898989
+8C8E8E8E8E8E8E8E8F9292929292929292929494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9996949494949494949292929292928F8F8E8E8E8E8989878785878789898F929294
+949499999A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A999494928C897F7C84898989898C8E8E8989
+8987847F7F7C7C7676767474747272716C6C6C6C6C717171716E6C6C6C6C6C7F84898C8F9294999A
+9A9C9C9E9E9EA3A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBB9BBBBBBBBBBBBBBBBBBB9BBB9B9B9B9B9B7B6B3B1B1B1B1AEAEAEAEAEABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9C9C9C9A9A9A9A9994949494949292929292928F8E8E8E8E8E8E8E
+8E89898989898989898989898787858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676
+767674747474747472726E6C6C6C6C6A6A6A6A676767616161615F5F5F5D5757575555544F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF767C7C7F8185858789898E8E9292929294949494969A9A9A9A6194A4ABB4BECCD4D4D9D9D9D9
+D4D1D1D3D1D1D4D4D2CCC4B9B6AEA69E9A92816176767676726A675CB1B3B3B1B1B1B1B1B1B1AEAE
+AEAEABA9A6A6A6A4A3A19E9E9E9E9C9C9A9A999494928E89857F7C7F898E92949A9EA4A9AEB1B3B9
+B7B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEABABA9A6A19C9A
+948F89817C76746C6A645F59554F4F555F676C747C7F85878789898C8E8F92929292929292929292
+92929292928E8C8989857F7C746C61574F4F4F5455575759575555555557595D5F61676A6C727474
+7476797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F818485858585858585858585878787878789898989898989898989898989898989898989898989
+89878787878787878787858585858585858585858585858585858585858585858585858585858585
+85858585858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8F9292929292
+9292928F8F8F8F8F92929292928F8E8C898989898989898989898989898C89898989898989898989
+8E8E8E8E8E8E8E8F9292929292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A999A9A9A9994949494949494929292929292928F8E8E8E8E8C898987878787898C9292929494
+94999A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9A999494928E898179818787898989898C898989
+87847F7F7C7C7C7C797676767474747272716C6C6C6C6C6C6C6C6C6C6C6C7C8589898E9294949A9C
+9C9C9E9E9EA1A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9
+BBBBBBBBB9B9BBB9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B1B1B1B1AEAEAEAEAEABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A9994949494949292929292928F8F8E8E8E8E8E8E
+8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C79767676
+76767474747474747472716C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555554F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF74767C7F7F84858789898E8E8E9292929294949494999A9A9A619CA4ABB1BCC8D4D9D9DCDFDCD9
+D9D7D9D9D9D9D9D9D9D1C8BEB9B1ABA49C948F79577F7C7674726A6A5F57B1B1B1B1B1AEAEAEAEAE
+AEABA9A6A6A6A4A49E9E9E9E9C9C9C9C9A999494928E89877F7C7C87898F94999C9EA6ABAEB1B6B9
+B7B6B3B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEABA9A6A49E9C
+999289877F7974726A67615F57544F5157616A72747C7F84878789898E8F92929292929292929292
+9292929292928E8C8989857F79746A5F554F4F4F5557575C595755575555575C5F5F61676A6C7274
+7476767C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F818185858585858585858585858787878787878789898989898989898989898989878787898989
+87878787858585878785858585858585858585858585858585858585858585858585858585858585
+858585858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F8F929292
+9292929292929292929292929292928E8C898989898989898989898989898989878989898989898C
+8E8E8E8E8E8E8F929292929292929292929494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999999999994949494949494949292929292928F8E8E8E8C8C898987878587898C929294949499
+9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A9494928F8984797F8587878989898989898987
+84818181817F7F7F7C7C7C7C7C79767674747272727272716C6E717171798589898E929294999A9C
+9C9C9E9E9EA3A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B9B6B6B3B3B1B1B1B1AEAEAEAEABABABABA9A6A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A999494949494929292929292928F8E8E8E8E8E8E
+8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C79767676
+76767474747474747472726C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755554F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF767C7F7F81858787898C8E8E8F9292929294949494999A9A9A92A4ABB4B9C1CED9DFE1E1E1E1DF
+DFDCDFDFDFDFE1E1E1D9CFC6BBB6AEA69E9A928F71547C797674716C6C6159B1B1AEAEAEAEAEAEAB
+ABA9A9A6A6A4A4A19E9E9C9C9C9C9C9A9A9994928F8987847C7684898E92949A9CA4A9AEB1B3B9B9
+B6B6B3B3B3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEA9A6A49E9C
+9A948F89817C76726C6A665F5C554F4F545D616A72767C7F81878789898F92929292929292929292
+929292929292928F8E8989857F76726657514F4F515557595C5C5757575757575D5F5F61676A6C72
+747676797C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F8184858585858585858585858585858787878787878989898989878787878987878787878787
+87878785858585858585858585858585858585858585858585858585858585858585858585858585
+8585858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F92
+9292929292929292929292929292928F8E8C8C898989898989898989878787878787898989898C8E
+8E8E8E8E8E8E8F92929292929292949494949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A
+999994949494949494949494949292929292928F8F8E898989898989878587898C9294949494999A
+9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9A9994928F89877C7C818787878989898989898987
+858587878787848181817F7F7F7C7C79767676767474727274747474748587898E929294949A9C9C
+9C9E9E9EA1A4A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B3B6B7B9B9B9B9B9B9
+BBBBBBBBB9B9B9B9B7B7B7B9B9B7B7B9B9B7B6B7B6B6B3B1B1B1B1B1AEAEAEAEABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A999494949494929292929292928F8E8E8E8E8E8E
+8E8C8989898989898989898987878585858585858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676
+76767674747474747472726C6C6C6C6C6A6A6A6A676767646161615F5F5F5D5757575555544F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+767C7C7F8185858789898E8E8E8F92929294949494949A9A9A5FA1ABB4B9C1C9D7E1E4E6E6E6E4E4
+E1E1E1E4E6E6E6E6E4D9CFC6C0B9B1ABA49C999287667C7C76747472716C675FAEAEAEAEABABABA9
+A9A9A6A6A4A4A19E9E9C9C9C9C9C9C9A999492928E89877F747F87898F92949A9EA6A9AEB1B3B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEABA9A6A49E
+9C999289877F7974716A67615F57544F4F575F676C72767C7F818787898C8F929292929292929292
+92929292929292928F8E8989847C766C61554F4F4F5557575C5D595757575759595D5F5F61676A6C
+7274747676797C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F8184858585858585858585858585858585878787878787878987878787878787878787878787
+87878585858585858585858585858585858585858585858585858585858585858585858585858585
+85858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92
+929292929292929292929292929292928F8E8E8E8C8C898989898989878787878787878989898C8E
+8E8E8E8E8E8E8F92929292929494949494949494949494949494999999999999999999999A9A9A9A
+999494949494949494949494929292929292928F8E8C898989898787878789899294949499999A9C
+9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A94949289877C7C7F858787898989898989898987
+8789898989878787878785847F7F7F7C7C7C7C7C76767676767676768187898E92929494999A9C9C
+9C9E9E9EA3A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEB1B1B3B3B3B3B3B6B7B7B7B9B9B9B9
+BBBBBBB9B9B9B9B7B6B6B6B6B6B6B6B7B7B6B6B6B6B3B3B1B1B1B1AEAEAEAEAEABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A949494949494929292929292928F8E8E8E8E8E
+8E8C8989898989898989898987878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676
+76767674747474747472726E6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555554F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76
+767C7F7F8485878789898E8E8F9292929294949494999A9A5F9CA6B1B9C1C8D1DFE7E7ECECECE7E7
+E6E6E6E7E6E6E6E6E1D9CFC6C0BBB6AEA6A19C94927C617C7674747472716C665FAEABABA9A9A9A9
+A6A6A6A4A4A39E9E9E9C9C9C9C9C9A999494928E89877F747C85898E9294999CA1A6A9AEB1B6B7B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEABA9A6A49E
+9C9A948F89817C74726C6A665F5C554F4F5159616A6C74767C7F848789898E929292929292929292
+929292929292929292928E8987817C746A5C4F4F4F4F55575C5D5D595959595C5D5D5F5F5F61676A
+6C6E72747476797C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F81848485858585858585858585858585858585878787878787878787878787878785858587
+87858585858585858585858585858585858585858585858585858585858585858585858585858585
+85878787878989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+929292929292929292929292929292928F8E8E8E8E8C89898989898987878787878789898989898C
+8E8E8E8E8E8E8F8F9292929294949494949494949494949494949494949494949496969999999999
+9694949494949494949494949292928F8F8F8F8E8C898989878787858789898F92949999999A9C9C
+9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9A9994928C877F747C84878789898989898989898989
+89898E8C8C89898989878784817F7F7F7F7F7F7C7C7C7C7C7C7C7C7F87898E92929494999A9C9C9C
+9E9E9EA1A4A4A4A6A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B6B6B7B7B7B9B9
+B9BBB9B9B9B9B7B6B3B3B3B3B3B3B3B6B6B6B6B6B6B3B3B1B1B1B1AEAEAEAEAEABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A969494949494929292929292928F8E8E8E8E8E
+8E8C8989898989898989898987878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676
+76767674747474747474726E6C6C6C6C6A6A6A6A67676767616161615F5F5F5C5757575555514F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476
+7C7F7F8185858789898C8E8E929292929294949494999A5F9AA4AEB9C1C8D1D9E4ECECEEEEECECE7
+E7E7E7E7E6E6E6E6E1D9CFC6C0BBB9B1ABA69E9A9492765E767674747272716A615CA9A9A9A6A6A6
+A6A6A4A4A39E9E9E9C9C9C9A9A9A999494928F8987817C798187898F92949A9CA4A6ABAEB1B6B7B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEA9A6A6A4
+9E9C969289877F7674716A67615F57554F4F545F616A7174797C7F8587898C8F9292929292929292
+92929292929292929492928E89877F797266554F4F4F5457595D5F5D5C5C5C5C5D5F5F5F5F5F6166
+6A6C6C71727476797C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F81818184848585858585858585858585858585858585878787878585858587878585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+8587878789898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F
+929292929292929292929292929292928F8E8E8E8E8E8C898989898989878787878989898989898C
+8E8E8E8E8E8E8E8F9292929294949494949494949494949494949494949494949494949494949494
+94949494949494949494949292928F8E8E8E8E8C898989878785878789898F9294999A9A9A9C9C9C
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A94928E8984727C818787878989898989898989898C
+8E8F8F8F8E8E8C89898787848484848484817F7F7F7F7F7F81817C87898E92929494999A9C9C9C9E
+9E9E9EA3A4A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B6B6B6B6B6B7B9
+B9B9B9B9B7B6B6B3B1B1B1B1B1B3B3B3B3B3B3B6B6B3B1B1B1B1B1AEAEAEAEABABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A999494949494929292929292928F8F8E8E8E8E
+8E8E898989898989898989898787858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976
+7676767474747474747472716C6C6C6C6C6A6A6A6A676767646161615F5F5F5D5957575555544F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C
+7C7F7F8585878989898E8E8F929292929294949494999A94A1ABB4BEC8CED9E4ECF2F2F1EEECECEC
+E7E7E7E7E7E6E6E6E1D9CFC4C0BBB9B6AEA9A49C9A948E74597674747472726E676157A6A6A6A6A6
+A6A4A4A39E9E9E9E9C9C9A9A99949494928F8C87847F747F84898C9294999C9EA4A6ABAEB1B6B6B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEA9A9A6A4
+A39E9A948F87817C74726C6A66615F57514F4F555F676C72747C7F818789898E9292929292929292
+92929292929292929494928F8989877F766C5F514F4F4F55575C5F5F5F5D5D5D5F5F615F5F616161
+666A6A6C6E727474767C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81818485858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+858787878989898989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8F8F92929292929292929292929292928F8F8E8E8E8E8C8989898989898989898989898989898C8E
+8E8E8E8E8E8E8F8F9292929294949494949494949494949494949494949494949494949494949494
+949494949494949494949292928F8F8E8C8989898989878785878789898E92949A9A9A9A9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C99928F898476797F858787898989898989898C8E8F92
+9292928F8F8E8C8989878787878787878784818184878787897281898C92929494999A9C9C9C9E9E
+9EA1A3A4A4A4A6A6A6A6A9A9A9ABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B3B3B3B3B3B6B6B6B6B6B9
+B9B9B7B6B3B3B3B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEABABABABABA9A9A6A6
+A6A6A6A6A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292929292928F8E8E8E8E
+8E8E898989898989898989898787878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976
+7676767474747474747472716C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5957575555554F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C
+7F7F848587878989898E8F929292929294949494969A599CA6B4BCC4CED7E1ECF2F2F2F2F1EEECEC
+ECECECECE7E6E6E6DFD7CCC6C0BBB9B6B1AEA6A19C9A948C74747474747272726C6A615CA6A6A4A4
+A4A4A39E9E9E9E9E9C9C9A94949492928F8C89877F767C8187898F92949A9C9EA4A9AEAEB1B3B6B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEABA9A6A6
+A49E9C949289877F7674716C6A615F59554F4F515761676C72767C7F8187898C8F92929292929292
+9292929292929292949494928E8989847C746A574F4F4F54575C5F5F5F5F5F5F5F5F6161615F6161
+61666A6C6C71727474767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818185858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+858587878789898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F8F9292929292929292928F8F8E8E8E8E8E8E8C8C898989898989898989898989898E8E
+8E8E8E8E8E8E8F929292929292949494949494949494949494949494949494949494949494949494
+949494949494949494949292928F8E8C8989898989878787878789898E9294999A9C9C9C9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A949289877C797F858787898989898C8E8E8F92929292
+929292928F8E8E8989898787898989878787878789898E928F7F87898F929494999A9C9C9C9E9EA1
+A3A4A4A4A4A4A6A6A6A6A9A9ABABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B3B3B3B3B3B6B6B6B6
+B9B6B6B3B3B3B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B1AEAEAEAEAEABABABABABABA9A6A6
+A6A6A6A6A4A4A4A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949494929292929292928F8E8E8E8E
+8E8E89898989898989898989898787858585858585858481817F7F7F7F7F7F7F7C7C7C7C7C7C7C76
+7676767674747474747472716C6C6C6C6C6A6A6A6A6A676767616161615F5F5F5C5757575555514F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7F
+7F818585878989898C8E92929292929494949494995C9AA4AEB7C4CCD4DFE6ECF2F2F2F2F2F2EEEC
+ECECECECE7E6E6E4DFD4CCC6C0BBB9B6B3B1ABA49E9C9992896C747474747272726C6A615FA4A4A4
+A39E9E9E9E9E9C9C9C9A96949292928F8C89878174797F87898E9294969A9EA3A6A9AEB1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEABA9A9A6
+A6A49E9A948F87817C74726C6A67615F57544F4F5559616A6E74767C7F8587898E8F929292929292
+9292929292929292929494928F8C89877F767161554F4F4F55595D5F5F5F5F5F5F5F616166616161
+6666666A6C6C72727474767B7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F8184858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+85858787878989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F8F8F9292929292928F8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898C8E
+8E8E8E8E8E8F92929292929292949494949494949494949494949494949494949494949494949494
+9494949494949494949292928F8E8C8989898787878787858789898E9294949A9C9C9C9C9C9C9E9E
+9EA1A1A1A1A1A1A1A1A19E9E9E9E9C9C9C99928C877F797F848789898C8E8E8F9292929292929294
+94929292928F8E8E89898989898989898787898C8F9292927C87898F9294949A9A9C9C9E9E9EA3A4
+A4A4A4A4A4A4A6A6A6A6A9A9ABABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B3B3B3B6
+B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B1B1B1B1AEAEAEAEABABABABABABABA9A6A6
+A6A6A6A6A4A4A4A4A4A19E9E9E9E9C9C9C9A9A9A9A9994949494949492929292929292928F8E8E8E
+8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79
+7676767674747474747472726C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555544F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F
+7F848587898989898E8F9292929292949494949499949EA9B4BEC8D3DCE1E7ECF2F4F2F2F2F2F1EC
+ECECECECE7E6E6E1DCD4CCC6C1BBB9B6B3B1AEA9A49E9C94928961747474747272726C6A665FA39E
+9E9E9E9E9C9C9C9C9A999492928F8E8989877F7C767F85898C8F9294999C9EA4A6A9AEB1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEA9A9A6
+A6A49E9C949289877F7674726C6A61615D57544F4F555D646A7274797F8187898C8E8F9292929292
+929292929292929292949494928E8989857C746A574F4F4F54575C5F5F5F5F5F5F5F616166676661
+666767676A6C717272747476797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F8184848585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+858787878789898989898989898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F8F8F8F92928F8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898C8E
+8E8E8E8E8E8F92929292929294949494949494949494949494949494949494949494949494949494
+94929292929292929292928F8F8E89898987878787858787898C8F929294999A9C9C9C9C9C9C9E9E
+A1A4A4A3A3A3A3A3A3A39E9E9E9C9C9C9A948F8981797F8587898E8F8F9292929292929294949494
+94929292928F8F8E8C8C8989898C8C8989898E8F9292926C84898E9294949A9A9C9C9E9EA1A3A4A4
+A4A6A6A6A6A6A6A6A6A6A9A9A9ABABABAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B3B3B3B3B3
+B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B1B1B1B1AEAEAEAEAEABABABABABABABA9A6A6
+A6A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A9994949494949494929292929292928F8E8E8E
+8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79
+7676767676747474747472726C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5C57575755554F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76797C7F7F
+818587878989898C8E9292929292949494949494929CA4AEBCC6CFD9DFE1E7EEF2F4F4F2F2F2F2EE
+EEECECECE7E6E6E1D9D4CCC6C1BBB9B7B3B1B1AEA6A49E9C948E7F57747474747474716C6A66619E
+9E9C9C9C9C9C9C9A999494928F8C8987857F7C767C8187898E8F92949A9EA4A6A9ABAEB1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEABA9A9
+A6A6A49E9A948F89817C74726C6A6761615C55514F4F575F666C72767C7F8487898E8E8F92929292
+929292929292929292929494928F8C89877F766C61554F4F51555C5D5F5F5F615F5F6161676A6A67
+67676A6A6A6A6C72727474767676797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F81818184848585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858587858585
+87878787898989898989898989898989898989898989898989898989898989898989898C8C8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898C
+8E8E8E8E8E8E8F929292929494949494949494949494949494949494949494949494949494949494
+92929292929292929292928F8E8C898987878785878787898C8F929294949A9C9C9C9C9E9E9E9EA1
+A4A4A4A4A4A4A4A4A4A39E9E9C9C9C9A94928984768187898C8F9292929294949494949494949494
+9494929292928F8F8E8C8C8C8E8E8E8C8E8E8F929294947F878C8F9294999A9C9C9E9EA3A4A4A4A4
+A6A6A6A6A6A6A6A6A6A6A9A9A9A9ABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3
+B1B1B1AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEABABABABABABABA9A9A6
+A6A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A9994949494949494929292929292928F8F8E8E
+8E8E8C89898989898989898989878787858585858585858581817F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7976767676747474747472726E6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757555551
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76797C7F7F7F
+8485878989898C8E8F929292929494949494948E999EA9B6C4CFD4D9DFE4E9F1F4F4F4F2F4F4F2F2
+F1EEEEECECE6E6E1D9D4C8C6C1BBB9B7B6B3B1B1ABA6A49E9A928971747472747474726C6C6A6761
+579C9C9C9C9C9A999494928F8C8987847F7C767C7F87898C8E8E92969C9EA4A9A9AEB1B1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEABA9
+A9A6A69E9C969289877F7674726C6A66615F5755514F51575F676C74767C7F8587898E8E8F929292
+92929292929292929292949292928E8989847C726A59514F4F55575D5F5F5F6161616164676A6A6A
+6A6A6A6A6A6A6C717272747476767676797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81818485858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858787878787
+878787898989898989898989898989898989898989898989898989898989898989898989898E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8C8C8C8C8C89898989898989
+8C8E8E8E8E8E8F8F9292929494949494949494949494949494949494949494929292949494949492
+929292929292928F8F8F8F8E8C898989878785878789898E8F92929494999A9C9C9E9E9E9E9EA1A4
+A4A4A4A4A4A4A4A4A49E9E9C9C9C9A99928C87768187898E92929494949494949694949494949494
+949492929292928F8F8E8E8E8E8E8E8E8F8F929294947C87898F9294999A9C9E9EA3A4A4A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1AEB1B1B1B1B1B1B1
+B1B1AEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABABABABABABABABA9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A999494949494949492929292929292928F8E8E
+8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7976767676747474747474726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D595757555554
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F81
+8587898989898E8E8F92929294949494949494949CA6AEBCC6CFD4D9E1E6ECF2F4F4F4F4F4F4F4F2
+F2F1F1ECECE7E6DFD9D3C9C6C1BBB9B9B6B3B1B1AEABA6A49C948F875F727272747474726C6C6A6A
+615F9C9C9C9A999494928F8C8987847F7C74767C848789898C8F949A9CA4A6A9ABAEB1B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAB
+A9A6A6A49E9A948F89817C74726C6A6764615F57554F4F555C616A7274797F818789898E8F8F9292
+92928F92929292929292929292928F8C89877F746C5F554F4F54555C5F5F5F5F61616164676A6A6A
+6A6A6A6A6A6A6C717272747476767676767C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F81817F7F7F818485858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858787878787878787878787
+878789898989898989898989898989898989898989898989898989898989898989898989898C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292928F8F8F8F8F8F8F8F8E8E8E8E8E8C898989898989
+8C8E8E8E8E8E8F929292929494949494949494949494949494949494949494929292929292929292
+92928F8F8F8F8F8E8E8E8E8C898987878785878789898E9292929494999A9C9C9C9E9E9E9EA1A4A4
+A4A4A4A4A4A4A4A4A39E9C9C9C9A99948F897481878C8F929494949499999A9A9A99969494949494
+94949492929292928F8E8E8E8E8E8E8E92929294947984898C9294949A9C9E9EA4A4A4A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEAEB1B1B1AEAEAEAEB1B1B1B1B1
+B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1AEAEAEAEABABABABABABABA9A9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A9694949494949494929292929292928F8E8E
+8E8E8E8C89898989898989898989878787858585858585858481817F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7676767676747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5C5757575555
+4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F7F84
+87878989898E8E8E929292929494949494948E9AA4ABB7C1CCD1D9DEE1E6ECF2F4F4F4F4F4F4F4F4
+F2F2F2ECECE7E4DFD9D1C9C6C1BBB9B9B7B3B1B1B1AEABA6A19C948976577272727474726E716C6C
+6C6661579A999494928F8C8987847F7F76767C7F878789898C92949C9EA4A9ABAEAEB1B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAB
+A9A9A6A69E9C94928C877F7674726C6766615F5C57554F4F555D616A72767C7F848789898E8F8F8F
+928F8F9292929292929292929292928E89878179726759514F4F55575D5F5F5F6161616166676A6A
+6A6C6C6C6C6C6C71727272747476767679797C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81818184818181818484858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858787878785878787878787878787898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292928F8E8E8E8E8E8C898989898989
+8C8E8E8E8E8F92929292929292929294949494949494949494949494949492929292929292929292
+928F8F8E8E8C8C8C8C8C89898987878785878787898E92929494949A9A9C9C9C9C9E9E9EA1A4A4A4
+A6A6A6A6A4A4A4A49E9E9C9C9A99949289817F878C92929499999A9A9A9A9A9A9A9A999494949494
+949492929292928F8E8E8E8E8E8E8E8F92929494948187898E9294999C9C9EA4A4A6A6A6A9A9A6A6
+A9A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1AEAEAEAEAEAEABABABABABABABA9A9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A969494949494949492929292929292928F8E
+8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7976767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5D5757575555
+544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72767C7C7F7F7F8185
+878989898C8E8E8F92929292949494949461949EA6B1BEC6CCD3D9DFE4E7ECF2F4F4F4F4F4F7F4F4
+F4F4F2ECECE7E1DCD4CFC9C6C1BBB9B9B7B6B1B1B1B1AEABA69E9A92876C7272727474747272726C
+716C6A6A615C94928F8C898784817F7976797F84878787898E949A9CA3A6ABAEAEB1B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAE
+ABA9A9A6A49E9A948F89817C76746C6A6766615F5D57544F4F575F666C74767C7F8587898C8E8E8E
+8F8F8F8F929292928F9292929292928F8987847C746C61554F4F5455595F5F5F6161616166676A6A
+6C6C6C6C6C6C6C7272727474747676797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+817F7F7F7F8181848485858484848485858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858787878585878787878787878787898987878789898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898C8C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292929292928F8E8E8E8E8E8C898989898C
+8E8E8E8E8E8F9292929292929292929292929292929292929292929494929292928F8F8F8F8F928F
+8E8E8C89898989898989898787858585878787898C9292929494999A9C9C9C9C9E9E9EA3A4A4A4A6
+A6A6A6A6A6A4A4A39E9C9C9A96949289877F878C929294999A9A9A9C9C9C9C9C9A9A999694949494
+949492929292928F8E8E8E8E8E8E8E92929294947F87898C8F94949A9C9EA3A4A6A6A9A9A9A9A9A9
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1AEAEAEAEAEAEAEABABABABABABABABA9A9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A999494949494949494929292929292928F8E
+8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7976767676747474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555
+554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74797C7C7F7F7F8487
+878989898E8E8E8F9292929294949494998F9AA4AEB7C0C6CFD4D9E1E6E9ECF2F4F4F7F7F7F7F7F4
+F4F2F2ECECE7E1DCD4CFCCC6C1BBB9B9B9B6B3B1B1B1B1AEA9A49C948C7F61727272747472727272
+7274726C6A665F8F8C898784817F7976767C7F848487878992949C9EA4A9ABAEB1B1B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAE
+AEABA9A6A49E9C96928C877F7C74726A6A6761615F5D57514F4F575F676E74767C81878789898C8C
+8E8E8E8E8F92928F8F9292929292928F8C89877F7672675C514F5155575D5F5F5F61616161676A6A
+6C6C6C6C6C6C6C7272747474747476797C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181
+81818181818184848585858585858585858585858585858585858585858585858585858785858585
+85878787878585858585858787878585878787878787878787898787878789898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292928F8E8E8E8E8E8E8C8C8C8C8E
+8E8E8E8E8F8F92929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+89898989898989898989878785858585878789898F92929494999A9C9C9C9C9C9E9EA1A4A4A4A6A6
+A6A6A6A6A4A4A49E9C9C9A9494928C877C87899294949A9C9C9C9C9C9C9C9C9C9A9A999994949494
+9492929292928F8E8E8E8E8E8E8E8F92929494798487898E9294999C9C9EA4A6A6A9A9A9A9A9ABAB
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEAEABABABABABAEAEAE
+AEABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A9A6
+A6A6A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9A9A9A9A999494949494949494929292929292928F8E
+8E8E8E8E8C89898989898989898989878787858585858585858581817F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7976767676747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755
+55514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F7F818587
+8989898E8E8E8F9292929294949494965F949EA6B1B9C1C8D1D9DCE1E6ECEEF2F4F4F7F7F7F7F7F4
+F4F2F2ECECE7E1DCD4CFC9C6C1BBBBB9B9B6B3B3B1B1B1B1AEA69E9A9287765C7172747474727474
+747474726C6C67615487847F7F797679767F7F7F7F85878C929A9CA1A6A9AEAEB1B1B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAE
+AEABA9A9A6A49E9A948F89847C76746C6A6766615F5F5C57514F545C616A7174797F848787898989
+8C8C8E8E8F8F928F8F8F929292928F8F8E8987817C746C5F554F4F5555595F5F5F6161616166676A
+6A6C6C6E6E71727272747474747476767C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184
+84858484818484858585858585878785858587878787878585858585858787858585878787878787
+87878787878787878585878787878787878787878787878789898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F929292929292929292929292929292929292929292929292928F8E8C8C8C8C8C8989
+898989898787878787878785858585878789898E92929494949A9C9C9E9E9E9E9E9EA3A4A4A6A6A6
+A6A6A6A4A4A49E9E9C9A9492928C877984898F92949A9C9C9C9C9C9C9C9C9C9C9C9A999494949494
+9492929292928F8E8E8E8E8E8E8F9292929474818789898F92949A9C9EA3A4A6A6A9A9A9A9A9A9A9
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEABA9A9A9A9ABABAB
+ABABABABABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6
+A6A6A6A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9A9A9A9A99949494949494949492929292929292928E
+8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7976767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5D57575755
+55544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F7F81858587
+89898C8E8E8E929292929294949494618F9AA4AEB6BBC4CCD3D9DFE4E7ECF2F4F4F4F7F7F7F7F7F4
+F4F2F2ECECE6E1D9D4CFC9C6C1BBBBB9B9B7B6B3B3B1B1B1AEABA49C948E87715572727474747474
+7474747472726C6A64597F7F7C747C747C7C7C7C7F848992999C9EA4A6ABAEAEB1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AE
+AEAEABA9A6A4A19C99928C877F7C74726A6A676461615F5C55514F555D616A72747C7F8487878989
+8989898C8E8F8F8F8E8F8F9292928F8F8E8987847F76716657544F4F55575C5F5F6161616166676A
+6A6C6C71717272727474747476767676797C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818484
+85878785848487878787858587878787878787878787878787878585878787878787878787878787
+87878989878787878787878787878989898989898989878989898989898989898C8C8C8989898989
+8989898989898C8C8989898989898989898989898989898989898989898989898989898989898989
+8989898E8E8E8E8E8E8E8E8E8F929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F92929292929292929292929292929292929292928F8F8F8E8C8989898989898987
+87878787878787878787858585858789898C8E9292929494969A9C9C9E9E9E9E9EA1A4A4A4A6A6A6
+A6A6A6A4A39E9E9C9A9994928E877F7F898F92949A9C9C9C9C9C9C9C9C9C9C9C9A9A999494949494
+92929292928F8E8E8E8E8E8E8E8F929292947F8789898C9294999A9E9EA4A6A6A6A9A9A9A9A9A9A9
+A9A9A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEABABA9A9A9A9A9A9A9
+A9A9A9A9A9ABABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6
+A6A6A6A4A4A4A4A3A39E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7B76767676767474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D59575755
+55554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7C7F7F7F84858787
+898C8E8E8E8F92929292929494949489949EA9B1B9BEC6CFD4D9E1E6ECECF2F4F4F7F7F7F7F7F7F4
+F4F2F1ECECE6E1D9D4CFC9C6C1BBBBB9B9B9B6B6B3B3B1B1AEAEA9A39A9289856A54727272727474
+74747476747474716C67617C717B74747476767C81878F949C9EA3A4A9AEAEB1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1
+AEAEAEA9A6A6A49E9A948F89857F79746C6A67666161615F59554F4F575F676C72767C8184878787
+898989898E8E8F8F8E8E8F92928F8F8F8E8C89857F7C746A5F554F4F5457575D5F5F61616161676A
+6A6C6C71727274747474767676767679797C7C7C7C7C7C7F7F7F7F7F7F81817F7F7F7F8181848485
+87878787878787878787878787878787878787878989898989878787878787878787878989898989
+89898989898989878989898989898989898989898989898989898C898989898C8E8E8E8E8C8C8C89
+8989898C8C8E8E8E8E8E8C8C89898989898989898989898989898989898989898989898989898989
+8989898C8E8E8E8E8E8E8E8F8F92929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F929292929292929292929292929292929292928F8E8E8C89898989898989878787
+858481818184848484818484858789898E8F929292949494999A9C9C9E9E9E9E9EA3A4A4A4A6A6A6
+A6A6A6A49E9E9C9A9994928C877F7C878E92949A9C9C9E9E9E9C9E9E9C9C9C9C9A99949494949494
+92929292928F8E8E8E8E8E8E8F929292927C8589898C8F92949A9C9EA1A4A6A6A9A9ABA9A9A6A9A9
+A9A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9ABABABABAEAEABA9A9A9A9A9A9A9A9
+A9A9A9A9A9ABABABABABABABABABABAEAEAEAEAEAEAEABAEAEAEAEABABABABABABABA9A9A9A9A6A6
+A6A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7676767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757
+5555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767B7C7C7F7F7F8185858789
+898E8E8E8F9292929292949494945F8E9AA4AEB6B9C1C6CFD4DCE1E7ECEEF2F4F4F7F7F9F9F9F7F4
+F4F2F1ECECE6E1D9D4CFC9C6C1BBBBB9B9B9B7B6B6B3B3B1B1AEAEA69E9992897C64717272727474
+747474767674767474726C6A665D6C6A6A6C747C8789929A9EA1A4A6ABAEAEB1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+AEAEAEABA9A6A4A19C99928C87817C74716A6767666161615F57554F4F575F676C72767F7F818587
+878989898C8E8E8E8E8E8E8F8F8F8F8E8E8C8987817F766C6157514F4F55575C5F5F616161616667
+6A6A6C717272747476767676767979797C7C7C7C7C7C7F7F7F7F7F81818184818181818184848587
+87878787878787878787878789898989898989898989898989898989898989898989898989898989
+8C8C898989898989898989898989898C8C8E8C8C8989898C8C8E8E8E8C8C8C8E8E8F8F8F8E8E8E8E
+8C8E8E8F8F8F8F8F8F8F8E8E8E8E8C8C8C8989898989898989898989898989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8F92929292929292949494929292929292928F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F929292929292929292929292929292929292928F8E8C898989878787878787878481
+7F7F7F7F7F7F7F7F7F818184858789898E8F929292949494999A9C9C9C9E9E9E9EA3A4A4A6A6A6A6
+A6A6A4A39E9C9C9994928C877F79848992949A9C9C9E9E9E9E9E9C9C9C9C9C9A9A99949494949492
+9292928F8F8E8E8E8E8E8E8E8F929292748187898C8E9294969C9EA1A4A4A6A6A9A9A9A9A6A6A6A6
+A6A6A6A6A6A6A6A6A6A4A4A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9A9ABABABABABA9A9A6A9A9A9A9A9
+A9A9A9A9A9ABABABABABABABABABABABAEAEAEAEAEABABABAEAEAEABA9ABABABABABA9A9A9A6A6A6
+A6A6A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7976767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D595757
+5555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7276767C7C7F7F7F818585878989
+8C8E8E8E9292929292929494949489929EA9B1B7BBC4CCD3D9DFE4E7ECF1F2F4F4F7F7F9F9F9F7F4
+F4F2EEECE9E6DFD9D3CFC9C6C1BBBBBBB9B9B9B7B6B6B3B1B1AEAEA9A49C948F8776617172727274
+747474767976797C797674726C6C6A6C74747F87898E949C9EA4A6A9ABAEAEB1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+B1AEAEAEA9A6A6A49E9C949289877F79726C6A6767616161615F57554F5459616A6C747C7F7F8184
+87878989898C8E8E8E8E8E8F8F8F8E8E8E8C8987847F79726A5D554F4F5157595D5F5F6161616667
+6A6A6C6C727274747676767979797C7C7C7C7C7F7F7F7F7F7F7F8181818485858585858585878787
+8787898987878787898989898989898989898C8C8989898C8C8E8C898989898989898C8C8989898C
+8E8E8E8C8989898C8C8C8E8E8C89898C8E8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8F9292928F8F8F8F
+8E8F8F9292929292928F8F8F8F8F8F8F8E8E8E8E8E8F8E8E8C898989898989898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8F9292929292929294949492929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8F92929292929292929292928F8F8F8F8F8F8F8F8E8C8989898787878484848481817F7F
+7F7C7C7C7C7C7C7F7F7F8181878789898E92929294949499999A9C9C9C9E9E9EA1A4A4A4A6A6A6A6
+A6A6A49E9E9C9A949289877F7681899294999C9C9EA3A19E9E9C9C9C9C9C9C9A9A96949494949492
+92928F8E8E8E8E8E8E8E8E8F929292927F8789898E8F92949A9C9EA4A4A6A6A6A9A9A9A9A6A6A6A6
+A6A6A6A6A4A4A6A6A6A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9A9A9ABABABA9A9A6A6A6A6A6A6
+A6A6A6A6A9A9ABABABABABABABABABABABAEAEAEAEABA9ABABAEABABA9A9ABABABABA9A9A9A6A6A6
+A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8E8E898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C
+7C7C7C797676767676747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F595757
+5755554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C7C7F7F7F7F858587878989
+8E8E8E8F929292929294949494618E99A4AEB1B9BEC6CCD4D9DFE6E7ECF1F2F4F4F7F7F9F9F9F7F4
+F2F2EEECE7E4DFD9D3CFC8C6C1BEBBBBB9B9B9B9B7B6B3B1B1AEAEABA6A19A948C87746171727274
+7474747679797C7C7C797676747476747C7F87898E92999C9EA4A6A9ABAEB1B1B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1AEAEABA9A6A49E9C99948F89847F746C6A676766646461615F57554F555C616A71767C7C7F81
+8487898989898C8E8E8E8E8E8F8E8E8E8C8C898987817C746C6157514F4F55575C5F5F6161616167
+6A6A6C6C71727474767679797C7C7C7C7C7F7F7F7F7F7F7F7F818184848587878787878787878787
+8789898989898789898989898C8C8989898C8E8E8C8C898C8E8E8E8E8C8C8989898C8E8E8E8C8C8C
+8E8F8E8E8E8E8E8E8F8F8F8E8E8E8C8E8F8F8F8F8F8F8F92929292928F8F8F8F8F9292929292928F
+8F8F929292929292929292929292929292928F8F929292928F8F8E8C898C8C8E8E8C8C8989898989
+8C8C8E8E8E8E8E8E8E8E8E8E8F8F929292929292949494949292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8F9292929292929292929292928F8E8E8E8E8E8E8C89898987878784817F7F7F7F7F7C7C79
+76767676797C7C7C7F7F7F818787898C8F929294949494999A9A9C9C9C9E9E9EA3A4A4A4A6A6A6A6
+A6A4A19E9C9A94948E877F747F878F94969C9C9EA1A39E9E9E9C9C9C9C9C9A9A9994949494949292
+928F8E8E8E8E8E8E8E8E8E8F9292927C8789898E8F9294999C9EA3A4A6A6A6A6A9A9A9A9A6A6A6A6
+A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6
+A6A6A6A6A9A9ABABABABABABABABABABABABAEAEABABA9A9ABABABABA9A9A9ABABA9A9A9A9A6A6A6
+A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9A9A9A9A9A969494949494949492929292929292928F
+8E8E8E8E8E8E8E8C8989898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C
+7C7C7C797676767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C5757
+575555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7C7F7F7F84858587898989
+8E8E8F9292929292949494949489929CA6AEB6B9C1C6CFD4DCE1E6ECECF2F4F4F4F7F9F9F9F9F7F4
+F2F2EEECE7E4DFD9D3CFC8C6C1BEBBBBB9B9B9B9B9B7B6B3B1B1AEAEA9A69E99928C877C6A717272
+74747476797C7C7C7C7C797C7C767C7F8187878C92949A9C9EA4A6A9ABAEB1B1B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1AEAEA9A6A4A39E9C94928C878179726C6A676766666666615D57544F555D646A72767C7C7F
+8185878989898C8E8E8E8E8E8E8E8E8C8C89898987817F7972675D554F4F5157595D5F6161616166
+676A6A6C717274747476797C7C7C7C7C7F7F7F818181818181818484858787878787898787878787
+89898989898989898989898C8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8F8E8E8E8E
+8F8F8F8F8F8F8F929292928F8F8F8E8E8F9292928F8F9292929292929292928F9292929292929292
+9292929292929292929292929292929292929292929292929292928F8F8E8F8F8F8F8E8C8C8E8E8E
+8F8F8E8E8E8E8E8E8E8E8E8E8E8F9292929292929494949292929292928F8E8E8E8E8E8E8F8F8F8F
+8F8F8F8F92929292929292929292928F8E8C8C8C8C8C89898987878784817F7F7C7C7C7976747474
+7472747476797C7F7F7F81858789898E929292949494999A9A9C9C9C9C9E9EA1A4A4A4A4A6A4A4A4
+A4A39E9C9A96948F897F767F878C92949A9C9E9E9E9E9E9E9C9C9C9A9A9A9A9A9994949494949292
+8F8E8E8E8E8E8C8C8E8E8F929292748489898C8F9292949A9C9EA4A4A6A6A6A6A9A9A9A6A6A6A6A6
+A6A6A6A4A4A4A4A4A4A4A4A3A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9A6A6A6A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A9A9ABABABABABABABABABABA9ABABAEABABA9A9ABABABA9A9A9A9ABABA9A9A9A6A6A6A6
+A6A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A999494949494949494929292929292928F
+8E8E8E8E8E8E8E8C8989898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C
+7C7C7C797676767676747474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957
+575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7C7F7F7F818585878989898C
+8E8E8F929292929494949494878E94A1A9B1B7BEC1CCD1D9DEE1E7ECECF2F4F4F7F7F9F9F9F9F7F4
+F2F1ECECE7E1DFD9D3CFC8C6C1BEBBBBB9B9B9B9B9B9B6B3B1B1AEAEABA9A49C96928E89856A7172
+74747476797C7C7C7C7F7C7C7F7C7F858789898E92999C9EA1A4A6A9ABAEB1B1B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1AEAEABA9A6A49E9E9A949289877F746C6A67676767666666615D57514F575F676C74767C7C
+7F8487878989898C8E8E8E8E8E8E8C8C8989898989857F7C746A6157514F4F55575D5F5F61616166
+676A6A6C6C7272747476797C7C7C7C7F7F7F81848484848484848485878787878789898989878789
+898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F
+8F9292928F8F929292929292928F8F8F929292929292929292929292929292929292929292929292
+92929292929292929292929292929494949494929494949292929292929292929292928F8F8F9292
+928F8F8F8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292928F8E8E8E8F8F8F92929292
+92929292929292929292929292928F8E8E89898989898787878584817F7F7C7C797674747271716E
+6E727474767C7C7F7F81858789898E8F929294949494999A9A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A3
+A19E9C9C9994928981767C87898F94999C9C9E9E9E9E9E9E9C9C9C9A9A9A9A999494949494929292
+8F8E8E8E8C8989898C8E929292927F87898C8E8F9294999C9EA3A4A4A6A6A6A6A9A9A9A6A6A6A6A6
+A6A6A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A9A9ABABABABABABABABABA9A9ABABABA9A9A9A9ABABA9A9A9A9A9ABA9A9A9A6A6A6A6
+A6A4A4A4A4A3A19E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A999494949494949494929292929292928F
+8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585817F7F7F7F7F7F7F7F7C7C7C
+7C7C7C79767676767676747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5C57
+575755554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7F7F7F81858587878989898E
+8E8E9292929294949494949489929CA4ABB1B9BEC6CCD3D9DFE4E7ECEEF2F4F4F7F7F9F9F9F9F7F4
+F2F1ECECE7E1DED9D3CFC8C6C1C0BBBBB9B9B9B9B9B9B7B3B1B1AEAEAEA9A6A39C9A94928E896C72
+7274747676797C7C7C7F7F7F7F84858787898E92949A9C9EA3A4A6A9ABAEB1B1B1B3B3B3B3B3B3B3
+B3B3B1B3B3B3B3B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1AEAEA9A6A4A49E9C9A948E89817C746C6A67676767676766615D554F4F575F676E74767C
+7F818487878989898C8E8E8E8E8E8C8C898989898987817C766C665C554F4F51575C5F5F61616161
+676A6A6C6C7172747476767C7C7C7C7F7F8184858587878787878587878787878989898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292928F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929494949494949494949494949494949494949292929292929492929292929292
+929292928F8F8E8E8E8E8E8E8E8E8F929292929292929292929292928F8E8E8F8F92929292929292
+929292929292929292929292928F8F8E8C8989898787878584817F7F7C7C767474726C6A6A6A6C6E
+727476797C7C7F7F81858789898C8F929292949494999A9A9C9C9C9C9E9EA1A4A4A4A4A4A4A39E9E
+9E9C9C9A94928981767C84898F92949A9C9C9E9E9E9E9E9E9C9C9A9A9A9A9A99949494949292928F
+8E8E8E8C898989898E8F9292927C8789898E8E9292949A9C9EA4A4A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A3A3A4A4A4A4A3A19EA1A3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A6A6A6A6A9A9A9A9ABABABABABABA9A9A9ABABA9A9A9A9A9ABA9A9A9A9A9A9A9A9A6A6A6A6A6
+A6A4A4A4A4A3A19E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949494949292929292929292
+8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585817F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C767676767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C57
+57575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7F7F7F7F848587878989898C8E
+8E8F929292929494949494948E949EA6AEB6B9C1C6CFD4D9DFE6E7ECEEF2F4F4F7F7F9F9FAF9F7F4
+F2EEECECE7E1DCD9D3CFC8C6C1C0BBBBB9B9B9B9B9B9B7B6B3B1B1AEAEABA9A6A49E9A94928F876C
+7272747476797C7F7F7F817F84858787898C8F92949A9C9EA4A6A6A9AEAEB1B1B1B1B3B3B3B3B3B3
+B3B1B1B1B3B3B3B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1AEAEABA9A6A4A39E9C949289877F76716A67676767676767645F59554F515C616A727476
+7C7F818587898989898E8E8E8E8C8C89898989898987847F79726A5F554F4F4F55575C5F61616161
+66676A6A6C7172747476767C7C7C7F7F7F8485858587878787878787878787898989898989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929494949494949494949494949494949494949494949292949494949492929292
+9292929292928F8F8F8E8E8E8E8E8F8F8F8F9292929292929292928F8F8E8F929292929292929292
+949492929292929292929292928F8E8989898787878481817F7F7C7C7674726E6C6C727272727274
+7676797C7C7F7F81858789898C8E92929294949496999A9A9C9C9C9E9E9EA3A4A4A4A4A4A19E9E9E
+9C9C9A94928E84767C81898E9294999A9C9C9C9E9E9E9C9C9C9C9A9A9A9A9994949494929292928E
+8E8C89898989898C8F929292748489898E8E8F9294999C9EA1A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A3A19EA1A3A3A4A4A19E9E9EA19EA3A4A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A6A6A6A9A9A9A9ABABABABA9A9A9A9A9ABA9A9A9A9A9A9A9A9A6A9A9A9A9A9A6A6A6A6A6
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8989898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C
+7C7C7C7C767676767676767474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D59
+57575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F84858587898989898E8E
+8E8F92929292949494949487929AA4A9AEB7BEC4CCCFD4DCE1E6ECECF1F2F4F4F7F7F9F9F9F9F7F4
+F2EEECECE6E1DCD4D3CFC8C6C1C0BBBBB9B9B9B9B9B9B9B6B3B1B1B1AEAEA9A6A6A49E9C9A948C85
+6A7272747476797C7F7F818485878789898E9294999A9C9EA4A6A6A9AEAEB1B1B1B1B1B1B3B3B3B3
+B3B1B1B1B3B3B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1
+B1B1B1B1B1AEAEA9A6A6A49E9C9A948F89857C746C6A67676767676A67615F57554F555D646A7274
+767C7F8187878989898C8E8E8E8C8989898989898989857F7C746A6459554F4F5457595F5F616161
+66676A6A6C6C72727476797C7C7F7F7F7F8185858585878789878787878789898989898989898989
+898C8C898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949492949494949494949494949494949494949494949494949494949494949494949494
+94929292929292928F8F8F8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8E8E8E8F929292949494949494
+9494949492929292929292928F8E8C8987878784817F7F7F7C797674726E7174767C7C7676767676
+797C7C7F7F7F8184878789898E92929294949494999A9A9A9C9C9C9C9E9EA1A1A1A3A39E9E9E9C9C
+9A9A94928E8776797F878C929496999A9C9C9C9E9C9C9C9C9C9A9A9A9A9A949494929292928F8F8E
+8C8989898989898E8F928F8F7F89898C8E8E8F92949A9C9EA4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4
+A3A19E9E9E9E9EA1A3A3A19E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A6A6A9A9A9A9A9A9ABABA9A9A9A9A9A9A9A9A6A9A9A9A9A9A6A6A9A9A9A9A6A6A6A6A6
+A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7C7C
+7C7C7C7C79767676767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C
+5757575555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7C7F7F7F81858587898989898C8E8E
+8E9292929294949494949489949CA4A9B1B9BEC6CCD1D9DCE1E7ECECF2F2F4F4F7F7F9F9F9F9F4F4
+F2EEECECE6E1D9D4D1CFC8C6C1C0BBBBBBBBB9B9B9B9B9B6B3B1B1B1B1AEABA9A9A9A6A49C9A9289
+816172727476797C7F7F8184878787898C8E9294999C9C9EA4A6A6A9AEAEB1B1B1B1B1B1B3B3B3B3
+B3B1B1B1B1B3B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1AEAEABA9A6A6A49E9C99928E87817C726A67676767676A6A67615F57544F575F676C72
+74797C7F8487878989898C8E8E8E8989898989898987877F7C766C675F554F4F4F55575C5F616161
+61676A6A6C6C71727476797C7C7F7F7F7F8184858585878789898787878989898989898989898989
+898C8E8C8C898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929294949494949494
+94949494929292929292928F8E8E8987878481817F7F7C7C7974727172767C7F817F7F7F7C7C7C7C
+797C7F7F7F8181858789898E8F92929294949499999A9A9A9C9C9C9C9C9E9E9E9E9E9E9E9C9C9A9A
+9994928C8779767F8789929494999A9A9C9C9C9C9C9C9C9C9C9A9A9A9A949492929292928F8E8C89
+8989898989898C8E8E8F8E7C87898C8E8E8E9292949A9C9EA4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A3
+A19E9E9E9E9E9E9E9EA19E9E9E9E9E9E9E9EA3A3A3A1A1A3A4A3A3A3A1A1A3A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A6A6A6A9A9A9A9A9A9A9A9A6A9A9A9A9A9A6A6A9A9A9A9A6A6A9A9A9A6A6A6A6A6A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7C7C
+7C7C7C7C79767676767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5D
+5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7C7F7F7F81858587878989898C8E8E8E
+8F9292929294949494947F8F9A9EA6AEB1B9C1C6CFD3D9DFE4E7ECECF2F4F4F4F7F9F9FAF9F7F4F4
+F2ECECECE6DFD9D4D1CFC8C6C1C1BBBBBBBBBBB9B9B9B9B6B3B3B1B1B1AEAEABA9A9A9A6A49C9992
+877F57727274767C7F7F8184878787898E8F9294999C9C9EA4A6A6A9ACAEB1B1B1B1B1B1B1B3B3B3
+B3B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEABA9A9A6A4A19E9C949289877F766C6A676767676A6A67665F5D554F4F575F676C
+72767C7F8185878989898C8E8E8E898989898989878787817C76726A6159554F4F5155575F616161
+6166676A6C6C71727476797C7C7F7F7F7F8184858585878787898989898989898989898989898989
+8C8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929494949494949494
+949494929292929292928F8E8C8989878481817F7F7C7C76747272747C7F8587878784817F7F7F7C
+7C7C7F7F7F8184858789898E8F929294949494999A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9A9A9994
+94928E8779767F85898F9294999A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9494929292928F8F8E898987
+878789898989898C8E8E768489898E8E8E8F9294999C9EA1A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A1
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1
+A1A3A3A3A4A4A6A6A6A6A9A9A9A9A9A9A9A6A6A9A9A9A6A6A6A6A9A9A6A6A6A6A9A9A6A6A6A6A6A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8E89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7976767676767674747474747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F
+5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474767C7C7C7F7F7F7F84858787898989898E8E8E8F
+9292929292949494949487929C9EA6AEB6BBC1C8CFD4D9DFE6ECECEEF2F4F4F7F7F9F9FAF9F7F4F4
+F1ECECE7E4DFD9D4D1CFC8C6C1C1BEBBBBBBBBBBB9B9B9B7B3B3B3B1B1B1AEAEABABABABA6A49C94
+8E857171727476797C7F8184878789898E929294999C9EA1A4A6A6A9ABAEAEB1B1B1B1B1B1B1B3B3
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1AEAEABA9A9A6A49E9C9A948F89847C746C6A676767676A6A67615F59554F4F59616A
+6E74767C7F8187878989898E8E8E8C8989898987878787847F79746C675F574F4F4F55575C5F6161
+6166676A6A6C6E727274797C7F7F7F7F7F818185858585878789898989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8F9292929292929494949494949494
+9494949292928F8F8F8E8C898987878581817F7C7C7974747474797F81878989898987878584817F
+7F7C7C7F7F8181848789898E8F929494949494999A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A99949492
+9289877C767F85878C9294999A9A9A9A9A9A9A9A9A9A9A9A9A999996949292928F8F8E8C89878787
+878787898989898C8E8E7F89898E8E8E8E8F92949A9C9EA4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E
+9E9E9EA1A1A4A4A6A6A6A6A6A9A9A9A9A6A6A6A9A9A9A6A6A6A6A9A9A6A6A6A6A6A9A6A6A6A6A6A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A96949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858584817F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7976767676767674747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F
+5C5757575555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474767C7C7F7F7F7F7F81858587898989898E8E8E8E92
+9292929294949494949489949CA4A9B1B7BEC1C9CFD4D9E1E6ECECF1F2F4F4F7F7F9F9FAF9F7F4F2
+F1ECECE7E4DFD9D4D1CFC8C6C1C1BEBBBBBBBBBBB9B9B9B7B6B3B3B3B1B1AEAEAEAEAEAEABA6A49C
+92897F61717274767C7F8184878789898F929294999C9EA3A4A4A6A6ABAEAEAEB1B1B1B1B1B1B1B3
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1AEAEABABA9A6A4A39E9C99928C878179726A6A676767676A6766615F57554F545C66
+6A7274797F7F84878789898E8E8E8C8989898787878787847F7C746E6A6159544F4F5155575F6161
+6161676A6A6C6C727274767C7C7F7F7F7F7F81848585858787898989898989898989898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494929292929292929292928F8E8E8E8E8E8E8E8E8E8E8F929292929292949494949494949494
+94949292928F8F8E8C89898987878481817F7C7B76767676767C7F848789898E8E8C898987878784
+817F7F7F7F7F81848787898E92929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A99969494928F8C
+87847C767F8587899294949A9A9A9A999999999A9A9A9A99999694949292928F8E8E898987858787
+878789898989898E8E7C87898C8E8E8E8E9294949A9C9EA4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9EA3A4A6A6A6A6A6A6A9A9A9A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A49E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+8F8E8E8E8E8E8E8E8E8E8C898989898989898989898787858585858584817F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C79767676767674747474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F
+5D5957575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7274767C7C7C7F7F7F7F81858587898989898C8E8E8E8F92
+9292929294949494947F929A9EA4ABB1B9BEC6CCD1D9DCE1E7ECECF2F2F4F4F7F7F9F9FAF9F7F4F2
+F1ECECE7E4DFD9D4D1CFC8C6C1C1BEBBBBBBBBBBB9B9B9B7B6B6B3B3B3B1B1AEAEAEAEAEAEABA69E
+998F877457727476797C7F818587898C8F929294999C9CA1A4A4A6A6A9AEAEAEAEB1B1B1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1AEAEAEABABA9A6A49E9C9A949289877F76716A676767676A6A67615F5D57514F555F
+676C72767C7F81858789898C8E8E8C8989878787878787847F7C76726C675F574F4F4F55575C5F61
+616166676A6C6C717274767C7C7F7F7F7F7F818485858587878789898989898989898989898C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949492929292929292929292928F8F8F8F8E8E8E8E8E8E8F92929292949494949494949494949494
+94949292928F8E89898987878481817F7F7F7C7979797C7C7F848787898C8E8F92928E8989898787
+85848181817F8184858789898F92949494949499999A9A9A9A9A9A9A99949494949292928E898784
+7F76767F8487878E92949A9A9A999994949496999A99999494949492928F8E8E8C89878785858587
+8789898989898C8E7987898C8E8E8E8E8F9294999C9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9C9C9C9C9C9C9C9C9A9A9A9A9A9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9EA4A4A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A49E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+8F8E8E8E8E8E8E8E8E8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7976767676767474747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F
+5F5C57575755554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F7F81858587878989898C8E8E8E8F9292
+92929292949494949485949C9EA6AEB3B9C0C6CCD3D9DFE4E7ECEEF2F2F4F4F7F7F9F9FAF9F7F4F2
+EEECECE6E1DFD9D4D1CCC8C6C4C1C0BBBBBBBBBBB9B9B9B7B6B6B6B3B3B3B1B1AEAEAEAEAEAEABA6
+9C94897F664F7274767C7F818487898C8F929294999A9C9EA4A4A6A6A9AEAEAEAEAEB1B1B1B1B1B1
+B1B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEABABA9A6A49E9C99948F89817C746C6A67676767676766615F5C574F4F55
+616A6C74767C7F818787898C8E8E8E898987878787878784817C76746C6A6159544F4F4F55575F61
+616166676A6A6C6E727274797C7F7F7F7F7F81818585858587878989898989898989898989898E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292928F8F8F8F8F8F8F92929294949494949494949494949494
+949292928F8E8C89878785817F7F7F7F7F7C7C7C7C7C7F81878989898C8E8F9292928F8F8C898987
+87878584817F7F81848787898C92929494949494999A9A9A9A99999994929292928E8C8987817F79
+72797F848787899294999999999694949494949999949494949292928F8E8C898987858585858587
+8789898989898E8E8189898E8E8E8E8E9294969A9C9EA4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C9C9C9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A19E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928E8E8E8E8E8E8E8E8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7B76767676767674747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F
+5F5C5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F7F7F84858787898989898E8E8E8F929292
+92929294949494949489999C9EA6AEB6B9C1C6CFD4D9DFE4ECECEEF2F4F4F4F7F9F9FAFAF9F7F4F2
+EEECECE6E1DCD9D4D1CCC8C6C4C1C0BBBBBBBBBBBBB9B9B7B6B6B6B6B3B3B3B1B1B1B1AEAEAEAEA9
+A39A8F87765F717474797C7F848789898F929294999A9C9EA4A4A6A6A9ABAEAEAEAEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEB1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1AEAEAEAEABA9A6A4A19C9A94928C877F79746C6A676767676766615F5F5955514F
+57666A7274797C818487898C8E8E8E898987878787878784817F7974726A665F574F4F4F54575C5F
+616164676A6A6C6C727274767C7C7F7F7F7F7F818485858587878989898989898989898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929494949494949494949494949494
+9292928F8E8E8987878484817F7F7F7F7F7C7C7C7F8187878989898C8E8F9292928F8F8E8C898989
+87878784817F7F8181848787898E929294949494999A9A9A9999949492928E8C898987817F7C7472
+797F818789898F949496999994949494949494949494949292928F8E8C8989898785858585858787
+89898989898C8E7F89898E8E8E8E8E8F92949A9C9C9EA4A4A4A3A3A3A1A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8C8989898989898989898987878585858585858481817F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7976767676767474747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F
+5F5D5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F7F7F84858587898989898E8E8E8F92929292
+92929294949494947C929A9CA3A9B1B7BBC1C6CFD4D9E1E6ECECEEF2F4F4F7F7F9F9FAF9F9F7F4F2
+EEECE9E6E1DCD9D4D1CCC8C6C4C1C0BEBBBBBBBBBBB9B9B9B7B6B6B6B6B3B3B3B1B1B1B1AEAEAEAB
+A69C94897F6C57727476797F818787898E929294999A9C9EA4A4A6A6A9A9AEAEAEAEAEAEB1B1B1B1
+B1B1B1AEB1B1B1B1B1AEAEB1B1B1B1B1B1B1B3B3B3B3B3B3B3B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1AEAEAEAEABA9A6A49E9C9A949289857F76726C6A676766666661615F5F575551
+4F5C676C7274797F818789898E8E8C898989878787878784817F7C74726C676159544F4F4F55575F
+5F616166676A6C6C717274767C7C7F7F7F7F7F818485858587878789898989898989898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292949494949494949494949494949494
+9292928F8C8989878585848481817F7F7F7F7F818587878989898C8E8F8F9292928F8E8E8C898989
+89878781817F7F7F7F7F818789898E929292929294949999949494928F8C898787847F7C76727279
+7F818789898E9294949494949494949494949494949492928F8E8C89898989878585848485878789
+898989898C8E7C87898C8E8E8E8E8E9294999A9C9EA1A4A4A19EA19E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9EA1A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E8989898989898989898987878585858585858584817F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7976767676767474747474747472716C6C6C6C6C6C6A6A6A6A6A676767616161615F
+5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF6C7476767C7C7C7F7F7F7F7F81858587898989898E8E8E8E9292929292
+929292949494949484949A9EA4A9B1B7BEC1C8CFD4DCE1E6ECECF1F2F4F4F7F7F9F9FAF9F9F7F4F2
+EEECE7E4E1DCD9D4D1CCC8C6C6C1C0BEBBBBBBBBBBB9B9B9B7B7B6B6B6B6B3B3B3B1B1B1B1AEAEAB
+A6A49A8F877C6A547274767C7F8587898C8F9294949A9C9EA3A4A6A6A6A9ABAEAEAEAEAEB1B1B1B1
+B1B1AEAEB1B1B1B1AEAEAEAEB1B1B1B1B1B1B1B3B3B3B3B3B3B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEABA9A6A6A39E9C99948F89847C76726A6A676764646461615F5D5755
+514F5F666A72747C7F8487898E8E8C8C8989878787878584817F7C76746C6A615D574F4F4F51575C
+5F616166676A6A6C6E727274797C7F7F7F7F7F81818585858587878989898989898989898989898E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494949494949494949494949294949494949494949494949494949494949494
+94949492929292929292929292929292929494929292929494949494949494949494949494949492
+928F8E8989878785858585848481817F818485878789898C8E8E8E8E8F8F92928F8F8E8C89898989
+878785817F7F7F7F7F7F7F818787898C8F8F92929294949492928F8C89878784817C767471747C7F
+81878989899292949494949494949292929494949492928E8C898989898787878581818185878789
+898989898E6A8489898E8E8E8E8E8F92949A9C9C9EA4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9E9E9EA3
+A1A19E9E9E9E9E9EA3A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A4A4A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E8989898989898989898987878785858585858584817F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6C6A6A6A6A6A676767646161615F
+5F5F5D5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF6C7476767C7C7C7F7F7F7F7F81858587878989898C8E8E8E8F9292929292
+929294949494949489949C9EA6ABB1B9BEC4C9D1D9DEE1E6ECECF1F2F4F4F7F7F9F9FAF9F9F7F4F2
+ECECE7E4DFD9D9D4CFCCC8C6C6C1C1C0BEBBBBBBBBB9B9B9B9B9B7B6B6B6B6B3B3B3B1B1B1B1AEAE
+A9A69E948C857C67717474797C7F8787898E9292949A9C9EA3A4A4A6A6A9ABAEAEAEAEAEAEB1B1AE
+AEAEAEAEAEB1B1B1AEAEAEAEAEB1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEA9A9A6A49E9C9A94928E87817C74716A6A676661616161615F5C57
+55544F5F666C72767F8187898E8C8C898989878787858584817F7C7674726A675F59544F4F4F5557
+5F5F6164676A6A6C6C727274767C7C7F7F7F7F7F818485858587878989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494929294949494949494929292929294949494949494949494929494949494
+9494949494949292929292929292929292949494949494949494949494949494949494949492928F
+8E8C89898787878585858585848481848587878789898C8E8E8E8E8E8E8F8F8F8F8E8C8989898987
+8784817F7F7F7C7C7C7C7C7F7F8187898C8E8E8F8F929292928E898787847F7F79747272767C7F81
+878789898E92929494949494929292929292929292928F8E8989898787878784817F818487878989
+8989898C8E7F89898E8E8E8E8E8E9294999A9C9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9E9EA1A3
+A4A3A3A19E9E9E9EA1A4A4A4A4A6A6A6A6A6A4A4A6A6A6A6A4A4A6A6A6A6A4A4A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9999949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E898989898989898989898987878585858585858584817F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7976767676747474747474747472716C6C6C6C6C6A6A6A6A6A676767666161615F
+5F5F5D5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF6A67676767676766616161616161615F5F5F5DFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF6A72747676797C7C7F7F7F7F7F8185858787898989898E8E8E8F929292929292
+929294949494947C92999C9EA6AEB3B9BEC6CCD3D9DFE1E7ECECF2F2F4F4F7F7F9F9FAF9F9F7F4F2
+ECECE7E1DFD9D4D3CFCCC8C6C6C1C1C0BEBEBBBBBBB9B9B9B9B9B9B7B7B6B6B6B3B3B3B1B1B1AEAE
+A9A6A49C92898179617274767C7F8487898C929294999C9EA1A4A4A4A6A6A9ABAEABABAEAEAEAEAE
+AEAEAEAEAEAEB1B1AEAEAEAEAEB1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEABA9A6A6A49E9C9A94928C877F7C74716A676761616161615F5F5C
+5755544F5F666E747C7F8487898C89898989878785858484817F7C7974726C6A615F57514F4F5157
+5D5F6161676A6A6C6C727274767C7C7F7F7F7F7F818485858587878789898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929294949494949492929292929294949492929292929292929294949494949492929292949494
+94949494949494949492929292929292949494949494949494949494949494949494929292928F8E
+8989898787878785858587878785858787878789898C8E8E8E8E8E8E8E8E8E8E8E8C898989898787
+84817F7F7C7C7C79767676797C7C7F84878789898C8E8E8E8C8987817F7C7974747474797C7F8187
+8789898C8F929294949492929292928F8F8F9292928F8E8C898987878784817F7F81848787898989
+89898C8E7F87898C8E8E8E8E8E8F92949A9C9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E
+9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9C9C9C9C9C9C9C9E9E9EA3A4
+A4A4A4A3A19E9E9E9EA3A4A4A4A4A6A6A6A6A4A4A4A6A6A6A4A4A4A6A6A4A4A4A4A6A6A6A4A4A4A4
+A3A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9999949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E8C8989898989898989898987878585858585858584817F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7B76767676767474747474747472726C6C6C6C6C6A6A6A6A6A6A67676761616161
+5F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF6A6A6A6A6A6A676767676767676766616161616161615F5F5F5F57FFFFFFFFFFFF
+FFFFFFFFFFFFFF6C72747676797C7C7C7F7F7F7F7F8485858789898989898E8E8E92929292929292
+9292949494949484929A9CA3A6AEB3B9C1C6CCD3D9DFE1E7ECEEF2F2F4F4F7F7F9F9FAF9F9F7F4F2
+ECECE6E1DFD9D4D3CFCCC9C6C6C1C1C0BEBEBBBBBBB9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B1B1B1AE
+ABA6A4A39A92897F765F7274767C7F8587898F9294949A9C9EA4A4A4A4A6A9ABABABABABAEAEAEAE
+AEAEAEAEAEAEAEB1AEAEAEAEAEAEB1B1B1B1B1B1B1B3B3B3B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEABA9A6A6A4A39E9C99949289877F79746C6A676661616161615F5F
+59575555515F6A71767F8187898C898989898787878484847F7F7C7C74726E6A675F5955514F4F55
+575F616166676A6C6C72727476797C7F7F7F7F7F8181858585858787898989898989898989898989
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929294949292929292929292929292929292929292929292929494949292929292929294
+949494949494949494949494949492949494949494949494949494949494949292929292928F8E8C
+8989898987878787878787878787878787898989898E8E8E8E8E8E8E8E8E8E8E8C89898989878787
+84817F7C7C7976767474747476767C7C7F8184878787878787817F7C7674747474797C7F81858787
+8789898E8F92929294929292928F8F8E8E8E8F8F8F8E8C898787878581817F7F7F84878787898989
+89898E7C87898C8E8E8E8E8E8F9294999C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E
+9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9C9C9C9C9C9C9C9C9E9E9EA3A4
+A4A4A4A4A39E9E9E9EA3A4A4A4A4A4A6A6A4A4A4A4A4A6A4A4A4A4A4A6A4A4A4A4A4A6A4A4A4A4A3
+A3A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9A9A9A9A999996949494949494949494929292929292
+928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787858585858585858481817F7F7F7F7F7F
+7F7F7F7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6C6A6A6A6A6A67676766616161
+5F5F5F5D5957575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF6C6C6C6A6A6A6A6A6A6A6A6A6A676767676767676766616161616161615F5F5F5F5F57FFFF
+FFFFFFFFFF6C6C74747676797C7C7C7F7F7F7F7F8485858789898989898C8E8E8F92929292929292
+9294949494949489949A9EA4A9AEB6B9C1C6CFD4D9DFE4E7ECEEF2F4F4F4F7F9F9FAFAF9F9F7F4F2
+ECECE6E1DFD9D4D3CFCCC9C6C6C1C1C1C0C0BEBBBBB9B9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B1B1AE
+ABA6A6A49E9A92877F74577274767C8187898C9294949A9C9EA4A4A4A4A6A6ABA9A9A9ABAEABAEAE
+AEAEAEABABAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B3B3B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B1
+B3B3B3B3B1B1B1B1AEAEAEAEAEAEABA9A6A6A4A19C9A96928F89857F76726A67666161616161615F
+5D5757555554616C72797F848789898989898987878484817F7F7C7C7674726C6A615F57544F4F4F
+575D5F6166676A6A6E72747476797C7C7F7F7F7F7F81848585858787898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949494949494949494949292929292928F8E8E8E
+8C8989898987878787898787878787898989898C8E8E8E8F8F8F8F8F8F8F8F8F8E8C898989878787
+84817F7C7C7676747472727272747474767C7C7F7F7F7F7F7C7C7674747474797C7F818587878789
+89898C8F929292929292928F8F8E8E8E8E8E8E8E8E8C8987878584817F7F7F7F8185878789898989
+898C6A8189898E8E8E8E8E8E9292949A9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9C9C9C9C9C9C9C9E9E9EA1A4A4
+A4A4A4A4A39E9E9E9E9EA3A4A4A4A4A4A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A1A3A4A4A4A3A39E9E9E9E9E9C9C9C9C9C9C9A9A9A9A999994949494949494949494929292929292
+928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7976767676747474747474747472716C6C6C6C6C6A6A6A6A6A67676766616161
+615F5F5F5C57575755554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A676767676767676661616161616161616161616166
+67676A6A6C7274747676797C7C7C7F7F7F7F7F818585878989898989898E8E8E8F92929292929292
+949494949494768E949C9EA4A9B1B7BBC1C8CFD4D9DFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F2
+ECECE6E1DFD9D4D3CFCCCCC6C6C4C1C1C0C0BEBBBBB9B9B9B9B9B9B9B9B9B7B7B6B3B3B3B3B1B1AE
+AEA9A6A6A49E998F877C716C7274767F8487898E9294999C9EA3A3A3A3A4A6A6A9A9A9A9ABA9A9AB
+AEAEABA9A9ABAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B3B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B1
+B1B3B3B3B1B1B1B1AEAEAEAEAEAEABA9A6A6A4A49E9C9A94928F89847C746C6A676461616161615F
+5F5C57575555554F6C747C7F8587898989898987878581817F7F7C7C7674726C6A675F5C55544F4F
+55595F6161676A6A6C72747476797C7C7F7F7F7F7F81848585858787878989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F9292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949494949494949292929292928F8E8E8E8E
+8E8C8989898987898989898787898989898C8E8E8F8F9292929292929292928F8E8C898989878787
+85817F7C7C76747472716C6C6C6C6C6E72727474767676747272747476797C7F8184858787878989
+898C8E8F8F92929292928F8E8E8E8E8E8E8E8E8C8989878784817F7F7F7F7F818487878989898989
+8C8C7F87898E8F8F8E8E8E8F9294999C9C9C9C9C9C9A9A999A9A99999499999A9A9C9C9C9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C9C9E9E9E9E9E9EA3A4A4
+A4A6A4A4A39E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+9EA1A3A4A4A3A19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A999994949494949494949494929292929292
+92928E8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585858481817F7F7F7F7F
+7F7F7F7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6A6A676767646161
+615F5F5F5C5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747271
+6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6767676767676767676767676767676767
+6A6A6C6E7274747676797C7C7C7F7F7F7F81818585878789898989898C8E8E8E9292929292929294
+9494949494948192999C9EA6ABB1B9BEC1C8CFD9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F1
+ECECE6E1DFD9D4D3CFCFCCC8C6C4C1C1C0C0BEBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1
+AEA9A6A6A6A49E948E87796A6C72747C7F8787898F94949A9C9E9E9E9EA4A6A6A6A9A9A9A9A9A9A9
+ABABA9A9A6A9AEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B1
+B1B1B3B3B1B1B1B1AEAEAEAEAEAEAEABA9A6A6A4A39E9C9A94928E89847C726C6A66616161616161
+5F5F5C57575555554F71767F8185878989898987878781817F7F7C7C7674726E6C67615F5755544F
+51575D616166676A6C72747476767C7C7F7F7F7F7F81818585858587878989898989898989898989
+898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F9292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949494949494949292929292928F8E8E8E8E
+8E8E8C8989898989898989898989898C8E8E8F929292929292929292929292928F8E8C8989898787
+87847F7F7F7C79767472716C6C6C6A6A6A6C6C6C6C6C6E72727476797C7F7F818185878789898989
+8C8E8E8E8F8F92928F8E8E8C8C8C8E8E8C8C8989898785817F7F7F7F7F7F81848787878989898989
+8C7F87898C8F8F8F8E8E8E9294949A9C9C9C9C9C9A999494949494949494999A9A9A9C9C9C9C9E9E
+9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9C9A9A9C9C9C9C9C9C9C9E9EA1A4A4A4
+A6A6A6A4A4A19E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9EA3A4A4A3A19E9E9E9E9C9C9C9C9C9C9A9A9A9A9A999494949494949494949494929292929292
+92928F8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858585858584817F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A6A676767666161
+615F5F5F5D5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747272
+716C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6A6A6A6767676A6A6A6A6A6A6C
+6C6C727474747676797C7C7C7F7F7F7F8181858587878989898989898E8E8E8F9292929292929494
+94949494949489929A9CA3A6AEB1B9BEC6CCD1D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F1
+ECE9E6E1DFD9D4D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1
+AEABA9A6A6A4A49C948C8176616C72767C8187898C92949A9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A6
+A9A9A9A6A6A9A9ABAEAEAEAEAEAEAEAEAEB1AEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B1B1
+B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABA9A6A6A6A4A19E9C9A94928E897F76716A67616161616161
+5F5F5F5957575557554F72767F81878989898789878784817F7F7C7C767674726C6A665F5C555551
+4F55595F6166676A6C7174747676797C7C7F7F7F7F7F818485858587878989898989898989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8F8F929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949494949494949494949499999999999999949494949494949494929292929292928F8E8E8E8E
+8E8E8C8C8C8C8C8C8C898989898C8E8E8E8F92929292929494949492929292928F8E8C8989898987
+878584817F7F7F7C7C7676747472716C6C6E717272747476767C7C7F7F8181848487878989898C8E
+8E8E8E8E8E8F8F8F8E8C8989898C8C89898989898784817F7F7F7F7F7F7F8185878789898989898C
+7C8487898E92928E8E8E8F9294999C9C9C9C9A9A99949494949494949494949999999A9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9E9C9C9C9C9A9A9A9A9C9C9C9C9C9C9E9E9EA3A4A4
+A6A6A6A4A4A19E9E9E9E9E9E9EA3A4A4A4A4A4A3A3A4A4A4A4A3A3A4A4A4A4A3A3A4A4A4A4A4A3A1
+9E9EA1A3A3A19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A999494949494949494949494929292929292
+92928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7B76767676767474747474747472726C6C6C6C6A6A6A6A6A6A6A6767676161
+61615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747472
+727272716E6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C
+6C747474747676797C7C7C7F7F7F7F8484858587878989898989898E8E8E8E929292929292929494
+94949494949489949A9EA4A6AEB3B9C0C6CCD3D9DEE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F4F2F1
+ECE7E6E1DFD9D7D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBBBB9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B1B1
+AEAEABA9A6A6A4A49C94897F74556C72767C8487898F94999A9A9C9C9E9E9E9E9EA4A6A6A6A6A4A6
+A6A6A6A6A6A6A9A9A9AEABABABABABAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B1B1
+B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEA9A9A6A6A6A49E9E9C9A94928C877F74716A676161616161
+5F5F5F5D57575755575755747C7F818789878787878785817F7F7C7C797674726E6A67615F575555
+4F54575D6164676A6A6C72747476797C7C7F7F7F7F81818485858587878789898989898989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929494949494949494949496999A9A9A9A9A9A999494949494949494929292929292928F8F8E8E8E
+8E8E8F8F8F8F8F8E8C89898C8E8E8E8E8F929292929494949494949494949292928F8E8C89898989
+87878787878584817F7F7F7C7C797676747676767676797C7C7F7F81848587878789898C8C8E8E8E
+8E8E8E8E8E8E8E8C898989898989898989898787847F7F7C7C7F7F7F7F818487878787898989898C
+8187898E8F928F8E8E8E9294949A9A9C9C9A9A969494949492949292949494949496999A9A9A9C9C
+9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9C9C9C9C9C9C9E9E9EA3A4A4
+A6A6A6A4A4A39E9E9E9E9E9E9EA1A3A4A4A4A4A3A3A4A4A4A4A3A1A3A4A4A4A3A3A4A4A4A4A3A19E
+9E9E9EA3A3A19E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9494949494949494949494929292929292
+92928F8F8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585858581817F7F7F7F
+7F7F7F7F7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6A6A6767676461
+61615F5F5F5D5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747474
+7474747272716C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C7172
+747474767676797C7C7C7F7F7F7F8185858585878989898989898C8E8E8E8F929292929292949494
+94949494947C8E949C9EA4A9AEB6B9C1C6CFD4D9DFE1E6E9ECF2F2F4F4F7F7F9FAFAF9F9F7F4F2F1
+ECE7E6E1DFD9D7D3CFCFCCC8C6C6C4C1C1C0C0BBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B3B3B3B3B1B1
+AEAEAEABA9A6A6A4A19C92877C6C6A6C74797F85878C929494999A9C9C9E9C9C9C9EA4A4A4A4A4A4
+A6A6A6A6A6A6A6A6A9A9ABABABA9A9ABAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B1B1
+B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABA9A9A6A6A4A39E9E9C9A949289847C74716A6661616161
+615F5F5F5D57575557575755747C7F8487878787878787847F7F7C7C79767472716C6A665F5C5555
+515155595F61666A6C6C72747476767C7C7F7F7F8181818485858787878789898989898989898989
+89898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292949494949494949494999A9A9A9A9A9A9A99949494949494949292929292929292928F8F8E8F
+8F8F929292928F8F8E8C8E8E8E8E8E8E92929494949494999A99999494949292928F8E8C8C8C8C89
+8989898989898987878584817F7F7F7F7F7C7C7C7C7C7F7F7F8184858787898989898E8E8E8E8E8E
+8E8E8E8E8E8C898989898989898989898787847F7F7C7C7C7F7F7F7F81848587878787898989897F
+87898E8F92928F8E8E8E92949A9A9A9A9A9A94949292929292929292949494949494949699999A9A
+9A9C9A9A9A9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9EA1A4A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9EA1A3A4A4A3A19EA3A4A4A3A19EA3A4A4A4A3A1A3A4A4A4A3A19E
+9E9E9EA1A19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9694949494949494949494929292929292
+9292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A6A6767676661
+61615F5F5F5F5957575555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747474
+7474747472727271716E6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6C6C6C6C6C6C6C6C72727474
+7474767676797C7C7C7F7F7F7F8185858585878789898989898C8E8E8E8F92929292929292949494
+9494949494878F969C9EA6A9B1B6BEC1C8CFD4D9DFE1E6ECECF2F4F4F4F7F9F9FAF9F9F9F7F4F2EE
+ECE7E6E1DFD9D7D3CFCFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBB9B9B9B9B9B9B9B6B3B3B3B3B3B1B1
+B1AEAEAEABA9A6A6A49E9A8E8174616A71747C7F87898E92949494999A9C9C9C9C9C9E9EA1A3A1A3
+A4A4A4A4A4A4A4A6A6A6A9A9A9A9A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B3B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEABABA9A9A6A6A49E9E9E9C99928E897F7974716A66616161
+615F5F5F5F5C57575757575755767F7F81878787878987847F7F7F7C79767474726E6A67615F5755
+554F55575D61666A6C6C7174747676797C7C7F7F8184848485878787878789898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8F929292929292928F8F8F8F92929292929292929292
+9292949494949494949499999A9A9A9A9A9A9A9994949494949492929292929292929292928F8F92
+929292929292928F8E8E8E8E8E8E8F929294949494969A9A9C9A9A999494949292928F8F8E8E8E8E
+8E8E8E8E8E8E8E8E898989878787878584848181818181858587878789898C8E8E8E8E8E8E8E8C8C
+8E8E8E8C898989898989898989878787847F7F7F7C7C7C7F7F7F7F7F818184848787878989897F87
+898C8F92928F8E8E8E8F94949A9A9A9A9A94949292928F8F8F929292929294949494949494949499
+9A9A9A99999A9A9C9C9A9A9A9C9C9C9C9C9C9C9A9A9A99999999999A9A9A9A9A9A9C9C9E9E9EA4A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9EA1A3A4A3A19EA1A3A4A3A19EA1A3A4A3A19EA1A3A4A3A19E9E
+9E9E9E9EA19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9994949494949494949494929292929292
+9292928F8F8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585858481817F7F7F
+7F7F7F7F7F7C7C7C7C7C7C79767676767474747474747472726C6C6C6C6C6A6A6A6A6A6767676661
+6161615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7674747474
+74747474747474747272726E6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C727474747474
+747676767B7C7C7C7F7F7F7F8185858585858789898989898C8E8E8E8F9292929292929292949494
+949494949489929A9CA3A6ABB1B7BEC6C9CFD4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F2EE
+ECE7E6E1DFD9D9D4D1CFCCC9C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B6B3B3B3B3B3B1B1
+B1B1AEAEAEABA9A6A4A39E94897C72556C72767C818789898F9294949499999A9A9A9C9C9E9E9E9E
+9EA1A3A3A3A4A4A4A4A6A6A9A9A9A9A9A9ABABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEABABABA9A9A6A4A4A19E9E9C949289877F79746C6A666161
+61615F5F5F5F5957575759595755797C7F84878787878787817F7F7C7B76767472716C6A665F5957
+55515455595F61676A6C7272747476797C7C7F7F8184858585858787878989898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8E8E8F8F8F9292928F8F8E8E8F8F8F9292929292929292
+92929494949494949496999A9A9A9A9A9A9A99949494949494949292929292929292929292929292
+929292929292928F8E8E8E8E8E8F929294949494999A9A9C9C9C9A9A99999494949292929292928F
+8F8F8F929292928F8E8C898989898989898989878787878789898989898C8E8E8E8E8E8E8C898989
+8C8C89898989898989898987878787817F7F7C7C7C7C7C7C7F7F7F7F7F8184878787898989798587
+8C8E9292928E8E8E8E9294999A9A9A9A949492928F8F8E8E8F8F8F8F929292929492929292949494
+949999949494999A9A9A99999A9A999A9A9A9A9A9999949496999999999999999A9A9C9C9E9EA3A4
+A4A4A4A4A3A3A19E9E9E9E9E9E9E9E9EA1A3A19E9E9EA1A3A39E9E9EA1A3A39E9E9EA3A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9994949494949494949494949292929292
+929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A6767676661
+6161615F5F5F5D5957575555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7674747474
+747474747474747474747272716C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C71727274747474747474
+7676767C7C7C7C7F7F7F7F818585858585878789898989898E8E8E8F929292929292929294949494
+94949494798C949C9EA4A6AEB1B9BEC6CCD1D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F2EE
+ECE7E6E1DFD9D9D4D1CFCCC9C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B1B1
+B1B1B1AEAEAEABA9A6A49E9C9284766A676C74767C818587898C9292949494949494999A9C9C9C9C
+9E9E9E9E9E9EA1A3A4A4A6A6A6A6A6A9A9A9A9A9ABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEABABABA9A9A6A4A3A19E9C9A948F89847F76746C676461
+61615F5F5F5F5D595757575C5C5755797C7F87878787898784817F7F7C76767472726C6A67615F57
+57555155575D61676A6C7272747476767C7C7F7F7F81848585858787898989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8F8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8F92929292929292
+929292949494949494999A9A9A9A9A9A9A9A99949494949494929292929292929292929292929292
+9494949492928F8E8E8E8E8F92929294949496999A9A9C9C9C9C9C9C9A9A99949494949494949292
+92929292929292928F8E8E8E8E8C89898989898989898989898989898C8E8E8E8E8E8C8989898989
+8989898989898989898787878785817F7C7C79797C7C7C7C7C7C7F7F818485878789898989818789
+8E8F92928F8E8E8E929494999A9A9A999492928F8E8C8C8E8E8E8E8E8E8F92929292929292929294
+9494949492949499949694949494949494949494949494949494949494949699999A9C9C9C9EA1A4
+A3A3A1A19EA3A19E9E9E9E9E9E9E9E9E9EA1A19E9E9E9EA1A19E9E9E9EA3A19E9E9EA1A3A39E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9994949494949494949494949292929292
+929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C76767676767474747474747472726C6C6C6C6A6A6A6A6A6767676761
+616161615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676747474
+747474747474747474747472727272727272716E6C6C6C717171716E727474747474747474767676
+76797C7C7C7C7F7F7F7F818585858585858789898989898E8E8E8E92929292929292929294949494
+94949494878F949C9EA4A9AEB3B9C1C6CCD3D9DCE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F4F4F2EE
+ECE7E6E1DFD9D9D4D1CFCCCCC6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B1B1
+B1B1B1B1AEAEAEA9A6A6A49E99897F725F6A6C72767C7F818787898F929292929294949499999A9C
+9C9C9C9C9E9E9E9E9EA3A4A6A6A6A6A6A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A6A4A49E9E9C99928E87817C76726C6761
+6161615F5F5F5F5D5C5957595D5C5957797C7F878787878787817F7F7C7976747472716C6A645F5C
+5755515555595F616A6C717274747676797C7C7F7F81848585858787878989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8F8E8E8E8E
+8F8F8F8F8E8F8F929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8F8E8E8E8E8F929292929292
+929292949494949494999A9A9A9A9A9A9A9994949494949494949294949492929292929292929494
+9494949292928F8E8E8E8E8F929294949999999A9C9C9C9C9C9C9C9C9C9A9A999994949494949494
+929292949494949292929292928F8E8C89898989898989898989898C8E8E8E8C8C89898989898989
+898989898989898787878784817F7C7C76767676767676797C7C7C7F81858787898989897F87898E
+8F92928F8E8E8E8F9294969A9A9A9A9492928F8E8C89898C8C8C8C89898E8F92928F8F8E8F8F9292
+9292929292929292929292929292928F9292929292929292929294949494949494999A9C9C9E9EA1
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9EA1A19E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494949494929292929292
+92929292928F8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6A67676764
+616161615F5F5F5D5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767474
+74747474747474747474747474747474747272727272747472727274747474747474747476767676
+7C7C7C7C7C7F7F7F7F818585858585858787898989898E8E8E8E8F92929292929292929494949494
+949494948792999CA1A6A9B1B6B9C1C6CFD4D9DFE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F4F2F2EC
+ECE7E4E1DFD9D9D4D1CFCCCCC8C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B1B1
+B1B1B1B1B1AEAEAEA9A6A49E9C9287796C576A6E72747C7C7F848789898E8F8F929292929494969A
+9A9C9C9C9C9C9C9C9E9EA1A4A4A6A6A6A6A6A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1
+AEAEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEABABABA9A9A9A6A4A4A19E9C9C949289877F7C74726A66
+616161615F5F5F5F5D5C5C595C5F5D5C57767C81878787878785817F7C7C76747472726C6A67615D
+5757555455575D61676A6E7272747476797C7C7F7F81848585858587878989898989898989898989
+898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292928F8F8E8E8E8E8F8F8F8F8E8F
+8F9292928F8F92929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8F8F8F8F8E8E8E8E8F8F8F8F8F8F8F929292929292
+92929294949494949496999A9A9A9A9A9A9994949494949494949494949494929292949494949494
+94949492928F8E8E8E8E8F929294969A9A9A9A9C9C9C9E9E9E9E9C9C9C9C9C9A9A99999696969494
+94929494949494929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898987878787847F7F7C7B76747474747474747476797C7F818587878789898C7C87898E8F
+92928F8E8E8E8E929494999A9A9A9994928F8E8C8989898C8989898989898C8E8E8E8C898C8E8E8F
+928E8C8E8E8E8E8C89898C8E8E8C898989898C8C8C8E8E8E8F8F8F92929294949494999A9C9C9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494949494929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A67676766
+616161615F5F5F5D595757555555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767676
+7676767474747474747474747474747474747474747474747474747474747474747474767676767C
+7C7C7C7C7F7F7F7F818485858585858787898989898C8E8E8E8E8F92929292929292929494949494
+9494947689929A9CA3A6ABB1B7BEC1C8CFD4D9DFE1E6E7ECF2F4F4F4F7F9F9FAFAF9F9F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B3B1
+B1B1B1B1B1B1AEAEABA9A6A39C998E7F746A666A6C7274767C7F81878789898C8E8F8F9292929494
+99999A9A9A9C9C9C9C9C9EA1A4A4A4A6A6A6A6A6A6A6A9A9ABABABAEAEAEAEAEAEAEB1B1B1B1B1B1
+AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEABABABA9A9A9A6A6A4A49E9E9C9A948E87877F7B74716A
+666161615F5F5F5F5F5D5D5C5C5D5F5F5D57797F848587878787847F7F7C76747472726C6C67615F
+5C5755555557595F616A6C7272747476797C7C7F7F7F818485858787878989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292928F8F8F8F8F9292928F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929294949494929292929292929292929292928F8F8F9292928F8F92929292929292
+92929292949494949494999999999999999494949494949494949494949494949494949494949494
+94949292928F8E8E8E8F929294969A9A9A9A9C9C9C9E9E9E9E9E9E9C9C9C9C9C9A9A999999999994
+9494949494949494929292929292928F8F8F8F8F8E8E8E8E8E8E8E8C898989898987898989898989
+8989898987878784817F7C797674747271717172727476797C7F81858787878989897987898E8F92
+92928E8E8E8E8F9294999A9A9A9994928E8C898989898C8C8989898989898989898989898989898C
+8989878789898987878587878787858587878787898989898989898C8E9292929294949A9A9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9994949494949494949492929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474747474747472726C6C6C6C6C6A6A6A6A67676766
+61616161615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767676
+76767676747676767474747474747474747474747474747474747474747476767676767676797C7C
+7C7F7F7F7F7F7F818485858585858787898989898C8E8E8E8E8E9292929292929292949494949494
+949494848E949C9EA4A6AEB1B9BEC6CCCFD4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B6B6B6B3B3B3B1
+B1B1B1B1B1B1B1AEAEA9A6A49E9A94897F7461676A6C7274767B7C7F8487878989898C8E8F929294
+94949499999A9A9A9C9C9C9EA1A3A4A4A4A4A4A4A6A6A6A9A9ABABABAEAEAEAEAEAEAEB1B1B1B1B1
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABA9A9A6A6A6A6A4A19E9C9C94928987847F79746C
+6A666161615F5F5F5F5F5F5F5D5D5F5F5F5D574F7F848587878785817F7C79747472726E6C6A665F
+5D5957555555575D61676C7172747476797C7C7C7F7F818485878787878789898989898989898989
+89898C8E8E8E8E8E8E8E8F8F8E8E8E8E8F8F8F8E8E8E8F9292929292929292928F8F929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929494949494949492929292929292929292929292929292929292929292929292
+92929292949494949494949496999999999494949494949494949494949494949494949494949494
+949492928F8E8E8E8E929294999A9A9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A9A9A9A9A
+999494949494949492929292929292929292928F8E8E8E8E8E8E8C89898987878787878989898989
+898989898787817F7C76747474716C6C6C6C6C7172767C7C7F81848787878989897485878C8E9292
+928F8E8E8E8F9294949A9A9A9994948F8C89898789898C8989898989898989898989878787878987
+87878481818484817F7F7F7C7C7C7F7F7F7F7F818184848787878789898C8F92929294949A9C9C9C
+9C9C9C9C9E9E9E9E9E9C9E9E9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A96949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8C898989898989898989898987878785858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A67676766
+61616161615F5F5F5D595757555554514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7979767676
+7676767676767676767474747474747474747474747474747474747676767676767676767C7C7C7C
+7F7F7F7F7F7F818485858585858787898989898C8E8E8E8E8E8F9292929292929294949494949494
+9494948792949C9EA4A9AEB3B9C0C6CCD1D9DCDFE1E7ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C1C1C1C0C0BBBBBBBBBBBBB9B9B9B9B9B9B9B6B6B6B6B3B3B3
+B1B1B1B1B1B1B1B1AEAEA9A6A19C9992877C6C59676A6C6E7274767C7F818487878989898C8E8F92
+92949494949499999A9C9C9C9E9EA1A4A4A4A4A4A4A6A6A6A9A9ABABABAEAEAEAEAEAEAEB1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A9A9A6A6A6A6A4A39E9C9C9A948E8987817C7672
+6C67616161615F5F5F5F5F5F5F5F5D5F5F5F5D5C54818485878787847F7F7C76747472716C6A6761
+5F5C5755555757595F646A6E72727474767C7C7F7F7F818487878787878789898989898989898989
+898C8E8E8E8E8E8E8E8E8F928F8F8E8F8F92928F8F8F8F9292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949292949494949494949494949492929294949494949292929292929292929294929292
+92929292929494949494949494949494949494949494949494949494949494949494949494949494
+949292928F8E8E8F929294999A9C9C9C9C9C9C9E9EA1A1A1A19E9E9C9C9E9E9E9C9C9C9A9A9A9A9A
+9A999494949494949492929292929292929292928F8E8E8E8E8E8989898787878787898989898989
+8989898785817F797472726E6A6A6C6E72747476767C7C7F81848787878989898C8187898E8F9292
+928F8E8E8E9292949A9A9A999694928989878789898C8C8C89898989898989898987878787858481
+817F7F7F7F7C7C7C7C7C7C7B79797C7C7C7C7C7C7C7C7F7F818485878789898E8F929294949A9A9C
+9C9C9C9C9C9E9E9E9C9C9C9E9E9E9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9996949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E898989898989898989898987878785858585858585817F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C76767676767474747474747472726C6C6C6C6A6A6A6A67676767
+6161616161615F5F5F5C575757555554514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7976767676
+76767676767676767676767476767676747474747676767676767676767676767676767C7C7C7C7F
+7F7F7F7F7F818485858585858587898989898C8E8E8E8E8E8E8F9292929292929494949494949494
+9494798992999CA1A6A9AEB6B9C1C6CFD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B6B6B6B3B3
+B3B1B1B1B1B1B1B1AEAEABA6A49E9C999287766A54676A6A6C7274767C7F7F818587878989898E8F
+9292929294949494999A9C9C9C9E9EA1A3A3A3A4A4A4A6A6A6A9A9A9ABABAEAEAEAEAEAEAEAEB1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A6A4A49E9E9C9A9492898987817C76
+726C67616161615F5F5F5F5F5F5F5F5F5F615F5D5D558184878787857F7F7C76747472716C6C6A61
+5F5D5957555757575F61676C72727474767C7C7F7F7F818487878787878989898989898989898989
+8C8E8E8E8E8E8E8E8E8F8F9292928F8F92929292928F929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494929292929494949492
+92929292929292949494949494949494949494949494949494949494949494969999949494949494
+9492928F8E8E8F929294969A9C9C9C9C9C9E9E9EA3A3A3A4A19E9E9E9E9E9E9E9C9C9C9C9C9C9C9A
+9A9994949494949494929292929292929292928F8E8E8E8E8E8C8989878787878789898C8C898989
+898987847F7C747271677274747474767676767C7C7C7F7F84858787878989897F87898E8F929292
+928E8E8E8F9294949A9A999994928E898787878989898C8C89898989898989898787848181817F7F
+7C7C7C7C7C79797979767676767676767676797979797C7C7F7F7F81848787898C8E8F929494999A
+9C9C9C9C9C9C9E9E9C9C9C9C9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E89898989898989898989898987878785858585858584817F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A676767
+6661616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C79767676
+767676767676767676767676767676767676767676767676767676767676767676797C7C7C7C7F7F
+7F7F7F81818485858585858587898989898C8E8E8E8E8E8E8F929292929292929494949494949494
+94947F89949A9EA4A6ABB1B7BBC1C8CFD3D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE6E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B7B7B7B6B6B6B3
+B3B3B1B1B1B1B1B1AEAEAEA9A69E9C9A948F81746761676A6A6C7274767C7C7F818185878789898C
+8E8F92929292949494999A9C9C9C9E9E9E9E9EA3A3A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A9A9A6A6A6A6A6A4A4A39E9C9C99928E8987877F7C
+74726A666161615F5F5F5F5F5F5F5F5F5F61615F5F5F578184878787817F7C79747472726C6C6A66
+615F5C59575757575D5F666A6E72747476797C7F7F7F81848787878789898989898C89898989898C
+8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949494949494949494949494949494949494949494949499949494949494949492929494949494
+94929292929292929494949494949494949494949494949494949494969999999A99949494949494
+9292928F8F8F929294949A9C9C9C9C9C9E9E9EA4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9A99999494949494949492929292929292928F8E8E8E8E8E8C89898987878789898C8E8E8C898989
+8787817F76727274767C7C7C7C7F7C7C7C7C7C7C7C7F7F7F818487878787877F87898E8F92929292
+8F8E8E8E8F92949A9A9A999494928987858789898989898E8C898989898989878784817F7F7F7F7C
+7C7C797676767676767676767676767676767676767676797C7C7C7F7F81878789898C8F92949499
+9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999996949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E89898989898989898989898987878785858585858584817F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747474747472716C6C6C6C6A6A6A6A676767
+6661616161615F5F5F5D595757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7B797979
+797976767676767676767676767676767676767676767676767676767676767C7C7C7C7C7C7F7F7F
+7F7F8484848585858585858789898989898E8E8E8E8E8E8F92929292929292949494949494949494
+9494848F949A9EA4A6AEB1B9BEC6C8CFD4D9DFE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE6E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B7B6B6B6
+B3B3B3B1B1B1B1B1B1AEAEABA6A49E9C9A94897F74616166676A6C727476797C7F7F818487878989
+898C8E8F8F9292929494999A9A9C9C9E9E9E9E9EA1A3A4A4A6A6A6A6A9A9ABABAEAEAEABAEAEAEAE
+AEAEAEAEAEABAEAEAEAEAEAEABAEAEAEAEABA9A9A9A6A6A6A6A6A6A4A49E9E9C9A94928E8989857F
+7C74716A666161615F5F5F5F5F5F5F5F5F5F61615F5F5F5781858787817F7F7C767472726C6C6A67
+615F5D5C57575757595F61676C72727474767C7F7F7F818487878789898989898C8C8E8C89898C8E
+8E8E8E8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949999999994949494949494949494949494
+94949494929292929294949494949494949494949494949494949999999A9A9A9A99949494949494
+9292928F92929294949A9A9C9C9C9E9E9E9EA3A4A4A4A4A4A3A19E9E9E9E9E9E9E9C9C9C9C9C9C9C
+9A9A999494949494949492929292929292928F8E8E8E8E8C89898989898789898E8E8E8C89898787
+847F7C74667F7F8184818184858584817F7F7F7F7F7F7F7F8184858787877C87898E8F9292929292
+8F8E8E8E9294969A9A999494928C87878587878989898C8E8E8C8989898987878784817F7F7F7C7C
+7B79767676767676767676767676767676767676767676767676797C7C7F81878789898E8F929494
+999999999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878785858585858584817F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6767
+676161616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C797676767676767676767676767676767676767676767676767676797C7C7C7C7C7C7F7F7F7F
+7F8485858585858585858787898989898C8E8E8E8E8E8F9292929292929292949494949494949494
+947C8792949C9EA4A9AEB3B9BEC6CCCFD4D9DFE1E6E9ECF2F4F4F4F7F9F9FAFAF9F9F7F4F4F2F1EC
+E9E6E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B7B6B6
+B6B3B3B3B1B1B1B1B1AEAEABA9A6A39E9C9A948C81745F6166676A6C727476797C7C7F8184878787
+898989898C8E9292929494999A9A9C9C9E9E9E9E9EA1A3A4A4A4A6A6A6A9A9ABABABABABABAEAEAE
+AEAEABABABA9ABAEAEAEAEABABABABAEABABA9A9A6A6A6A6A6A6A6A4A4A19E9C9A9492928E898784
+7F79746C67646161615F5F5F5F5F5F5F61616161615F5F5F57558487847F7F7C767474726E6C6A6A
+615F5F5D5C575959575F61676A6C727474767C7F7F818184878789898989898C8C8E8E8E8C8C8C8E
+8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949496999A9A9994949494949494949494949494
+9494949494949292949494949494949494949494949494999999999A9A9A9A9A9A99949494949492
+9292929292929494999A9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A3A1A1A1A39E9E9E9E9E9E9E9C9C9C
+9A9A999694949494949494929292929292928F8E8E8E8E898989898989898C8F8F8E8E8989878581
+7F76727C8185878787878787878585858584817F7F7F7F7F7F7F8181817C87898E8F929292929292
+8E8E8E8F92949A9A999494928F89878185878787898C8E8E8E8C8989898787878784817F7F7F7C7C
+7C7976767676767676767674747474747474747476767676767676767C7C7F81858789898E929294
+94969696969A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585858584817F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6767
+676661616161615F5F5F5D575757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C797676767676767676767676767676767676767676767679797C7C7C7C7C7C7F7F7F7F7F81
+848585858585858585878789898989898E8E8E8E8E8F929292929292929292949494949494949494
+947F8992999CA1A6A9AEB3B9C1C6CCD1D4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F1EC
+E7E6E1E1DFD9D9D4D3CFCFCCC8C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B7B7B6
+B6B6B3B3B3B1B1B1B1AEAEACABA6A49E9E9C9A948F84715D6161676A6C727474767C7C7F7F818485
+87878789898C8E8F92929494999A9A9C9C9E9E9E9E9E9EA1A4A4A4A6A6A6A9A9ABABA9A9A9ABABAB
+ABABABABA9A9A9ABABABABABA9ABABABABA9A9A9A6A6A6A6A6A6A6A4A4A39E9E9C999492928F8987
+847C76726C676161615F5F5F5F5F5F5F61616161616161615F595781847F7F7C79767472716C6C6A
+66615F5D5D59595C595D5F646A6C72747476797C7F8184858787898989898C8C8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949494999A9A9994949494949494949494949494
+9494949494949494949494949494949494949499999999999A9A9A9A9A9A9A9A9994949494949492
+92929292929494999A9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A3A3A3A4A39E9E9E9E9E9E9E9C9C9C
+9C9A9A9994949494949494929292929292928F8F8E8E8C89898989898C8E8F928F8E8C898785817C
+74747C8787898C8C89898787878785858481817F7F7F7F7C7C7C7C7C7C87898E8F9292929292928F
+8E8E8E9294969999949492928987848187878787898E8E8E8E898989878787878481817F7F7F7F7C
+7C7C7976767676767676747474747474747474747476767676747474767C7F7F818787898C8F9292
+9494949494969A9A9A9C9A9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9E9E9E9E9C9E9E9E9E9E9C9C9C
+9C9C9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585858584817F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C76767676767474747474747472726C6C6C6C6A6A6A6A6A67
+67676161616161615F5F5F5C575757555555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C79797C7C7C797976767676767676767676767676767C7C7C7C7C7C7C7C7F7F7F7F7F8184
+8585858585858585878789898989898C8E8E8E8E8E92929292929292929294949494949494949494
+94858F949A9EA4A6ABB1B6BBC1C6CCD1D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFD9D9D4D3CFCFCCC8C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7
+B6B6B3B3B3B3B1B1B1AEAEAEABA9A6A49E9C9C9A99927F6C5F6161676A6C71727476797C7F7F7F7F
+818487878789898E8F92929294969A9A9C9C9E9E9E9E9E9EA1A4A4A4A6A6A6A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9ABA9A9A9A9A9ABABA9A9A6A6A6A6A6A6A6A6A4A4A39E9E9C9A949494928F89
+87817C74716A676161615F5F5F5F5F5F6161616161616161615F5D57817F7F7C7C767472716C6C6A
+67615F5F5F5D5C5C5C5C5F61676A6C727476797C7F81848587878989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F92929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949494999A9A9999949494949494949494949494
+94949494949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9994949494949292
+929292929494999A9C9C9E9E9E9E9EA1A1A3A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C
+9C9A9A999494949494949494929292929292928F8E8E8C8C898C8E8F929292928F8E8987857F7B6C
+767F8789898C8C89898987878787858481817F7F7F7C7C7C7976767C87898E8F9292929292928F8E
+8E8E8F92949699969494928E87857F8187878789898C8E8E8C8989898787878481817F7F7F7C7C7C
+7C79767676767676747474747474747474747474747476747474747474767C7F7F848787898C8F92
+929494949494969A9A9A9A9A9C9C9C9C9A9C9C9C9C9C9E9E9C9C9C9E9E9E9C9C9C9E9E9E9E9C9C9C
+9C9C9C9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999999494949494949494949492929292929292
+929292929292928E8E8E8E8E8E8E8E8E8C898989898989898989898989898787858585858584817F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747474747272716C6C6C6C6A6A6A6A67
+67676661616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7979767676767679797979767C7C7C7C7C7C7C7C7C7F7F7F7F7F818585
+8585858585858587878989898989898E8E8E8E8E8F92929292929292929294949494949494949494
+7C8792949C9EA4A6AEB1B9BBC1C6CFD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFD9D9D4D3CFCFCCC8C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7
+B7B6B3B3B3B3B1B1B1AEAEAEAEA9A9A6A49E9E9C9A998F7C675F5F61676A6C6C727476767C7C7C7F
+7F7F8185878789898E8E8F92929496999A9A9C9C9E9E9E9E9EA1A4A4A4A6A6A6A6A6A6A6A6A9A6A6
+A6A6A6A6A6A6A6A6A9A9A9A9A6A6A9A9A9A9A9A6A6A6A6A6A6A6A6A4A4A39E9E9C9A96949494928E
+89857F79746C6A676161615F5F5F6161616166666464616161615F5F597F7F7C7C797472726C6C6A
+6A64615F5F5F5D5D5D5C5F61676A6C717474767C7F7F818487878989898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929494949494949494949494949494949494949494949499999A9996949494949494949494949494
+949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A999494949494949292
+9292949494999A9C9C9E9E9EA1A1A3A3A3A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C
+9C9C9A99999494949494949492929292929292928F8F8F8F8F9292929292928F8E8987847C766E7C
+84878989898C898989898787878584817F7F7F7C7C7C7B7674747F87898C8F9292929292928F8E8E
+8E8E92949494999494928F8987817F848485878989898C8C8989878787858481817F7F7F7C7C7C79
+767676767676767474747474747474747474747474747474747474747476797C7F81848789898C8F
+929292929494949699999A9A9A9C9C9C9A9A9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8C898989898989898989898989898787858585858585817F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747474747472716C6C6C6C6A6A6A6A67
+67676661616161615F5F5F5D595757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C797976797C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F81858585
+8585858585858787898989898989898E8E8E8E8F9292929292929292929494949494949494949494
+7F8992949C9EA4A9AEB1B9BEC1C8CFD3D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C1C1C1C0C0BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B3B3B3B3B1B1AEAEAEAEABA9A6A6A4A39E9C9C948974615F6161676A6C6C72747476797C7C
+7C7F7F818487878989898C8E9292949494999A9C9C9C9C9C9E9E9EA3A4A4A6A6A6A4A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A4A49E9E9C9C9A9494949492
+8987847C76726C6A676161615F5F616161616767666666666661615F5F594F7C7C7C7674726E6C6A
+6A66615F5F5F5F5F5D5D5F5F646A6A6C7274767C7C7F818487878789898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949496999994949494949494949494949494
+949494949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A999494949494929292
+92949494949A9C9C9E9EA3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9C
+9C9C9A9A9994949494949494949292929292929292929292929292929292928F8C87817C6C747F81
+8789898C8C8C8989898787878584817F7F7F7C7976747472747F87898C8E8F92929292928F8E8E8E
+8E8F92949494949494928987817F81848485878989898989898787848181817F7F7F7F7C7C7C7976
+767676767674747474747474747474747474747474747474747474747474767C7C7F81878789898C
+8F929292929494949699999A9A9A9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585858585858181
+7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767474747474747472726E6C6C6C6C6A6A6A6A
+6767676161616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F8185858585
+85858585858787898989898989898E8E8E8E8F929292929292929292949494949494949494949494
+858F92999CA3A6A9AEB3B9BEC6C8CFD4D9DFE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B6B3B3B3B3B3B1B1AEAEAEAEACA9A6A6A6A4A49E9C9A9484715C5F61646A6A6C6C727474767679
+7C7C7C7F81848787878989898E9292949494969A9C9C9C9C9C9E9E9EA1A4A4A4A4A4A4A4A6A6A6A6
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A4A4A19E9C9C9A9694949492
+8E89877F7C74726C6A6661615F5F6161616166676767676767666161615F597C7C79767472716C6A
+6A6761615F5F5F5F5F5F5F5F61676A6C717274797C7F818485878789898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F9292929292929292928F9292929292929292929292929292929292929292929292
+92929292929292949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949494949499969696999A9A9A9A9A9A9A9A9A9A9A9A99969494949494929294
+949494949A9A9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9C9C9C9C9C
+9C9A9A9A99999494949494949492929292929292929292929294929292928F89877F7672767F8187
+898C8C8C8989898987878785817F7F7F7C7C767474726C768587898E8F8F9292929292928E8E8E8E
+8F92949494949494928E87847F7F818181858787878787878785817F7F7F7F7F7F7F7C7C7C797676
+76767676767674747474747474747474747474747476747474747474747474767C7F7F8487878989
+8C8E929292929494949499999A9A9C9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585858585858481
+7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747474747472716C6C6C6C6A6A6A6A
+6767676661616161615F5F5F5D575757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F848585858585
+858587878787898989898989898E8E8E8E8F9292929292929292929494949494949494949494947C
+8992949A9EA4A6ABB1B6BBC0C6CCCFD4D9DFE1E6E9ECF2F4F4F4F7F9F9FAFAF9F9F7F4F4F4F2EEEC
+E7E6E1E1DFDCD9D4D1CFCFCCC8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B6B3B3B3B3B3B1B1B1AEAEAEAEABA9A6A9A6A6A49E9C94927F6A5F5F6166676A6C6E7274747676
+797B7C7C7F7F848487878789898E8F92929294949A9A9C9C9C9C9C9C9EA1A4A39E9E9EA3A4A4A4A4
+A4A4A4A4A4A4A4A4A4A6A6A6A6A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A19E9C9C9C9A99999494
+8F8987857F7974716C6A616161615F6161616467676767676767666161615F597C79797674716C6C
+6A6766615F5F5F5F5F5F5F5F61676A6C6C7274767C7C7F818587878989898E8E8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292929292929292929292929292929292929292929292929292
+8F929292928F8F8F8F8F92929292928F8F8F8F929292929292929292929292929292929292929292
+92929292929292929292949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949499999999999A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494
+949499999A9C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9C
+9C9A9A9A9A9994949494949494949292929292929292949494949492928E89877F74747C7F818789
+8989898989898987878785817F7C7C7C797674726C727C87898C8F8F929292929292928F8E8E8E8F
+92929499949494929289857F7F7F7F7F818787878785848484817F7F7F7F7F7F7F7C7C7B79767676
+7676767676767474747474747474747474747676767676747474747474747476797C7F8185878789
+898C8F929292929494949499999A9A9A9A999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99999694949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898989898989898987878585858585858481
+817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676767474747474747472726C6C6C6C6C6A6A6A
+6A6767676161616161615F5F5F5C575757555555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F8184858585858585
+8587878787898989898989898E8E8E8E8E9292929292929292929494949494949494949494949481
+8C92949C9EA4A6AEB1B9BBC1C6CCD1D4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F4F4F2ECEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B3B3B3B3B3B1B1B1AEAEAEAEABA9A9A9A9A9A6A49E9A948C76645F616166676A6C7172747474
+7676797C7C7F81818184858787898C8F9292929494999A9A9A9C9C9C9C9E9E9E9E9C9C9E9EA1A1A1
+A3A1A19E9EA1A3A4A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A39E9C9C9C9A9A999494
+928E8987817C7674726C6761616161616166666667676767676767666161615F5776767674726C6C
+6A6A6761615F5F5F5F5F5F5F61666A6A6C717274797C7F818487878789898C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F92929292929292929292929292929292929292929292929292929292928F929292928F
+8F8F8F928F8F8E8E8E8F8F8F9292928F8E8E8E8F8F8F929292929292929292929292929292929292
+92929292929292929292929292949494949494949494949494949494949494949494949494949494
+949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A96949494949494949494
+96999A9A9C9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9E9C9C9C9C9C9C
+9A9A9A9A9A99969494949494949492929294949494949494949492928E89877F71747C7F84878789
+89898989898987878785847F7F7C7C7676747274798487898F929292929292929292928F8E8E8E8F
+92949999969492928C87817F7F7F7F7F81878585848181817F7F7F7F7F7F7F7F7C7C7C7C79797676
+7676767674747474747474747474747474767676767676767474747474747476767C7C7F81878787
+89898E92929292929494949499999A9A9A99999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898989898989898987878785858585858584
+817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676767474747474747472726C6C6C6C6C6A6A6A
+6A6767676661616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F818485858585858585
+87878787898989898989898E8E8E8E8E8F9292929292929292929494949494949494949494949487
+8F92999C9EA4A9AEB1B9BEC1C6CCD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2ECEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B1B1B1B1AEAEAEAEABA9A9A9ABA9A4A19C949287745F5F616166676A6C72727474
+7476767C7C7C7F817F7F81858787898C8E8F9292949494999A9A9A9A9A9C9C9C9C9C9C9C9C9E9E9E
+9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9C9C9C9C9A999494
+948F8989877F7C7674726C67616161616166676667676767676767676661615F5D57767674726E6C
+6A6A67666161615F5F5F5F5F6161676A6C6C7274767C7C7F8187878789898C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8F9292929292928F9292929292929292929292929292928F929292928F8F8F8F928F8F
+8E8E8E8F8F8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F929292929292929292929292929292
+92929292929292929292929292929292949494949494949494949494949494949494949494949494
+9494949494949499969494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949499
+999A9A9C9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A1A19E9E9E9E9E9E9C9C9C9C9C9A9A
+9A9A9A9A9A9A9994949494949494949494949494949494949492928F89877C74747C7F8185878789
+89898989898987878584817F7F7C797674747C7F87898C9292929292929292929292928E8E8E8F92
+92949A999494928F87817F7F7F7F7F818485858581817F7F7F7F7F7F7F7F7C7C7C7C7C7C79767676
+767676767674747474747474747476767676767676767676767474747474747676797C7F81848787
+87898C8F929292929494949494999A9A999999999A9A9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9999969494949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878785858585858584
+817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474747472726E6C6C6C6C6A6A6A
+6A6767676661616161615F5F5F5D595757555555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7C7C7F7F7F7F7F7F7F7F81858585858585858587
+898987898989898989898E8E8E8E8E8E929292929292929292949494949494949494949494947C89
+8F949A9CA3A6A9AEB3B9BEC1C6CFD3D9DCE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2ECEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B1B1B1B1B1AEAEAEAEABABABABA9A6A49E9A948F816C6161616166676A6C727274
+747476797C7C7F7F7F7F7F8187878789898C8E8F9292949494969696999A9C9C9C9A9A9A9C9C9C9C
+9E9E9E9C9C9E9E9E9E9EA3A3A3A1A3A3A4A4A4A4A4A4A4A3A3A3A3A1A1A1A19E9C9C9C9A9A999494
+94928E8987847F797674716A67616161616467676767676767676767676661615F5C55767674726C
+6C6A6A676161616161615F616164676A6C6C717274767C7F818587878989898C8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F8F9292928F8F8F8F929292929292928F929292928F8F8F8F928F8F8E8E8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292929292929292929292
+92929292929292929292929292929292929294949494949494949494949494949494949494949494
+9494949494949999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A969494949494949499999A
+9A9A9C9C9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A
+9A9A9A9A9A9A99969494949494949494949494949494949494928F89877F76767C7F818587878989
+898989898987878784817F7F7F7C79797C7F8487898F9292949494949292929292928F8E8E8F9292
+94999A9494929289857F7F7F7C7F7F8181848584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676
+767676767676747474747474767676767676767676767676767674747474747676797C7C7F818587
+8789898E8F9292929294949494969999999694999A9A9A9C9C9C9A9A9C9C9C9C9A9C9C9C9C9C9C9A
+9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494929292929292
+92929292929292928E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878785858585858585
+84817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767674747474747474726E6C6C6C6C6C6A6A
+6A6A6767676461616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F8185858585858585878789
+8989898989898989898E8E8E8E8E8E8F92929292929292929294949494949494949494949494818C
+92949A9EA4A6ABB1B6BBC0C6C8CFD4D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F1ECEC
+E7E4E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B1B1B1B1B1B1AEAEAEAEABAEAEABA9A6A39C99928C7C6C6161616164676A6C7172
+747476797C7C7F7F7F7F7F81848787878989898E8F929294949494949494999A9A999A9A9A9A9C9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9EA1A3A4A4A3A3A1A19E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9694
+9492928C8987817C7C7674716A67646161616667676767676767676767676661615F59557474726E
+6C6A6A6766616161616161616166676A6C6C71727476797C7F848787898989898C8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8F8F929292928F8F8F8F928F8F8E8E8F8F8F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292929292929292
+92929292929292929292929292929292929292929294949494949492929294949494949494949494
+949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949699999A9A
+9A9C9C9E9EA1A1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9994949494949494949494949494949494928F89877F76797C7F81848787898989
+8989898987878784817F7F7F7F7F7F818587898E92929494949494929292929292928F8E8F929294
+949A999492928E87817C7C7C7F7F7F7F818181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676
+7676767676767676767476767676767676767676767676767676767474747476797C7C7C7F7F8485
+8787898C8E8F9292929294949494969999949496999A9A9A9C9A9A9A9A9C9C9C9A9A9C9C9C9C9C9A
+9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494949492929292929292
+92929292929292928F8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989878785858585858585
+84817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676767674747474747472716C6C6C6C6C6A6A
+6A6A6767676661616161615F5F5F5D595757575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858587878989
+89898989898989898E8E8E8E8E8E8E8F92929292929292929494949494949494949494949472878E
+92949C9EA4A6AEB1B7BBC1C6C9CFD4D9DFE1E6E7ECF2F2F4F4F7F7F9FAFAF9F9F7F7F4F4F2F1ECEC
+E7E4E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEABA9A6A49E9C949289796C61616161666A6C6C71
+727476767B7C7C7F7F7F7F7F81858787898989898C8F92929294949494949496949999999A9A9A9A
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9EA1A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A999994
+9492928F8987857F7C7C76746C6A67616161666767676A6A6A6A6A6A6A6A676661615F5955747472
+6C6C6A6A67616161616161616166676A6A6C6E727274797C7F81878787898989898C8C8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8F8F928F8F8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292929292
+92929292929292929292929292929292929292929292929494949292929292929494949494949494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949499999A9A9A9C
+9C9C9E9EA3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A99969496999999999999949494949494949289877F767C7F818485878787898989
+89898987878784818181818181848789898F9292949494949994949292929292928F8E8F92929294
+999A9494928F89847F7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676
+7676767676767676767676767676767676767676767676767676767674747476797C7C7C7C7F8184
+858789898E8E8F9292929294949494999494949499999A9A9A9A9A9A9A9C9C9A9A9A9C9C9C9C9A9A
+9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949492929292929292
+92929292929292928F8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989878785858585858585
+8481817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767674747474747472716C6C6C6C6C6C6A
+6A6A6A67676761616161615F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7C7C7C7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585858787898989
+898989898989898E8E8E8E8E8E8E8F929292929292929292949494949494949494949494947C898F
+94999C9EA6A9AEB1B9BBC1C6CCCFD4D9DFE1E6ECECF2F4F4F4F7F9F9FAF9F9F7F7F4F4F4F2F1ECEC
+E7E4E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C4C1C1C0C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B6B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEABA9A6A49E9A948F877C7166616166676A6C6C
+71727476797C7C7C7F7F7F7F8184878787898989898C8F9292929292949494949494949999999A9A
+9A9A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A999994
+949292928E8987817F7F7C76726C6A666161646767676A6A6A6A6A6A6A6A6A676661615F59557472
+716C6A6A67666161616161616161676A6A6C6C727274767C7F818587878789898989898C8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292
+92929292929292929292929292929292929292929292929292929292929292929292949494949494
+9494949499999A9A9C9C9C9C9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A999494949499999A9A9A9C9C9C
+9C9C9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A999999999A9A9A9A999494949494928F89877C767C7F81858787878989898989
+89898787878787878585858787898C8F929494949496999A94949492929292928F8E8E8F92929494
+999994928F89877F7C7C797C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976
+7676767676767676767676767676767676767676767676767676767674747676797C7C7C7C7F7F81
+848787898C8E8F8F9292929294949494949494949499999A9A9A9A999A9A9C9A9A9A9A9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949494949494949292929292929292
+929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989878787858585858585
+8584817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767674747474747472726C6C6C6C6C6C6A
+6A6A6A67676766616161615F5F5F5F5C575757575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585858585858585878789898989
+8989898989898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494818992
+949A9CA3A6A9AEB3B9BEC1C6CCD1D4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECE9
+E7E4E1E1DFDCD9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEABA9A6A6A39C99928C897F7467616167676A6C
+6C72747676797C7C7C7F7F7F818485878789898989898E8F92929292929294949494949494969999
+9A9A9A9A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A99999694
+949292928F8C8987817F7F7C74726C6A666161666767676A6A6A6A6A6A6A6A6A676661615F575472
+726C6C6A6A67666464616161616166676A6C6C71727476797C7F848787878787898989898C8C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F
+9292929292929292928F929292929292929292929292929292929292929292929292929294949494
+94949496999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99949699999A9A9A9A9C9C9C9C
+9C9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949292928E89877C747C7F8185878789898989898989
+8989898787878787878787898E9292949494999A9A9A9A99949492929292928F8E8E8E9292949499
+999494928C89817C79767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7B767676
+7676767676767676767676767676767676767676767676767676767676767676797C7C7C7C7C7F81
+81848789898C8E8F8F92929292949494949494949494999A9A9A9A999A9A9A9A9A9A9A9A9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494949292929292929292
+929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585
+858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6C6A
+6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585858587878989898989
+89898989898E8E8E8E8E8E8E8F929292929292929292929494949494949494949494949476878E92
+949A9EA4A6ABB1B6BBC0C4C6CCD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2EEECE7
+E6E4E1E1DFDCD9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEA9A9A6A49E9C94928E8984766A6164676A6A
+6C6C72747676797C7C7C7F7F7F8184878789898989898C8E8F929292929292929494949494949496
+9999999A9A9A9A9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A99999494
+94949292928E898785817F7C7674716A676161666767676A6A6A6A6C6C6C6C6A6A676661615F5754
+72716C6C6A67666666666664646166676A6A6C6E727274797C7F8184858787878789898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F8F8F92929292928F8F8F8F8F929292929292929292929292929292929292929292929292949494
+949494999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9999999A9A9A9A9C9C9C9C9C9C
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A19E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949492928E898579747C7F818587878989898989898989
+89898987878989898989898F92949496999A9C9C9C9A9A999494929292928F8E8E8E8F9294949494
+9994928E89877F79767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7B797676
+7676797C7C797679797976767676767676767676767676767676767676767676767C7C7C7C7C7F7F
+8184878789898C8E8F8F92929294949494949494949496999A9A9999999A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494949494949494949494949494949292929292929292
+9292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6C6C
+6A6A6A6A67676764616161615F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585858585858787898989898989
+898989898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494947C898F92
+949C9EA4A6AEB1B7BBC0C6C8CFD3D9DCE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2EEECE7
+E6E4E1E1DFDCD9D4D4D1CFCCCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B7B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEABA9A6A6A49E9C9492928E877C72675D676A
+6A6C6E72747676797C7C7C7F7F818487878789898989898C8E8F9292929292929292949494949494
+94969999999A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A999999949494
+9494929292928C898785817F7C76726C6A6764616767676A6A6A6A6A6C6C6C6C6A6A676661615F57
+51726C6C6A6A676766666666666666676A6A6C6C727274767C7C7F8184858787878989898989898E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F8F928F8F8E8E8E8E8F8F8F9292929292928F8F8F929292929292929292929292929494
+949499999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A999494928F8C878179747C7F8185858787898989898989898C
+89898989898C8E8C8C8E929494999A9A9C9C9E9C9C9A99949492929292928E8E8E8E929494949494
+9492928987817C767C7C7C7C7F7F7F7F7F7F7F81818181817F7F8181817F7F7F7F7F7C7C7C7C7979
+797C7C7C7C7C79797C7C7976767676767676767676767676767676767676767679797C7C7C7C7F7F
+818185878989898C8E8F92929292949494949494949494999999999699999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898787878585858585
+858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6C6C
+6A6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585858587878789898989898989
+8989898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494949481899294
+999CA1A6A9AEB1B9BBC1C6C8CFD4D9DEE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F1ECECE7
+E6E4E1E1DFDCD9D4D4D1CFCFCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B7B7B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEA9A6A6A4A49E9C999492928E877C72675F
+6A6A6C7274747676797C7C7F7F8184858787898989898C8E8E8F9292929292929292929294949494
+949494949999999A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9C9A99949699949494
+9494929292928F89878785817F7C74726C6A6666666767676A6A6A6A6C6C6C6C6C6A6A676661615D
+57516E6C6C6A6A676767676767666667676A6C6C71727476797C7F7F81848487878989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F9292928F8F8E8F8F8F92929292929292929292929494
+9494999A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9A9A9A9A9694928F89877F7674797F818585878789898989898C8C8E8E
+8E8E8C8E8F8F8F8F8F9294999A9C9C9C9E9E9C9C9C9A999494929292928F8E8E8E8F929494949494
+94928E89857C767C7C7C7C7F7F7F7F7F81818484858584818184848481817F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C79767676767676767676767676767676767676797979797C7C7C7C7C7F
+7F818487878989898C8E8F929292929494949494949494949999999494999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494949494949292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6C
+6C6A6A6A6A676767616161615F5F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585858585858787898989898989898989
+89898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494949476878C9294
+9A9CA3A6A9AEB3B9BBC1C6C9CFD4D9DFE1E6E7ECEEF2F4F4F7F9F9FAFAF9F9F7F4F4F4F2F1ECECE7
+E6E4E1E1DFDCD9D4D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B7B7B6B6B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEABA9A6A6A4A49E9C9A949492928E877C76
+7164576C7274747676797C7F7F7F818487878989898C8E8E8E8F9292929292929292929292929494
+9494949494949999999A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494
+949492929292928E898787857F7C7974716C6767676767676A6A6A6A6C6C6C6E6C6C6A6A6A66615F
+5C57516C6C6A6A676767676767676767676A6C6C71727474767C7C7F7F818487878789898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8F8F9292929292929292929494
+9499999A9A9A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9C9A9A9994928E89877F7674767C8185858787898989898C8E8F8F9292
+928F92929292929292949A9C9C9C9E9E9E9E9C9C9A9A949492929292928F8E8E8E92949494949494
+928F89877F76767C7C7C7C7F7F818184848585858585858485858585848481817F7F7F7C7C7C7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C76797976767676767676767676767676797979797C7C7C7C7C7C7C7F
+7F818487878989898C8E8E8F929292929494949494949494949996949494999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A999A9A9A9A9A9A9A999994949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898987878785858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676767676767474747472726E6C6C6C6C6C
+6C6A6A6A6A676767666161615F5F5F5F5F5D575757575555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F81817F8184858585858585878585878789898989898989898989
+898E8E8E8E8E8E8E8F92929292929292929292949494949494949494949494949494947C898F9294
+9A9EA4A6ABB1B6B9BEC1C6CCCFD4D9DFE1E6E7ECEEF2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1E1DFDCD9D9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B7B7B6B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEABA9A6A6A6A4A4A19C9C9A99949292928F
+897F746E665774747676797C7F7F818487878789898C8E8E8E8E8F92929292929292929292929292
+94949494949494949999999A9A9A9A9A9A9999999999999999999999999999999994949494949494
+949492929292928F8C898787847F7C76746E6A67676767676A6A6A6A6A6C7171716C6C6C6A6A6661
+5F5C576C6C6C6A6A67676767676767676A6A6C6C71727474767C7C7F7F8184858787898989898989
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929292929294
+9494999A9A9A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9E9E9E9EA1
+A3A3A4A4A4A4A4A4A4A4A4A6A4A4A4A39E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9C9C9C9C9C9C9C9A9494928E89857F7674767C7F848587878989898C8E8F9292929292
+9292929494949494999A9C9E9E9E9E9E9E9E9C9C9A999492929292928F8E8E8E8F92949494949494
+928E89857C747C7C7C7C7F7F81848787878785858587878585858585858484817F7F7C7C7F7F8481
+7F7F7F7F7F7F7F7C7C7C7C7C7979797976767676767676767676797979797C7C7C7C7C7C7C7C7C7F
+7F81848787878989898C8E8F8F929292929494949494949494969494949499999A9A9A9A9A9A9A9A
+9A9A9A9A9A999A9A9A9A9A9A99999694949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898987878785858585
+8585858581817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472716C6C6C6C6C
+6C6C6A6A6A6A676767616161615F5F5F5F5F59575757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F81848181848585858585858787878787898989898989898989898C
+8E8E8E8E8E8E8E8F9292929292929292929292949494949494949494949494949494948189929499
+9C9EA4A6AEB1B6BBC0C1C6CCD1D7D9DFE1E6E7ECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F2F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B7B7B6B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEA9A9A6A6A6A4A4A49E9E9C9A99949494
+94949492897F715F7476767C7C7F7F818487878989898C8C8E8E8F8F929292929292929292929292
+929294949494949494949999999A9A99999694949494949494949494949494949494949494949494
+94929292929292928F89898987817F7C76726C6A67676767676A6A6A6A6C6C7272716C6C6C6C6A66
+615F5C576C6C6C6A676767676767676A6A6A6C6C72727474767C7C7F7F7F81848787898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89
+8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8F8F8F929292929292
+949494999A9A9A9A9C9C9C9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9EA1A3A3
+A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A39E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9C9E9C9C9C9C9A9492928E89857F7674767C7F848587878989898E8F92929294949494
+949494949499999A9C9C9E9E9EA1A19E9E9E9C9C99949292929292928F8E8E8F9294949494949492
+8F89877F747C7C7C7C7F7F8187878787878787878787878785878787878784817F7F7F8187878784
+818181817F7F7F7C7C7C7C7C7C7B7C7C7976767676767676797979797C7C7C7C7C7C7C7C7C7C7C7F
+7F8181858787878989898C8E8F8F929292949494949494949494949494949499999A9A9A9A9A9A9A
+9A9A9A9A9999999A9A9A9A9A99999494949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585
+8585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7B76767676767676747474747472726E6C6C6C6C
+6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F818485848485858585858587878787878789898989898989898989898E
+8E8E8E8E8E8E8E92929292929292929292929294949494949494949494949494949479878C92949A
+9C9EA4A9AEB1B7BBC0C4C6CCD3D9DCDFE4E7E9ECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCC8C6C6C6C6C4C1C1C0C0BEBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEABA9A6A6A6A6A4A4A4A4A39E9C9C9A9A
+9A9999999996927F715974767C7F7F7F81848789898989898C8E8E8F8F9292929292929292929292
+92929294949494949494949499999999949494949494949494949494949494949494949292929294
+9292929292929292928E898987847F7F7C74726C6A6A6A6A6A6A6A6A6A6C6C717272716C6C6C6C6A
+66615F5C556C6C6A6A676767676767676A6A6C6C72727476767C7C7C7F7F81848787878989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8C8C898C8C8E8E8F8F8F92929292
+9294949499999A9A9C9C9C9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9E9EA3A4A4
+A4A4A4A4A4A6A6A6A6A6A6A6A4A4A3A19E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9C9C9C9C9C9C9C9C9C9A9694928E89857F7674767C7F8185858789898C8E929294949494999494
+9496999A9A9A9C9C9E9EA1A3A4A4A4A3A39E9C9A94949292929292928E8E8F929494949494949492
+8C898176767C7C7C7F818487878789898787878787878787878787878787817F818185878C898787
+85848484817F7F7F7C7C7C7C7C7C7C7C7C7976767676797979797C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F8184878787898989898C8E8F929292929494949494949494949494949494999A9A9A9A999A9A
+9A9A9A9A999999999A9A9A9999969494949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585
+858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472716C6C6C6C
+6C6C6A6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F817F7F7F
+7F7F7F7F7F817F7F7F81848585858585858585858587878987878989898989898989898989898C8E
+8E8E8E8E8E8E8F9292929292929292929292949494949494949494949494949494947C898E92949A
+9C9EA4A9AEB1B9BBC1C6C8CFD3D9DCE1E4E7ECECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEABA9A9A9A6A6A6A6A6A6A6A4A4A19E9E
+9E9C9C9C9C9C9A96927C6774797C7F7F7F81878787898989898C8E8E8E8F8F929292929292929292
+92929294949494949494949494949994949494949494949494949494949492929292929292929292
+9292929292929292928F8E898987817F7F7974726C6A6A6A6A6A6A6A6A6A6C71727272716E716E6C
+6A67615F5C556C6C6A6A6767676767676A6A6C6C7272747476797C7C7F7F81848587878989898989
+898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898C8E8C898989898C8C8E8E8F8F8F9292
+92929294949496999A9C9C9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9E9EA1A4A4A4
+A4A4A4A6A6A6A6A6A6A6A6A4A4A39E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9C9A9A9A9A9994928E89857F7976767C7F8185858789898C8F9292949496999A9A9999
+9A9A9A9C9C9C9C9E9EA4A4A4A4A4A4A4A19E9C9A949292929292928F8E8E9292949494949494928E
+89877C7479797F7F848787898989898989878989898989898989898787858181848789928F898987
+8787878584817F7F7F7C7C7C7C7C7C7C7C797676797979797B7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F818485878787898989898E8E8F929292929494949492949494949494949496999A9A9999999A
+9A9A9A99999694999A9A9A9999949494949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898787858585
+858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726C6C6C6C
+6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF817F7F8181
+817F7F81848181818485858585858585858585878787898989898989898989898989898989898E8E
+8E8E8E8E8E8E9292929292929292929292929494949494949494949494949494947481898F94999C
+9EA1A6A9AEB3B9BBC1C6C8CFD4D9DFE1E6E7ECECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BEBEBEBEBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEABABA9A9A6A6A6A6A6A6A6A6A6A4A4
+A4A3A1A19E9E9C9C9A947C61767C7C7F7F7F848787878989898C8E8E8E8E8F929292929292929292
+929292949494949494949494949494949494949292929292929292929292929292929292928F8F92
+929292929292929292928F8C898987817F7C7674726C6A6A6A6A6A6A6A6A6C6C727272727172726E
+6C6A67665F59546C6A6A6A67676767676A6A6C6C7272747476797C7C7F7F7F818487878989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+8989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E
+8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989898C8E8E8F8F8F
+9292929292949494949A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9EA3A4A4A4
+A4A4A6A6A6A6A6A6A6A6A4A4A39E9E9E9E9C9C9C9A9A9A9A999999999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9A9A99999494928E89877F7C76767C7C7F8585858789898F92949494999A9A9C9A9A9A
+9C9C9C9C9C9E9EA1A4A4A4A6A6A6A4A39E9C9C99949292929292928F8E8F92949494949494928F89
+877F7476767F8187878989898989898989898989898C8C898989898987858487878C9294928E8989
+8987878784817F7F7F7C7C7C7C7C7C7C7C7C797979797B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F818485858787878989898C8E8E8F929292929494929294949494949494949499999A9999999A
+9A9A9A9999949499999A999996949494949494949494949494949494949494949492929292929292
+929292929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898787858585
+858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C6C6C
+6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D595757575555554F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8181848484
+818184858584848585858585858585858585878787898989898989898989898989898989898C8E8E
+8E8E8E8E8E8F9292929292929292929292949494949494949494949494949494947C878C9294999C
+9EA3A6ABB1B3B9BBC1C6CCCFD4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAF9F9F7F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCCCC8C6C6C6C4C1C1C1C0C0C0BEBEBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEABABABA9A9A9A9A9A9A9A9A9A9A9A9
+A6A6A6A6A4A39E9C9C9A8F746A767C7C7F7F81848787878989898E8E8E8E8F929292929292929292
+92929292949494949494949494949494949492929292929292929292928F8F8F8F8F8F8E8E8E8E8F
+9292928F8F9292929292928E89898784817F7C7674726C6A6A6A6A6A6A6A6C6C7172747272727272
+6E6C6A6A665F57516C6C6A6A676767676A6A6C6C7172747476767C7C7C7F7F818487878789898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+8989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F
+8E8E8E8E8E8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898C8E8E8F
+8F8F9292929292949494999A9A9A9A9A9A96999A9A9A9A9A9C9C9C9C9C9C9C9C9E9E9E9EA3A4A4A4
+A4A4A6A6A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9A9A999999969496999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9994949494928F8987817C79767C7C7F8485858789898E929494999A9A9C9C9C9C9C9C
+9C9C9E9E9E9EA3A4A6A6A6A6A6A4A49E9E9C9A949292929292928F8F8F9292949494949492928E89
+847976767C8187898989898C8C8C89898989898C8E8E8E8C89898987878587878C929A9494928E8C
+898787878584817F7F7F7C7C7C7C7C7C7C7C7B79797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F81848585878787878989898C8E8F8F9292929494929292949494949494949494999999949699
+9A9A9999969494949999999994949494949494949494949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898787858585
+858585858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726C6C6C
+6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8485858585
+848585858585858585858585858585858787878989898989898989898989898989898989898E8E8E
+8E8E8E8E8E8F9292929292929292929294949494949494949494949494949494947F898E92949A9C
+9EA4A6AEB1B6B9BEC1C6CCD1D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAF9F9F9F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCFCCC8C6C6C6C4C1C1C1C0C0C0C0C0BBBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEABABABA9A9A9A9A9A9A9A9A9ABAB
+AEABA9A9A6A6A4A19E9C9989766E797C7C7C7F818587878789898C8E8E8F8F929292929292929292
+929292929494949494949494949494949494929292928F8F8F8F8F8F8F8E8E8E8C8C8C8C8C8C8C8C
+8F92928F8E8F92929292928E8989898784817F7C7474716C6C6C6C6C6C6C6C6C7172747472727272
+726E6C6A6A665F574F6C6C6A6A6A6A6A6A6A6A6C6E7272747476797C7C7F81818485878789898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8F9292928F
+8F8F8F8E8F8F929292928F8F8F8E8E8E8E8E8E8E8C89898989898989898989898989898989898C8E
+8E8F8F8F9292929292949494999999969494999A9A9A9A9A9C9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4
+A4A4A6A6A6A6A4A4A4A4A39E9E9E9E9C9C9C9C9A999994949494949999999999999A9A9A9A9A9A9A
+9A9A9A9A9994949292928E8987817F7C767C7C7F8185858587898C929294999A9C9C9C9C9C9C9C9C
+9E9E9E9EA1A4A4A6A6A6A6A6A6A4A19E9C9C9994929292929292928F9292949494949494928F8987
+7C7476797F848989898C8E8E8E8E8C898C8E8E8E8F8F8E8E8C89898787878789929A9C9A9492928F
+89898787878481817F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F81858585878787898989898C8E8F9292929292929292929494949494949494969996949499
+999A9999949494949699999494949494949494949494949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898787878585
+85858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676767676767474747472726E6C6C
+6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D575757575555554F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585858585858585858585858585858787878989898989898989898989898989898989898E8E8E8E
+8E8E8E8E8F9292929292929292929294949494949494949494949494949494947681898F94969A9C
+9EA4A6AEB1B7BBC0C1C6CCD1D9DCDFE1E6E7ECECF2F2F4F7F9F9FAFAFAF9F9F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCFCCC8C6C6C6C6C1C1C1C0C0C0C0C0BBBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEABABAEAEAEAEABABABABAEAE
+AEAEAEAEABA9A6A4A39C9A94877C746C7C7C7C7F8187878789898C8E8E8F92929292929292929292
+929292929292949494949494949494949492929292928F8E8E8E8E8E8E8989898989898989898989
+8C8E8F8E8C8E92929292928F8C89898787847F7C797472716C6C6C6C6C6C6C6C6C72727474727474
+72726E6C6A67615F574F6C6C6A6A6A6A6A6A6A6C6C7272747476797C7C7F8181848487878989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+898C898989898C8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8F8E8E8E8E8F92928F8F8F9292929292
+92928F8F8F92929292929292928F8F8F8E8E8E8E8E8989898989898989898989898989898989898C
+8E8E8E8F8F8F929292929294949494949496999A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4
+A4A4A6A4A4A4A4A4A4A49E9E9C9C9C9C9C9C9A9A999494949494949499969494999A9A9A9A9A9A9A
+9A9A999494949292928E8987847F7C797C7F7F818585858787898F9294999A9C9C9C9E9E9C9C9C9E
+9EA1A3A4A4A4A6A6A6A6A6A6A4A39E9C9C9A949492929292929292929294949494949494928C897F
+7476767F8187898C8E8E8F8F8F8E8E8E8F92928F928F8F8E89898787878989929A9E9C9C9A94928F
+8C898987878784817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F8184858585878789898989898E8E8F92929292929292929494949494949494949994949494
+99999996949494949499999494949494949494949494949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C6C
+6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F59575757575555514F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+85858585858585858585858585878787898989898989898989898989898989898989898E8E8E8E8E
+8E8E8E8F929292929292929292929494949494949494949494949494949494947C87899294999C9E
+9EA4A9AEB1B9BBC0C6C8CFD3D9DCDFE4E7E9ECEEF2F4F7F7F9F9FAFAFAF9F9F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C0C0C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABAEAEAEAEAEAEABAEAEAE
+AEAEB1AEAEAEA9A6A49E9C9A94897F76724F7C7F818587878989898E8F8F92929292929292929292
+9292929292929292949494949494949492929292928F8F8E8C8C8C8C898989898989898989898989
+89898C8E898C8F929292928F8E8989898787817F7C767472716C6C6C6C6C6C6C6C71727474747474
+7472726E6C6A67615D556C6C6C6A6A6A6A6A6A6C6C7172747476797C7F7F8184848587878789898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+8C8E8E8C8C8C8E8E8F8E8E8E8E8F92928F8F8F8E8E8E8E8F8F8F8F8F8F8F92929292929292929292
+9292929292929292929292929292928F8F928F8F8E8C8C898989898989898989898989898989898C
+8E8E8E8E8E8E8F8F929292949494949494999A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A1A3A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A19E9C9C9C9C9C9C9C9A9996949494949494949494949496999A9A9A999999
+999994949492928F8C8987847F7F7C797F7F818585858587898E9294949A9C9C9E9E9E9E9C9C9E9E
+A4A4A4A4A6A6A6A9A9A9A9A6A49E9E9C9A999492929292929292929294949494949494928F89877C
+74767C81878C8E8E8F8F9292928F8F929292929292928F8E898989878989929A9E9E9E9E9C9A9492
+8E89898787878584817F7F7F7C7C7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F8184858585878789898989898C8E8F8F929292929292929294949494949494949494949494
+96999994949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676767676747474747472726E6C
+6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585858585858585858585878787898989898989898989898989898989898989898C8E8E8E8E8E8E
+8E8F8F92929292929292929292929494949494949494949494949494949494727F878E92949A9C9E
+A3A6A9AEB3B9BBC1C6CCCFD3D9DCE1E4E7ECECEEF2F4F7F7F9F9FAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEB1B1B1B1AEAEABA6A49E9C9A9489817C74617C7F8487878789898C8E8F92929292929292929292
+92929292929292929292949494949492929292928F8F8E8E8C898989898989878787878787878787
+8989898989898E8F92928F8F8F898989898784817F7C7674726E6C6C6C6C6C6C6C71727474747474
+747472726C6C6A666159546C6C6C6A6A6A6A6A6A6C6E72727474767C7F7F81848587878787898989
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8C8C8C
+8E8E8F8E8E8E8E8F8F8F8F8F8F8F929292928F8F8F8F8F92929292928F9292929292929292929492
+9292929292929292949492929292929292929292928F8E8E8C8C8C8C8C8E8E8C8C89898989898989
+8E8E8E8E8E8E8E8E8F9292929494949496999A9A9A9A9A9C9C9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A3A19E9C9C9C9C9C9C9A9A9A999494949494949494949494949499999999999694
+94949492928F8E8C898784817F7C7C7F7F7F848585858787898F92949A9C9C9E9E9E9E9E9E9E9EA4
+A4A6A6A6A6A6A9ABA9A9A9A6A49E9C9C9A949492929292929292929494949494949492928C877F74
+767C8187898E8F8F9292929292929294949494929292928E898989898C8F949CA4A4A39E9E9C9492
+8F89898987878784817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F8184858585878789898989898C8E8E8F8F9292929292929292949494949494949494949494
+94999494949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C
+6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+85858585858585858585878787898989898989898989898989898989898989898C8E8E8E8E8E8E8E
+8F9292929292929292929292929494949494949494949494949494949494947984898F92949A9C9E
+A4A6ABB1B3B9BBC1C6CCCFD4D9DFE1E6E7ECECEEF2F4F7F7F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D3D3D1CFCCC9C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEB1AEAEAEAEAEAE
+B1B1B1B1B1B1AEAEA9A6A49E9C9A968C877F7C71578185878789898C8E8F92929292929292929292
+929292929292929292929292949494929292928F8F8E8E8C89898989898987878785858585858587
+8787898989898C8E8F8F8F8F8E8C8989898787847F7C7C7674726E6E6E6E6E717171727274747474
+74747472726C6A67615F574F6C6C6C6A6A6A6A6A6C6C72727474767C7F7F81848787878787898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8F8E8E8E8E8F8F928F8F8E8E8E8E
+8E8F8F8F8F8F8F92929292928F929292929292929292929292929292929292929292929292949494
+94949292929292949494949492929292929494949292928F8F8E8F8F8F8F8F8E8E8C8C898989898C
+8C8E8E8F8F8F8E8E8F92929294949494999A9A9C9C9C9C9C9C9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A3A1A19E9E9C9C9C9C9A9A9A9A99969494949494949494949494949494949494949494
+949492928F8E89898785817F7C7C7C7F81818585858787898E9294999A9C9E9E9E9E9E9E9E9EA4A6
+A6A6A6A9A9A9ABAEABA9A9A6A39C9C9A969492929292928F8F929294949494949494928E89877976
+7C8187898E8F929292929294949494949494949292928F8E8989898C92949CA1A4A4A4A4A19C9492
+8F8C89898787878584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F8185858587878789898989898E8E8E8F9292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472726E
+6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+858585858585858587878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8F
+929292929292929292929292929494949494949494949494949494949494947C87899294999C9E9E
+A4A6ABB1B6B9C0C1C6CCD1D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D3D3D1CFCCC9C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B6B6B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEB1B1AEAEAEB1B1
+B1B1B1B1B1B1B1AEAEA9A6A39E9C9A998F89847F76668587878989898E8F92929292929292949492
+9292929292929292929292929292929292928F8F8E8E8C8989898989878787858481818181818181
+84878787898989898E8F8F8E8E8E8C8989898785817F7C7C76747271717171727272727274747474
+7474747472726C6A67615F556C6C6C6C6C6C6C6C6C6C7172747476797C7F81848787878789898989
+8C8E8E8E8E8E8E8E8E8E8F8E8E8E8E8F8F8F8F8F8E8E8E8E8E8F8F8F8F8F8F92929292928F8F8F8F
+8F8F9292929292929292929292929292929292929292929294929292929292949494929294949494
+949494949292949494949494949494929494949494949292929292929292928F8F8E8E8E8E8E8E8E
+8E8E8F8F92928F8F8F929292949494999A9A9C9C9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4
+A4A4A3A3A19E9E9E9E9C9C9A9A9A9A9A999996949494949494949494949494949494949494949494
+9292928F8C89898785817F7F7C7C7F81818585858587898C9294949A9C9C9E9E9E9E9E9E9EA4A6A6
+A9A9A9ABAEAEAEAEAEABA6A49E9C9A999492929292928F8E929294949494949494928F89877F767C
+7F8787898E8F929292949494949494969494949492928F8C89898C8F92999EA4A6A6A4A4A49C9992
+928E8989898787878481817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F
+7F7F7F7F8184858585878789898989898E8E8E8E8F92929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585
+85858585858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767674747474747271
+6C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585858585858787878989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8F92
+929292929292929292929292949494949494949494949494949494949494747F878E92949A9C9EA3
+A4A6AEB1B6BBC0C6C8CFD3D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D4D3D1CFCCCCC8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B6B6B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1
+B1B1B1B1B1B1B1AEAEABA6A4A39E9C9C9A928C87817C724F878789898C8E8F929292929294949494
+9292929292929292929292929292929292928F8E8E8C8989898989878787858481817F7F7F7F7F7F
+8184878787878989898E8F8E8E8C8C898989898784817F7C79767472727272727272727274747474
+747474747472716C6A665F594F6C6C6C6C6C6C6C6C6C7172747474767C7F7F818587878989898989
+898E8E8E8F8F8E8E8E8F8F8F8F8F8F8F929292928F8F8F8F8F8F9292929292929292929292929292
+92929292929292949492929292929292949492929294949494949492929292949494949494949494
+94949494949494949494949494949494949494949494949492929292929292928F8F8F8E8F8F8F92
+8F8F8F929292929292929294949494999A9A9C9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4
+A4A3A19E9E9E9E9E9C9C9A9A9A999999949494949494949292929294949494949494949494949292
+928F8E8989898787847F7F7F7F7F8184858585858789898F9294999C9C9E9E9E9E9E9E9EA3A6A6A9
+ABAEAEAEAEAEAEAEABA9A6A39C9C999494929292928F8E8F929294949494949494928E898574797F
+8789898E8F92929494949494999999999494949494928F8C8C898F92949CA1A6A6A6A6A6A49E9A94
+928F8989898987878584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F
+7F7F7F7F8184858585878789898989898C8E8E8E8F8F929292929292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585
+85858585858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767674747474747272
+6C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+858585858787878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F9292
+9292929292929292929292929494949494949494949494949494949494947C84898F92949A9C9EA4
+A6A9AEB1B9BBC1C6C9CFD3D9DCDFE4E6E7ECECF2F2F4F7F9F9FAFAFAFAF9F9F9F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D7D4D4D3D1CFCFCCC8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEB1B1B1B1B1B1B1B1
+B1B1B1B1B1B1B1AEAEAEABA6A4A39E9E9C9C949289857F765E8789898C8E8F929292929292949494
+92929292929292929292929292929292928F8F8E8C89898989898787878584817F7F7F7F7F7F7F7F
+7F7F84858787878789898E8E8C8C8C8C8989898787847F7F7C767474727272727272727272747474
+747474747474726C6A67615F554F6C6C6C6C6C6C6C6C6C72727474767C7F7F818487878989898989
+8C8E8E8F928F8F8F8F8F9292928F8F92929292929292929292929292929292949492929292929292
+92929292929494949494949292929294949494949494949494949494949294949494949494949494
+949494949494949494949494949494949494949494949494949492949292929292928F8F8F929292
+9292929292929292929292949494999A9A9C9C9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4
+A39E9E9E9E9E9E9C9C9A9A9999999494949494949492929292929294949494949292929292929292
+8F8E898989878785817F7F7F7F8184848585858787898E9294969A9C9E9E9E9E9E9E9EA3A4A6ABAE
+AEAEAEAEAEB1AEAEA9A9A49E9C9A9494949292928F8E8E8F9292949494949494928F898774767F87
+898C8E8F929494949496999A9A999A999994949494928F8E8E8E8F92999EA4A6A6A6A6A6A49E9C94
+928F8C8989898787878481817F7F7F7F7F7F7C7C7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F7F7F7F8184858585878789898989898C8E8E8E8E8F929292929292929292949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898987878785
+8585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474747472
+716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D575757575555554F4F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585878787878989898989898989898989898989898989898C89898C8E8E8E8E8E8E8E8E8F929292
+9292929292929292929292949494949494949494949494949494949494947C87899294999C9C9EA4
+A6A9AEB1B9BBC1C6CCCFD4D9DCE1E4E7ECECEEF2F4F7F7F9F9FAFAFAFAFAF9F9F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D7D4D4D3D1CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEB1B1B1B1B1B1B1B1
+B3B3B1B1B1B1B1AEAEAEABABA6A6A4A19E9C9C9A928C878176678989898E8F929292929292949494
+949292929292929292929292929292928F8F8E8C8C898989898787878584817F7F7F7C7C7C7C7C7C
+7C7F7F81848485878789898E8C89898C8C8989898785817F7C7C7674747272727272747474747474
+74747474747474726C6A666159546C6C6C6C6C6C6C6C6E71727476767C7C7F81848787878989898C
+8E8E8F8F9292928F8F92929292929292929292929292929292929292929494949494949492929294
+94949494949494949494949494929494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+9292929292929292929294949496999A9A9C9C9C9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4
+A39E9E9E9E9E9C9C9A9999969494949494949292929292929292929292929292929292929292928F
+8E8C898987878784817F7F7F818587878787878789898F92949A9C9C9EA3A19E9EA1A4A4A6A9AEAE
+B1B1B1B1B1B1AEABA9A6A39C9A9994949292928F8E8F8F9292949494949494928F89877F747F8589
+8E8F929294949496999A9A9C9A9A9A9A9994949494928E8E8E8F92949CA1A6A6A6A9A6A6A49E9C94
+92928E8C89898987878584817F7F7F7F7F7F7C7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F
+7F7F7F7F8184858585878789898989898C8E8E8E8E8E8F9292929292929292949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989878785
+8585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474747472
+726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F59575757575555514F4F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787878585
+87878787898989898989898989898989898989898989898E8E8C8C8E8E8E8E8E8E8E8E8F92929292
+9292929292929292929294949494949494949494949494949494949494767F878E92949A9C9EA1A4
+A6ABAEB6B9C0C1C6CCD1D4D9DEE1E4E7ECECEEF2F4F7F7F9F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDED9D9D7D4D4D3D1CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B7B7B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEB1B1B1B1B1B1B1B1B1
+B3B3B3B3B1B1B1AEAEAEABABABA6A6A4A39E9E9E9C94928E84797189898C8E8F9292929292929494
+9292929292929292929292929292928F8F8E8E8C898989898987878481817F7F7F7C7C7C7C797979
+7C7C7C7F81818185878789898C89898C8C898989898784817F7C7976747474747474747474747474
+74747474767474726E6C67615F574F6C6C6C6C7171717171727476767C7C7F81818587878989898E
+8E8F8F92929292929292929292929292929294929292929494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949292929292929292
+929292929294949494949494999A9A9C9C9C9C9E9E9E9E9E9E9EA1A1A3A3A4A4A4A4A4A4A4A4A4A4
+A19E9E9E9C9C9C9A9996949494949494929292929292929292929292929292929292929292928F8F
+8E89898987878784818181818587878787878789898E9294999A9C9EA1A4A19E9EA4A4A6A9AEB1B1
+B1B1B1B1B1B1AEA9A6A49E9C99949492928F8F8E8F92929292949494949492928E8981747C87898F
+929294949499999A9A9C9C9C9C9C9A9A99999494928F8E8E8E8F92999CA4A6A6A9A9A9A6A49E9C99
+94928E8C8989898787878584817F7F817F7F7F7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F8185858587878789898989898E8E8E8E8E8F8F92929292929292929494949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989878787
+8585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474747472
+72716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787878787
+8787898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F929292929292
+92929292929292929294949494949494949494949494949494949494947C84898F92949A9C9EA4A4
+A9AEB1B6BBC0C6C8CFD3D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDED9D9D7D4D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B3B3B3B3B3B1B1B1AEAEAEABABABA6A6A4A3A19E9E9E9C948F857C6C898C8E8F9292929292929294
+92929292929292929292929292928F8F8E8E8C8989898989878784817F7F7F7F7C7C7C7976767676
+767676797C7F7F8185878789898989898C8C8989898787847F7F7C79767474747474747474747474
+7474767676767474726C6A676159554F6C6C6C7172727272727274767C7C7F7F818487878989898C
+8F8F9292929292929292929294929292929494949492949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929294
+94929292949494949494999A9A9A9C9C9C9C9C9E9E9EA1A1A1A3A3A3A4A4A4A4A4A4A4A4A4A4A4A3
+9E9E9C9C9C9C9A999494949494949292929292929292929292929292929292929292929292928F8E
+8C89898989878784848181848787878787878989899294949A9C9E9EA3A4A39EA3A4A6A6ABAEB1B1
+B3B3B1B1B1B1AEA9A6A39C9A949492928F8E8E8F92929292949494949494928F8987747C87898F92
+94949494999A9A9C9C9C9C9C9C9C9C9A9A999494928E8E8E8F92949A9EA4A6A6A9A9A9A6A49E9C9A
+94928F8E8C89898987878784817F8181817F7F7F7F7F7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F8184858585878789898989898C8E8E8E8E8E8F8F929292929292929294949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+9292929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989878787
+858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474747474
+72716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555514F4F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787878789
+89898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292
+92929292929292929494949494949494949494949494949494949494767F87899294999C9C9EA4A6
+A9AEB1B7BBC1C6CCCFD3D7D9DFE1E6E7ECECF1F2F4F7F9F9F9FAFAFAFAF9F9F7F7F4F2F1ECECECE7
+E6E4E1DFDED9D9D4D4D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3
+B3B3B3B3B3B1B1B1AEAEAEAEABABABA9A6A4A4A4A19EA19E9A8F87796A898C8F9292929292929292
+92929292929292929292929292928F8E8E8C898989898987878784817F7F7F7C7C79767676747474
+74747474767C7F7F8184878789898989898C898989898785817F7C7C767674747474747474747474
+767676767676747472716C6A615F57546C6C6C7172727272727274767C7C7F7F818487878789898C
+8E8F9292929292929292929494949492949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929494
+9494949494949496999A9A9A9C9C9C9C9C9C9E9E9EA3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A1
+9E9C9C9C9C9C9A949494949492929292929292929292929292929292929292929292929292928F8E
+8E8C8989898787848484848787878787878789898E9294999C9C9E9EA4A4A3A1A4A6A6A9AEB1B3B6
+B6B6B3B1B1AEABA6A49E9C999492928F8E8E8E8F92929494949494949492928C877F7C87898E9294
+949496999A9C9C9C9E9E9E9E9E9C9C9A9A9994928F8E8E8E9294969C9EA4A6A6A6A9A9A6A49E9C9A
+9492928E8C8989898787878584818181817F7F7F7F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F818485858587878989898989898C8E8E8E8E8E8F929292929292929294949492929494
+94949494949494949494949494949494949494949494949494949492929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898787
+878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C767676767676767674747474
+72726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555554514F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+92929292929292949494949494949494949494949494949494949494797F878C92949A9C9EA1A4A6
+ABAEB1B9BEC1C6CCCFD3D9D9DFE1E6E7ECECF1F2F4F7F7F9F9FAFAFAFAF9F9F7F7F4F2F1ECECECE7
+E6E4E1DFDCD9D9D7D4D4D3D3CFCFCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B3B3B1B1B1B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEABABABA9A6A6A4A4A4A4A4A49A9287766A898E8F92929292929292
+929292929292929292929292928F8E8E8C89898989898787878784817F7F7C7C7C79767474747272
+7171727274767C7F7F7F848787898989898989898989898784817F7C797676747474747474767676
+767676767676747472726C6A67615D554F6C6C6E72727272727274767C7C7F7F8184858787898989
+8E8F9292929292929292929494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929292949494949494929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494999A9A9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A39E
+9E9C9C9C9C9A99949494929292929292929292929292929292929292929292929292929292928F8F
+8E8C89898787878787858787898787878789898C9294969A9C9E9EA1A4A4A4A4A4A6A9AEB1B3B6B9
+B9B9B6B1B1AEABA6A39C999492928F8E8E8E8F92929494949494949494928E89817C85898E929494
+9999999A9C9C9E9E9E9E9E9E9E9C9C9A9A9694928E8E8E8F92949A9CA4A4A6A6A6A9A9A6A49E9C9A
+9492928F8E8C8989898787878481818181817F7F7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F818485858587878989898989898C8E8E8E8E8E8E8F9292929292929292949492929494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898787
+87858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676767674747474
+7472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555544F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+929292929292929494949494949494949494949494949494949494947C84898F92949A9C9EA3A4A6
+ABB1B6B9BEC4C6CCCFD4D9DCDFE4E7E9ECEEF2F4F4F7F7F9F9FAFAFAFAF9F9F7F7F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D3D3CFCFCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B3B3B3B1B1B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEACABABA9A6A6A6A4A4A4A4A39C928474678C8E9292928F8F8F92
+9292929292929292929292928F8F8E8C8989898989878787878584817F7F7F7C7C7676747272716C
+6C6C6C6C6E72767C7C7C7F8485878789898989898989898787847F7F7C7B79767474747676767676
+76767679767676747472716C6A645F59554F6C6C7272727274747474797C7F7F7F81848787898989
+8C8F9292929292929292929494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929494949292929292929294949492929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949499999A9A9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E
+9C9C9C9A9A999494949292929292929292929292929292929292929292929292929292929292928F
+8F8C89898787878787878789898989898989898F92949A9C9C9E9EA3A4A4A4A4A6A9ABAEB1B6B9B9
+B9B9B7B3B1AEA6A49E9C949492928E8E8E8E8F929494949494949494928F89857684898E92929499
+999A9A9C9C9E9E9E9E9E9EA19E9E9C9A999494928E8E8E92949A9C9EA4A4A6A6A6A6A6A6A49E9C9A
+9494928F8E8C8989898787878584818484817F7F7F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F81848585858787898989898989898C8E8E8E8E8E8F8F92929292929292929292929294
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898987
+87878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676767676767674747474
+7472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555544F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+89898989898989898989898C8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9292929292929292
+929292929292929494949494949494949494949494949494949494767F87899294999C9C9EA4A6A9
+AEB1B6B9C0C6C8CCD1D4D9DCE1E4E7ECECEEF2F4F7F7F7F9F9FAFAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D3CFCFCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A6A4A19C927F715C8C8F8F8F8F8E8F8F
+8F92929292928F8F8F8F928F8F8E8C89898989898787878785848481817F7F7C7C76747472726C6C
+6A6A6A6A6A6C727476797C7F8185878789898989898989898785817F7C7C7C797676767676767676
+76797979797676747472726C6A67615F57546C6C7172747474747474767C7C7F7F81848787878989
+8C8E8F92929292929292929294949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292929292929292929292
+92929292929294949494949494949494949494949494949494949494949494929494949494949494
+949494949496999A9A9C9C9C9C9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A1A19E9E9E9C
+9C9A9A9A9A9994949292929292929292929292929292929292929292949494929292929292929292
+8F8C898987878787878789898989898989898C9294999A9C9E9E9EA4A4A4A4A6A9ABAEB1B6B9B9BB
+BBB9B6B1AEA9A69E9C999492928F8E8E8E8E92949494949494949492928C877481898E929494999A
+9A9A9C9C9C9E9E9E9EA1A3A4A19E9C9A9994928F8E8E8F92999C9EA3A4A4A6A6A6A6A6A6A49E9C9A
+9494928F8F8E8C8989898787878484848481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81858585878787898989898989898C8E8E8E8E8E8F92929292929292929292929292
+94949292949494949494949494949494949494949494949494929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898987
+8787858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474
+747472716C6C6C6C6C6C6C6A6A6A67676766616161615F5F5F5F5D59575757555555554F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+898989898989898989898C8C8C898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292
+9292929292929494949494949494949494949494949494949494947C7F878C92949A9C9C9EA4A6A9
+AEB1B7BBC1C6C8CFD1D4D9DFE1E6E7ECECEEF2F4F7F7F7F9F9FAFAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D3CFCFCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBB9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A6A49E9C89766C8989898C8C8E8E8E
+8F8F8F928F8F8F8E8E8F8F8F8E8C89898989898989878787848181817F7F7F7C7C76747472726E6C
+6A676767676A6C727476767C7F8184858787898989898989898784817F7C7C7C7976767676767679
+79797C7C7C7976747472726E6C6A66615D554F6C7172747474747474767C7C7F7F81848587878989
+898E8F92929292929292929292949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929292949292929292929292929292929292929292929292
+92929292929292929494949494949492929494949494949494929494949492929292949494949494
+9494949494999A9A9A9C9C9C9E9E9E9E9EA3A4A4A6A6A6A6A6A4A4A4A4A4A4A3A19E9E9E9E9E9C9C
+9A9A9A99999494949292929292929292929292929292929294949494949494949292929292929292
+8F8C898989878787878989898989898989898F92949A9C9C9E9EA1A4A4A4A4A6A9AEB1B3B9B9B9BB
+B9B7B3B1ABA6A49E9A949492928F8E8E8E92949494949494949494928E877F7F878E929494999A9A
+9C9C9C9C9E9EA1A1A3A4A4A49E9E9C9A9994928E8E8E92949A9C9EA4A4A4A4A6A6A6A6A4A49E9C9A
+949492928F8E8C8989898787878584848484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F8181848585858787898989898989898C8E8E8E8E8E8E8F929292929292929292929292
+94929292929494949494949494949494949294949494949494929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+8787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474
+747472726E6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C57575757555555544F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+89898989898989898C8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+9292929292929494949494949494949494949494949494949494767C84898E92949A9C9C9EA4A6AB
+AEB3B9BEC1C6C9CFD3D4D9DFE1E6E7ECECF1F2F4F7F7F7F9F9FAFAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D3CFCFCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEABABABA9A9A9A6A6A4A39E9281746A8989898989898C
+8E8E8F8E8E8C8C8C8C8E8E8E8E8C898989898989898787878581817F7F7F7F7F7C7676747472726C
+6A6766616161676A6E7274767C7F7F818587878789898989898787847F7F7C7C7C79767676797979
+7B7C7C7C7C7C7976747472716C6A67615F59556C6C7272747474747476797C7F7F7F818487878989
+898C8F92929292929292929292929294949494949494949494949494949494949494949494949494
+94949494949494949492929294949292929292929292929292929292929292929292929292929292
+92929292929292929292949494949292929292929494949492929292949492929292929494949494
+9494949499999A9A9C9C9C9C9E9E9EA3A3A4A4A6A6A6A6A6A6A4A4A4A4A4A4A19E9E9E9E9E9C9C9C
+9A999996949494929292929292929292929292929292949494949494949494949492949494929292
+8F898989898989878989898989898989898C9294999C9C9E9EA3A3A4A4A4A6A9AEAEB1B7B9B9B9BB
+B9B3B1AEA9A49E9C999492928F8E8E8E8F929494999994949494928F89847F878C9294999A9A9C9C
+9C9C9E9E9EA3A3A4A4A4A4A49E9E9C9A94928F8E8E8F92969C9EA3A4A4A4A4A6A6A6A4A4A19E9C9A
+999494928F8F8E8C8989898787878484858581817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F8181818184858585878789898989898989898C8E8E8E8E8E8F8F9292929292929292929292
+92929292929494949292949494949494929292949494949492929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+8787878585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474
+74747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D57575757555555554F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+8989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F92929292929292929292
+9292929292949494949494949494949494949494949494949494767F87899294999A9C9CA1A4A9AE
+B1B6B9BEC1C6CCCFD3D9D9DFE1E6E7ECECF1F2F4F7F7F7F9F9F9FAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D1CFCFCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEABABABA9A9A9A9A6A49E9A897C725F878787878989
+898C8C898989898989898C8C8C898989898989898989878785848181817F7F7F7C7C797676747472
+6C6A6761615F61666A6C7274767C7F7F7F8587878787898989898785817F7F7C7C7C7C797979797C
+7C7C7C7C7C7C7C79747472726C6C6A67615D57546C7172747474747676797C7C7F7F818487878789
+898C8E8F929292929292929292929292949494949494949494949494949494949494949494949494
+94949492929494949292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292949492929292929292929292929292949494
+94949496999A9A9C9C9C9C9E9E9EA1A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A
+9A969494949494929292929292929292929292929294949494949494949494949494949494929292
+8E898989898989898989898989898989898F92949A9C9E9EA3A4A4A4A4A4A6ABAEB1B3B9B9B9B9B9
+B6B1AEABA6A19C9A949492928F8E8E8F929494999999969494929289877C84899294969A9C9C9C9C
+9E9E9E9EA3A4A4A4A4A4A4A49E9E9C9A94928E8E8E92949A9C9EA4A4A4A4A4A6A6A4A4A49E9E9C9C
+99949492928F8E8C8989898787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F81818181818485858587878989898989898989898C8E8E8E8E8E8F9292929292929292929292
+92929292929294949292949494949494929292949494949292929292929292929292929292929292
+929292929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+898787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474
+74747472726C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C57575757555555514F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292
+92929292949494949494949494949494949494949492949494927C81898C92949A9C9C9EA3A6A9AE
+B1B6B9C0C4C6CCCFD4D9DCDFE4E6E7ECECF2F2F4F7F7F7F9F9F9FAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E1E1DFDCD9D9D9D4D4D4D1CFCFCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEABABABABABABA6A6A19C94817971598184878787
+87898989898989898989898989898989898989898989878787848485858481817F7F7F7C7C797674
+74726C6A615F5D5F61676A6C74767B7C7F7F85878787898989898787847F7F7F7F7C7C7C797C7C7C
+7C7C7C7C7C7C7C7C767472726E6C6A6A615F5C554F6C727474767676767C7C7C7F7F818485878789
+89898E8F8F9292929292929292929292949494949494949494949494949494949494949494929494
+94949492929292949292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+949494999A9A9A9C9C9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A19E9E9E9C9C9C9C9C9A
+9994949494929292929292929292929292929292949494949696949494949494949494949492928F
+8E8C89898989898989898989898989898E9294999C9C9EA3A4A4A4A4A4A6A9AEB1B1B6B9B9B9B9B9
+B3B1AEA6A49E9C999494928F8E8E8F929494999A9A99949492928C877681878F94949A9C9C9C9E9E
+9EA1A3A4A4A4A4A4A4A4A4A49E9E9C9994928E8E8E92949C9EA4A4A4A4A4A4A4A4A4A4A39E9E9C9C
+99949492928F8F8E8C8989898787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F8181818184848485858587878989898989898989898C8E8E8E8E8E8E8F92929292929292929292
+92929292929292929292929494949492929292929494949292929292929292929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989
+898787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767676767674
+7474747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D57575757555555554F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89898C8C89
+89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+92929294949494949494949494949494949494949292929492767F87898E92949A9C9C9EA4A6A9AE
+B1B9BBC1C6C8CCCFD4D9DCE1E4E7ECECEEF2F4F7F7F7F7F7F9F9FAFAF9F9F7F4F4F4F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D7D4D4D1CFCFCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABAEAEAEA9A6A49C99897F766C577F818485
+87878787878787878989898989898989898989898989898787878787878787858481817F7F7F7F7C
+767474716A665F595C5F666A6C7274767C7F7F85878787898989898787817F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C79747472726C6C6A67615F57546C717474747676767C7C7F7F7F7F8184878789
+89898C8E8E8F8F929292929292929292929494949494949494949494949494949494949494929292
+94949292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949496999A9C9C9C9C9E9E9EA1A3A4A4A6A6A6A6A6A6A6A4A4A4A4A4A39E9E9E9C9C9C9C9C9A9A
+9994949292929292929292929292929292929292949496999999949494949494949494949292928F
+8E8E8C8C8989898989898989898989898F92949A9C9E9EA4A4A4A4A4A6A6ABAEB1B3B9B9B9B9B9B7
+B1AEA9A69E9C9A9694928F8E8E8F92929494999A9A949492928E87747F878C94949A9C9C9E9E9EA1
+A4A4A4A6A4A6A6A6A6A6A4A49E9C9A94928F8E8C8F949A9EA4A6A4A4A4A4A4A4A4A4A19E9E9C9C9C
+9A94949292928F8E8C8989898787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81818181848484858585858787878989898989898989898C8E8E8E8E8E8F8F929292929292929292
+92929292929292929292929294949292929292929494929292929292929292929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989
+89878785858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676767674
+7474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F5957575757555555514F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8E8E8E8C
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292929292929292
+929294949494949494949494949494929294949292929292927C7F89899294999A9C9C9EA4A6ABB1
+B3B9BBC1C6C8CFD1D4D9DCE1E4E7ECECEEF2F4F7F7F7F7F7F9F9FAF9F9F7F7F4F4F4F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D7D4D4D1CFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEABA6A49E9A94877F746A547F7F81
+8484858787878787878787898989898989898989898989878787878787898987878785848484817F
+7F7C7976746C675F59575D61676C7274767C7F818485878789898989878481817F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7C7C76747472726C6A6A66615D574F6C7274747676797C7C7F7F7F7F8184878787
+8989898C8E8E8F8F8F92929292929292929494949492929294949494949494929294949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F92929292929292929292929292929292929494
+94949494999A9C9C9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A39E9E9C9C9C9C9C9C9A99
+94949492929292929292929292929292929292949494999A9A99969494949694949494949292928F
+8F8E8E8C8C898989898989898989898E9294999C9C9EA3A4A4A4A4A6A6A9AEB1B3B6B9B9B9B9B9B3
+B1AEA6A49E9C9A9494928E8E8E92929494949A9A969492928F89747C878C92949A9C9C9E9EA1A3A4
+A4A6A6A6A6A6A6A6A6A6A4A39E9C9A94928E8C8992949CA3A6A6A4A4A4A4A4A4A4A39E9E9E9C9C9C
+9A94949292928F8F8E8C8989898787878585858584817F7F7F7F7F817F7F7F7F7F7F7F7F7F7F7F81
+8181818484848585858585858787898989898989898989898C8E8E8E8E8E8F929292929292929292
+92929292929292929292929294949292929292929294929292929292929292929292929292929292
+92929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+89878785858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676767676
+747474747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555554F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292
+949494949494949494949494949492929292929292929292767C85898C9294999A9C9C9EA6A9AEB1
+B3B9BEC1C6C9CFD3D4D9DFE1E6E7ECECEEF2F4F7F7F7F7F7F9F9FAF9F9F7F7F4F4F2F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEA9A6A19C9492877F7467517C7F
+81818184848585878787878787878989898989898989898989878787898989898989878787878785
+847F7C7C7C76726A615957595F676C7274767C7F818484878989898787858181817F7F7F7F7C7C7C
+7C7F7F7F7C7C7C7C7C7C767474726E6A6A67615F59544F7172747476797C7C7F7F7F7F8184858787
+89898989898C8E8E8F8F929292929292929494949292929292929494949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F9292929292929292928F92929292928F8F8F929292929292928F929292929292929494
+94949494999A9A9C9C9C9E9EA1A3A4A4A6A6A6A6A6A6A6A4A4A4A4A3A3A19E9E9C9C9C9C9A9A9A99
+949492929292929292929292929292929294949494999A9A9A9A9999999999969494949292929292
+8F8E8E8E8E8C8C89898989898989898F92949A9C9E9EA4A4A4A4A4A6A6ABB1B3B6B9B9B9B9B9B9B1
+AEA9A69E9C9A9994928E8E8E8F929294949999999492928F89877C878C9294999A9C9E9EA3A4A4A4
+A6A6A9A9A9A6A9A6A6A6A4A19E9C9994928E898C929A9EA6A9A6A6A4A4A4A3A3A3A19E9E9C9C9C9C
+9A9494929292928F8E8C8989898787878585858584817F7F7F7F8181817F7F7F7F7F7F7F7F818181
+8181848484858585858585858787898989898989898989898C8E8E8E8E8E8E8F9292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+8987878585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676
+747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555554F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929294
+949494949494949494949494949292929292929292929292767F87898E92949A9C9C9EA3A6A9AEB1
+B6B9BEC1C6CCCFD3D7D9DFE1E6E7ECECF1F2F4F7F7F7F7F7F9F9FAF9F9F7F7F4F4F2F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEA9A6A49C99948F877C74617C7F
+7F7F7F81818184848585878787878787878989898989898989898989898989898989898989898987
+8785817F7F7C76716A615955575F676C7172767C7F81818587898787878781818481817F7F7F7F7C
+7F7F7F7F7F7C7C7C7C7C79747474726C6A6A67615F574F6C72727476797C7C7F7F7F7F7F81848787
+8989898989898C8E8E8E8F8F92929292929292929292929292929292949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8F8F9292929292928F8F8F92928F8F8E8E8F8F92929292928F8F9292929292929294
+94949494999A9A9C9C9C9E9EA1A4A4A4A6A6A6A6A6A6A6A4A4A3A1A19E9E9E9C9C9C9A9A9A999994
+949492929292929292929292929294949494949494999A9A9A9A99999A9A9A999494949492929292
+8F8E8E8E8E8E8C8C8989898989898E9294999C9C9EA1A4A4A4A4A4A6A9AEB1B6B9B9BBB9B9B9B3B1
+ABA6A49E9C9994928F8E8E8E929294949496999494928E89877C84899294999A9C9C9EA3A4A4A6A6
+A6A9ABABA9A9A9A9A6A6A49E9C9A94928E89898E949CA3A9A9A6A6A4A4A4A3A1A19E9E9E9C9C9C9C
+9A9494929292928F8F8E8C8989898787878585858584817F7F81818181817F7F7F7F7F7F81818181
+818484848585858585858585878789898989898989898989898E8E8E8E8E8E8F8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+8987878785858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676767676
+76747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555544F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929494
+9494949494949494949494929292929292929292929292747C8189898F94969A9C9C9EA4A6ABAEB1
+B7B9BEC1C6CCCFD3D9D9DFE1E6E7ECECF1F2F4F7F7F7F7F7F9F9F9F9F9F7F7F4F4F2F2F1ECECE7E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABA6A49E9A94948E877C74617C
+7F7F7F7F7F7F8181818484858587878787878787878989898989898989898C89898989898C8C8987
+878785847F7F7C766E6A615C55575F666A6C72767C7F81848787878787878484848481817F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7976747474716C6A6A66615C544F6E727474767C7C7F7F7F7F7F81848787
+8789898989898C8E8E8E8E8F92929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8F92928F8E8E8E8E8F8F8F92928F8E8E8E8F8F8F8E8E8E8E8E8F8F92928F8F8E8F8F929292929292
+9494949494999A9C9C9C9E9E9EA3A4A4A6A6A6A6A6A6A4A4A4A19E9E9E9E9E9C9C9C9A9A99999494
+9492929292929292929292929494949494949494999A9A9A9A9A9A9A9A9A9A99949494949292928F
+8E8E8E8E8E8E8E8C8989898989898F9494999C9E9EA3A4A4A4A4A6A6ABB1B3B7B9BBBBB9B9B6B1AE
+A9A49E9C9A9494928E8E8E8F9294949494949694928F89877981899294949A9C9C9EA1A4A4A6A6A6
+A9AEAEAEAEABA9A6A6A4A39E9C9994928C898992969CA4ABA9A9A6A6A4A4A39E9E9E9E9C9C9C9C9C
+9A949494929292928F8E8C8989898787878585858584817F8181818184817F7F7F7F7F8181818181
+848484858585858585858585878789898989898989898989898E8E8E8E8E8E8E8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+898787878585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676
+76747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555554F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292949494
+9494949494949494949494929292929292929292929292767F87898C9294999A9C9C9EA4A6AEB1B3
+B9BBC0C4C6CCCFD4D9DCDFE4E7E9ECEEF2F4F4F7F7F7F7F7F9F9F9F9F9F7F4F4F4F2F2F1ECECE7E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEA9A69E9C9A99948C857C745F
+7C7C7C7F7F7F7F7F7F818184858585858787878787898989898989898989898C8989898989898989
+87878784817F7C7C746C6A615D55575F666A6C74767C7F818487878787878784848484818181817F
+7F7F7F7F7F7F7F7C7C7C7C76767474726E6C6A6A645F574F6C71727474797C7F7F7F7F7F81848587
+878989898989898E8E8E8E8F92929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F8F9292928F8F8E
+8E8F8F8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8C8E8E8F8F92929292
+9292949494999A9A9C9C9E9E9EA3A4A4A6A6A6A6A6A6A4A4A39E9E9E9E9E9E9C9C9A9A9994949494
+9492929292929292929292949494949496999999999A9A9A9A9A9A9A9A9A9A99999494949492928F
+8E8E8E8E8E8E8E8989898989898E9294949A9C9E9EA3A4A4A4A4A6A9AEB1B7B9B9BBB9B9B6B3AEA9
+A6A39C9A9694928F8E8E8E929494949494949492928C89767F879294949A9C9C9E9EA4A4A6A6A6A9
+AEAEAEAEAEAEA9A6A6A4A19E9A94928E89898C929A9EA6ABA9A9A6A6A6A4A4A19E9E9E9C9C9C9C9C
+9A949494929292928F8F8E8C898989878787858585858481818181848481817F7F7F818181818184
+848485858585858585858585878787898989898989898989898C8E8E8E8E8E8E8E8F929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+898987878585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767676
+7676747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C5757575755555554
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929494949494
+94949494949494949494929292929292929292929292927C7F87898E9294999A9C9EA3A6A9AEB1B6
+B9BBC1C6C8CFD1D4D9DCE1E4E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F4F2F2F1ECECE7E7
+E6E1E1DFDCD9D9D9D9D4D3D1CFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEA9A6A49E9C9A99948C847C74
+617C7C7C7C7F7F7F7F7F818485858585858585878787898989878989898989898989898989898989
+8987878481817F7C79746C67615D55575F616A6C74767C7F7F818587878787858484848481818481
+817F7F7F817F7F7F7C7C7C7C79767474726C6C6A67615F574F6E727274767C7C7F7F7F7F7F818487
+878989898989898C8E8E8E8E8F929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8F8F8F8F8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8E8E8E8E8C8C8C8C8E8E8F8F9292
+929292929494999A9C9C9C9E9EA3A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9C9C9C9C9A999494949492
+92929292929292929292949494969999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996949492928F8E
+8E8E8E8E8E8E8C898989898989929294969C9C9EA1A4A4A4A4A6A6A9AEB3B9B9B9B9B9B6B3B1AEA6
+A49E9C9994928F8E8E8E929294949494949494928E89727F878E9294999A9C9E9EA3A4A6A6A9A9AE
+AEB1B1AEAEAEA9A6A6A49E9C9994928989898F949CA4A9ABA9A9A6A6A6A4A4A19E9E9C9C9C9C9C9C
+9A96949492929292928F8E8C898989878787858587878481818184848484817F7F81818181848484
+848585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8F8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898787858585858585858585858581817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676
+7676747474747472726C6C6C6C6C6C6A6A6A6A6A676767616161615F5F5F5F5D5957575757555555
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292949494949494
+94949494949494949494929292929292929292929292767C8489898F9494999A9C9EA4A6A9AEB1B7
+B9BEC1C6C9CFD1D4D9DFE1E6E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F2F2F2F1ECECE7E7
+E4E1E1DFDCD9D9D9D9D4D3D1CFCFCCCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEA9A6A6A49E9C9A99948C847C
+7461797C7C7C7C7C7F7F818184858585858585858787898987878787878989898989878789898989
+87878781817F7F7C7C76746C67615F55575D616A6C74767C7F7F8185878585848484848584848484
+81817F8181817F7F7F7F7C7C7C7C767674726C6C6A67615D574F71727474767C7F7F7F7F7F818487
+878789898989898C8E8E8E8E8F929292929292929292929292929292929292929292929292929292
+9292929292928F8F8F929292929292928F8F8F929292929292928F8F8F92928F8E8E8E8E8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8C89898C8E8E8C8989898C8E8E8F8F8F
+92929292929494999A9C9C9E9EA1A4A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9A9A999494949292
+92929292929292929292949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8F
+8E8E8E8E8E8E8989898989898E929294999C9E9EA1A4A4A4A4A6A9AEB1B6B9B9B9B9B6B1B1AEA9A6
+A19C999492928F8E8E8F9294949494949494928F89857C85899294969A9C9C9EA1A4A4A6A6A9ABAE
+AEB1B1B1AEAEA9A6A6A39E9C94928E898989929A9EA4ABABABA9A6A6A6A4A4A19E9E9C9C9C9C9C9C
+9A99949492929292928F8E8E8C898989878787878787858481848484858481818181818184848484
+858585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8E8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898787858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676767676
+7676767474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555
+544F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929294949494949494
+94949494949494949492929292929292929292929292767F87898C9294949A9C9C9EA4A6ABB1B3B9
+B9BEC1C6CCCFD3D4D9DFE1E6E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F2F2F2EEECECE7E7
+E4E1E1DFDCD9D9D9D9D4D3D1CFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEABA6A6A6A49E9C9C99948C85
+7C74617679797C7C7F7F7F8181848485858585858787878787878787878787898987878787878987
+878784817F7F7F7F7C7674726C6A615F55575D616A6C74767C7F7F81848584818181818484848485
+848181818181817F7F7F7F7F7F7C7C767474716C6A6A66615D556C72747476797C7F7F7F7F818485
+87878989898989898E8E8E8E8F8F8F92929292929292929292929292929292929292929292929292
+8F8F9292928F8F8E8E8F8F8F9292928F8F8E8E8F8F8F9292928F8E8E8E8F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8C89898C8C8C89898989898C8989898989898C8E8E8F
+8F92929292929494999A9C9C9E9EA3A4A4A4A4A4A4A4A4A19E9E9C9C9C9C9C9C9A99949494929292
+929292929292929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494929292928F
+8F8E8E8E8E8E898989898989929294949A9C9E9EA3A4A4A4A6A6A9AEB1B6B7B9B9B9B3B1AEA9A6A4
+9E9A9492928F8E8E8F9294949494949494928F89877981898F94949A9C9C9E9EA4A4A6A6A9ABAEAE
+B1B1B1B1B1AEA9A6A49E9C99948F8989898F949CA1A6ABABABA9A9A6A6A4A4A39E9E9C9C9C9C9C9A
+9A99949492929292928F8E8E8C898989878787878787878484848485858584818181818484848585
+85858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898787878585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676
+767676747474747472726C6C6C6C6C6C6A6A6A6A6A676767616161615F5F5F5F5D59575757555555
+554F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929494949494949494
+949494949494949494929292929292929292929292747C8187898F9294999A9C9EA1A6A9AEB1B3B9
+BBC0C1C6CCCFD3D9D9DFE1E6E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F2F2F1EEECECE7E7
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEABA9A6A6A6A39E9C9C99948C
+877F766176767C7C7C7F7F7F7F818181848485858787878787878587878787878787878787878787
+878481817F7F7F7C7C797674716C6A615F57555C616A6C72747C7C7F8181817F7F81818184858585
+85848181848481817F817F7F7F7F7F7C767472716C6A6A665F5C546C727474767C7C7F7F7F7F8184
+87878989898989898C8E8E8E8E8E8F8F8F92929292929292929292929292929292928F929292928F
+8F8E8F8F8F8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C8989898C8C898989898989898989898989898989898989898C8C8E
+8E8F8F929292929494999A9C9C9EA1A4A4A4A4A3A3A19E9E9E9C9C9C9C9C9A9A9A99949492929292
+929292929292929292949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949292929292
+8F8F8E8E8E8C89898989898F929294999A9C9E9EA4A4A4A6A6A9ABAEB1B7B7B7B9B6B1AEABA6A49E
+9C9492928F8E8E8F929294949494949492928C87767F898E92949A9C9C9E9EA3A4A6A6A9ABAEAEAE
+B1B1B1B1B1AEA9A6A39E9C94928C898989929A9EA4A9ABABABA9A9A6A6A4A4A39E9E9C9C9C9C9C9A
+9A99949492929292928F8E8E8E8C8989898787878787878584848585858584818181848484858585
+85858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8F8F92928F
+8F929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898787878585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C76767676
+767676767474747472726E6C6C6C6C6C6A6A6A6A6A676767666161615F5F5F5F5F5C575757575555
+55514F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929294949494949494949494
+949494949494949492929292929292929292929292767F848789929494999A9C9EA3A6A9AEB1B6B9
+BBC1C6C8CFD1D4D9DCDFE4E6E7ECECEEF2F4F4F7F7F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEABA9A6A6A6A4A49E9C9C9994
+8E8984766A76797C7C7C7F7F7F7F7F7F818181848485878787858585858587878787878787878787
+84817F7F7F7F7C7C7C7B767474726C6A665F57555C61676C72747C7C7F7F7F7F7F7F7F8181848585
+85858484848584848181848181817F7C7C7674726E6C6A67645F59516E747474767C7F7F7F7F8184
+87878789898989898C8E8E8E8E8E8E8E8F8F8F92929292929292929292929292928F8F8F8F8F8F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989898C
+8C8E8E8F8F8F9292929494999A9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9994949492929292
+9292929292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999949494929292929292
+928F8E8E8E89898989898C8F9292949A9C9E9EA1A4A4A6A6A6A9AEAEB3B6B6B6B7B1AEAEA9A4A19C
+9992928F8E8E8E929294949494949492928E87747F878C9294999C9C9E9EA1A4A6A6A9ABAEAEB1B1
+B1B1B1B1B1AEA6A49E9C9A948F8989898F949CA3A6ABABABABA9A9A6A4A4A4A39E9E9C9C9C9C9A9A
+9A9994949292929292928E8E8E8C8989898787878787878784858585858585848184848485858585
+85858585858585858585858585878787898989898989898989898C8E8E8E8E8E8E8E8E8E8F928F8F
+8F929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898987878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676
+76767676747474747472716C6C6C6C6C6A6A6A6A6A6A676767616161615F5F5F5F5D595757575555
+55554F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929294949494949494949494
+9494949494949492929292929292929292929292927C7F87898C929494999C9C9EA4A6A9AEB1B7B9
+BEC1C6C9CFD3D4D9DCE1E4E7ECECEEF1F2F4F4F7F7F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEA9A9A6A6A6A4A49E9C9C99
+99928E84766C76797C7C7C7C7C7F7F7F7F7F7F818181848485858585858584858787878584848484
+817F7F7F7F7F7C7C797676747474716C6A665F57555961676C7274767B7C7C7F7F7F7F7F81818485
+8585858485858584848484848481817F7C7B7674726E6C6A67645F574F72747476797C7F7F7F8184
+8587878989898989898E8E8E8E8E8E8E8E8E8E8F8F929292929292928F8F8F92928F8E8E8E8E8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989898989898989898989898989
+898C8E8E8E8E8E8F92929494949A9A9C9C9C9C9E9E9C9C9C9C9C9A9A9A9A99999494949292929292
+8F8F8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949494929292929292
+928F8E8E8C89898989898E929294999A9C9E9EA3A4A4A6A6A9ABAEB1B3B6B6B3B3B1AEA9A6A49E9A
+94928F8E8E8E8F9292949494949492928E89717C87899294949A9C9E9EA3A4A6A6A9ABAEAEB1B1B1
+B1B1B3B1AEA9A6A39E9C94928C898989929A9EA4A9ABABABABA9A9A6A4A4A4A49E9E9E9C9C9C9A9A
+9A9994949492929292928F8E8E8E8C89898987878787878785858585858585858484848585858585
+85858585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8F8F8F
+8E8F9292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898987878785858585858585858585817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C767676
+76767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C5757575755
+5555514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292929494949494949494949494
+9494949494949292929292929292929292929292767F8187898E9294949A9C9EA1A4A6A9AEB3B9BB
+BEC1C6CCCFD3D4D9DEE1E4E7ECECEEF1F2F4F4F7F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEABA9A9A6A6A6A4A49E9C9C
+9A9C999285766A7676797C7C7C7C7C7C7F7F7F7F7F8181818484858585848484848585848481817F
+7F7F7F7F7F7C7C7976767676747474716C6A645F5755575F666A6E747476797C7C7C7F7F7F818184
+8585858585858585848485858584847F7F7C79767474726C6A6A645F594F727474767C7C7F7F7F81
+8487878789898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292928F8E8E8E8F8F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8F8F9292928F8F8F8F8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878989
+8989898C8989898E8F9292929294949A9A9A9C9C9C9C9C9C9A9A9A9A999994949494949292929292
+8E8E8F92929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949492929292929292
+928E8E8E89898989898E8F9292949A9C9C9E9EA4A4A6A6A9A9AEAEB1B3B3B3B3B1AEA9A6A49E9C94
+928F8E8E8E8E8F92929494949492928F89857984898F92949A9C9EA3A4A4A4A6A9ABAEAEB1B1B1B1
+B3B3B1B1AEA6A49E9C9A948F8989898C949C9EA6ABABABABABA9A9A6A4A4A4A4A19E9E9C9C9A9A9A
+9A9994949492929292928F8E8E8E8C89898987878787878787858585858585858484858585858585
+85858585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8F8F8F
+8E8F8F92928F8F929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898987878785858585858585858581817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676
+7676767676747474747472716C6C6C6C6C6A6A6A6A6A6A676767616161615F5F5F5F5D5757575755
+5555554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8F8E8E8E8E8F8F9292929292929292929292929292929292929292929494949494949494949494
+9494949494929292929292929292929292929292797F858789929294969A9C9EA3A6A6ABB1B3B9BB
+C0C4C6CCD1D4D9D9DFE1E6E7ECECEEF1F2F4F4F7F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEA9A9A6A6A6A6A4A49E9C
+9C9C9C9C8F7F744F76767679797C7C7C7C7C7F7F7F7F7F7F81818184848481818181848181817F7F
+7F7F7F7C7C7C7C797676747474747472716C6A645F5955575F646A6C72747476797C7C7C7F7F8181
+848585858585858585858585858585847F7F7C79767474726E6C6A645F594F717274767C7C7F7F81
+8487878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8F8F92928F8F8F929292929292928F8F8F8F8E8E
+8E8E8E8E8E8F8F8F8E8E8E8E8C898989898989898989898989898989898989898989898987878789
+89898989898989898E8F92929292929494999A9A9C9A9A9A9A9A999994949494949492929292928F
+8E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949492929292929292
+8F8E8E8E898989898C8F929294999A9C9E9EA1A4A4A6A6A9ABAEAEB1B3B3B3B1AEABA6A49E9C9994
+8F8E8E8E8E8F92929494949292928F89877681878E9294999C9EA3A4A4A4A6A9ABAEAEB1B1B3B3B3
+B1B1B1AEA9A6A49E9C94928C89898992999CA4A6ABABABABABA9A9A6A4A4A4A3A19E9E9C9C9A9A9A
+9A9A96949492929292928F8E8E8E8E8C898989878787878787858585858585858585858585858585
+8585858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8E8E8F8E
+8E8E8F928F8F8F929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898987878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676
+7676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C57575757
+555555514F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8F
+8F8F8F8E8E8F92929292929292929292929292929292929292929292949494949494949494949494
+94949494929292929292929292929292929292767C8187898C929494999C9C9EA4A6A9AEB1B6B9BE
+C1C6C8CFD3D4D9D9DFE1E6E7ECECEEF1F2F4F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECE7E6
+E4E1E1DFDCD9D9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABA9A9A6A6A6A6A4A49E
+9E9E9E9E9A897C72747476767676797C7C7C7C7C7C7F7F7F7F7F7F818181817F7F818181817F7F7F
+7F7F7C7C7C7C7C79767474747474747472716C6A645F5957575F61676A6C727474767C7C7C7F7F81
+81848585858585858585858585858585817F7F7C7976747472716C6A66615C51717474797C7F7F81
+818587878989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F928F8F8F8F929292929292929292929292929292928F9292
+928F8E8E8F9292928F8F8F8E8E8E8C8C898989898989898989898989898989898989898787878787
+8789898989898989898E8F8F92929294949494999A9A9A999999949494949494929292929292928F
+8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949292929292929292
+8E8E8E8C8989898C8E929294949A9C9C9E9EA3A4A4A6A6ABAEAEB1B1B3B1B1AEABA6A49E9C9A9492
+8E8E8E8E8E8F929294949492928F8987747F878C9294949A9C9EA4A4A6A6A9ABAEAEB1B1B3B3B3B1
+B1B1B1AEA9A49E9C9A948F89898989929A9EA4A9ABABABABABA9A6A6A4A4A4A3A19E9E9C9C9A9A9A
+9A9A99949492929292928F8E8E8E8E8C898989878787898787878585858585858585858585858585
+8585858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8E8F9292929292929292929292929292929292929292929292929292929292929292
+929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989878787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976
+767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676766616161615F5F5F5F5D57575757
+555555554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8F8F92
+92928F8F929292929292929292929292929292929292929292929292949494949494949494949494
+94949494929292929292929292929292929292767F8487898F9294949A9C9EA1A4A6A9AEB1B7B9BE
+C1C6CCCFD3D4D9DCDFE1E6E7ECECEEF2F2F4F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D1CFCFCFCCCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEABA9A9A9A6A6A6A6A6A4
+A3A3A49E9C94877C6C747676767676797C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C797676767474747474747472726E6C6A66615C57595F61676A6C6E72747679797C7F7F
+8181848585858585858585858585848481817F7F7C7676747472716C6A67615C54727476797C7F7F
+818487878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F8F8F8E8E8E8E8E8E8F8F8F8F8F8F929292928F9292929292929292929494929292929292929292
+92929292929292929292928F8F8F8F8E8C8C89898989898989898989898989898989898987878787
+878989898989898989898E8E8F92929494949494969999999494949494949492929292929292928F
+92929294949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292929292928F
+8E8E8E898989898E8F929294999A9C9C9E9EA3A4A6A6A9ABAEB1B1B1B1AEAEABA6A49E9C9C99928E
+8E8E8E8E8F929294949492928E8987817C8789929294999C9EA4A4A6A6A9A9AEAEB1B1B3B3B3B3B1
+B1B1B1ABA6A49E9C94928C8989898E949CA1A6ABABABABABA9A9A6A6A4A4A3A19E9E9E9C9C9C9A9A
+9A9A99949494929292928F8E8E8E8E8E8C8989898789898787878585858585858585858585858585
+8585858585858585858585858585878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8E8F8F92928F8F929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989878787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C76
+767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C575757
+57555555514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F929292
+92928F92929292929292929292929292929292929292929292929294949494949494949494949494
+949494929292929292929292929292929292747C81878789929294949A9C9EA3A4A6A9AEB1B9BBC0
+C1C6CCCFD3D4D9DCDFE4E7E9ECEEF1F2F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D1CFCFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEA9A9A9A9A6A6A6A6A6
+A4A4A4A39E9C9285766A7476767676767C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C76767474747474727272727272726C6C6A67615D595C5F6166676A6C72747476797C7F
+7F818184858585858585858585848481817F7F7F7C7C7976767472716C6A67615D547274767C7C7F
+81848587878989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F8F
+9292928F8F8F8E8F8F92929292929292929292929292929292929292929494949494929292929494
+949492929292929292929292929292928F8E8E8C8C898C8989898989898989898989898989878787
+8787898989898989898C8E8E8F929292929292949494949494949494949492929292929292929292
+92929494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949492929292929292928F
+8E8E8C8989898E8F929294949A9C9C9E9EA1A4A4A6A6A9AEAEB1B1B1AEAEA9A6A4A19C9C9994928E
+8E8E8E8F929292949494928E8987847984898F9294999A9C9EA4A6A6A9A9AEAEB1B1B1B3B3B3B3B1
+B1B1AEA9A69E9C9A948F89898789929A9EA4A6ABABABABABA9A9A6A6A4A4A3A19E9E9E9C9C9C9A9A
+9A9A99949494949292928F8E8E8E8E8E8C8989898989898987878785858585858585858585858585
+8585858585858585858585858587878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8E8E8E8F92928F8F929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79
+76767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676766616161615F5F5F5F5D575757
+57555555554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929292929292949494949494949494949494949494
+949494929292929292929292929292929292767F8487898E929494999C9C9EA4A6A6A9AEB3B9BBC1
+C4C8CCD1D4D4D9DCE1E4E7ECECEEF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D1CFCFCFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABA9A9A9A9A6A6A6A9
+A6A6A6A49E9C9A8F81746A747476767679797C7C7C7C7C7C7C7C7C7C7C7F7F7F7C7C7C7F7F7F7C7C
+7C7C7C7979767474747272727272717172727272716C6A67615F5C5C5F5F61666A6C71727476797C
+7F7F81818485858585858585848481817F7F7F7F7F7C7C7979767474726C6A67615D557274797C7F
+81818587878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8F8F929292929292
+92929292928F92929292929292929294929292929292929494949292949494949494949494929494
+9494949494949492929292929494949292928F8F8E8E8E8E8E898989898989898989898989898787
+87878989898989898C8E8E8E8F929292929292929494949494949494949492929292929292929292
+9294949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292929292928F8E
+8E8E8989898E8F92929494999A9C9C9E9EA3A4A4A6A6A9AEAEAEAEAEABA9A6A4A19E9C9994928E8E
+8E8E8F929292929494928F8989847481878E9294949A9C9EA4A6A6A9A9AEAEAEB1B1B1B3B3B3B3B1
+B1B1AEA6A49E9C99928C8987878E949C9EA6A9ABABABABABA9A9A6A6A4A4A39E9E9E9E9C9C9C9A9A
+9A9A9994949494929292928F8E8E8E8E8E8C89898989898987878785858585858585858585858585
+8585858585858585858585858787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8E8F9292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C5757
+575755555551FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929292929294949494949494949494949494949494
+949494929292929292929292929292929292797F8787898F9294949A9C9EA1A4A6A9ABB1B3B9BEC1
+C6C8CFD1D4D9D9DFE1E6E7ECECEEF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D3D1CFCFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABABA9A9A9A9A6A6A9
+A9A9A6A4A39E9A94897F724F74747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7B79767676747472716E6C6C6C6C6C6E72727272726E6C6A615F5D5D5F5F6166676A6C72747679
+7C7F7F8181818585858585848481817F7F7F7F7F7F7F7C7C7C79767474726C6A67615F5574767C7F
+7F818487878789898989898C8E8E8E8E8E8E8E8E8E8F8E8E8E8E8F8F928F8F929292929292929292
+92929292929292929292929294949494949494929292949494949494949494949494949494949494
+9494949494949494949494949494949494929292929292928F8F8F8E8E8E8E8E8C8C8E8E8E898989
+898989898989898C8E8E8E8E8E8F9292929292929294949494949494949292929292929292929294
+94949494949494949494969A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292929292928F8E
+8E8C89898C8E8F929294969A9A9C9C9E9EA3A4A4A6A9ABAEAEAEAEABA9A6A49E9E9C9994928F8E8E
+8E8F92929292949492928C89877F7F878C9292949A9C9C9EA4A6A9A9ABAEAEAEB1B1B3B3B3B3B1B1
+B1AEA9A6A19C9A948F8987878992999CA3A6ABABABABABA9A9A9A6A6A4A4A19E9E9E9E9C9C9C9A9A
+9A9A9994949494949292928F8E8E8E8E8E8C89898989898989878787858587858585858585858585
+8585858585858585858585878787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F92928F8F929292929292929292929292929292929292929292
+92928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+898989898989878787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676766616161615F5F5F5F5D5757
+575755555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929292929494949494949494949494949494949494
+9494929292929292929292929292929292767C81878989929494969A9C9EA3A4A6A9AEB1B6B9BEC1
+C6CCCFD3D4D9D9DFE1E6E7ECECEEF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEABABA9A9A9A9A9A9
+A9ABA9A6A49E9C9A94877C724F74747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C79767676767474726E6C6C6C6C6A6A6C6C7172727272716C6A645F5F5F5F5F6164676A6C6C7476
+797C7F7F7F7F81848585848481817F7F7F7F7F7F7F7F7C7C7C7C7C76747472716C6A675F5776797C
+7F81848587878989898989898E8E8E8E8E8E8E8E8E8F8F8F8F8E8F92929292929292929294949494
+94949292929294949494949494949494949494949492949494949494949494949494949494949494
+9494949494949494949494949496949494949494929292929292929292928F8F8F8F8F8F8E8E8C89
+8989898989898C8E8E8E8E8E8E8F9292929292929294949494949494949292929292929292929294
+94949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A999494949494949292929292928F8E8E8E
+8E8C898C8E8E92929494999A9C9C9C9E9EA4A4A6A6A9A9AEABABABA9A6A49E9E9C9A94928F8E8E8E
+8F92929292929492928E89877F7C84898F9294999A9C9EA4A6A6A9ABAEAEAEB1B1B1B3B3B3B3B1B1
+AEAEA6A49E9C99928C8987878E949A9EA4A9ABABABABABA9A9A9A6A6A4A4A19E9E9E9E9C9C9C9A9A
+9A9A999494949494929292928F8E8E8E8E8E8C898989898989878787858787878585858585858585
+858585858585858585858787878787878789898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92928F8F929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898987878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7C76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C57
+575757555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929294949494949494949494949494949494949494
+9492929292929292929292929292929292767F8587898E929494999C9C9EA4A6A6A9AEB1B7B9BEC1
+C6CCCFD3D4D9D9DFE1E6E7ECECEEF2F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A9A9A9
+A9ABA9A6A4A19C9C9992847C725F74747676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C797676747474726E6C6A6A6A6A6A6A6A6C7172747272726C6A64615F5F5F5F6161676A6A6C74
+76797C7C7F7F7F7F81848181817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C79767474726E6C6A5F57767C
+7F7F818587878989898989898C8E8E8E8E8E8E8E8F9292928F8F9292929292949494949294949494
+94949494949294949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949499999999999994949494949494949292949492929292929292928F8F8E8E
+8C8C8C8C8C8C8E8E8F8F8F8F8E8F9292929292929292949494949494929292929292929292929494
+949494949494949494969A9A9A9A9A9A9A9A9A9A9999999994949494949492929292928F8E8E8E8E
+8E8C8C8E8E8F92929494999A9C9C9E9EA1A4A4A6A6A6A9ABA9A9A9A6A4A19E9C9A9492928F8E8E8F
+92929292929292928E8987817481898E9294949A9C9CA1A4A6A9ABAEAEAEAEB1B1B1B3B3B3B1B1B1
+AEA9A6A19C9A94928987878992949C9EA6A9ABABABABA9A9A9A6A6A6A4A4A19E9E9E9E9C9C9C9A9A
+9A9A9A9694949494949292928F8E8E8E8E8E8C898989898989898787878787878585858585858585
+858585858585858585878787878787878787898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F9292929292929292929292929292929292929292
+928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898989878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F5F5D57
+575757555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929494949494949494949494949494949494949494
+92929292929292929292929292929292767C818789898F9294969A9C9EA1A4A6A9ABAEB1B9BBC0C4
+C6CCCFD3D4D9DCDFE4E6E7ECECF1F2F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D7D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A9A9
+ABABA9A9A6A49E9C9A948E817C745F747474767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7976747272716C6A6A64616666676A6C7272727272726C6A6661615F5F5F616166676A6C
+7276767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767472716C675F557C
+7F7F8184878787898989898C8E8E8E8E8E8E8E8F8F92929292929292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A999996949699999994949494949494929292929292928F8F8E
+8E8E8E8E8F8F8E8F8F92928F8F8F9292929292929294949494949494929292929292929292929494
+949494949494949494999A9A9A9A9A9A9A99999999949494949494949492929292928F8E8E8E8E8E
+8E8E8E8E8E8F929494969A9A9C9C9E9EA3A4A4A6A6A6A9A9A9A6A6A4A39E9C9A9492928F8E8E8F92
+929292929292928E898781797F87898F9294999C9C9EA4A6A9A9AEAEAEAEAEB1B1B3B3B1B1B1B1AE
+AEA6A49E9C99928E8787878C92999CA4A6ABABABABABA9A9A9A6A6A6A4A4A39E9E9E9C9C9C9C9A9A
+9A9A9A999494949494929292928F8E8E8E8E8E8C8989898989898787878787878785858585858787
+858585858585858587878787878787878789898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F9292928F929292929292928F92929292929292
+8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+8989898989898987878585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7C7C76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C
+575757575555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929294949494949494949494949494949494949494949292
+92929292929292929292929292929292767F8487898C929494999A9C9EA3A4A6A9AEAEB3B9BBC1C6
+C8CCD1D4D4D9DCE1E4E7E7ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D4D4D4D3D1CFCFCFCCCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEABABA9A9A9
+ABABA9A9A6A4A49E9C999489847C744F7474747476767679797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C79767674726E6C6A66615F6161676A6E7272727272726C6A676661615F5F616166676A
+6C72747679797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C797674726C6A615C54
+7C7F81848587878989898C8E8E8E8E8E8E8E8F8F9292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A9A9A999494999A9A999494949494949494949292929292928F
+8F8F9292928F8F8F9292929292929292929292929494949494949494929292929292929292949494
+9494949494949494969A9A9A9A9A9A999996949494949494949494929292929292928E8E8E8E8E8E
+8E8E8E8E8E92929494999A9C9C9C9E9EA4A4A6A6A6A6A9A6A6A6A4A39E9C9A969492928F8E8F9292
+929292928F8F8E8987817C7C84898E9294999A9C9EA3A4A6A9ABAEAEAEAEB1B1B1B3B1B1B1B1AEAE
+ABA6A39C9A9492898785898E949A9EA4A6A9ABABABABA9A9A9A6A6A6A4A4A39E9E9E9C9C9C9C9C9A
+9A9A9A999494949494929292928F8E8E8E8E8E8C8989898989898987878787878785858585878787
+858585858585858787878787878787878989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92928F8F9292929292928F8F8F929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+8989898989898987878585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F5F5D
+575757575555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929494949494949494949494949494949494949494949292
+929292929292929292929292929292717C7F8789898E9294969A9C9C9EA4A6A6A9AEB1B3B9BEC1C6
+C8CFD1D4D9D9DFE1E6E7E7ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECECECE7E6
+E4E1DFDFD9D9D9D9D4D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEABABA9AB
+ABABA9A9A6A6A4A39E9C94928E877F76717474747476767676767C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7974726C6A67615F5F5F61666A6E7272727274726C6C6A676661616161616467
+6A6C727474767679797C7C7C7C7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C767472726C676157
+7C7F7F818487878989898C8E8E8E8E8E8E8F8F929292929292929292949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949499999A9A9A9A9A999494999A9A9994949494949494949494949292929292
+8F8F9292929292929292929292929292929292929494949494949494949292929292929292949494
+9494949494949494999A9A9A9A9A9A9994949494949494949492929292929292928F8E8E8E8E8E8E
+8E8E8E8E8F92929494999A9C9C9E9EA1A4A4A6A6A6A6A6A6A6A4A39E9C9A99949492928E8E929292
+9292928F8E8C8987817C747F878C9292949A9C9C9EA4A6A9ABAEAEAEAEAEB1B1B1B1B1B1B1B1AEAE
+A9A49E9C99928E8987878992949C9EA4A6A9A9A9ABA9A9A9A6A6A6A6A4A4A39E9E9C9C9C9C9C9C9A
+9A9A9999949494949492929292928F8E8E8E8E8E8C89898989898987878787878787858587878787
+878585858585858787878787878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F8F8F8F8F8F92929292928F8F8F92929292928F
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898989898787858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7C76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F
+5C5757575755FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929294949494949494949494949494949494949494949494949292
+929292929292929292929292929292767F8487898C8F9294999A9C9C9EA4A6A9ABAEB1B6B9BEC1C6
+CCCFD3D4D9D9DFE1E6E7E7ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F2EEECECECECECE7E6
+E4E1DFDFD9D9D9D9D4D4D4D3D1CFCFCFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEABABAB
+ABABA9A9A6A6A6A4A39C9A949492898179727474747476767676797C7C7C7C7C7C7F7F7C7C7C7C7F
+7F7C7C7C7C7C7C7C7C7C7674726C6A5F5C595F61666C717272747474726C6C6C6A67616161616164
+676A6C72747474767676797C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7C7C7C7B7976747472716A665F
+547F7F818487878789898C8E8E8E8E8E8E8F92929292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949999999A9A9A99949499999A9996949494949494949494949492929292
+92929292929292929292929292929292929292949494949494949494949292929292929494949494
+9494949494949496999A9A9A9A9A999494949494949494949492929292929292928E8E8E8E8E8E8E
+8E8E8E8F92929494969A9A9C9C9E9EA3A4A4A6A6A6A6A6A6A4A49E9C9C99949492928F8E8F929292
+92928F8E8C8987817C747C87898F9294999A9C9EA3A4A6A9AEAEAEAEB1B1B1B1B3B1B1B1B1AEAEAB
+A6A49C9A9492898785878992949C9EA4A6A9A9A9A9A9A9A9A6A6A6A6A6A4A49E9E9E9C9C9C9C9A9A
+9A9A9999949494949492929292928F8E8E8E8E8E8C89898989898989878787878787858787878787
+87858585858587878787878787878989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F929292928F8F8F8F8F9292928F8F
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898989898787858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F5F
+5D5757575755FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292949494949494949494949494949494949494949494949494929292
+92929292929292929292929292928F797F8789898E9294949A9A9C9C9EA4A6A9AEAEB1B7B9BEC1C6
+CCCFD3D4D9D9DFE1E6E7E9ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECECE7E6
+E4E1DFDFD9D9D9D9D4D4D4D3D1D1CFCFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABAB
+ABABABA9A6A6A6A6A49E9C9A9999948E877F746C747476767676767C7C7C7C7C7F7F7F7F7F7C7F7F
+7F7F7F7C7F7F7F7F7F7F7F7C79746C675F57575D5F676C7172747474747272716C6A676664616161
+66676A6C717274747476767679797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C79797676747472716C6761
+594F7F81848587878989898E8E8E8E8E8F8F92929292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494949494949999999A9996949496999994949494949494949494949494949292
+92929292929292929292949494949492929292949494949494949494949492929292949494949494
+94949494949494999A9A9A9A9A9A9994949494949494949492929292929292928F8E8E8E8E8E8E8E
+8E8E8F9292929494999A9C9C9C9E9EA4A4A6A6A6A6A6A4A4A49E9C9C9A94949292928F8E8F929292
+928F8E8C8987847F767681878C9294949A9C9C9EA4A6A9ABAEAEB1B1B1B1B1B1B3B1B1B1AEAEABA9
+A49E9C99928E898787898E92999C9EA4A6A6A9A9A9A9A9A6A6A6A6A6A4A4A4A19E9E9C9C9C9C9A9A
+9A99999994949494949292929292928F8E8E8E8E8E8C898989898989878787878787878787878787
+87878585858787878787878787898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92928F8F8F8E8E8F9292928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989878787858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7C7C7676767676767676747474747272716C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F
+5F5C57575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929294949494949494949494949494949494949494949494949494929292
+9292929292929292929292928F8F767C8187898C8F9294969A9C9C9EA3A4A6A9AEB1B3B9BBC0C4C6
+CCCFD3D4D9DCDFE4E6E7E9ECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE9E7E6
+E4E1DFDFD9D9D9D9D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAB
+ABABABA9A9A6A6A6A6A49E9C9C9C9C9A9289817671747476767676797C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C746E675F55575C61676E7274767676747472726C6A6A67666666
+6666676A6C7172747474747476797C7C7C7C7C7C7C7C7C7C7C7C7C797976767676747472716C6A61
+5F557C7F818487878789898C8E8E8E8E8F9292929292929292929292929494949494949494929494
+94949494949494929494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949499999994949494949494949494949494949494949494949492
+92929292949494929294949494949494949494949494949494949494949494929294949494949494
+94949494949496999A9A9A9A9A9994949494949494949492929292929292928F8E8E8E8E8E8E8E8E
+8E8F929292929494999A9C9C9E9EA1A4A4A6A6A6A6A4A4A39E9E9C9A94949292928F8E8F92929292
+8F8E8C8987847F76767F87898F9294999C9C9EA3A4A6ABAEAEAEB1B1B1B1B1B1B1B1B1B1AEAEABA6
+A49C9A94928C878787898E92999C9EA4A6A6A6A9A9A6A6A6A6A6A6A6A4A4A4A19E9E9C9C9C9A9A9A
+9A99999494949494949492929292928F8E8E8E8E8E8C898989898989898787878787878787878787
+87878585878787878787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F8F8F8F8F8E8E8E8E8F928F8F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989898787858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F
+5F5D59575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292949494949494949494949494949494949494949494949494949492929292
+92929292929292929292928F8E8E767F8587898E8F9494999A9C9C9EA4A6A9ABAEB1B6B9BBC1C6C8
+CCD1D4D4D9DCE1E4E6E7E9ECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E7E6
+E4E1DFDFD9D9D9D9D7D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+ABABABA9A9A9A6A6A6A6A49E9C9C9C9C9C948E877C746776767676767C7C7C7F7F7F7F7F7F7F7F7F
+81817F7F7F7F7F8181818181817F7C746C675C54575C616A71727479767674747472716C6A6A6767
+6A6A6A6A6C6C7274747474747676797C7C7C7C7C7C7C7C7C7C7C797676767676747474726E6C6A66
+5F594F7F7F8487878787898C8E8E8E8E8F9292929292929292929292929292929494949492929292
+92949494949492929292949494949494929292929494949494949292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929294949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494999A9A9A9A9A9A999494949494949494949292929292928F8F8E8E8E8E8E8E8F8F8E
+8F929292929494969A9A9C9C9E9EA3A4A4A6A6A4A4A4A19E9E9C9A99949292928F8E8E8F9292928F
+8E8C8989877F79747C81878E9294969A9C9E9EA4A6A9ABAEAEB1B1B1B1B1B1B1B1B1B1AEAEABA9A4
+9E9C96928E89878587898F92999C9EA4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A39E9E9C9C9C9A9A9A
+9A9996949494949494949292929292928F8E8E8E8E8E8C8989898989898787898987878787878787
+878787878787878787878789898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8F8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+8989898989898989878785858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C7C7C7676767676767676747474747272716C6C6C6C6A6A6A6A6A6A676767666161615F5F5F
+5F5F5C575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929494949494949494949494949494949494949494949494949494949292929292
+929292929292929292928F8E8E767C8187898C8F929494999A9C9C9EA4A6A9AEAEB1B7B9BEC1C6C8
+CFD1D4D7D9DEE1E4E7E7E9ECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECECECE7E7E6
+E4E1DFDED9D9D9D9D4D4D3D3D1CFCFCFCCCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEABABA9A9A9A9A6A6A6A6A49E9E9E9E9E9C9A928984766A76767676797C7C7F7F7F7F7F7F7F7F81
+81818181818181818484858481817F7C746C665951555D616C7174797C797676767474726C6C6A6A
+6A6A6C6C6C6C7272747474747476797C7C7C7C7C7C7C7C7C7C7C797676767674747472726C6C6A67
+615F554F7F81848587878789898E8E8E8E8F92929292929292929292929292929292949492929292
+92929294949492929292929294949494929292929292949494949292929292929494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949294949494949494949499969494949494949496999494949494949494949494949494949494
+949494949494999A9A9A9A9A999494949494949492929292929292928F8E8E8E8E8E8E8F8F928F8F
+92929292929494999A9C9C9E9E9EA4A4A4A6A4A4A39E9E9E9C9C99949492928F8E8E8E9292928F8E
+898989877F7C747C7F87898F92949A9C9C9EA3A4A6A9AEAEAEB1B1B1B1B1B1B3B1B1B1AEABA9A6A4
+9C9A949289878587878992949A9CA3A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A39E9E9C9C9C9A9A9A
+9A9994949494949494949292929292928F8E8E8E8E8E8C8989898989898989898987878787878787
+898787878787878787878989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+898989898989898987878585858585858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767616161615F5F
+5F5F5D595757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292949494949494949494949494949494949494949494949494949494929292929292
+9292929292929292928F8E8E8E767F8587898E8F9294949A9A9C9C9EA4A6A9AEB1B3B9BBBEC1C6C9
+CFD3D4D9D9DFE1E6E7E7ECECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F2F2F2EEECECECECECE7E7E6
+E4E1DFDEDCD9D9D9D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEACABABA9A9A9A9A6A6A6A6A4A4A39E9E9E9E9E9A92877C6C747676767C7C7C7F7F7F7F7F7F8181
+84848584848484848485878784847F7F7C746C615751575F676C72767C7C79797979767472716C6C
+6A6A6C6C6E6E727474747474767676797C7C7C7C7C7C7C7C7C7C7C7976767676747472726C6C6A67
+615F59547C7F7F81848587878989898C8E8E8F8F9292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949999999999999999999999999494949494949494949494949494949494
+9494949499999A9A9A9A9A9A9994949494949492929292929292928F8E8E8E8E8E8E8F9292929292
+92929292929494999A9C9C9E9EA1A4A4A4A4A4A19E9E9E9C9C9A949492928F8E8E8E8F92928F8E89
+8989877F7C74767C84898E9294999A9C9E9EA4A6A9ABAEAEAEB1B1B1B3B3B3B1B1B1AEAEA9A9A69E
+9C94928E89878587878C92949C9EA1A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A3A19E9E9C9C9C9A9A9A
+9A999494949494949494929292929292928F8E8E8E8E8E8C89898989898989898989878787878789
+8987878787878787878989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767666161615F5F
+5F5F5F5C5757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929494949494949494949494949494949494949494949494949494949292929292929292
+92929292929292928F8E8E8E767C818789898E929294969A9C9C9EA1A4A6A9AEB1B3B9BBC0C1C6CC
+CFD3D4D9D9DFE1E6E7E7ECECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECECE7E7E6
+E4E1DFDEDCD9D9D9D4D4D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEABABABA9A9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9A897C6A747476797C7C7F7F7F7F7F818184
+8485878787878787858787878785817F7C79726A615754575F6A7274797C7C7C7C7C7C767474726E
+6C6C6C717272727474747676767679797C7C7C7C7C7C7C7C7C7C7C7C7B797676747472726E6C6A6A
+665F5D574F7C7C7F7F81848787878989898C8E8E8F8F8F9292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+94949494929292949494949494949292949494949494949494949494949494949494949494949494
+9494949494949996949496999A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949494
+949496999A9A9A9A9A9A9A999494949494949292929292929292928F8E8E8E8E8E8F929292929292
+92929292949499999A9C9C9E9EA1A4A4A4A4A19E9E9C9C9C9A999492928F8E8E8E8E8F8F8F8C8989
+89857F7C76747C7F87898F92949A9C9C9EA4A4A6A9ABAEAEAEB1B1B3B3B3B3B1B1B1AEABA9A6A49E
+9A948F8987858787899294999C9E9EA3A4A4A6A6A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9C9C9A9A9A
+9A999494949494949494929292929292928F8E8E8E8E8E8C89898989898989898989878787878789
+8989878787878787878989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898787858585858585858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A6A6A676767616161615F
+5F5F5F5D5957FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929294949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292928F8E8E8E8E767F8487898C8F929494999A9C9C9EA3A4A6ABAEB1B6B9BBC1C4C6CC
+CFD3D4D9DCDFE1E6E7E7ECECECF1F2F2F4F4F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE9E7E7E6
+E4E1DFDCDCD9D9D9D4D4D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEABABABA9A9A9A9A6A6A6A6A6A6A4A4A4A4A4A4A49987766A7476797C7C7C7F7F7F81818484
+858787878787878787878787878785817F7C76726A5F555457616C72767C7C7C7C7F7C7C79767472
+72716E71727272747476767679797C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C797676747472716C6A67
+66615F575576797C7F7F7F81848787878989898C8E8E8F8F8F929292929292928F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949492929292929294949494949292929494949494949492949494949492929494949494949494
+949494949499999999999A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494
+9499999A9A9A9A9A9A9A9A9994949494949492929292929292928F8E8E8E8E8E8F92929292929292
+92929292949499999A9C9E9E9EA1A3A4A4A39E9E9C9C9A9A99949492928F8E8E8E8E8F8E8C898989
+857F7C76747C7F84898E9294999A9C9EA1A4A6A6A9ABAEAEB1B1B1B1B3B3B3B1B1B1AEABA6A69E9C
+94928E87858585878E92949A9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A3A39E9E9E9E9C9C9A9A9A
+9A99949494949494949492929292929292928F8E8E8E8E8E8C898989898989898989898787878989
+8989878787878787898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898787878585858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767666161615F
+5F5F5F5F5C57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92949494949494949494949494949494949494949494949494949494949494949292929292929292
+92929292928F8F8E8E8E8E747C7F8587898E8F929494999A9C9C9EA4A6A9ABB1B3B9BBBEC1C6C8CC
+D1D4D4D9DCDFE4E6E7E7ECECECF1F2F2F4F4F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E7E7E6
+E4E1DFDEDCD9D9D9D4D4D3D1CFCFCFCCCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEABABABA9A9A9A9A6A6A6A9A6A6A6A6A4A4A4A4A39484746A7676797C7C7F7F8181848485
+878787878789898987878787878787847F7F7B746C675F54545C666C74767C7F7F7F7F7F7C7C7674
+747472727272747474767979797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7C7C7C7976747472726E6A67
+66615F5C574F74767C7C7F7F7F818487878789898C8C8E8E8F8F8F92929292928F8F8F8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929492929292929292929494929292929292949494949492929294949292929292949494949494
+9494949494999A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A999494949494949494949494999994949496
+999A9A9A9A9A9A9A9A9A999494949494949292929292929292928F8E8E8E8F929292929292929292
+92929294949494999A9C9E9E9E9EA3A4A49E9E9C9C9A9994949492928F8E8E8E8E8E8E8C89898787
+7F7C7674767F7F87899292949A9C9E9EA4A4A6A6ABAEAEAEB1B1B1B1B3B3B3B1B1AEAEA9A6A49E9A
+948F89878584848992949A9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9A9A9A
+9A99949494949494949492929292929292928F8E8E8E8E8E8C898989898989898989898787898989
+8989898787878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A6A6A67676761616161
+5F5F5F5F5D59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929294
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+929292928F8E8E8E8E8E8E767C818789898E92929494999A9C9E9EA4A6A9AEB1B3B9BBC0C1C6C8CF
+D1D4D7D9DCE1E4E6E7E7ECECECF1F2F2F4F4F4F7F7F7F7F7F7F4F4F2F2F2F1EEECECECECE7E7E7E6
+E4E1DFDFDCD9D9D9D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABA9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A49E9281746A76797B7C7F7F7F81848587
+87878787898989898989898989878787817F7C76746C675C4F545F6772747C7F7F7F7F817F7F7C79
+76767474747474747476797C7C7C7C7C7F7F818181817F7F7F7F7F7F7F7F7C797676747472716C6A
+6661615F57544F7476797C7C7F7F8184848787898989898C8E8E8E8F8F92928F8F8E8E8F8F8F9292
+9292929292928F9292929292929292928F9292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929294949292929292929292929292929494949494
+9494949494999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9494949494949494949499999A9994949999
+9A9A9A9A9A9A9A9A9A9A9994949494949492929292929292928F8E8E8F8F92929292929292929292
+92929294949494999A9C9C9E9E9EA1A3A19E9C9C9A999494949292928F8E8E8E8E8E8C8989878781
+7C7674767C7F84898E9294999C9C9EA3A4A6A6A9ABAEAEAEAEB1B1B1B3B3B1B1B1AEAEA9A6A19C96
+928C87858581858992949A9C9E9E9EA1A4A4A3A3A3A3A3A3A1A1A1A1A1A39E9E9E9E9E9C9C9A9A9A
+9A9A969494949494949494929292929292928F8E8E8E8E8E8E8C8989898989898989898989898989
+8989898787878989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A67676766616161
+5F5F5F5F5F5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292949494
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292928F8E8E8E8E8E8E8E797F8487898C8F929494949A9A9C9EA3A4A6A9AEB1B6B9BBC1C4C6C9CF
+D3D4D9D9DFE1E6E7E7E9ECECECF1F2F2F4F4F4F7F7F7F7F7F7F4F4F2F2F2EEECECECECECE7E7E6E6
+E4E1DFDEDCD9D9D9D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABA9A9A9A9A9A9A9ABA9A9A9A9A9A6A4A39C8E8174667676797C7F7F81848787
+8787878789898989898989898989878785817F7C76746C675F4F575F6A74767C7F7F7F8184817F7C
+7C7976767674747676767C7C7C7C7F7F7F818484848484848181817F7F7F7F7C7976747472726E6A
+6764615F59554F6C727476797C7F7F818184858789898989898C8C8E8E8F8F8F8E8E8E8E8E8E8F8F
+8F929292928F8F8F8F8F92929292928F8F8F8F8F9292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+9494949494999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9994949494949494949494999A9A9999999A9A
+9A9A9A9A9A9A9A9A9A999494949494949292929292929292928F8F8F929292929292929292929292
+92929294949494999A9C9C9E9E9E9E9E9E9C9C9A999494949292928F8E8E8E8E8E8C89898787817C
+7676767B7F7F87899294949A9C9E9EA4A6A6A9A9ABAEAEAEAEB1B1B1B3B3B1B1B1AEA9A6A49E9A94
+8F89878581818792949A9C9E9E9E9E9EA3A1A19E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A
+9A9A999494949494949494929292929292928F8E8E8E8E8E8E8C8989898989898989898989898989
+898989898789898989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898987878585858585858585858585858585817F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A676767646161
+615F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92928F8E8E8E8E8E8E8E767C7F8587898C8F929494999A9C9C9EA4A6A6ABAEB1B7B9BBC1C6C6CCCF
+D3D4D9D9DFE1E6E7E7ECECECEEF1F2F2F4F4F4F7F7F7F7F7F7F4F4F2F2F1EEECECECECECE7E7E6E6
+E4E1DFDCDCD9D9D9D4D4D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABABABA9A9A9A9ABABABABABABA9A9A6A6A49E9A8C7F725F76767C7C7F81818587
+8787878989898989898C8C8C898989878784817F7C76746C675F4F57616C74797C8181818787847F
+7C7C7C7C79797676797C7C7C7C7F7F7F818485878787878787858481817F7F7F7C7976747472716C
+6A6661615D57544F6C727476797C7F7F7F818185878989898989898C8C8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F92928F8E8E8E8E8F8F8F92928F8E8E8E8F8F8F8F9292929292928F8F8F9292929292929292
+929292929292929292928F9292929292929292929292929292929292929292929292929292929494
+949494949496999A9C9C9C9E9E9E9C9C9C9C9C9C9A99949494949494949494969A9A9A9A999A9A9A
+9A9A9A9A9A9A9A9A9A999494949494929292929292929292928F9292929292929292929292929292
+92929292949494999A9C9C9C9E9E9E9E9C9C9A999494949292928F8E8E8E8E8E8989898787847F76
+76767B7F7F84898E9294999C9C9EA4A4A6A6A9ABAEAEAEAEAEB1B1B1B1B3B1B1AEA9A6A49E9C9992
+8C8785847F818992949A9C9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928E8E8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767666161
+615F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+92928F8E8E8E8E8E8E8E767F818787898E92949496999A9C9EA1A4A6A9AEB1B3B9BBC0C1C6C8CCCF
+D3D4D9D9DFE1E6E7E7ECECECEEF1F2F2F4F4F4F7F7F7F7F7F4F4F4F2F2F1EEECECECECE9E7E7E6E6
+E1E1DFDCDCD9D9D9D4D4D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABABABABABAEAEAEAEAEAEABA9A6A4A39E948779745774767C7F7F818487
+87878989898989898C8E8E8E8E8C8989878787847F7C76746C675F4F5C6672747C7F818187878784
+7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F8184858787878787878787878484817F7F7F7C7C767674726C
+6A6764615F59554F6A6C727476797C7F7F7F7F818587878989898989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F929292928F8E8E8F8F8F9292929292
+9292929292929292928F8F8F8F9292929292929292929292928F8F92929292929292929292929292
+949494949494999A9C9C9C9E9E9E9E9C9C9C9C9C9A94949494949494949494999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9994949494949492929292929292929292929292929292929292929292929292
+92929292949494999C9C9C9C9C9C9E9C9C9C9A9494929292928F8E8E8E8E8E8989898787847F7676
+76797C7F8187899292949A9C9EA1A4A6A6A9ABAEAEAEAEAEAEB1B1B1B1B1B1AEABA6A4A39C9A948F
+8987857F7F878F94999C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A6767676461
+61615F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+928F8E8E8E8E8E8E8E767C7F848789898E929494999A9A9C9EA3A4A6A9AEB1B6B9BBC0C1C6C8CCD1
+D3D4D9DCDFE1E6E7E7ECECECEEF1F2F2F2F4F4F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E7E7E6E6
+E1E1DFDCDCD9D9D9D4D4D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEAEAEAEAEA9A6A6A49E9C92817C745574797C7F818487
+878789898989898C8E8E8F8F8F8F8E898989878784817F7C74726A5F4F5F6774767C818487878987
+84817F7F7F7F7F7F7C7C7F7F7F81818487878789898989898987878785848181817F7F7C79767472
+6C6761615F5C57514F6A6C727476797C7F7F7F7F8185878787898989898989898C8C8E8E8E8E8E8E
+8E8C8C8E8E8E8E8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8F8F8F8F9292
+9292928F8F8F8F928F8F8E8E8F8F8F929292928F8F8F92928F8F8E8F8F9292929292929292929292
+929294949494999A9A9C9C9C9E9E9E9C9C9C9C9A9994949494949999949494999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9994949494929292929292929292929292929292929292929292929292929292
+929292929494999A9A9C9C9C9C9C9C9C9A9A9494929292928F8E8E8E8E8C8989898787847C767676
+767C7F7F84898E9294999C9C9EA4A4A6A9A9AEAEAEAEAEAEAEAEB1B1B1B1AEAEA9A6A49E9C94928C
+8787817F818992949A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898787878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A67676661
+6161615F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+928F8E8E8E8E8E8C89767F7F8487898C8F9494999A9A9C9C9EA4A6A6ABAEB1B7B9BBC1C6C6CCCFD1
+D4D4D9DCDFE1E6E7E7ECECECEEF1F2F2F2F4F4F7F7F7F4F4F4F4F2F2F2F1EEECECECECE7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEABAEAEAEAEAEAEAEAEAEAEAEABA9A6A4A39E9A89817C6C51747B7C7F8185
+8787878989898C8E8E8E8F8F92928F8E8C8C8989878784817F79746C614F5F6C74797F8487878989
+878481817F7F7F7F7F7F7F7F818184878787898989898989898989878787878584817F7F7C7C7674
+726A645F5F5D57554F616A6C727476797C7C7F7F7F818787878789898989898989898C8C8E8E8E8E
+8C8989898C8C8E8E8E8E8C89898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8F8F8F
+92928F8F8E8E8F8F8F8E8E8E8E8E8F8F8F928F8F8E8E8F8F8F8E8E8E8E8F8F929292928F8F929292
+929292949494999A9A9C9C9C9E9E9C9C9C9C9C9A9494949496999A999694999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A969494929292929292929292929292929292929292929292929292929292928F
+8F9292949494999A9A9C9C9C9C9C9C9A9994949292928F8E8E8E8E8E8C8989898787817C76767676
+7C7F7F8187898F92949A9C9EA3A4A6A6A9ABAEAEAEAEAEAEAEAEB1B1B1AEAEA9A6A49E9C99948F89
+87847F7F878C92949A9C9C9C9C9C9C9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989
+8989898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747272716C6C6C6C6A6A6A6A6A6A67676766
+6161615F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+8F8E8E8E8E8E8E89767C7F818787898E929494999A9A9C9EA1A4A6A9AEB1B3B9B9BBC1C6C8CCCFD3
+D4D9D9DCDFE1E6E7E9ECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F2EEECECECECECE7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA9A6A6A49E9C9289817C6A72767C7F7F84
+85878789898C8C8E8E8F8F92929292928F8F8E8C8989878784817C747266576172767C7F87878789
+89878784848481818181818184848787878989898C8C8C8C8989898989878787878584817F7C7C76
+746C67615D5C57554F4F616A6C727476797C7C7F7F818485878789898989898989898989898C8C8C
+8989898989898C8C8E8C8989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8C8C8E8E8E8E8E8E8E8E8F8F92928F8F8E8F8F92
+92929292949494999A9A9C9C9E9E9C9C9C9C9A9694949699999A9A999999999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9994949492929292929292929292929294929292929292929292928F9292928F8E
+8F92929494999A9A9A9A9C9C9A9A9A9694949292928F8E8E8E8E8E8C8989878787817C767679767C
+7C7F7F85898E9292949A9C9EA4A4A6A6A9AEAEAEAEAEAEAEAEAEB1B1B1AEA9A6A4A19C9A94928987
+877F7C81878E92949A9C9C9C9C9C9C9C9E9E9E9C9C9C9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989898989898989
+8989898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767
+616161615F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949494949494949494949492929292929292929292929292928F
+8F8E8E8E8E8E8C89767F7F848789898F9294999A9A9C9C9EA4A4A6A9AEB1B6B9BBC0C1C6C8CCCFD3
+D4D9D9DCDFE4E6E7ECECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F1EEECECECECECE7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCCCC8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A4A49E9C928981796474767C7F7F
+84878787898C8E8E8F8F9292929292929292928F8F8E8C898987877F7C746C616774767F84878789
+898987878787858585848485858787878989898C8E8E8E8E8E8E8E8C8989898987878787847F7F7C
+76746C645F595757544F5F666A6C727476797C7F7F81818587878789898989898989898989898989
+898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898C8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8F
+8F9292929494949999999A9C9E9C9C9C9A9A99949499999A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A99949492929292929292929292949494949492929292929292928F8F8F928F8E8E
+9292929494999A9A9A9A9C9A9A9994949292928F8F8E8E8E8E8E898989878785817F76767C767C7C
+7F7F84878C8F9294999C9CA1A4A4A6A9ABAEAEAEAEAEAEAEAEAEAEB1AEABA9A6A49E9C99948F8987
+817C7F84898E92949A9A9C9C9C9C9C9C9C9E9E9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+9A9999969494949494949292929292929292928F8E8E8E8E8E8E8E8E8C8989898989898989898989
+8989898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989898989898989
+898989898989898989898787858585858585858585858585858581817F7F7F7F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767
+666161615F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292928F8E
+8E8E8E8E8E8E89747C7F818787898E929494999A9C9C9E9EA4A6A6ABAEB1B6B9BBC0C4C6CCCFCFD3
+D4D9D9DFE1E4E6E7ECECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F1EEECECECECE9E7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A6A49E9C9992897F765F74797C7F
+7F84878789898E8F8F92929292929494949292929292928F8E898989877F79746A54747C7F878789
+898C898987878787878787878787878989898C8E8E8F8F8F8F8F8F8F8F8E8C89898989898785817F
+7C76726A615C5755554F4F5F676A6C727476797C7F7F818487878789898989898989898989898989
+898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898C8E8E8E8E8E8C8C8E8E8E8E8C8C8E8E
+8F8F9292929494969494999A9C9C9C9A9A999694999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9999949494929292929292929294949494949494929292929292928F8E8E8F8F8E8E8F
+9292949496999A9A9A9A9A9A9994949292928F8E8E8E8E8E8C898989878785817F76767C79797C7F
+7F8187898E8F9294999C9EA3A4A6A6A9AEAEAEAEAEAEAEAEAEAEAEB1AEA9A6A49E9C9A94928C8984
+7F7C7F8787898F9294999A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+999999949494949494929292929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989898989898989
+898989898989898989898787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A6A6A6767
+67616161615FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949494949494949494949292929292929292929292928F8E8E
+8E8E8E8E8E8C89767F7F848789898E9294969A9A9C9C9EA3A4A6A9AEB1B3B7B9BBC1C6C8CCCFD1D3
+D4D9D9DFE1E4E6E7ECECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F1EEECECECECE7E7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCFCCCCC8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A6A39E9C948F877C725574797C
+7F7F848787898E8F8F92929292949494949494949292949492928E8E8C89857F766C57767C818789
+89898C89878789878787878787878989898C8E8E8F8F8F929292929292928F8F8E8C8C8989878781
+7F7C766E675F5755554F4F4F616A6C6E7274767B7C7F818485878789898989898989898989898989
+898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F
+8F8F8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8C898989898C8E8E8E8E8C89898C8E8E8C89898C8C
+8E8E8F8F92949494949494999A9C9A9A99999494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A99999494949492929292929294949494949494949494949292929292928E8E8E8E8E8E8E92
+92929494999A9A9A9A9A9999949492928F8F8E8E8E8E8E8C898989878784817F76767C797C7C7C81
+818487898E9292949A9C9EA4A4A6A6A9AEAEAEAEAEAEAEAEAEAEAEAEABA6A6A39E9C99928F89877F
+7C7C818187898C8F929494949A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9A9A9A9A
+99999494949494949492929292929292929292928E8E8E8E8E8E8E8E8E8C89898989898989898989
+898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989
+89898989898989898989878785858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6767
+67666161615FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949494949494949494949292929292929292929292928F8E8E8E
+8E8E8E8E8E8974797F818787898E8F9294999A9C9C9C9EA4A6A6A9AEB1B3B9B9BBC1C6C8CCCFD1D4
+D4D9DCDFE1E4E6E7ECECECECEEF2F2F2F2F2F4F4F4F4F4F4F4F2F2F2F1EEECECECECE7E7E6E6E4E4
+E1E1DFDCD9D9D9D9D4D4D3D1D1CFCFCFCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A9A6A49E9C9C948F857C6A747679
+7C7F818487898C8F929292929494949494949494949494949494929292928F877F767259767F8789
+89898989898989898989898989898989898E8F8F8F8F92929292929292929292928F8F8E8E898987
+847F7C746C615C5555544F4F57616A6C717274797C7F7F8184878787898989898989898989898989
+89898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8F8F92
+92928F8F8E8E8E8E8F928F8F8F8E8E8E8E8E8E8C89898989898E8E8E8E8C898989898C8989898989
+8C8E8E8F929294949492949494999996949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A99999494949494929292929494949494949494949494949492929292928F8E8E8E8E8E8E8F92
+92949494999A9A9A999999949492928F8E8E8E8E8E8E8C898989898787817F79797C7C7C7C7C7F81
+8187898C8F9294999C9C9EA4A4A6A6A9AEAEAEAEAEAEAEAEAEAEAEAEA9A6A49E9C9A94928C89847C
+7C7F7C7F848789898E929294999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9C9A9A9A99
+99999494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989
+898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989878787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A67
+676764616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949292929292929292929292928F8E8E8E8E
+8E8E8E8E8989767C7F848789898E929494999A9C9C9EA1A4A6A6ABAEB1B3B9BBBEC1C6C9CCCFD3D4
+D9D9DCDFE1E4E6E7ECECECEEF1F2F2F2F2F2F4F4F4F4F4F4F2F2F2F1EEECECECECECE7E7E6E6E4E4
+E1E1DFDCD9D9D9D7D4D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A6A39E9C9C94898176617476
+7C7C7F818787898E929292929494999999999999969499999A9A99949492929289847C725C7C8187
+8989898C898989898C898989898989898E8E8F9292929292929492929292949492929292928F8E89
+87857F7C726A5F5755544F4F4F57646A6C7274797C7C7F8184858787898989898989898989898989
+898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92928F8F8F9292
+929292928F8F8F8F8F9292928F8F8F8E8E8E8E8E89898989898C8E8E8E8C898989898C8C89898989
+8C8E8E8E8F9292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+999994949494949292929292949494949494949494949494949492929292928E8E8E898C8E8E9292
+92949496999A99999994949492928F8E8E8E8E8E8E8E898989898787847F7C7C7C7C7C7C7F7F8184
+8787898E9292949A9C9EA3A4A6A6A6A9AEAEAEAEAEAEAEAEAEAEAEABA6A6A39E9C94928E89877F76
+7C7C7C7C7F848789898C8F9294969A9A9A9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9A9A9A9A99
+99949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989878785858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A67
+676766616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949494949494949292929292929292929292928F8E8E8E8E8E8E
+8E8E8C898972767F7F8787898E8F929494999A9C9C9EA3A4A6A9AEAEB1B6B9BBC0C1C6CCCFCFD3D4
+D9D9DCDFE1E4E6E7ECECECEEF1F2F2F2F2F2F4F4F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E1
+E1E1DFDCD9D9D9D4D4D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1
+B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A49E9E9C9C92877C725774
+767C7F7F8487898C8F9292929494999A9A9A9A9A9A9A9A9A9A9C9C9A9A949494948E877C725C7F85
+898989898C89898C8E8989898989898C8E8F9292929292929494949494949494949494929292928F
+8989857F766E675D55544F4F4F515C676C7174797C7F7F7F81848787878989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92929292928F9292
+9292929292928F8F929292929292928F8F8E8E8E8C8C8C8C8C8C8E8E8E8C89898989898C89898989
+898E8E8E8E8E8F92928F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+9994949494929292929294949494949494949494949494949492929292928F8E8C8989898C8F9292
+949494949999969494949492928E8E8E8E8E8E8E8E8C8989898987857F7C7C7C7C7C7C7F7F818485
+8789898E9294999C9C9EA4A4A6A6A6A9AEAEAEAEAEAEAEAEAEAEABA9A6A49E9C9A948F8987817C79
+797C7C7C7C7F858789898E92929494999A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9C9C9A9A9A9999
+9694949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8989898989898989
+89898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898989898989898989878787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676767474747472726E6C6C6C6C6A6A6A6A6A67
+676767666161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E
+8E8C898989767C7F848789898E929294949A9C9C9E9EA4A6A6A9AEB1B1B6B9BBC0C4C6CCCFCFD3D4
+D9D9DFDFE1E4E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1
+E1E1DFDCD9D9D9D4D4D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA6A6A49E9E9E9A8E81766672
+74767C7F818789898E9292929494999A9A9A9A9A9A9A9C9C9C9C9C9E9C9A999494948E847671577F
+8787878989898C8E8E8C8989898C8C8E8F9292929292929294949494949496999694949494929292
+928C87817C746A61574F514F4F4F555F6A6C74767C7C7F7F81848787878989898989898989898989
+8989898989898989898989898C898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8F8F8F8E8E8E8E89898989898C89898989
+898C8E8E8E8E8E8E8E8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+949494949492929292949494949494949494949494949494949292928F8F8E8C898989898C8F9292
+94949494949494949492928F8E8E8E8E8E8E8E8E8E898989878785817C7C7C7F7F7C7C7F7F858587
+89898C9294949A9C9E9EA4A4A6A6A9A9AEAEAEAEAEAEAEAEABABA9A6A4A19C9A94928E89857F7679
+7C7F7F7F7F7F818787898E8F929494949999999A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999
+9494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8E8C89898C8C89898989
+898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+898989898989898989898987878785858585858585858585858585858584817F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A67
+676767676161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E
+8C89898974767C7F8587898E8F929494999A9C9C9EA1A4A6A9A9AEB1B3B7B9BBC1C6C8CCCFD1D3D4
+D9D9DFE1E1E4E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E4E4E1
+E1E1DFDCD9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A4A4A19E9E94877C745C
+7274767C7F8487898C8F92949494999A9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9A9A9994897F766C55
+7F878787898C8E8E8E8E8C898C8C8E8F92929294949492949494969694999A9A9A9A999694949494
+928F89877F7672675F554F4F4F4F4F555F6A72747B7C7F7F81818487878989898989898989898989
+89898989898989898989898C8E8C8C898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292
+929292929292929292929292929292929292928F8F8F929292928F8F8E8E8C8C8C8C8C8C8C898989
+898C8E8E8E8E8E8E8E8F8F929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494
+9494949492929294949494949494949494949494949494949292928F8E8C8989898989898E929294
+9494949494949492928F8E8E8E8E8E8E8E8E8E8E8C8989878785817C7C7C7F7F7F7C7F7F84858787
+898C8F9294999C9C9EA3A4A4A6A6A9ABAEAEAEAEAEAEAEABA9A9A6A6A49E9C99948F89877F79747C
+7F8181818181848587898C8E929294949496999999999A9A9C9C9C9A9A9A9A9A9A9A9A9A9A999996
+949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8C8C8E89898989
+8989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+898989898989898989898989878787858585858585858585858585858584817F7F7F7F7F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747472716C6C6C6C6A6A6A6A6A
+676767676661FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494929292929292929292928F8F8E8E8E8E8E8E8E8E8C
+89898989767C7F818789898E92929494999A9C9C9EA4A4A6A9ABAEB1B3B9B9BBC1C6C8CCCFD1D4D4
+D9DCDFE1E1E4E6E7ECECECEEF2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E6E6E4E4E1
+E1E1DFDCD9D9D9D4D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A4A4A39E9A8C81796A
+577274797C7F8589898E92929494999A9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9A9992877F7467
+517F878789898E8E8E8E8E8C8C8E8E8F929292949494949494999999999A9A9C9C9A9A9999999494
+94928C87817C746C6157514F4F4F4F4F57616C72767C7C7F7F818184878789898989898989898989
+89898989898C8E8C8C898C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292928F8F92929292928F8F8E8E8E8E8E8E8F8E8C8C89
+8C8E8E8E8E8E8E8E8F8F92929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996949494
+949494949294949494949494949494949494949494949492928F8F8E8C898989878789898F929294
+94949494949492928F8E8E8E8E8E8C8E8E8E8C898989878784817F7C7C7F7F7F7C7F7F8185858789
+898E9294949A9C9E9EA4A4A6A6A6A9ABABAEAEAEAEAEABA9A9A6A6A49E9C9A94928E89847C767C81
+87878787858487878789898E8F9292949494949494999A9A9A9C9A9A9A9A9A9A9A9A9A9A9A999994
+949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8C8C8E8C898989
+8989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+89898989898989898989898987878785858585858585858585858585858584817F7F7F7F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A
+676767676761FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494929292929292929292928E8E8E8E8E8E8E8E8E8989
+89898974767C7F8587898E8F92929494999A9C9E9EA4A6A6A9ABAEB1B3B9BBBEC1C6C9CCCFD3D4D9
+D9DCDFE1E1E4E6E7ECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E4E1
+E1DFDFDCD9D9D7D4D4D4D3D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA6A6A4A49E9C92877F76
+614F72767C7F8187898C8F929494999A9C9C9C9C9C9C9C9E9E9EA1A1A1A1A19E9E9C9A9492877C74
+647C7F878789898E8E8E8E8E8E8E8E929292949494949494999A9A9A9A9A9C9C9C9C9A9A9A9A9A94
+94928F89877F7C726A5F554F4F4F4F4F4F57616C74767C7F7F7F7F81848787898989898989898989
+8C8C8C898C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292929292929292929292928F8F8F9292928F8F8E8E8C
+8C8E8F8F8E8E8E8E8F92929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9694949494
+9494949494949494949494949494949994949494949492928F8E8C89898987878787898E92929494
+949494949292928F8E8E8E8E8C89898C8E8C898989878784817F7C7C7F7F7F7F7F7F818585878989
+8E8F9294999C9C9EA1A4A4A6A6A6A9A9ABAEAEAEAEAEA9A9A6A6A49E9E9C99948F89877F797C8189
+89898989878787878789898E8F929292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A99999694
+94949494949494949494929292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8E8E8E898989
+89898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898989898989898987878785858585858585858585858585858481817F7F7F7F7F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A
+676767676766FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E898989
+898989767C7F818789898F92929494949A9A9C9EA3A4A6A6A9AEAEB1B6B9BBC0C1C6CCCFCFD3D4D9
+D9DCDFE1E1E4E6E7ECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1E1
+E1DFDFDCD9D9D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A6A4A19C9989847C
+715F6E74767C7F8789898F929494999A9A9C9C9E9E9C9E9E9EA3A3A3A3A3A4A39E9E9C99948E857C
+74617C818787898C8E8E8E8E8E8E8F929294949494969494999A9A9C9A9A9C9C9E9C9C9A9A9A9A99
+9492928E87847F766C6659544F4F4F4F4F4F5C666C74797C7C7F7F7F818487878787898989898989
+898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F929292929292
+9292929292929292929292929292929292929292929292929292929292928F8F92929292928F8F8E
+8E8F8F8F8F8F8E8F9292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494
+94949494949494949494949494999999969494949492928F8E8C8989898787878789898F92929494
+9494929292928F8E8E8E8E8C8989898989898987878785817F7C7C7C7F7F7F7F7F7F85858787898C
+8F9294969A9C9E9EA3A4A4A6A6A9A9A9ABAEAEAEABABA9A6A6A4A19E9C9A94928E89817C767F898F
+8F8E8C8C898787878989898E8F92929292949494949496999A9A9A9A9A9A9A9A9A9A9A9A99999494
+94949494949494949494929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+8C8C89898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898989898989898987878785858585858585858585858585858584817F7F7F7F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A
+6A6767676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949492929292929292929292928E8E8E8E8E8E8E8E8C898989
+898787767C7F8587898E8F92929494999A9C9C9EA4A6A6A9A9AEB1B1B7B9BBC1C4C6CCCFCFD3D4D9
+D9DFDFE1E4E4E6E7ECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E6E4E1E1
+E1DFDFDCD9D9D4D4D4D3D3D1CFCFCFCCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABA9A6A6A49E9A92877F
+796A5C7174797F8487898E929294999A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A39E9C9A94928C84
+7C72617C858789898C8E8E8E8E8F8F9292949494949999999A9A9A9C9C9C9C9E9E9E9C9C9C9C9C9A
+9494928F89877F7C746A5F554F4F4F4F4F4F4F5C676C7476797C7C7F7F8184878787878787898989
+898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8E8F9292928F8F8F92929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494
+949494949494949494949499999A9A9A9994949492928F8C898989878787858787898E9292929292
+92929292928F8F8E8E8E8C8989898989898987878585847F7F7F7F7F7F7F7F7F7F8485878789898E
+9292949A9C9C9E9EA3A4A6A6A6A6A9A9ABABABABABA9A6A6A4A19E9C9A9494928C877F767C879294
+9494928E8C89898989898C8E8E9292929292929494949499999A9A9A99999A9A9A9A9A9999969494
+9494949494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+8C8C898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+898989898989898989898989898987878785858585858585858585858585858481817F7F7F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A
+6A6767676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E89898989
+8787767C7C8187898C8F9292949496999A9C9EA1A4A6A6A9A9AEB1B3B9BBBEC1C6C8CCCFD1D3D4D9
+D9DFE1E1E4E4E6E7ECECEEEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E4E4E1E1
+E1DFDFDCD9D9D4D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A49E9C948E87
+7C74665772747C7F87898C8F929494999A9C9C9E9E9E9E9EA4A4A4A4A4A4A4A4A4A39E9C9A949289
+817C72617F878789898E8E8E8E8F8F929294949499999A9A9A9A9A9C9C9C9C9E9E9E9E9C9C9C9C9A
+999492928E89847F766E665C544F4F4F4F4F4F4F59616C727476797C7C7F81848587878787878989
+8989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F92929292929292929294949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494
+9494949494949494949699999A9A9A9994949492928F8C89898987878585878789898E9292929292
+9292928F8F8E8E8E8E8E898989898989898787858584817F7F7F7F7F7F7F7F7F8185858789898C8F
+9294969A9C9E9EA1A4A4A6A6A6A6A9A9A9ABABABA9A6A6A4A19E9C9A9994928F89817C7B84929499
+9C9A94928F8C8989898C8E8E8F8F92929292929494949494999A9A9999999A9A9A9A9A9999949494
+9494949494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C
+8C8E8C8989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989878785858585858585858585858585858584817F7F7F7F7F7F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7B7676767676767676747474747272716C6C6C6C6A6A
+6A6A67676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494929292929292929292929292928E8E8E8E8E8E8E8E8C89898989
+8785767C7F8587898E8F92929494999A9A9C9EA4A4A6A6A9ABAEB1B6B9BBC0C1C6C8CCCFD1D4D4D9
+DCDFE1E1E4E6E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2EEEEECECECECE7E7E6E6E4E4E1E1
+E1DFDFDCD9D9D4D4D4D3D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A4A19C999289
+817C6E5F5472767F8487898E929294999A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A6A4A4A39E9C9A9492
+89817972617F878789898E8E8E8F92929294949699999A9A9A9A9A9C9C9C9E9E9E9E9E9C9C9C9C9A
+999492928F89877F7C746A61554F4F4F4F4F4F545457616A6C7274767C7C7F818484858787878989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F
+9292929292928F8F9292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494
+949494949494949494999A9A9A9A9A99949492928F8C8989878787858587878989898E8F92929292
+928F8F8E8E8E8E8E8E8C8989898989898987878584817F7F7F7F7F7F7F7F7F818585878989898E92
+92949A9C9C9E9EA3A4A4A6A6A6A6A9A9A9ABA9A9A6A6A4A39E9C9A9994928F8C877F767F8F999A9C
+9E9E9A92928F8E8E8E8E8E8F8F8F9292929292949494949494999A999996999A9A9A999994949494
+949494949494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+8E8E8E89898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989
+89898989898989898989898989898987878585858585858585858585858585858581817F7F7F7F7F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A
+6A6A6A676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8989898987
+87767C7C818789898F92929494999A9A9C9C9EA4A6A6A6A9ABAEB1B7B9BBC1C4C6C9CCCFD3D4D9D9
+DCDFE1E1E4E6E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E4E1E1
+DFDFDFDCD9D9D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A6A49E9A948E
+877F766A596C747C8187898C8F9294949A9C9C9C9E9EA1A3A4A4A4A6A6A6A6A6A6A4A4A39E9C9A94
+928981797261848787898C8E8E8E929292949499999A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9C9C9C9C
+9A9494928F8C89847F7972675C544F4F4F4F4F4F555559616A6C7174767C7C7F7F81818487878789
+89898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F92928F8F8E8F8F929292929292929292929292929292929292929292929292929292929292
+92929292929292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A96949494949494
+9494949494949494969A9A9A9A9999949494928F8C8989878785848485878789898C8E8F8F928F8F
+8E8E8E8E8E8E8E8E8C8989898989898987878584817F7F7F7F7F7F7F7F7F818585878789898C8F92
+94999A9C9C9E9EA3A4A4A4A6A6A6A6A9A9A9A9A6A6A4A39E9C9C9A9494928E877F797C89949A9C9E
+A4A19C9492928F8F8F8E8F8F8F929292929292949494949494999999969499999A99999994949494
+949494949494949494949292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+8E8E8E8C8989898C89898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989898989898989898989
+89898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F7F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747472716C6C6C6C6A
+6A6A6A676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949492929292929292929292928F8F8E8E8E8E8E8E8E8E898989898987
+85767C7F8487898C8F92949494999A9C9C9EA3A4A6A6A9A9AEB1B3B9B9BEC1C6C6CCCFCFD3D4D9D9
+DCDFE1E1E4E6E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1E1E1
+DFDFDFDCD9D9D4D4D3D3D1CFCFCFCCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACABABABA9A9A6A49E9C9992
+89847C7261576E767F8487898F929494999C9C9C9E9EA3A4A4A4A4A6A6A6A6A6A6A6A4A4A39E9C99
+928F8981796E5F878789898E8E8E8F92929494969A9A9A9A9C9A9A9A9C9C9E9E9E9E9E9E9E9C9C9C
+9A999492928E89877F7C746C61574F4F4F4F4F4F5455575C616A6A6C72767C7C7F7F818181878789
+898989898989898989898989898C8C8E8E8E8E8E8E8C8C8C8E8E8C8989898C8C8E8E8E8E8E8C8C8C
+8E8E8F8F8F8F8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292
+92929292949494949494949499999A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949494999A9A9A9999949494928F8C898787878481818487878989898E8E8E8F8F8E8E
+8E8E8E8E8E8E8C8989898989898989878785847F7F7F7F7F7F7F7F7F7F7F848587878989898E8F92
+949A9C9C9C9EA1A3A4A4A4A6A6A6A6A6A9A6A6A6A4A39E9C9C9A9494928F89847C7985929A9C9EA1
+A4A19E99949292928F8F8F8F92929292929292949494949494949999949494999A99999494949494
+94949494949494949492929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E89898C8C898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989898989898987878585858585858585858585858585858585817F7F7F7F7F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C
+6A6A6A6A6767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E8C89898989898787
+767C7C818787898E92929494999A9A9C9C9EA4A4A6A6A9A9AEB1B6B9BBC0C1C6C8CCCFCFD3D4D9D9
+DFDFE1E4E4E6E7E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E6E4E1E1E1
+DFDFDFDCD9D9D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A49E9C9A94
+8F87817C6C5D6A72797F84878C929294999A9C9C9E9EA1A4A4A4A4A6A6A6A6A6A6A6A6A6A4A39E9C
+94928F8981766C5C8787898C8E8E8F9292949494999A9A9C9C9C9A9A9C9C9E9E9E9E9E9E9E9E9C9C
+9C9A9494928F8C89847F7672675D514F4F4F4F4F4F5557595F666A6C717476797C7F7F7F7F818587
+878989898989898989898989898989898C8C8E8E8C8989898C8C8989898989898C8C8E8E8C898989
+8C8C8E8E8F8E8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292
+9292929494949494949499999A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9994949494949494
+9494949494949494999A999994949494928F8C8987878584817F8487878989898C8E8E8E8E8C8C8C
+8E8E8E8E8C898989898989898987878785847F7F7F7F7F7F7F7F7F7F7F84858587898989898E9294
+999A9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A6A6A4A49E9C9C9A9994928F8C877F767F8C999C9E9EA4
+A4A19E9C94949492928F8F9292929292929292929494949494949494949494969999969494949494
+94949494949494949492929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8C8C8E8C89898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+8989898989898989898989898989898787878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C
+6A6A6A6A6767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E8C8989898989878785
+767C7F818789898E92929494999A9C9C9EA1A4A4A6A6A9ABAEB1B7B9BBC1C4C6C8CCCFD1D4D4D9D9
+DFDFE1E4E4E6E7E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E6E6E4E4E1E1E1
+DFDFDEDCD9D9D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A6A39C9A99
+9489877F7467576C747C8187898F9294949A9C9C9E9EA1A4A4A4A6A6A6A6A6A9A9A6A6A6A6A4A39C
+9A94928F897F746A578787898C8E8F9292949494999A9A9C9C9C9C9A9C9C9C9E9E9E9E9E9E9E9E9C
+9C9A969492928E89877F7C746C61574F4F4F4F4F4F54575C5F61676A6C727476797C7F7F7F7F8185
+8787878989898989898989898989898989898C8C8989898989898989898989898989898C89898989
+89898C8C8E8E8E8E8E8E8E8E8E8F8F8F929292929292929292929292929292929292929292929292
+929294949494949999999A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A999494949494949494
+949494949494949499999494949494928F8E89878784817F7F8185878989898C8E8E8C8C89898989
+8C8E8C8989898989898989898787858584817F7F7F7F7F7F7F7F7F7F81858587898989898C8F9294
+9A9A9C9C9E9E9EA1A3A4A4A4A6A6A6A6A6A4A4A49E9E9C9A999494928E8981797C87929C9E9EA4A6
+A4A19E9C9994949292928F9292929292929292929494949494949494949494949999949494949494
+9494949494949494929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C8C8E8C89898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7B7676767676767676747474747472716C6C6C
+6C6A6A6A6A67FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8C898989898987878576
+797C7F8487898C8F929294999A9A9C9C9EA3A4A4A6A6A9AEB1B3B9B9BEC1C4C6C8CCCFD1D4D7D9DC
+DFDFE1E4E6E6E7E7ECECECEEEEF1F2F2F2F2F2F2F2F2F2F2F2EEECECECECECE7E7E6E6E4E4E1E1E1
+DFDFDCD9D9D9D4D3D3D1CFCFCFCFCCCCCCC8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A49E9C9A
+949289847C6C5F546C747F848789929494999C9C9E9EA1A4A4A4A6A6A6A6A6A9A9A9A6A6A6A6A4A1
+9C9A94928F897C7266548789898E8F8F92929494999A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9C9A999492928E8989847C7672675D4F4F4F4F4F4F4F575C5F5F646A6C71727476797C7C7F7F7F81
+85878787898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898C8E8E8E8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292
+92929494949499999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A999494949494949494
+949494949494949494949494949492928E89878584817F7F81858789898C8C8C8C89898989898989
+8C898989898989898989898787858585817F7F7F7F81818181817F81858587878989898C8E929499
+9A9C9C9C9E9E9E9EA3A4A4A4A6A4A4A6A4A4A49E9E9C9C9A9494928E89877C76848F9A9EA1A4A4A6
+A4A19E9C9A9994929292929292929292929292929494949494949494949494949496949494949494
+9494949494949494929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C8E8E8E8C8989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C
+6C6C6A6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E89898989898787858476
+7C7F818787898C8F929494999A9C9C9C9EA3A4A6A6A9ABAEB1B6B9BBC0C1C6C6C9CCCFD3D4D9D9DC
+DFDFE1E4E6E6E7E7ECECECECEEF1F2F2F2F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E1E1E1DF
+DFDFDCD9D9D9D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A49E9C9A
+99948E877F7467596A71797F85898F9294999A9C9C9E9EA3A4A4A6A6A6A6A9A9A9A9A9A9A6A6A6A4
+A19C9A94928E84766C5F8787898C8E8F8F929494999A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9C9C9A9494928F8C89877F79746A61574F4F4F4F4F4F55575F5F61676A6C727476797C7C7C7F7F81
+84858787898989898989898989898989898989898989898989898989898989898989898989898989
+898989898989898C8E8E8E8E8E8E8E8E8E8F8F929292928F8F8F9292929292929292929292929292
+929494949496999A9A9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A969494949494949494
+9494949494949494949494949292928E898785817F7F7F818587898C8C8989898989898989898989
+898989898989898989898987878585847F7F7F7F84848481817F8185858787898989898E92949499
+9A9C9C9C9E9E9E9EA1A4A4A4A4A4A4A4A4A39E9E9C9C9A9994928F89877F747F89949E9EA4A4A6A6
+A4A19E9C9C9A94949292929292929292929292929494949494949494949494949494949494949494
+949494949494949292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E89898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767674747474747472716C6C
+6C6C6A6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494929292929292929292929292928F8E8E8E8E8E8E8E8C89898989878785857679
+7C7F818789898E92929494999A9C9C9E9EA4A4A6A6A9ABAEB1B7B9BBC0C1C6C6CCCFCFD3D4D9D9DC
+DFE1E1E4E6E7E7E7ECECECECEEF1F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1E1E1DF
+DFDFDCD9D9D9D4D3D3D1CFCFCFCFCFCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A6A49E9C
+9A949289817C6C5F556A747C8187899294949A9C9C9E9EA3A4A4A6A6A6A6A9A9A9ABABA9A9A6A6A4
+A4A19C9A9492897F746A578789898C8E8F929494999A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9C9C9A999492928E8987817C7672675C4F4F4F4F4F4F54575C5F61676A6C71727476797C7C7F7F81
+81848787878989898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898C8C8E8E8E8E8E8E8E8E8E8F8F928F8F8E8F8F92929292929292929292929292
+9494949494999A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949494
+94949494949494949494929292928E898785817F7F7F818787898989898989898989898989898989
+898989898989898989898787858584817F7F7F8485848484817F84858587898989898E8F9294949A
+9A9C9C9C9C9E9E9EA1A3A4A4A4A4A4A3A19E9E9C9C9A999492928C8984797C87929C9EA1A4A6A6A6
+A49E9E9C9C9A99949292929292929292929292929294949494949494949494949494949494949494
+949494949494929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858585817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767674747474747472726E6C
+6C6C6C6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E898989898787858584767C
+7F7F848789898E929294949A9A9C9C9EA1A4A4A6A6A9AEB1B3B9B9BEC1C1C6C8CCCFCFD3D4D9D9DC
+DFE1E1E4E6E7E7E9ECECECECEEF1F2F2F2F2F2F2F2F1F1F1F1EEECECECECE7E7E7E6E4E4E1E1E1DF
+DFDFDCD9D9D9D4D3D1D1CFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A6A49E9C
+9A99948C877F74675C516C747F85898E9494999C9C9E9EA3A4A4A6A6A6A9A9A9ABABAEABABA9A6A6
+A4A4A19C99928E877C7261518787898E8E929294969A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C999494928F8987847F79746A61574F4F4F4F4F4F55595F61676A6C6C727476797C7C7F7F7F
+81848787878989898989898989898989898989898989898989898989898989898989898989878989
+898989898989898989898C8C8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8F8F9292929292929292929294
+9494949499999A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949494
+949494949494949494929292928E8987857F7F7F7F81878789898989898989898989898989898989
+8989898989898989898787858585818181818485858585817F84858587898989898C8F929494999A
+9A9C9C9C9C9E9E9E9EA3A4A4A4A4A39E9E9E9C9C9C9A9494928E89877C76818C949E9EA3A4A6A6A6
+A49E9E9C9C9A99949492929292929292929292929292949494949494949494949494949494949494
+94949494949492929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898989898989898989898989898987878785858585858585858585858585858585817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767674747474747472726C
+6C6C6C6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8C898989898787858476797C
+7F818787898C8F929294999A9C9C9E9EA3A4A4A6A9ABAEB1B6B9BBBEC1C4C6C8CCCFD1D4D4D9D9DC
+DFE1E1E4E6E7E7ECECECECECEEF1F2F2F2F2F1F1F1F1F1F1F1EEECECECECE7E7E6E6E4E4E1E1E1DF
+DFDEDCD9D9D7D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A6A6A39E
+9C9A949289817C6C61576771798187899294999A9C9C9EA3A4A4A6A6A6A9A9A9ABABAEAEAEABA9A6
+A6A4A49E9C9492897F746C5C848587898E8F929494999A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C9A9494928F8C89877F7C7471665C4F4F4F4F4F4F54575D61666A6C6C72747676797C7C7F81
+81818587878989898989898989898989898989898989898989898989898987878989898987878787
+8989898989898989898989898C8C8E8E8E8E8C8C8E8E8F8E8E8E8E8E8F8F92929292929292929294
+94949496999A9A9C9C9C9C9E9E9E9E9E9E9EA19E9E9E9E9C9C9A9A9A9A9994949494949494949494
+9494949494949494949292928F8987857F7F7F818487878989898989898989898989898989898989
+89898989898989878787858585848484848485858585848184858587898989898C8F92929494999A
+9A9C9C9C9C9E9E9E9EA1A3A4A3A39E9E9C9C9C9A9A9494928F898781747C89929C9EA1A4A4A6A6A4
+A49E9E9C9C9A9A949494929292929292929292929292949494949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+898989898989898989898989898989898987878585858585858585858585858585858584817F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C767676767676747474747474747271
+6C6C6C6C6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8C89898989878785847F767C7F
+7F848789898E92929494999A9C9C9E9EA3A4A6A6A9AEAEB1B6B9BBBEC1C6C6C8CCCFD1D4D7D9D9DC
+DFE1E1E4E6E7E7E9ECECECECEEEEF2F1F1F1F1F1F1F1F1EEEEECECECECECE7E7E6E6E4E4E1E1DFDF
+DFDCDCD9D9D7D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A49E
+9C9A969289857F746A5D546A727F84878E94949A9C9C9EA1A4A4A6A6A6A9A9A9ABAEAEAEAEAEABA9
+A6A6A4A49C99928E877C7267578184878C8E929294999A9C9C9C9E9C9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C9A999492928E8987817C76746A5F574F4F4F4F4F4F575C5F61676A6E72747476797C7C7F81
+81848587878789898989898989898989898989898989898989898989898787878787878787878787
+87878989898989898989898989898C8E8E8E8C898C8C8E8E8E8E8E8E8E8E8F8F9292929292929294
+949494999A9A9A9C9C9C9C9E9E9EA3A3A3A3A3A19E9E9C9C9C9A9A9A9A9994949494949494949494
+949494949494949492928F8E8989877F7F7F81848787898989898989898989898989898989898989
+898989898987878785858585858585858585858585858181858587878989898C8E8F929294949A9A
+9A9A9C9C9C9E9E9E9E9EA3A3A19E9E9C9C9C9A9A9994928F8C89857C76878F999E9EA3A4A6A6A6A4
+A49E9E9C9C9A9A999494929292929292929292929292929494949494949494949494949494949494
+9494949494929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989898987878585858585858585858585858585858584817F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C797676767676747474747474747272
+6E6C6C6C6C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494929292929292929292928F8F8E8E8E8E8E8E8E8E8C89898989898785847F76767C7F
+818787898E8F92929494999A9C9C9E9EA4A4A6A9ABAEB1B3B7B9BBC0C1C6C6C9CCCFD3D4D9D9D9DC
+DFE1E1E4E6E7E7E7ECECECECECEEF1F1F1F1F1EEEEEEEEEEEEECECECECE9E7E7E6E6E4E1E1E1DFDF
+DFDCDCD9D9D7D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A49E
+9E9C99948F87817C6C61574F6C747F87899294999A9C9EA1A4A4A6A6A6A9A9ABABAEAEAEAEAEAEAB
+A9A6A6A49E9C94928981766C614F7F85898E929294999A9C9C9C9C9E9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C9C9A9494928F8987847F79746C615C4F4F4F4F4F4F54575F61666A6C72747476797C7C7F81
+84858787878789898989898989898989898989898989898989898989898787878787878787878787
+878787878989898989898989898989898C8C898989898C8E8E8E8E8E8E8E8E8F8F92929292929292
+949499999A9A9C9C9C9C9E9E9EA1A4A4A4A4A3A19E9E9C9C9A9A9A9A9A9694949494949494949494
+949494949494949492928F8C89877F7C7F7F84878787898989898989898989898989898989898989
+898989898987878585858585858585858585858585848485858787898989898E8F92929494999A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A999492928E89877F767F89929C9EA1A4A4A6A6A6A4
+A49E9E9C9C9A9A999494949292929292929292929292929294949494949494949494949494949494
+9494949492929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+89898989898989898989898989898989898787858585858585858585858585858585858584817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676747474747474747472
+726C6C6C6C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494929292929292929292928F8E8E8E8E8E8E8E8E8989898989898787847F7F767C7F7F
+8487898C8E92929494949A9A9C9C9EA1A4A4A6A9ABAEB1B3B9B9BBC0C1C6C6CCCFCFD3D4D9D9D9DC
+DFE1E1E6E6E7E7E7ECECECECECEEF1F1EEEEEEEEEEEEEEEEEEECECECECE7E7E7E6E6E4E1E1E1DFDF
+DFDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A4A4
+9E9C9A949289847F746A5F55666C7C84878E94949A9A9C9EA4A4A6A6A6A9A9ABABAEAEAEAEAEAEAE
+A9A9A6A4A39C9A928E877F746A5C7F8187898F9294949A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9E
+9E9C9C9C9A9694928F8C89857F7C74726A5F574F4F4F4F4F4F555C5F616A6C717474767C7C7F7F81
+84878787878789898989898989898989898989898989898989898989898987878585878787858585
+8587878787898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F9292929292
+949496999A9A9C9C9C9C9E9E9EA3A4A3A3A1A19E9E9E9C9C9A9A9A9A999494949494949494949494
+9494949494949492928F8C8987817C7F7F8185878789898989898989898989898989898989898989
+8989898987878585858585858585858585878785858585858787898989898E8F9292929494999A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9C9A9A99999494928E8987817479878F969E9EA3A4A6A6A6A4A4
+A49E9E9C9C9C9A999494949492929292929292929292929294949494929494949494949494949494
+949494949292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898989898989898989898989878785858585858585858585858585858585858481817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7B76767676767474747474747474
+72716C6C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949492929292929292929292928E8E8E8E8E8E8E8C898989898989878785817F76767C7F81
+8787898E8F92929494999A9C9C9E9EA3A4A6A6A9AEAEB1B6B9B9BEC1C1C6C8CCCFD1D3D4D9D9DCDC
+DFE1E1E6E6E7E7E7ECECECECECEEEEEEEEEEEEEEEEEEECECECECECECECE7E7E7E6E4E4E1E1E1DFDF
+DEDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C8C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A4A4
+9E9C9A96948E877F7B6E61595467747F87899294999A9C9EA3A4A4A6A6A9A9ABAEAEAEAEAEB1AEAE
+AEA9A6A6A49E9C94928985797266577F84878C929294999A9C9C9C9C9E9C9E9E9E9E9E9E9E9C9C9E
+9E9C9C9C9A999492928E8987817C76726C615C514F4F4F4F4F54575F61676A717476797C7C7F7F81
+85878787878989898989898989898989898989898989898989898989898987878787858585858787
+878585878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F92929292
+949494999A9A9C9C9C9E9E9EA1A3A39E9E9E9E9E9E9C9C9C9A9A9999949494949494949494949494
+9494949494949492928E8987817C7C7F818587878989898989898989898787878789898989898989
+89898987878785858585858585858587878785858585878787898989898C8F9292929294949A9A9A
+9A9C9C9C9E9E9C9C9C9C9C9E9E9C9C9A99999494928F8989847C76818C929C9EA1A4A4A6A6A6A4A4
+A49E9E9C9C9C9A999494949492929292929292929292929292949492929494949494949494949494
+949494929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+8989898989898989898989898989898989878785858585858585858585858585858585858584817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C79767676767674747474747474
+72726E6C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494929292929292929292928F8E8E8E8E8E8E8C898989898987878585847F7F767C7F7F84
+87898C8F9292949494999A9C9C9E9EA3A4A6A9ABAEB1B1B6B9BBBEC1C4C6C8CCCFD1D4D4D9D9DCDE
+DFE1E1E6E6E6E7E7ECECECECECEEEEEEEEEEECECECECECECECECECECECE7E7E6E6E4E4E1E1E1DFDF
+DCDCD9D9D9D4D4D3D1CFCFCFCFCFCFCFCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A4A4
+A19E9C99949289847F746A5F575F6C7981878C9294999C9C9EA4A4A6A6A9A9ABAEAEAEAEB1B1B1AE
+AEABA9A6A4A19C9A948E897F746C5F4F7F85898F9294949A9A9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C
+9E9E9C9C9A9A9494928F8987817F79746E665F55514F4F4F4F5155595F666A6C72767C7C7F7F7F81
+85878787898989898989898989898989898989898989898989898989898989878787878787878787
+8787878787878989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F9292
+94949499999A9C9C9C9E9E9EA3A4A19E9E9E9E9E9E9C9C9A9A999694949494949494949494949494
+94949494949292928E8987817F7C7F84878787878989898989898787878787878787898989898989
+898989878785858585858585858587878787858585878787898989898C8E929292929494999A9A9A
+9A9C9C9E9E9C9C9C9C9C9C9C9C9C9A99949494928F8C89877F747C8792999E9EA3A4A6A6A6A4A4A4
+A49E9E9E9C9C9A999494949494929292929292929292929292949492929294949494949494949494
+94949292929292929292929292929292929292929292929292929292929292928E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898989898989898989898989898787878585858585858585858585858585858585848181
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C797676767674747474747474
+7472716C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949492929292929292929292928E8E8E8E8E8E8C89898989898987858585817F76767C7F8187
+89898E8F9292949494999A9C9C9E9EA4A6A6A9AEAEB1B3B7B9BBBEC1C6C6C8CCCFD1D4D9D9D9DCDF
+DFE1E1E4E6E6E7E7E9ECECECECEEEEECECECECECECECECECECECECECECE7E7E6E6E4E1E1E1DFDFDF
+DCDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC9C8C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A4A4
+A39E9C9A94928C877F7C71665C5564727F84898E94969A9C9EA4A4A6A6A9A9ABAEAEAEAEB1B1B1B1
+AEAEA9A6A4A39E9C949289877C726A5C7C7F8789929494949A9C9C9C9C9C9E9E9E9E9E9E9C9C9C9C
+9C9E9C9C9A9A999492928C89847F7C74726A6159544F4F4F4F4F55575D616A6C7274797C7F7F8181
+85878789898989898989898989898989898989898989898989898989898989898987878787878787
+878787878787898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F92
+9294949499999A9C9C9E9EA1A3A39E9E9E9E9E9E9C9C9C9A99949494949494949494949494949494
+949494949292928F8987847F7C818587878789898989898989878787878585878789898989898989
+8989878787878585858585858587878987858585878787878989898C8E8F929292929494999A9A9A
+9A9C9C9C9C9C9C9C9C9C9C9C9C9A9994949492928E89877F7474848E949C9E9EA4A4A6A6A6A4A4A4
+A4A19E9E9C9C9A9A9694949494929292929292929292929292929292929292949494929494949494
+94949292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858481
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7F7F7C7C7C7C7C7C7C7C797676767676747474747474
+747472716C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949292929292929292928F8F8E8E8E8E8E8C89898989898987878585817F7C767C7F7F8487
+898C8F9292949494949A9A9C9C9EA1A4A6A9ABAEAEB1B3B9B9BBC0C1C6C6C9CCCFD3D4D9D9D9DCDF
+DFE1E1E4E6E6E7E7E9ECECECECECECECECECECECECECECECECECECECE9E7E7E6E6E4E1E1E1DFDFDF
+DCDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A4A4
+A39E9C9A94949289847F746A6157516A747F87899294999C9C9EA4A6A6A9A9ABAEAEAEAEB1B1B1B1
+AEAEABA9A6A49E9C9A948F8981767164577F81898F929494949A9C9C9C9C9C9E9E9E9E9C9C9C9C9C
+9C9C9C9C9A9A999492928E89877F7C76726C665F57544F4F4F4F5455595F676A7274797C7F818181
+8787898989898989898989898989898989898989898989898989898C8C8989898989898989898989
+8989878787898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F
+9292949494969A9A9C9C9E9EA4A19E9E9E9C9C9C9C9C9A9A99949494949494949494949494949494
+9494949292928F8C89847F7C7F878787898989898989898987878585858587878989898989898989
+8989878787878585858585858787898787858587878787898989898E8E929292929294949A9A9A9A
+9C9C9C9C9C9C9C9A9A9A9A9A9A9994949492928E8987817C767F8992999C9E9EA4A4A6A6A4A4A4A4
+A3A19E9E9C9C9A9A9994949494949292929292929292929292929292929292949492929294949494
+94929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676747474747474
+747472726E6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949292929292929292928F8E8E8E8E8E8E8E89898989898989878585817F7F76767C7F818789
+898C8F9294949494999A9C9C9E9EA1A4A6A9ABAEAEB1B3B9B9BBC1C1C6C8CCCFCFD3D4D9D9D9DCDF
+DFE1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECECECE7E7E7E6E4E4E1E1E1DFDFDF
+DCD9D9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C8C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A9A9A6A6A6A4
+A39E9E9C9994928C877F7C71675D555F6C7981878992949A9C9EA4A6A6A6A9ABAEAEAEAEB1B1B1B1
+B1AEAEA9A6A4A39E9C949289877C746A5F4F7F878992929294999A9C9C9C9C9C9E9E9E9C9C9C9C9C
+9C9C9C9C9C9A999494928F8987817C76746C6A6159554F4F4F4F4F55575D616A6C74767C7F7F8184
+87878989898989898989898C8C8C898989898989898C8C8C8E8E8E8E8E8E8C898989898989898989
+8989898789898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E
+8F9294949494999A9A9C9C9E9E9E9E9C9C9C9C9C9C9C9A9994949494949494949494949494949494
+94949492928F8C89877F7C7F85878989898989898989898787878585858787878989898989898989
+89898987878585858585878787898787878787878989898989898E8E8F92929292949499999A9A9A
+9C9C9C9C9C9C9A9A9A9999999494949492928E8987847C7676858E949A9E9E9EA4A6A4A4A4A4A4A4
+A39E9E9E9C9C9A9A9994949494949492929292929292929292929292929292929492929294949494
+94929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676767474747474
+74747472716CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94929292929292929292928F8E8E8E8E8E8E8E8C898989898989878785817F7F74767C7F7F848789
+898E929294949494999A9C9C9E9EA3A4A6A9AEAEAEB1B6B9BBBEC1C1C6C8CCCFD1D3D4D9D9DCDCDF
+DFE1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECECECE7E7E6E6E4E4E1E1E1DFDFDE
+DCD9D9D9D9D4D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A4
+A49E9E9C9A94929289847F746C61595461727C81878F94999C9CA1A6A6A6A9ABAEAEAEB1B1B1B1B1
+B1AEAEABA6A6A4A19C9A948F8981766C66577C81878C929292949A9A9C9C9C9C9E9E9C9C9C9C9C9C
+9C9C9C9C9C9A99949492928C87847F7B74726A665F57554F4F4F4F54555C5F666C72747C7F7F8184
+878787898989898989898C8E8E8E8E8C8C8C8C8E8E8E8E8F8F8F928F8F8E8E8E8C8989898C8C8E8C
+898989898989898989898989898989898E8C8989898C8E8C898989898989898E8E8E8E8E8E8E8E8E
+8E92929494949494999A9A9C9C9C9C9C9C9C9C9C9C9A9A9994949494949494949494949494949494
+949492928F8E89877F7C7F8487898989898989898989898787858585878787898989898989898989
+898989878785858585878789898987878787878989898989898E8E8E8F9292929294949699999A9A
+9C9C9C9C9A9A9A999996949494949292928E8987857F74747F878F949C9E9E9EA4A4A4A4A4A4A4A3
+A19E9E9E9C9C9C9A9994949494949492929292929292929292929292929292929292929292949494
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767674747474
+747474747271FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+929292929292929292928F8E8E8E8E8E8E8E8E898989898989878784817F7F7F76767C7F81878989
+898E929294949494999A9C9C9E9EA3A6A6ABAEAEB1B1B6B9BBBEC1C4C6C8CCCFD1D3D4D9D9DCDEDF
+DFE1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECECECE7E7E6E6E4E4E1E1DFDFDFDC
+DCD9D9D9D9D4D4D3D1D1CFCFCFCFCFCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A4
+A4A19E9C9A9494928C877F7C72675F574F6A747F848992949A9C9EA4A6A6A9ABAEAEAEB1B1B1B1B1
+B1B1AEABA9A6A4A49E9C999289857C726A5F557F84898C929294949A9C9C9C9C9C9E9C9C9C9C9C9A
+9C9C9C9C9C9A99949494928E89877F7C76726C6A615C55514F4F4F5155575F616A6C74767C7F8181
+8487878989898989898C8E8E8E8E8E8E8E8F8F8F8F8F8F8F92929292928F8F8E8E8E8C898C8E8E8E
+8C8C89898989898989898989898989898C8E8C898C8E8E8E8C8989898989898C8E8E8E8E8E8E8E8E
+8E8F9292949494949494999A9A9A9A9A9A9C9C9A9A9A9A9694949494949494949494949494949494
+9492928F8E8987817C7F848789898989898989898989878785878787878789898989898989898989
+898987878785858787878989898987878787898989898989898E8E8E929292929294949499999A9A
+9A9C9C9A9A9A999994949494949292928F8987857F76767C8489929A9E9E9EA1A4A4A4A4A4A4A4A3
+9E9E9E9E9C9C9C9A9994949494949494929292929292929292929292929292929292929292949492
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989898989898989898989898987878785858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767674747474
+747474747272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949492
+929292929292929292928E8E8E8E8E8E8E8E8C8989898989878785817F7F7F71767C7F7F84878989
+8C8F9292949494949A9A9C9E9E9EA4A6A9ABAEAEB1B3B7B9BBC0C1C6C6C9CCCFD1D3D4D9D9DCDFDF
+DFE1E1E4E4E6E6E7E7ECECECECECECECECECECECECECECECECECECE9E7E7E6E6E4E1E1E1DFDFDFDC
+DCD9D9D9D9D4D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A4
+A4A19E9E9C9994929289847F746C615D555F6C767F878E94999A9EA3A6A6A9A9ABAEAEB1B1B1B1B1
+B1B1AEAEA9A6A6A4A19C9A948E877F746C6659547F85898E8F9294969A9C9C9C9C9C9C9C9C9C9C9A
+9C9C9C9C9C9A9A969494928F8987817F7974716A665F57554F4F4F4F55575C5F666A7274797F7F7F
+8184878789898989898C8E8E8E8E8E8E8F8F929292929292929292929292928F8E8E8E8C8E8E8E8E
+8E8E8C898989898989898989898989898C8E8E8E8E8E8E8E8E8C8C898989898C8E8E8E8E8E8E8E8E
+8E8E8F929292929294949494949994999A9A9A9A9A99999494949494949494949494949494949494
+94928F8E8987847C7F818789898C8C89898989898987878787878787898989898989898989898989
+8987878787878787878989898989898987898989898989898C8E8E8F92929292949494949499999A
+9A9A9A9A999994949494949292928F8E8989877F7976747F8589929A9C9E9EA3A4A4A3A3A3A3A3A1
+9E9E9E9E9E9C9C9A9994949494949494949292929292929292929292929292929292929292929492
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676747474
+747474747472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949492
+9292929292929292928F8E8E8E8E8E8E8E89898989898987878584817F7F7C76767C7F8187898989
+8E8F9294949494999A9C9C9E9EA1A4A6A9ABAEAEB1B3B9B9BBC0C1C6C6CCCFCFD3D4D4D9D9DCDFDF
+E1E1E1E4E4E6E6E7E7E9ECECECECECECECECECECECECECECECECECE7E7E7E6E6E4E1E1E1DFDFDFDC
+D9D9D9D9D9D4D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A19E9E9C9A9494928C877F7C72675F575161717C818992949A9C9EA4A6A9A9ABAEAEB1B1B1B1B1
+B1B1AEAEABA9A6A6A49E9C949289817C726A5F577B7F87898E8F9294999A9C9C9C9C9C9C9C9C9A9A
+9A9C9C9C9C9A9A99949492928987847F7C76726C6A615D57514F4F4F5455595F61676C72767C7F7F
+7F8184878789898989898E8E8E8E8E8F8F92929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898989898E8E8C8C8E8E8E8E8E8E8C89898C8C8E8E8E8E8E8E8E8E
+8E8E8F92929292929292949494949494999A9A999996949494949494949494949494949494949494
+928F8C8989857F7F818789898C8E8C8C898989898987878787898989898989898989898989898989
+8989878787878789898989898989898989898989898989898E8E8F9292929292949494949496999A
+9A9A9A999694949494949292928F8C898787817C79767C7F878C929A9C9C9E9EA3A1A19E9E9E9E9E
+9E9E9E9E9C9C9C9A9A94949494949494949292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949292
+9292929292929292928E8E8E8E8E8E8C89898989898987878585817F7F7C74767C7F7F8587898989
+8E929294949494999A9C9C9EA1A3A4A6A9AEAEAEB1B6B9B9BEC1C1C6C8CCCFCFD3D4D4D9D9DCDFDF
+E1E1E1E4E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECE7E7E6E6E4E4E1E1E1DFDFDEDC
+D9D9D9D9D7D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A39E9E9C9A9694929289847C746C665F574F67747F878C94999C9EA3A6A9A9ABAEAEB1B1B1B1B1
+B1B1B1AEAEABA9A6A4A19C9A9289877F746C665C547C8187898E929294999A9C9C9C9C9C9C9A9A9A
+9A9A9C9C9A9A9A99949492928E8985817C76746E6A665F59554F4F4F4F55575F61676A7274767C7F
+7F7F81858787878989898C8E8E8E8E8F9292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8C898989898989898989898989898989898C8C8C898C8E8E8E8E8E8E8C898C8E8E8E8E8E8E8E8E8E
+8E8E8F9292928F8F8F92929494949494999999969494949494949494949494949494949494949492
+8F8C8989877F7F818587898E8E8E8E8C8989898989898989898989898C8C8E8E8C89898989898989
+89898987878789898989898989898989898989898989898C8E8F9292929292949494949494949999
+9A99999494949494929292928E89898787817C7976767C7F878C94949A9C9C9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9A9A99949494949494949492929294929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676767674
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949292
+92929292929292928F8E8E8E8E8E8C89898989898987878585847F7F7C7C76797C7F81878989898C
+8F9292949494999A9A9C9E9EA3A4A4A6ABAEAEB1B1B6B9BBBEC1C4C6C8CCCFD1D3D4D4D9D9DCDFDF
+E1E1E1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECE9E7E7E6E4E4E1E1E1DFDFDFDCDC
+D9D9D9D9D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A39E9E9C9C999494928C877F79726A615C545F6A7C81898F949A9C9EA4A6A9ABAEAEAEB1B1B3B1
+B1B1B1AEAEABA9A9A6A49E9A948F877F79726A6157747F8187898E929294999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A99949492928F8987817F7C74726C6A615F57544F4F4F54575F61666A6C7474797C
+7F7F7F818587878789898C8E8E8E8E8F92929292929292929292929292928F8F8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898C8C898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E
+8E8E8E8F92928F8E8E8F929292949494949494949494999494949494949494949494949494949292
+8E898987817F818487898E8E8E8E89898989898989898989898C8C8E8E8E8E8E8C8C898989898989
+89898989898989898989898989898989898989898989898E8F929292929292949494949494949499
+99969494949492929292928E89878787817C7C7674797C81878E9294999C9C9C9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9A9A99949494949494949492929494949292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767674
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494929292
+9292929292928F8E8E8E8E8E8E8E8989898989898987858585817F7C7C74767C7F7F85878989898E
+8F9294949496999A9C9C9EA3A4A4A6A9ABAEAEB1B3B7B9BBBEC1C6C6C8CCCFD1D3D4D4D9D9DCDFDF
+DFE1E1E1E4E6E6E7E7E7ECECECECECECECECECECECECE9E9E9E7E7E7E6E6E4E1E1E1E1DFDFDFDCDC
+D9D9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B9B9B7B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A39E9E9C9C9A9494928F89817C746C675F575461727F878992999C9EA3A6A9ABAEAEAEB1B1B3B3
+B1B1B1AEAEAEABA9A6A49E9C949289847C746C675D54767F8187898E9292949A9A9A9A9A9A9A9A99
+999A9A9A9A9A9999949494928F8987847F7C76726E6A67615D57544F4F51555C61666A6C7274767C
+7C7F7F81848587878989898C8E8E8E8E8F929292929292928F929292928F8F8E8E8E8E8E8E8E8C89
+8989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F
+8F8E8E8F9292928F8F9292929292949494949494999999999494949494949494949494949492928F
+8E8987847F818487898E8E8E8C898989898989898989898C8E8E8E8E8E8E8E8E8E8C898989898989
+898989898989898989898989898989898989898989898C8E8F929292929292949494949494949499
+9494949494929292928F8F89898787817C7C7C7476767C81878C9292949A9C9C9C9E9C9C9C9C9C9C
+9E9E9C9C9C9C9C9C9A99949494949494949494929494949292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8F8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898989898989898989898989878787858585858585858585858585858585858585
+8481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494929292
+92929292928F8E8E8E8E8E8E8E8C89898989898987878585847F7C7C7C76797C7F81878789898C8F
+9292949494999A9A9C9EA1A4A4A4A6A9ABAEAEB1B3B9B9BBC0C1C6C6C9CCCFD1D3D4D4D9D9DCDFDF
+DFE1E1E1E4E4E6E6E7E7ECECECECECECECECE9E9E7E7E7E7E7E7E7E7E6E4E4E1E1E1E1DFDFDFDCD9
+D9D9D9D9D4D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B7B7B7B6B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6
+A4A39E9E9C9C9A9994949289857F79726A615F5751677981878F949A9C9EA4A6ABAEAEAEB1B1B1B3
+B3B1B1B1AEAEAEABA9A6A49E9A928C877F76726A61576C767F8187898F929496999999999A9A9A99
+99999A9A9A9A999994949492928C8787817F7974726C6A665F5755544F4F55575F616A6C7174767C
+7C7F7F7F818487878789898C8E8E8E8E8F8F8F929292928F8F8F8F928F8F8E8E8E8E8E8E8E8C8C89
+898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8F8F9292
+8F8F8F8F929292929292929292949494969999999A9A9A999494949494949494949494949292928E
+8C89857F7F8587898C8E8E8C89898989898989898989898E8E8E8E8E8E8C8C898989898989898989
+898989898C8E8C8C898989898989898989898989898C8E8F92929292929294949494949494949494
+94949492929292928F8E89898785857F7C7C767474797F8187898E9294969A9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A99949494949494949494949494949492929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+8584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676
+767474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9492929292
+929292928F8E8E8E8E8E8E8E8E8989898989898987858584817F7C7C74767C7F7F85878989898E92
+92929494999A9A9C9C9EA3A4A4A6A6A9ABAEB1B1B3B9B9BBC1C1C6C6CCCFCFD3D3D4D4D9D9DCDFDF
+DFE1E1E1E4E4E6E6E7E7E9ECECECE9E9E7E7E7E7E7E7E7E7E7E7E7E6E6E4E1E1E1DFDFDFDFDEDCD9
+D9D9D9D7D4D4D4D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B7B7B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6
+A4A49E9E9E9C9C9A9494928E87817C746C67615C555F717F858992969A9CA3A6ABAEAEAEB1B1B1B1
+B3B1B1B1AEAEAEAEABA6A49E9C948F87817C746C665D5571797F8187898F929494949696999A9999
+9699999A9A99999494949492928E8987847F7C76726C6A67615F5755544F51555961676A6C727476
+7C7C7F7F81848787878989898E8E8E8E8E8E8F8F8F928F8F8E8E8E8F8F8E8E8E8E8E8E8E8C8C8989
+8989898989898989898787898989898787898989898989898989898C8E8E8E8E8E8E8E8E8F8F9292
+92928F92929292929494949494949494999A9A9A9A9A999494949494949494949494949292928F8E
+89877F7F858789898E8E8C89898989898989898989898C8E8E8E8E8E8E8989898989898989898989
+8989898C8E8E8E8C8C89898989898989898989898C8E8F9292929292929294949494949494949494
+9494929292928F8E8E8989878585817F7C797472747C7F818787898F9294999A9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A99949494949494949494949494949492929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676
+767474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9492929292
+929292928E8E8E8E8E8E8E8E8C89898989898787858585817F7C7C7676797C7F81858789898C8F92
+92929496999A9C9C9E9EA4A4A4A6A6A9AEAEB1B3B6B9BBBEC1C1C6C8CCCFD1D3D4D4D4D9D9DCDFDF
+DFE1E1E1E4E4E6E6E7E7E7ECE9E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E4E4E1E1DFDFDFDFDFDCDCD9
+D9D9D9D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBBBBBB
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3
+B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A6A6A6A6A6A6
+A4A4A19E9E9C9C9A9994949289847F76726A6661595566767F878C949A9C9EA4A9AEAEAEB1B1B1B1
+B1B3B1B1B1AEAEAEABA9A6A39C969289857F76716A5F5766727B7F84878C92949494949496999999
+9494999A9999969494949492928E8987847F7C7674716C6A665F595755514F55575F646A6C727476
+7C7C7F7F81818587878989898C8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+898989898989898987878787878987878787898989898989898989898C8E8E8E8E8E8E8F8F929292
+929292929292929494949494949494999A9A9A9A9A9A9994949494949494949494929292928F8E89
+87817C848787898C8E8989898989898989898989898C8E8E8E8E8E8E8C8989898989898989898989
+898C8E8E8E8E8E8E8C8C8989898989898989898C8E8F929292929292929294949494949294949494
+929292928F8F8E8C8989878585847F7F7C767274767C7F818787898C929294999A9A9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A99949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292928F9292928F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+85858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C767676
+767674747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+9292928F8E8E8E8E8E8E8E8E89898989898787858585817F7F7C7676767C7F7F858787898C8E9292
+929494999A9A9C9C9EA3A4A4A6A6A9ABAEB1B1B3B7B9BBBEC1C4C6C8CCCFD1D3D4D4D4D9D9DCDFDF
+DFE1E1E1E1E4E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E4E1E1E1DFDFDFDFDFDCDCD9
+D9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B6B6B6B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3
+B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A6A6A6A6A6A6
+A4A4A19E9E9C9C9A9A9494928C87817C746E6A645F57546C7C81878F949A9CA4A6ABAEAEB1B1B1B1
+B1B1B3B1B1B1AEAEAEA9A6A49E9A948E877F79726C665D5567727C7F87898E929494949494969994
+949496999999949494949492928F898787817F7C74726C6A67615F5755554F4F555961676A6E7274
+797C7F7F81818487878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989878787878787878787878787878989898989898989898C8C8E8E8E8E8F92929292
+929292929292949494949494949496999A9A9A9A9A9A96949494949494949494949292928F8E8987
+847C81878789898E898989898989878989898989898C8E8E8E8E8E8C89898989898989898989898C
+8E8E8E8E8E8E8E8E8E8C8C898989898989898C8E8F92929292929292929292949494929292949492
+9292928F8E8E89898987858585817F7C74747476797C7F818787898C8E929494999A9A9C9C9C9C9A
+9C9C9C9C9C9C9A9A9A99969494949494949494949494949492929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+85858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676
+767676747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+9292928E8E8E8E8E8E8E8E8C898989898787858585817F7F7C767676797C7F84858789898E8F9292
+929494999A9C9C9C9EA4A4A4A6A6A9AEAEB1B1B6B9B9BBC0C1C6C6C9CCCFD1D3D4D4D7D9D9DCDEDF
+DFDFE1E1E1E4E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E4E1E1E1DFDFDFDFDFDFDCDCD9
+D9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B6B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A6A6A6A6A6A6
+A4A4A19E9E9C9C9C9A9994928F89847F79726C67615F574F747F848992999C9EA6A9AEAEB1B1B1B1
+B1B1B3B1B1B1B1AEAEA9A9A49E9C949289847C746E6A5F57516A727C8187898F9292949494949694
+949494999996949494949494928F898987847F7C76746C6C6A665F5C5755554F51575F616A6C7274
+767C7F7F8484858787878989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8E8E8E8C8989898989
+898989898989878787878787878787878787878787898989898789898989898C8E8E8E8F92929292
+9292929292929494949499999999999A9A9A9A9A9A999494949494949494949492928F8F8E898985
+7F7F878789898E89898989898787878787898989898C8C8E8E8C8C898989898989898989898C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8989898989898C8E8F9292929292929292929292929492929292929292
+928F8F8E8C89898987878585847F7F767C7F7F7C7C7C7F81878989898E8F929494999A9A9C9C9C9A
+9A9C9C9C9C9A9A9A9A99999494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989
+89898989898989898989898989898989898989898787878585858585858585858585858585858585
+8585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976
+767676747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92928F8E8E8E8E8E8E8E8E898989898787858585817F7F7C797676767C7F7F858587898C8F929292
+9294949A9A9C9C9EA1A4A4A6A6A9A9AEB1B1B3B6B9B9BBC0C1C6C6CCCFCFD1D3D4D4D9D9D9DCDCDF
+DFDFE1E1E1E4E4E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E4E4E1E1DFDFDFDFDFDFDFDCD9D9
+D9D9D9D4D4D4D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6
+A4A4A39E9E9C9C9C9A9A9494928987817C74716A66615C556A797F878E949A9EA4A6ABAEB1B1B1B1
+B1B1B1B3B1B1B1AEAEABA9A6A39C96928C877F76726C645F555F6A747F84878C9292929494949494
+949494949994949494949494928F8C898785817F7C74726C6A67615F5C5755544F55595F676C7274
+767C7C7F8485878787878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898C8C898989898987
+89898989878787878787858585878787858587878787898987878787898989898C8E8E8E8F929292
+929292929294949494999A9A9A9A999A9A9A9A9A9A969494949494949494949492928F8E8989877F
+7F848789898E8E8989898987878787878789898989898C8C898989898989898989898989898E8E8E
+8E8E8E8E8E8E8E8E8E8E8989898989898C8E8E8F9292929292929292929292929292929292929292
+8F8E8E898989898787858584817F727F8487817F7F7F7F84878989898E8F929294949A9A9C9C9A9A
+9A9A9C9C9C9A9A9A9999969494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989
+89898989898989898989898989898989898989898987878585858585858585858585858585858585
+8585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79
+767676767474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92928E8E8E8E8E8E8E8E8C8989898987878585817F7F7F7C766C767C7C7F84858789898C8F929292
+9494999A9C9C9C9EA1A4A4A6A6A9A9AEB1B1B6B7B9B9BEC1C1C6C8CCCFCFD1D3D4D4D9D9D9DCDCDF
+DFDFE1E1E1E4E4E6E6E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E4E1E1E1DFDFDFDFDFDFDCDCD9D9
+D9D9D7D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6
+A4A4A39E9E9C9C9C9C9A9994928E89857F79746C6A645F59546C7C818992999CA3A6A9AEAEB1B1B1
+B1B1B1B1B3B1B1B1AEABA9A6A49E9A948F89817C746C6A615954616C767F87898E92929294949494
+94929494949494949494949492928E898787817F7C76726C6C6A665F5D5957554F4F575D616A7274
+76797C7F8187878787878989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898787
+8787898787878787878585858585858584848485878787878787878787898989898C8C8E8F929292
+929292929494949499999A9A9A9A9A9A9A9A9A9A99949494949494949494949492928E8C8987817F
+818789898E8E8C89898987878587878787898989898989898989898989898989898989898C8E8E8E
+8E8E8E8E8E8E8E8E8E8E8989898989898E8E8E929292929292929292929292929292929292928F8F
+8E8C898989878787858585817F7F7F878C87878481818185878989898C8E92929494999A9A9C9A9A
+9A9A9C9C9A9A9A9A9999949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+89898989898989898989898989898989898989898987878585858585858585858585858585858585
+8585858585817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79
+767676767674FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+928F8E8E8E8E8E8E8E8C8989898987878585847F7F7F7C767676767C7C7F85858789898E92929292
+9494999A9C9C9E9EA3A4A4A6A6A9ABAEB1B3B6B7B9BBBEC1C4C6C8CCCFCFD3D4D4D4D9D9D9DCDCDF
+DFDFE1E1E1E4E4E6E6E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E4E4E1E1E1DFDFDFDFDFDFDCD9D9D9
+D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6
+A4A4A39E9E9C9C9C9C9A9A94928F8987817C76726C67615F574F747C878E949C9EA6A6ABAEB1B1B1
+B1B1B1B1B1B3B1B1AEAEA9A6A69E9C949289857C74726C665F575166727C8187898F929292949494
+94929294949494949494949492928F898987847F7C7974716C6A67615F5D5757554F51575F676C74
+76797C7F818787878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989878787
+87878787878787858484858585858584848181848587878787878787878789898989898C8F929292
+92929294949494999A9A9A9C9C9C9C9A9A9A9A9A999494949494949494949492928F8E8989847F7F
+8789898C8E8E8989898787858585878789898989898989898989898989898989898989898E8E8E8E
+8E8E8E8E8E8E8E8E8E8989898989898E8E8E8F92929292929292929292929292928F8F92928F8E8E
+89898989878785858585847F7F818E94928C898787878787878989898C8E8F92929499999A9A9A9A
+999A9A9C9A9A9A999996949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+89898989898989898989898989898989898989898987878585858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+797676767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+928E8E8E8E8E8E8E89898989898987878585817F7F7C7B7674767C7C7F8185878989898F92929292
+9494999A9C9C9E9EA4A4A6A6A6A9ABAEB1B3B6B9B9BBBEC1C6C6C8CCCFCFD3D4D4D4D9D9D9D9DCDF
+DFDFE1E1E1E1E4E6E6E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E1E1DFDFDFDCDCDCDCDCD9D9D9
+D9D4D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6
+A6A4A39E9E9E9C9C9C9C9A9492928F89877F79746E6A67615D556A797F878F9A9EA4A6A9AEAEB1B1
+B1B1B1B1B1B3B1B1AEAEABA9A6A39C99928E877F76746C6A615C55596A747F84878C8F9292949494
+92929292949494949494949492928F8C898785817F7C76726C6C6A66615F5C5757544F555D616A72
+76797C7F8187878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898787
+85878787878785848481848485858484818181818484858787878787878787878989898C8E8F9292
+929292949494969A9C9C9C9C9C9C9C9A9A9A9A99949494949494949494949292928E8C89877F7F84
+8789898E8E8C89898787858585858787898989898989898989898989898989898989898C8E8E8E8E
+8E8E8E8E8E8E8E8E8E89898989898C8E8E8E929292929292929292928F9292928F8E8F8F8F8E8C89
+89898787878585858585817F7F89999A94928C8989878787878989898C8E8F92929494999A9A9A9A
+999A9A9A9A9A9A999994949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989
+89898989898989898989898989898989898989898987878785858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7976767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+8F8E8E8E8E8E8C89898989898987878585847F7F7C7C767476767C7C7F84878789898C8F92929294
+94949A9A9C9C9EA1A4A4A6A6A9A9AEB1B1B3B6B9B9BBC0C1C6C6C8CCCFCFD3D4D4D7D9D9D9D9DCDE
+DFDFDFE1E1E1E4E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E1E1E1DFDFDFDCDCDCDCD9D9D9D9
+D7D4D4D4D4D3D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6
+A6A4A49E9E9E9C9C9C9C9A9994928F8E89847C76726C6A665F5955717C8189949CA3A6A9ABAEAEB1
+B1B1B1B1B1B1B1B1AEAEABA9A6A49E9A949289817C74726A645F57515F6C767F87898C8F92929292
+9292929294949494949494949292928E898987817F7C7674716C6A6A615F5F595757544F575F676C
+74797C7F81878789898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898787
+87858587878585848181818184848181817F7F7F8181848587858484858787878789898C8E8F9292
+929294949494999A9C9C9C9C9C9C9C9C9A9A9A999494949494949494949292928F8E8987817F8187
+89898C8E8E89898787858585858787898989898787878989898989898989898989898C8E8E8E8E8E
+8E8E8E8E8E8E8E8E8989898989898E8E8E8F9292929292929292928F8F8F8F8F8E8E8E8E8E898989
+898787858585858585847F7C89949C9A9A94928E8C8989878789898C8C8E8F9292949496999A9A99
+99999A9A9A9A99999694949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+89898989898989898989898989898989898989898989878787858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C79767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292928F8F
+8E8E8E8E8E8E89898989898989878585847F7F7C7C767676767C7C7F8185878989898E9292929294
+94999A9C9C9E9EA1A4A4A6A6A9A9AEB1B3B6B7B9B9BEC1C1C6C6C9CCCFCFD3D4D4D9D9D9D9D9DCDC
+DFDFDFE1E1E1E4E4E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E1E1E1DFDFDFDCDCDCD9D9D9D9D9
+D4D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6
+A6A4A4A19E9E9E9C9C9C9C9A9492928F89877F7C74726C67615F5754747F87929C9EA4A6A9AEAEAE
+B1B1B1B1B1B1B1B1B1AEABA9A6A49E9C94928C877F76746C67615C554F616C798187898E92929292
+928F8F9292949494949494949492928F8C8987847F7F7C74726C6C6A67615F5D575755544F57616A
+72767C7F81878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898787
+878787858585858581817F81848481817F7F7F7F7F8181848484848184858787878789898E8F9292
+9294949494949A9C9C9C9C9C9C9C9C9C9A9A999494949494949494949292928F8E8987847F818787
+89898E8E8C89878785858585878789898987878787878989898989898989898989898E8E8E8E8E8E
+8E8E8E8E8E8E8E8E89898989898C8E8E8F9292929292928F92928F8E8E8F8E8E8E8E8E8C89898989
+8787858585858585848174878F9A9C9C9A9994928E8989898989898C8E8E8F929292949499999A99
+9999999A9A9A99999494949494949494949494949494949494929292929492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989898989898989898989898989898989878787858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C79767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292928E8E
+8E8E8E8E8E8C898989898989878785847F7F7C7C7C767476767C7C7F8187878989898E9292929494
+94999A9C9C9E9EA3A4A4A6A6A9ABAEB1B3B6B7B9BBBEC1C1C6C8C9CCCFCFD3D4D4D9D9D9D9D9DCDC
+DFDFDFE1E1E1E4E4E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E1E1E1DFDFDCDCDCDCD9D9D9D9D4
+D4D4D3D3D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6A6A6A6
+A6A4A4A19E9E9E9C9C9C9C9A969492928F89847C76746C6A67615D556A767F89949EA4A6A9ABAEAE
+B1B1B1B1B1B1B1B1B1AEAEA9A9A6A39C99928E877F7974726A615F57545767727C8487898E8F9292
+8F8F8E8F92929292929494949492928F8E898787817F7C7674716C6A6A615F5F5D57575554515964
+6C74797F7F85878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989
+878787878787858584818181818484817F7F7F7F7F7F7F818184818181848487878789898C8E8F92
+9294949494999A9C9C9C9C9E9E9C9C9C9A9A9994949494949494929292928F8E8C89858181858789
+898C8E8E89898785858585858787898987878787878787898989898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8989898989898E8E8F9292929292928F8F8F8F8E8E8E8E8E8E8E8E8C8989898987
+8785858585858585816E848C949E9E9C9A9A94948F89898989898C8E8E8E8E8F9292949494999999
+9494999A9A9999969494949494949494949494949494949494949292949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989
+89898989898989898989898989898989898989898989898787878585858585858585858585858585
+858585858585817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C797676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92928E8E8E
+8E8E8E8E8E898989898989898785847F7F7F7C7C767476767C7C7F7F84878989898C8F9292949494
+999A9A9C9C9E9EA4A4A6A6A6A9ABAEB1B3B6B9B9BBBEC1C4C6C8CCCCCFCFD3D4D4D7D9D9D9D9DCDC
+DFDFDFE1E1E1E4E4E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1DFDFDFDCDCD9D9D9D9D9D7D4
+D4D4D3D3D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAE
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6A6A6A6
+A6A4A4A39E9E9E9E9C9C9C9A99949292928C877F7C74726C6A665F5955717C84929C9EA4A6A9ABAE
+AEB1B1B1B1B1B1B1B1AEAEABA9A6A49E9A948F89817C76726C67615C554F596A747C8787898C8F8F
+8F8E8C8E8F929292929294949492928F8E898987847F7C7974726C6C6A67615F5F5C59575554555D
+6A72767C7F818487878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8C8C89898989
+89898787878787878484848484848481817F7F7F7F7F7F7F818181817F81818485878789898E8E8F
+9292949494999A9C9C9C9C9C9C9C9C9C9A9994949494949494929292928F8E8C8987848184878789
+898E8E8C898787858585858787898989878785858787878789898989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E89898989898C8E8F9292929292928F8E8F8F8E8E8E8E8E8E8E8C89898989898987
+85858585858585847F7F89949C9E9E9C9C9A9994928E8C8989898E8E8E8E8E8F9292949494949996
+949496999A9999949494949494949494949494949494949494949492949494929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898989898989898989898989898989898989898987878785858585858585858585858585
+85858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C7C7976FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF928E8E8E8E
+8E8E8E8E8C8989898989898787847F7F7F7C7C76767476767C7C7F8185878989898E8F9292949496
+999A9C9C9C9EA1A4A4A6A6A9A9AEAEB1B3B6B9B9BBC0C1C6C6C8CCCCCFCFD3D4D4D4D9D9D9D9D9DC
+DFDFDFE1E1E1E1E4E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1DFDFDFDCDCD9D9D9D9D9D4D4
+D4D3D3D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAE
+AEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A3A19E9E9E9C9C9C9A9A949292928F89817C76746C6A67615F5751747F89949EA4A6A9A9AE
+AEAEB1B1B1B1B1B1B1B1AEABA9A6A49E9C949289877F7974716A615F57554F5F6A747F878789898E
+8E8C8C8C8E92929292929294949292928E8C8987847F7F7C7674716C6A6A645F5F5F5C5957555557
+5F6C74767C7F818485878789898989898C8E8E8E8E8E8F8F8F8E8E8F8F92928F8F8F8E8E8E8E8E8E
+8C8989898989898787878787878785848481817F7F7F7F7F7F7F7F7F7F7F81818485878789898E8E
+8F92929496999A9C9C9C9C9C9C9C9C9A9A99949494949492929292928F8E89898785818487878989
+8E8E8E89898785858585858789898987878585858587878989898989898E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E89898989898C8E8F9292929292928F8E8E8E8E8E8E8E8C8C8E8C8989898989898787
+85858585858584817C89929AA1A39E9E9C9A9994928F8E8C8C8C8E8E8E8E8E8F9292929494949694
+94949499999994949494949494949494949494949494949494949494949494929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898989898989898989898987878785858585858585858585858585
+8585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E8E8E8E
+8E8E8E8E898989898987878584817F7F7F7C76767476767C7C7F7F85878989898E8F929294949499
+9A9A9C9C9E9EA1A4A4A6A6A9ABAEB1B1B3B7B9B9BBC0C1C6C6C8CCCCCFCFD3D4D4D4D9D9D9D9D9DC
+DEDFDFDFE1E1E1E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D4D4D4
+D3D3D3D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0C0C0C1C0BEBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAE
+AEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A4A39E9E9E9E9C9C9C9A999492929289877F7C74726C6A67615D556A7685929CA1A4A6A9AB
+ABAEAEB1B1B1B1B1B1B1AEAEA9A6A49E9C99928E877F7C76726C67615D575155616C767F87878989
+8C8C89898C8E8F9292929294929292928F8C898787817F7C7974726C6C6A6761615F5F5C5C575555
+57616C72767C7F7F81858787878989898C8E8E8E8E8F8F92928F8F8F92929292928F8F8F8E8F8F8F
+8F8E8C898C8C8989878787878787878785848181817F8181817F7F7F7F7F7F81818485878789898C
+8E92929294999A9C9C9C9C9C9C9C9C9A9994949494949292929292928E8C8987878484878789898E
+8E8E8C898787858585858787898987878785858587878989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C898989898C8E8F9292929292928F8E8E8E8E8E8E8E8C89898C898989898989878785
+8585858585858176878E949C9E9E9E9E9C9C999494928F8E8E8E8E8E8E8E8E8F9292929494949494
+94949494999994949494949494949494949494949494949494949494949494949292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989
+89898989898989898989898989898989898989898989898989878785858585858585858585858585
+8585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8C8989898987878585817F7F7F7C7676747476767C7F7F81858789898C8E9292929494999A
+9A9C9C9C9E9EA3A4A4A6A6A9AEAEB1B3B6B9B9BBBEC1C1C6C8C9CCCCCFCFD3D4D4D4D9D9D9D9D9DC
+DCDFDFDFE1E1E1E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDEDCD9D9D9D9D7D4D4D3
+D3D1D1D1D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0C0C0C0C0BEBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A4A3A19E9E9E9C9C9C9A99949492928F87817C76746C6A6A645F5955747F89949EA4A6A6A9
+A9AEAEAEB1B1B1B1B1AEAEAEABA6A4A19C9A948F89817C79746E6A665F595551576772797F878789
+89898989898C8F8F92929292929292928F8E898987847F7C7B7674726C6C6A6661615F5D5D595757
+575D666C7276797C7F81858787878789898C8E8E8E8E8F929292929292929292929292928F8F9292
+92928F8E8E8E8E8C8989898989878787878784848481818481817F7F7F7F7F7F7F81818487878989
+8C8E8F929294999A9A9A9C9C9C9A9A9A96949494929292929292928F8E8989878585878789898E8E
+8E8C898987848484848787898787878585858587878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E898989898C8E8F9292929292928F8E8E8E8E8E8E8E8989898989898989898787878585
+85858585858474848992949C9E9E9E9E9E9C9A9494928F8F8E8E8E8E8E8E8E8F9292929294949494
+94949494969494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898989898989898989878787858585858585858585858585
+858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E898989898787858584817F7F7C7976747476767C7C7F7F85878789898E8F92929494999A9A
+9C9C9C9C9E9EA4A4A6A6A9ABAEB1B1B3B6B9B9BBBEC1C4C6C8C9CCCCCFCFD3D4D4D4D7D9D9D9D9DC
+DCDFDFDFE1E1E1E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDCDCD9D9D9D9D4D4D4D3
+D3D1D1D1D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6A6A6
+A6A6A4A4A4A39E9E9E9C9C9C9A99949494929289857F7C74726C6A67615F575176818E9AA1A4A6A6
+A6A9AEAEB1B1B1B1B1AEAEAEABA9A6A39E9A949289877F7C76726C67615F5755545F6A747C7F8787
+89898989898C8E8E8F929292929292928F8E89898785817F7C7674726E6C6A676161615F5D5D5957
+57575F676C7274767C7F818587878787898C8E8E8E8E8F9292929292929292929292929292929292
+9292928F8F8F8E8E8E8989898989898787878787878585858484817F7F7F7F7F7F7F818184858787
+89898E8F9292949494999A9A9A9A999694949292929292929292928E8C89878785878789898E8E8E
+8C89898785818181848787878785858585858787878989898989898E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898E8E8F9292929292928F8E8E8E8E8E8E8E898989898989878787878785858585
+8585858585747F878C92999C9C9E9C9C9C9C9A94949292928F8E8E8E8E8E8E8E9292929292949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989898989898787858585858585858585858585
+85858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8C8989898987878585817F7F7F7C7674747676797C7F7F84858789898C8F9292929494999A9A
+9C9C9C9E9EA1A4A4A6A6A9AEAEB1B1B3B7B9BBBBC0C1C6C6C8CCCCCFCFCFD3D4D4D4D4D9D9D9D9DC
+DCDFDFDFE1E1E1E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDCDCD9D9D9D9D9D4D4D4D3
+D1D1D1D1D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C0BEBEBEC0BEBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6A6A6
+A6A6A4A4A4A3A19E9E9E9C9C9A9994949492928E87817C76746C6C6A67615D576C7C87929CA4A6A6
+A6A6ABAEAEB1B1B1B1AEAEAEABA9A6A49E9C96928C87817C76746C6A66615C575457616C747C8187
+8789898989898C8E8F8F9292929292928F8E8C898787817F7C797674726C6C6A666161615F5F5D5C
+5C5D5D61676C7274767C7F818485878787898C8C8E8E8E8F8F929292929292929292929292929292
+92929292928F8E8E8E8E8C8989898989878787878787878787858481817F7F7F7F7F7F8181848587
+8789898C8E8F92929294949494949494929292929292929292928F8E89898785878789898C8E8E8C
+8989878581817F848787878785858585878787878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C89898E8E8F9292929292928F8E8E8E8E8E8E8E89898989898987878787878585858585
+85858585817C84898F949A9C9C9C9C9C9C9C9A94949292928F8F8E8E8E8E8E8E8F92929292949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+89898989898989898989898989898989898989898989898989898787858585858585858585858585
+85858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8C8989898987878585847F7F7F7C7676747476767C7C7F8185858789898E929292929494999A9C
+9C9C9E9E9EA1A4A4A6A6ABAEAEB1B3B6B9B9BBBEC0C1C6C6C8CCCCCFCFCFD3D3D4D4D4D9D9D9D9D9
+DCDEDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D9D4D4D4D3
+D1CFCFCFCFCFCFCFCCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0BBBEBEBEBEBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABA9A6A6A6A6A6A6A6
+A6A6A4A4A4A4A39E9E9E9C9C9A9994949494928F89857F7C74726C6C6A665F5955747F89949EA4A4
+A6A6A9ABAEAEB1B1AEAEAEAEAEA9A6A49E9C9A948E87847F7B74726C6A615F575555576471767F84
+878789898989898C8E8F9292929292928F8E8C898987847F7C7C767472716C6A67666161615F5F5F
+5F5F5F5F666A6C7274767C7F8184848587898989898C8E8E8E8F8F92929292929292929292929292
+8F8F8F92928F8E8E8E8C8C8C8C89898989878787878787878787858481817F7F81817F7F7F818485
+85878789898C8E8F929292949494929292929292929292928F8F8E8C898787858789898C8E8E8E89
+898787817F7F818587878585858587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C8E8E8E9292929292928F8E8E8E8E8E8E8E8989898989878787878785858585858585
+85858481767F84898E94999A9A9C9C9C9C9C9A9994949292928F8E8E8E8E8E8E8F92929292929494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C898989898989898989898989898989898989898989898989898787858585858585858585858585
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8C898989898987858585817F7F7C7976747476767C7C7F7F84858789898E8F9292929294949A9C9C
+9C9E9E9E9EA3A4A4A6A9AEAEB1B1B3B7B9BBBBBEC1C1C6C6C8CCCCCFCFCFD3D3D4D4D4D9D9D9D9D9
+DCDCDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDCDCD9D9D9D9D9D4D4D4D3D3
+D1CFCFCFCFCFCFCCCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABA9A6A6A6A6A6A6A6
+A6A6A4A4A4A4A3A19E9E9C9C9A9A9694949492928C87817C76746C6C6A67615F575179858F9AA3A4
+A4A4A6A9AEAEAEB1AEAEAEAEAEABA6A49E9C9A948F89877F7C76746C6A67615D5755555F6A72797F
+85878787898989898E8E8F929292928F8F8E8C89898785817F7C797674726C6C6A6764616161615F
+5F5F5F6161676A6C7274767C7F8181848787898989898E8E8E8E8E8F8F929292929292929292928F
+8F8E8F8F928F8E8E8C8C89898C8C898989898787878987878787878584818181818181817F818485
+85858787878989898C8E8F9292929292929292929292928F8E8E8E898987858789898C8E8E8E8C89
+8787847F7F7F8485858585858787878989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F929292928F8F8E8E8E8E8E8E8C898989898987878585858585858585858585
+85817F747C7F85898E9294999A9A9C9C9C9A9A999494929292928F8E8E8E8E8E8F92929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898989898989898989898989898787858585858585858585858585
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E89
+898989898987878585847F7F7C7C7674747676767C7C7F81858587898C8E929292929494999A9C9C
+9C9E9E9E9EA4A4A6A6A9AEAEB1B1B3B9B9BBBBC0C1C1C6C6C8CCCCCFCFD1D3D3D4D4D4D9D9D9D9D9
+DCDCDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDCDCD9D9D9D9D9D9D4D4D4D3D3
+D1CFCFCFCFCFCCCCCCCCCCC8C8C6C6C6C6C4C4C4C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3B3B3B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A19E9E9C9C9A9A9994949494928E89857F7C74726C6C6A66615D574F7C87929CA1
+A3A4A6A6ABAEAEB1AEAEAEAEABABA9A6A39E9A94928987817C7974726C6A665F5D575557616C747C
+7F878787878989898C8E8F8F9292928F8F8E8C89898787817F7C79767474716C6A6A676666616161
+6161616164676A6C7274767B7C7F81848587878989898C8E8E8E8E8E8E8F8F8F9292929292928F8F
+8E8E8E8E8F8F8E8C8C898989898C8C89898989898787878789878787858484818484848181818184
+858587858787878989898E8F8F928F8F9292929292928F8E8E8E8C8987878789898C8E8E8E8E8989
+87847F7F7F818585858585878787898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F929292928F8E8E8E8E8E8E8C89898989898787858585858585858585858585
+817F72747C7F84898E92929494999A9A9A9A9A999494929292928F8F8E8E8E8F8F92929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8989898989898989898989898989898989898989898989898787878585858585858585858585
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8989
+8989898987878585847F7F7C7C7676747476767C7C7F7F85858789898E8E929292929494999A9C9C
+9E9E9E9EA1A4A4A6A6A9AEB1B1B1B6B9BBBBBEC0C1C1C6C6C8CCCFCFCFD1D3D3D4D4D4D7D9D9D9D9
+DCDCDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDFDCD9D9D9D9D9D9D9D4D4D4D3D1
+D1CFCFCFCFCFCCCCCCCCC9C8C6C6C6C6C4C1C4C4C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9C9C9A9A9996949494928F8987817C76746C6C6A67645F5C55747F89949C
+9EA1A4A6A9AEAEAEAEAEAEAEABABA9A6A49E9C99928E89847F7C76726E6A67615F5C57555C667276
+7C81858787878989898C8E8F8F8F8F8F8F8E8E89898987847F7F7C797674726C6C6A6A6766666461
+6161616166676A6C727474767C7F7F818487878789898C8E8E8E8E8E8E8E8E8F8F8F9292928F8F8E
+8E8C8C8C8E8E8C8C8989898989898989898989878787878787898787858585848485858484818484
+85878787878585878789898C8E8F8E8F9292929292928E8E8E8E8989878787898C8E8E8E8E8E8989
+877F7C7F818485858585878789898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8F929292928F8E8E8E8E8E8E8C8989878789878785858585858585858585858584
+816A6E74797F8187898E92949494999A9A9A9994949492929292928F8E8E8F8F8F92929292929292
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989898989898989898989898987878585858585858585858585
+8585858585858585858585817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8C8989
+89898787878585847F7F7C7C7C7674747676767C7C7F81858787898C8E8F9292929294949A9A9C9C
+9E9E9E9EA3A4A4A6A6ABAEB1B1B3B6B9BBBBC0C0C1C1C6C6C9CCCFCFCFD1D1D3D4D4D4D4D9D9D9D9
+DCDCDFDFDFDFE1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D4D4D4D4D3D1
+CFCFCFCFCFCCCCCCCCCCC9C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9C9C9C9A9A9994949492928E89857F7C74726C6C6A67615F575176818994
+9C9EA3A6A9A9AEAEAEAEAEAEABA9A9A6A49E9C99949289877F7C7974726C6A66615F5C57575F6A74
+797F81848587878989898C8E8E8E8F8F8E8E8E8989898787817F7C79767674726C6C6A6767676766
+6666646166676A6C727474767C7C7F81848587878989898E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8E8E
+8C8989898C8E8C898989898989898989898987878787878787878787878585858585858585848485
+878787878787878787878989898C8E8F92929292928F8E8E8E8C8987878789898E8E8E8E8E8C8987
+817F7C7F848585858587878989898989898989898C8C8C8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F92929292928F8E8E8E8E8E8C898987878787878485858585858585858584856767
+676A6C72767C7F87898C8F929294949999999694949492929292928F8F8E8F8F9292929292929292
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292928F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8C898989898989898989898989898989898989898989898987878785858585858585858585
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E898989
+898787858585847F7F7F7C7C7674747676767C7C7F7F85858789898E8E8F9292929494969A9C9C9E
+9E9E9E9EA4A4A6A6A9AEAEB1B1B3B7B9BBBBC0C1C1C1C6C6C9CCCFCFCFCFD1D3D3D4D4D4D9D9D9D9
+D9DCDEDFDFDFDFE1E1E1DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEDCD9D9D9D9D4D4D4D4D4D4D3D3D1
+CFCFCFCFCCCCCCC9C9C9C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9C9C9C9A9A9999949492928F8C87817F79746E6C6A6A66615D57517C848C
+949C9EA4A6A9ABAEAEAEAEABABA9A9A6A49E9C9A94928C87817C7C7674716C6A61615F595759616C
+747B7F81848587898989898C8C8C8E8E8E8E8E8C89898787847F7C7C797674726C6C6A6A67676767
+6767676767676A6C71747476797C7F7F818587878789898C8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8C
+89898989898989898989898787898989898787878787878587878787878585858585858585858587
+8787878787878787878989898C8E8F92929292928F8E8E8E8E8989878789898E8E8E8E8E8C898985
+7F7C7F81848485858587878989898989898C8C8E8E8E8E8E8E8E8E8F92928F8E8E8E8E8F8E8E8E8E
+8E8E8E8E8E8F9292929292928E8E8E8E8E8C89898787878785818484848585858585856A6A6A6A6A
+6A6A6C72747C7F8487898E8F929494949494949494949292929292928F8F8F8F9292929292929292
+92949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292928F8F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898989898989898989898989898989878787858585858585858585
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8C898989
+8987878585847F7F7F7C7C797674747676797C7F7F84858789898E8E8E929292949494999A9C9C9E
+9E9E9EA3A4A6A6A6A9AEAEB1B1B3B9B9BBBEC0C1C1C1C6C6C9CCCFCFCFCFD1D3D3D4D4D4D9D9D9D9
+D9DCDCDCDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCD9D9D9D9D7D4D4D4D4D4D4D3D3D1
+CFCFCFCCCCCCC9C8C8C8C8C8C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3B3B1B1B1B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A49E9E9C9C9C9A9A9A9994949492928E89877F7C76726C6C6A67665F59556A7C85
+8C949EA4A6A6A9ABAEAEAEABABA9A9A6A4A19C9A99948F89857F7C7674726C6A6761615F5C575D67
+72747C7F818187878989898989898C8C8E8E8E8C89898787847F7F7C7C767674726C6C6A67676767
+6767676767676A6C6C7274767C7C7F7F818587878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989878787878989878787878787858585878787878585858585858585858787
+8787878989898987898989898E8F8F92929292928F8E8E8E8C89898989898E8E8E8E8E8E8989877F
+7C7F7F8181848585878789898989898E8E8E8F8E8E8E8E8E8E8E8F9292928F8F8F8F8F8F8F8E8E8E
+8E8E8E8F8F9292929292928F8E8E8E8E8C898987878787858181818184858585858474767C7F7972
+6C6C6C7274797F818789898E92929494949494949494949292929292928F8F929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292928F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898989898989898989898989898989878787878585858585858585
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C89898989
+8787858584817F7F7C7C7C7674747676767C7C7F81858587898C8E8E8F929292949499999A9C9C9E
+9E9E9EA4A4A6A6A6A9AEB1B1B1B6B9B9BBBEC0C1C1C4C6C6C9CCCFCFCFCFD1D3D3D4D4D4D9D9D9D9
+D9DCDCDCDCDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D4D4D4D4D4D3D1D1
+CFCFCFCCCCC9C8C8C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B9B7B7B9B9B7B6B3B3B3B3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A19E9E9C9C9C9A9A9999949492928F8C87817F79746E6C6A6A67615F57546C7C
+878E999EA4A6A9A9ABAEAEABABA9A9A6A6A39E9C9A949289877F7C7C7674726C6A6761615F59595F
+6A72767C7F81848787878989898989898C8E8E8C8989878785817F7C7C79767472716C6A6A6A6A6A
+6A6A6A6767676A6C6C7274767C7C7F7F81878787878989898C8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898987898989898987878787878787878787878785858585858787858585858585858585878787
+878789898989898989898C8E8E8F92929292928F8E8E8E8E89898989898C8E8E8E8E8E898987817C
+7C7F7F7F818587878789898989898C8E8F8F8F8E8E8E8E8E8E8F8F9292929292929292928F8E8E8E
+8E8E8F92929292929292928E8E8E8E8C89898787858584817F7F7F8485858585847F848789857C74
+7271717274767C818587898E92929294949494949494929292929292928F92929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F92928F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C89898989898989898989898989898989898989898989898787878585858585858585
+85858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+87878585817F7F7F7C7C7674747476767C7C7F7F84858789898C8E8E8F9292949494999A9A9C9C9E
+9E9EA3A4A6A6A6A9ABAEB1B1B1B6B9B9BBBEC0C1C1C4C6C6C9CCCCCFCFCFD1D1D3D4D4D4D7D9D9D9
+D9DCDCDCDCDCDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEDCD9D9D9D9D9D4D4D4D4D4D4D3D1D1CF
+CFCFCFCCCCC9C8C8C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B7B6B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A19E9E9C9C9C9A9A9A9994949492928E89877F7C76726C6C6A6A67615D554F72
+7F87929CA4A6A6A9A9ABABABA9A9A9A6A6A49E9C9A94928E87817F7C7674726C6A6766615F5F595D
+616C74767C7F81848787878789898989898C8E8E8989878787847F7C7C7C797674726C6C6A6A6A6A
+6A6A6A6A6A6A6A6C6C727476797C7F7F84878787898989898C8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898787878789898787878787878787878787878584858585858585858585858585858587878787
+87898989898989898C8E8F8F8F9292929292928F8E8E8E8C898989898C8E8E8E8E8E898987877F7C
+7F7F7F81858787878989898989898E8F9292928F8E8E8F8F8F8F929292929292929292928F8F8E8E
+8F8F92929292929292928F8E8E8E8C89898787858584817F7F7F818585858481878C929492877F79
+7474727476797C7F848789898F929292949494949492929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F92928F8F8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898987878785858585858585
+8585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898987
+878585847F7F7F7C7C797674747676767C7C7F8185878789898E8E8F9292949494999A9A9C9C9E9E
+9E9EA4A4A6A6A6A9AEAEB1B1B3B6B9B9BBBEC1C1C1C6C6C6C9CCCCCFCFCFCFD1D3D3D4D4D4D9D9D9
+D9D9D9D9DCDCDEDFDFDFDFDFDFDFDFDFDFDFDEDEDCDCDCDCD9D9D9D9D9D7D4D4D4D4D4D3D3D1CFCF
+CFCFCCCCCCC8C8C6C6C6C8C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B7B6B6B6B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A4A4A4A4A4A4A4A4A19E9E9C9C9C9C9A9A9999949492928F8C87817F7974726C6C6A6A615F595561
+767F89949EA4A6A6A9A9A9ABA9A9A9A6A6A49E9C9C99948F89877F7C7C7674726C6A6766615F5D57
+5F676C74767C7F818587878787878989898C8E8E898989878784817F7C7C79767474716C6A6A6A6A
+6A6A6A6A6A6A6A6C6C727274767C7F7F848787898989898C8C8E8E8E8E8E8E8E8E8E8E8C8C898989
+89878787878787878787878785848484848585858484848485858584858585858585858787878787
+89898989898C8E8E8F8F9292929292929292928F8F8E8E898989898C8E8E8E8E8E8C8989877F7C7C
+7F7F81858787898989898989898C8F929292928F8F8F9292929292929292929292929292928F8F8F
+929292929292929292928F8E8E8C898987878585847F7F7F7F8184848484818C929A9E9E9489877C
+76747474767C7C7F818787898E8F9292929294949492929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787858585858585
+858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898987
+858585817F7F7F7C7C7674747676767C7C7F7F81858789898C8E8E9292929494999A9A9A9C9C9E9E
+9EA1A4A6A6A6A9A9AEAEB1B1B3B6B9B9BBBEC1C1C1C6C6C6C9CCCCCFCFCFCFD1D3D3D4D4D4D9D9D9
+D9D9D9D9D9DCDCDFDFDFDFDFDFDEDEDCDCDCDCDCDCDCDCDCD9D9D9D9D9D4D4D4D4D4D3D3D1CFCFCF
+CFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9BBB9B9B9
+B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6
+A4A4A4A4A4A4A4A4A39E9E9C9C9C9C9C9A9A9994949492928E89877F7C7672716C6C6A67615F5754
+6679818E9AA4A4A6A6A9A9A9A9A9A9A6A4A4A39E9C9A94928C87817F7C7674726E6A6A6766615F5D
+5D616A7174797C7F818587878787878989898C8E8C8989878784817F7C7C7C797674726E6C6A6A6A
+6A6A6A6A6A6A6A6C6C717274767C7F81848787898989898C8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898787878787878787878584848181818181848481818184858484848485858585878787878789
+898989898C8E8F8F9292929292929292929292928F8E8C8989898C8E8E8E8E8E8E898987847C7C7F
+7F81858787898989898989898C8E8F92929292929292929292929292929292929292929292928F92
+9292929292929292928F8E8E8C898987878585847F7F7F7F7F818181817F9292969CA49E998E8781
+7C797676797C7C7F7F8487898C8F8F92929294949292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989878787878585858585
+858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898787
+8585847F7F7F7C7C767674747676767C7C7F7F84878989898C8E8F9292949496999A9A9A9C9C9E9E
+9EA4A4A6A6A6A9ABAEB1B1B1B3B6B9B9BBBEC1C1C4C6C6C6CCCCCCCFCFCFCFD1D3D3D4D4D4D9D9D9
+D9D9D9D9D9D9DCDCDFDFDEDCDCDCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D4D4D4D3D3D3D1CFCFCFCF
+CFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B6B6B3B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACABABABABABABABABABABABABA9A9A9A9A6A6A6A6A6
+A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9A9A9999949492928F8C87817C797472716C6C6A645F5D55
+556C7C87929CA4A4A6A6A6A6A9A9A6A6A4A4A39E9C9A94928F89847F7C7C7674726C6A6A6764615F
+5D5F616C7274797F7F818485878787898989898C8C8989878785817F7F7C7C79767674726C6C6A6A
+6A6A6A6A6A6A6A6C6E72727474797C7F8487878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E89898989
+8989878787858587878785848481817F7F7F818181817F8181848481818184858585858787878989
+8989898C8E8F8F929292929292929294929292928F8E8989898C8E8E8E8E8E8E8C8987857F7C7C7F
+818787898989898989898C8E8E8F9292929292929292929292929292929292929292929292929292
+9292929292929292928F8E8C898989878585847F7F7F7F7F7F7F7F817F8994949CA3A6A19A928987
+7C7C7C7B7C7C7F7F7F818789898E8F92929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8F92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8E8E8E8E8E8E8E8F8F8F928F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898787878585858585
+85858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898785
+8584817F7F7C7C797674747676767C7C7F7F8185878989898E8F9292929494999A9A9A9C9C9C9E9E
+A1A4A6A6A6A9A9AEAEB1B1B1B3B6B9B9BBC0C1C1C4C6C6C8C9CCCCCFCFCFCFD1D3D3D4D4D4D7D9D9
+D9D9D9D9D9D9DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D4D4D4D3D3D3D1CFCFCFCF
+CFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B3B3B3B3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEB1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6
+A4A4A4A4A4A4A4A4A39E9E9E9E9C9C9C9C9A9A9994949492928E89847F7C7474726E6C6A67615F59
+555C747F89949EA4A6A6A6A6A6A9A6A6A4A4A39E9E9C9994928987817F7C7674726E6C6A6A676161
+5F5F61676E72767C7F818184848587878989898C8C898987878584817F7C7C7C79767472726C6C6C
+6C6C6C6C6C6C6C6C6E72727274767C7F818587878989898E8E8E8E8E8E8F8F8E8E8E8E8E8C898989
+89898987878787858585858584817F7F7F7F7F7F817F7F7F7F8181817F8181848585858787898989
+89898C8E8E8F929292929494949494949492928F8E8C89898C8E8E8E8E8E8E8E898787817C7C7F81
+8587898989898989898C8E8E8E8F9292929292929292929292929292929292929292929292929292
+92929292929292928F8E8C898989878785847F7F7F7F7F7F7F7F7F7F849C9C9C9EA6A6A39C948987
+817F7C7C7C7C7F7F81818587898C8E8F929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F8E8E8E8E8E8F8F8F9292928F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898987878785858585
+8585858585858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989878585
+85817F7F7F7C7C767674767676797C7C7F7F84878989898C8E929292929494999A9A9A9C9C9E9E9E
+A4A4A6A6A9A9ABAEAEB1B1B3B6B7B9B9BBC0C1C1C6C6C6C8C9CCCCCCCFCFCFD1D1D3D4D4D4D4D9D9
+D9D9D9D9D9D9D9DCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D9D9D4D4D4D4D4D3D3D3D1CFCFCFCFCF
+CFCCCCCCC8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A39E9E9E9E9C9C9C9C9A9A9999949492928E8987817C767472726E6C6A64615F
+57516176818E99A1A4A6A6A6A6A6A6A6A6A4A49E9E9C9A94928E87847F7C7C7674726C6C6A6A6761
+615F61666A7174767C7F7F8181848487878989898C898987878784817F7F7C7C7C76767472726C6C
+6C6C6C6C6C6C6C6C7172727274767C7F7F8587878989898C8E8E8E8E8F8F8F8F8F8E8E8E8E8C8989
+89898989878787878785858584817F7F7F7F7F7F7F7F7F7F7F7F817F7F7F7F818484858787878989
+898C8E8E8F929292929494949494949492928F8E8E8C898C8E8E8E8E8E8E8E8C8987847F7C7C7F84
+8787898989898989898C8E8E8F929292929292929292929292929292929292929292929292929292
+929292929292928F8E8C898989898785847F7F7F7F7F7F7F7F7F7F819AA4A4A4A4A9A6A49E948E89
+87817F7C7F7F7F7F8181848789898E8F8F9292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8F8F8F8F8E8E8E8E8F8F8F929292928F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787858585
+858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8987858585
+847F7F7F7C7C767674767676767C7C7F7F8185878989898E8F9292929294969A9A9A9A9C9C9E9EA3
+A4A6A6A6A9A9AEAEAEB1B1B3B6B7B9B9BBC0C1C1C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9DCDCDCDCDCD9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D1CFCFCFCFCFCF
+CFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A49E9E9E9E9E9C9C9C9A9A9A99969494928F8C87847F7C767472726C6A676161
+5C574F6A7C87929AA4A4A4A4A4A6A6A6A6A4A4A19E9C9A94928F8987817F7C7674726E6C6C6A6767
+61616161676C7274767C7F7F7F8181848789898989898989878784817F7F7F7C7C7976747472726C
+6C6C6C6C6C6C6C6C7172727474767C7F7F8487878789898C8E8E8E8F8F929292928F8F8F8E8E8C8C
+898989898989878787878785858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181848587878989
+898E8E8F8F9292929294949494949492928F8E8E8E8E8C8E8E8E8E8E8E8E8E8987847F7C7C7F8185
+878989878789898989898C8E8E8F9292929292929292929292929292929292929292929292929292
+92929292928F8F8E8E898989898787847F7F7F7F7F7F7F7F7F7C879AA6A4A6A6A6ABA6A49E9A9289
+8784817F7F7F7F7F8184848787898E8E8F9292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E
+8F8F8F928F8F8E8E8E8F8F9292929292928F8F8F928F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989878787878585
+85858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8785858584
+7F7F7F7C7C7C7676767676767C7C7C7F7F84878789898C8E929292929494999A9A9A9A9C9C9E9EA4
+A4A6A6A6A9ABAEAEB1B1B1B3B6B9B9BBBBC0C1C4C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D4D4D4D7D9
+D9D9D9D9D9D9D9DCDCD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D4D4D4D4D4D4D3D3D1CFCFCFCFCFCF
+CFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEAEB1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A4A19E9E9E9E9C9C9C9A9A9A9A999494928F8C89877F7C79747472716C6A6761
+5F595457727F89929CA4A4A3A3A4A4A6A6A4A4A19E9E9C9994928C87847F7C7C7674726E6C6C6A6A
+67646161666A6C7274797C7F7F7F81818587898989898989878784817F7F7F7C7C7C797674747272
+6E6C6C6C6C6C6C6C7172747474767C7F7F818587878989898E8E8E8F929292929292929292928F8E
+8E8E8E8E8C898989898989878787878784817F7F7F817F7C7C7F7F7F7F7F7F7F7F81818487878989
+898C8F8F9292929294949494949492928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C89857F7C7C7F7F8487
+878987878789898989898E8E8E8F8F92929292929292929292929292929292929292929292929292
+92929292928E8E8E8C8989898787847F7F7F7F7F7F7F7F7F7C8794A3A6A4A6ABAEAEA6A49E9C928E
+898784817F8181818184848587898E8E8F8F92929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8F8F8F8E8E8E8E8E8E
+8F8F9292928F8E8E8F8F8F929292929292928F9292928F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898787878585
+85858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585847F
+7F7F7C7C7C767676767676767C7C7F7F8185878989898E8F929292929494999A9A9A9C9C9E9EA1A4
+A4A6A6A9A9ABAEAEB1B1B1B3B6B9B9BBBBC0C1C4C6C6C6C8C8C9CCCCCFCFCFCFD1D3D3D4D4D4D4D7
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCC
+CCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9A9A9A9A99949492928E8987847F7C767472726C6A6766
+615F574F5C747F89949CA19E9EA1A4A4A6A4A4A19E9E9C9A94928F8987817F7C797472726E6C6A6A
+6A67666461676A6C72747C7C7F7F7F7F818787878989898987878584817F7F7F7C7C797676747472
+726E6E6E6E6E71717172747476767C7F7F818587878989898E8E8F92929292929292929292929292
+8F8F8F8F8F8E8C8989898989878787878785818181817F7F7C7C7F7F7F7C7C7F7F7F7F8184878789
+898C8E8F92929294949494949292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8987817F7C7C7F818787
+8987878789898989898C8E8E8E8F9292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8989898787847F7F7F7F7F7F7F7F7C7C84929CA9A9A6A6ABAEAEA6A49E9C9492
+89878784818184848184858787898E8E8E8F92929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292928F8E8E8E8E8E8F8F8F8F8E8E8E8E8F
+8F8F929292928F8F8F8F9292929292929292929292928F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989898989898989898987878785
+8585858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585847F7F
+7F7C7C7C767674767676767C7C7C7F7F85858789898E8E8F9292929294949A9A9A9A9C9C9E9EA3A4
+A4A6A6A9A9AEAEAEB1B1B3B6B7B9B9BBBBC0C1C4C6C6C6C6C8C9CCCCCCCFCFCFD1D1D3D4D4D4D4D4
+D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D4D3D1CFCFCFCFCCCCCCCC
+CCCCCCC8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9A9A9A9A9A949494928F8989877F7C79747472716C6A67
+665F5C554F6179848C949C9E9E9EA1A4A4A4A4A39E9E9C9C9994928987847F7C7C767472726C6C6A
+6A6A6A6766666A6C7174767C7C7F7F7F7F848787878789898787858481817F7F7C7C7C7976747474
+72727171717171727272747476767C7F7F818587878789898E8F8F92929292949292929294949292
+9292929292928F8E8E8E8E8C89898989898787848484847F7F7C7F7F7F7C7C7C7F7F7F7F81858789
+89898E8F929292949494949292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8987817F7C7C7F7F848787
+87858787898989898C8E8E8E8E8F9292929292929292929292929292929292929292929292929292
+929292928E8E8E8C89898787847F7F7C7C7F7F7F7F7C7C7C929CA6AEA9A6A9ABAEAEA9A49E9C9992
+8E878787848585858585878787898C8E8E8E8F929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292928F8E8E8E8F8F8F928F8E8E8E8F8F
+8F92929292928F8F8F92929292929292929292929292928F8F8F928F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787
+858585858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8584817F7F
+7C7C7C76767676767676797C7C7F7F84858789898C8E8E929292929494999A9A9A9C9C9C9E9EA3A4
+A6A6A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBC0C1C4C6C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D4D4D4D4
+D4D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D4D4D4D4D4D4D3D1D1CFCFCFCFCCCCCCCC
+CCCCC9C8C6C6C6C6C4C4C4C4C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A3A39E9E9E9E9E9E9C9C9A9A9A9A9A969494928F8C8987847F7C767472726E6A6A
+67615F5951516A7C878F949C9C9C9E9EA4A4A4A39E9E9C9C9A94928E8987817F7C79747472726C6C
+6C6C6A6A6766676A6C7274767B7C7C7F7F818587878787898787858584817F7F7F7C7C7979767674
+747272727272727272727474767C7C7F7F818787878789898E8F9292929294949494929494949494
+929292929292928F8F8F8F8E8E8989898989878787878784817F7F7F7F7F7C7C7F7F7F7F7F818487
+89898C8E8E8E8F92929292928F928E8E8E8E8E8E8E8E8E8E8E8E8E8C8989847F7C7C7F7F81878787
+85878789898989898C8E8E8E8F929292929292929292929292929292929292929292929292929292
+9292928F8E8E8C89898787847F7F7C7C7F7F7F7C7C7C7C899AA4AEB1AEA6A9AEAEAEA9A49E9C9994
+8F898987878787878787878787898C8E8E8E8F929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292928F8F8E8F8F8F92928F8F8E8E8F8F
+929292929292928F8F9292929292929292929292929292928F9292928F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898787
+87858585858585858585858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85817F7F7F
+7C7C79767676767676767C7C7C7F8185858789898E8E8F929292949494999A9A9C9C9C9C9E9EA4A4
+A6A6A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBC0C1C4C6C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D3D3D4D4
+D4D4D4D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCFCCCCCCCC
+CCCCC9C8C6C6C6C6C4C1C1C4C4C1C1C1C0C0C0C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A3A19E9E9E9E9E9E9C9C9C9A9A9A9A99949492928E8989877F7C79747472716C6A
+6A66615D575157727C878F949C9C9C9E9EA3A4A39E9E9C9C9A94928F8987817F7C7C76747472726C
+6C6C6C6C6A67666A6A6C7274767C7C7C7F7F818587878787878787858481817F7F7C7C7C7C797676
+747472727272727272727476767C7C7F7F848787878989898E929292929294949494949494949494
+949494949292929292928F8F8E8E8C8989898989878787878581817F7F7F7F7C7F7F7F7F7F7F8184
+8789898C8C898C8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989877F7C7C7C7F7F84878785
+8587878989898989898C8E8F8F929292929292929292929292929292929292929494949292929292
+9292928F8E8C89898787847F7C7C7C7F7F7F7C7B7979819AA4AEB7B1AEA9A9AEAEAEA9A6A19C9A94
+928C898987878787878787878789898E8E8E8F929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292928F8E8F8F929292928F8E8F8F8F
+92929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898787
+8787858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF847F7F7F7C
+7C79767676767676767C7C7C7F7F84858789898C8E8E8F929294949494999A9C9C9C9C9E9EA1A4A4
+A6A6A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBC0C1C4C6C6C6C6C8C8C9CCCCCFCFCFCFD1D3D3D3D3D3D4
+D4D4D4D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D3D3D3D1CFCFCFCFCFCFCCCCCCCC
+CCCCC9C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B7B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A99949492928E8C8987847F7C767472726E6C
+6A67615F5C554F5F747F898F949A9C9C9E9EA3A39E9E9C9C9C9994928C8985817F7C797474747272
+6C6E6E6C6C6A67676A6A6C7274767C7C7F7F7F8184858787878787858584817F7F7F7C7C7C7C7976
+767474727272727272727476767C7C7F7F848787898989898E929292929494949494949494949494
+9494949494949292929292928F8F8E8C8C8989898987878787858481817F7F7F7F7F7F7F7F7F7F7F
+81878789898989898989898989898C8E8E8E8E8E8E8E8E8E8E8C898987817F7C7C7F7F8185858585
+878789898989898989898C8E8F8F9292929292929292929292929292929494949494949292929292
+92928F8E8989898787847F7C7C7C7C7C7C7C7976767692A4ABB4B9B1AEABA9AEAEABA9A6A39C9A94
+928E898989898989878787878989898E8E8E8E929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292928F8F8F8F92929292928F8F8F92
+92929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989898989898989898987
+878785858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF817F7F7F7C
+7C76767676767676767C7C7F7F8185878789898E8E8E929292949494969A9C9C9C9C9E9E9EA3A4A4
+A6A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBC0C1C1C6C6C6C6C6C8C9CCCCCCCFCFCFD1D1D3D3D3D3D3
+D4D4D4D4D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D3D3D3D1CFCFCFCFCFCFCCCCCCC9C9
+C9C9C8C8C6C6C6C6C1C1C1C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B7B7B7B7B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A19E9E9E9E9E9E9E9C9C9C9A9A9A9A99949492928F8E8989877F7C79747472716C
+6C6A66615F57555566747F878E949A9C9C9E9EA3A19E9E9C9C9A94928E8987847F7F7C7674747472
+727171716C6C6A6A6A6A6C717474767C7C7F7F818184848587878785858584817F7F7F7C7C7C7C79
+767674747472727474747476797C7C7F81848787898989898E929292949494949494949494949494
+949494949494949292929292928F8E8E8E8C8989898987878787858481817F7F7F7F7F7F7F7F7F7F
+7F81848787878787878787898989898C8E8E8E8E8E8E8E8E8C898987847F7C7C7F7F7F8484858585
+878989898989898989898C8E8E8F9292929292929292929292929494949494949494949492929292
+92928F8989898787847F7C7C7C7C7C7C7C767676768EA1A9B4BCB9B1B1AEA9ABABABA9A6A39C9A99
+94928E8C89898989898787898989898E8E8E8E8F9292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949492929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292928F8F9292929292928F8F9292
+9292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989
+87878785858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7C7C
+76767676767676767C7C7C7F7F8585878989898E8E8F929294949494999A9C9C9C9E9E9E9EA3A4A6
+A6A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBC0C1C1C4C6C6C6C6C8C9CCCCCCCFCFCFCFD1D3D1D1D1D3
+D3D4D4D4D4D9D7D4D4D4D9D9D9D9D9D9D4D4D4D4D4D3D3D3D3D3D3D3D1CFCFCFCFCFCFCCCCCCC8C8
+C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBEBEC0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B6B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3
+B3B1B1B1B1B1B1B1B1B1AEAEB1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A9A9A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949492928F8C8987847F7C767472726E
+6C6A6A615F5F5755576A767F878F949A9C9C9E9EA19E9E9C9C9A94928E898785817F7C7976747474
+72727272716C6C6A6A6A6A6C717474797C7C7F7F7F7F818485878785858584817F7F7F7C7F7C7C7C
+797676747474747474747476797C7C7F818487878989898C8E929292949494949494949494949494
+949494949494949492929292928F8E8E8E8E8C898989898987878787848481817F7F7F7F7F7F7F7F
+7F7F7F7F81848587878787898989898E8E8E8E8E8E8E8E8C898987877F7C7C7C7F7F818184858587
+87898989898989898989898C8E8F9292929292929494949494949494949494949494949494929292
+928F8989898787847F7C7C7C7C79797976767676899CABAEB7C1BCB1B1AEA9ABABABA9A6A49E9C99
+94928F8E8C8989898989898989898C8E8E8E8E8F9292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949492929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8E8E8E8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989
+8987878785858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C7C7C
+76767676767676797C7C7F7F8485878989898C8E8F92929294949494999A9C9C9E9E9E9EA1A4A4A6
+A6A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBBEC0C1C1C4C6C6C6C6C8C8CCCCCCCFCFCFCFD1D1D1D1D1D3
+D3D4D4D4D4D4D4D4D4D4D4D9D7D7D4D4D4D4D3D3D3D3D3D1D1D1D1D1CFCFCFCFCFCFCFCCCCC9C8C8
+C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0BEBEBEBEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B3B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949492928F8E8989877F7C7976747271
+6C6C6A67615F5D57555C6A7C818992999A9C9C9C9E9E9E9C9C9A96928F8C8987847F7F7C76767474
+7472727272716C6C6A6A6A6A6C727476797C7C7F7F7F7F8184848585858584817F7F7F7F7F7F7C7C
+7C7B76767474747474747476797C7C7F818487878989898C8E8F9292949494949494949494949494
+94949494949494949292929292928E8E8E8E8C89898989898987878787858481817F7F7F7F7F7F7F
+7F7F7F7F7F8181848787878789898C8E8E8E8E8E8E8E8E89898787817C7C7C7F7F7F818185858787
+878789898989898989898E8F8F929292949494949494949494949494949494949494949492929292
+8F8C89878787817F7C7C7C7976767676767676879AA9B4B7BEC6BEB3B1AEABA9A9ABA6A6A49E9C9A
+9694928F8E8C89898989898989898C8E8E8E8E8F9292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494929292949292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8F8E8E8F8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989
+8989878785858585858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C7C76
+767676767676767C7C7C7F818585878989898E8F92929294949494969A9A9C9C9E9E9E9EA3A4A4A6
+A6A9A9ABAEAEB1B1B3B3B6B9B9B9BBBBBEC0C1C1C4C6C6C6C6C8C8C9CCCCCFCFCFCFD1D1D1CFD1D3
+D3D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D1D1D1D1D1D1D1D1CFCFCFCCCCCCCCCCCCCCC8C8C8
+C8C8C8C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9BBB9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9494949292928F8C8987847F7C76747272
+6E6C6A6A64615F5C57555F717C818992999A9A9C9C9E9E9C9C9A9994928E898785817F7C79767674
+747472727272726C6C6A6A6A6A6C7274767C7C7C7C7C7F7F81818485858484817F7F7F7F7F7F7F7F
+7C7C79767674747474747476797C7C7F8185878789898C8E8F8F9292929494949494949494949494
+949492929294949492929292928F8F8E8E8E8E898989898989898787878785848481817F7F7F8181
+7F7F7F7F818184848787878989898E8E8E8E8E8E8E8E8C898787817C7C7C7F7F7F7F7F8485858787
+87878989898989898C8E929292929292949494949494949494949494949494949494949492929292
+8E89878785817F7C7C7C76767674767674746694A4B4BCBEC4C6BEB3B1AEABA9A9A9A6A6A49E9C9A
+999492928F8E8C8989898989898C8E8E8E8E8E8F9292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494929292949492929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F8E8F8F8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989
+898987878585858585858585858585858585858585858585858584817F7F7F817F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7C7C7976
+7676767676767C7C7C7F7F8585878989898C8E8F92929294949494999A9C9C9E9E9E9E9EA3A4A4A6
+A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBC0C1C1C1C1C6C6C6C6C6C8C9CCCCCCCFCFCFCFCFCFCFD1D1
+D3D3D3D3D4D4D4D3D3D4D4D4D4D4D4D4D4D3D1D1D1D1D1D1D1D1CFCFCFCFCCCCCCCCCCCCC9C8C6C6
+C6C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9694949492928F8E898987817C79767472
+716C6C6A6761615F5C575761727C848992949A9A9C9C9E9C9C9A9994928E898787847F7F7C7B7976
+74747472727272726E6C6A6A6A6A6E72747679797C7C7C7C7F81818484848481817F7F7F7F7F7F7F
+7C7C7C797674747474747476797C7F7F81878789898C8E8F92929292929494949494949494949494
+9494929292929492929292928F8F8E8E8E8E8E8C898989898989898987878787858481817F818181
+81817F818184858787878989898C8E8E8E8E8E8E8E8E898987857F7C7C7C7F7F7F7F818484858587
+878989898989898E8F9292929292929494949494949494949494949494949494949494929292928E
+89878785817F7C7C7B76767474767674747692A1B1C1C4C6CCCBBEB6B1AEABA9A9A9A6A6A4A19C9C
+9A949292928E8E8C898989898C8E8E8E8E8E8E8F9292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949294949492929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989
+89898787878585858585858585858585858585858585858585858584817F8181817F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7676
+7676767676797C7C7F7F818585878989898E8F9292929294949494999A9C9C9E9E9E9E9EA4A4A6A6
+A6A9ABAEAEB1B1B1B3B6B7B9B9BBBBBBC0C1C1C1C1C4C6C6C6C6C8C9CCCCCCCFCFCFCFCFCFCFCFD1
+D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D3D3D1CFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCC9C8C6C6C6
+C6C6C6C6C6C4C4C1C1C1C0C0C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B9B9B9
+B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3B3B3B1B1B1B1B1
+B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A999494949292928F8C8987847F7C767472
+726E6C6A6A66615F5F59555967747F878C9494999A9C9C9C9C9A9994928F89898785817F7C7C7C79
+767674747474747272716C6C6A6A6C72727474767679797C7C7F7F8181848181817F7F7F7F7F7F7F
+7F7C7C797676747474767676797C7F7F81878989898E8F9292929292929494949494949494949494
+94929292929292929292928F8F8E8E8C898C8E8C8989898989898989898787878785848481818484
+8484818184858787878989898C8E8E8E8E8E8E8E8E8C8987877F7C7C7C7F7F7F7F81818181848587
+87898989898C8E8F92929292929294949494949494949494949494949494949494949492928F8F89
+898787817F7C7C79767674747474747476899CACBCC8CCCFD1CCC1B7B1AEAEA9A9A9A6A4A4A39E9C
+9A999492928F8F8E8C8C898C8E8E8E8F8E8E8E8E9292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8F9292928F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989
+898989878785858585858585858585858585858585858585858585858481818184817F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C767676
+76767676797C7C7C7F7F8485878789898C8E9292929294949494999A9A9C9C9E9E9E9EA1A4A4A6A6
+A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBBEC0C1C1C1C1C4C6C6C6C6C8C8CCCCCCCCCFCFCFCFCFCFCFD1
+D3D3D3D3D3D3D1D1D3D3D4D4D4D4D4D3D3D1CFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCC8C8C6C6C6
+C6C6C6C6C6C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7
+B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1
+B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949292928E898987817F7B7674
+72726C6C6A6766615F5D57575D6A767F878E9494999A9C9C9C9A9994928F8C898987847F7F7C7C7C
+79767674747474747272716C6C6C6C6C72727474747676767C7C7F7F81818181817F7F7F7F7F7F7F
+7F7C7C7C7976747676767676797C7F7F818789898C8E8F9292949492929494949494949494949494
+929292929292929292928F8F8E8E8C8989898C8E8989898989898989898987878787878584848485
+8787858485878787878989898E8E8E8E8E8E8E8E8C898987817C7C7C7F7F7F7F7F81818181848787
+878989898C8F8F92929294949494949494949494949494949494949494949494949492928F8E8989
+878784817C7C79767674747474747476879AA9B9C8D1D4D4D4CCC4B9B1AEAEA9A9A9A6A4A4A39E9C
+9A999494928F8F8F8E8C8C8C8E8E8E8F8F8E8E8E8F92929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989
+89898987878585858585858585858585858585858585858585858585858481848484817F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C79767676
+767676767C7C7C7F7F818585878989898E8F9292929294949499999A9C9C9E9E9E9E9EA3A4A4A6A6
+A9A9AEAEAEB1B1B3B3B7B9B9B9BBBBBEC0C0C1C1C1C4C6C6C6C6C8C8C9CCCCCCCCCFCFCFCFCFCFD1
+D3D1D1D1D1D1D1D1D1D3D3D3D3D3D3D3D1CFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCC8C8C6C6C6C6
+C6C6C6C6C1C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1
+B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949292928F898987847F7C7674
+7272716C6C6A6766615F5D57575F6C767F878F9494999A9C9C9A999492928E89898787817F7F7C7C
+7C79767674747474727272716C6C6C6C7171727274747476767C7C7F7F7F81817F7F7F7F7F7F7F7F
+7F7F7C7C7C76767676767676797C7C7F8187898C8E8E8F9294949494949494949494929294949492
+929292928F8F9292928F8F8E8E8C89898989898C8989898989898989898989898787878787858587
+87878787878787878989898C8E8E8E8E8E8E8E8C898987817F7C7C7F7F7F7F7F7F7F7F7F81858787
+8787898E8F929292929494949494949494949494949494949494949494949494949492928F8C8989
+8787817C7C797674747474747476767F94A6B7C4D4D4D4D4D3CCC4B9B1B1AEA9A9A6A6A4A4A39E9C
+9C9A94949292928F8F8E8E8E8E8E8F8F8F8E8E8E8F92929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989
+89898987878585858585858585858585858585858585858585858585858584848584817F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C76767676
+7676767C7C7C7F7F7F8485878789898E8E8F92929292949494999A9A9C9C9E9E9E9E9EA3A4A6A6A6
+A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBBBC0C0C1C1C1C1C6C6C6C6C6C8C9CCCCCCCCCCCFCFCFCFCFD1
+D1D1D1D1D1CFCFCFCFD1D3D3D3D1D1D1D1CFCFCFCFCFCFCFCFCFCFCCCCC9C9C9C9C9C8C6C6C6C6C6
+C6C6C6C4C1C1C1C1C1C0C0BEBEBEC0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEB1
+B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A99949494949492928F8C898987817F7C76
+7472726C6C6A6A6761615F5D575C6172798189929494999A9A9A999492928F8989898784817F7F7C
+7C7C79767674747474727272726C6C6C6C6E6E717272747474767C7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C79767676767676767C7C7F818789898E8F8F9294949494949494949492929292929492
+9292928F8F8F8F92928F8E8E8C898989898989898989898989898989898989898989878787878787
+87878787878787898989898C8E8E8E8E8E8C89898987847F7C7C7C7F7F7F7F7F7F7F7F8184878787
+87898E92929292929294949494949494949494949494949494949494949494949492928F8C898987
+87847F7C797474727274747676767C92A4AEBCCCD4D3D3D3D1CCC4B9B1B1AEA9A9A6A6A4A4A39E9E
+9C9A9994949292928F8F8E8E8E8F8F8F928F8E8E8F92929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989
+89898987878785858585858585858585858585858585858585858585858585858584817F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767676
+7679797C7C7C7F7F8185858789898C8E8E92929292949494999A9A9A9C9C9E9E9E9EA1A4A4A6A6A6
+A9ABAEAEB1B1B1B3B6B7B9B9BBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C8C9CCCCCCCCCCCCCFCFCFCFCF
+D1D1CFCFCFCFCFCFCFCFD1D1D1D1CFCFCFCFCFCFCFCFCFCFCFCFCCCCCCC8C8C8C8C8C6C6C6C6C6C6
+C6C6C4C1C1C1C1C1C1C0BEBEBEBEBEBBBBBBB9BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B6B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3B3B3B1B1B1B1B1B1B1B1B1AEAE
+B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEACABABAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949494949292928E898987847F7C79
+747472716C6C6A676661615F5C575D67747C818992949499999A969492928F8C89898787817F7F7F
+7C7C7C79767674747474727272726E6E6E6C6C6C717274747474767C7C7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C79767679767676797C7F818787898C8F929294949494949494949492929292929292
+9292928F8E8E8E8F8F8F8E8E89898989898989898989898989898989898989898989898987878787
+8789898987878989898989898C8E8C8C8989898987857F7C7C7C7F7F7F7F7F7F7F7F7F8485858787
+898E9292929292929494949494949494949494949494949494949494949494949292928E89898787
+847F7C79747272727474767679748E9EAEB4C1CCD4D1D1D1CFCCC1B9B3B1AEA9A9A6A6A6A4A39E9E
+9C9A999494929292928F8F8E8E8F8F92928F8E8E8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989
+8989898987878785858585858585858585858585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7976767676
+79767C7C7C7F7F7F8485858789898E8E8F929292949494999A9A9A9C9C9C9E9E9EA1A3A4A4A6A6A9
+A9ABAEAEB1B1B1B3B6B9B9B9B9BBBBBBBEC0C1C1C1C1C4C6C6C6C6C8C8CCC9C9C9CCCCCCCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCCCC8C8C8C8C8C8C6C6C6C6C6C6
+C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABABAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A96949494949492928E89898987817F7C
+767472726C6C6A6A676661615F5C595F6A747C858C929494949696949292928E8989898785817F7F
+7F7C7C7C7C797676747474747472727171716C6C6C727274747474767C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7C7C7C797979767676797C7F7F848789898E929292929494949494949292929292929292
+929292928F8E8E8E8E8E8E8E8C898989898989898989898787898989898989898989898989898787
+8989898989898989898989898C89898989898787877F7C7C7C7F7F7F7F7F7F7F7F7F818585878789
+8E8F92929494949494949494949494949494949494949494949494949492929292928E8989878784
+7F7C7974726C74747476797C7C899CACB7B7C4D1D4CFCFCFCFCCC1B9B3B1AEABA9A6A6A6A4A49E9E
+9C9C9A969492929292928F8F8F8F8F9292928F8E8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989
+8989898987878787858585858585858585858585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767679
+7C7C7C7C7F7F7F8185858789898C8E8E8F9292949494949A9A9A9A9C9C9E9E9EA1A3A4A4A4A6A6A9
+A9AEAEAEB1B1B3B3B7B9B9B9B9BBBBBBBEC0C0C1C1C1C4C6C6C6C6C8C8C9C8C8C8C9CCCCCCCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCC9C8C8C8C8C8C6C6C6C6C6C6C6
+C6C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7B9B9B9B6B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A99949494949492928F8C898987857F7C
+79767472716C6C6A6A6761615F5F5C5C5F6C747F878F9292949494949492928F8C8989878784817F
+7F7F7F7C7C7C7976767474747474727272726E6C6C6E727274747474767C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7C7C79797C797676797C7C7F818787898C8F9292929292949494929292929294929292
+929292928F8F8F8E8E8E8E8E8C898989898989898989878787878989898989898989898989898989
+89898989898989898989898C8C898989878787847F7C7C7C7C7F7F7F7F7F7F7F7F8184858787898E
+8F92929294949494949494949494949494949494949494949494949494929292928E89898787847F
+7C79746E6E747474767C7C7F819AA9B9BCBCC6D4D3CFCFCFCFC8C1B9B3B1AEABA9A6A6A6A4A4A19E
+9C9C9A99949492929292928F8F8F929292928F8E8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+8989898989878787878585858585858585858585858585858585858585858585858584817F7F8181
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767B7C
+797C7C7C7F7F7F8485878789898E8E8F929292949494999A9A9A9A9C9C9E9EA1A3A4A4A4A6A6A6A9
+ABAEAEAEB1B1B3B6B7B9B9B9B9BBBBBBBBBEC0C1C1C1C1C6C6C6C6C6C8C8C8C8C8C9CCCCCCCCCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCC9C8C6C6C6C6C6C6C6C6C4C4C4C4
+C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEB1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949492928F8E89898987817F
+7C767472726E6C6A6A676661615F5F5C5F616E767F898F92929294949492928F8C89898987858181
+7F7F7F7F7C7C7C7976747474747472727272726C6C6C71727274747476797C7C7C7F7F7F7F7F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7976767C7C7F7F848789898E8F92929292929294929292929494949492
+9292929292928F8F8F8E8E8E8E898989898989898989878787878787898989898989898989898989
+89898C8C8C8C8C8C8C8C8C8C898989878785847F7C7C7C7C7F7F7F7F7F7F7F7F8184878787898C8E
+8F9292949494949494949494949999999999999994949494949494949292928F8E89898787847F7C
+79746C727474767C7C7F7F7C94A7B4C4C4BECCD9D3CFCCCCCCC8C1B9B3B1AEABA9A6A6A6A4A4A19E
+9E9C9C9A9494929292929292928F92929292928F8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929492929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989
+89898989898987878787858585858585858585858585858585858585858585858585858481818181
+81817F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7679797C7C
+7C7C7C7F7F7F8185858789898C8E8E8F929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A9A9
+ABAEAEB1B1B1B3B6B9B9B9B9B9BBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C8C8C8C6C8C8CCCCCCCCCCCF
+CFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C6C6C6C6C6C6C6C6C4C4C4C4C4
+C4C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEB1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949492928F8E89898989857F
+7C79767472716C6C6A6A676666615F5F5F5F6A727C84898F929292949492928F8E8C898989878484
+81817F7F7F7C7C7B7676747474747472727272716C6C6C71727272727476797C7C7F7F7F7F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7C7C79797C7C7F7F81858789898E8F929292929292929292949494949494
+949292929292929292928F8E8E8C898989898989898987878787878787878989898989898C8C8989
+89898C8E8E8E8E8E8E8E8E898989878784817F7C7C7C7C7F7F7F7F7F7F7F7F818485878789898E8F
+9292929494949494949494949499999A9A9A9A9A999494949494949492928F8E89898787817F7C79
+746C7274767B7C7F7F7F7692A1B1C1D1CCC4CCD9D1CCCCCCC9C6BEB9B3B1AEABA9A6A6A6A4A4A19E
+9E9C9C9A9994949292929292929292929292928F8F8F929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+89898989898989878787878585858585858585858585858585858585858585858585858584818184
+8481817F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797C797C7C
+7C7C7C7F7F818585878989898E8E8F92929294949494999A9A9A9C9C9E9EA1A4A4A4A4A4A6A6A9A9
+ABAEAEB1B1B1B3B6B9B9B9B9B9B9BBBBBBBEC0C0C1C1C1C4C6C6C6C6C8C6C6C6C8C8C9CCCCCCCCCC
+CFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9C9C9C9C8C8C6C6C6C6C6C6C6C4C1C1C1C1C1
+C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9994949494949292928E8C8989898784
+7F7C767472726E6C6A6A67666666615F5F5F616C747F85898E8F92929292928F8E8C898989878785
+8481817F7F7F7C7C797676747474747472727472716C6C6C71727272727476797C7C7F7F7F7F7F7F
+7F7F7F7F7F7F7F7C7C7C7C7C7C797C7C7F7F7F81878989898E8F9292929292929292949494949494
+9494949292929292929292928F8E8C8C8989898989898987878585878787878989898989898C8E8C
+8C8C8E8E8E8E8E8E8E8E8C8989878785817F7C7C7C7C7F7F7F7F7F7F7F7F818585878789898C8E8F
+929294949494949494949494999A9A9A9A9A9A9A999494949494949292928E8C898987817F7C7972
+6C7476797C7C7F7F81728F9CACBECED7D1CCD1D4D1CCC9C8C8C6BEB9B3B1AEABA9A9A6A6A4A4A19E
+9E9C9C9A9994949494929292929292929292928F8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949492949494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+89898989898989898787878785858585858585858585858585858585858585858585858585848484
+858481817F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7F7F7F848587878989898E8F92929294949494969A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A6A9AB
+AEAEAEB1B1B3B6B7B9B9B9B9B9B9BBBBBBBBC0C0C1C1C1C4C6C6C6C6C6C6C6C6C6C8C9C9C9C9CCCC
+CCCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C8C8C8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1
+C1C1C1C0C0BEBEBEC0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949494949292928F8E8C89898987
+817F7C767472726C6C6A6A6767676461615F616771767F87898E8F92929292928E8E8C8989898787
+858481817F7F7C7C7C797674767674747474747272716C6C6C6C727272747476797C7F7F7F7F7F81
+817F7F7F7F7F7F7C7C7C7C7C7C797C7C7F7F7F81858789898C8E8F92929292929294949494949494
+94949494949292929294949292928F8E8C89898989898987878787858787878789898989898C8E8E
+8E8E8E8E8E8E8E8E8E8C8989878787847F7C7C7C7C7F7F7F7F7F7F7F7F81858585878989898E8F92
+929294949494949494949494999A9A9A9A9A9A999694949494949492928E89898987847F7C797274
+74797C7C7C7F81846C899AA6B9C8D9DFD9D4D4D4CFCCC8C6C6C6BEB9B3B1AEAEA9A9A6A6A4A4A39E
+9E9E9C9C9A9694949494929292929292929292928F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898989898989898987878785858585858585858585858585858585858585858585858585858485
+85858481817FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7F7F818585878989898C8E9292929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A6A9AB
+AEAEAEB1B1B3B6B7B9B9B9B9B9BBBBBBBBBBBEC0C1C1C1C1C6C6C6C6C6C6C6C6C6C8C9C9C8C8C9CC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C8C6C6C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1
+C1C1C1C0BEBEBEBEBEBBBBBBB9B9B9BBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAB
+AEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949494949492928F8E8C89898987
+847F7C79747472716C6C6A6767676661616161616A727C7F87898E8F929292928F8E8C8989898787
+878584817F7F7F7C7C797676767676747474747472726E6C6C6C6C727272747476797C7F7F7F7F81
+81817F7F7F7F7F7F7C7C7C7F7C7C7C7C7F7F7F8184878989898E8F92929292929294949494949494
+949494949494949294949494949292928F8E8C898989898987878787878787878989898989898E8E
+8E8E8E8E8E8E8E8E8C8989878785847F7C7C7C7C7F7F7F7F7F7F7F7F7F848585878789898F8F9292
+92949494949494949494949496999A999999999994949494949492928E89898987847F7C766C7476
+797C7C7C7F8185858797A4B1C4D7E6E4DFD9D9D4CFC9C6C6C6C6BEB9B3B1AEAEA9A9A9A6A4A4A39E
+9E9E9C9C9A9994949494949292929292929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898989898989898989878787858585858585858585858585858585858585858585858585858585
+858585848481FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7F7F81858587878989898E8F9292929294949494999A9A9A9C9C9C9EA1A4A4A4A4A4A6A6A9A9AB
+AEAEB1B1B1B3B6B9B9B9B9B9B9BBBBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C6C6C6C6C8C8C8C8C8C8C9
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9C9C9C9C8C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABAB
+ABAEAEAEABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A99949494949492928F8F8E8C898989
+87817F7C767472726E6C6A6A6767676661616161676C747C7F87898C8E8F92928F8E8E8C89898987
+87878584817F7F7F7C7C797676767676747474747472726C6C6C6C6C7172727474767C7C7F7F7F81
+8181817F7F7F7F7F7F7C7F7F7C7C7C7F7F7F818184878789898C8F92929292929294949494949494
+94949494949494949494949494949292928E8E8C8C89898989898787878787878989898989898C8E
+8E8E8E8E8E8E8E8E8987878584817F7C7C7C7C7F7F7F7F7F7F7F7F7F818585878789898F92929292
+9294949494949494949494949499999999969494949494949492928E89898787847F7C7672747676
+7C7C7C7F8185858792A1AEBED1DFE9E6E1DCD9D4CFC8C6C6C4C1BBB9B6B1AEAEA9A9A9A6A6A4A39E
+9E9E9E9C9A9A94949494949494929292929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989898787878585858585858585858585858585858585858585858585858585
+858585858584FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7F7F848585878989898E8E9292929294949494969A9A9A9A9C9C9E9EA1A4A4A4A4A4A6A6A9A9AB
+AEAEB1B1B1B3B6B9B9B9B9B9B9BBBBBBBBBBBEC0C0C1C1C1C4C6C6C6C6C6C6C6C6C8C8C8C8C6C8C8
+C9CCCCCCCCCCCCCCCCCCC9C9C9C9C9C9C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1
+C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABAB
+ABABAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9994949494949292928F8E8C898989
+87857F7C79767472716C6C6A6A6A6A6761616161666771747C8187898C8E8F928F8E8E8E89898989
+87878784817F7F7F7C7C7C797676767674747474747472716C6C6A6C6C7172747474797C7F7F7F7F
+8184817F7F7F7F7F7F7F7F7F7F7C7C7F7F81818184878789898C8E8F929292929292949494949494
+94949494949494949494949494949494928F8F8E8E8C898989898987878787878789898989898989
+8C8E8E8E8E8E8E8989878481817F7F7F7C7C7F7F7F7F7F7F7F7F7F7F8485858789898F9292929292
+92929494949494949494949494949494949494949494949492928E89898787847F7C767476767C7C
+7C7F7F818485818F9CABB9C8D4DFE7E4DFD9D9D3CFC8C6C1C1C1BBB9B6B1B1AEA9A9A9A6A6A4A3A1
+9E9E9E9C9C9A99949494949494949292929292929292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8F92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989898987878585858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7F7F848585878789898C8E8F9292929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A6A9ABAE
+AEAEB1B1B3B6B7B9B9B9B9B9B9BBBBBBBBBBBBC0C0C1C1C1C4C6C6C6C6C6C6C6C6C6C8C6C6C6C6C8
+C8C9CCCCCCCCC9C9C9C9C9C8C8C8C8C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABAB
+ABABABABABABABABABABABABABABABA9ABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9999949494949292928F8F8E8C8989
+8987847F7C767472726E6C6A6A6A6A676664616164676A72767C8189898C8E928F8E8E8E8C898989
+8787878584817F7F7F7C7C7B767979767674747674747272716C6C6A6C6C71727474767C7F7F7F7F
+818484817F7F7F7F7F7F7F7F7F7F7F7F7F8181848587878989898E8F929292929292949494949494
+9494949494949494949494949494949492928F8F8E8E8E8C89898989898787878787878989898989
+89898989898C8C898785817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8185858789898F929292929292
+9292949494949494949494949494949494949494949492928F8E89898787847F7C6A74767C7C7C7F
+7F818184857F8C9AA6B7C1C9D4E1E6E1DFD9D4D1CCC6C4C1C1C1BBB9B6B1B1AEABA9A9A6A6A4A4A1
+9E9E9E9C9C9A99999494949494949292929492929292929292929292929292929292949292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+89898989898989898989898987878585858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7F
+7F818585858789898C8E8E8F9292929294949494999A9A9A9C9C9C9E9EA4A4A4A4A4A6A6A6A9ABAE
+AEB1B1B1B3B6B7B9B9B9B9B9BBBBBBBBBBBBBBBEC0C1C1C1C1C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+C8C8C9C9C9C9C8C8C8C8C8C8C8C8C8C8C8C8C6C6C6C6C4C4C4C4C4C4C4C4C1C1C1C0C0C0C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEB1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAB
+ABABABABABABABABABABABABABABABA9A9ABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9996949494929292928F8E8E8989
+898987817F7C767472726C6C6A6A6A6A676666666666676C72767F8489898C8F8F8E8E8E8E8C8989
+898787878481817F7F7F7C7C797979797676767676747472726E6C6A6A6C6C71727476797C7F7F7F
+81848481817F7F7F7F7F7F7F7F7F7F7F7F8184848587878989898C8F929292929292949494949494
+94949494949494949494949494949494949292928F8E8E8E8C898989898989878787878787878787
+878787898989878785817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8185858789898E92929292929292
+92929294949494949494949494949494949494929292928F8E89878785817F7974767C7C7C7F7F81
+818484847F8994A4B1BEC6CCD9E1E4DFDCD9D4CFCCC6C4C1C0BEBBB9B6B1B1AEABA9A9A9A6A4A4A3
+9E9E9E9E9C9C9A999994949494949492949494929292929292929292929292929294949292929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898987878585858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7F
+7F858585858789898E8E8E9292929294949494949A9A9A9A9C9C9E9EA1A4A4A4A4A4A6A6A9A9ABAE
+AEB1B1B1B3B6B7B9B9B9B9B9BBBBBBBBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+C6C8C8C8C8C8C8C8C8C8C8C8C6C6C6C6C6C6C6C6C6C4C4C4C4C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B6B3B3B3B3B3B3B3B3B3B3B1B1
+B1B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEB1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAB
+ABABABABABABABABABABABABABABA9A9A9A9ABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9994949494929292928F8E8C89
+898987847F7C79747472716C6C6A6A6A6A676666666667676C74797F8789898E8E8F8E8E8E8C8989
+898987878784817F7F7F7C7C7C7C7C7C797676767676747472716C6C6A6C6C6C727474767C7C7F7F
+8181848481817F7F7F7F7F7F8181817F818485858587878789898C8E8F9292929292929494949494
+94949494949494949494949494949494929292928F8E8E8E8E8C8989898989878787878787878785
+858587878787858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8185858787898E8F92929292929292
+929292929292929292929292929292929292929292928F8C89878784817F7974797C7C7F7F7F8184
+8481817F8994A1ABB7C4CCCFD9E4E1DFD9D4D3CFC9C6C1C1C0BBBBB9B6B1B1AEABA9A9A9A6A4A4A3
+A19E9E9E9C9C9A999999969494949492949494929292929292929292929292929294949492929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898987878785858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7F7F
+818585858789898C8E8E8F9292929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A4A6A6A9A9AEAE
+AEB1B1B1B3B6B6B7B9B9B9B9BBBBBBBBBBBBBBBEC0C0C1C1C1C4C6C4C4C4C6C6C6C6C6C6C6C6C6C6
+C6C6C8C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C1C1C1C0BEBEBEBEBEBEBE
+C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAB
+ABABABABABABABABABABABABABABA9A9A9A9A9ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9999949494949292928F8F8E8C
+89898987817F7C767472726E6C6A6A6A6A67676767676767676C747C7F87898C8E8E8E8E8E8E8C89
+89898787878584817F7F7F7C7C7C7C7C7C797676767674747472716C6C6A6C6C6C7274767C7C7F7F
+7F81818484817F7F7F7F7F818181848484858585858587878989898E8F9292929292929494949494
+94949494949494949494949494949492929292928F8E8E8E8E8C8989898989898787858484818181
+81818184848181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7F8184858787898C8E92929292928F8F8F
+8F92929292929292929292929292929292929292928F8C898787817F7F79767C7C7F7F7F7F7F8181
+817F7F8C99A1ABB4BECCCFCFD9E6E1DCD9D4D1CFC8C4C1C1C0BBBBB9B6B3B1AEABABA9A9A6A6A4A4
+A39E9E9E9E9C9A9A9A99999994949494949494949292929292929292929292929494949492929292
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929294929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989878785858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7F7F7F
+848585878789898E8E8E8F9292929294949494999A9A9A9C9C9C9E9EA3A4A4A4A4A6A6A6A9ABAEAE
+AEB1B1B1B3B3B6B7B9B9B9B9BBBBBBBBBBBBBBBBC0C0C1C1C1C1C4C4C1C1C6C6C6C6C6C6C6C6C6C6
+C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C1C1C0BEBEBEBEBEBEBEBE
+BEBBBBBBB9B9B9B9B9B9B9B9B9B7B7B7B7B7B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAB
+ABABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9994949494929292928F8E8C
+89898987857F7C79767472716C6C6A6A6A6A676767676767676A71747C848989898C8E8E8E8E8E8C
+8989898787878481817F7F7F7C7C7C7C7C797676767676747472726E6C6A6A6A6C6E7274767C7C7F
+7F7F81848584817F7F7F81818184848485858585858587878989898C8F9292929292929494949494
+94949494949494949494949494949292929292928F8E8E8E8E8E89898989898987878784817F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7F7F8485858789898E8F92928F8F8F8E8E8E
+8F929292929292929292929292929292928F8F8F8F8C898787817F7F76767C7F7F7F7F7F7F7F817F
+7F7C8999A1ABB4B9C6D3D4D1DCE4DFD9D4D3CFCCC6C1C1C1C0BBBBB9B7B3B1AEAEABA9A9A6A6A4A4
+A3A19E9E9E9C9C9A9A9A999994949494949494949292929492929292929292929494949494929292
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929494929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989878787858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7F7F81
+8585878789898C8E8E8F9292929294949494949A9A9A9C9C9C9E9EA1A4A4A4A4A4A6A6A9A9ABAEAE
+B1B1B1B1B3B3B6B7B9B9B9B9BBBBB9B9BBBBBBBBBEC0C1C1C1C1C1C1C1C1C4C6C6C6C6C6C6C6C6C6
+C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C4C4C4C1C1C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B7B6B6B6B7B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1B1B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAB
+ABABABABABABABABABABABABABA9A9A9A6A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9996949494949292928F8F8E
+8C89898987847F7C76747272716C6A6A6A6A67676767676767676C72767F87898989898E8E8E8E8C
+898989898787878481817F7F7C7C7C7C7C7C797676767676747472726C6C6A6A6A6C7274767C7C7C
+7F7F7F818484817F7F8181818484858585858585858587878789898C8E8F8F929292929494949494
+9494949494949494949494949494929292929292928F8E8E8E8E8C89898989898787878584817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7F7F8485858789898C8E8F8F8F8E8E8E8C8C8E
+8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E89898787817F7C76767C7F7F7F7F7F7F7F7F7F7C
+7C8999A1ABB4BCC1CED9D9D4DFE1DFD9D4D1CFCCC6C1C1C1BEBBBBB9B7B3B1AEAEABABA9A6A6A4A4
+A3A19E9E9E9C9C9A9A9A9A9999949494949494949492929494929292929292949494949494929294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929494949292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989
+89898989898989898989898989898787878585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F7F7F84
+8585878989898C8E8E8F9292929294949494999A9A9C9C9C9C9E9EA3A4A4A4A4A4A6A6A9A9ABAEAE
+AEB1B1B1B1B3B6B6B9B9B9B9BBB9B9B9B9BBBBBBBEC0C0C0C1C1C1C1C1C1C4C6C6C6C6C6C6C6C4C4
+C6C6C6C6C6C6C6C6C6C6C4C4C4C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B3B3B3B3B3B3B1B1B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAEAEAEABABABABAB
+ABABABABABABABABABABABABABA9A9A9A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9994949494929292928F8E
+8E8C89898987817F7C767472726C6C6A6A6A6A6767676A676767676C747C7F87898989898E8E8E8E
+8C8989898787878584817F7F7F7C7C7C7C7C7C797676767674747472716C6C6A6A6A6C7274767C7C
+7C7F7F7F818484817F818184848585858585858585858587878989898E8E8F8F9292929294949494
+9494949494949494949494949492929292929292928F8E8E8E8E8C8989898989878787878481817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585878789898E8E8F8E8E8C898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8989898785817F7C76767C7F7F7F7F7F7F7F7F7C7C7F
+8999A4ABB4C1C4C9D7DFDCD9DFE1DCD9D3CFCFCCC6C1C1C1BEBBBBB9B7B3B1AEAEABABA9A9A6A6A4
+A4A39E9E9E9E9C9C9A9A9A9A99949494949494949492949494929292929294949494949494949294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+89898989898989898989898989898987878785858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8185
+8587898989898E8E8E9292929292949494999A9A9C9C9C9C9E9E9EA3A4A4A4A4A6A6A6A9ABAEAEAE
+AEB1B1B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBEC0C0C0C0C1C1C1C1C1C4C6C6C6C6C4C4C4C4C1
+C4C6C6C6C6C4C4C4C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B6B6B6B6B6B6B6B3B3B3B3B3B1B1B1B1B1B1B3B3B3B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEABABABABAB
+ABABABABABABABABABABABABA9A9A9A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A999494949494929292928F
+8E8C89898987857F7C79767472716C6C6A6A6A6A67676A6A6767676A71747C81898989898C8E8E8E
+8E898989898787878584817F7F7F7C7C7C7C7C7B7676767676747472726E6C6C6C6C6C727476797C
+7C7F7F7F818181817F7F8184858585858585858585858587878989898C8C8E8E8F92929294949494
+949494949494949494949494929292929292929292928F8E8E8C898989898987878787858584817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8485858789898C8E8E8E8C8989898989898C
+8E8E8E8E8E8E8E8C89898989898989898989878787857F7C7C76767C7F7F7F7F7F7F7F7C7C6E7F89
+94A3ACB4C1C8CED7DCE1DFDFE1DFD9D4D1CFCCC8C6C1C1C0BEBBBBB9B9B3B1AEAEAEABABA9A6A6A4
+A4A3A19E9E9E9C9C9C9C9A9A99969494949494949492949494949292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+89898989898989898989898989898989878787858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8485
+87878989898C8E8E8F92929292949494999A9A9A9C9C9C9E9E9E9EA4A4A4A4A4A6A6A6A9ABAEAEAE
+AEB1B1B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBEBEBEC0C0C1C1C1C1C1C4C4C4C4C4C1C1C1C1
+C1C4C4C4C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBBBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B6B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1
+AEB1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACAEAEAEAEAEABABABABAEABABABABAB
+ABABABABABABABABABABABABA9A9A9A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A999494949494949292928F
+8F8E8C89898987817F7C767472726E6C6A6A6A6A67676A6A6A6767676A72767F87878989898E8E8E
+8E8C898989898787878481817F7F7C7C7C7C7C7C797676767676747472726C6C6C6C6C6C72747679
+7C7C7F7F7F8181817F7F81848585858585858585858585878787898989898C8E8E8F929294949494
+9492949494949494949494949292929292929292928F8F8E8C898989898989878787858585848181
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585878789898E8E8C898989898989898989
+8C8E8E8E8E8E8E89898989898989898787878584847F7C7976767C7C7F7F7F7F7F7C7C79747F8994
+A3AEB7C1C9D1D7DEE4E6E1E1E1DFD9D4CFCCC9C6C1C1C1C0BBBBBBB9B9B3B1B1AEAEABABA9A6A6A6
+A4A4A19E9E9E9C9C9C9C9A9A9A999494949494949494949494949292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+89898989898989898989898989898989898787878585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F818585
+87898989898E8E8E8F929292949494999A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABAEAEAE
+AEAEB1B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBEBBBBBEC0C0C1C1C1C1C1C4C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0BEBBBBBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1
+AEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEAEABABAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9994949494949492929292
+8F8E8E8C8C898987817F7C767472726C6C6A6A6A6A67676A6A676767676C747C7F87878789898E8E
+8E8C898989898787878584817F7F7F7C7C7C7C7C7C797676767674747472716C6C6C6C6C72747676
+7C7C7C7F7F7F817F7F7F8184858585858585858585858585878787898989898C8E8F929292949494
+92929292949494949494949292929292929292928F8F8E8C8C898989898989878787858585858481
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858787898C8E8C89898989878787898989
+898C8E8E8E8E8C898989898989878787858481817F7C7674767C7C7F7F7F7F7C7C7C76798189929E
+AEB7C1CCD4D9E1E6ECE7E6E4E1DCD9D3CFCCC8C6C1C1C1C0BBBBBBB9B9B3B1B1AEAEAEABA9A9A6A6
+A4A4A39E9E9E9E9C9C9C9C9A9A999694949494949494949494949492929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989898989898989898989898987878787858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F81858587
+898989898E8E8E8E929292949494949A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9AEAEAEAE
+AEAEB1B1B1B3B3B6B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBC0C0C0C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0BEBBBBBBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B7B7B7B7B7B7B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABAEAEAEAEAEAEABABABAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9994949494949494929292
+928F8E8E8E8C8987847F7C79747472716C6C6A6A6A6767676A6A6767676A72747C81878787898C8E
+8E8C89898989898787858584817F7F7F7C7C7C7C7C7B7676767676747472726E6C6C6C6C6C727476
+797C7C7C7F7F7F7F7F7F81818585858585858585858585858787878789898989898E929292929292
+92929292929294949494929292928F8F9292928F8F8E8E8C89898989898989898787878585858584
+81817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585878789898E8C8989898787878787878989
+898C8C8989898989898787878787878584817F7F7C7674767C7C7F7F7F7C7C7C76727C84899299A6
+B6C1C8D3D9DCE1E6E7E6E4E1DFD9D4CFCCC8C6C6C1C1C0C0BBBBBBB9B7B3B1B1AEAEAEABABA9A6A6
+A4A4A3A19E9E9E9C9C9C9C9A9A999994949494949494949494949492949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898989898989898989898989898989878787878585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F85858587
+8989898C8E8E8E8F929294949494999A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9ABAEAEAEAE
+AEAEB1B1B3B3B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEC0C0C0C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B7B6B6B6B6B7B7B7B7B6B3B3B3B3B3B3B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEACAEAEAEAEABABABABABABAEAEAEAEABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9994949494949494949292
+928F8F8F8F8E898987817F7C767472726E6C6A6A6A6767676A6A6767676A6C74767F81878789898E
+8E8E8989898989878785858481817F7F7F7C7C7C7C7C797676767676747472726C6E6E6E6E727476
+76797C7C7C7F7F7F7F7F7F818485858585858585858585858587878787898989898C8F9292929292
+92929292929292929292929292928F8F8F8F928F8E8E8C8989898989898989878787878585858585
+8481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818487878989898C89898987878785878787898989
+898989898989898987878787878585847F7F7C767474767C7C7F7F7F7C7C7674747F878992949EB1
+BEC6CCD4DCDCE1E6E7E6E1E1DFD9D4CFCCC8C6C4C1C0C0C0BBBBBBB9B7B3B1B1AEAEAEABABA9A9A6
+A6A4A4A39E9E9E9E9C9C9C9C9A9A9994949494969494949494949492949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898989898989898787878785858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8485858789
+89898C8E8E8E8F92929294949494999A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABAEAEAEAE
+AEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEC0BEC0C0C1C1C1C1C1C1C1C1C1
+C1C0C0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B7B6B6B6B6B6B6B6B6B6B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABAEAEABABABABABABABABAEAEABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A96949494949494949292
+92928F8F8F8F8C898987817F7C767472716C6C6A6A676767676A6A6A6A6A6C72747C7F8187878989
+8E8E8989898989878787858584817F7F7F7C7C7C7C7C7C7976767676747474727271717171727476
+7676797C7C7C7F7F7F7F7F81848585858585858585858585858585878787878989898C8F8F8F8F8F
+8F8F8F929292929292928F8F928F8E8E8E8E8F8E8E8C898989898989898989878787858585858585
+858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F81848787898989898989898787858585878789898989
+8989898989898987878785848481817F7C7C767474767C7C7C7F7C7C79746E7681898F92949CA9B9
+C6C6CFD9DCDCE1E4E6E4E1DFDCD9D3CFCCC6C6C1C1C0C0BEBBBBBBB9B7B3B1B1AEAEAEAEABA9A9A6
+A6A4A4A3A19E9E9E9C9C9C9C9A9A9999949499999494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929492929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898989898987878787858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585878989
+89898E8E8E8F92929294949494949A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABAEAEAEAE
+AEB1B1B1B3B3B3B3B6B6B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBEBEBBBEC0C0C1C1C1C1C1C1C0C0
+C0C0C0C0C0C0BEBEBEBEBEBEBEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B6B3B3B3B3B6B6B6B6B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1B1B1B1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABABAEABABABABABABABABABAEABABABABABABABABABABABABABABABABAB
+ABABABABABA9ABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949492
+92928F8F92928E8C8987847F7C79747472716C6C6A6A6767676A6A6A6A6A6C7174767C7F84878789
+8C8E8C8989898989878785858584817F7F7F7C7C7C7C7C7976767676767674747272727272727274
+767676797C7C7F7F7F7F7F818485858585858585858585858585858587878787878989898E8E8E8C
+8E8E8F8F8F8F8F8F8F8E8E8F8F8F8E8C8C8C8E8E8C89898989898989898987878785858585858585
+8584817F7F7F7F7C7C7C7C7C7C7F7F7F7F8184858789898989898987878785858587878989898989
+8989898989898987878784817F7F7F7C7C76746E767C7C7C7C7C797672727C858E9292999CA4B1BF
+CCCCD4DCDFDCE1E4E4E1DFDFD9D4D1CCC8C6C6C1C0C0BEBBBBBBB9B9B7B3B1B1B1AEAEAEABABA9A6
+A6A6A4A4A19E9E9E9E9C9C9C9A9A9A99999499999694949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+94929292929292949494929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989878787878585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585878989
+898C8E8E8F9292929294949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A9ABAEAEAEAEAE
+AEB1B1B3B3B3B3B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBEC0C0C1C1C0C0C0C0C0
+C0C0BEBEBEBEBEBEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEB1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9ABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A3A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949492
+9292929292928F8E898987817F7C767472726C6C6A6A676767676A6A6A6A6C6C7274767C7F848787
+898C8C8989898989878785858484817F7F7F7F7C7C7C7C7C79767676767676747472727272727474
+767676767B7C7C7F7F7F7F7F81848585858585858585858585858585858587878787898989898989
+8C8C8E8E8E8E8E8C8C8C8C8E8E8E8C898989898C8989898989898989898987878785858585858585
+84817F7F7F7F7C7C7C7C7C7C7F7F7F7F818485878789898989898787858585858787878989898989
+89898989898987878784817F7F7F7C7C767272767C7C7C7C7C76726C747F87929494999CA1ABBCC6
+CFCFD9DFDFDCDFE4E1E1DFDCD9D4CFC9C8C6C1C1C0C0BEBBBBBBB9B9B7B3B3B1B1AEAEAEAEABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9C9A9A99999999999994949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929294
+94949292929292949494929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8F8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C898989898989898989898989898989898989898989898987878785858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8587898989
+898E8E8E929292929494949494999A9A9A9A9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABAEAEAEAEAE
+AEB1B1B3B3B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBB9B9BBBBBBBBBBBBBBBBBEBEC0C0C0C0C0C0BE
+BEBEBEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEABABAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949494
+929292929292928F8C898987817C7B767472716C6C6A6A676767676A6A6A6A6C7174767C7F818587
+89898C8989898989878785848484817F7F7F7F7C7C7C7C7C7C797676797976767474747272727474
+76767676797C7C7F7F7F7F7F81848585858585858585858585858585858585878787878789898989
+8989898C89898989898989898C8C8C89898989898989898789898989898989878787858585858584
+817F7F7F7F7F7C7C7C7C7C7C7F7F7F81858585878989898989878785858585858787898989898989
+898989898987878784817F7F7F7C76747272767C7C7C7C76746C727C81899294999A9CA3A6B4C1D1
+D4D4D9E1DFDCDFE1E1DFDCD9D7D3CFC8C6C6C1C0C0C0BBBBBBBBB9B9B7B3B3B1B1AEAEAEAEABABA9
+A6A6A4A4A3A19E9E9E9C9C9C9C9A9A9A9A99999A9994949494999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929294949494949292929492929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898989898989898989898989878787878585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8587898989
+8C8E8E8F9292929294949494949A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABAEAEAEAEAE
+B1B1B1B3B1B1B1B1B3B6B6B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEBEC0C0BEBEBEBE
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B7B9B9B9B9B9B9
+B9B9B6B3B3B1B1B1B1B1B1B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEABABABABAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949494
+94929292929292928E898987847F7C79747472716C6C6A676767676A6A6A6A6C6C7274767C7F8187
+87898C8C89898989878787848481817F7F7F7F7F7C7C7C7C7C79797979797C797676747474747474
+76767676797C7C7F7F7F7F7F81848585858585858585858585858585858585858587878787878789
+89898989898989898989898989898989898989898989878787878787878787878787858484848181
+7F7F7F7F7C7C7C7C7C7C7C7F7F7F8184858587878989898787878485858585878789898989898989
+898989898787878581817F7C7976747174767C7C7C7C746C71767F878C92999C9C9EA4A6AEBCC9D9
+D9D9DFE4E1DEDFE1DFDFDCD9D4D1CCC8C6C6C1C0C0BEBBBBBBBBB9B9B7B6B3B1B1AEAEAEAEABABA9
+A6A6A4A4A4A39E9E9E9E9C9C9C9C9A9A9A9A999A9999949496999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929294949494949492949494929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292928F8F8F92928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989898989898989898989898787878785858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8789898989
+8E8E8E8F9292929294949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A9A9ABABAEAEAEAE
+B1B1B1B1B1B1B1B1B3B3B6B7B9B9B9B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBEBEBEBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B7B7B7B7B7B7B7B7B7B7B7B7
+B7B7B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949494
+94929292929292928F8E898987817F7C767472726E6C6A6A676767676A6A6A6A6C7174767C7F7F84
+8787898C8C89898989878784818181817F7F7F7F7C7C7C7C7C7C79797C7C7C7C7976767474747474
+74767676767C7C7C7F7F7F7F7F818585858585858585858585858585858585858585858787878787
+878989898989898787878989898989898987878789898787878787878787878787858481817F7F7F
+7F7F7C7C7C7C7C7C7C7C7F7F7F7F8485858787898989878785848484848587878989898989898989
+8989898787878584817F7C7974746E74797C7C7C76726C747C7F878E929A9C9EA1A4A6AEB7C4D1DF
+DFDFE1E4E1DFDFDFDFDCD9D9D3CFCCC6C6C4C1C0C0BEBBBBBBBBB9B9B7B6B3B1B1AEAEAEAEAEABA9
+A9A6A4A4A4A3A19E9E9E9C9C9C9C9A9A9A9A9A9A9A99949499999694949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949496949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929494949494949492949494949292929492929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292928F9292928F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8C898989898989898989898989898989898989898989898987878787858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8789898989
+8E8E8E929292929494949494999A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9ABABABAEAEAEAE
+B1B1B1B1B1B1B1B1B3B3B6B7B9B7B7B6B9B9B9B9B9B9B9B9BBBBBBBBBBBBB9BBBBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B6B6B6B6B6B6B6
+B6B6B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAEAE
+AEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A969494949494949494
+9494929292929292928F8C8989857F7C79767472716C6C6A6A676767676A6A6A6A6C7274767C7F81
+858789898C8C8989898787848181817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C79767674747474
+7476767676797C7C7F7F7F7F7F818485858585858585858585858585858585858585858585878787
+87878787898987878787878787898989878787878787878785858585858787878784817F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7F7F7F7F818587878787878787878581818181848789898C8C8C8C89898989
+89898987878584817F7C7974746C74797C7979746C74797F848992949A9EA4A4A6ABAEB4BECCD9E4
+E4E1E6E6E1DFDFDFDCD9D9D4D1CFC8C6C6C1C1C0C0BEBBBBBBBBB9B9B7B6B3B1B1AEAEAEAEAEABAB
+A9A6A6A4A4A4A19E9E9E9E9C9C9C9C9C9A9A9A9A9A99969699999994949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949499949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898989898989898989898989898989878787878785858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898989898C
+8E8E8F9292929294949494949A9A9A9A9C9C9E9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABABABAEAEAEAE
+B1B1B1B1B1B1B1B1B3B3B6B7B7B6B6B6B7B9B9B9B9B9B9B9B9BBBBB9B9B9B9B9BBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B6B6B6
+B6B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACAEAEAEAEAEAEAEAEAEABABABAB
+AEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABA9A9A9A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A4A4A4A4A4A4A4A4
+A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494929292929292928E898987847F7C76747472716C6C6A676767676A6A6A6A6C7274767C7C7F
+84878989898C8C898987878581817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7976767474
+7476767676797C7C7F7F7F7F7F818485858585858585858585858585858585858585858585858585
+878787878787878787878787878787878787878787878785848181848484848484817F7F7F7C7C7C
+7C7C7C7C7C7C7C7C7F7F7F7F8185878789878787878784817F7F7F848789898E8E8E8E8E8C898989
+898987878784817F7C7974726C74767676767472797F81878992999C9EA6A6A6A9AEB6BCC8D7E4E7
+E7E7E7E6E1DFDFDCD9D9D9D3CFCCC6C6C4C1C0BEC0BEBBBBBBB9B9B9B7B6B3B1B1B1AEAEAEAEAEAB
+A9A6A6A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9A9A9A9A9999999A9996949494949494949494949494
+94949494949494949494949494949494949494949494969494949494949699969494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949492949494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C89898989898989898989898989898989898989898989898987878787858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898C8E
+8E8E8F9292929494949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABABABABAEAEAE
+B1B1B1B1B1B1B1B1B1B3B6B6B6B6B6B6B7B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABA9A9A9A6A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4
+A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494929292929292928F8C898987817F7C76747272716C6A6A676767676A6A6A6A6C7274767C7F
+81878789898C8C898987878584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C79767676
+7676767676767C7C7C7F7F7F7F7F8185858585858585858585858585858585858585858585858585
+85858787878787878585858787878787878785848485858481817F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7C7F7F818485878789878787878584817F7F7F848789898C8E8E8E8E8E8C898989
+89878787847F7F7C7674726C74767676746C767C7F858789929A9EA4A6A9ABACAEB6BCC4D1DFECEC
+ECECECE6E4E1DFD9D9D9D4D1CFCCC6C6C1C1BEBEBEBEBBBBBBB9B9B9B7B6B3B1B1B1AEAEAEAEAEAB
+A9A6A6A4A4A4A3A19E9E9E9C9C9C9C9C9C9C9C9A9A9A9999999A9999949494949494949494949494
+94949494949494949494949494949494949494949496999494949494949999999494949496949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89898C8E8E
+8E8F929292949494949494999A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9ABABABABABAEAEAE
+AEB1B1B1AEB1B1B1B1B3B3B6B6B3B3B6B7B9B9B9B7B7B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABAEAEAEAEABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9ABAB
+ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494929292929292928E898987857F7C79767472726C6C6A67676767676A6A6A6C717476797F
+7F84878989898C898987878784817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7C7C7C7C7976
+767676767979797C7C7F7F7F7F7F8184858585858585858585858585858585858585858585858585
+858585858587878585858585858485878784848181818181817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7F7F7F7F8185858587878787858585817F7F7C7F818789898C8E8E8E8E8E8E8E898989
+878787847F7C7C76746E727476767674747C7F8487898C929AA3A4A6ABAEAEB1B6BCC4CCD9E4EEEC
+ECECE7E6E1DFDCD9D9D4D4CFCCC8C6C4C1C1BBBBBEBBBBBBBBB9B9B9B7B6B3B1B1B1AEAEAEAEAEAB
+A9A9A6A4A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9C9A9A9A99999A9A99949494949494949494949494
+94949494949494949494949494999694949494949499999694949494969999999994949499949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8F8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989898787878585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89898E8E8E
+8F929292949494949494949A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABABABABABAEAEAE
+AEB1AEAEAEAEB1B1B1B3B3B3B3B3B3B6B6B9B7B7B6B7B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEABABABABABABABABAEAEABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9AB
+ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949292929292928F89898987847F7C79767474726C6C6A676767676A6A6A6A6C7274767C
+7F818787898989898989878784817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7C7C7C79
+7676797979797C7C7C7F7F7F7F7F8184858585858585858585858585858585858585858585858585
+85858585858585858585858584818184848481817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7F7F7F7F8185858587878787858584817F7F7C7F81878989898E8E8E8E8E8E8E8C898989
+878785817F7C76726C727476767472797F8487898C8F92999EA6A9ACAEB1B1B6B9C1C6D3DEE7EEEC
+ECECE7E4E1DFD9D9D9D4D3CFCCC6C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B6B3B1B1B1AEAEAEAEAEAB
+A9A9A6A6A4A4A4A3A19E9E9E9C9C9C9C9C9C9C9C9C9A9A999A9A9A99999494949494949494969494
+9494949494949494949494949499999494949494999999999494949499999A9A9994949699999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989898987878585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898E8E8E8E
+92929294949494949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABABABABABABAEAE
+AEAEAEAEAEAEB1B1B1B1B3B3B3B3B3B3B6B7B6B6B6B7B9B9B9B9B9B9B9B9B9B7B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABACAEAEAEABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABA9A9ABABABABABABABABA9A9ABABABA9A9A9A9A9
+ABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949292929292928F8C89898987817F7C79767474716C6A67676767676A6A6A6A6C727479
+7F7F848789898989898987878584817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7C7C7C
+7C7979797C7C7C7C7C7C7F7F7F7F7F81848585858585858585858585858585858585858585858585
+85858585858584818484848481817F8181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7F7F7F7F8184858585878787878584817F7C7C7F7F848789898C8E8E8E8E8E8E8C89898987
+87847F7F7C74716C747476766E767F8487898E8F9292949EA6A9AEB1B1B6B9B9C1C6CFD4DFE9EEEC
+ECECE7E4E1DFD9D9D4D4D3CFC9C6C4C1C1C0BBBBBBBBBBBBBBB9B9B9B9B6B3B1B1B1AEAEAEAEAEAE
+A9A9A6A6A4A4A4A4A19E9E9E9E9C9C9C9C9C9C9C9C9A9A999A9A9A9A999494949494949494999494
+949494949494949494949494999999999494949499999A999994949699999A9A9999949999999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F9292928F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E898989898989898989898989898989898989898989898989898987878585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8E8E8E8F
+929292949494949494999A9A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9A9ABABABABABABAEAE
+AEAEAEAEAEAEB1B1B1B1B3B3B1B1B3B3B6B6B6B6B6B6B9B9B9B9B9B9B7B7B7B6B7B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B7B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABAEAEAEAEAEAEAEAEABABABABABABABABAEABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABA9A9A9A9ABABABABABABA9A9A9ABABA9A9A9A9A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9694949494949494
+94949494949492929292928F8E89898987857F7F7C797674726C6C67676767676767676A6C717476
+7C7F81878789898989898787878481817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F81818485858585858585858585858585858585858585858585
+858585858584818181818181817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F81848585858787878785817F7F7C7C7C7F818789898C8E8E8E8E8E8E8E8989898785
+817F7C7674716C74747676767F8487898F92929294999CA4A9AEB1B6B7B9BBBEC6CCD1D9E1ECEEEC
+ECECE6E1DFDCD9D9D4D3D1CFC8C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B6B3B1B1B1AEAEAEAEAEAE
+A9A9A6A6A4A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A999994949494949499999694
+94949494949494949494949499999A999494949999999A9A99949499999A9A9A9A99999999999994
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898987878785858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8F92
+9292929494949494999A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A9A9ABABABABABABAEAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B6B6B3B3B3B6B7B9B9B9B7B7B7B6B6B6B6B7B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABABABAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9ABABABA9A9A9A9A9A9ABABABABA9A9A9A9A9ABA9A9A6A9A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8C89898987847F7F7C797674726C6A676767676767676A6A6C7274
+797F81858787898989898987878784817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F818184848585858585858585858585858585858585858484
+858585848481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7F7F7F7F7F818585858787878784817F7F7C7C7C7F81878989898E8E8E8E8E8E8E8C8989878581
+7F7C76746E72747676727F8487898E92929294949A9CA3A9AEB1B7B9BBBEC0C4C9CFD4D9E4ECEEEC
+ECECE6E1DFDCD9D4D4D3CFCCC8C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B6B3B1B1B1AEAEAEAEAEAE
+ABA9A6A6A6A4A4A4A3A19E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9994949494949499999994
+94949494949494949494949999999A9999949499999A9A9A99999999999A9A9A9A9999999A9A9996
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989878787858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8F9292
+92929494949494999A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A9A9A9ABABABABABABAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B3B3B3B6B7B7B7B7B6B6B6B6B6B3B3B6B7B9B9B9B9B9
+B9B9B9B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAEAEAEAEAE
+AEAEAEAEAEAEABABABABABABABAEAEABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A9ABABA9A9A9A9A9A9A9ABABABA9A9A9A9A9A9A9A9A6A6A9
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8E8C89898987817F7F7C797674726C6A676766666666676A6A6C72
+767C7F84878787898989898787878584817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F8181817F7F
+7F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F81818485858585858585858585858585858585848481
+8484848481817F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7F7F7F7F7F8184858585858785817F7F7C7C7C7C7F81858789898C8E8E8E8E8E8E8C898987857F7C
+7974746C72747676768187898C8F92949494949A9C9EA6AEB3B7B9BEC0C1C4C8CFD4D9DCE6F2ECEC
+ECE7E6E1DFD9D9D4D3D1CFCCC6C6C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B6B3B3B1B1AEAEAEAEAEAE
+ABA9A6A6A6A4A4A4A4A39E9E9E9E9C9C9C9E9E9C9C9C9A9A9A9A9A9A9A9996949494949999999994
+949494999494949494949499999A9A9A99949999999A9A9A9A9999999A9A9A9A9A9A99999A9A9A99
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929294929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898989878787878785
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8F9292
+929294949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A6A9A9A9ABABABABABABAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B1B1B3B6B7B6B6B6B6B6B3B3B3B3B3B3B6B7B9B9B9B7
+B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A6A6A9A9A9A9A9ABA9A9A6A9A9A9A9A9A6A6A6
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8E8E8E8C898787847F7F7C7674726E6A67676666666666676A6C72
+74767C8185878789898989898787878481817F7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F818181818181
+7F7F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858585858585858585858584817F
+81818181817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F7F8184858585858584817F7F7C7C7C7C7F81858789898C8E8E8E8E8E8E8E898987847F7C76
+74746C747476767C8489898F92949499999A9A9C9EA6AEB3B9BBBEC1C1C6C6CCD3D9DCDFE7F1ECEC
+ECE7E4DFDCD9D7D4D3CFCFCCC6C4C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B7B3B3B1B1AEAEAEAEAEAE
+ABA9A6A6A6A6A4A4A4A3A19E9E9E9C9C9C9E9E9C9C9C9C9A9A9A9A9A9A9A999494949499999A9999
+949496999494949494949999999A9A9A999999999A9A9A9A9A9999999A9A9A9A9A9A999A9A9A9A99
+96949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929494949292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898987878787
+878585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E929292
+929494949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B6B6B6B6B3B3B3B3B3B3B1B3B3B6B6B7B7B7
+B6B6B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABAB
+ABAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9AB
+ABABABABABABABABA9A9ABABABA9A9A9A9A9A9A9A9A6A6A6A9A9A9A9A9A9A9A6A6A9A9A9A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8F8F8E8E89898787817F7C7C7674726C6A67676161616167676A6C
+72747C7F8487878789898989898787878481817F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F8181848484
+8181817F7F7F7F7F7F7F7F7F81817F7F7F7F7F81818585858585858585858585858585858584817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C797676797C7C7C7C7C7F7F
+7F7F7F81848585858584817F7F7F7C7C7C7C7F8487878989898E8E8E8E8C8C89898987847F7C7974
+7471747476767F87898E929494999A9C9C9C9EA1A4A9B1B9BBC0C1C6C6C8CCD1D7DCE1E4ECF1ECEC
+ECE7E4DFDCD9D4D3D1CFCFCCC6C4C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B7B6B3B1B1AEAEAEAEAEAE
+ABA9A6A6A6A6A4A4A4A4A19E9E9E9E9C9C9E9E9C9C9C9C9A9A9A9A9A9A9A999694949699999A9A99
+9494999999949494949499999A9A9A9A9A9999999A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A
+99949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898989878787
+878785858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8F929292
+9294949494949A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABAE
+AEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B6B3B3B3B3B3B3B1B1B1B1B1B3B3B6B6B6B6
+B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABACAEAEAEAEAEAEAEAEAEAEABABABABABABABAB
+ABABABABAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9
+A9ABABABABABABABA9A9A9A9ABA9A9A6A9A9A9A9A6A6A6A6A6A9A9A9A9A9A9A6A6A6A9A9A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+949494949494949292929292928F8F8F8F8E89898785817F7C797674726C6A676661616164676A6C
+7274767C7F85878787898989898787878584817F7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F8184848485
+85848481817F7F7F7F7F81818181817F7F8181818484858585858585858585858585858585858481
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C79797C7C7C7C7C7C7F7F7F
+7F7F81848585848481817F7F7F7C7C7C7C7F8487878789898C8E8E8E8C8989898787817F7C797472
+72747676727F87898F9294999A9C9C9C9C9EA4A6A9B1B9BBC0C1C6C8CCCCCFD4D9E1E4E7ECF1ECEC
+ECE6E1DFD9D9D4D3CFCFCCC9C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B7B6B3B1B1AEAEAEAEAEAE
+ABA9A9A6A6A6A4A4A4A4A3A19E9E9E9C9E9E9E9E9C9C9C9C9A9A9A9A9A9A9999949499999A9A9A99
+9996999999949494949999999A9A9A9A9A99999A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A
+99969494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989898987
+878787878585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8F929292
+9294949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABAB
+AEAEAEAEAEAEAEAEB1B1AEAEAEB1B1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B3B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABAEAEAEAEAEABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9
+A9A9A9ABABABABA9A9A9A9A9A9A9A9A6A6A6A9A9A6A6A6A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494
+94949494949494929292929292928F8F928F8C89878784817F7C797474716C6A666161616166676A
+6E7274797F8185878787898989898787878584817F7F7F7C7C7C7C7C7C7C7C7C7C7F7F8184848587
+878785848481817F7F81818184848481818181848485858585858585858585858585858585858481
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F8184848481817F7F7F7F7F7C7C7C7C7F8487878789898C8E8E8E8C8989898787847F7C79767274
+747676747F878E9294999C9C9C9E9E9E9EA4A6A9AEB6BBC0C1C6C6CCCFCFD4D9DFE4E7ECF1F1ECEC
+ECE6E1DFD9D9D4D1CFCFCCC8C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A99949699999A9A9A9A
+99999999999994949499999A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999494949499949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989
+898787878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F92929292
+9494949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A9ABABABABABABABAB
+AEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3
+B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABAEABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9ABABABABA9A9A9
+A9A9A9A9ABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494
+94949494949494949292929292928F9292928E89898787817F7F7C7674726E6A676461616161666A
+6C7274767C7F8184858789898989898787878481817F7F7C7C7C7C7C7C797C7C7C7F7F8184858787
+87878787878584818181818484858584818184858585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F
+7F8181817F7F7F7F7F7F7F7C7C7C7F7F818587878989898E8E8E8E8989898787857F7C7976727474
+76767C81898E9294999C9E9E9EA1A4A4A4A6A9AEB1B9BEC1C6C8CCCFD3D4D9DFE4E7ECEEF2F1ECEC
+E7E6E1DCD9D4D3CFCFCCCCC8C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A999999999A9A9A9A9A
+9999999A9A9994949999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999994949699949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8F8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989
+898989878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F92929292
+94949494949A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABAB
+AEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9ABABA9A9A6
+A9A9A9A9A9A9A9A9A9A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99999994949494949494
+9494949494949494929292929292929292928F8C89898785817F7C7C7674726C6A67616161616167
+6A6C7274767C7F81848587898989898787878584817F7F7F7C7C7C7C79797C7C7C7F7F7F81858787
+87878787878785848184848485858585848485858585858585858585858585858585858585858584
+81817F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7C7C7C7F7F8185878989898C8C8E8E8E8C8989878787817C7C7674747676
+767C85898F9294999C9E9EA3A4A4A4A6A6A9AEB1B7BEC1C6C8CCCFD3D4D9DFE1E7ECECF2F2EEECEC
+E7E4DFDCD9D4D3CFCCCCC8C6C6C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9999999A9A9A9A9A
+9A99999A9A99999499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9994949999999494949496949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8F8F8F928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989
+898989898787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+94949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABAB
+ABAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1AEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEABABABABABABABABABAB
+ABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABA9A9ABABABABABABABABA9A9A9A9A9A9A9A6
+A6A6A9A9A9A9A9A9A9A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99999494949494949494
+949494949494949492929292929292929292928E8989898784817F7C7C7674726C6A666161616166
+676C717274797C7F81848787898989898787878584817F7F7C7C7C7C7979797C7C7C7F7F81848787
+87878789878787858484858785858585858585858585858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7F81858789898C8E8E8E8E8E8C8989898787817F7B767474767674
+7F878E929294999C9EA4A4A4A4A6A6A6A9AEB1B6B9C0C6C8CCCFD3D4D9DCE1E6ECECEEF2F2ECECE9
+E7E1DFD9D9D4D1CFCCC9C8C6C4C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99999A9A9A9A9A9A
+9A999A9A9A9A999699999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9999969999999694949499949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8F9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929294
+94949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A9ABABABABABABABABAB
+ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABABABAB
+ABABABABABABABABABABABABABABAEAEAEABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABA9A9A9A9ABABABABABABABABABABA9A9A9A9ABABABABABA9A9A9A9A9A9A9A9A6
+A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99969494949494949494
+949494949494949492929292929292929292928E898989878784817F7F7B7474716C6A6661616161
+666A6C7274767C7C7F818487898989898987878784817F7F7C7C7C7C7C76767C7C7C7F7F81848787
+87878989898787878785878787878585858787858585858585858585858585858585858585858585
+8481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7F81878789898E8E8E8E8E8E8E8989898787847F7974747476767681
+898F9294949A9C9EA4A6A6A6A6A6A9A9AEB1B3B9BEC1C6CCCFD1D4D9DCE1E4E7ECECEEF2EEECECE7
+E6E1DFD9D4D3CFCFCCC8C6C6C4C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9A9A999A9A9A9A9A9A
+9A9A9A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9999999A9A9994949699969494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929294
+949494969A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABABAB
+ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9ABABAB
+ABABABABABABABABA9A9A9A9A9A9ABABABABABABABABA9A9A9A9A9A9ABABABA9A9A6A9A9A9A9A6A6
+A6A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A969494949494949494
+949494949494949492929292929292929292928F8C898989878785817F7C797472716A6764616161
+61676A6C7274767C7C7F8185878989898987878784817F7F7C7C7C7C7C7976797C7C7F7F81848587
+87898989898987878787878787878785878787878785858585858585858585858585858585858585
+8584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7F81878789898C8E8E8E8E8E8E8C89898787857F7674747676767C8489
+929294999A9C9EA4A6A6A6A6A9A9ABAEB1B1B7BCC1C6CCCFD1D4D9DCDFE1E6E7ECECEEF2EEECE9E7
+E4E1DCD9D4D3CFCCCCC8C6C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEA9A9A9A6A6A6A6A6A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9A9A999A9A9A9A9A9A
+9A9A9A9A9A9A9A99999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9999999A9A9996949999999494949496949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929494
+949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9ABABABABABABABABABABABABABABABABABABABABA9A9A9A9A9
+ABABABABABABABABA9A9A9A9A9A9A9A9A9ABABABABA9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A9A9A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494949494949492929292929292929292928F8E89898989878787847F7C7674726C6A67616161
+6164676A6C7274767C7F7F81878789898989878785817F7F7C7C7C7C7C7976797C7C7F7F7F818587
+87898989898989878787878787878787878787878787878585858585858585858585858585858585
+858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7F81878789898C8E8E8E8E8E8E8C89898987857F7674747674747C878992
+94949A9C9C9EA4A6A9A9A9A9ABAEAEB1B1B7B9BEC4C9CFD1D4D9D9DFE1E1E6ECECECEEF2ECECE7E6
+E1DFD9D9D4D1CFCCC9C6C6C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEABA9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A999A9A9A9A99969999999994949499949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292949494
+949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A9A9A9ABABABABABABABAB
+ABABAEAEAEAEABAEAEAEAEAEAEAEAEAEAEAEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1
+B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABABA9A9A9A9A9A9A9A9ABABABABABABABABABABABABABA9A9A9A9A9A9
+A9A9A9ABABABABA9A9A9A6A9A9A9A9A9A9A9A9ABABA9A9A6A6A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494949494949494929292929292929292928F8E8C89898989898787847F7C7674726C6A666161
+6161666A6C717274797C7F7F84878789898787878584817F7F7C7C7C7C7C76797C7C7F7F7F818487
+87898989898989898787878787898787878787898787878787878585858585858585858585858585
+85858481818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7F8487878989898E8E8E8E8E8E8E89898987847F7974747474798187899294
+999A9C9C9EA3A6A9AEAEAEAEAEB1B1B3B7B9BEC1C6CCCFD3D7D9DCDFE1E4E7ECECECEEF1ECE9E7E4
+E1DFD9D4D3CFCFCCC8C6C6C4C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9999999A9A9994949999999494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9294949494
+9494969A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A9A9A9ABABABABABABABAB
+ABABAEAEABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABAB
+ABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABA9A9A9A9A9A9
+A9A9A9A9A9A9ABA9A9A6A6A6A6A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949494949492929292929292929292928F8E8E8C8C8989898787817F7C7674716C6A6661
+616161666A6C727476797C7F81848789878787878784817F7F7C7C7C7C7C79797C7F7F7F7F818487
+87878989898989898989878789898987878789898989878787878787858585858585858585858585
+8585858484848484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7C7C7F7F8487878789898C8E8E8E8E8E8E8C898987847F7C747474747C87898E92949A
+9C9C9E9EA3A6A9AEAEAEAEAEB1B1B3B7B9BBC1C6CCCFD3D4D9DCDFE1E4E6E7ECECECEEEEECE7E6E4
+E1DED9D4D3CFCCC9C8C6C6C1C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B3B1B1AEAEAEAEAE
+AEABA9A9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9A9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A99999A9A9999949999999694949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8F8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABA9A9ABABAB
+ABABABABABABABAEAEAEAEAEAEAEABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABA9A9A9A6A6A6A9
+A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A9A9A9A9A9A9A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949494949492929292929292929292928F8E8F8E8E8C8C89898787817C7974726E6A6761
+61616161676A6C7274767C7C7F818787878787878784817F7F7C7C7C7C7C7C797C7F7F7F7F818485
+87878989898989898989898989898989898989898989898987878787878787878585858585858585
+858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7F7F8185878789898C8E8E8E8E8C8C89898787817F76747474727F87899294999C9C
+9C9E9EA4A4A6AEB1B1B1B1B1B3B6B9B9BBC0C6C8CFD1D4D9D9DFE1E4E6E6ECECECECEEECECE7E4E1
+DFDCD9D4D1CFCCC8C6C6C6C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B3B3B1B1AEAEAEAEAE
+AEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999A9A9A9A999999999A9994949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9ABABAB
+ABABABABABABABABAEAEAEAEABABABABAEAEAEAEAEAEAEAEAEAEAEABABAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABA9A9A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6
+A6A6A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A4A6A6A6A6A6A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9694949494949494
+94949494949494949492929292929292929292928F8F8F8F8F8E8E8E898987857F7C7674726C6A66
+6161616164676A6E7274767C7F7F8487878787878784817F7F7F7F7C7C7C7C7C7C7F7F7F7F7F8185
+87878989898989898989898989898989898989898989898989898987878787878787878785858585
+85858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7F7F818487878989898E8E8E8E898989898787817C76747474717C878E92949A9C9C9E
+9EA3A4A6A6ABAEB1B1B1B1B3B6B9B9BBC0C1C6CCCFD3D4D9DCDFE1E6E7E7ECECECECEEECE7E6E4E1
+DFD9D4D4D1CFCCC8C6C6C4C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAE
+AEABABA9A9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9999949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F8F8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9ABAB
+ABABABABABABABABAEAEABABABABABABABAEAEAEAEAEAEAEABABABABABAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9ABABABABA9A9A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6
+A6A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A4A4A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949494949292929292929292929292928F8F92928F8F8E8C898787847F7C7674726C6A
+6661616161666A6C717474797C7F818487878787878581817F7F7F7F7F7F7C7C7C7F7F7F7F818184
+87878789898989898989898989898989898989898989898989898989898987878787878787858585
+8585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7F7F818487878789898C8E8E8E8C89898787847F7C74747474727C878E92999A9C9E9EA1
+A4A4A6A6A9AEB1B1B3B3B3B6B9BBBBC0C1C6C8CFD3D4D9DCDFE1E4E7E7ECECECECECEEECE7E6E1DF
+DCD9D4D3CFCCC9C6C6C6C1C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAE
+AEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A99949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949492929292949292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8F8F92928F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9ABAB
+A9A9ABABABABABABABABABABABABABABABAEAEAEAEABABABABABA9A9A9ABAEAEAEAEAEAEAEAEAEAE
+ACABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A4A6A6A6A6A4
+A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A3A19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+949494949494949494949292929292929292929292928F9292928F8F8E89898787817F797472716A
+676461616161666A6C7274767B7C7F81858787878585848181817F7F7F7F7C7C7C7F7F8181818184
+85878789898989898989898989898989898989898989898989898989898989898989898787878585
+858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7F7F7F818485878789898C8E8E8E8C89898787817F7C74747474747C878F94999C9C9EA1A4A4
+A6A6A6A9ABAEB1B3B6B6B7B9BBBBC0C1C6C6CCD1D4D9D9DFE1E4E6E7ECECECECECECECECE7E4E1DF
+D9D9D4D1CFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1AEAEAE
+AEAEABABA9A9A9A6A6A6A6A6A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292929292929292929292929292929294
+94949494929292949292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F929292928F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949A9A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9A6A6A6A9A9A9A9
+A9A9A9ABABABABABABA9A9A9ABABABABABAEAEABABABABA9A9A9A9A9A9ABAEAEAEAEAEAEABABABAB
+ABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A4A4A6A6A6A6A6A6A6A6A4A6A6A6A6A4A4A4A4A4A6A6A6A6A6A6A4A4A6A6A6A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A3A4A4A3A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494
+9494949494949494949492929292929292929292929292929292928F8E8E898987857F7C7674726C
+6A676161616161676A6C7274767C7F7F81848585858585848181817F7F7F7F7C7C7F7F8181848484
+85878789898989898989898989898989898989898989898989898989898989898989898787878585
+858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7F7F7F8181848587878989898E8E8E8E89898987817F7C74747472767F878E94999C9E9EA3A4A6A6
+A6A9A9ABAEB1B6B6B7B7B9BBBBC0C1C6C6CCCFD3D7D9DCDFE1E6E7ECECECECECECECECE7E6E1DFDC
+D9D9D4D1CFCCC8C6C6C1C1C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1AEAEAE
+AEAEAEABABA9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292929292929292929294
+94949494929294949492929292949292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292928F8E8E8E8E8F8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9
+A9A9A9ABABABABA9A9A9A9A9ABABABABABABABABA9A9A9A9A9A9A9A9A9ABAEAEABABABABABABABA9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A4A4A4A6A6A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19EA1A3A4A3A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494
+949494949494949494949292929292929292929292929292929292928F8E8C898787817F79767472
+6C6A6661616161666A6C717274797C7F7F8184858585858481818481817F7F7F7F7F7F8184848485
+87878787898989898989898989898989898989898989898989898989898989898989898987878785
+85858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F
+7F818484858587878789898C8E8E8E8C898987847F7C747474727C81858C92999C9EA3A4A4A6A6A6
+A9ABAEAEB1B3B7B9B9B9B9BBC0C1C6C6C9CFD1D4D9DCDFE1E4E7ECECECECECECECECECE7E4E1DFDC
+D9D4D3CFCFC9C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1AEAE
+AEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494929294949492929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292928F8E8E8F8F8F8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989898989898989
+8989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+999A9A9A9A9A9A9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9
+A6A9A9ABABA9A9A9A9A9A9A9ABABABABABABA9A9A9A9A9A9A9A9A6A9A9A9ABABABABABA9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A6A6A6A6A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9EA1A3A19E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494
+949494949494949494949292929292929292929292929292929292928F8F8E8C8987847F7C797472
+716A676664616161666A6C727476797C7F7F8184858585858484848481817F7F7F7F7F8484858587
+878787878989898989898989898989898C8989898989898989898989898989898989898987878785
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F7F
+8184858585878787898989898C8E8C898987847F7C767674767F84878992949C9EA4A4A6A6A6A9A9
+ABAEAEB1B3B6B9B9B9B9BBBEC1C6C6C9CFCFD4D9D9DFE1E4E6E7ECECECECECECECECECE6E4DFDFD9
+D9D4D3CFCCC8C6C6C4C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1AEAE
+AEAEAEAEABA9A9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929292929492929292929292929292929292929292929292929294949292929292949494
+94949494949494949494949294949494929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8F8F92928F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949496
+9A9A9A9A9A9A9A9C9C9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A6A6
+A6A9A9A9A9A9A9A9A9A6A9A9A9ABABA9A9A9A9A9A9A9A9A6A6A6A6A6A9A9ABA9A9A9A9A9A9A9A9A9
+A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6
+A6A6A4A4A6A6A6A4A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A3A19E9E9E9EA1A19E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494
+94949494949494949494929292929292929292929292929292929292928F8F8C898787817F7C7674
+726C6A676666616161676A6C7274767C7C7F81818485858585848485848181818181818485878787
+8787878789898989898989898989898C8E8C8C898989898989898989898989898989898989878787
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7F7F
+818585858587878989898989898C89898987817C7676747C7F87878992949C9EA4A6A6A6A9A9A9AB
+AEB1B1B3B6B9B9B9BBBEBEC1C4C6C9CCCFD3D7D9DEDFE1E4E6E7ECECECECECECECECE7E6E1DFDED9
+D9D4D1CFCCC8C6C6C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1B1AE
+AEAEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9E9C9C9C9C9A9A9A9A
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292949492929292929292929292929292929292929292929294949292929292949494
+94949494949494949494949494949494949292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F92929292928F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949499
+9A9A9A9A9A9A9A9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A9A9A9A9A9A6A6A6A6A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6
+A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494
+9494949494949494949494929292929292929292929292929292929292928F8E898987847F7C7976
+74716C6A6767666161666A6C717274767C7F7F818485858585848585858481818481848587878787
+87878789898989898989898989898C8E8E8E8E8C8C89898989898989898989898989898989898787
+878585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7F7F81
+8485858587878989898989898C8C898987817C7674747F8787898C92949A9EA4A6A6A9A9A9ABABAE
+AEB1B3B6B9B9BBBBBEBEC1C1C6C8CCCFD3D4D9DCDFE1E1E4E7E9ECECECECECECECECE7E4E1DFDCD9
+D4D3CFCFC9C6C6C6C1C1C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B6B6B3B1B1B1B1B1B1AE
+AEAEAEAEAEABA9A9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9A9A9A9A
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292949494929292929292929292929292929292929292929494949492929294949494
+94949494949494949494949494949494949492929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+8989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949499
+9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A9A9A9A6A6A6A6A6A6A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A6A6A6
+A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A1A3A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494
+9494949494949494949494929292929292929292929292929292929292928F8E89898785817F7C79
+74726E6A676767646161666A6C727476797C7F7F8184858585858585858584848484858787878787
+878789898989898989898989898C8E8E8E8E8E8E8E8E8C8C89898989898989898989898989898787
+87858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7F7F8184
+85858587878789898989898C8C8989877F7C767476818789898F8F949A9CA4A6A9A9A9ABABAEAEAE
+B1B3B6B9B9BBBEBEBEC1C1C6C8CCCFD3D4D9D9DCDFE1E4E6E7ECECECECECECECECE7E6E1DFDCD9D9
+D4D3CFCCC8C6C6C6C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B3B3B1B1B1B1B1AE
+AEAEAEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9A9A9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292929292929292929292949494949494929494949494
+94949494949494949494949494949494949492929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989
+89FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494999A
+9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A9A6A6A6A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A6
+A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19EA1A3A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949494
+9494949494949494949492929292929292929292929292929292929292928F8E8C898787817F7C7C
+7674726C6A676767616166676A6C7274767C7C7F8181848585858585858585848485878787878787
+8989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787
+858585858585858585848484817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C797C7C7C7C7F7F7F7F818485
+85858787878989898989898C898987817C79747F87898C8E929294999C9EA4A9A9ABABAEAEAEAEB1
+B1B6B9B9BBBBBEC0C1C1C6C6CCCFD1D4D7D9DCDFE1E1E4E6E7ECECECECECECE9E7E7E4E1DFDCD9D9
+D4D1CFCCC8C6C6C4C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B3B3B1B1B1B1B1AE
+AEAEAEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A4A19E9E9E9E9E9E9E9E9E9C9E9E9E9C9C9C9C9A9A9C
+9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292929292929292929294949494949494949494949494
+94949494949494949494949494949494949494929292929492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494999A
+9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494
+9494949494949494949292929292929292929292929292929292929292928F8E8C89898785817F7C
+797472716C6A6767666164676A6C717274767C7F7F81848485858585858585848587878787878789
+89898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898987878785
+85858585858585848181817F7F7F7F7F7F7F7F7F7F7F7F7C7C797676797C7C7F7F7F818184848585
+858787878989898989898C898987817C79748787898E92929294999C9EA4A6A9ABAEAEAEAEAEB1B1
+B6B7B9B9BBBEC1C1C1C6C6C9CCCFD3D4D9D9DFDFE1E4E6E6E7ECECECECECECE7E7E6E1DFDCD9D9D4
+D3CFCFCCC6C6C6C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1B1AE
+AEAEAEAEAEABABABA9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9C9C9C
+9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949492929292929292929292929292929294949494949494949494949494
+94949494949494949494949494949494949494949292949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949A9A
+9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494
+949494949494949492929292929292929292929292929292929292929292928F8C8989878784817F
+7C7674726E6A6767676464676A6A6C727476797C7F7F818485858585858585858787878787878989
+898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898787878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7C7B767676797C7C7C7F7F7F81848585858585
+8587878789898989898C8C8987847F7C7C8789898F92929494999C9EA3A6A9AEAEAEAEAEB1B1B1B3
+B7B9B9BBBEC1C1C1C6C6C8CCCFD1D4D9D9DCDFDFE1E4E6E7E7ECECECECECE7E7E7E4E1DFD9D9D9D4
+D3CFCCC8C6C6C6C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1B1B1
+AEAEAEAEAEABABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949994949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999A9A
+9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9C9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494
+949494949494949492929292929292929292929292929292929292929292928F8E8989898787817F
+7F797472726C6A6767676666676A6C6C7274767C7C7F7F8184858585858585878787878787898989
+8989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989878787858585
+858585858484817F7F7F7F7F7F7F7F7F7F7C7C7C7C7676797C7C7C7C7F7F7F7F8184858585858585
+8587878787898989898C8987847F7C7F898C8E92929494949A9C9C9EA4A6ABAEAEAEB1B1B1B1B3B7
+B9B9BBBEC0C1C4C6C6C8CCCFCFD3D4D9DCDFDFE1E4E6E6E7ECECECECECE9E7E7E6E1DFDCD9D9D4D4
+D1CFCCC8C6C6C6C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B1B1B1B1
+AEAEAEAEAEABABABABA9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494999996949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8CFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999A9A
+9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A6A6A6A6
+A6A6A6A6A4A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4A3A4A4A4A4A3A1A1A3A4A4A4A4
+A4A4A4A3A4A4A4A4A3A1A3A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494
+949494949494949292929292929292929292929292929292929292929292928F8E89898989878581
+7F7C767472716C6767676766676A6A6C717274797C7F7F8181848585858587878787878789898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898787878787878785858585
+8581818181817F7F7F7F7F7F7F7F7F7C7C7C79767676797C7C7F7F7F7F7F81818485858585858585
+8585878787898989898987817F7C7F89929292929494999A9C9C9EA4A6A9AEAEAEB1B1B1B1B3B6B9
+B9BBBEC0C1C1C6C6C8C9CCCFD1D4D9D9DCDFE1E1E4E6E7E7ECECECECECE7E7E6E6E1DFDCD9D9D4D3
+CFCFCCC6C6C6C4C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B1B1B1B1
+AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999696999999949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929494929292929292949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94969A9A9A
+9A9A9A9A9C9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A6A6A6A6
+A6A6A4A4A4A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A1A1A3A3A4A4A4A4A4A3A1A3A4A4A4A39E9EA1A3A4A4A4
+A4A4A3A1A3A4A4A4A39EA1A3A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949494949494
+949494949494929292929292929292929292929292929292929292929292928F8E8C898989898784
+817F797472726C6A6767676767676A6C6C7274767C7C7F7F81818485858587878787878989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898787878787878785858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7C7C767676797C7C7C7C7F7F7F81818484858585858585858585
+85858587878787878787817F7C8189929494949494999A9C9C9EA3A6A9AEAEB1B1B1B1B3B3B6B9B9
+BBBBC0C1C1C6C6C6C9CCCFCFD3D4D9DCDFE1E1E4E6E6E7E7ECECECECE7E7E7E6E4E1DFD9D9D4D4D3
+CFCCC9C6C6C6C4C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A4A4A4A4A39E9E9E9EA19E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A99999494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929494949292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929294929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94999A9A9A
+9A9A9A9A9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4A6A6A6A6
+A4A4A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4
+A4A3A3A4A4A4A4A4A4A4A4A1A3A4A4A4A39E9E9EA1A3A4A4A4A4A39EA1A3A3A3A19E9E9EA1A3A3A4
+A4A4A39EA1A3A4A3A19E9E9EA3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494
+949494949494929292929292929292929292929292929292929292929292928F8E8E8C8989898787
+817F7C767472716A6767676767676A6A6C6E7274797C7F7F7F818485858587878787898989898989
+898989898989898C8E8E8E8E8E8E8E8E8E8E8E8C898C8C8C89898989878787878585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7C7C7C7676797C7C7C7F7F7F7F7F8184878787878785858585858585
+8585858787878787817F7F6C81899494949494999A9A9C9C9EA3A4A6ABAEB1B1B1B1B3B3B6B9B9BB
+BBC0C1C1C6C6C6C8CCCFCFD3D4D9D9DFDFE1E4E6E6E7E7E9ECECECE9E7E7E6E6E1DFDCD9D9D4D3D1
+CFCCC8C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEAEABABABA9A9A6A6A6A6A6A6A6A4A4A4A3A19E9E9EA1A19E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A999494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949292929494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94999A9A9A
+9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A4A4
+A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A4A4A4A4A1A1A3A3A4A4A4A4A4
+A3A1A1A1A3A4A4A4A4A4A3A1A1A3A3A3A19E9E9E9EA1A3A3A4A3A19E9E9EA1A39E9E9E9E9E9EA1A3
+A4A3A19E9EA1A3A39E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292929292928E8E8E8C89898987
+84817F797472726C6A6767676767676A6A6C7274767C7C7F7F7F8185858585878789898989898989
+8989898989898C8E8E8E8E8E8E8C8C8C8E8E8C898989898989898787878785858585858585858481
+7F7F7F7F7F7F7F7F7F7C7C7C7C7976797C7F7F7F7F7F7F7F81848787878787878785858585858585
+848484818181817F7F7C72818C9294999999999A9A9C9C9EA1A4A6A9AEAEB1B1B1B1B3B7B9B9BBBB
+C0C1C1C6C6C6C8CCCCCFD1D4D7D9DCDFE1E1E4E6E6E7E7ECE9E7E7E7E7E6E6E4E1DFDCD9D4D4D3D1
+CFCCC6C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A4A4A4A4A39E9E9EA3A39E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A999994949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999A9A9A9A
+9A9A9A9C9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A3A3A3A3A4A4A4A4A4A4A4A4A4A4A3A1A3A3A4A4A4A4A4A3A19E9EA1A3A3A4A4A4
+A39E9E9EA1A3A3A4A4A4A19E9E9EA1A39E9E9E9E9E9E9EA1A3A39E9E9E9E9EA19E9E9E9E9E9E9EA1
+A3A39E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292928F8E8E8C89898987
+87817F7C7674726C6A6A6767676767676A6C6E7274797C7C7F7F8184858585878789898989898989
+89898989898C8E8E8E8E8E8E8C8989898C8C8989898989878787878787858585858585858584817F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7F7F7F7F7F7F81818487878789898987878585858584848181
+81817F7F7C7C7C7C7C74818C92949A9A9A9A9A9C9C9C9E9EA4A6A6A9AEAEB1B1B1B3B6B9B9BBBBBE
+C1C1C4C6C6C8CCCCCFCFD3D4D9D9DFDFE1E4E4E6E6E7E7ECE7E7E7E7E6E6E4E1E1DFD9D9D4D4D3CF
+CFCCC6C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A4A4A4A3A19EA1A3A3A19E9E9E9E9E9E9E9E9C9C9C
+9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9996949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999A9A9A9A
+9A9A9A9C9C9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4
+A4A4A4A4A4A4A4A39EA1A1A3A3A3A4A4A4A4A4A4A3A19E9EA1A3A3A4A4A4A19E9E9E9E9EA1A3A3A3
+A19E9E9E9E9EA1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E
+A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9C9C9C9C9C9A
+9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292928F8E8E8E8C898987
+87847F7C797474726C6A6767676767676A6A6C7274767C7C7F7F8184858585878789898989898989
+898989898C8E8E8E8E8E8E8C89898989898989898987878785858585858585858484848181817F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F81848587878989898987878785858584817F7F7F
+7F7F7F7C7C7C7C7C79818992949A9C9C9C9C9C9C9C9E9EA4A6A6A9ABAEB1B1B1B3B6B7B9B9BBBEC1
+C1C4C6C6C8CCCCCFCFD1D4D9D9DCDFE1E1E4E4E6E7E7E7ECE7E7E7E7E6E4E1E1DFDCD9D9D4D3D1CF
+CCC9C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A4A4A4A4A19EA1A3A4A39E9E9E9E9E9E9E9E9E9C9C
+9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9C9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A3A3A3A3A3A1A1A1A1A19E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A1A1A1A1A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39EA1A1A3A3A3
+A4A4A4A4A4A4A3A19E9E9E9EA1A1A3A3A4A4A4A4A39E9E9E9E9EA1A1A3A3A19E9E9E9E9E9E9EA1A3
+9E9E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9C9C9C9C9C9A
+9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292928F8E8E8E8E898989
+8785817F7C7674726C6A6A6767676767676A6C717476797C7F7F8184858585878787898989898989
+8989898C8C8E8E8E8E8E8C89898989898989898987878785858585858585858584817F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F8184878787878789898987878785858584817F7F7F7F
+7F7C7C7C7C7C7C7C81899294999C9C9C9C9C9C9C9E9EA4A4A6A6A9ABAEB1B1B1B3B6B9B9BBBEC0C1
+C4C6C6C8CCCCCFCFD1D3D4D9D9DCDFE1E1E4E6E6E7E7E9ECE7E7E7E7E4E1E1E1DFDCD9D4D4D3CFCF
+CCC8C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A3A1A3A3A4A3A19E9E9E9E9E9E9E9E9C9C
+9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494
+94949694949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A3A3A3A3A1A1A19E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A19E9E9E9E9E9EA1A1A1A1A3A3A3A3A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9EA1
+A1A3A3A3A4A4A39E9E9E9E9E9E9E9EA1A1A3A3A3A19E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9C9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949494949494949494949494949494
+949492929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E898989
+8787817F7C797674716C6A6767676767676A6A6C7274797C7F7F7F81848585858787898989898989
+89898C8C8E8E8E8E8E8C89898989898787878787878787858585858585858484817F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7F7F7F7F7F8181818487878787878789898989878785858584817F7F7F7F7F
+7F7C7C7C7C727C84898F949A9C9E9C9C9C9C9C9C9EA3A4A6A6A9ABAEAEB1B1B3B6B9B9BBBEC0C1C1
+C6C6C8C9CCCFCFD1D3D4D7D9DCDCDFE1E1E4E6E6E7E7ECECE7E7E7E6E4E1E1DFDFD9D9D4D4D1CFCF
+CCC8C6C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A3A1A3A4A4A4A19E9E9E9E9E9E9E9E9E9C
+9E9E9E9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694
+94969994949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A1
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A3A3A3A3A4A4A4A4A3A19E9E9E9E9E9E
+9E9EA1A1A3A3A19E9E9E9E9E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A9A9999949494949494949494949494949494949494
+9494929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8C8989
+8787847F7F7C7674726C6A6A67676767676A6A6C7274767C7C7F7F81848585858787898989898989
+89898C8C8E8E8E8E8C8C898989898787878787878787858585858481818181817F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7F7F7F7F81818484858787878989898989898989878785858584817F7F7F81817F
+7F7F7C7C797F87898F949A9C9C9E9C9C9C9C9C9EA1A4A4A6A9A9AEAEB1B1B1B3B7B9B9BBBEC1C1C6
+C6C8C9CCCCCFCFD3D4D4D9D9DCDFDFE1E1E4E6E6E7E7ECE9E7E7E7E6E1E1DFDFDCD9D7D4D3D1CFCC
+CCC6C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A3A3A4A4A4A3A19E9E9E9E9E9E9E9E9C
+9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+94999999949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8EFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A3A3A4A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3
+A3A3A3A4A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A3A3A3A19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A999996949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8C8989
+878785817F7C797474716C6A6A6A6A6A6A6A6A6C7174767C7C7F7F81848585858787878989898989
+898989898C8E8E8E8C898989898787878787878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F818487878787878787898989898989898787878585858181818184848181
+7F7C6C7C8187898F949A9C9C9E9E9E9C9C9E9E9EA4A4A6A6A9ABAEAEB1B1B3B6B9B9BBBEC1C1C6C6
+C6C8CCCCCFCFD3D3D4D4D9DCDCDFE1E1E4E4E6E6E7E7ECE7E7E7E6E4E1E1DFDCD9D9D4D4D3CFCFCC
+CCC6C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A3A3A4A4A4A4A19E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9A9A9A9A9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999
+99999999969494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292949292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8E8E8E8EFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A3A3A3A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4
+A4A3A3A1A3A4A4A4A4A4A4A4A3A3A3A19EA1A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A19E9E9E9E9E9E9E9E9E9E9E9E9EA1A1
+A1A1A1A1A1A1A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A999996999A9A9A999994949494949494949494949494949494949494
+929292929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8989
+878787847F7F7C7674726C6A6A6A6A6A6A6A6C6C717274797C7F7F7F818585858587878989898989
+8989898989898C8C898989898787878785858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F81858787878787878789898989898987878787858585858484848787848481
+7F617F8489898F949A9C9C9C9E9E9E9C9E9E9EA3A4A6A6A9ABAEAEB1B1B3B6B9B9B9BBC0C1C6C6C6
+C8C9CCCFCFD1D3D4D4D9D9DCDFDFE1E1E4E4E6E7E7E7ECE7E7E6E6E4E1DFDFDCD9D9D4D3D1CFCFCC
+C8C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9E9E9E9E9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99999A9A999494949494949494949494949494949494949494949494969494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929294949492929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292928F8F8EFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A19EA3A4A4A4A4A4A3A3A1A3A4A4A4A4A4A4A3A3
+A1A19E9EA1A3A4A4A4A4A3A3A19E9E9E9E9EA3A4A4A4A4A4A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9C9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9C9E9C9C9C9C9C9A9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999969496999A99999494949494949494949494949494949494949494
+929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8989
+89878785817F7C7974726E6C6A6A6A6A6A6A6C6C717274767C7C7F7F818485858587878989898989
+89898989898989898989898787878785858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F81848787878989898989898989898787878787878585858585858787878785847F
+7C8587898C9294999A9C9C9C9E9E9E9E9EA1A4A4A4A6A9A9AEAEAEB1B1B3B7B9B9BBBBC1C1C6C6C8
+C9CCCCCFCFD3D4D4D9D9D9DEDFDFE1E1E4E6E6E7E7E9ECE7E7E6E4E1E1DFDCD9D9D4D4D3CFCFCCCC
+C8C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9A9A
+9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+999A9A9A999994949494949494949494949494949494949494949494999994949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929494949494929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9E9EA1A4A4A4A3A3A19E9EA1A4A4A4A4A3A3A19E
+9E9E9E9E9EA3A4A3A3A1A19E9E9E9E9E9E9EA1A4A3A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9E
+9C9C9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9E9E9C9E9E9E
+9E9E9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999949494969999969494949494949494949494949494949494949492
+9292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8C89
+89878787847F7C7C7674726C6C6A6A6A6A6A6C6C717274767C7C7F7F818485858587878989898989
+898989898989878787878787878785858585848484848481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F81818485878789898989898989898989878787858585858585858587878787878784747F
+87898C8E9294999A9C9C9C9E9E9E9E9EA3A4A4A4A6A6A9ABAEAEB1B1B3B6B9B9BBBBC0C1C6C6C6C8
+CCCCCFCFD1D4D4D9D9D9DCDFDFE1E1E1E4E6E6E7E7E7E7E7E6E6E4E1DFDFDCD9D9D4D4D1CFCFCCC9
+C6C6C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A
+9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+999A9A9A9A9994949494949494949494949494949994949494949499999994949494969494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A19E9E9E9E9EA3A4A3A3A19E9E9E
+9E9E9E9E9EA1A3A19E9E9E9E9E9E9E9E9E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E
+9C9C9C9C9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9C9E9E9E9E9E9E9C9C9E9E
+9E9C9C9C9C9C9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999994949494949999949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8C89
+8989878785817F7C767472716C6A6A6A6A6A6A6C71727476797C7F7F818485858587878789898989
+8989898987878787878787878785858585848181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F81818484858787878989898C8C8C8C898989898787858585858585878787878789878785798489
+8F8F929294949A9C9C9C9C9E9E9E9EA4A4A4A6A6A6A9ABAEAEB1B1B3B6B7B9B9BBBBC1C1C6C6C8C9
+CCCCCFCFD3D4D9D9D9DCDFDFDFE1E1E4E4E6E6E6E7E7E7E6E6E4E1E1DFDCD9D9D7D4D3D1CFCCCCC8
+C6C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9999949494949494949494949494969994949494949499999999949494999994949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949492929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A19E9E9E9E9E9E9EA3A3A19E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9E9E9E9C
+9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9E9C9C9C9C9C9C9C9E9E9E9C9C9C9C9E
+9E9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494949494949494949292
+929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8C89
+8989898787817F7C7C7674726C6C6A6A6A6A6A6C6E727474797C7F7F7F8184858585878789898989
+898989878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81848585858587878989898C8C8C898989898987878785858587878787878989898787877987898F
+9292949494999A9C9C9E9E9E9E9EA3A4A6A6A6A6A6A9ABAEAEB1B1B3B7B9B9BBBBC0C1C4C6C6C8CC
+CCCFCFD1D3D4D9D9DCDCDFDFE1E1E1E4E4E6E6E6E6E7E6E6E4E4E1E1DFDCD9D9D4D4D3CFCFCCCCC8
+C6C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A999994949494969494949494949999999494949499999A9A99999499999996949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E
+9E9E9C9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9E9C
+9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C
+9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A999A9A9A9A9A99999494949494949494949494949494949494949494949494949494929292
+929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C89
+8989898987847F7F7C797674726C6C6A6A6A6A6C6C727476767C7C7F7F8184858585878787898989
+8989878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81858585858787898989898989898989898987878785858587878787898989898987847B87898F92
+94949496999A9C9E9E9E9E9E9EA1A4A4A6A6A6A6A9ABAEAEB1B1B3B6B9B9BBBBC0C1C1C6C6C8CCCC
+CFCFCFD3D4D9D9D9DCDCDFDFE1E1E1E4E6E6E6E6E6E6E6E4E4E1E1DFDFD9D9D9D4D3D1CFCFCCC9C6
+C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9994949499999494949494969999999994949699999A9A9A999699999A99949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9A9A9A9C9C9C9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9999999A9A9A9999949494949494949494949494949494949494949494949494949492929292
+9292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C8989
+898989898787817F7F7C767472716C6A6A6A676A6C727476767C7C7F7F8184858585878787878789
+89878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+8485858587878789898989898989898989878787858585858787898989898989878176898C8F9494
+949499999A9C9C9E9E9E9EA1A1A4A4A6A6A6A6A9A9AEAEB1B1B3B6B7B9B9BBBEC1C1C4C6C8C9CCCC
+CFCFD1D3D4D9D9D9DCDFDFDFE1E1E1E4E6E6E4E4E6E6E4E4E1E1E1DFDCD9D9D4D4D3CFCFCCCCC9C6
+C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A999994949999999494949499999A9A99949499999A9A9A9A9A99999A9A99999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9E9C9C9C9A9A9A9A9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C
+9C9C9A9A9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A99999696999A9A9999949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C898989
+898989898787847F7F7C7C7674726C6C6A6A676A6C717476797C7C7F7F7F81858585858587878787
+878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184
+85858587878789898989898989898989878787858585858787898989898787877F76878F92949494
+99999A9A9C9C9E9E9E9EA1A3A4A4A6A6A6A9A9A9ABAEAEB1B1B3B6B9B9BBBEC1C1C4C6C6C8CCCCCF
+CFCFD1D3D4D9D9D9DCDFDFDFE1E1E4E4E6E6E4E4E6E4E4E1E1E1DFDFDCD9D9D4D4D1CFCFCCCCC8C6
+C6C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A999699999A999694949999999A9A9A999699999A9A9A9A9A99999A9A9A999994
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C
+9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9C9C9C9C
+9C9A9A9A9A9A9C9C9C9C9C9A9A9A9A9C9C9C9C9C9C9A9A9C9C9C9C9A9A9A9A9C9C9C9C9C9C9A9A9C
+9C9C9C9A9A9A9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999994949699999994949494949494949494949494949494949494949494949494949292929292
+929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8C8C89898989
+89898987878785817F7F7C797674726C6A6A67676A6E7274767B7C7C7F7F81848585858585878787
+8787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485
+858587878789898989898989898989898787878787878787878989878787878174858F9494949699
+999A9A9C9C9E9E9EA1A3A3A4A4A4A6A9A9A9A9ABAEAEB1B1B3B6B9B9B9BBC0C1C4C6C6C8C9CCCFCF
+CFD1D3D4D4D9D9DCDCDFDFDFE1E1E4E4E6E6E4E4E4E4E1E1E1DFDFDCD9D9D7D4D3D1CFCCCCC9C8C6
+C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9999999A9A99949499999A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9996
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949492929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9C9C
+9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9C9C9C9C9A9A9A
+9C9C9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999494949496999694949494949494949494949494949494949494949494949494929292929292
+9292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8C8989898989
+8989878787878784817F7F7C7674726C6C6A6A676A6C727476797C7C7F7F81848485858585858585
+87878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585
+8585878789898989898989898989898987878787878789898787878787857F74848E94949499999A
+9A9A9C9C9C9EA1A3A3A4A4A4A4A6A6A9A9A9A9AEAEB1B1B1B6B7B9B9BBBEC1C1C6C6C8C8CCCCCFCF
+D1D3D3D4D9D9D9DCDCDFDFE1E1E1E4E4E6E6E4E1E4E1E1E1DFDFDFDCD9D9D4D4D3CFCFCCCCC8C8C6
+C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A99999A9A9A999999999A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+94949494999494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99969494949494969494949494949494949494949494949494949494949494949492929292929292
+9292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989878787878581817F7C797674716C6A6A6A6A6C717274767C7C7F7F7F818184858585848184
+848485858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+85878787898989898989898989898989898789898989898987878785817C74818C949499999A9A9A
+9A9C9C9C9EA1A3A4A4A4A4A4A6A6A9A9A9ABABAEAEB1B1B3B6B9B9BBBBC0C1C6C6C6C8CCCCCFCFCF
+D1D3D4D4D9D9D9DCDFDFDFE1E1E1E4E6E6E4E4E1E1E1E1DFDFDFDCD9D9D9D4D3D1CFCFCCC9C8C6C6
+C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99949496999994949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292929292929292929292
+9292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A99949699999999999A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989878787878784817F7C797674726C6A6A6A6A6A6E727476797C7F7F7F7F8181848484818181
+8181818184848484848484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585
+87878789898989898989898989898989898989898989898787847F7C7674818C9299999A9A9A9A9C
+9C9C9C9E9EA4A4A4A4A4A4A6A6A9A9ABABABAEAEB1B1B3B6B9B9B9BBBEC1C1C6C6C8C9CCCCCFCFD1
+D3D4D4D4D9D9D9DCDFDFDFE1E1E1E4E6E6E4E4E1E1E1DFDFDFDCD9D9D9D4D4D3CFCFCCCCC8C8C6C6
+C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E
+9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999499999996949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494929292929292929292929292929292929292
+92929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9996949494949699999999999999999A9A9A9A9A9A99969494949494969999
+9999999A9A9A9A9A9A9A9A9A9999999999999A9A9A9A9A9A9A9A999999999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A99999A9A9A9A9999
+94949494949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989
+898989878787858584817F7F7C767474716C6A6A6A6A6C727274767C7C7C7F7F7F7F818181817F7F
+7F7F7F7F818181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585858587
+878789898989898989898989898989898989898989878785817F7C747681899294999A9A9A9C9C9C
+9C9C9E9EA3A4A4A4A4A4A6A6A6A9ABABABAEAEB1B1B1B3B7B9B9BBBBC0C1C4C6C6C8CCCCCFCFCFD3
+D3D4D4D9D9D9DCDCDFDFDFE1E1E4E4E6E6E4E1E1E1DFDFDFDCDCD9D9D9D4D4D1CFCFCCC9C8C6C6C6
+C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEACABABABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A39E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9C9E9E9E9C9C9C9C9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999699999A99949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292949492929292929292929292
+92929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9C9C9C
+9C9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999999999999999999999A9A9A9A
+9A9A9A9A9A9A9A9A9A99949494949494949494949494969999999999999A99949494949494949494
+949699999999999A9A9A9A9A9994949496999999999A9A9A9A9A9994969999999A9A9A9A9A9A9A9A
+99999A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A999996999A9A9A9996
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989
+898989878787858585817F7F7C767474726C6A6A6A6A6C71727474797C7C7C7C7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181858585858787
+87898989898989898989898989898989878787878787847F7C76727981898F94999A9A9A9C9C9C9C
+9C9C9EA1A4A4A4A4A6A6A6A6A9A9ABAEAEAEAEB1B1B3B6B9B9BBBBBBC0C1C6C6C8CCCCCFCFCFD1D3
+D4D4D7D9D9D9DCDCDFDFE1E1E1E1E4E6E4E4E1E1DFDFDFDCDCD9D9D9D7D4D3D1CFCCCCC8C8C6C6C6
+C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A99999A9A9A999494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929294949494929292929292929292
+929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9A9A
+9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999999999999999999999999999999999999999999999999999999
+99999999999999999994949494949494949494949494949494949496969994949494949494949494
+949494949496999999999A9996949494949494969999999A9A9996949494949999999A9A9A9A9A9A
+999999999A9A9A9A9A9A9999999A9A9A9A9A9A9A999A9A9A9A9A9999999A9A9A9A9A9A9A999A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969496999A99999496999A999994
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989878785858584817F7C79767474716C6A6A6C6C7172747476797B7C7C7C7C7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184858585858787
+878789898989898989898989898987878787878785817F7C74747C81898F92949A9A9A9C9C9C9C9C
+9E9E9EA3A4A4A6A6A6A6A6A6A9ABAEAEAEAEB1B1B3B6B9B9B9BBBBBEC1C1C6C6C9CCCCCFCFD1D3D4
+D4D4D9D9D9D9DCDEDFDFE1E1E1E1E4E4E4E1E1E1DFDFDFDCD9D9D9D9D4D4D3CFCFCCCCC8C6C6C6C6
+C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9E9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A999A9A9A9A999994949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+9292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9C9C9E9E9E9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A99999999999999999996969494949494949494949494949494949494949494949494949494
+94949494949494969694949494949494949494949494949494949494949494949494949494949494
+949494949494949494969999949494949494949494949699999994949494949494969999999A9A99
+9694949999999A9A9A9999949999999A9A9A9A9A9999999A9A9996949999999A9A9A9A9A99999A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A99999494949699999494949499999494
+94949494949494949494949494949494949494949494949294949494949492929292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989878785858584817F7C79767474726C6C6C6C6C71727474747676797C7C7C7C7C7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818485858585858587
+87878789898989898989898989878787858585847F7F7C76767C81898F92949A9A9A9A9C9C9C9E9E
+9E9E9EA3A4A4A6A6A6A6A6A9A9ABAEAEAEB1B1B1B3B7B9B9BBBBBEC0C1C4C6C8CCCCCFCFCFD1D3D4
+D4D4D9D9D9D9DCDFDFDFE1E1E1E1E4E4E1E1E1DFDFDFDCDCD9D9D9D9D4D3D1CFCFCCC9C6C6C6C6C6
+C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9996949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9C9C9E9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A999999
+99999999969494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929294949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949499999999
+94949494949699999999949494949999999A9A999694999999999494949499999A9A9A9999999999
+9A9A9A9A9A9A999A9A9A9A9A99999A9A9A9A99999A9A9A9999949494949494949494949494969494
+94949494949494949494949494949494949494949494929292949494949292929292929292929292
+929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989878785858584817F7F7C76747474726C6C6C6C72727474767676797C7C7C7C7C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818184848585858585858585
+878787898989898989898989898787858585857F7F7C79797C84898E92949A9A9A9A9A9C9C9E9E9E
+9E9EA1A4A4A6A6A6A6A6A6A9A9ABAEAEAEB1B1B3B6B9B9B9BBBBC0C1C1C6C6C8CCCFCFCFD1D3D3D4
+D4D9D9D9D9DCDCDFDFDFE1E1E1E1E4E4E1E1E1DFDFDEDCD9D9D9D9D4D4D3CFCFCFCCC8C6C6C6C6C6
+C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999994999A9A9A9A9A9A9A9A9999999999999694
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929292929292929292929294949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949994
+94949494949494969996949494949494999999999494949499949494949494969999999994949499
+999A9A9A9A9A99999A9A9A999999999A9A999996999A9A9999949494949494949494949494949494
+94949494949494949494949494949494949494949494929292929494929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989
+89898989878787858585817F7F7C7B76747474726E6C6C7272747476767676797C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858587878787878585858585
+858787878989898989898989878785858585817F7C7C7C7F84898C9294999A9A9A9A9C9C9C9E9E9E
+9EA1A3A4A4A6A6A6A6A9A9A9A9AEAEAEB1B1B3B6B7B9B9BBBBBEC0C1C1C6C6C8CCCFCFCFD1D3D4D4
+D4D9D9D9D9DCDCDFDFE1E1E1E1E1E4E1E1E1DFDFDFDCDCD9D9D9D9D4D3D1CFCFCFCCC8C6C6C6C6C4
+C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999969494949496999A9A9A999999999996949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292929292949494949494949292929292929292929292929292929292929494949494949494
+94949494949292929494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949699949494949494949494949494949499999694949494
+99999A9A9A999999999A9A9996949999999994949699999994949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292929292929292929292
+92929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989
+8989898989878785858584817F7F7C767474747472716C7272747476767676767C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184858787878787878787878785858585
+858787878989898989898987878785858584817F7F7F7F848789929494999A9A9A9A9C9C9E9E9EA1
+A3A3A4A4A4A6A6A9A9A9A9A9ABAEAEB1B1B1B3B7B9B9BBBBBEC0C1C1C4C6C6C9CCCFCFCFD1D3D4D4
+D4D9D9D9D9DCDEDFDFE1E1E1E1E1E4E1E1DFDFDFDCDCD9D9D9D9D4D4D3D1CFCFCCCCC8C6C6C6C4C4
+C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A1
+9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+9292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A99999996949494949494949499999999969494949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+94949494929292929292929294949494949494949494929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494969494949494
+94949999999994949699999994949496999694949494999494949494949494949494949494949494
+94949494949494949494949494949494949494949292929292929292929292929292929292929292
+929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+8989898989878785858584817F7F7C7C76747474747272727474747476767676797C7C7C7C7C7C7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818487878787878787878989898987878785858585
+8787878989898989898987878787858584817F7F7F818487898F9294999A9A9A9A9C9C9C9E9EA1A3
+A4A4A4A4A6A6A6A9A9A9A9ABABAEAEB1B1B3B6B9B9BBBBBBC0C1C1C1C6C6C8CCCFCFCFD1D3D3D4D4
+D4D9D9D9D9DCDFDFDFE1E1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D4D4D3CFCFCFCCC9C8C6C6C6C4C4
+C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A19E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9C9C9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A
+9A9A9A9A9A9A9A9A9A99999996949494949494949494949496949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+929292929292929292929292929292929292929292929292928F8F92929292929292929292929292
+92949492929292929292929292929294949494949494929292929294949494949494949492949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949499999694949494999494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494929292929292929292929292929292929292929292
+929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989
+8989898989878785858584817F7F7F7C797674747474747474747676767679797C7C7C7C7C7C7C7C
+7F7F7F7F7F7F7F7F7F81818181818181818484878789898989898989898989898787878585858587
+87878989898989898989898787878784817F7F81848787898E929494999A9A9C9C9C9C9C9E9EA3A4
+A4A4A4A4A6A6A6A9A9ABABABAEAEB1B1B3B6B9B9B9BBBBBEC0C1C1C6C6C6C8CCCFCFCFD1D3D3D4D4
+D9D9D9D9DCDCDFDFDFE1E1E1E1E1E1E1DFDFDFDCDCD9D9D9D9D4D4D3D1CFCFCCCCC9C6C6C6C4C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEACABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A19E9EA1A3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A99969494949496949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A
+9A9A9A9A9A9A99999996949494949494949494949494949494949494949494949492949494949494
+9494949494949494949494949494949494949494949492929292929292929292929292928F8F8F8F
+8F8F8F8F8F8F8F8F8F9292929292929292929292929292928F8F8F8F8F8F8F8F9292929292929292
+92929292929292929292929292929292929294949492929292929292929494949494949492929294
+94949494949492929494949494949494949494949494949494949494949494949494949494949494
+94949494969494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949492929494949494929292929292929292929292929292929292929292
+9292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989898987878785858584817F7F7C7C79767474747476767676767676797C7C7C7C7C7C7C7C7C
+7F7F7F7F7F7F7F7F8184848484848485858787878989898989898989898989878787858585878787
+878989898989898989898989878785817F7F81848789898E8F9294999A9A9C9C9C9C9C9E9EA1A4A4
+A4A4A4A6A6A6A9A9ABABAEAEAEB1B1B1B3B7B9B9BBBBBEC0C1C1C4C6C6C6C9CCCFCFCFD1D3D4D4D4
+D9D9D9D9DCDCDFDFE1E1E1E1E1E1E1E1DFDFDCDCD9D9D9D9D9D4D4D3CFCFCFCCCCC8C6C6C4C1C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEABABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A19EA3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999494949499949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999996949699
+9A9A9A99999996949494949494949494949494949494949494949494949292929292929494949494
+94949494949494949492929292929292929292929292929292929292929292929292928F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F92929292928F8F8E8E8E8E8E8E8E8F8F8F8F8F929292
+92929292929292929292929292929292929292929292929292929292929292929494949292929292
+92949494949292929292949494949494929294949494949494949494949494949294949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929294949492929292929292929292929292929292929292929292
+92929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989898989878785858584817F7F7F7C7C79767676767676767676767676797C7C7C7C7C7C7C7F
+7F7F7F7F7F7F7F818485858585858787878787878989898C89898989898989878787878787878787
+8789898989898989898989878785848484848587898C8F92929494999A9C9C9C9C9C9E9E9EA3A4A4
+A6A6A6A6A6A6A9A9ABAEAEAEAEB1B1B3B6B9B9B9BBBBC0C1C1C1C6C6C6C8CCCCCFCFCFD1D3D4D4D4
+D9D9D9D9DCDEDFDFE1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D4D4D3D1CFCFCCCCCCC8C6C6C1C1C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEAEABABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A1A1A3A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9E9C9C9C9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999994949999999494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999949494949499
+9A999996949494949494949494949494949494949494949494929292929292929292929494949494
+949292929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E
+8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F
+8F8F9292929292929292929292928F92929292929292929292929292929292929292929292929292
+92929292929292929292929294949492929292929494949494949294949494929292929494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949292
+94949494929494949494949292929292949292929292929292929292929292929292929292929292
+929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+89898989898987878585858481817F7F7F7C7C7C7976767679767676767676767C7C7C7C7C7C7F7F
+7F7F7F7F7F7F818485858585858787878789898989898C8E89898989898989898787878789898989
+89898989898989898989878787878787878787898E8F92929494969A9A9C9C9C9E9E9E9E9EA3A4A4
+A6A6A6A6A6A6A9ABAEAEAEAEB1B1B3B6B7B9B9BBBBBEC0C1C1C6C6C6C8C8CCCFCFCFD1D3D3D4D4D4
+D9D9D9D9DCDCDFDFDFE1E1E1E1E1DFDFDFDCDCD9D9D9D9D7D4D4D3CFCFCCCCCCC9C8C6C6C1C1C1C1
+C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEAEABABABABABA9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A1A3A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969999999994949494949494949494949494949494949494
+94949494949494949494999994949494969994949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494949494949496
+99949494949494949494949494949494949494949492929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E
+8C8989898989898989898989898C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8C8E8E8E
+8E8F8F8F8F8F929292929292928F8F8F8F8F929292929292929292928F9292929292929292929292
+92929292929292929292929292929292929292929292949494929292929492929292929294949494
+94949294949494949494949494949494949494949494949494949494949494949494949494929292
+92949492929294949494929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989
+8989898989898787858585858481817F7F7F7C7C7C7B7979797C7976767679797C7C7C7C7F7F7F7F
+817F7F7F7F818485858587878787878989898989898C8E8E8C898989898989898989898989898989
+8989898989898989898987878787878989898C8E8F9294949496999A9C9C9C9E9E9E9E9EA1A4A4A6
+A6A6A6A6A6A9A9ABAEAEAEB1B1B3B3B6B9B9B9BBBBBEC1C1C4C6C6C6C8CCCCCFCFCFD1D3D3D4D4D9
+D9D9D9D9DCDCDFDFDFE1DFDFDFDFDFDFDEDCD9D9D9D9D9D4D4D4D1CFCFCCCCCCC8C6C6C6C1C1C1C1
+C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A3A3A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A9996949494949494949494949494949494949494
+94949494949494949496999999949494999999949494999996949494969994949494969994949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9999999494949494949494949494
+94949494949494949494949494949494949292929292929292929292929292929292929292929292
+9292929292928F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+8989898989898989898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8C89898989898C8C
+8C8E8E8E8E8F8F8F8F8F9292928F8E8E8E8E8F8F8F9292929292928F8E8F8F8F9292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94929292929494949494949494949494949494949494949494949494949494949494949492929292
+92929492929292929492929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+898989898989878787858585858484817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F81
+8184818181848587878787878787898989898C8C8C8E8E8E8E8C8989898989898989898989898989
+8C8C8C8C8C8E8C898989898787898989898E8E8F9294949499999A9A9C9C9C9E9E9E9EA1A3A4A4A6
+A6A6A6A6A9A9A9ABAEAEAEB1B1B3B6B7B9B9B9BBBBC0C1C1C6C6C6C8C9CCCCCFCFCFD1D3D4D4D4D9
+D9D9D9D9DCDCDFDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D4D3D1CFCCCCCCC9C8C6C6C4C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A99969494949494949494949494949494949494
+94949994949494949499999A99999499999A99999496999A99969494999999949494999999949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A9A9A9A99999994949494949494949494949494
+9494949494949494949494949494929292929292929292929292929292929292929292929292928F
+8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C8C8C8C89898989898989898989898989
+898989898989878787898989898989898989898989898989898989898C8C8C8E8C89898989898989
+8989898C8C8C8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8F8F8F92928F8F8E8E8E8F8F8F929292929292
+928F8F92929292929292929292929292929292929292929292929292929292929292929292929294
+92929292929294949494949492949494949492949494949292929494949492929494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989878785858585858484817F7F7F7F7C7C7C7C7C7C7F7C7C7C7C7C7C7F7F7F7F8181
+848585858584878787878789898989898C8E8E8E8E8E8E8E8E8C898989898C8C8C8C8E8E8E8E8E8E
+8E8E8E8E8E8E8C89898989898989898C8E8F8F92949499999A9A9A9A9C9C9E9E9EA1A3A3A4A4A4A6
+A6A9A9A9A9A9ABAEAEAEB1B1B1B3B6B7B9B9B9BBBBC0C1C6C6C6C8C8CCCCCFCFCFCFD1D3D4D4D4D9
+D9D9D9D9D9DCDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D7D4D4D4D3CFCFCCCCC9C8C8C6C6C4C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A3A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A999494949494949494949494949494949494
+949699999494949499999A9A9A999999999A9A999999999A9A999699999A99999499999A99999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494999A9A9A999996949494949494949494949494949494
+9494949494949494949494929292929292929292929292929292929292929292928F8F8F8F8F8F8E
+8E8E8E8E8E8C8C8C8C8C8C8989898989898989898989898989898989898989898989898989898989
+89898989898787878787878787878787878789898989898989898989898989898989898989898989
+898989898989898C8C8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F929292
+8F8F8E8F8F9292929292928F8F92929292929292929292929292928F929292929292929292929292
+92929292929292929494949292929494949292929294949292929294949292929294949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+898989898989898787878785858585858481817F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F818184
+8585858585878787898989898989898C8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8F8F8F8F8F8F
+8F8E8E8E8E8E8E8C89898989898C8E8F8F9292929494999A9A9A9C9C9C9C9E9EA3A3A4A4A4A4A6A6
+A6A9A9A9A9A9ABAEAEAEB1B1B1B3B6B9B9B9BBBBBEC1C1C6C6C6C8C9CCCCCFCFCFD1D3D3D4D4D7D9
+D9D9D9D9D9DCDEDFDFDFDFDCDCDCDCDCD9D9D9D9D9D4D4D4D3D1CFCFCCCCC8C8C6C6C6C1C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949496999494949494969494949494
+9499999999949496999A9A9A9A9A99999A9A9A9A99999A9A9A9A99999A9A9A9A9999999A9A9A9996
+94949494949994949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999969494949499999999949494949494949494949494949494949494
+949494949494949492929292929292929292929292929292929292928F8F8F8F8F8E8E8E8E8E8E8E
+8E8E8E8C898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898787878787878787878787878787878787878787898989898989898989898989898989
+89898989898989898989898C8C8E8E8E8E8E8C8989898C8C8E8E8E8E8E8E8E8E8E8C8E8E8F8F8F92
+8F8E8E8E8E8F8F8F92928F8F8E8F8F9292929292928F8F9292928F8F8F8F92929292929292929292
+92929292929292929294929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8F8F8F9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989
+89898989898989898787878785858585858481817F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F81818485
+8585858587878787898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F9292929292
+928F8E8E8E8E8E8E8C898C8C8E8F8F929292929494969A9A9C9C9C9C9C9E9E9EA3A4A4A4A4A4A6A6
+A6A9A9A9ABABABAEAEB1B1B1B3B6B7B9B9B9BBBBC0C1C4C6C6C6C8C9CCCCCFCFCFD1D3D3D4D4D9D9
+D9D9D9D9D9DCDCDFDFDFDCDCDCDCDCDCD9D9D9D9D4D4D4D4D3CFCFCCCCC9C8C8C6C6C6C1C1C1C1C1
+C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A39E9E9EA1A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949499999994949496999494949494
+99999A9A99999499999A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A999A9A9A9A9A999A9A9A9A9A99
+96949494999999949494949494949494949494949494949494949494949494949494949494949494
+94949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9999999494949494949494969494949494949494949494949494949494949494
+9494949494929292929292929292929292929292929292928F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E89898989898989898989898989898787878787878787878787878787878787878787878787
+87878787878787858585858585858585878787878787878787878787878787898989898989898989
+89898989898989898989898989898C8C8C8C898989898989898C8C8E8E8E8E8E8C898C8C8E8E8E8F
+8E8E8C8C8C8E8E8F8F8F8F8E8E8E8E8F8F9292928F8F8F8F8F928F8E8E8E8F8F92929292928F8F92
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8F8E8F8F928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+8989898989898989898787878785858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F8181848585
+85858587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8F92929292949494999A9C9C9C9C9C9C9E9EA1A4A4A4A4A4A6A6A6
+A9A9ABABABAEAEAEAEB1B1B1B3B6B7B9B9B9BBBBC0C1C6C6C6C6C8CCCCCCCFCFCFD1D3D4D4D4D9D9
+D9D9D9D9D9DCDCDFDFDCDCD9D9D9D9D9D9D9D9D7D4D4D4D3D1CFCFCCC9C8C8C6C6C6C6C1C1C0C0C1
+C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A3A19E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996999A9999949499999994949496
+99999A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999496999A99999494949494949494949494949494949494949494949494949494949494949494
+949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A99999994949494949494949494949494949494949494949494949492949494949494
+94949292929292929292929292929292929292928F8F8F8F8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989878787878787878787878787878787878787878787878787
+87878787878785858585858585858585858585848485858587878787878787878787878789898989
+898989898989898789898989898989898989898989898989898989898C8C8E8C89898989898C8C8E
+8E8C8989898C8C8E8E8F8E8E8C8C8C8E8E8F8F8F8F8E8E8E8F8F8F8E8E8E8E8F8F8F92928F8F8F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898989898989878787878585858585858481817F7F7F7F817F7F7F7F7F81818484858585
+858587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8F9292929494949494999A9C9C9C9C9E9E9E9EA3A4A4A6A6A6A6A6A6
+A9A9ABAEAEAEAEAEAEB1B1B1B3B6B9B9B9BBBBBEC1C1C6C6C6C8C8CCCCCFCFCFD1D1D3D4D4D4D9D9
+D9D9D9D9D9DCDCDFDFDCD9D9D9D9D9D9D9D9D9D4D4D4D3D3CFCFCCCCC8C8C6C6C6C6C4C1C1C0C0C0
+C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A39E9EA1A3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A99999699999999949499
+999A9A9A9A9A99999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999999999A9A999996949494949999949494949494949494949494949494949494949494949494
+9494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9999999A9A
+9A9A9A9A999996949494949494949494949494949494949494949494949494929292929494949492
+92929292929292929292929292929292928F8F8F8E8E8E8C8C8C8989898E8E8E8E8E8E8E8E8C8C8C
+8C898989898989898989898989898987878785858585858484848484848484848484848484848484
+84848484848484858585858585858585858584848181818484848485858787878787878787878787
+8989898989898787878787878989898989898989898989898989898989898989898989898989898C
+8C898989898989898C8E8E8C8989898C8C8E8E8F8E8E8C8C8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E
+8F8F92929292928F9292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292928F9292929292928F8F8E
+8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989
+898989898989898989898987878787878585858585848481817F81818181817F8181848485858585
+8587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292928F
+8F8E8E8E8E8E8F8F8F8E8E8F9292929494949494999A9A9C9C9E9E9E9E9E9EA4A4A4A6A6A6A6A6A6
+A9ABAEAEAEAEAEAEB1B1B1B3B3B6B9B9BBBBBBC0C1C4C6C6C6C8C9CCCCCFCFCFD1D3D3D4D4D7D9D9
+D9D9D9D9D9D9DCDFDCDCD9D9D9D9D9D9D9D9D4D4D4D4D3D1CFCFCCC9C8C6C6C6C6C6C1C1C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A3A1A1A3A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9999999A9A99999699
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A99999A9A9A9A9A99999494949999999694949494949494949494949494949494949494949494
+9494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9694999A9A
+9A999999949494949494949494949494949494949494949494949494929292929292929494929292
+929292929292929292929292928F8F8F8E8E8E8E8C8C898989898989898C8E8C8C8C898989898989
+89898989898989898989878787878787878785858585848181818181818181818181818181818181
+81818181818181818181818184848484848484817F7F7F8181818181818484848485858787878787
+87878787878787878787878787878787898989898989898987878989898989898989898989898989
+898989898989898989898C8989898989898C8C8E8E8C89898C8C8E8E8E8E8E8E8C8E8E8F8E8E8E8E
+8E8F8F9292928F8F8F8F929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292928F8F8F929292928F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989
+89898989898989898989898989878787878585858585858481818184848481818184848585858585
+87878787898989898989898C8E8E8E8E8E8E8E8E8E8F8F8F8F92929292929292929292929292928F
+8E8E8E8F8F8F92928F8E8E8F92929494949499999A9A9C9C9C9E9E9E9E9EA1A4A4A6A6A6A6A6A6A9
+A9ABAEAEAEAEAEAEB1B1B1B3B6B7B9B9BBBBC0C1C1C6C6C6C6C8C9CCCCCFCFCFD1D3D4D4D4D7D9D9
+D9D9D9D9D9D9DCDCDCD9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCCCCC8C8C6C6C6C6C6C1C1C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A3A1A3A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A999999
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A99999499999A9A9999949494949494949494949494949494949494949494
+94949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999A99
+99999494949494949494949494949494949494949494949494949292929292929292929292929292
+928F92929292929292928F8F8F8E8E8E8C8C89898989898989898989898989898989898989898989
+89898787878787878787878787878787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181817F7F7F7F7F7F7F7F7F7F8181818181848484858587
+87878787878787878585858787878787878787898989898787878787878989898989898989898989
+898989898989898989898989898989898989898C8C89898989898C8C8E8E8E8C8C8C8C8E8E8E8E8E
+8E8E8E8F8F8F8F8E8E8F8F9292929292928F92929292928F92929292928F92929292929292929292
+9292929292929292929292929292928F8F92929292928F92929292928F8F8E8F8F92928F8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898787878785858585858585848484858585848484878787878587
+87878789898989898989898C8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292928F
+8F8F8F9292929292928F8F929292949499999A9A9A9A9C9C9E9E9E9EA1A3A3A4A4A6A6A6A6A6A6A9
+A9ABAEAEAEAEAEAEB1B1B1B3B6B7B9B9BBBEC0C1C1C6C6C6C8C8CCCCCCCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9DCD9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCFCCC9C8C6C6C6C6C6C4C1C1C0BEBEC0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A99999694949494949494949494949494949494949494
+949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999996
+94949494949494949494949494949494949494949494949292929292929292929292929292928F8F
+8F8F92929292928F8F8F8E8E8E8C8C89898989898989898989898989898989898989898787878787
+878787878787878787878585858484848484848481817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818184
+84848585878787858585858584858787878787878787878787878787878787878989898989898787
+898989898989898989898989898989898989898989898989898989898C8C8C8C8989898C8E8E8E8E
+8E8E8C8E8E8F8E8E8E8E8E8F8F9292928F8F8F9292928F8F8F9292928F8F8F929292928F8F929292
+928F92929292928F9292929292928F8F8E8F9292928F8F8F9292928F8F8F8E8E8F8F8F8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898987878787878585858585858485858585858587878787878787
+878789898989898989898C8E8E8E8E8E8E8E8E8F8F92929292929292929292929292929292929292
+92929292929292929292929292949494999A9A9A9C9C9C9C9E9EA1A3A3A4A4A4A6A6A6A6A6A6A6A9
+ABAEAEAEAEB1B1B1B1B1B3B3B6B9B9BBBEC0C1C1C1C6C6C6C8C8CCCCCFCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D3D1D1CFCFCCC8C6C6C6C6C6C4C1C1C1C0BEBEBE
+C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9999949494949494969694949494949494949494
+949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9496949494
+9494949494949494949494949494949494949494949292929292929292929292929292928F8F8E8E
+8E8F8F928F8F8F8E8E8C8C8989898989898989898989898989898989898987878787878787878787
+87858585848484848481818181818181817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F81
+81818184848485858585858484818484858587878787878787878587878787878787898989878787
+8787878989898987878789898989898989898989898989898989898989898C8989898989898C8E8E
+8E8C8C8C8E8E8E8E8E8E8E8E8F8F928F8F8E8E8F8F8F8F8E8E8F8F928F8F8F8F92928F8F8F8F9292
+8F8F8F8F9292928F8F929292928F8F8E8E8E8F8F8F8F8E8F8F92928F8F8E8E8E8E8F8F8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989
+89898989898989898989898989898989898787878785858585858585858585858787878787878787
+8789898989898989898C8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292
+929292929292929292929292929494999A9A9C9C9C9C9C9C9E9EA3A4A4A4A4A4A6A6A6A6A6A6A9A9
+ABAEAEAEB1B1B1B1B1B1B3B6B7B9B9BBBEC1C1C1C6C6C6C6C8C9CCCCCFCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCFCFCCC8C6C6C6C6C6C1C1C1C1C0BEBBBE
+BEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3
+B3B3B1B1AEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494999999949494949494949494
+9494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949492929292949494949292929292929292929292929292928F8F8E8E8E8E8E
+8E8E8F8F8E8E8C8C8989898989898989898989898989898989878787878787878787878585848484
+848181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C79797979797979797C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F
+7F7F7F81818181848484848481818181818484848587878785848484848587878787878787878787
+87878787878987878787878787898989898787878989898989898989898989898989898989898C8C
+8C8C8989898C8E8E8E8E8E8E8E8E8F8F8F8E8E8E8F8F8F8E8E8E8F8F8F8E8E8E8F8F8F8E8E8F8F8F
+8F8E8E8F8F928F8F8F8F92928F8F8F8E8E8E8E8F8F8E8E8E8F8F8F8F8E8E8E8E8E8E8F8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898987878787878585858787878785878787878789898989
+89898989898989898C8E8E8E8E8E8F8F8F8F8F929292929292929292929292929292929292929292
+929292929292929292929494949494999A9C9C9C9C9C9C9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9
+ABAEAEB1B1B1B1B1B1B1B3B6B7B9B9BBC0C1C1C1C4C6C6C6C8CCCCCCCFCFCFCFCFD1D3D4D4D4D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCFCFCCCCC8C6C6C6C6C4C1C1C1C0C0BEBBBB
+BEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3
+B3B3B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E
+9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949499999A99999994949494949494
+94FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494929292929292929492929292929292929292929292928F8F8F8E8E8E8E8E8E8E
+8E8E8E8C8C8989898989898989898989898989898987878787878787878585848484818181818181
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7976767676767676767676767676797979797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F7F7F7F7F7F818181817F7F7F7F7F8181818184848584848181818184848587878787878785
+85878787878787878787878787878789878787878787898989898989898989898989898989898989
+8C89898989898C8C8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8F8E8E8E8E8E8F
+8F8E8E8E8F8F8F8E8E8E8F928F8F8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898989898787878787878787878787878787878989898989
+898989898989898C8E8E8E8E8E8F8F92929292929292929292929292929292929292929292929292
+9292929292929292949494949494969A9A9C9C9C9C9C9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A9AB
+AEAEAEB1B1B1B1B1B1B3B3B6B9B9BBBBC0C1C1C1C4C6C6C8C8CCCCCFCFCFCFCFCFD1D3D3D4D4D7D7
+D7D7D7D7D7D9D9D9D9D9D7D9D9D9D4D4D4D4D3D1D1CFCFCFCCC9C8C6C6C6C6C4C1C1C1C0C0BBBBBB
+BBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3
+B3B3B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9EA1A39E9E9E9E9EA19E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E
+9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A9A9A9999999494949494
+94FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E
+8C8C898989898989898989898989898989878787878787878785848484818181817F7F7F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7B7979797979767676767676767676767676767676767676
+767676767676767676767474747476767676767676767979797C7C7C7C7C7976767979797C7C7C7C
+7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818481817F7F8181818184848587878584
+81848485878787878785858787878787878787878787878789898987878789898989898989898989
+89898989898989898C8E8C8C89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89
+89898989898989898989898989898989898989898989878787878787878787878787898989898989
+898989898989898C8E8E8E8E8E8F9292929292929292929292929292929292929292929292929292
+9292929292949494949494949499999A9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A9A9AB
+AEAEAEB1B1B1B1B1B3B3B6B7B9B9BBBBC0C1C1C1C4C6C6C8C9CCCCCFCFCFCFCFCFD1D3D3D4D4D4D4
+D4D4D4D4D4D4D9D9D9D7D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCC9C8C6C6C6C6C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9EA1A3A19E9E9E9EA39E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E
+9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A999996949494
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C89
+898989898989898989898989898787878787878785858484818181817F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7C7B7979797676767676767676767474747474747474747474747474747474747474
+74747474747474747674747474747474747474747474767676767676797976767676767676767979
+7B7C7C7C7C7C7C7C7F7F7F7F7F7F7C7C7C7F7F7F7F7F7F7F817F7F7F7F7F7F7F7F81818184848481
+81818184848587878584848485858787878787858787878787878787878787878989898989898989
+8989898989898989898C8C898989898C8C8E8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89
+89898989898989898989898989898989898989898989898987878789898989878789898989898989
+89898C8989898C8E8E8E8E8E8F929292929292929292929292929292929292929292929292929292
+92929494949494949494969999999A9A9C9C9C9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A9A9A9AB
+AEAEB1B1B1B3B3B3B3B3B6B7B9B9BBBBC0C1C1C1C6C6C6C8C9CCCCCFCFCFCFCFCFD1D3D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCC8C6C6C6C6C4C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9EA3A4A39E9E9EA1A3A19E9E9E9EA19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9492929292929292929292929292928F8F92929292928F8F8F8E8E8E8E8E8E8E8E8E8C8C89898989
+89898989898989898989878787878787858584848181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+79797976767676767676747474747474747474747472727272727272727272727272727272727272
+72727272727274747474747474747472727272727474747474747474767676767676767674747676
+76767679797C7C7C7C7C7C7C7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181
+7F7F7F81818184848481818181848485878785858585878787878787878787878787898989878787
+89898989898989898989898989898989898C8E8E8E8C898C8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898C8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292929292929292929494
+94949494949494949999999A9A9A9A9A9C9C9E9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A9A9A9A9ABAE
+AEAEB1B1B1B3B3B3B3B3B6B9B9B9BBBBC0C0C1C1C6C6C6C8CCCCCCCFCFCFCFCFCFD1D1D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D1D1CFCFCFCFCCCCC8C6C6C6C6C4C1C1C1C0C0BEBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A1A3A4A4A19E9EA1A3A39E9E9EA1A3A19E9E
+9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949292
+9292929292929292929292928F8F8F8E8F8F92928F8F8E8E8E8E8E8E8E8E8E8E8C89898989898989
+898989898989898787878787878584848181817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C797676
+7676747474747474747474747474747474747272716E6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
+6C6C6C6C6C6E6E717171727272727272716E6E717172727272727274747474747474747474747474
+7474767676767679797C7C7C7C7C7C7C79797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F818181817F7F7F818184848585858585858587878787878585878787878787878787
+878789898989898989898989898989898989898C8C8989898C8C8C8C89898C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929292949494
+94949494949499999A9A9A9A9A9C9C9C9C9C9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A9A9A9A9A9ABAE
+AEAEB1B1B1B3B3B3B3B6B6B9B9B9BBBBBEC0C1C1C6C6C8C8CCCCCFCFCFCFCFCFCFCFD1D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCCC8C6C6C6C6C4C1C1C1C0C0BBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A3A4A4A3A1A1A3A4A3A19E9EA1A3A39E9E
+9E9EA3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9492929292
+929292929292929292928F8F8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8C89898989898989898989
+8989898987878787878585848481817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7976767676
+767474747474747474747474727272727272716C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A
+6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6E7172727272727474747472727272
+747474747474747676767679797B797976767679797B7C7C7C7C7C7C7F7F7F7C7C7C7C7F7F7F7F7F
+7F7F7F7F7F7F7F7F817F7F7F7F7F7F81818484858585858484858787858585858587878787878787
+87878789898989898989898989898989898989898989898989898C898989898C8C8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C89898989898989898989898989898989898989898989898989898989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292929294949494
+949494949494999A9A9A9A9A9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A9A9A9A9ABABABAE
+AEB1B1B1B3B3B3B3B3B6B7B9B9B9BBBBBEC0C1C1C6C6C8C9CCCCCFCFCFCFCFCFCFCFD1D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCCC9C8C6C6C6C6C4C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A3A1A3A4A4A39E9EA3A4A3A19E
+9EA1A3A39E9E9E9EA3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292928F8F8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8C8C898989898989878789898989
+8787878787878584848181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C797976767676747474
+7474747472727272716E6C6C6C6C6C6A6A6A6A6A6A6A676767676767676666666666666666666767
+676766616161646666676767676A6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C6C6E7172727272727171
+717272727274747474747476767676767676767676767679797C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818484848181818485858585858585878787878785
+8787878787898989898989898989898989898989898989898989898989898989898C8E8E8E8C8C8E
+8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C898989898989898989898989898989898989898989898989898989898989898C898989898C8E
+8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292929292929292929294949494
+9494949494999A9A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A6A6A6A6A6A9A9ABABABABAEAE
+AEB1B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C6C6C8C8CCCCCCCFCFCFCFCFCFCFD1D3D3D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1D1CFCFCFCCCCCCC9C8C6C6C6C6C6C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A3A4A4A4A4A1A1A3A4A4A39E
+9EA1A3A3A19E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292928F8F8F8E8E8E8E8E8E8E8E8E8C8989898C8E8E8C898989898989878787878787878787
+87878785848481817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7B7976767676747474747474727272
+71716C6C6C6C6A6A6A6A676766616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF5F5F616161616661616164666767676A6A6A6A6A6C6C6C6C6C6C6C
+6C6C6C6E717272727272747474747474767676767674747676767679797C7C7C7C7979797C7C7C7C
+7C7F7F7F7F7C7C7C7F7F7F7F7F7F7F7F7F7F7F81818181817F818181848585858484848587878585
+858587878787878989898987878989898989898989898989898989898989898989898C8E8C8C8989
+8C8E8E8C898C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C8C898989898989898989898989898989898989898989898989898989898C8E8E8C8C8C8E8E
+8E8E8E8E8F8E8E8E8F8F929292929292929292929292929292929292929292929292929494949494
+9494949494999A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9EA1A4A4A6A6A6A6A6A6A6A9ABABABABABAEAE
+AEB1B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C6C6C8C8CCCCCCCFCFCFCFCFCFCFD1D3D3D3D3D3
+D3D3D3D3D3D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A1A3A4A4A3A1
+A1A3A4A4A39E9EA1A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989878787878785878787878787
+85848481817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C79797676767474747474727272716E6C6C6C6A
+6A6A676661FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F6161616667676A6A6A6A6A6A
+6A6A6A6A6C6C6C6C6E7172727272747474747474747474747474767676767979797676767679797C
+7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F817F7F7F7F81818184848481818184858585
+85858585878787878789878787878989898989898989898989898989898989898989898C8C898989
+898C8C8989898C8E8E8C898C8E8E8E8C8C8C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C89898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F8F92929292929292929292929292929292929292949494949494949494949494
+94949496999A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9EA3A4A4A6A6A6A6A6A6A9A9ABABABABABAEAE
+B1B1B1B3B3B3B3B3B6B7B9B9B9BBBBBBC0C0C1C1C6C6C6C8C9CCCCCFCFCFCFCFCFCFD1D3D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D1CFCFCFCFCCCCCCC9C8C6C6C6C6C6C4C1C1C1C0C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A3A4A4A4A4A3
+A1A3A4A4A3A1A1A3A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+8F8F8F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787878787858585858787858481
+81817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767674747474747272716E6C6C6C6A6A676661FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F616161666767
+67676767676A6A6A6A6C6C6C6C717272727274747474747474747474747476767676767676767676
+79797C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181817F8181848485
+85858585858587878787878787878787898989898989898989898989898989898989898989898989
+898989898989898C8C8989898C8C8C8C89898C8E8E8C8C8C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292929292929292929494949494949494949494949494949494
+999999999A9A9A9A9A9A9C9C9E9E9E9E9E9E9EA1A3A3A4A4A4A6A6A6A6A6A6A9A9ABABABABAEAEAE
+B1B1B1B3B3B3B3B3B6B7B9B9B9BBBBBEC0C1C1C1C6C6C6C8C9CCCCCFCFCFCFCFCFCFCFD1D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D1CFCFCFCFCCCCCCC9C8C8C6C6C6C6C6C4C1C1C1C0C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4
+A3A4A4A4A4A3A1A3A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292928F8F
+8E8E8E8E8E8E8E8E8E8C8C898989898989898989898987878787878785858585858585848181817F
+7F7F7F7C7C7C7C7C7C7C7C7C7C79767676747474747272726E6C6C6A6A676666FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F
+6161646767676767676A6A6A6A6C6C6C6C6E71727272747474747272747474747476767676767676
+767676797B7C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F7F81817F7F7F7F818184
+84858585858585878787878787878787878989898987878989898989898989898989898989898989
+89898989898989898989898989898C898989898C8C8C89898C8E8E8C8C8C8E8E8E8E8C8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C89898989898C89898989898C898989898C8C8C8989898C8E8E8E8E8E8E8E8E8E
+8E8E8F92929292929292929292929292929292929292929494949494949494949494949494949494
+999A9A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9EA3A3A4A4A4A4A6A6A6A6A6A6A6A9ABABABABABAEAEAE
+B1B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C1C6C6C6C8C9CCCCCCCFCFCFCFCFCFCFD1D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D1D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A4A4A4A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8E8E
+8E8E8E8E8E8E8E8C898989898989898989898989878787878785858585858585848181817F7F7F7F
+7C7C7C7C7C7C7C7C7C7B797676747474747272716C6C6A6A6767FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF5F5F5F6161666767676767676A6A6A6C6C6C6C6E717272727271727272727474747474767676
+767676767676797C7C7C7B79797C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81848485858585848587878785858787878787898787878789898989898989898989898989898989
+898989898989898989898989898989898989898989898989898C8C8C89898C8E8E8C8C8C8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C8989898C8E8C8989898C8E8C8C898C8C8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E
+8E8F9292929292929292929292929292929292929294949494949494949494949494949494949499
+9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABAEAEB1
+B1B1B3B3B3B3B3B6B7B9B9B9BBBBBBBEC0C1C1C1C6C6C6C8C8CCCCCCCFCFCFCFCFCFCFD1D1D1D1D1
+D1D1D1D1D1D1D1D3D3D3D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A3A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8C8C8989898989898989898989878787878785858585858585848181817F7F7F7F7C7C7C
+7C7C7C7C7C7C797676767474747272716C6C6A6A67FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF5F5F5F61616667676767676A6A6A6C6C6C6C716E6C6C6C6E717272727474747474
+7674747474767676797979767676797C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F
+7F818184858484848484858585858585878787878787878787878989898989898989898989898989
+898989898989898989898989898989898989898989898989898989898989898C8C8C898C8C8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8C8C8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F9292929292929292929292929292929292929494949494949494949494949494949494949499
+9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABAEAEAEB1
+B1B1B3B3B3B3B3B6B7B9B9B9BBBBBBC0C1C1C1C4C6C6C6C8C8CCCCCCCCCCCCCCCFCFCFD1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCFCCCCCCC9C8C8C6C6C6C6C4C1C1C1C1C1C0C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8C8989898989898989898989898787878785858585858585848481817F7F7F7F7C7C7C7C7C7C
+7C7C7C7976767474747272716C6C6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF5F5F5F61616667676767676A6A6A6C6C6C6C6C6C6C6C6E717272727474
+7474747474747474767676767676767679797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F7F8181818181818184848585858585858587878787878787878789898989898989898989898989
+8989898989898989898989898989898989898989898989898989898989898989898989898C8C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F92929292929292929292929292929292929494949494949494949494949494949494949499999A
+9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABAEAEAEB1
+B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C1C4C6C6C6C6C8C9CCCCCCCCCCCCCFCFCFCFCFCFCFD1
+D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCCCCCCC9C8C8C6C6C6C6C6C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+gr
+gs
+0 872 translate
+ 1200 29 scale
+1200 29 8
+[1200 0 0 29 0 0] L1i
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+gr
+
+end
+
+eplot
+%%EndObject
+
+gr
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/glacier1.pdf b/doc/tutorial/images/glacier1.pdf
new file mode 100644
index 0000000..c5a145e
Binary files /dev/null and b/doc/tutorial/images/glacier1.pdf differ
diff --git a/doc/tutorial/images/glacier2.eps b/doc/tutorial/images/glacier2.eps
new file mode 100755
index 0000000..36b3b9f
--- /dev/null
+++ b/doc/tutorial/images/glacier2.eps
@@ -0,0 +1,39895 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: glacier2.eps
+%%CreationDate: 09/01/2004  09:56:05
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    89   224   546   586
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    89   224   546   586
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  863   305  5477  4347 MR c np
+284 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+gs 899 389 5357 4227 MR c np
+0 sg
+2828 -992 mt 2809 -978 L
+2809 -978 mt 2791 -964 L
+2791 -964 mt 2774 -953 L
+2774 -953 mt 2751 -937 L
+2751 -937 mt 2740 -929 L
+2740 -929 mt 2709 -909 L
+2709 -909 mt 2705 -906 L
+2705 -906 mt 2670 -884 L
+2670 -884 mt 2666 -882 L
+2666 -882 mt 2635 -862 L
+2635 -862 mt 2623 -854 L
+2623 -854 mt 2600 -840 L
+2600 -840 mt 2580 -827 L
+2580 -827 mt 2565 -818 L
+2565 -818 mt 2535 -799 L
+2535 -799 mt 2530 -796 L
+2530 -796 mt 2496 -775 L
+2496 -775 mt 2489 -772 L
+2489 -772 mt 2461 -756 L
+2461 -756 mt 2440 -744 L
+2440 -744 mt 2426 -737 L
+2426 -737 mt 2391 -718 L
+2391 -718 mt 2387 -717 L
+2387 -717 mt 2356 -701 L
+2356 -701 mt 2331 -689 L
+2331 -689 mt 2321 -685 L
+2321 -685 mt 2286 -669 L
+2286 -669 mt 2271 -661 L
+2271 -661 mt 2251 -653 L
+2251 -653 mt 2217 -637 L
+2217 -637 mt 2209 -634 L
+2209 -634 mt 2182 -622 L
+2182 -622 mt 2147 -607 L
+2147 -607 mt 2145 -606 L
+2145 -606 mt 2112 -592 L
+2112 -592 mt 2080 -579 L
+2080 -579 mt 2077 -578 L
+2077 -578 mt 2042 -563 L
+2042 -563 mt 2014 -551 L
+2014 -551 mt 2007 -549 L
+2007 -549 mt 1972 -535 L
+1972 -535 mt 1946 -524 L
+1946 -524 mt 1938 -521 L
+1938 -521 mt 1903 -507 L
+1903 -507 mt 1876 -496 L
+1876 -496 mt 1868 -494 L
+1868 -494 mt 1833 -481 L
+1833 -481 mt 1801 -469 L
+1801 -469 mt 1798 -468 L
+1798 -468 mt 1763 -456 L
+1763 -456 mt 1728 -443 L
+1728 -443 mt 1723 -441 L
+1723 -441 mt 1694 -431 L
+1694 -431 mt 1659 -418 L
+1659 -418 mt 1647 -414 L
+1647 -414 mt 1624 -406 L
+1624 -406 mt 1589 -393 L
+1589 -393 mt 1573 -386 L
+1573 -386 mt 1554 -379 L
+1554 -379 mt 1519 -366 L
+1519 -366 mt 1502 -359 L
+1502 -359 mt 1484 -352 L
+1484 -352 mt 1449 -338 L
+1449 -338 mt 1434 -331 L
+1434 -331 mt 1415 -324 L
+1415 -324 mt 1380 -309 L
+1380 -309 mt 1368 -304 L
+1368 -304 mt 1345 -294 L
+1345 -294 mt 1310 -278 L
+1310 -278 mt 1305 -276 L
+1305 -276 mt 1275 -263 L
+1275 -263 mt 1243 -249 L
+1243 -249 mt 1240 -248 L
+1240 -248 mt 1205 -232 L
+1205 -232 mt 1181 -221 L
+1181 -221 mt 1170 -217 L
+1170 -217 mt 1136 -201 L
+1136 -201 mt 1120 -194 L
+1120 -194 mt 1101 -185 L
+1101 -185 mt 1066 -168 L
+1066 -168 mt 1061 -166 L
+1061 -166 mt 1031 -152 L
+1031 -152 mt 1005 -139 L
+1005 -139 mt  996 -135 L
+ 996 -135 mt  961 -117 L
+ 961 -117 mt  950 -111 L
+ 950 -111 mt  926  -99 L
+ 926  -99 mt  899  -84 L
+ 899  -84 mt  892  -80 L
+ 892  -80 mt  857  -60 L
+ 857  -60 mt  850  -56 L
+ 850  -56 mt  822  -40 L
+ 822  -40 mt  802  -29 L
+ 802  -29 mt  787  -20 L
+ 787  -20 mt  757   -1 L
+ 757   -1 mt  752    1 L
+ 752    1 mt  717   22 L
+ 717   22 mt  713   25 L
+ 713   25 mt  682   45 L
+ 682   45 mt  670   53 L
+ 670   53 mt  647   68 L
+ 647   68 mt  630   80 L
+ 630   80 mt  613   92 L
+ 613   92 mt  591  108 L
+ 591  108 mt  578  118 L
+ 578  118 mt  555  135 L
+ 555  135 mt  543  145 L
+ 543  145 mt  522  163 L
+ 522  163 mt  508  175 L
+ 508  175 mt  490  190 L
+ 490  190 mt  473  206 L
+ 473  206 mt  460  218 L
+ 460  218 mt  438  239 L
+ 438  239 mt  431  245 L
+ 431  245 mt  404  273 L
+ 404  273 mt  403  274 L
+ 403  274 mt  378  300 L
+ 378  300 mt  368  310 L
+ 368  310 mt  352  328 L
+ 352  328 mt  334  348 L
+ 334  348 mt  327  355 L
+ 327  355 mt  302  383 L
+ 302  383 mt  299  386 L
+ 299  386 mt  277  411 L
+ 277  411 mt  264  425 L
+ 264  425 mt  253  438 L
+ 253  438 mt  229  465 L
+ 229  465 mt  228  466 L
+ 228  466 mt  204  493 L
+ 204  493 mt  194  505 L
+ 194  505 mt  180  521 L
+ 180  521 mt  159  545 L
+ 159  545 mt  156  548 L
+ 156  548 mt  133  576 L
+ 133  576 mt  124  586 L
+ 124  586 mt  110  603 L
+ 110  603 mt   90  628 L
+  90  628 mt   87  631 L
+  87  631 mt   65  658 L
+  65  658 mt   55  671 L
+  55  671 mt   43  686 L
+  43  686 mt   22  713 L
+  22  713 mt   20  716 L
+  20  716 mt    2  741 L
+   2  741 mt  -14  764 L
+ -14  764 mt  -17  768 L
+ -17  768 mt  -37  796 L
+ -37  796 mt  -49  813 L
+ -49  813 mt  -56  823 L
+ -56  823 mt  -75  851 L
+ -75  851 mt  -84  864 L
+ -84  864 mt  -94  878 L
+ -94  878 mt -112  906 L
+-112  906 mt -119  917 L
+-119  917 mt -130  933 L
+-130  933 mt -147  961 L
+-147  961 mt -154  972 L
+-154  972 mt -164  988 L
+-164  988 mt -180 1016 L
+-180 1016 mt -188 1029 L
+-188 1029 mt -197 1043 L
+-197 1043 mt -214 1071 L
+-214 1071 mt -223 1087 L
+-223 1087 mt -230 1098 L
+-230 1098 mt -247 1126 L
+-247 1126 mt -258 1143 L
+-258 1143 mt -265 1153 L
+-265 1153 mt -283 1181 L
+-283 1181 mt -293 1195 L
+-293 1195 mt -303 1208 L
+-303 1208 mt -323 1236 L
+-323 1236 mt -328 1243 L
+-328 1243 mt -344 1263 L
+-344 1263 mt -363 1287 L
+-363 1287 mt -366 1291 L
+-366 1291 mt -390 1318 L
+-390 1318 mt -398 1328 L
+-398 1328 mt -414 1346 L
+-414 1346 mt -433 1365 L
+-433 1365 mt -441 1373 L
+-441 1373 mt -467 1400 L
+-467 1400 mt -469 1401 L
+-469 1401 mt -500 1428 L
+-500 1428 mt -502 1431 L
+-502 1431 mt -535 1456 L
+-535 1456 mt -537 1458 L
+-537 1458 mt -572 1482 L
+-572 1482 mt -574 1484 L
+-574 1484 mt -607 1503 L
+-607 1503 mt -622 1511 L
+-622 1511 mt -642 1521 L
+-642 1521 mt -677 1535 L
+-677 1535 mt -686 1539 L
+-686 1539 mt -711 1547 L
+-711 1547 mt -746 1555 L
+-746 1555 mt -781 1560 L
+-781 1560 mt -816 1563 L
+-816 1563 mt -851 1562 L
+-851 1562 mt -886 1559 L
+2862 6023 mt 2879 6007 L
+2879 6007 mt 2893 5996 L
+2893 5996 mt 2914 5974 L
+2914 5974 mt 2920 5968 L
+2920 5968 mt 2943 5941 L
+2943 5941 mt 2949 5931 L
+2949 5931 mt 2962 5913 L
+2962 5913 mt 2975 5886 L
+2975 5886 mt 2978 5858 L
+2978 5858 mt 2970 5831 L
+2970 5831 mt 2949 5805 L
+2949 5805 mt 2947 5803 L
+2947 5803 mt 2914 5777 L
+2914 5777 mt 2913 5776 L
+2913 5776 mt 2879 5755 L
+2879 5755 mt 2868 5748 L
+2868 5748 mt 2844 5737 L
+2844 5737 mt 2813 5721 L
+2813 5721 mt 2809 5719 L
+2809 5719 mt 2774 5704 L
+2774 5704 mt 2750 5693 L
+2750 5693 mt 2740 5689 L
+2740 5689 mt 2705 5677 L
+2705 5677 mt 2676 5665 L
+2676 5665 mt 2670 5664 L
+2670 5664 mt 2635 5652 L
+2635 5652 mt 2600 5639 L
+2600 5639 mt 2597 5638 L
+2597 5638 mt 2565 5627 L
+2565 5627 mt 2530 5615 L
+2530 5615 mt 2517 5610 L
+2517 5610 mt 2496 5603 L
+2496 5603 mt 2461 5591 L
+2461 5591 mt 2439 5583 L
+2439 5583 mt 2426 5579 L
+2426 5579 mt 2391 5566 L
+2391 5566 mt 2361 5555 L
+2361 5555 mt 2356 5554 L
+2356 5554 mt 2321 5541 L
+2321 5541 mt 2286 5528 L
+2286 5528 mt 2286 5528 L
+2286 5528 mt 2251 5516 L
+2251 5516 mt 2217 5503 L
+2217 5503 mt 2211 5500 L
+2211 5500 mt 2182 5490 L
+2182 5490 mt 2147 5476 L
+2147 5476 mt 2138 5473 L
+2138 5473 mt 2112 5463 L
+2112 5463 mt 2077 5450 L
+2077 5450 mt 2066 5445 L
+2066 5445 mt 2042 5436 L
+2042 5436 mt 2007 5423 L
+2007 5423 mt 1996 5418 L
+1996 5418 mt 1972 5409 L
+1972 5409 mt 1938 5395 L
+1938 5395 mt 1927 5390 L
+1927 5390 mt 1903 5381 L
+1903 5381 mt 1868 5367 L
+1868 5367 mt 1858 5363 L
+1858 5363 mt 1833 5353 L
+1833 5353 mt 1798 5338 L
+1798 5338 mt 1791 5335 L
+1791 5335 mt 1763 5324 L
+1763 5324 mt 1728 5309 L
+1728 5309 mt 1726 5308 L
+1726 5308 mt 1694 5294 L
+1694 5294 mt 1663 5280 L
+1663 5280 mt 1659 5279 L
+1659 5279 mt 1624 5263 L
+1624 5263 mt 1603 5253 L
+1603 5253 mt 1589 5246 L
+1589 5246 mt 1554 5228 L
+1554 5228 mt 1549 5225 L
+1549 5225 mt 1519 5210 L
+1519 5210 mt 1498 5198 L
+1498 5198 mt 1484 5190 L
+1484 5190 mt 1451 5170 L
+1451 5170 mt 1449 5169 L
+1449 5169 mt 1415 5147 L
+1415 5147 mt 1408 5143 L
+1408 5143 mt 1380 5124 L
+1380 5124 mt 1368 5115 L
+1368 5115 mt 1345 5099 L
+1345 5099 mt 1330 5088 L
+1330 5088 mt 1310 5072 L
+1310 5072 mt 1295 5060 L
+1295 5060 mt 1275 5044 L
+1275 5044 mt 1263 5033 L
+1263 5033 mt 1240 5013 L
+1240 5013 mt 1232 5005 L
+1232 5005 mt 1205 4979 L
+1205 4979 mt 1204 4978 L
+1204 4978 mt 1177 4950 L
+1177 4950 mt 1170 4943 L
+1170 4943 mt 1152 4923 L
+1152 4923 mt 1136 4904 L
+1136 4904 mt 1128 4895 L
+1128 4895 mt 1106 4868 L
+1106 4868 mt 1101 4861 L
+1101 4861 mt 1084 4840 L
+1084 4840 mt 1066 4815 L
+1066 4815 mt 1064 4813 L
+1064 4813 mt 1044 4785 L
+1044 4785 mt 1031 4766 L
+1031 4766 mt 1026 4758 L
+1026 4758 mt 1008 4730 L
+1008 4730 mt  996 4711 L
+ 996 4711 mt  991 4703 L
+ 991 4703 mt  974 4675 L
+ 974 4675 mt  961 4652 L
+ 961 4652 mt  958 4648 L
+ 958 4648 mt  943 4620 L
+ 943 4620 mt  927 4592 L
+ 927 4592 mt  926 4591 L
+ 926 4591 mt  912 4565 L
+ 912 4565 mt  897 4537 L
+ 897 4537 mt  892 4528 L
+ 892 4528 mt  881 4510 L
+ 881 4510 mt  866 4482 L
+ 866 4482 mt  857 4464 L
+ 857 4464 mt  852 4455 L
+ 852 4455 mt  837 4427 L
+ 837 4427 mt  823 4400 L
+ 823 4400 mt  822 4398 L
+ 822 4398 mt  809 4372 L
+ 809 4372 mt  795 4345 L
+ 795 4345 mt  787 4327 L
+ 787 4327 mt  782 4317 L
+ 782 4317 mt  769 4290 L
+ 769 4290 mt  757 4262 L
+ 757 4262 mt  752 4252 L
+ 752 4252 mt  744 4235 L
+ 744 4235 mt  731 4207 L
+ 731 4207 mt  719 4180 L
+ 719 4180 mt  717 4176 L
+ 717 4176 mt  706 4152 L
+ 706 4152 mt  693 4125 L
+ 693 4125 mt  682 4103 L
+ 682 4103 mt  679 4097 L
+ 679 4097 mt  665 4070 L
+ 665 4070 mt  650 4042 L
+ 650 4042 mt  647 4037 L
+ 647 4037 mt  635 4015 L
+ 635 4015 mt  618 3987 L
+ 618 3987 mt  613 3978 L
+ 613 3978 mt  601 3960 L
+ 601 3960 mt  582 3932 L
+ 582 3932 mt  578 3926 L
+ 578 3926 mt  562 3905 L
+ 562 3905 mt  543 3880 L
+ 543 3880 mt  541 3877 L
+ 541 3877 mt  518 3850 L
+ 518 3850 mt  508 3838 L
+ 508 3838 mt  493 3822 L
+ 493 3822 mt  473 3801 L
+ 473 3801 mt  467 3795 L
+ 467 3795 mt  440 3767 L
+ 440 3767 mt  438 3765 L
+ 438 3765 mt  411 3740 L
+ 411 3740 mt  403 3732 L
+ 403 3732 mt  381 3712 L
+ 381 3712 mt  368 3701 L
+ 368 3701 mt  350 3685 L
+ 350 3685 mt  334 3671 L
+ 334 3671 mt  317 3657 L
+ 317 3657 mt  299 3643 L
+ 299 3643 mt  281 3630 L
+ 281 3630 mt  264 3617 L
+ 264 3617 mt  244 3602 L
+ 244 3602 mt  229 3592 L
+ 229 3592 mt  204 3575 L
+ 204 3575 mt  194 3568 L
+ 194 3568 mt  162 3547 L
+ 162 3547 mt  159 3545 L
+ 159 3545 mt  124 3523 L
+ 124 3523 mt  119 3519 L
+ 119 3519 mt   90 3501 L
+  90 3501 mt   74 3492 L
+  74 3492 mt   55 3480 L
+  55 3480 mt   29 3464 L
+  29 3464 mt   20 3459 L
+  20 3459 mt  -14 3437 L
+ -14 3437 mt  -15 3437 L
+ -15 3437 mt  -49 3417 L
+ -49 3417 mt  -61 3409 L
+ -61 3409 mt  -84 3396 L
+ -84 3396 mt -108 3382 L
+-108 3382 mt -119 3375 L
+-119 3375 mt -154 3355 L
+-154 3355 mt -154 3354 L
+-154 3354 mt -188 3335 L
+-188 3335 mt -202 3327 L
+-202 3327 mt -223 3315 L
+-223 3315 mt -251 3299 L
+-251 3299 mt -258 3296 L
+-258 3296 mt -293 3277 L
+-293 3277 mt -302 3272 L
+-302 3272 mt -328 3258 L
+-328 3258 mt -356 3244 L
+-356 3244 mt -363 3241 L
+-363 3241 mt -398 3224 L
+-398 3224 mt -414 3217 L
+-414 3217 mt -433 3209 L
+-433 3209 mt -467 3195 L
+-467 3195 mt -482 3189 L
+-482 3189 mt -502 3182 L
+-502 3182 mt -537 3171 L
+-537 3171 mt -572 3162 L
+-572 3162 mt -574 3162 L
+-574 3162 mt -607 3155 L
+-607 3155 mt -642 3150 L
+-642 3150 mt -677 3147 L
+-677 3147 mt -711 3146 L
+-711 3146 mt -746 3148 L
+-746 3148 mt -781 3152 L
+-781 3152 mt -816 3160 L
+-816 3160 mt -824 3162 L
+-824 3162 mt -851 3170 L
+-851 3170 mt -886 3182 L
+4031 6023 mt 4030 6022 L
+4030 6022 mt 3995 6006 L
+3995 6006 mt 3970 5996 L
+3970 5996 mt 3960 5991 L
+3960 5991 mt 3925 5975 L
+3925 5975 mt 3910 5968 L
+3910 5968 mt 3890 5958 L
+3890 5958 mt 3855 5942 L
+3855 5942 mt 3851 5941 L
+3851 5941 mt 3821 5926 L
+3821 5926 mt 3792 5913 L
+3792 5913 mt 3786 5910 L
+3786 5910 mt 3751 5893 L
+3751 5893 mt 3733 5886 L
+3733 5886 mt 3716 5877 L
+3716 5877 mt 3681 5859 L
+3681 5859 mt 3679 5858 L
+3679 5858 mt 3646 5839 L
+3646 5839 mt 3632 5831 L
+3632 5831 mt 3611 5813 L
+3611 5813 mt 3598 5803 L
+3598 5803 mt 3579 5776 L
+3579 5776 mt 3577 5764 L
+3577 5764 mt 3573 5748 L
+3573 5748 mt 3577 5731 L
+3577 5731 mt 3578 5721 L
+3578 5721 mt 3590 5693 L
+3590 5693 mt 3607 5665 L
+3607 5665 mt 3611 5660 L
+3611 5660 mt 3626 5638 L
+3626 5638 mt 3646 5613 L
+3646 5613 mt 3648 5610 L
+3648 5610 mt 3669 5583 L
+3669 5583 mt 3681 5569 L
+3681 5569 mt 3692 5555 L
+3692 5555 mt 3715 5528 L
+3715 5528 mt 3716 5527 L
+3716 5527 mt 3739 5500 L
+3739 5500 mt 3751 5488 L
+3751 5488 mt 3763 5473 L
+3763 5473 mt 3786 5448 L
+3786 5448 mt 3788 5445 L
+3788 5445 mt 3813 5418 L
+3813 5418 mt 3821 5410 L
+3821 5410 mt 3838 5390 L
+3838 5390 mt 3855 5371 L
+3855 5371 mt 3863 5363 L
+3863 5363 mt 3887 5335 L
+3887 5335 mt 3890 5332 L
+3890 5332 mt 3911 5308 L
+3911 5308 mt 3925 5291 L
+3925 5291 mt 3933 5280 L
+3933 5280 mt 3955 5253 L
+3955 5253 mt 3960 5247 L
+3960 5247 mt 3976 5225 L
+3976 5225 mt 3995 5200 L
+3995 5200 mt 3997 5198 L
+3997 5198 mt 4016 5170 L
+4016 5170 mt 4030 5151 L
+4030 5151 mt 4036 5143 L
+4036 5143 mt 4054 5115 L
+4054 5115 mt 4065 5100 L
+4065 5100 mt 4073 5088 L
+4073 5088 mt 4090 5060 L
+4090 5060 mt 4100 5046 L
+4100 5046 mt 4107 5033 L
+4107 5033 mt 4124 5005 L
+4124 5005 mt 4134 4988 L
+4134 4988 mt 4140 4978 L
+4140 4978 mt 4156 4950 L
+4156 4950 mt 4169 4926 L
+4169 4926 mt 4171 4923 L
+4171 4923 mt 4186 4895 L
+4186 4895 mt 4200 4868 L
+4200 4868 mt 4204 4860 L
+4204 4860 mt 4214 4840 L
+4214 4840 mt 4228 4813 L
+4228 4813 mt 4239 4788 L
+4239 4788 mt 4241 4785 L
+4241 4785 mt 4253 4758 L
+4253 4758 mt 4264 4730 L
+4264 4730 mt 4274 4703 L
+4274 4703 mt 4274 4702 L
+4274 4702 mt 4282 4675 L
+4282 4675 mt 4289 4648 L
+4289 4648 mt 4294 4620 L
+4294 4620 mt 4295 4592 L
+4295 4592 mt 4290 4565 L
+4290 4565 mt 4282 4537 L
+4282 4537 mt 4274 4513 L
+4274 4513 mt 4273 4510 L
+4273 4510 mt 4263 4482 L
+4263 4482 mt 4253 4455 L
+4253 4455 mt 4243 4427 L
+4243 4427 mt 4239 4410 L
+4239 4410 mt 4237 4400 L
+4237 4400 mt 4234 4372 L
+4234 4372 mt 4235 4345 L
+4235 4345 mt 4239 4318 L
+4239 4318 mt 4239 4317 L
+4239 4317 mt 4247 4290 L
+4247 4290 mt 4255 4262 L
+4255 4262 mt 4262 4235 L
+4262 4235 mt 4272 4207 L
+4272 4207 mt 4274 4201 L
+4274 4201 mt 4284 4180 L
+4284 4180 mt 4300 4152 L
+4300 4152 mt 4309 4140 L
+4309 4140 mt 4323 4125 L
+4323 4125 mt 4344 4105 L
+4344 4105 mt 4356 4097 L
+4356 4097 mt 4379 4084 L
+4379 4084 mt 4413 4072 L
+4413 4072 mt 4448 4071 L
+4448 4071 mt 4483 4075 L
+4483 4075 mt 4518 4089 L
+4518 4089 mt 4533 4097 L
+4533 4097 mt 4553 4109 L
+4553 4109 mt 4573 4125 L
+4573 4125 mt 4588 4136 L
+4588 4136 mt 4605 4152 L
+4605 4152 mt 4623 4170 L
+4623 4170 mt 4632 4180 L
+4632 4180 mt 4655 4207 L
+4655 4207 mt 4657 4211 L
+4657 4211 mt 4674 4235 L
+4674 4235 mt 4692 4262 L
+4692 4262 mt 4692 4263 L
+4692 4263 mt 4710 4290 L
+4710 4290 mt 4727 4312 L
+4727 4312 mt 4731 4317 L
+4731 4317 mt 4752 4345 L
+4752 4345 mt 4762 4356 L
+4762 4356 mt 4777 4372 L
+4777 4372 mt 4797 4392 L
+4797 4392 mt 4807 4400 L
+4807 4400 mt 4832 4421 L
+4832 4421 mt 4841 4427 L
+4841 4427 mt 4867 4447 L
+4867 4447 mt 4878 4455 L
+4878 4455 mt 4902 4472 L
+4902 4472 mt 4915 4482 L
+4915 4482 mt 4936 4499 L
+4936 4499 mt 4951 4510 L
+4951 4510 mt 4971 4526 L
+4971 4526 mt 4985 4537 L
+4985 4537 mt 5006 4555 L
+5006 4555 mt 5015 4565 L
+5015 4565 mt 5041 4591 L
+5041 4591 mt 5042 4592 L
+5042 4592 mt 5067 4620 L
+5067 4620 mt 5076 4628 L
+5076 4628 mt 5095 4648 L
+5095 4648 mt 5111 4661 L
+5111 4661 mt 5127 4675 L
+5127 4675 mt 5146 4688 L
+5146 4688 mt 5167 4703 L
+5167 4703 mt 5181 4711 L
+5181 4711 mt 5215 4730 L
+5215 4730 mt 5215 4730 L
+5215 4730 mt 5250 4747 L
+5250 4747 mt 5273 4758 L
+5273 4758 mt 5285 4763 L
+5285 4763 mt 5320 4777 L
+5320 4777 mt 5342 4785 L
+5342 4785 mt 5355 4790 L
+5355 4790 mt 5390 4802 L
+5390 4802 mt 5425 4813 L
+5425 4813 mt 5425 4813 L
+5425 4813 mt 5459 4823 L
+5459 4823 mt 5494 4832 L
+5494 4832 mt 5526 4840 L
+5526 4840 mt 5529 4841 L
+5529 4841 mt 5564 4849 L
+5564 4849 mt 5599 4856 L
+5599 4856 mt 5634 4862 L
+5634 4862 mt 5666 4868 L
+5666 4868 mt 5669 4868 L
+5669 4868 mt 5704 4873 L
+5704 4873 mt 5738 4877 L
+5738 4877 mt 5773 4881 L
+5773 4881 mt 5808 4884 L
+5808 4884 mt 5843 4886 L
+5843 4886 mt 5878 4888 L
+5878 4888 mt 5913 4889 L
+5913 4889 mt 5948 4889 L
+5948 4889 mt 5983 4888 L
+5983 4888 mt 6017 4887 L
+6017 4887 mt 6052 4885 L
+6052 4885 mt 6087 4881 L
+6087 4881 mt 6122 4877 L
+6122 4877 mt 6157 4872 L
+6157 4872 mt 6182 4868 L
+6182 4868 mt 6192 4866 L
+6192 4866 mt 6227 4859 L
+6227 4859 mt 6261 4851 L
+6261 4851 mt 6296 4842 L
+6296 4842 mt 6302 4840 L
+6302 4840 mt 6331 4832 L
+6331 4832 mt 6366 4820 L
+6366 4820 mt 6385 4813 L
+6385 4813 mt 6401 4807 L
+6401 4807 mt 6436 4792 L
+6436 4792 mt 6450 4785 L
+6450 4785 mt 6471 4775 L
+6471 4775 mt 6504 4758 L
+6504 4758 mt 6506 4757 L
+6506 4757 mt 6540 4736 L
+6540 4736 mt 6550 4730 L
+6550 4730 mt 6575 4713 L
+6575 4713 mt 6590 4703 L
+6590 4703 mt 6610 4687 L
+6610 4687 mt 6626 4675 L
+6626 4675 mt 6645 4659 L
+6645 4659 mt 6658 4648 L
+6658 4648 mt 6680 4628 L
+6680 4628 mt 6689 4620 L
+6689 4620 mt 6715 4595 L
+6715 4595 mt 6717 4592 L
+6717 4592 mt 6744 4565 L
+6744 4565 mt 6750 4559 L
+6750 4559 mt 6771 4537 L
+6771 4537 mt 6785 4523 L
+6785 4523 mt 6797 4510 L
+6797 4510 mt 6819 4485 L
+6819 4485 mt 6822 4482 L
+6822 4482 mt 6847 4455 L
+6847 4455 mt 6854 4447 L
+6854 4447 mt 6872 4427 L
+6872 4427 mt 6889 4409 L
+6889 4409 mt 6897 4400 L
+6897 4400 mt 6922 4372 L
+6922 4372 mt 6924 4371 L
+6924 4371 mt 6948 4345 L
+6948 4345 mt 6959 4333 L
+6959 4333 mt 6973 4317 L
+6973 4317 mt 6994 4294 L
+6994 4294 mt 6998 4290 L
+6998 4290 mt 7023 4262 L
+7023 4262 mt 7029 4255 L
+7029 4255 mt 7047 4235 L
+7047 4235 mt 7063 4216 L
+7063 4216 mt 7071 4207 L
+7071 4207 mt 7094 4180 L
+7094 4180 mt 7098 4175 L
+7098 4175 mt 7117 4152 L
+7117 4152 mt 7133 4133 L
+7133 4133 mt 7140 4125 L
+7140 4125 mt 7162 4097 L
+7162 4097 mt 7168 4090 L
+7168 4090 mt 7184 4070 L
+7184 4070 mt 7203 4046 L
+7203 4046 mt 7206 4042 L
+7206 4042 mt 7227 4015 L
+7227 4015 mt 7238 4000 L
+7238 4000 mt 7248 3987 L
+7248 3987 mt 7269 3960 L
+7269 3960 mt 7273 3954 L
+7273 3954 mt 7290 3932 L
+7290 3932 mt 7308 3909 L
+7308 3909 mt 7311 3905 L
+7311 3905 mt 7333 3877 L
+7333 3877 mt 7342 3865 L
+7342 3865 mt 7354 3850 L
+7354 3850 mt 7376 3822 L
+7376 3822 mt 7377 3820 L
+7377 3820 mt 7397 3795 L
+7397 3795 mt 7412 3774 L
+7412 3774 mt 7418 3767 L
+7418 3767 mt 7439 3740 L
+7439 3740 mt 7447 3729 L
+7447 3729 mt 7460 3712 L
+7460 3712 mt 7481 3685 L
+7481 3685 mt 7482 3683 L
+7482 3683 mt 7503 3657 L
+7503 3657 mt 7517 3639 L
+7517 3639 mt 7525 3630 L
+7525 3630 mt 7547 3602 L
+7547 3602 mt 7552 3597 L
+7552 3597 mt 7571 3575 L
+7571 3575 mt 7587 3556 L
+7587 3556 mt 7595 3547 L
+7595 3547 mt 7619 3519 L
+7619 3519 mt 7621 3517 L
+7621 3517 mt 7645 3492 L
+7645 3492 mt 7656 3479 L
+7656 3479 mt 7671 3464 L
+7671 3464 mt 7691 3443 L
+7691 3443 mt 7698 3437 L
+7698 3437 mt 7725 3409 L
+7725 3409 mt 7726 3409 L
+7726 3409 mt 7755 3382 L
+7755 3382 mt 7761 3376 L
+7761 3376 mt 7785 3354 L
+7785 3354 mt 7796 3344 L
+7796 3344 mt 7817 3327 L
+7817 3327 mt 7831 3315 L
+7831 3315 mt 7850 3299 L
+7850 3299 mt 7865 3287 L
+7865 3287 mt 7886 3272 L
+7886 3272 mt 7900 3261 L
+7900 3261 mt 7925 3244 L
+7925 3244 mt 7935 3237 L
+7935 3237 mt 7969 3217 L
+7969 3217 mt 7970 3216 L
+7970 3216 mt 8005 3198 L
+4092 -992 mt 4100 -989 L
+4100 -989 mt 4134 -973 L
+4134 -973 mt 4153 -964 L
+4153 -964 mt 4169 -957 L
+4169 -957 mt 4204 -941 L
+4204 -941 mt 4213 -937 L
+4213 -937 mt 4239 -925 L
+4239 -925 mt 4273 -909 L
+4273 -909 mt 4274 -909 L
+4274 -909 mt 4309 -893 L
+4309 -893 mt 4333 -882 L
+4333 -882 mt 4344 -877 L
+4344 -877 mt 4379 -862 L
+4379 -862 mt 4397 -854 L
+4397 -854 mt 4413 -847 L
+4413 -847 mt 4448 -833 L
+4448 -833 mt 4463 -827 L
+4463 -827 mt 4483 -819 L
+4483 -819 mt 4518 -805 L
+4518 -805 mt 4532 -799 L
+4532 -799 mt 4553 -791 L
+4553 -791 mt 4588 -777 L
+4588 -777 mt 4600 -772 L
+4600 -772 mt 4623 -762 L
+4623 -762 mt 4657 -747 L
+4657 -747 mt 4665 -744 L
+4665 -744 mt 4692 -732 L
+4692 -732 mt 4727 -717 L
+4727 -717 mt 4728 -717 L
+4728 -717 mt 4762 -701 L
+4762 -701 mt 4788 -689 L
+4788 -689 mt 4797 -685 L
+4797 -685 mt 4832 -669 L
+4832 -669 mt 4847 -661 L
+4847 -661 mt 4867 -653 L
+4867 -653 mt 4902 -636 L
+4902 -636 mt 4906 -634 L
+4906 -634 mt 4936 -620 L
+4936 -620 mt 4965 -606 L
+4965 -606 mt 4971 -603 L
+4971 -603 mt 5006 -587 L
+5006 -587 mt 5023 -579 L
+5023 -579 mt 5041 -570 L
+5041 -570 mt 5076 -554 L
+5076 -554 mt 5081 -551 L
+5081 -551 mt 5111 -537 L
+5111 -537 mt 5138 -524 L
+5138 -524 mt 5146 -520 L
+5146 -520 mt 5181 -504 L
+5181 -504 mt 5195 -496 L
+5195 -496 mt 5215 -487 L
+5215 -487 mt 5250 -470 L
+5250 -470 mt 5252 -469 L
+5252 -469 mt 5285 -453 L
+5285 -453 mt 5308 -441 L
+5308 -441 mt 5320 -436 L
+5320 -436 mt 5355 -418 L
+5355 -418 mt 5364 -414 L
+5364 -414 mt 5390 -401 L
+5390 -401 mt 5418 -386 L
+5418 -386 mt 5425 -383 L
+5425 -383 mt 5459 -365 L
+5459 -365 mt 5472 -359 L
+5472 -359 mt 5494 -347 L
+5494 -347 mt 5524 -331 L
+5524 -331 mt 5529 -329 L
+5529 -329 mt 5564 -310 L
+5564 -310 mt 5576 -304 L
+5576 -304 mt 5599 -292 L
+5599 -292 mt 5626 -276 L
+5626 -276 mt 5634 -272 L
+5634 -272 mt 5669 -253 L
+5669 -253 mt 5676 -249 L
+5676 -249 mt 5704 -233 L
+5704 -233 mt 5724 -221 L
+5724 -221 mt 5738 -213 L
+5738 -213 mt 5771 -194 L
+5771 -194 mt 5773 -192 L
+5773 -192 mt 5808 -171 L
+5808 -171 mt 5816 -166 L
+5816 -166 mt 5843 -149 L
+5843 -149 mt 5860 -139 L
+5860 -139 mt 5878 -127 L
+5878 -127 mt 5902 -111 L
+5902 -111 mt 5913 -104 L
+5913 -104 mt 5943  -84 L
+5943  -84 mt 5948  -81 L
+5948  -81 mt 5983  -57 L
+5983  -57 mt 5983  -56 L
+5983  -56 mt 6017  -32 L
+6017  -32 mt 6022  -29 L
+6022  -29 mt 6052   -7 L
+6052   -7 mt 6060   -1 L
+6060   -1 mt 6087   19 L
+6087   19 mt 6096   25 L
+6096   25 mt 6122   46 L
+6122   46 mt 6131   53 L
+6131   53 mt 6157   73 L
+6157   73 mt 6166   80 L
+6166   80 mt 6192  101 L
+6192  101 mt 6200  108 L
+6200  108 mt 6227  130 L
+6227  130 mt 6233  135 L
+6233  135 mt 6261  160 L
+6261  160 mt 6265  163 L
+6265  163 mt 6296  190 L
+6296  190 mt 6297  190 L
+6297  190 mt 6328  218 L
+6328  218 mt 6331  221 L
+6331  221 mt 6359  245 L
+6359  245 mt 6366  251 L
+6366  251 mt 6390  273 L
+6390  273 mt 6401  283 L
+6401  283 mt 6421  300 L
+6421  300 mt 6436  314 L
+6436  314 mt 6451  328 L
+6451  328 mt 6471  346 L
+6471  346 mt 6482  355 L
+6482  355 mt 6506  377 L
+6506  377 mt 6512  383 L
+6512  383 mt 6540  408 L
+6540  408 mt 6543  411 L
+6543  411 mt 6574  438 L
+6574  438 mt 6575  439 L
+6575  439 mt 6605  466 L
+6605  466 mt 6610  470 L
+6610  470 mt 6636  493 L
+6636  493 mt 6645  501 L
+6645  501 mt 6667  521 L
+6667  521 mt 6680  532 L
+6680  532 mt 6698  548 L
+6698  548 mt 6715  563 L
+6715  563 mt 6729  576 L
+6729  576 mt 6750  595 L
+6750  595 mt 6759  603 L
+6759  603 mt 6785  626 L
+6785  626 mt 6789  631 L
+6789  631 mt 6819  658 L
+6819  658 mt 6819  658 L
+6819  658 mt 6849  686 L
+6849  686 mt 6854  690 L
+6854  690 mt 6879  713 L
+6879  713 mt 6889  722 L
+6889  722 mt 6909  741 L
+6909  741 mt 6924  754 L
+6924  754 mt 6939  768 L
+6939  768 mt 6959  786 L
+6959  786 mt 6969  796 L
+6969  796 mt 6994  819 L
+6994  819 mt 6999  823 L
+6999  823 mt 7028  851 L
+7028  851 mt 7029  851 L
+7029  851 mt 7057  878 L
+7057  878 mt 7063  884 L
+7063  884 mt 7087  906 L
+7087  906 mt 7098  917 L
+7098  917 mt 7116  933 L
+7116  933 mt 7133  950 L
+7133  950 mt 7145  961 L
+7145  961 mt 7168  983 L
+7168  983 mt 7174  988 L
+7174  988 mt 7203 1016 L
+7203 1016 mt 7203 1016 L
+7203 1016 mt 7233 1043 L
+7233 1043 mt 7238 1048 L
+7238 1048 mt 7263 1071 L
+7263 1071 mt 7273 1080 L
+7273 1080 mt 7293 1098 L
+7293 1098 mt 7308 1111 L
+7308 1111 mt 7324 1126 L
+7324 1126 mt 7342 1142 L
+7342 1142 mt 7357 1153 L
+7357 1153 mt 7377 1171 L
+7377 1171 mt 7390 1181 L
+7390 1181 mt 7412 1199 L
+7412 1199 mt 7424 1208 L
+7424 1208 mt 7447 1227 L
+7447 1227 mt 7459 1236 L
+7459 1236 mt 7482 1254 L
+7482 1254 mt 7494 1263 L
+7494 1263 mt 7517 1281 L
+7517 1281 mt 7530 1291 L
+7530 1291 mt 7552 1307 L
+7552 1307 mt 7567 1318 L
+7567 1318 mt 7587 1334 L
+7587 1334 mt 7604 1346 L
+7604 1346 mt 7621 1359 L
+7621 1359 mt 7643 1373 L
+7643 1373 mt 7656 1383 L
+7656 1383 mt 7683 1401 L
+7683 1401 mt 7691 1406 L
+7691 1406 mt 7726 1428 L
+7726 1428 mt 7726 1428 L
+7726 1428 mt 7761 1449 L
+7761 1449 mt 7773 1456 L
+7773 1456 mt 7796 1469 L
+7796 1469 mt 7823 1484 L
+7823 1484 mt 7831 1487 L
+7831 1487 mt 7865 1504 L
+7865 1504 mt 7881 1511 L
+7881 1511 mt 7900 1520 L
+7900 1520 mt 7935 1533 L
+7935 1533 mt 7954 1539 L
+7954 1539 mt 7970 1544 L
+7970 1544 mt 8005 1552 L
+-886 1726 mt -853 1731 L
+-853 1731 mt -851 1731 L
+-851 1731 mt -816 1734 L
+-816 1734 mt -781 1732 L
+-781 1732 mt -775 1731 L
+-775 1731 mt -746 1727 L
+-746 1727 mt -711 1718 L
+-711 1718 mt -677 1707 L
+-677 1707 mt -670 1704 L
+-670 1704 mt -642 1691 L
+-642 1691 mt -613 1676 L
+-613 1676 mt -607 1673 L
+-607 1673 mt -572 1651 L
+-572 1651 mt -569 1649 L
+-569 1649 mt -537 1625 L
+-537 1625 mt -533 1621 L
+-533 1621 mt -502 1595 L
+-502 1595 mt -501 1594 L
+-501 1594 mt -472 1566 L
+-472 1566 mt -467 1562 L
+-467 1562 mt -445 1539 L
+-445 1539 mt -433 1526 L
+-433 1526 mt -419 1511 L
+-419 1511 mt -398 1487 L
+-398 1487 mt -395 1484 L
+-395 1484 mt -371 1456 L
+-371 1456 mt -363 1446 L
+-363 1446 mt -349 1428 L
+-349 1428 mt -328 1401 L
+-328 1401 mt -328 1401 L
+-328 1401 mt -308 1373 L
+-308 1373 mt -293 1353 L
+-293 1353 mt -288 1346 L
+-288 1346 mt -269 1318 L
+-269 1318 mt -258 1302 L
+-258 1302 mt -251 1291 L
+-251 1291 mt -234 1263 L
+-234 1263 mt -223 1246 L
+-223 1246 mt -217 1236 L
+-217 1236 mt -201 1208 L
+-201 1208 mt -188 1187 L
+-188 1187 mt -185 1181 L
+-185 1181 mt -170 1153 L
+-170 1153 mt -155 1126 L
+-155 1126 mt -154 1122 L
+-154 1122 mt -141 1098 L
+-141 1098 mt -126 1071 L
+-126 1071 mt -119 1058 L
+-119 1058 mt -111 1043 L
+-111 1043 mt  -96 1016 L
+ -96 1016 mt  -84  994 L
+ -84  994 mt  -80  988 L
+ -80  988 mt  -65  961 L
+ -65  961 mt  -49  934 L
+ -49  934 mt  -48  933 L
+ -48  933 mt  -32  906 L
+ -32  906 mt  -14  878 L
+ -14  878 mt  -14  878 L
+ -14  878 mt    2  851 L
+   2  851 mt   20  824 L
+  20  824 mt   21  823 L
+  21  823 mt   39  796 L
+  39  796 mt   55  774 L
+  55  774 mt   58  768 L
+  58  768 mt   78  741 L
+  78  741 mt   90  725 L
+  90  725 mt   98  713 L
+  98  713 mt  119  686 L
+ 119  686 mt  124  679 L
+ 124  679 mt  140  658 L
+ 140  658 mt  159  634 L
+ 159  634 mt  162  631 L
+ 162  631 mt  184  603 L
+ 184  603 mt  194  591 L
+ 194  591 mt  207  576 L
+ 207  576 mt  229  549 L
+ 229  549 mt  230  548 L
+ 230  548 mt  253  521 L
+ 253  521 mt  264  508 L
+ 264  508 mt  277  493 L
+ 277  493 mt  299  468 L
+ 299  468 mt  300  466 L
+ 300  466 mt  324  438 L
+ 324  438 mt  334  428 L
+ 334  428 mt  349  411 L
+ 349  411 mt  368  388 L
+ 368  388 mt  373  383 L
+ 373  383 mt  398  355 L
+ 398  355 mt  403  350 L
+ 403  350 mt  423  328 L
+ 423  328 mt  438  312 L
+ 438  312 mt  450  300 L
+ 450  300 mt  473  277 L
+ 473  277 mt  477  273 L
+ 477  273 mt  505  245 L
+ 505  245 mt  508  243 L
+ 508  243 mt  535  218 L
+ 535  218 mt  543  211 L
+ 543  211 mt  567  190 L
+ 567  190 mt  578  182 L
+ 578  182 mt  601  163 L
+ 601  163 mt  613  154 L
+ 613  154 mt  637  135 L
+ 637  135 mt  647  128 L
+ 647  128 mt  676  108 L
+ 676  108 mt  682  104 L
+ 682  104 mt  717   80 L
+ 717   80 mt  717   80 L
+ 717   80 mt  752   58 L
+ 752   58 mt  760   53 L
+ 760   53 mt  787   36 L
+ 787   36 mt  805   25 L
+ 805   25 mt  822   15 L
+ 822   15 mt  851   -1 L
+ 851   -1 mt  857   -4 L
+ 857   -4 mt  892  -24 L
+ 892  -24 mt  900  -29 L
+ 900  -29 mt  926  -43 L
+ 926  -43 mt  951  -56 L
+ 951  -56 mt  961  -62 L
+ 961  -62 mt  996  -80 L
+ 996  -80 mt 1004  -84 L
+1004  -84 mt 1031  -97 L
+1031  -97 mt 1061 -111 L
+1061 -111 mt 1066 -114 L
+1066 -114 mt 1101 -130 L
+1101 -130 mt 1120 -139 L
+1120 -139 mt 1136 -146 L
+1136 -146 mt 1170 -161 L
+1170 -161 mt 1182 -166 L
+1182 -166 mt 1205 -176 L
+1205 -176 mt 1240 -191 L
+1240 -191 mt 1246 -194 L
+1246 -194 mt 1275 -206 L
+1275 -206 mt 1310 -221 L
+1310 -221 mt 1311 -221 L
+1311 -221 mt 1345 -236 L
+1345 -236 mt 1377 -249 L
+1377 -249 mt 1380 -250 L
+1380 -250 mt 1415 -264 L
+1415 -264 mt 1447 -276 L
+1447 -276 mt 1449 -277 L
+1449 -277 mt 1484 -291 L
+1484 -291 mt 1519 -304 L
+1519 -304 mt 1519 -304 L
+1519 -304 mt 1554 -317 L
+1554 -317 mt 1589 -329 L
+1589 -329 mt 1596 -331 L
+1596 -331 mt 1624 -341 L
+1624 -341 mt 1659 -353 L
+1659 -353 mt 1676 -359 L
+1676 -359 mt 1694 -365 L
+1694 -365 mt 1728 -376 L
+1728 -376 mt 1759 -386 L
+1759 -386 mt 1763 -388 L
+1763 -388 mt 1798 -399 L
+1798 -399 mt 1833 -411 L
+1833 -411 mt 1843 -414 L
+1843 -414 mt 1868 -422 L
+1868 -422 mt 1903 -434 L
+1903 -434 mt 1925 -441 L
+1925 -441 mt 1938 -446 L
+1938 -446 mt 1972 -458 L
+1972 -458 mt 2002 -469 L
+2002 -469 mt 2007 -471 L
+2007 -471 mt 2042 -484 L
+2042 -484 mt 2077 -496 L
+2077 -496 mt 2077 -497 L
+2077 -497 mt 2112 -510 L
+2112 -510 mt 2147 -522 L
+2147 -522 mt 2151 -524 L
+2151 -524 mt 2182 -536 L
+2182 -536 mt 2217 -548 L
+2217 -548 mt 2225 -551 L
+2225 -551 mt 2251 -561 L
+2251 -561 mt 2286 -574 L
+2286 -574 mt 2300 -579 L
+2300 -579 mt 2321 -587 L
+2321 -587 mt 2356 -600 L
+2356 -600 mt 2374 -606 L
+2374 -606 mt 2391 -613 L
+2391 -613 mt 2426 -626 L
+2426 -626 mt 2445 -634 L
+2445 -634 mt 2461 -640 L
+2461 -640 mt 2496 -655 L
+2496 -655 mt 2512 -661 L
+2512 -661 mt 2530 -669 L
+2530 -669 mt 2565 -685 L
+2565 -685 mt 2576 -689 L
+2576 -689 mt 2600 -700 L
+2600 -700 mt 2635 -716 L
+2635 -716 mt 2637 -717 L
+2637 -717 mt 2670 -732 L
+2670 -732 mt 2698 -744 L
+2698 -744 mt 2705 -747 L
+2705 -747 mt 2740 -762 L
+2740 -762 mt 2762 -772 L
+2762 -772 mt 2774 -777 L
+2774 -777 mt 2809 -792 L
+2809 -792 mt 2829 -799 L
+2829 -799 mt 2844 -806 L
+2844 -806 mt 2879 -819 L
+2879 -819 mt 2898 -827 L
+2898 -827 mt 2914 -833 L
+2914 -833 mt 2949 -847 L
+2949 -847 mt 2968 -854 L
+2968 -854 mt 2984 -860 L
+2984 -860 mt 3019 -873 L
+3019 -873 mt 3042 -882 L
+3042 -882 mt 3053 -886 L
+3053 -886 mt 3088 -898 L
+3088 -898 mt 3123 -909 L
+3123 -909 mt 3123 -909 L
+3123 -909 mt 3158 -920 L
+3158 -920 mt 3193 -929 L
+3193 -929 mt 3227 -937 L
+3227 -937 mt 3228 -937 L
+3228 -937 mt 3263 -944 L
+3263 -944 mt 3298 -950 L
+3298 -950 mt 3332 -955 L
+3332 -955 mt 3367 -958 L
+3367 -958 mt 3402 -960 L
+3402 -960 mt 3437 -962 L
+3437 -962 mt 3472 -961 L
+3472 -961 mt 3507 -961 L
+3507 -961 mt 3542 -959 L
+3542 -959 mt 3577 -956 L
+3577 -956 mt 3611 -953 L
+3611 -953 mt 3646 -950 L
+3646 -950 mt 3681 -946 L
+3681 -946 mt 3716 -941 L
+3716 -941 mt 3744 -937 L
+3744 -937 mt 3751 -936 L
+3751 -936 mt 3786 -930 L
+3786 -930 mt 3821 -924 L
+3821 -924 mt 3855 -917 L
+3855 -917 mt 3890 -910 L
+3890 -910 mt 3895 -909 L
+3895 -909 mt 3925 -902 L
+3925 -902 mt 3960 -894 L
+3960 -894 mt 3995 -885 L
+3995 -885 mt 4007 -882 L
+4007 -882 mt 4030 -876 L
+4030 -876 mt 4065 -866 L
+4065 -866 mt 4100 -855 L
+4100 -855 mt 4102 -854 L
+4102 -854 mt 4134 -844 L
+4134 -844 mt 4169 -833 L
+4169 -833 mt 4188 -827 L
+4188 -827 mt 4204 -822 L
+4204 -822 mt 4239 -810 L
+4239 -810 mt 4271 -799 L
+4271 -799 mt 4274 -798 L
+4274 -798 mt 4309 -787 L
+4309 -787 mt 4344 -776 L
+4344 -776 mt 4356 -772 L
+4356 -772 mt 4379 -764 L
+4379 -764 mt 4413 -753 L
+4413 -753 mt 4441 -744 L
+4441 -744 mt 4448 -742 L
+4448 -742 mt 4483 -731 L
+4483 -731 mt 4518 -719 L
+4518 -719 mt 4526 -717 L
+4526 -717 mt 4553 -708 L
+4553 -708 mt 4588 -695 L
+4588 -695 mt 4605 -689 L
+4605 -689 mt 4623 -683 L
+4623 -683 mt 4657 -670 L
+4657 -670 mt 4680 -661 L
+4680 -661 mt 4692 -657 L
+4692 -657 mt 4727 -643 L
+4727 -643 mt 4750 -634 L
+4750 -634 mt 4762 -629 L
+4762 -629 mt 4797 -615 L
+4797 -615 mt 4817 -606 L
+4817 -606 mt 4832 -600 L
+4832 -600 mt 4867 -586 L
+4867 -586 mt 4882 -579 L
+4882 -579 mt 4902 -571 L
+4902 -571 mt 4936 -556 L
+4936 -556 mt 4946 -551 L
+4946 -551 mt 4971 -540 L
+4971 -540 mt 5006 -525 L
+5006 -525 mt 5008 -524 L
+5008 -524 mt 5041 -509 L
+5041 -509 mt 5069 -496 L
+5069 -496 mt 5076 -494 L
+5076 -494 mt 5111 -478 L
+5111 -478 mt 5130 -469 L
+5130 -469 mt 5146 -462 L
+5146 -462 mt 5181 -446 L
+5181 -446 mt 5191 -441 L
+5191 -441 mt 5215 -430 L
+5215 -430 mt 5250 -414 L
+5250 -414 mt 5251 -414 L
+5251 -414 mt 5285 -398 L
+5285 -398 mt 5309 -386 L
+5309 -386 mt 5320 -381 L
+5320 -381 mt 5355 -364 L
+5355 -364 mt 5366 -359 L
+5366 -359 mt 5390 -348 L
+5390 -348 mt 5422 -331 L
+5422 -331 mt 5425 -330 L
+5425 -330 mt 5459 -313 L
+5459 -313 mt 5477 -304 L
+5477 -304 mt 5494 -295 L
+5494 -295 mt 5529 -277 L
+5529 -277 mt 5530 -276 L
+5530 -276 mt 5564 -259 L
+5564 -259 mt 5583 -249 L
+5583 -249 mt 5599 -240 L
+5599 -240 mt 5633 -221 L
+5633 -221 mt 5634 -221 L
+5634 -221 mt 5669 -202 L
+5669 -202 mt 5683 -194 L
+5683 -194 mt 5704 -182 L
+5704 -182 mt 5730 -166 L
+5730 -166 mt 5738 -162 L
+5738 -162 mt 5773 -141 L
+5773 -141 mt 5776 -139 L
+5776 -139 mt 5808 -119 L
+5808 -119 mt 5821 -111 L
+5821 -111 mt 5843  -97 L
+5843  -97 mt 5863  -84 L
+5863  -84 mt 5878  -74 L
+5878  -74 mt 5904  -56 L
+5904  -56 mt 5913  -50 L
+5913  -50 mt 5944  -29 L
+5944  -29 mt 5948  -26 L
+5948  -26 mt 5983   -1 L
+5983   -1 mt 5983   -1 L
+5983   -1 mt 6017   23 L
+6017   23 mt 6020   25 L
+6020   25 mt 6052   50 L
+6052   50 mt 6056   53 L
+6056   53 mt 6087   77 L
+6087   77 mt 6092   80 L
+6092   80 mt 6122  105 L
+6122  105 mt 6126  108 L
+6126  108 mt 6157  133 L
+6157  133 mt 6159  135 L
+6159  135 mt 6192  162 L
+6192  162 mt 6192  163 L
+6192  163 mt 6224  190 L
+6224  190 mt 6227  192 L
+6227  192 mt 6256  218 L
+6256  218 mt 6261  223 L
+6261  223 mt 6287  245 L
+6287  245 mt 6296  254 L
+6296  254 mt 6318  273 L
+6318  273 mt 6331  285 L
+6331  285 mt 6348  300 L
+6348  300 mt 6366  317 L
+6366  317 mt 6378  328 L
+6378  328 mt 6401  349 L
+6401  349 mt 6409  355 L
+6409  355 mt 6436  381 L
+6436  381 mt 6439  383 L
+6439  383 mt 6469  411 L
+6469  411 mt 6471  412 L
+6471  412 mt 6499  438 L
+6499  438 mt 6506  444 L
+6506  444 mt 6530  466 L
+6530  466 mt 6540  475 L
+6540  475 mt 6560  493 L
+6560  493 mt 6575  506 L
+6575  506 mt 6591  521 L
+6591  521 mt 6610  538 L
+6610  538 mt 6622  548 L
+6622  548 mt 6645  569 L
+6645  569 mt 6652  576 L
+6652  576 mt 6680  601 L
+6680  601 mt 6682  603 L
+6682  603 mt 6712  631 L
+6712  631 mt 6715  633 L
+6715  633 mt 6742  658 L
+6742  658 mt 6750  665 L
+6750  665 mt 6772  686 L
+6772  686 mt 6785  697 L
+6785  697 mt 6802  713 L
+6802  713 mt 6819  729 L
+6819  729 mt 6832  741 L
+6832  741 mt 6854  762 L
+6854  762 mt 6861  768 L
+6861  768 mt 6889  794 L
+6889  794 mt 6891  796 L
+6891  796 mt 6920  823 L
+6920  823 mt 6924  827 L
+6924  827 mt 6949  851 L
+6949  851 mt 6959  860 L
+6959  860 mt 6978  878 L
+6978  878 mt 6994  894 L
+6994  894 mt 7006  906 L
+7006  906 mt 7029  928 L
+7029  928 mt 7034  933 L
+7034  933 mt 7063  961 L
+7063  961 mt 7063  962 L
+7063  962 mt 7091  988 L
+7091  988 mt 7098  996 L
+7098  996 mt 7119 1016 L
+7119 1016 mt 7133 1030 L
+7133 1030 mt 7147 1043 L
+7147 1043 mt 7168 1064 L
+7168 1064 mt 7175 1071 L
+7175 1071 mt 7203 1098 L
+7203 1098 mt 7203 1098 L
+7203 1098 mt 7231 1126 L
+7231 1126 mt 7238 1132 L
+7238 1132 mt 7260 1153 L
+7260 1153 mt 7273 1165 L
+7273 1165 mt 7289 1181 L
+7289 1181 mt 7308 1198 L
+7308 1198 mt 7319 1208 L
+7319 1208 mt 7342 1229 L
+7342 1229 mt 7350 1236 L
+7350 1236 mt 7377 1260 L
+7377 1260 mt 7381 1263 L
+7381 1263 mt 7412 1291 L
+7412 1291 mt 7412 1291 L
+7412 1291 mt 7444 1318 L
+7444 1318 mt 7447 1322 L
+7447 1322 mt 7475 1346 L
+7475 1346 mt 7482 1352 L
+7482 1352 mt 7506 1373 L
+7506 1373 mt 7517 1383 L
+7517 1383 mt 7538 1401 L
+7538 1401 mt 7552 1413 L
+7552 1413 mt 7570 1428 L
+7570 1428 mt 7587 1443 L
+7587 1443 mt 7603 1456 L
+7603 1456 mt 7621 1472 L
+7621 1472 mt 7636 1484 L
+7636 1484 mt 7656 1500 L
+7656 1500 mt 7671 1511 L
+7671 1511 mt 7691 1528 L
+7691 1528 mt 7706 1539 L
+7706 1539 mt 7726 1555 L
+7726 1555 mt 7742 1566 L
+7742 1566 mt 7761 1581 L
+7761 1581 mt 7779 1594 L
+7779 1594 mt 7796 1606 L
+7796 1606 mt 7819 1621 L
+7819 1621 mt 7831 1629 L
+7831 1629 mt 7862 1649 L
+7862 1649 mt 7865 1651 L
+7865 1651 mt 7900 1671 L
+7900 1671 mt 7911 1676 L
+7911 1676 mt 7935 1689 L
+7935 1689 mt 7969 1704 L
+7969 1704 mt 7970 1704 L
+7970 1704 mt 8005 1717 L
+-886 2946 mt -874 2942 L
+-874 2942 mt -851 2933 L
+-851 2933 mt -816 2923 L
+-816 2923 mt -781 2918 L
+-781 2918 mt -746 2918 L
+-746 2918 mt -711 2921 L
+-711 2921 mt -677 2929 L
+-677 2929 mt -642 2939 L
+-642 2939 mt -636 2942 L
+-636 2942 mt -607 2953 L
+-607 2953 mt -572 2968 L
+-572 2968 mt -571 2969 L
+-571 2969 mt -537 2986 L
+-537 2986 mt -518 2997 L
+-518 2997 mt -502 3005 L
+-502 3005 mt -470 3024 L
+-470 3024 mt -467 3025 L
+-467 3025 mt -433 3046 L
+-433 3046 mt -424 3052 L
+-424 3052 mt -398 3068 L
+-398 3068 mt -380 3079 L
+-380 3079 mt -363 3090 L
+-363 3090 mt -337 3107 L
+-337 3107 mt -328 3112 L
+-328 3112 mt -294 3134 L
+-294 3134 mt -293 3135 L
+-293 3135 mt -258 3159 L
+-258 3159 mt -254 3162 L
+-254 3162 mt -223 3183 L
+-223 3183 mt -214 3189 L
+-214 3189 mt -188 3206 L
+-188 3206 mt -174 3217 L
+-174 3217 mt -154 3231 L
+-154 3231 mt -134 3244 L
+-134 3244 mt -119 3255 L
+-119 3255 mt  -94 3272 L
+ -94 3272 mt  -84 3279 L
+ -84 3279 mt  -54 3299 L
+ -54 3299 mt  -49 3303 L
+ -49 3303 mt  -14 3327 L
+ -14 3327 mt  -14 3327 L
+ -14 3327 mt   20 3350 L
+  20 3350 mt   26 3354 L
+  26 3354 mt   55 3374 L
+  55 3374 mt   67 3382 L
+  67 3382 mt   90 3397 L
+  90 3397 mt  108 3409 L
+ 108 3409 mt  124 3420 L
+ 124 3420 mt  149 3437 L
+ 149 3437 mt  159 3443 L
+ 159 3443 mt  191 3464 L
+ 191 3464 mt  194 3467 L
+ 194 3467 mt  229 3490 L
+ 229 3490 mt  231 3492 L
+ 231 3492 mt  264 3515 L
+ 264 3515 mt  270 3519 L
+ 270 3519 mt  299 3540 L
+ 299 3540 mt  308 3547 L
+ 308 3547 mt  334 3566 L
+ 334 3566 mt  344 3575 L
+ 344 3575 mt  368 3594 L
+ 368 3594 mt  379 3602 L
+ 379 3602 mt  403 3623 L
+ 403 3623 mt  411 3630 L
+ 411 3630 mt  438 3653 L
+ 438 3653 mt  442 3657 L
+ 442 3657 mt  473 3685 L
+ 473 3685 mt  473 3685 L
+ 473 3685 mt  501 3712 L
+ 501 3712 mt  508 3719 L
+ 508 3719 mt  529 3740 L
+ 529 3740 mt  543 3755 L
+ 543 3755 mt  554 3767 L
+ 554 3767 mt  578 3793 L
+ 578 3793 mt  579 3795 L
+ 579 3795 mt  601 3822 L
+ 601 3822 mt  613 3836 L
+ 613 3836 mt  623 3850 L
+ 623 3850 mt  642 3877 L
+ 642 3877 mt  647 3885 L
+ 647 3885 mt  660 3905 L
+ 660 3905 mt  677 3932 L
+ 677 3932 mt  682 3941 L
+ 682 3941 mt  692 3960 L
+ 692 3960 mt  707 3987 L
+ 707 3987 mt  717 4007 L
+ 717 4007 mt  721 4015 L
+ 721 4015 mt  734 4042 L
+ 734 4042 mt  746 4070 L
+ 746 4070 mt  752 4082 L
+ 752 4082 mt  759 4097 L
+ 759 4097 mt  770 4125 L
+ 770 4125 mt  782 4152 L
+ 782 4152 mt  787 4164 L
+ 787 4164 mt  793 4180 L
+ 793 4180 mt  805 4207 L
+ 805 4207 mt  816 4235 L
+ 816 4235 mt  822 4249 L
+ 822 4249 mt  827 4262 L
+ 827 4262 mt  839 4290 L
+ 839 4290 mt  851 4317 L
+ 851 4317 mt  857 4330 L
+ 857 4330 mt  863 4345 L
+ 863 4345 mt  876 4372 L
+ 876 4372 mt  890 4400 L
+ 890 4400 mt  892 4404 L
+ 892 4404 mt  903 4427 L
+ 903 4427 mt  918 4455 L
+ 918 4455 mt  926 4472 L
+ 926 4472 mt  932 4482 L
+ 932 4482 mt  947 4510 L
+ 947 4510 mt  961 4536 L
+ 961 4536 mt  962 4537 L
+ 962 4537 mt  977 4565 L
+ 977 4565 mt  992 4592 L
+ 992 4592 mt  996 4599 L
+ 996 4599 mt 1008 4620 L
+1008 4620 mt 1024 4648 L
+1024 4648 mt 1031 4660 L
+1031 4660 mt 1040 4675 L
+1040 4675 mt 1057 4703 L
+1057 4703 mt 1066 4716 L
+1066 4716 mt 1075 4730 L
+1075 4730 mt 1093 4758 L
+1093 4758 mt 1101 4768 L
+1101 4768 mt 1113 4785 L
+1113 4785 mt 1133 4813 L
+1133 4813 mt 1136 4816 L
+1136 4816 mt 1155 4840 L
+1155 4840 mt 1170 4859 L
+1170 4859 mt 1177 4868 L
+1177 4868 mt 1202 4895 L
+1202 4895 mt 1205 4899 L
+1205 4899 mt 1227 4923 L
+1227 4923 mt 1240 4936 L
+1240 4936 mt 1254 4950 L
+1254 4950 mt 1275 4970 L
+1275 4970 mt 1283 4978 L
+1283 4978 mt 1310 5001 L
+1310 5001 mt 1315 5005 L
+1315 5005 mt 1345 5030 L
+1345 5030 mt 1348 5033 L
+1348 5033 mt 1380 5056 L
+1380 5056 mt 1385 5060 L
+1385 5060 mt 1415 5081 L
+1415 5081 mt 1424 5088 L
+1424 5088 mt 1449 5104 L
+1449 5104 mt 1467 5115 L
+1467 5115 mt 1484 5126 L
+1484 5126 mt 1512 5143 L
+1512 5143 mt 1519 5147 L
+1519 5147 mt 1554 5166 L
+1554 5166 mt 1563 5170 L
+1563 5170 mt 1589 5184 L
+1589 5184 mt 1618 5198 L
+1618 5198 mt 1624 5201 L
+1624 5201 mt 1659 5217 L
+1659 5217 mt 1678 5225 L
+1678 5225 mt 1694 5232 L
+1694 5232 mt 1728 5247 L
+1728 5247 mt 1743 5253 L
+1743 5253 mt 1763 5261 L
+1763 5261 mt 1798 5275 L
+1798 5275 mt 1812 5280 L
+1812 5280 mt 1833 5289 L
+1833 5289 mt 1868 5302 L
+1868 5302 mt 1884 5308 L
+1884 5308 mt 1903 5315 L
+1903 5315 mt 1938 5328 L
+1938 5328 mt 1959 5335 L
+1959 5335 mt 1972 5340 L
+1972 5340 mt 2007 5352 L
+2007 5352 mt 2038 5363 L
+2038 5363 mt 2042 5364 L
+2042 5364 mt 2077 5376 L
+2077 5376 mt 2112 5387 L
+2112 5387 mt 2122 5390 L
+2122 5390 mt 2147 5399 L
+2147 5399 mt 2182 5409 L
+2182 5409 mt 2212 5418 L
+2212 5418 mt 2217 5419 L
+2217 5419 mt 2251 5430 L
+2251 5430 mt 2286 5439 L
+2286 5439 mt 2309 5445 L
+2309 5445 mt 2321 5449 L
+2321 5449 mt 2356 5458 L
+2356 5458 mt 2391 5467 L
+2391 5467 mt 2414 5473 L
+2414 5473 mt 2426 5476 L
+2426 5476 mt 2461 5485 L
+2461 5485 mt 2496 5493 L
+2496 5493 mt 2530 5500 L
+2530 5500 mt 2530 5501 L
+2530 5501 mt 2565 5508 L
+2565 5508 mt 2600 5515 L
+2600 5515 mt 2635 5522 L
+2635 5522 mt 2670 5527 L
+2670 5527 mt 2674 5528 L
+2674 5528 mt 2705 5533 L
+2705 5533 mt 2740 5537 L
+2740 5537 mt 2774 5541 L
+2774 5541 mt 2809 5544 L
+2809 5544 mt 2844 5547 L
+2844 5547 mt 2879 5549 L
+2879 5549 mt 2914 5551 L
+2914 5551 mt 2949 5552 L
+2949 5552 mt 2984 5553 L
+2984 5553 mt 3019 5553 L
+3019 5553 mt 3053 5552 L
+3053 5552 mt 3088 5550 L
+3088 5550 mt 3123 5548 L
+3123 5548 mt 3158 5545 L
+3158 5545 mt 3193 5540 L
+3193 5540 mt 3228 5535 L
+3228 5535 mt 3261 5528 L
+3261 5528 mt 3263 5528 L
+3263 5528 mt 3298 5519 L
+3298 5519 mt 3332 5509 L
+3332 5509 mt 3359 5500 L
+3359 5500 mt 3367 5498 L
+3367 5498 mt 3402 5484 L
+3402 5484 mt 3429 5473 L
+3429 5473 mt 3437 5469 L
+3437 5469 mt 3472 5453 L
+3472 5453 mt 3486 5445 L
+3486 5445 mt 3507 5435 L
+3507 5435 mt 3536 5418 L
+3536 5418 mt 3542 5415 L
+3542 5415 mt 3577 5394 L
+3577 5394 mt 3582 5390 L
+3582 5390 mt 3611 5371 L
+3611 5371 mt 3623 5363 L
+3623 5363 mt 3646 5347 L
+3646 5347 mt 3663 5335 L
+3663 5335 mt 3681 5322 L
+3681 5322 mt 3700 5308 L
+3700 5308 mt 3716 5296 L
+3716 5296 mt 3736 5280 L
+3736 5280 mt 3751 5269 L
+3751 5269 mt 3770 5253 L
+3770 5253 mt 3786 5239 L
+3786 5239 mt 3801 5225 L
+3801 5225 mt 3821 5207 L
+3821 5207 mt 3830 5198 L
+3830 5198 mt 3855 5172 L
+3855 5172 mt 3857 5170 L
+3857 5170 mt 3883 5143 L
+3883 5143 mt 3890 5134 L
+3890 5134 mt 3907 5115 L
+3907 5115 mt 3925 5093 L
+3925 5093 mt 3930 5088 L
+3930 5088 mt 3951 5060 L
+3951 5060 mt 3960 5049 L
+3960 5049 mt 3972 5033 L
+3972 5033 mt 3992 5005 L
+3992 5005 mt 3995 5002 L
+3995 5002 mt 4011 4978 L
+4011 4978 mt 4030 4950 L
+4030 4950 mt 4030 4950 L
+4030 4950 mt 4047 4923 L
+4047 4923 mt 4064 4895 L
+4064 4895 mt 4065 4894 L
+4065 4894 mt 4080 4868 L
+4080 4868 mt 4096 4840 L
+4096 4840 mt 4100 4833 L
+4100 4833 mt 4111 4813 L
+4111 4813 mt 4126 4785 L
+4126 4785 mt 4134 4768 L
+4134 4768 mt 4140 4758 L
+4140 4758 mt 4154 4730 L
+4154 4730 mt 4167 4703 L
+4167 4703 mt 4169 4697 L
+4169 4697 mt 4180 4675 L
+4180 4675 mt 4191 4648 L
+4191 4648 mt 4202 4620 L
+4202 4620 mt 4204 4611 L
+4204 4611 mt 4208 4592 L
+4208 4592 mt 4206 4565 L
+4206 4565 mt 4204 4555 L
+4204 4555 mt 4200 4537 L
+4200 4537 mt 4191 4510 L
+4191 4510 mt 4179 4482 L
+4179 4482 mt 4169 4461 L
+4169 4461 mt 4166 4455 L
+4166 4455 mt 4153 4427 L
+4153 4427 mt 4144 4400 L
+4144 4400 mt 4140 4372 L
+4140 4372 mt 4138 4345 L
+4138 4345 mt 4143 4317 L
+4143 4317 mt 4150 4290 L
+4150 4290 mt 4155 4262 L
+4155 4262 mt 4158 4235 L
+4158 4235 mt 4158 4207 L
+4158 4207 mt 4157 4180 L
+4157 4180 mt 4156 4152 L
+4156 4152 mt 4157 4125 L
+4157 4125 mt 4161 4097 L
+4161 4097 mt 4167 4070 L
+4167 4070 mt 4169 4047 L
+4169 4047 mt 4170 4042 L
+4170 4042 mt 4172 4015 L
+4172 4015 mt 4171 3987 L
+4171 3987 mt 4172 3960 L
+4172 3960 mt 4171 3932 L
+4171 3932 mt 4176 3905 L
+4176 3905 mt 4183 3877 L
+4183 3877 mt 4193 3850 L
+4193 3850 mt 4204 3822 L
+4204 3822 mt 4204 3821 L
+4204 3821 mt 4216 3795 L
+4216 3795 mt 4228 3767 L
+4228 3767 mt 4239 3747 L
+4239 3747 mt 4245 3740 L
+4245 3740 mt 4274 3716 L
+4274 3716 mt 4279 3712 L
+4279 3712 mt 4309 3697 L
+4309 3697 mt 4333 3685 L
+4333 3685 mt 4344 3680 L
+4344 3680 mt 4379 3667 L
+4379 3667 mt 4408 3657 L
+4408 3657 mt 4413 3655 L
+4413 3655 mt 4448 3647 L
+4448 3647 mt 4483 3647 L
+4483 3647 mt 4518 3656 L
+4518 3656 mt 4519 3657 L
+4519 3657 mt 4553 3676 L
+4553 3676 mt 4562 3685 L
+4562 3685 mt 4588 3710 L
+4588 3710 mt 4590 3712 L
+4590 3712 mt 4604 3740 L
+4604 3740 mt 4618 3767 L
+4618 3767 mt 4623 3776 L
+4623 3776 mt 4632 3795 L
+4632 3795 mt 4645 3822 L
+4645 3822 mt 4656 3850 L
+4656 3850 mt 4657 3853 L
+4657 3853 mt 4668 3877 L
+4668 3877 mt 4684 3905 L
+4684 3905 mt 4692 3917 L
+4692 3917 mt 4703 3932 L
+4703 3932 mt 4722 3960 L
+4722 3960 mt 4727 3967 L
+4727 3967 mt 4742 3987 L
+4742 3987 mt 4762 4011 L
+4762 4011 mt 4765 4015 L
+4765 4015 mt 4788 4042 L
+4788 4042 mt 4797 4053 L
+4797 4053 mt 4810 4070 L
+4810 4070 mt 4832 4095 L
+4832 4095 mt 4833 4097 L
+4833 4097 mt 4854 4125 L
+4854 4125 mt 4867 4143 L
+4867 4143 mt 4872 4152 L
+4872 4152 mt 4885 4180 L
+4885 4180 mt 4899 4207 L
+4899 4207 mt 4902 4212 L
+4902 4212 mt 4916 4235 L
+4916 4235 mt 4936 4258 L
+4936 4258 mt 4941 4262 L
+4941 4262 mt 4970 4290 L
+4970 4290 mt 4971 4291 L
+4971 4291 mt 5000 4317 L
+5000 4317 mt 5006 4324 L
+5006 4324 mt 5026 4345 L
+5026 4345 mt 5041 4363 L
+5041 4363 mt 5048 4372 L
+5048 4372 mt 5071 4400 L
+5071 4400 mt 5076 4405 L
+5076 4405 mt 5096 4427 L
+5096 4427 mt 5111 4441 L
+5111 4441 mt 5125 4455 L
+5125 4455 mt 5146 4481 L
+5146 4481 mt 5146 4482 L
+5146 4482 mt 5154 4510 L
+5154 4510 mt 5156 4537 L
+5156 4537 mt 5162 4565 L
+5162 4565 mt 5174 4592 L
+5174 4592 mt 5181 4602 L
+5181 4602 mt 5193 4620 L
+5193 4620 mt 5215 4640 L
+5215 4640 mt 5226 4648 L
+5226 4648 mt 5250 4664 L
+5250 4664 mt 5270 4675 L
+5270 4675 mt 5285 4683 L
+5285 4683 mt 5320 4701 L
+5320 4701 mt 5324 4703 L
+5324 4703 mt 5355 4717 L
+5355 4717 mt 5386 4730 L
+5386 4730 mt 5390 4732 L
+5390 4732 mt 5425 4745 L
+5425 4745 mt 5459 4758 L
+5459 4758 mt 5459 4758 L
+5459 4758 mt 5494 4770 L
+5494 4770 mt 5529 4780 L
+5529 4780 mt 5545 4785 L
+5545 4785 mt 5564 4790 L
+5564 4790 mt 5599 4799 L
+5599 4799 mt 5634 4808 L
+5634 4808 mt 5658 4813 L
+5658 4813 mt 5669 4815 L
+5669 4815 mt 5704 4821 L
+5704 4821 mt 5738 4827 L
+5738 4827 mt 5773 4832 L
+5773 4832 mt 5808 4836 L
+5808 4836 mt 5843 4840 L
+5843 4840 mt 5850 4840 L
+5850 4840 mt 5878 4842 L
+5878 4842 mt 5913 4844 L
+5913 4844 mt 5948 4845 L
+5948 4845 mt 5983 4845 L
+5983 4845 mt 6017 4844 L
+6017 4844 mt 6052 4843 L
+6052 4843 mt 6082 4840 L
+6082 4840 mt 6087 4840 L
+6087 4840 mt 6122 4836 L
+6122 4836 mt 6157 4831 L
+6157 4831 mt 6192 4825 L
+6192 4825 mt 6227 4818 L
+6227 4818 mt 6248 4813 L
+6248 4813 mt 6261 4809 L
+6261 4809 mt 6296 4800 L
+6296 4800 mt 6331 4789 L
+6331 4789 mt 6341 4785 L
+6341 4785 mt 6366 4776 L
+6366 4776 mt 6401 4762 L
+6401 4762 mt 6410 4758 L
+6410 4758 mt 6436 4745 L
+6436 4745 mt 6465 4730 L
+6465 4730 mt 6471 4727 L
+6471 4727 mt 6506 4706 L
+6506 4706 mt 6511 4703 L
+6511 4703 mt 6540 4682 L
+6540 4682 mt 6551 4675 L
+6551 4675 mt 6575 4656 L
+6575 4656 mt 6586 4648 L
+6586 4648 mt 6610 4627 L
+6610 4627 mt 6618 4620 L
+6618 4620 mt 6645 4595 L
+6645 4595 mt 6648 4592 L
+6648 4592 mt 6675 4565 L
+6675 4565 mt 6680 4560 L
+6680 4560 mt 6702 4537 L
+6702 4537 mt 6715 4523 L
+6715 4523 mt 6727 4510 L
+6727 4510 mt 6750 4484 L
+6750 4484 mt 6751 4482 L
+6751 4482 mt 6776 4455 L
+6776 4455 mt 6785 4445 L
+6785 4445 mt 6800 4427 L
+6800 4427 mt 6819 4404 L
+6819 4404 mt 6823 4400 L
+6823 4400 mt 6847 4372 L
+6847 4372 mt 6854 4363 L
+6854 4363 mt 6870 4345 L
+6870 4345 mt 6889 4322 L
+6889 4322 mt 6894 4317 L
+6894 4317 mt 6917 4290 L
+6917 4290 mt 6924 4282 L
+6924 4282 mt 6940 4262 L
+6940 4262 mt 6959 4240 L
+6959 4240 mt 6963 4235 L
+6963 4235 mt 6986 4207 L
+6986 4207 mt 6994 4198 L
+6994 4198 mt 7008 4180 L
+7008 4180 mt 7029 4154 L
+7029 4154 mt 7030 4152 L
+7030 4152 mt 7052 4125 L
+7052 4125 mt 7063 4110 L
+7063 4110 mt 7073 4097 L
+7073 4097 mt 7094 4070 L
+7094 4070 mt 7098 4064 L
+7098 4064 mt 7114 4042 L
+7114 4042 mt 7133 4016 L
+7133 4016 mt 7134 4015 L
+7134 4015 mt 7154 3987 L
+7154 3987 mt 7168 3967 L
+7168 3967 mt 7173 3960 L
+7173 3960 mt 7192 3932 L
+7192 3932 mt 7203 3917 L
+7203 3917 mt 7212 3905 L
+7212 3905 mt 7231 3877 L
+7231 3877 mt 7238 3868 L
+7238 3868 mt 7251 3850 L
+7251 3850 mt 7271 3822 L
+7271 3822 mt 7273 3820 L
+7273 3820 mt 7291 3795 L
+7291 3795 mt 7308 3771 L
+7308 3771 mt 7310 3767 L
+7310 3767 mt 7329 3740 L
+7329 3740 mt 7342 3720 L
+7342 3720 mt 7348 3712 L
+7348 3712 mt 7367 3685 L
+7367 3685 mt 7377 3669 L
+7377 3669 mt 7386 3657 L
+7386 3657 mt 7404 3630 L
+7404 3630 mt 7412 3618 L
+7412 3618 mt 7423 3602 L
+7423 3602 mt 7442 3575 L
+7442 3575 mt 7447 3567 L
+7447 3567 mt 7462 3547 L
+7462 3547 mt 7482 3519 L
+7482 3519 mt 7482 3519 L
+7482 3519 mt 7502 3492 L
+7502 3492 mt 7517 3472 L
+7517 3472 mt 7523 3464 L
+7523 3464 mt 7544 3437 L
+7544 3437 mt 7552 3427 L
+7552 3427 mt 7565 3409 L
+7565 3409 mt 7587 3382 L
+7587 3382 mt 7587 3382 L
+7587 3382 mt 7609 3354 L
+7609 3354 mt 7621 3338 L
+7621 3338 mt 7631 3327 L
+7631 3327 mt 7653 3299 L
+7653 3299 mt 7656 3295 L
+7656 3295 mt 7676 3272 L
+7676 3272 mt 7691 3253 L
+7691 3253 mt 7699 3244 L
+7699 3244 mt 7722 3217 L
+7722 3217 mt 7726 3213 L
+7726 3213 mt 7747 3189 L
+7747 3189 mt 7761 3173 L
+7761 3173 mt 7771 3162 L
+7771 3162 mt 7796 3135 L
+7796 3135 mt 7797 3134 L
+7797 3134 mt 7824 3107 L
+7824 3107 mt 7831 3100 L
+7831 3100 mt 7852 3079 L
+7852 3079 mt 7865 3067 L
+7865 3067 mt 7883 3052 L
+7883 3052 mt 7900 3037 L
+7900 3037 mt 7916 3024 L
+7916 3024 mt 7935 3009 L
+7935 3009 mt 7954 2997 L
+7954 2997 mt 7970 2985 L
+7970 2985 mt 7997 2969 L
+7997 2969 mt 8005 2964 L
+-886 1984 mt -851 1994 L
+-851 1994 mt -816 1997 L
+-816 1997 mt -781 1993 L
+-781 1993 mt -746 1982 L
+-746 1982 mt -739 1979 L
+-739 1979 mt -711 1966 L
+-711 1966 mt -688 1951 L
+-688 1951 mt -677 1945 L
+-677 1945 mt -648 1924 L
+-648 1924 mt -642 1920 L
+-642 1920 mt -613 1896 L
+-613 1896 mt -607 1892 L
+-607 1892 mt -581 1869 L
+-581 1869 mt -572 1861 L
+-572 1861 mt -551 1841 L
+-551 1841 mt -537 1828 L
+-537 1828 mt -523 1814 L
+-523 1814 mt -502 1794 L
+-502 1794 mt -495 1786 L
+-495 1786 mt -469 1759 L
+-469 1759 mt -467 1756 L
+-467 1756 mt -446 1731 L
+-446 1731 mt -433 1715 L
+-433 1715 mt -423 1704 L
+-423 1704 mt -402 1676 L
+-402 1676 mt -398 1671 L
+-398 1671 mt -382 1649 L
+-382 1649 mt -363 1623 L
+-363 1623 mt -362 1621 L
+-362 1621 mt -343 1594 L
+-343 1594 mt -328 1573 L
+-328 1573 mt -323 1566 L
+-323 1566 mt -305 1539 L
+-305 1539 mt -293 1522 L
+-293 1522 mt -286 1511 L
+-286 1511 mt -268 1484 L
+-268 1484 mt -258 1469 L
+-258 1469 mt -250 1456 L
+-250 1456 mt -233 1428 L
+-233 1428 mt -223 1413 L
+-223 1413 mt -217 1401 L
+-217 1401 mt -200 1373 L
+-200 1373 mt -188 1353 L
+-188 1353 mt -184 1346 L
+-184 1346 mt -169 1318 L
+-169 1318 mt -154 1291 L
+-154 1291 mt -154 1290 L
+-154 1290 mt -140 1263 L
+-140 1263 mt -126 1236 L
+-126 1236 mt -119 1221 L
+-119 1221 mt -112 1208 L
+-112 1208 mt  -99 1181 L
+ -99 1181 mt  -86 1153 L
+ -86 1153 mt  -84 1149 L
+ -84 1149 mt  -73 1126 L
+ -73 1126 mt  -60 1098 L
+ -60 1098 mt  -49 1076 L
+ -49 1076 mt  -46 1071 L
+ -46 1071 mt  -33 1043 L
+ -33 1043 mt  -19 1016 L
+ -19 1016 mt  -14 1007 L
+ -14 1007 mt   -4  988 L
+  -4  988 mt   10  961 L
+  10  961 mt   20  944 L
+  20  944 mt   26  933 L
+  26  933 mt   42  906 L
+  42  906 mt   55  885 L
+  55  885 mt   58  878 L
+  58  878 mt   75  851 L
+  75  851 mt   90  829 L
+  90  829 mt   93  823 L
+  93  823 mt  111  796 L
+ 111  796 mt  124  776 L
+ 124  776 mt  130  768 L
+ 130  768 mt  149  741 L
+ 149  741 mt  159  727 L
+ 159  727 mt  169  713 L
+ 169  713 mt  189  686 L
+ 189  686 mt  194  679 L
+ 194  679 mt  210  658 L
+ 210  658 mt  229  634 L
+ 229  634 mt  231  631 L
+ 231  631 mt  253  603 L
+ 253  603 mt  264  590 L
+ 264  590 mt  275  576 L
+ 275  576 mt  298  548 L
+ 298  548 mt  299  547 L
+ 299  547 mt  321  521 L
+ 321  521 mt  334  505 L
+ 334  505 mt  344  493 L
+ 344  493 mt  368  466 L
+ 368  466 mt  368  465 L
+ 368  465 mt  391  438 L
+ 391  438 mt  403  424 L
+ 403  424 mt  415  411 L
+ 415  411 mt  438  385 L
+ 438  385 mt  440  383 L
+ 440  383 mt  465  355 L
+ 465  355 mt  473  347 L
+ 473  347 mt  491  328 L
+ 491  328 mt  508  311 L
+ 508  311 mt  518  300 L
+ 518  300 mt  543  277 L
+ 543  277 mt  547  273 L
+ 547  273 mt  577  245 L
+ 577  245 mt  578  244 L
+ 578  244 mt  608  218 L
+ 608  218 mt  613  214 L
+ 613  214 mt  642  190 L
+ 642  190 mt  647  186 L
+ 647  186 mt  679  163 L
+ 679  163 mt  682  160 L
+ 682  160 mt  717  136 L
+ 717  136 mt  717  135 L
+ 717  135 mt  752  112 L
+ 752  112 mt  759  108 L
+ 759  108 mt  787   90 L
+ 787   90 mt  802   80 L
+ 802   80 mt  822   68 L
+ 822   68 mt  847   53 L
+ 847   53 mt  857   47 L
+ 857   47 mt  892   27 L
+ 892   27 mt  895   25 L
+ 895   25 mt  926    8 L
+ 926    8 mt  944   -1 L
+ 944   -1 mt  961  -10 L
+ 961  -10 mt  996  -28 L
+ 996  -28 mt  997  -29 L
+ 997  -29 mt 1031  -46 L
+1031  -46 mt 1053  -56 L
+1053  -56 mt 1066  -63 L
+1066  -63 mt 1101  -79 L
+1101  -79 mt 1112  -84 L
+1112  -84 mt 1136  -95 L
+1136  -95 mt 1170 -110 L
+1170 -110 mt 1174 -111 L
+1174 -111 mt 1205 -125 L
+1205 -125 mt 1239 -139 L
+1239 -139 mt 1240 -139 L
+1240 -139 mt 1275 -154 L
+1275 -154 mt 1306 -166 L
+1306 -166 mt 1310 -168 L
+1310 -168 mt 1345 -182 L
+1345 -182 mt 1376 -194 L
+1376 -194 mt 1380 -195 L
+1380 -195 mt 1415 -209 L
+1415 -209 mt 1448 -221 L
+1448 -221 mt 1449 -222 L
+1449 -222 mt 1484 -235 L
+1484 -235 mt 1519 -247 L
+1519 -247 mt 1525 -249 L
+1525 -249 mt 1554 -259 L
+1554 -259 mt 1589 -271 L
+1589 -271 mt 1606 -276 L
+1606 -276 mt 1624 -282 L
+1624 -282 mt 1659 -293 L
+1659 -293 mt 1692 -304 L
+1692 -304 mt 1694 -304 L
+1694 -304 mt 1728 -315 L
+1728 -315 mt 1763 -326 L
+1763 -326 mt 1782 -331 L
+1782 -331 mt 1798 -336 L
+1798 -336 mt 1833 -347 L
+1833 -347 mt 1868 -358 L
+1868 -358 mt 1872 -359 L
+1872 -359 mt 1903 -368 L
+1903 -368 mt 1938 -379 L
+1938 -379 mt 1961 -386 L
+1961 -386 mt 1972 -390 L
+1972 -390 mt 2007 -401 L
+2007 -401 mt 2042 -413 L
+2042 -413 mt 2046 -414 L
+2046 -414 mt 2077 -424 L
+2077 -424 mt 2112 -436 L
+2112 -436 mt 2130 -441 L
+2130 -441 mt 2147 -447 L
+2147 -447 mt 2182 -459 L
+2182 -459 mt 2214 -469 L
+2214 -469 mt 2217 -470 L
+2217 -470 mt 2251 -481 L
+2251 -481 mt 2286 -492 L
+2286 -492 mt 2300 -496 L
+2300 -496 mt 2321 -503 L
+2321 -503 mt 2356 -514 L
+2356 -514 mt 2388 -524 L
+2388 -524 mt 2391 -525 L
+2391 -525 mt 2426 -536 L
+2426 -536 mt 2461 -547 L
+2461 -547 mt 2475 -551 L
+2475 -551 mt 2496 -558 L
+2496 -558 mt 2530 -570 L
+2530 -570 mt 2557 -579 L
+2557 -579 mt 2565 -582 L
+2565 -582 mt 2600 -595 L
+2600 -595 mt 2634 -606 L
+2634 -606 mt 2635 -607 L
+2635 -607 mt 2670 -620 L
+2670 -620 mt 2705 -632 L
+2705 -632 mt 2709 -634 L
+2709 -634 mt 2740 -645 L
+2740 -645 mt 2774 -658 L
+2774 -658 mt 2785 -661 L
+2785 -661 mt 2809 -670 L
+2809 -670 mt 2844 -682 L
+2844 -682 mt 2864 -689 L
+2864 -689 mt 2879 -694 L
+2879 -694 mt 2914 -706 L
+2914 -706 mt 2949 -716 L
+2949 -716 mt 2949 -717 L
+2949 -717 mt 2984 -727 L
+2984 -727 mt 3019 -738 L
+3019 -738 mt 3042 -744 L
+3042 -744 mt 3053 -747 L
+3053 -747 mt 3088 -757 L
+3088 -757 mt 3123 -766 L
+3123 -766 mt 3149 -772 L
+3149 -772 mt 3158 -774 L
+3158 -774 mt 3193 -782 L
+3193 -782 mt 3228 -789 L
+3228 -789 mt 3263 -795 L
+3263 -795 mt 3289 -799 L
+3289 -799 mt 3298 -801 L
+3298 -801 mt 3332 -805 L
+3332 -805 mt 3367 -810 L
+3367 -810 mt 3402 -813 L
+3402 -813 mt 3437 -816 L
+3437 -816 mt 3472 -817 L
+3472 -817 mt 3507 -818 L
+3507 -818 mt 3542 -819 L
+3542 -819 mt 3577 -818 L
+3577 -818 mt 3611 -817 L
+3611 -817 mt 3646 -815 L
+3646 -815 mt 3681 -813 L
+3681 -813 mt 3716 -811 L
+3716 -811 mt 3751 -807 L
+3751 -807 mt 3786 -804 L
+3786 -804 mt 3821 -799 L
+3821 -799 mt 3824 -799 L
+3824 -799 mt 3855 -795 L
+3855 -795 mt 3890 -790 L
+3890 -790 mt 3925 -785 L
+3925 -785 mt 3960 -779 L
+3960 -779 mt 3995 -772 L
+3995 -772 mt 3999 -772 L
+3999 -772 mt 4030 -765 L
+4030 -765 mt 4065 -758 L
+4065 -758 mt 4100 -750 L
+4100 -750 mt 4124 -744 L
+4124 -744 mt 4134 -742 L
+4134 -742 mt 4169 -733 L
+4169 -733 mt 4204 -725 L
+4204 -725 mt 4236 -717 L
+4236 -717 mt 4239 -716 L
+4239 -716 mt 4274 -707 L
+4274 -707 mt 4309 -698 L
+4309 -698 mt 4344 -690 L
+4344 -690 mt 4346 -689 L
+4346 -689 mt 4379 -681 L
+4379 -681 mt 4413 -672 L
+4413 -672 mt 4448 -663 L
+4448 -663 mt 4452 -661 L
+4452 -661 mt 4483 -653 L
+4483 -653 mt 4518 -643 L
+4518 -643 mt 4549 -634 L
+4549 -634 mt 4553 -633 L
+4553 -633 mt 4588 -623 L
+4588 -623 mt 4623 -612 L
+4623 -612 mt 4638 -606 L
+4638 -606 mt 4657 -600 L
+4657 -600 mt 4692 -589 L
+4692 -589 mt 4720 -579 L
+4720 -579 mt 4727 -576 L
+4727 -576 mt 4762 -564 L
+4762 -564 mt 4796 -551 L
+4796 -551 mt 4797 -551 L
+4797 -551 mt 4832 -538 L
+4832 -538 mt 4867 -524 L
+4867 -524 mt 4867 -524 L
+4867 -524 mt 4902 -510 L
+4902 -510 mt 4936 -496 L
+4936 -496 mt 4936 -496 L
+4936 -496 mt 4971 -482 L
+4971 -482 mt 5002 -469 L
+5002 -469 mt 5006 -467 L
+5006 -467 mt 5041 -453 L
+5041 -453 mt 5068 -441 L
+5068 -441 mt 5076 -438 L
+5076 -438 mt 5111 -423 L
+5111 -423 mt 5132 -414 L
+5132 -414 mt 5146 -408 L
+5146 -408 mt 5181 -393 L
+5181 -393 mt 5196 -386 L
+5196 -386 mt 5215 -378 L
+5215 -378 mt 5250 -362 L
+5250 -362 mt 5258 -359 L
+5258 -359 mt 5285 -347 L
+5285 -347 mt 5318 -331 L
+5318 -331 mt 5320 -331 L
+5320 -331 mt 5355 -314 L
+5355 -314 mt 5377 -304 L
+5377 -304 mt 5390 -298 L
+5390 -298 mt 5425 -281 L
+5425 -281 mt 5434 -276 L
+5434 -276 mt 5459 -264 L
+5459 -264 mt 5489 -249 L
+5489 -249 mt 5494 -246 L
+5494 -246 mt 5529 -228 L
+5529 -228 mt 5543 -221 L
+5543 -221 mt 5564 -210 L
+5564 -210 mt 5595 -194 L
+5595 -194 mt 5599 -192 L
+5599 -192 mt 5634 -173 L
+5634 -173 mt 5645 -166 L
+5645 -166 mt 5669 -153 L
+5669 -153 mt 5694 -139 L
+5694 -139 mt 5704 -133 L
+5704 -133 mt 5738 -112 L
+5738 -112 mt 5740 -111 L
+5740 -111 mt 5773  -91 L
+5773  -91 mt 5785  -84 L
+5785  -84 mt 5808  -69 L
+5808  -69 mt 5827  -56 L
+5827  -56 mt 5843  -46 L
+5843  -46 mt 5869  -29 L
+5869  -29 mt 5878  -22 L
+5878  -22 mt 5908   -1 L
+5908   -1 mt 5913    1 L
+5913    1 mt 5947   25 L
+5947   25 mt 5948   26 L
+5948   26 mt 5983   52 L
+5983   52 mt 5984   53 L
+5984   53 mt 6017   78 L
+6017   78 mt 6020   80 L
+6020   80 mt 6052  105 L
+6052  105 mt 6055  108 L
+6055  108 mt 6087  133 L
+6087  133 mt 6089  135 L
+6089  135 mt 6122  162 L
+6122  162 mt 6123  163 L
+6123  163 mt 6155  190 L
+6155  190 mt 6157  192 L
+6157  192 mt 6187  218 L
+6187  218 mt 6192  222 L
+6192  222 mt 6218  245 L
+6218  245 mt 6227  253 L
+6227  253 mt 6249  273 L
+6249  273 mt 6261  284 L
+6261  284 mt 6280  300 L
+6280  300 mt 6296  316 L
+6296  316 mt 6310  328 L
+6310  328 mt 6331  348 L
+6331  348 mt 6339  355 L
+6339  355 mt 6366  380 L
+6366  380 mt 6369  383 L
+6369  383 mt 6399  411 L
+6399  411 mt 6401  412 L
+6401  412 mt 6429  438 L
+6429  438 mt 6436  444 L
+6436  444 mt 6459  466 L
+6459  466 mt 6471  476 L
+6471  476 mt 6489  493 L
+6489  493 mt 6506  508 L
+6506  508 mt 6519  521 L
+6519  521 mt 6540  540 L
+6540  540 mt 6550  548 L
+6550  548 mt 6575  572 L
+6575  572 mt 6580  576 L
+6580  576 mt 6610  603 L
+6610  603 mt 6610  604 L
+6610  604 mt 6640  631 L
+6640  631 mt 6645  635 L
+6645  635 mt 6670  658 L
+6670  658 mt 6680  668 L
+6680  668 mt 6700  686 L
+6700  686 mt 6715  700 L
+6715  700 mt 6729  713 L
+6729  713 mt 6750  732 L
+6750  732 mt 6759  741 L
+6759  741 mt 6785  765 L
+6785  765 mt 6788  768 L
+6788  768 mt 6817  796 L
+6817  796 mt 6819  798 L
+6819  798 mt 6846  823 L
+6846  823 mt 6854  831 L
+6854  831 mt 6875  851 L
+6875  851 mt 6889  865 L
+6889  865 mt 6903  878 L
+6903  878 mt 6924  899 L
+6924  899 mt 6931  906 L
+6931  906 mt 6959  933 L
+6959  933 mt 6959  933 L
+6959  933 mt 6987  961 L
+6987  961 mt 6994  968 L
+6994  968 mt 7014  988 L
+7014  988 mt 7029 1003 L
+7029 1003 mt 7042 1016 L
+7042 1016 mt 7063 1038 L
+7063 1038 mt 7069 1043 L
+7069 1043 mt 7096 1071 L
+7096 1071 mt 7098 1074 L
+7098 1074 mt 7122 1098 L
+7122 1098 mt 7133 1110 L
+7133 1110 mt 7149 1126 L
+7149 1126 mt 7168 1146 L
+7168 1146 mt 7175 1153 L
+7175 1153 mt 7202 1181 L
+7202 1181 mt 7203 1182 L
+7203 1182 mt 7229 1208 L
+7229 1208 mt 7238 1217 L
+7238 1217 mt 7257 1236 L
+7257 1236 mt 7273 1252 L
+7273 1252 mt 7285 1263 L
+7285 1263 mt 7308 1286 L
+7308 1286 mt 7313 1291 L
+7313 1291 mt 7341 1318 L
+7341 1318 mt 7342 1320 L
+7342 1320 mt 7369 1346 L
+7369 1346 mt 7377 1354 L
+7377 1354 mt 7397 1373 L
+7397 1373 mt 7412 1389 L
+7412 1389 mt 7425 1401 L
+7425 1401 mt 7447 1423 L
+7447 1423 mt 7452 1428 L
+7452 1428 mt 7480 1456 L
+7480 1456 mt 7482 1458 L
+7482 1458 mt 7507 1484 L
+7507 1484 mt 7517 1493 L
+7517 1493 mt 7535 1511 L
+7535 1511 mt 7552 1528 L
+7552 1528 mt 7562 1539 L
+7562 1539 mt 7587 1563 L
+7587 1563 mt 7590 1566 L
+7590 1566 mt 7617 1594 L
+7617 1594 mt 7621 1599 L
+7621 1599 mt 7644 1621 L
+7644 1621 mt 7656 1634 L
+7656 1634 mt 7671 1649 L
+7671 1649 mt 7691 1670 L
+7691 1670 mt 7697 1676 L
+7697 1676 mt 7724 1704 L
+7724 1704 mt 7726 1706 L
+7726 1706 mt 7751 1731 L
+7751 1731 mt 7761 1742 L
+7761 1742 mt 7778 1759 L
+7778 1759 mt 7796 1777 L
+7796 1777 mt 7805 1786 L
+7805 1786 mt 7831 1813 L
+7831 1813 mt 7831 1814 L
+7831 1814 mt 7859 1841 L
+7859 1841 mt 7865 1849 L
+7865 1849 mt 7886 1869 L
+7886 1869 mt 7900 1884 L
+7900 1884 mt 7914 1896 L
+7914 1896 mt 7935 1916 L
+7935 1916 mt 7945 1924 L
+7945 1924 mt 7970 1945 L
+7970 1945 mt 7981 1951 L
+7981 1951 mt 8005 1968 L
+-886 2580 mt -851 2567 L
+-851 2567 mt -816 2562 L
+-816 2562 mt -781 2566 L
+-781 2566 mt -746 2577 L
+-746 2577 mt -733 2584 L
+-733 2584 mt -711 2594 L
+-711 2594 mt -685 2612 L
+-685 2612 mt -677 2617 L
+-677 2617 mt -650 2639 L
+-650 2639 mt -642 2645 L
+-642 2645 mt -619 2667 L
+-619 2667 mt -607 2677 L
+-607 2677 mt -590 2694 L
+-590 2694 mt -572 2711 L
+-572 2711 mt -561 2722 L
+-561 2722 mt -537 2745 L
+-537 2745 mt -533 2749 L
+-533 2749 mt -505 2777 L
+-505 2777 mt -502 2779 L
+-502 2779 mt -478 2804 L
+-478 2804 mt -467 2814 L
+-467 2814 mt -450 2832 L
+-450 2832 mt -433 2849 L
+-433 2849 mt -423 2859 L
+-423 2859 mt -398 2884 L
+-398 2884 mt -395 2887 L
+-395 2887 mt -366 2914 L
+-366 2914 mt -363 2917 L
+-363 2917 mt -337 2942 L
+-337 2942 mt -328 2950 L
+-328 2950 mt -307 2969 L
+-307 2969 mt -293 2982 L
+-293 2982 mt -276 2997 L
+-276 2997 mt -258 3012 L
+-258 3012 mt -244 3024 L
+-244 3024 mt -223 3042 L
+-223 3042 mt -212 3052 L
+-212 3052 mt -188 3071 L
+-188 3071 mt -179 3079 L
+-179 3079 mt -154 3100 L
+-154 3100 mt -146 3107 L
+-146 3107 mt -119 3129 L
+-119 3129 mt -113 3134 L
+-113 3134 mt  -84 3158 L
+ -84 3158 mt  -79 3162 L
+ -79 3162 mt  -49 3186 L
+ -49 3186 mt  -45 3189 L
+ -45 3189 mt  -14 3214 L
+ -14 3214 mt  -10 3217 L
+ -10 3217 mt   20 3241 L
+  20 3241 mt   24 3244 L
+  24 3244 mt   55 3268 L
+  55 3268 mt   60 3272 L
+  60 3272 mt   90 3294 L
+  90 3294 mt   97 3299 L
+  97 3299 mt  124 3319 L
+ 124 3319 mt  135 3327 L
+ 135 3327 mt  159 3344 L
+ 159 3344 mt  173 3354 L
+ 173 3354 mt  194 3369 L
+ 194 3369 mt  212 3382 L
+ 212 3382 mt  229 3394 L
+ 229 3394 mt  251 3409 L
+ 251 3409 mt  264 3419 L
+ 264 3419 mt  290 3437 L
+ 290 3437 mt  299 3443 L
+ 299 3443 mt  328 3464 L
+ 328 3464 mt  334 3469 L
+ 334 3469 mt  364 3492 L
+ 364 3492 mt  368 3495 L
+ 368 3495 mt  400 3519 L
+ 400 3519 mt  403 3522 L
+ 403 3522 mt  434 3547 L
+ 434 3547 mt  438 3551 L
+ 438 3551 mt  466 3575 L
+ 466 3575 mt  473 3580 L
+ 473 3580 mt  498 3602 L
+ 498 3602 mt  508 3611 L
+ 508 3611 mt  528 3630 L
+ 528 3630 mt  543 3643 L
+ 543 3643 mt  558 3657 L
+ 558 3657 mt  578 3676 L
+ 578 3676 mt  586 3685 L
+ 586 3685 mt  613 3712 L
+ 613 3712 mt  613 3712 L
+ 613 3712 mt  637 3740 L
+ 637 3740 mt  647 3751 L
+ 647 3751 mt  661 3767 L
+ 661 3767 mt  682 3795 L
+ 682 3795 mt  682 3795 L
+ 682 3795 mt  701 3822 L
+ 701 3822 mt  717 3847 L
+ 717 3847 mt  719 3850 L
+ 719 3850 mt  735 3877 L
+ 735 3877 mt  750 3905 L
+ 750 3905 mt  752 3908 L
+ 752 3908 mt  764 3932 L
+ 764 3932 mt  777 3960 L
+ 777 3960 mt  787 3983 L
+ 787 3983 mt  789 3987 L
+ 789 3987 mt  800 4015 L
+ 800 4015 mt  812 4042 L
+ 812 4042 mt  822 4068 L
+ 822 4068 mt  822 4070 L
+ 822 4070 mt  833 4097 L
+ 833 4097 mt  843 4125 L
+ 843 4125 mt  853 4152 L
+ 853 4152 mt  857 4162 L
+ 857 4162 mt  863 4180 L
+ 863 4180 mt  873 4207 L
+ 873 4207 mt  883 4235 L
+ 883 4235 mt  892 4256 L
+ 892 4256 mt  894 4262 L
+ 894 4262 mt  905 4290 L
+ 905 4290 mt  916 4317 L
+ 916 4317 mt  926 4342 L
+ 926 4342 mt  928 4345 L
+ 928 4345 mt  940 4372 L
+ 940 4372 mt  953 4400 L
+ 953 4400 mt  961 4418 L
+ 961 4418 mt  966 4427 L
+ 966 4427 mt  980 4455 L
+ 980 4455 mt  994 4482 L
+ 994 4482 mt  996 4487 L
+ 996 4487 mt 1008 4510 L
+1008 4510 mt 1023 4537 L
+1023 4537 mt 1031 4551 L
+1031 4551 mt 1038 4565 L
+1038 4565 mt 1054 4592 L
+1054 4592 mt 1066 4613 L
+1066 4613 mt 1070 4620 L
+1070 4620 mt 1086 4648 L
+1086 4648 mt 1101 4672 L
+1101 4672 mt 1103 4675 L
+1103 4675 mt 1120 4703 L
+1120 4703 mt 1136 4726 L
+1136 4726 mt 1138 4730 L
+1138 4730 mt 1158 4758 L
+1158 4758 mt 1170 4775 L
+1170 4775 mt 1178 4785 L
+1178 4785 mt 1200 4813 L
+1200 4813 mt 1205 4820 L
+1205 4820 mt 1222 4840 L
+1222 4840 mt 1240 4860 L
+1240 4860 mt 1247 4868 L
+1247 4868 mt 1273 4895 L
+1273 4895 mt 1275 4898 L
+1275 4898 mt 1300 4923 L
+1300 4923 mt 1310 4932 L
+1310 4932 mt 1330 4950 L
+1330 4950 mt 1345 4963 L
+1345 4963 mt 1362 4978 L
+1362 4978 mt 1380 4992 L
+1380 4992 mt 1397 5005 L
+1397 5005 mt 1415 5018 L
+1415 5018 mt 1435 5033 L
+1435 5033 mt 1449 5043 L
+1449 5043 mt 1475 5060 L
+1475 5060 mt 1484 5066 L
+1484 5066 mt 1519 5087 L
+1519 5087 mt 1520 5088 L
+1520 5088 mt 1554 5107 L
+1554 5107 mt 1569 5115 L
+1569 5115 mt 1589 5126 L
+1589 5126 mt 1623 5143 L
+1623 5143 mt 1624 5143 L
+1624 5143 mt 1659 5160 L
+1659 5160 mt 1682 5170 L
+1682 5170 mt 1694 5175 L
+1694 5175 mt 1728 5190 L
+1728 5190 mt 1748 5198 L
+1748 5198 mt 1763 5204 L
+1763 5204 mt 1798 5218 L
+1798 5218 mt 1819 5225 L
+1819 5225 mt 1833 5231 L
+1833 5231 mt 1868 5244 L
+1868 5244 mt 1894 5253 L
+1894 5253 mt 1903 5256 L
+1903 5256 mt 1938 5268 L
+1938 5268 mt 1972 5279 L
+1972 5279 mt 1976 5280 L
+1976 5280 mt 2007 5291 L
+2007 5291 mt 2042 5301 L
+2042 5301 mt 2065 5308 L
+2065 5308 mt 2077 5312 L
+2077 5312 mt 2112 5322 L
+2112 5322 mt 2147 5331 L
+2147 5331 mt 2163 5335 L
+2163 5335 mt 2182 5340 L
+2182 5340 mt 2217 5349 L
+2217 5349 mt 2251 5358 L
+2251 5358 mt 2275 5363 L
+2275 5363 mt 2286 5365 L
+2286 5365 mt 2321 5373 L
+2321 5373 mt 2356 5380 L
+2356 5380 mt 2391 5387 L
+2391 5387 mt 2408 5390 L
+2408 5390 mt 2426 5394 L
+2426 5394 mt 2461 5400 L
+2461 5400 mt 2496 5406 L
+2496 5406 mt 2530 5412 L
+2530 5412 mt 2565 5417 L
+2565 5417 mt 2572 5418 L
+2572 5418 mt 2600 5422 L
+2600 5422 mt 2635 5426 L
+2635 5426 mt 2670 5429 L
+2670 5429 mt 2705 5432 L
+2705 5432 mt 2740 5434 L
+2740 5434 mt 2774 5435 L
+2774 5435 mt 2809 5436 L
+2809 5436 mt 2844 5436 L
+2844 5436 mt 2879 5435 L
+2879 5435 mt 2914 5434 L
+2914 5434 mt 2949 5432 L
+2949 5432 mt 2984 5430 L
+2984 5430 mt 3019 5427 L
+3019 5427 mt 3053 5424 L
+3053 5424 mt 3088 5419 L
+3088 5419 mt 3099 5418 L
+3099 5418 mt 3123 5415 L
+3123 5415 mt 3158 5409 L
+3158 5409 mt 3193 5402 L
+3193 5402 mt 3228 5394 L
+3228 5394 mt 3244 5390 L
+3244 5390 mt 3263 5386 L
+3263 5386 mt 3298 5375 L
+3298 5375 mt 3332 5364 L
+3332 5364 mt 3335 5363 L
+3335 5363 mt 3367 5351 L
+3367 5351 mt 3402 5337 L
+3402 5337 mt 3406 5335 L
+3406 5335 mt 3437 5322 L
+3437 5322 mt 3466 5308 L
+3466 5308 mt 3472 5305 L
+3472 5305 mt 3507 5287 L
+3507 5287 mt 3519 5280 L
+3519 5280 mt 3542 5268 L
+3542 5268 mt 3567 5253 L
+3567 5253 mt 3577 5248 L
+3577 5248 mt 3611 5226 L
+3611 5226 mt 3613 5225 L
+3613 5225 mt 3646 5203 L
+3646 5203 mt 3654 5198 L
+3654 5198 mt 3681 5179 L
+3681 5179 mt 3693 5170 L
+3693 5170 mt 3716 5152 L
+3716 5152 mt 3728 5143 L
+3728 5143 mt 3751 5123 L
+3751 5123 mt 3760 5115 L
+3760 5115 mt 3786 5092 L
+3786 5092 mt 3790 5088 L
+3790 5088 mt 3817 5060 L
+3817 5060 mt 3821 5057 L
+3821 5057 mt 3843 5033 L
+3843 5033 mt 3855 5019 L
+3855 5019 mt 3868 5005 L
+3868 5005 mt 3890 4978 L
+3890 4978 mt 3891 4978 L
+3891 4978 mt 3913 4950 L
+3913 4950 mt 3925 4934 L
+3925 4934 mt 3933 4923 L
+3933 4923 mt 3953 4895 L
+3953 4895 mt 3960 4885 L
+3960 4885 mt 3972 4868 L
+3972 4868 mt 3989 4840 L
+3989 4840 mt 3995 4831 L
+3995 4831 mt 4006 4813 L
+4006 4813 mt 4022 4785 L
+4022 4785 mt 4030 4772 L
+4030 4772 mt 4038 4758 L
+4038 4758 mt 4053 4730 L
+4053 4730 mt 4065 4708 L
+4065 4708 mt 4068 4703 L
+4068 4703 mt 4082 4675 L
+4082 4675 mt 4095 4648 L
+4095 4648 mt 4100 4638 L
+4100 4638 mt 4108 4620 L
+4108 4620 mt 4116 4592 L
+4116 4592 mt 4116 4565 L
+4116 4565 mt 4110 4537 L
+4110 4537 mt 4100 4510 L
+4100 4510 mt 4100 4509 L
+4100 4509 mt 4086 4482 L
+4086 4482 mt 4070 4455 L
+4070 4455 mt 4065 4443 L
+4065 4443 mt 4057 4427 L
+4057 4427 mt 4047 4400 L
+4047 4400 mt 4041 4372 L
+4041 4372 mt 4039 4345 L
+4039 4345 mt 4047 4317 L
+4047 4317 mt 4058 4290 L
+4058 4290 mt 4065 4266 L
+4065 4266 mt 4066 4262 L
+4066 4262 mt 4068 4235 L
+4068 4235 mt 4071 4207 L
+4071 4207 mt 4073 4180 L
+4073 4180 mt 4074 4152 L
+4074 4152 mt 4073 4125 L
+4073 4125 mt 4073 4097 L
+4073 4097 mt 4072 4070 L
+4072 4070 mt 4069 4042 L
+4069 4042 mt 4065 4025 L
+4065 4025 mt 4062 4015 L
+4062 4015 mt 4054 3987 L
+4054 3987 mt 4045 3960 L
+4045 3960 mt 4038 3932 L
+4038 3932 mt 4035 3905 L
+4035 3905 mt 4036 3877 L
+4036 3877 mt 4041 3850 L
+4041 3850 mt 4045 3822 L
+4045 3822 mt 4048 3795 L
+4048 3795 mt 4051 3767 L
+4051 3767 mt 4051 3740 L
+4051 3740 mt 4051 3712 L
+4051 3712 mt 4051 3685 L
+4051 3685 mt 4055 3657 L
+4055 3657 mt 4065 3636 L
+4065 3636 mt 4071 3630 L
+4071 3630 mt 4100 3612 L
+4100 3612 mt 4121 3602 L
+4121 3602 mt 4134 3595 L
+4134 3595 mt 4169 3579 L
+4169 3579 mt 4178 3575 L
+4178 3575 mt 4204 3559 L
+4204 3559 mt 4221 3547 L
+4221 3547 mt 4239 3533 L
+4239 3533 mt 4253 3519 L
+4253 3519 mt 4274 3495 L
+4274 3495 mt 4276 3492 L
+4276 3492 mt 4295 3464 L
+4295 3464 mt 4309 3442 L
+4309 3442 mt 4312 3437 L
+4312 3437 mt 4328 3409 L
+4328 3409 mt 4342 3382 L
+4342 3382 mt 4344 3378 L
+4344 3378 mt 4356 3354 L
+4356 3354 mt 4369 3327 L
+4369 3327 mt 4379 3310 L
+4379 3310 mt 4413 3305 L
+4413 3305 mt 4448 3327 L
+4448 3327 mt 4448 3327 L
+4448 3327 mt 4483 3352 L
+4483 3352 mt 4487 3354 L
+4487 3354 mt 4518 3377 L
+4518 3377 mt 4524 3382 L
+4524 3382 mt 4553 3405 L
+4553 3405 mt 4558 3409 L
+4558 3409 mt 4584 3437 L
+4584 3437 mt 4588 3441 L
+4588 3441 mt 4605 3464 L
+4605 3464 mt 4623 3492 L
+4623 3492 mt 4623 3492 L
+4623 3492 mt 4638 3519 L
+4638 3519 mt 4656 3547 L
+4656 3547 mt 4657 3550 L
+4657 3550 mt 4673 3575 L
+4673 3575 mt 4692 3602 L
+4692 3602 mt 4692 3603 L
+4692 3603 mt 4710 3630 L
+4710 3630 mt 4727 3656 L
+4727 3656 mt 4728 3657 L
+4728 3657 mt 4744 3685 L
+4744 3685 mt 4762 3712 L
+4762 3712 mt 4762 3713 L
+4762 3713 mt 4777 3740 L
+4777 3740 mt 4795 3767 L
+4795 3767 mt 4797 3771 L
+4797 3771 mt 4811 3795 L
+4811 3795 mt 4830 3822 L
+4830 3822 mt 4832 3825 L
+4832 3825 mt 4850 3850 L
+4850 3850 mt 4867 3868 L
+4867 3868 mt 4874 3877 L
+4874 3877 mt 4899 3905 L
+4899 3905 mt 4902 3908 L
+4902 3908 mt 4921 3932 L
+4921 3932 mt 4936 3952 L
+4936 3952 mt 4942 3960 L
+4942 3960 mt 4959 3987 L
+4959 3987 mt 4971 4011 L
+4971 4011 mt 4973 4015 L
+4973 4015 mt 4986 4042 L
+4986 4042 mt 4999 4070 L
+4999 4070 mt 5006 4083 L
+5006 4083 mt 5014 4097 L
+5014 4097 mt 5033 4125 L
+5033 4125 mt 5041 4135 L
+5041 4135 mt 5056 4152 L
+5056 4152 mt 5076 4171 L
+5076 4171 mt 5087 4180 L
+5087 4180 mt 5111 4199 L
+5111 4199 mt 5122 4207 L
+5122 4207 mt 5146 4225 L
+5146 4225 mt 5157 4235 L
+5157 4235 mt 5181 4255 L
+5181 4255 mt 5186 4262 L
+5186 4262 mt 5207 4290 L
+5207 4290 mt 5215 4303 L
+5215 4303 mt 5223 4317 L
+5223 4317 mt 5238 4345 L
+5238 4345 mt 5250 4371 L
+5250 4371 mt 5251 4372 L
+5251 4372 mt 5260 4400 L
+5260 4400 mt 5265 4427 L
+5265 4427 mt 5267 4455 L
+5267 4455 mt 5265 4482 L
+5265 4482 mt 5261 4510 L
+5261 4510 mt 5260 4537 L
+5260 4537 mt 5264 4565 L
+5264 4565 mt 5285 4592 L
+5285 4592 mt 5285 4592 L
+5285 4592 mt 5320 4619 L
+5320 4619 mt 5321 4620 L
+5321 4620 mt 5355 4642 L
+5355 4642 mt 5365 4648 L
+5365 4648 mt 5390 4661 L
+5390 4661 mt 5419 4675 L
+5419 4675 mt 5425 4678 L
+5425 4678 mt 5459 4693 L
+5459 4693 mt 5482 4703 L
+5482 4703 mt 5494 4708 L
+5494 4708 mt 5529 4721 L
+5529 4721 mt 5556 4730 L
+5556 4730 mt 5564 4733 L
+5564 4733 mt 5599 4744 L
+5599 4744 mt 5634 4754 L
+5634 4754 mt 5649 4758 L
+5649 4758 mt 5669 4763 L
+5669 4763 mt 5704 4771 L
+5704 4771 mt 5738 4778 L
+5738 4778 mt 5773 4784 L
+5773 4784 mt 5778 4785 L
+5778 4785 mt 5808 4790 L
+5808 4790 mt 5843 4795 L
+5843 4795 mt 5878 4798 L
+5878 4798 mt 5913 4801 L
+5913 4801 mt 5948 4803 L
+5948 4803 mt 5983 4804 L
+5983 4804 mt 6017 4804 L
+6017 4804 mt 6052 4803 L
+6052 4803 mt 6087 4800 L
+6087 4800 mt 6122 4797 L
+6122 4797 mt 6157 4792 L
+6157 4792 mt 6192 4786 L
+6192 4786 mt 6195 4785 L
+6195 4785 mt 6227 4778 L
+6227 4778 mt 6261 4770 L
+6261 4770 mt 6296 4760 L
+6296 4760 mt 6302 4758 L
+6302 4758 mt 6331 4748 L
+6331 4748 mt 6366 4734 L
+6366 4734 mt 6375 4730 L
+6375 4730 mt 6401 4718 L
+6401 4718 mt 6430 4703 L
+6430 4703 mt 6436 4700 L
+6436 4700 mt 6471 4679 L
+6471 4679 mt 6476 4675 L
+6476 4675 mt 6506 4655 L
+6506 4655 mt 6516 4648 L
+6516 4648 mt 6540 4628 L
+6540 4628 mt 6550 4620 L
+6550 4620 mt 6575 4598 L
+6575 4598 mt 6581 4592 L
+6581 4592 mt 6609 4565 L
+6609 4565 mt 6610 4564 L
+6610 4564 mt 6636 4537 L
+6636 4537 mt 6645 4528 L
+6645 4528 mt 6661 4510 L
+6661 4510 mt 6680 4488 L
+6680 4488 mt 6685 4482 L
+6685 4482 mt 6708 4455 L
+6708 4455 mt 6715 4447 L
+6715 4447 mt 6731 4427 L
+6731 4427 mt 6750 4405 L
+6750 4405 mt 6754 4400 L
+6754 4400 mt 6776 4372 L
+6776 4372 mt 6785 4361 L
+6785 4361 mt 6798 4345 L
+6798 4345 mt 6819 4317 L
+6819 4317 mt 6819 4317 L
+6819 4317 mt 6841 4290 L
+6841 4290 mt 6854 4273 L
+6854 4273 mt 6863 4262 L
+6863 4262 mt 6885 4235 L
+6885 4235 mt 6889 4229 L
+6889 4229 mt 6906 4207 L
+6906 4207 mt 6924 4184 L
+6924 4184 mt 6927 4180 L
+6927 4180 mt 6948 4152 L
+6948 4152 mt 6959 4138 L
+6959 4138 mt 6969 4125 L
+6969 4125 mt 6989 4097 L
+6989 4097 mt 6994 4090 L
+6994 4090 mt 7008 4070 L
+7008 4070 mt 7027 4042 L
+7027 4042 mt 7029 4040 L
+7029 4040 mt 7046 4015 L
+7046 4015 mt 7063 3989 L
+7063 3989 mt 7065 3987 L
+7065 3987 mt 7083 3960 L
+7083 3960 mt 7098 3936 L
+7098 3936 mt 7101 3932 L
+7101 3932 mt 7119 3905 L
+7119 3905 mt 7133 3883 L
+7133 3883 mt 7137 3877 L
+7137 3877 mt 7155 3850 L
+7155 3850 mt 7168 3830 L
+7168 3830 mt 7174 3822 L
+7174 3822 mt 7192 3795 L
+7192 3795 mt 7203 3778 L
+7203 3778 mt 7210 3767 L
+7210 3767 mt 7228 3740 L
+7228 3740 mt 7238 3725 L
+7238 3725 mt 7246 3712 L
+7246 3712 mt 7263 3685 L
+7263 3685 mt 7273 3669 L
+7273 3669 mt 7280 3657 L
+7280 3657 mt 7296 3630 L
+7296 3630 mt 7308 3611 L
+7308 3611 mt 7313 3602 L
+7313 3602 mt 7329 3575 L
+7329 3575 mt 7342 3552 L
+7342 3552 mt 7346 3547 L
+7346 3547 mt 7363 3519 L
+7363 3519 mt 7377 3496 L
+7377 3496 mt 7380 3492 L
+7380 3492 mt 7398 3464 L
+7398 3464 mt 7412 3442 L
+7412 3442 mt 7415 3437 L
+7415 3437 mt 7434 3409 L
+7434 3409 mt 7447 3389 L
+7447 3389 mt 7452 3382 L
+7452 3382 mt 7470 3354 L
+7470 3354 mt 7482 3336 L
+7482 3336 mt 7488 3327 L
+7488 3327 mt 7507 3299 L
+7507 3299 mt 7517 3284 L
+7517 3284 mt 7525 3272 L
+7525 3272 mt 7543 3244 L
+7543 3244 mt 7552 3231 L
+7552 3231 mt 7561 3217 L
+7561 3217 mt 7579 3189 L
+7579 3189 mt 7587 3178 L
+7587 3178 mt 7598 3162 L
+7598 3162 mt 7615 3134 L
+7615 3134 mt 7621 3125 L
+7621 3125 mt 7634 3107 L
+7634 3107 mt 7651 3079 L
+7651 3079 mt 7656 3072 L
+7656 3072 mt 7670 3052 L
+7670 3052 mt 7688 3024 L
+7688 3024 mt 7691 3019 L
+7691 3019 mt 7707 2997 L
+7707 2997 mt 7725 2969 L
+7725 2969 mt 7726 2968 L
+7726 2968 mt 7745 2942 L
+7745 2942 mt 7761 2919 L
+7761 2919 mt 7764 2914 L
+7764 2914 mt 7784 2887 L
+7784 2887 mt 7796 2869 L
+7796 2869 mt 7803 2859 L
+7803 2859 mt 7823 2832 L
+7823 2832 mt 7831 2820 L
+7831 2820 mt 7842 2804 L
+7842 2804 mt 7861 2777 L
+7861 2777 mt 7865 2770 L
+7865 2770 mt 7880 2749 L
+7880 2749 mt 7899 2722 L
+7899 2722 mt 7900 2719 L
+7900 2719 mt 7919 2694 L
+7919 2694 mt 7935 2673 L
+7935 2673 mt 7941 2667 L
+7941 2667 mt 7965 2639 L
+7965 2639 mt 7970 2633 L
+7970 2633 mt 7994 2612 L
+7994 2612 mt 8005 2602 L
+7796 2144 mt 7800 2171 L
+7800 2171 mt 7804 2199 L
+7804 2199 mt 7806 2226 L
+7806 2226 mt 7806 2254 L
+7806 2254 mt 7804 2281 L
+7804 2281 mt 7802 2309 L
+7802 2309 mt 7797 2336 L
+7797 2336 mt 7796 2345 L
+7796 2345 mt 7792 2364 L
+7792 2364 mt 7786 2391 L
+7786 2391 mt 7779 2419 L
+7779 2419 mt 7772 2446 L
+7772 2446 mt 7764 2474 L
+7764 2474 mt 7761 2484 L
+7761 2484 mt 7756 2502 L
+7756 2502 mt 7748 2529 L
+7748 2529 mt 7740 2557 L
+7740 2557 mt 7732 2584 L
+7732 2584 mt 7726 2602 L
+7726 2602 mt 7723 2612 L
+7723 2612 mt 7714 2639 L
+7714 2639 mt 7704 2667 L
+7704 2667 mt 7694 2694 L
+7694 2694 mt 7691 2700 L
+7691 2700 mt 7683 2722 L
+7683 2722 mt 7672 2749 L
+7672 2749 mt 7659 2777 L
+7659 2777 mt 7656 2783 L
+7656 2783 mt 7647 2804 L
+7647 2804 mt 7633 2832 L
+7633 2832 mt 7621 2855 L
+7621 2855 mt 7619 2859 L
+7619 2859 mt 7605 2887 L
+7605 2887 mt 7591 2914 L
+7591 2914 mt 7587 2923 L
+7587 2923 mt 7577 2942 L
+7577 2942 mt 7563 2969 L
+7563 2969 mt 7552 2990 L
+7552 2990 mt 7548 2997 L
+7548 2997 mt 7534 3024 L
+7534 3024 mt 7520 3052 L
+7520 3052 mt 7517 3058 L
+7517 3058 mt 7506 3079 L
+7506 3079 mt 7492 3107 L
+7492 3107 mt 7482 3125 L
+7482 3125 mt 7477 3134 L
+7477 3134 mt 7462 3162 L
+7462 3162 mt 7447 3189 L
+7447 3189 mt 7447 3189 L
+7447 3189 mt 7432 3217 L
+7432 3217 mt 7416 3244 L
+7416 3244 mt 7412 3251 L
+7412 3251 mt 7400 3272 L
+7400 3272 mt 7384 3299 L
+7384 3299 mt 7377 3310 L
+7377 3310 mt 7368 3327 L
+7368 3327 mt 7352 3354 L
+7352 3354 mt 7342 3370 L
+7342 3370 mt 7335 3382 L
+7335 3382 mt 7319 3409 L
+7319 3409 mt 7308 3430 L
+7308 3430 mt 7303 3437 L
+7303 3437 mt 7288 3464 L
+7288 3464 mt 7273 3491 L
+7273 3491 mt 7272 3492 L
+7272 3492 mt 7257 3519 L
+7257 3519 mt 7242 3547 L
+7242 3547 mt 7238 3555 L
+7238 3555 mt 7227 3575 L
+7227 3575 mt 7213 3602 L
+7213 3602 mt 7203 3620 L
+7203 3620 mt 7198 3630 L
+7198 3630 mt 7182 3657 L
+7182 3657 mt 7168 3682 L
+7168 3682 mt 7167 3685 L
+7167 3685 mt 7151 3712 L
+7151 3712 mt 7134 3740 L
+7134 3740 mt 7133 3741 L
+7133 3741 mt 7117 3767 L
+7117 3767 mt 7100 3795 L
+7100 3795 mt 7098 3797 L
+7098 3797 mt 7083 3822 L
+7083 3822 mt 7066 3850 L
+7066 3850 mt 7063 3853 L
+7063 3853 mt 7049 3877 L
+7049 3877 mt 7032 3905 L
+7032 3905 mt 7029 3910 L
+7029 3910 mt 7015 3932 L
+7015 3932 mt 6998 3960 L
+6998 3960 mt 6994 3966 L
+6994 3966 mt 6981 3987 L
+6981 3987 mt 6963 4015 L
+6963 4015 mt 6959 4021 L
+6959 4021 mt 6945 4042 L
+6945 4042 mt 6927 4070 L
+6927 4070 mt 6924 4074 L
+6924 4074 mt 6908 4097 L
+6908 4097 mt 6889 4125 L
+6889 4125 mt 6889 4125 L
+6889 4125 mt 6870 4152 L
+6870 4152 mt 6854 4173 L
+6854 4173 mt 6850 4180 L
+6850 4180 mt 6830 4207 L
+6830 4207 mt 6819 4222 L
+6819 4222 mt 6810 4235 L
+6810 4235 mt 6790 4262 L
+6790 4262 mt 6785 4270 L
+6785 4270 mt 6770 4290 L
+6770 4290 mt 6750 4317 L
+6750 4317 mt 6749 4317 L
+6749 4317 mt 6729 4345 L
+6729 4345 mt 6715 4364 L
+6715 4364 mt 6709 4372 L
+6709 4372 mt 6688 4400 L
+6688 4400 mt 6680 4410 L
+6680 4410 mt 6667 4427 L
+6667 4427 mt 6645 4454 L
+6645 4454 mt 6645 4455 L
+6645 4455 mt 6622 4482 L
+6622 4482 mt 6610 4497 L
+6610 4497 mt 6599 4510 L
+6599 4510 mt 6575 4536 L
+6575 4536 mt 6574 4537 L
+6574 4537 mt 6547 4565 L
+6547 4565 mt 6540 4571 L
+6540 4571 mt 6517 4592 L
+6517 4592 mt 6506 4602 L
+6506 4602 mt 6484 4620 L
+6484 4620 mt 6471 4630 L
+6471 4630 mt 6446 4648 L
+6446 4648 mt 6436 4654 L
+6436 4654 mt 6401 4675 L
+6401 4675 mt 6401 4675 L
+6401 4675 mt 6366 4693 L
+6366 4693 mt 6344 4703 L
+6344 4703 mt 6331 4708 L
+6331 4708 mt 6296 4721 L
+6296 4721 mt 6268 4730 L
+6268 4730 mt 6261 4732 L
+6261 4732 mt 6227 4741 L
+6227 4741 mt 6192 4749 L
+6192 4749 mt 6157 4755 L
+6157 4755 mt 6135 4758 L
+6135 4758 mt 6122 4759 L
+6122 4759 mt 6087 4763 L
+6087 4763 mt 6052 4765 L
+6052 4765 mt 6017 4765 L
+6017 4765 mt 5983 4764 L
+5983 4764 mt 5948 4763 L
+5948 4763 mt 5913 4759 L
+5913 4759 mt 5896 4758 L
+5896 4758 mt 5878 4755 L
+5878 4755 mt 5843 4750 L
+5843 4750 mt 5808 4744 L
+5808 4744 mt 5773 4737 L
+5773 4737 mt 5743 4730 L
+5743 4730 mt 5738 4729 L
+5738 4729 mt 5704 4720 L
+5704 4720 mt 5669 4710 L
+5669 4710 mt 5643 4703 L
+5643 4703 mt 5634 4700 L
+5634 4700 mt 5599 4688 L
+5599 4688 mt 5565 4675 L
+5565 4675 mt 5564 4675 L
+5564 4675 mt 5529 4659 L
+5529 4659 mt 5505 4648 L
+5505 4648 mt 5494 4642 L
+5494 4642 mt 5459 4623 L
+5459 4623 mt 5453 4620 L
+5453 4620 mt 5425 4604 L
+5425 4604 mt 5405 4592 L
+5405 4592 mt 5390 4576 L
+5390 4576 mt 5382 4565 L
+5382 4565 mt 5375 4537 L
+5375 4537 mt 5372 4510 L
+5372 4510 mt 5371 4482 L
+5371 4482 mt 5369 4455 L
+5369 4455 mt 5366 4427 L
+5366 4427 mt 5360 4400 L
+5360 4400 mt 5355 4382 L
+5355 4382 mt 5352 4372 L
+5352 4372 mt 5344 4345 L
+5344 4345 mt 5334 4317 L
+5334 4317 mt 5325 4290 L
+5325 4290 mt 5320 4276 L
+5320 4276 mt 5315 4262 L
+5315 4262 mt 5306 4235 L
+5306 4235 mt 5296 4207 L
+5296 4207 mt 5285 4186 L
+5285 4186 mt 5282 4180 L
+5282 4180 mt 5265 4152 L
+5265 4152 mt 5250 4133 L
+5250 4133 mt 5243 4125 L
+5243 4125 mt 5215 4101 L
+5215 4101 mt 5211 4097 L
+5211 4097 mt 5181 4077 L
+5181 4077 mt 5170 4070 L
+5170 4070 mt 5146 4054 L
+5146 4054 mt 5132 4042 L
+5132 4042 mt 5111 4023 L
+5111 4023 mt 5104 4015 L
+5104 4015 mt 5082 3987 L
+5082 3987 mt 5076 3979 L
+5076 3979 mt 5063 3960 L
+5063 3960 mt 5043 3932 L
+5043 3932 mt 5041 3930 L
+5041 3930 mt 5019 3905 L
+5019 3905 mt 5006 3892 L
+5006 3892 mt 4992 3877 L
+4992 3877 mt 4971 3856 L
+4971 3856 mt 4966 3850 L
+4966 3850 mt 4942 3822 L
+4942 3822 mt 4936 3816 L
+4936 3816 mt 4920 3795 L
+4920 3795 mt 4902 3769 L
+4902 3769 mt 4900 3767 L
+4900 3767 mt 4881 3740 L
+4881 3740 mt 4867 3717 L
+4867 3717 mt 4864 3712 L
+4864 3712 mt 4847 3685 L
+4847 3685 mt 4832 3660 L
+4832 3660 mt 4830 3657 L
+4830 3657 mt 4811 3630 L
+4811 3630 mt 4797 3609 L
+4797 3609 mt 4792 3602 L
+4792 3602 mt 4772 3575 L
+4772 3575 mt 4762 3559 L
+4762 3559 mt 4754 3547 L
+4754 3547 mt 4738 3519 L
+4738 3519 mt 4727 3500 L
+4727 3500 mt 4722 3492 L
+4722 3492 mt 4707 3464 L
+4707 3464 mt 4692 3438 L
+4692 3438 mt 4692 3437 L
+4692 3437 mt 4673 3409 L
+4673 3409 mt 4657 3389 L
+4657 3389 mt 4651 3382 L
+4651 3382 mt 4625 3354 L
+4625 3354 mt 4623 3352 L
+4623 3352 mt 4596 3327 L
+4596 3327 mt 4588 3319 L
+4588 3319 mt 4567 3299 L
+4567 3299 mt 4553 3285 L
+4553 3285 mt 4539 3272 L
+4539 3272 mt 4518 3250 L
+4518 3250 mt 4513 3244 L
+4513 3244 mt 4485 3217 L
+4485 3217 mt 4483 3215 L
+4483 3215 mt 4455 3189 L
+4455 3189 mt 4448 3183 L
+4448 3183 mt 4422 3162 L
+4422 3162 mt 4413 3155 L
+4413 3155 mt 4387 3134 L
+4387 3134 mt 4379 3128 L
+4379 3128 mt 4347 3107 L
+4347 3107 mt 4344 3104 L
+4344 3104 mt 4309 3085 L
+4309 3085 mt 4294 3079 L
+4294 3079 mt 4274 3074 L
+4274 3074 mt 4239 3079 L
+4239 3079 mt 4238 3079 L
+4238 3079 mt 4204 3104 L
+4204 3104 mt 4202 3107 L
+4202 3107 mt 4190 3134 L
+4190 3134 mt 4184 3162 L
+4184 3162 mt 4180 3189 L
+4180 3189 mt 4172 3217 L
+4172 3217 mt 4169 3225 L
+4169 3225 mt 4162 3244 L
+4162 3244 mt 4151 3272 L
+4151 3272 mt 4137 3299 L
+4137 3299 mt 4134 3305 L
+4134 3305 mt 4123 3327 L
+4123 3327 mt 4106 3354 L
+4106 3354 mt 4100 3364 L
+4100 3364 mt 4084 3382 L
+4084 3382 mt 4065 3402 L
+4065 3402 mt 4056 3409 L
+4056 3409 mt 4030 3428 L
+4030 3428 mt 4016 3437 L
+4016 3437 mt 3995 3449 L
+3995 3449 mt 3970 3464 L
+3970 3464 mt 3960 3471 L
+3960 3471 mt 3938 3492 L
+3938 3492 mt 3925 3508 L
+3925 3508 mt 3920 3519 L
+3920 3519 mt 3918 3547 L
+3918 3547 mt 3922 3575 L
+3922 3575 mt 3925 3587 L
+3925 3587 mt 3929 3602 L
+3929 3602 mt 3935 3630 L
+3935 3630 mt 3942 3657 L
+3942 3657 mt 3949 3685 L
+3949 3685 mt 3955 3712 L
+3955 3712 mt 3959 3740 L
+3959 3740 mt 3960 3756 L
+3960 3756 mt 3961 3767 L
+3961 3767 mt 3960 3783 L
+3960 3783 mt 3960 3795 L
+3960 3795 mt 3956 3822 L
+3956 3822 mt 3953 3850 L
+3953 3850 mt 3949 3877 L
+3949 3877 mt 3947 3905 L
+3947 3905 mt 3949 3932 L
+3949 3932 mt 3954 3960 L
+3954 3960 mt 3960 3986 L
+3960 3986 mt 3960 3987 L
+3960 3987 mt 3969 4015 L
+3969 4015 mt 3975 4042 L
+3975 4042 mt 3980 4070 L
+3980 4070 mt 3983 4097 L
+3983 4097 mt 3984 4125 L
+3984 4125 mt 3984 4152 L
+3984 4152 mt 3982 4180 L
+3982 4180 mt 3979 4207 L
+3979 4207 mt 3973 4235 L
+3973 4235 mt 3964 4262 L
+3964 4262 mt 3960 4274 L
+3960 4274 mt 3954 4290 L
+3954 4290 mt 3944 4317 L
+3944 4317 mt 3942 4345 L
+3942 4345 mt 3950 4372 L
+3950 4372 mt 3959 4400 L
+3959 4400 mt 3960 4403 L
+3960 4403 mt 3968 4427 L
+3968 4427 mt 3979 4455 L
+3979 4455 mt 3990 4482 L
+3990 4482 mt 3995 4495 L
+3995 4495 mt 4001 4510 L
+4001 4510 mt 4011 4537 L
+4011 4537 mt 4017 4565 L
+4017 4565 mt 4018 4592 L
+4018 4592 mt 4013 4620 L
+4013 4620 mt 4002 4648 L
+4002 4648 mt 3995 4663 L
+3995 4663 mt 3989 4675 L
+3989 4675 mt 3975 4703 L
+3975 4703 mt 3960 4730 L
+3960 4730 mt 3960 4730 L
+3960 4730 mt 3944 4758 L
+3944 4758 mt 3927 4785 L
+3927 4785 mt 3925 4787 L
+3925 4787 mt 3909 4813 L
+3909 4813 mt 3890 4839 L
+3890 4839 mt 3890 4840 L
+3890 4840 mt 3870 4868 L
+3870 4868 mt 3855 4886 L
+3855 4886 mt 3848 4895 L
+3848 4895 mt 3825 4923 L
+3825 4923 mt 3821 4928 L
+3821 4928 mt 3800 4950 L
+3800 4950 mt 3786 4966 L
+3786 4966 mt 3774 4978 L
+3774 4978 mt 3751 5000 L
+3751 5000 mt 3746 5005 L
+3746 5005 mt 3716 5032 L
+3716 5032 mt 3715 5033 L
+3715 5033 mt 3682 5060 L
+3682 5060 mt 3681 5061 L
+3681 5061 mt 3646 5087 L
+3646 5087 mt 3645 5088 L
+3645 5088 mt 3611 5111 L
+3611 5111 mt 3605 5115 L
+3605 5115 mt 3577 5134 L
+3577 5134 mt 3561 5143 L
+3561 5143 mt 3542 5154 L
+3542 5154 mt 3512 5170 L
+3512 5170 mt 3507 5173 L
+3507 5173 mt 3472 5191 L
+3472 5191 mt 3458 5198 L
+3458 5198 mt 3437 5208 L
+3437 5208 mt 3402 5224 L
+3402 5224 mt 3399 5225 L
+3399 5225 mt 3367 5239 L
+3367 5239 mt 3332 5253 L
+3332 5253 mt 3332 5253 L
+3332 5253 mt 3298 5265 L
+3298 5265 mt 3263 5277 L
+3263 5277 mt 3252 5280 L
+3252 5280 mt 3228 5288 L
+3228 5288 mt 3193 5297 L
+3193 5297 mt 3158 5306 L
+3158 5306 mt 3149 5308 L
+3149 5308 mt 3123 5314 L
+3123 5314 mt 3088 5320 L
+3088 5320 mt 3053 5326 L
+3053 5326 mt 3019 5331 L
+3019 5331 mt 2986 5335 L
+2986 5335 mt 2984 5336 L
+2984 5336 mt 2949 5340 L
+2949 5340 mt 2914 5343 L
+2914 5343 mt 2879 5346 L
+2879 5346 mt 2844 5348 L
+2844 5348 mt 2809 5349 L
+2809 5349 mt 2774 5350 L
+2774 5350 mt 2740 5350 L
+2740 5350 mt 2705 5349 L
+2705 5349 mt 2670 5348 L
+2670 5348 mt 2635 5346 L
+2635 5346 mt 2600 5344 L
+2600 5344 mt 2565 5341 L
+2565 5341 mt 2530 5337 L
+2530 5337 mt 2515 5335 L
+2515 5335 mt 2496 5333 L
+2496 5333 mt 2461 5329 L
+2461 5329 mt 2426 5324 L
+2426 5324 mt 2391 5319 L
+2391 5319 mt 2356 5313 L
+2356 5313 mt 2324 5308 L
+2324 5308 mt 2321 5307 L
+2321 5307 mt 2286 5301 L
+2286 5301 mt 2251 5295 L
+2251 5295 mt 2217 5287 L
+2217 5287 mt 2185 5280 L
+2185 5280 mt 2182 5280 L
+2182 5280 mt 2147 5272 L
+2147 5272 mt 2112 5263 L
+2112 5263 mt 2077 5254 L
+2077 5254 mt 2073 5253 L
+2073 5253 mt 2042 5245 L
+2042 5245 mt 2007 5235 L
+2007 5235 mt 1976 5225 L
+1976 5225 mt 1972 5224 L
+1972 5224 mt 1938 5213 L
+1938 5213 mt 1903 5202 L
+1903 5202 mt 1891 5198 L
+1891 5198 mt 1868 5190 L
+1868 5190 mt 1833 5177 L
+1833 5177 mt 1814 5170 L
+1814 5170 mt 1798 5165 L
+1798 5165 mt 1763 5151 L
+1763 5151 mt 1743 5143 L
+1743 5143 mt 1728 5137 L
+1728 5137 mt 1694 5122 L
+1694 5122 mt 1678 5115 L
+1678 5115 mt 1659 5106 L
+1659 5106 mt 1624 5090 L
+1624 5090 mt 1620 5088 L
+1620 5088 mt 1589 5072 L
+1589 5072 mt 1569 5060 L
+1569 5060 mt 1554 5052 L
+1554 5052 mt 1522 5033 L
+1522 5033 mt 1519 5031 L
+1519 5031 mt 1484 5008 L
+1484 5008 mt 1479 5005 L
+1479 5005 mt 1449 4984 L
+1449 4984 mt 1441 4978 L
+1441 4978 mt 1415 4958 L
+1415 4958 mt 1405 4950 L
+1405 4950 mt 1380 4929 L
+1380 4929 mt 1372 4923 L
+1372 4923 mt 1345 4898 L
+1345 4898 mt 1342 4895 L
+1342 4895 mt 1314 4868 L
+1314 4868 mt 1310 4863 L
+1310 4863 mt 1288 4840 L
+1288 4840 mt 1275 4826 L
+1275 4826 mt 1264 4813 L
+1264 4813 mt 1241 4785 L
+1241 4785 mt 1240 4784 L
+1240 4784 mt 1220 4758 L
+1220 4758 mt 1205 4738 L
+1205 4738 mt 1200 4730 L
+1200 4730 mt 1180 4703 L
+1180 4703 mt 1170 4687 L
+1170 4687 mt 1162 4675 L
+1162 4675 mt 1145 4648 L
+1145 4648 mt 1136 4632 L
+1136 4632 mt 1128 4620 L
+1128 4620 mt 1112 4592 L
+1112 4592 mt 1101 4572 L
+1101 4572 mt 1097 4565 L
+1097 4565 mt 1082 4537 L
+1082 4537 mt 1067 4510 L
+1067 4510 mt 1066 4508 L
+1066 4508 mt 1053 4482 L
+1053 4482 mt 1039 4455 L
+1039 4455 mt 1031 4439 L
+1031 4439 mt 1025 4427 L
+1025 4427 mt 1012 4400 L
+1012 4400 mt 1000 4372 L
+1000 4372 mt  996 4363 L
+ 996 4363 mt  988 4345 L
+ 988 4345 mt  977 4317 L
+ 977 4317 mt  967 4290 L
+ 967 4290 mt  961 4275 L
+ 961 4275 mt  957 4262 L
+ 957 4262 mt  947 4235 L
+ 947 4235 mt  938 4207 L
+ 938 4207 mt  929 4180 L
+ 929 4180 mt  926 4171 L
+ 926 4171 mt  920 4152 L
+ 920 4152 mt  911 4125 L
+ 911 4125 mt  903 4097 L
+ 903 4097 mt  894 4070 L
+ 894 4070 mt  892 4063 L
+ 892 4063 mt  885 4042 L
+ 885 4042 mt  875 4015 L
+ 875 4015 mt  865 3987 L
+ 865 3987 mt  857 3963 L
+ 857 3963 mt  855 3960 L
+ 855 3960 mt  845 3932 L
+ 845 3932 mt  833 3905 L
+ 833 3905 mt  822 3878 L
+ 822 3878 mt  821 3877 L
+ 821 3877 mt  808 3850 L
+ 808 3850 mt  794 3822 L
+ 794 3822 mt  787 3810 L
+ 787 3810 mt  777 3795 L
+ 777 3795 mt  759 3767 L
+ 759 3767 mt  752 3757 L
+ 752 3757 mt  740 3740 L
+ 740 3740 mt  718 3712 L
+ 718 3712 mt  717 3712 L
+ 717 3712 mt  693 3685 L
+ 693 3685 mt  682 3673 L
+ 682 3673 mt  667 3657 L
+ 667 3657 mt  647 3637 L
+ 647 3637 mt  639 3630 L
+ 639 3630 mt  613 3604 L
+ 613 3604 mt  610 3602 L
+ 610 3602 mt  579 3575 L
+ 579 3575 mt  578 3573 L
+ 578 3573 mt  548 3547 L
+ 548 3547 mt  543 3543 L
+ 543 3543 mt  516 3519 L
+ 516 3519 mt  508 3513 L
+ 508 3513 mt  483 3492 L
+ 483 3492 mt  473 3484 L
+ 473 3484 mt  449 3464 L
+ 449 3464 mt  438 3456 L
+ 438 3456 mt  413 3437 L
+ 413 3437 mt  403 3429 L
+ 403 3429 mt  377 3409 L
+ 377 3409 mt  368 3403 L
+ 368 3403 mt  340 3382 L
+ 340 3382 mt  334 3377 L
+ 334 3377 mt  303 3354 L
+ 303 3354 mt  299 3352 L
+ 299 3352 mt  265 3327 L
+ 265 3327 mt  264 3326 L
+ 264 3326 mt  229 3300 L
+ 229 3300 mt  229 3299 L
+ 229 3299 mt  194 3273 L
+ 194 3273 mt  193 3272 L
+ 193 3272 mt  159 3246 L
+ 159 3246 mt  157 3244 L
+ 157 3244 mt  124 3218 L
+ 124 3218 mt  123 3217 L
+ 123 3217 mt   90 3189 L
+  90 3189 mt   90 3189 L
+  90 3189 mt   58 3162 L
+  58 3162 mt   55 3159 L
+  55 3159 mt   27 3134 L
+  27 3134 mt   20 3128 L
+  20 3128 mt   -3 3107 L
+  -3 3107 mt  -14 3096 L
+ -14 3096 mt  -32 3079 L
+ -32 3079 mt  -49 3063 L
+ -49 3063 mt  -61 3052 L
+ -61 3052 mt  -84 3030 L
+ -84 3030 mt  -90 3024 L
+ -90 3024 mt -117 2997 L
+-117 2997 mt -119 2995 L
+-119 2995 mt -144 2969 L
+-144 2969 mt -154 2960 L
+-154 2960 mt -171 2942 L
+-171 2942 mt -188 2923 L
+-188 2923 mt -196 2914 L
+-196 2914 mt -221 2887 L
+-221 2887 mt -223 2884 L
+-223 2884 mt -244 2859 L
+-244 2859 mt -258 2842 L
+-258 2842 mt -267 2832 L
+-267 2832 mt -288 2804 L
+-288 2804 mt -293 2797 L
+-293 2797 mt -308 2777 L
+-308 2777 mt -328 2749 L
+-328 2749 mt -328 2749 L
+-328 2749 mt -347 2722 L
+-347 2722 mt -363 2697 L
+-363 2697 mt -365 2694 L
+-365 2694 mt -383 2667 L
+-383 2667 mt -398 2641 L
+-398 2641 mt -399 2639 L
+-399 2639 mt -415 2612 L
+-415 2612 mt -429 2584 L
+-429 2584 mt -433 2577 L
+-433 2577 mt -444 2557 L
+-444 2557 mt -457 2529 L
+-457 2529 mt -467 2505 L
+-467 2505 mt -469 2502 L
+-469 2502 mt -481 2474 L
+-481 2474 mt -492 2446 L
+-492 2446 mt -500 2419 L
+-500 2419 mt -502 2412 L
+-502 2412 mt -508 2391 L
+-508 2391 mt -514 2364 L
+-514 2364 mt -519 2336 L
+-519 2336 mt -521 2309 L
+-521 2309 mt -522 2281 L
+-522 2281 mt -521 2254 L
+-521 2254 mt -518 2226 L
+-518 2226 mt -514 2199 L
+-514 2199 mt -509 2171 L
+-509 2171 mt -502 2147 L
+-502 2147 mt -501 2144 L
+-501 2144 mt -494 2116 L
+-494 2116 mt -484 2089 L
+-484 2089 mt -473 2061 L
+-473 2061 mt -467 2050 L
+-467 2050 mt -461 2034 L
+-461 2034 mt -448 2006 L
+-448 2006 mt -434 1979 L
+-434 1979 mt -433 1976 L
+-433 1976 mt -420 1951 L
+-420 1951 mt -405 1924 L
+-405 1924 mt -398 1911 L
+-398 1911 mt -390 1896 L
+-390 1896 mt -374 1869 L
+-374 1869 mt -363 1849 L
+-363 1849 mt -359 1841 L
+-359 1841 mt -343 1814 L
+-343 1814 mt -328 1786 L
+-328 1786 mt -328 1786 L
+-328 1786 mt -313 1759 L
+-313 1759 mt -298 1731 L
+-298 1731 mt -293 1722 L
+-293 1722 mt -283 1704 L
+-283 1704 mt -268 1676 L
+-268 1676 mt -258 1658 L
+-258 1658 mt -253 1649 L
+-253 1649 mt -239 1621 L
+-239 1621 mt -223 1594 L
+-223 1594 mt -223 1594 L
+-223 1594 mt -208 1566 L
+-208 1566 mt -193 1539 L
+-193 1539 mt -188 1530 L
+-188 1530 mt -179 1511 L
+-179 1511 mt -164 1484 L
+-164 1484 mt -154 1464 L
+-154 1464 mt -149 1456 L
+-149 1456 mt -135 1428 L
+-135 1428 mt -121 1401 L
+-121 1401 mt -119 1396 L
+-119 1396 mt -108 1373 L
+-108 1373 mt  -95 1346 L
+ -95 1346 mt  -84 1323 L
+ -84 1323 mt  -82 1318 L
+ -82 1318 mt  -69 1291 L
+ -69 1291 mt  -57 1263 L
+ -57 1263 mt  -49 1246 L
+ -49 1246 mt  -45 1236 L
+ -45 1236 mt  -33 1208 L
+ -33 1208 mt  -21 1181 L
+ -21 1181 mt  -14 1165 L
+ -14 1165 mt   -9 1153 L
+  -9 1153 mt    1 1126 L
+   1 1126 mt   13 1098 L
+  13 1098 mt   20 1084 L
+  20 1084 mt   26 1071 L
+  26 1071 mt   39 1043 L
+  39 1043 mt   52 1016 L
+  52 1016 mt   55 1011 L
+  55 1011 mt   66  988 L
+  66  988 mt   81  961 L
+  81  961 mt   90  945 L
+  90  945 mt   96  933 L
+  96  933 mt  111  906 L
+ 111  906 mt  124  883 L
+ 124  883 mt  127  878 L
+ 127  878 mt  144  851 L
+ 144  851 mt  159  826 L
+ 159  826 mt  161  823 L
+ 161  823 mt  179  796 L
+ 179  796 mt  194  772 L
+ 194  772 mt  197  768 L
+ 197  768 mt  216  741 L
+ 216  741 mt  229  722 L
+ 229  722 mt  235  713 L
+ 235  713 mt  255  686 L
+ 255  686 mt  264  673 L
+ 264  673 mt  275  658 L
+ 275  658 mt  296  631 L
+ 296  631 mt  299  627 L
+ 299  627 mt  317  603 L
+ 317  603 mt  334  583 L
+ 334  583 mt  339  576 L
+ 339  576 mt  361  548 L
+ 361  548 mt  368  540 L
+ 368  540 mt  384  521 L
+ 384  521 mt  403  498 L
+ 403  498 mt  407  493 L
+ 407  493 mt  431  466 L
+ 431  466 mt  438  457 L
+ 438  457 mt  454  438 L
+ 454  438 mt  473  417 L
+ 473  417 mt  478  411 L
+ 478  411 mt  503  383 L
+ 503  383 mt  508  378 L
+ 508  378 mt  529  355 L
+ 529  355 mt  543  341 L
+ 543  341 mt  556  328 L
+ 556  328 mt  578  306 L
+ 578  306 mt  584  300 L
+ 584  300 mt  613  274 L
+ 613  274 mt  614  273 L
+ 614  273 mt  645  245 L
+ 645  245 mt  647  244 L
+ 647  244 mt  679  218 L
+ 679  218 mt  682  215 L
+ 682  215 mt  715  190 L
+ 715  190 mt  717  189 L
+ 717  189 mt  752  164 L
+ 752  164 mt  754  163 L
+ 754  163 mt  787  141 L
+ 787  141 mt  795  135 L
+ 795  135 mt  822  118 L
+ 822  118 mt  839  108 L
+ 839  108 mt  857   97 L
+ 857   97 mt  885   80 L
+ 885   80 mt  892   76 L
+ 892   76 mt  926   56 L
+ 926   56 mt  933   53 L
+ 933   53 mt  961   37 L
+ 961   37 mt  984   25 L
+ 984   25 mt  996   19 L
+ 996   19 mt 1031    1 L
+1031    1 mt 1038   -1 L
+1038   -1 mt 1066  -15 L
+1066  -15 mt 1096  -29 L
+1096  -29 mt 1101  -31 L
+1101  -31 mt 1136  -47 L
+1136  -47 mt 1158  -56 L
+1158  -56 mt 1170  -62 L
+1170  -62 mt 1205  -76 L
+1205  -76 mt 1223  -84 L
+1223  -84 mt 1240  -91 L
+1240  -91 mt 1275 -105 L
+1275 -105 mt 1292 -111 L
+1292 -111 mt 1310 -118 L
+1310 -118 mt 1345 -132 L
+1345 -132 mt 1364 -139 L
+1364 -139 mt 1380 -145 L
+1380 -145 mt 1415 -158 L
+1415 -158 mt 1439 -166 L
+1439 -166 mt 1449 -170 L
+1449 -170 mt 1484 -182 L
+1484 -182 mt 1519 -194 L
+1519 -194 mt 1519 -194 L
+1519 -194 mt 1554 -205 L
+1554 -205 mt 1589 -216 L
+1589 -216 mt 1605 -221 L
+1605 -221 mt 1624 -227 L
+1624 -227 mt 1659 -238 L
+1659 -238 mt 1694 -248 L
+1694 -248 mt 1696 -249 L
+1696 -249 mt 1728 -258 L
+1728 -258 mt 1763 -268 L
+1763 -268 mt 1791 -276 L
+1791 -276 mt 1798 -278 L
+1798 -278 mt 1833 -288 L
+1833 -288 mt 1868 -298 L
+1868 -298 mt 1889 -304 L
+1889 -304 mt 1903 -308 L
+1903 -308 mt 1938 -318 L
+1938 -318 mt 1972 -328 L
+1972 -328 mt 1986 -331 L
+1986 -331 mt 2007 -338 L
+2007 -338 mt 2042 -348 L
+2042 -348 mt 2077 -358 L
+2077 -358 mt 2081 -359 L
+2081 -359 mt 2112 -368 L
+2112 -368 mt 2147 -378 L
+2147 -378 mt 2175 -386 L
+2175 -386 mt 2182 -389 L
+2182 -389 mt 2217 -399 L
+2217 -399 mt 2251 -409 L
+2251 -409 mt 2270 -414 L
+2270 -414 mt 2286 -419 L
+2286 -419 mt 2321 -428 L
+2321 -428 mt 2356 -438 L
+2356 -438 mt 2370 -441 L
+2370 -441 mt 2391 -447 L
+2391 -447 mt 2426 -457 L
+2426 -457 mt 2461 -466 L
+2461 -466 mt 2470 -469 L
+2470 -469 mt 2496 -476 L
+2496 -476 mt 2530 -486 L
+2530 -486 mt 2565 -496 L
+2565 -496 mt 2565 -496 L
+2565 -496 mt 2600 -507 L
+2600 -507 mt 2635 -518 L
+2635 -518 mt 2656 -524 L
+2656 -524 mt 2670 -528 L
+2670 -528 mt 2705 -539 L
+2705 -539 mt 2740 -550 L
+2740 -550 mt 2744 -551 L
+2744 -551 mt 2774 -561 L
+2774 -561 mt 2809 -572 L
+2809 -572 mt 2832 -579 L
+2832 -579 mt 2844 -583 L
+2844 -583 mt 2879 -593 L
+2879 -593 mt 2914 -603 L
+2914 -603 mt 2926 -606 L
+2926 -606 mt 2949 -613 L
+2949 -613 mt 2984 -622 L
+2984 -622 mt 3019 -631 L
+3019 -631 mt 3031 -634 L
+3031 -634 mt 3053 -639 L
+3053 -639 mt 3088 -648 L
+3088 -648 mt 3123 -655 L
+3123 -655 mt 3154 -661 L
+3154 -661 mt 3158 -662 L
+3158 -662 mt 3193 -669 L
+3193 -669 mt 3228 -675 L
+3228 -675 mt 3263 -681 L
+3263 -681 mt 3298 -686 L
+3298 -686 mt 3316 -689 L
+3316 -689 mt 3332 -691 L
+3332 -691 mt 3367 -696 L
+3367 -696 mt 3402 -700 L
+3402 -700 mt 3437 -703 L
+3437 -703 mt 3472 -706 L
+3472 -706 mt 3507 -708 L
+3507 -708 mt 3542 -710 L
+3542 -710 mt 3577 -711 L
+3577 -711 mt 3611 -711 L
+3611 -711 mt 3646 -710 L
+3646 -710 mt 3681 -709 L
+3681 -709 mt 3716 -708 L
+3716 -708 mt 3751 -706 L
+3751 -706 mt 3786 -703 L
+3786 -703 mt 3821 -700 L
+3821 -700 mt 3855 -697 L
+3855 -697 mt 3890 -693 L
+3890 -693 mt 3922 -689 L
+3922 -689 mt 3925 -689 L
+3925 -689 mt 3960 -684 L
+3960 -684 mt 3995 -679 L
+3995 -679 mt 4030 -674 L
+4030 -674 mt 4065 -668 L
+4065 -668 mt 4099 -661 L
+4099 -661 mt 4100 -661 L
+4100 -661 mt 4134 -655 L
+4134 -655 mt 4169 -649 L
+4169 -649 mt 4204 -642 L
+4204 -642 mt 4239 -635 L
+4239 -635 mt 4244 -634 L
+4244 -634 mt 4274 -628 L
+4274 -628 mt 4309 -621 L
+4309 -621 mt 4344 -614 L
+4344 -614 mt 4379 -607 L
+4379 -607 mt 4381 -606 L
+4381 -606 mt 4413 -600 L
+4413 -600 mt 4448 -592 L
+4448 -592 mt 4483 -583 L
+4483 -583 mt 4500 -579 L
+4500 -579 mt 4518 -575 L
+4518 -575 mt 4553 -566 L
+4553 -566 mt 4588 -556 L
+4588 -556 mt 4605 -551 L
+4605 -551 mt 4623 -547 L
+4623 -547 mt 4657 -537 L
+4657 -537 mt 4692 -526 L
+4692 -526 mt 4699 -524 L
+4699 -524 mt 4727 -515 L
+4727 -515 mt 4762 -504 L
+4762 -504 mt 4784 -496 L
+4784 -496 mt 4797 -492 L
+4797 -492 mt 4832 -480 L
+4832 -480 mt 4862 -469 L
+4862 -469 mt 4867 -467 L
+4867 -467 mt 4902 -454 L
+4902 -454 mt 4936 -441 L
+4936 -441 mt 4936 -441 L
+4936 -441 mt 4971 -428 L
+4971 -428 mt 5006 -414 L
+5006 -414 mt 5007 -414 L
+5007 -414 mt 5041 -400 L
+5041 -400 mt 5076 -386 L
+5076 -386 mt 5076 -386 L
+5076 -386 mt 5111 -372 L
+5111 -372 mt 5144 -359 L
+5144 -359 mt 5146 -358 L
+5146 -358 mt 5181 -344 L
+5181 -344 mt 5209 -331 L
+5209 -331 mt 5215 -329 L
+5215 -329 mt 5250 -314 L
+5250 -314 mt 5273 -304 L
+5273 -304 mt 5285 -299 L
+5285 -299 mt 5320 -283 L
+5320 -283 mt 5335 -276 L
+5335 -276 mt 5355 -267 L
+5355 -267 mt 5390 -251 L
+5390 -251 mt 5394 -249 L
+5394 -249 mt 5425 -234 L
+5425 -234 mt 5451 -221 L
+5451 -221 mt 5459 -217 L
+5459 -217 mt 5494 -200 L
+5494 -200 mt 5507 -194 L
+5507 -194 mt 5529 -182 L
+5529 -182 mt 5560 -166 L
+5560 -166 mt 5564 -164 L
+5564 -164 mt 5599 -145 L
+5599 -145 mt 5611 -139 L
+5611 -139 mt 5634 -126 L
+5634 -126 mt 5660 -111 L
+5660 -111 mt 5669 -107 L
+5669 -107 mt 5704  -86 L
+5704  -86 mt 5707  -84 L
+5707  -84 mt 5738  -65 L
+5738  -65 mt 5752  -56 L
+5752  -56 mt 5773  -43 L
+5773  -43 mt 5795  -29 L
+5795  -29 mt 5808  -20 L
+5808  -20 mt 5836   -1 L
+5836   -1 mt 5843    3 L
+5843    3 mt 5876   25 L
+5876   25 mt 5878   27 L
+5878   27 mt 5913   52 L
+5913   52 mt 5914   53 L
+5914   53 mt 5948   78 L
+5948   78 mt 5951   80 L
+5951   80 mt 5983  104 L
+5983  104 mt 5987  108 L
+5987  108 mt 6017  132 L
+6017  132 mt 6022  135 L
+6022  135 mt 6052  160 L
+6052  160 mt 6056  163 L
+6056  163 mt 6087  189 L
+6087  189 mt 6089  190 L
+6089  190 mt 6121  218 L
+6121  218 mt 6122  219 L
+6122  219 mt 6152  245 L
+6152  245 mt 6157  249 L
+6157  249 mt 6183  273 L
+6183  273 mt 6192  280 L
+6192  280 mt 6214  300 L
+6214  300 mt 6227  312 L
+6227  312 mt 6244  328 L
+6244  328 mt 6261  344 L
+6261  344 mt 6274  355 L
+6274  355 mt 6296  377 L
+6296  377 mt 6303  383 L
+6303  383 mt 6331  409 L
+6331  409 mt 6333  411 L
+6333  411 mt 6362  438 L
+6362  438 mt 6366  442 L
+6366  442 mt 6392  466 L
+6392  466 mt 6401  474 L
+6401  474 mt 6422  493 L
+6422  493 mt 6436  506 L
+6436  506 mt 6451  521 L
+6451  521 mt 6471  539 L
+6471  539 mt 6481  548 L
+6481  548 mt 6506  571 L
+6506  571 mt 6511  576 L
+6511  576 mt 6540  603 L
+6540  603 mt 6541  603 L
+6541  603 mt 6571  631 L
+6571  631 mt 6575  635 L
+6575  635 mt 6601  658 L
+6601  658 mt 6610  667 L
+6610  667 mt 6630  686 L
+6630  686 mt 6645  700 L
+6645  700 mt 6660  713 L
+6660  713 mt 6680  732 L
+6680  732 mt 6689  741 L
+6689  741 mt 6715  765 L
+6715  765 mt 6718  768 L
+6718  768 mt 6747  796 L
+6747  796 mt 6750  798 L
+6750  798 mt 6776  823 L
+6776  823 mt 6785  831 L
+6785  831 mt 6805  851 L
+6805  851 mt 6819  865 L
+6819  865 mt 6833  878 L
+6833  878 mt 6854  900 L
+6854  900 mt 6860  906 L
+6860  906 mt 6888  933 L
+6888  933 mt 6889  935 L
+6889  935 mt 6915  961 L
+6915  961 mt 6924  970 L
+6924  970 mt 6942  988 L
+6942  988 mt 6959 1005 L
+6959 1005 mt 6969 1016 L
+6969 1016 mt 6994 1041 L
+6994 1041 mt 6996 1043 L
+6996 1043 mt 7022 1071 L
+7022 1071 mt 7029 1078 L
+7029 1078 mt 7048 1098 L
+7048 1098 mt 7063 1115 L
+7063 1115 mt 7073 1126 L
+7073 1126 mt 7098 1153 L
+7098 1153 mt 7099 1153 L
+7099 1153 mt 7124 1181 L
+7124 1181 mt 7133 1191 L
+7133 1191 mt 7150 1208 L
+7150 1208 mt 7168 1229 L
+7168 1229 mt 7175 1236 L
+7175 1236 mt 7201 1263 L
+7201 1263 mt 7203 1266 L
+7203 1266 mt 7226 1291 L
+7226 1291 mt 7238 1303 L
+7238 1303 mt 7252 1318 L
+7252 1318 mt 7273 1341 L
+7273 1341 mt 7278 1346 L
+7278 1346 mt 7303 1373 L
+7303 1373 mt 7308 1378 L
+7308 1378 mt 7329 1401 L
+7329 1401 mt 7342 1416 L
+7342 1416 mt 7354 1428 L
+7354 1428 mt 7377 1455 L
+7377 1455 mt 7378 1456 L
+7378 1456 mt 7403 1484 L
+7403 1484 mt 7412 1495 L
+7412 1495 mt 7427 1511 L
+7427 1511 mt 7447 1535 L
+7447 1535 mt 7450 1539 L
+7450 1539 mt 7474 1566 L
+7474 1566 mt 7482 1576 L
+7482 1576 mt 7496 1594 L
+7496 1594 mt 7517 1619 L
+7517 1619 mt 7519 1621 L
+7519 1621 mt 7541 1649 L
+7541 1649 mt 7552 1663 L
+7552 1663 mt 7562 1676 L
+7562 1676 mt 7582 1704 L
+7582 1704 mt 7587 1709 L
+7587 1709 mt 7603 1731 L
+7603 1731 mt 7621 1758 L
+7621 1758 mt 7622 1759 L
+7622 1759 mt 7641 1786 L
+7641 1786 mt 7656 1810 L
+7656 1810 mt 7659 1814 L
+7659 1814 mt 7676 1841 L
+7676 1841 mt 7691 1868 L
+7691 1868 mt 7692 1869 L
+7692 1869 mt 7707 1896 L
+7707 1896 mt 7721 1924 L
+7721 1924 mt 7726 1935 L
+7726 1935 mt 7734 1951 L
+7734 1951 mt 7746 1979 L
+7746 1979 mt 7756 2006 L
+7756 2006 mt 7761 2019 L
+7761 2019 mt 7766 2034 L
+7766 2034 mt 7776 2061 L
+7776 2061 mt 7784 2089 L
+7784 2089 mt 7790 2116 L
+7790 2116 mt 7796 2144 L
+7796 2144 mt 7796 2144 L
+7621 2069 mt 7625 2089 L
+7625 2089 mt 7628 2116 L
+7628 2116 mt 7630 2144 L
+7630 2144 mt 7631 2171 L
+7631 2171 mt 7631 2199 L
+7631 2199 mt 7631 2226 L
+7631 2226 mt 7629 2254 L
+7629 2254 mt 7627 2281 L
+7627 2281 mt 7625 2309 L
+7625 2309 mt 7621 2336 L
+7621 2336 mt 7621 2336 L
+7621 2336 mt 7618 2364 L
+7618 2364 mt 7614 2391 L
+7614 2391 mt 7610 2419 L
+7610 2419 mt 7605 2446 L
+7605 2446 mt 7600 2474 L
+7600 2474 mt 7595 2502 L
+7595 2502 mt 7589 2529 L
+7589 2529 mt 7587 2540 L
+7587 2540 mt 7583 2557 L
+7583 2557 mt 7577 2584 L
+7577 2584 mt 7570 2612 L
+7570 2612 mt 7562 2639 L
+7562 2639 mt 7554 2667 L
+7554 2667 mt 7552 2674 L
+7552 2674 mt 7545 2694 L
+7545 2694 mt 7536 2722 L
+7536 2722 mt 7526 2749 L
+7526 2749 mt 7517 2773 L
+7517 2773 mt 7516 2777 L
+7516 2777 mt 7505 2804 L
+7505 2804 mt 7493 2832 L
+7493 2832 mt 7482 2859 L
+7482 2859 mt 7482 2859 L
+7482 2859 mt 7470 2887 L
+7470 2887 mt 7458 2914 L
+7458 2914 mt 7447 2939 L
+7447 2939 mt 7446 2942 L
+7446 2942 mt 7434 2969 L
+7434 2969 mt 7422 2997 L
+7422 2997 mt 7412 3018 L
+7412 3018 mt 7410 3024 L
+7410 3024 mt 7397 3052 L
+7397 3052 mt 7385 3079 L
+7385 3079 mt 7377 3095 L
+7377 3095 mt 7372 3107 L
+7372 3107 mt 7359 3134 L
+7359 3134 mt 7346 3162 L
+7346 3162 mt 7342 3168 L
+7342 3168 mt 7332 3189 L
+7332 3189 mt 7319 3217 L
+7319 3217 mt 7308 3238 L
+7308 3238 mt 7304 3244 L
+7304 3244 mt 7290 3272 L
+7290 3272 mt 7276 3299 L
+7276 3299 mt 7273 3305 L
+7273 3305 mt 7261 3327 L
+7261 3327 mt 7246 3354 L
+7246 3354 mt 7238 3370 L
+7238 3370 mt 7232 3382 L
+7232 3382 mt 7217 3409 L
+7217 3409 mt 7203 3436 L
+7203 3436 mt 7202 3437 L
+7202 3437 mt 7188 3464 L
+7188 3464 mt 7174 3492 L
+7174 3492 mt 7168 3505 L
+7168 3505 mt 7161 3519 L
+7161 3519 mt 7147 3547 L
+7147 3547 mt 7133 3575 L
+7133 3575 mt 7133 3575 L
+7133 3575 mt 7120 3602 L
+7120 3602 mt 7106 3630 L
+7106 3630 mt 7098 3643 L
+7098 3643 mt 7091 3657 L
+7091 3657 mt 7076 3685 L
+7076 3685 mt 7063 3707 L
+7063 3707 mt 7061 3712 L
+7061 3712 mt 7045 3740 L
+7045 3740 mt 7029 3767 L
+7029 3767 mt 7029 3768 L
+7029 3768 mt 7014 3795 L
+7014 3795 mt 6998 3822 L
+6998 3822 mt 6994 3829 L
+6994 3829 mt 6982 3850 L
+6982 3850 mt 6966 3877 L
+6966 3877 mt 6959 3889 L
+6959 3889 mt 6950 3905 L
+6950 3905 mt 6934 3932 L
+6934 3932 mt 6924 3949 L
+6924 3949 mt 6917 3960 L
+6917 3960 mt 6901 3987 L
+6901 3987 mt 6889 4006 L
+6889 4006 mt 6884 4015 L
+6884 4015 mt 6867 4042 L
+6867 4042 mt 6854 4061 L
+6854 4061 mt 6849 4070 L
+6849 4070 mt 6831 4097 L
+6831 4097 mt 6819 4115 L
+6819 4115 mt 6813 4125 L
+6813 4125 mt 6795 4152 L
+6795 4152 mt 6785 4167 L
+6785 4167 mt 6776 4180 L
+6776 4180 mt 6758 4207 L
+6758 4207 mt 6750 4219 L
+6750 4219 mt 6739 4235 L
+6739 4235 mt 6720 4262 L
+6720 4262 mt 6715 4270 L
+6715 4270 mt 6702 4290 L
+6702 4290 mt 6683 4317 L
+6683 4317 mt 6680 4321 L
+6680 4321 mt 6664 4345 L
+6664 4345 mt 6645 4372 L
+6645 4372 mt 6645 4372 L
+6645 4372 mt 6625 4400 L
+6625 4400 mt 6610 4420 L
+6610 4420 mt 6605 4427 L
+6605 4427 mt 6584 4455 L
+6584 4455 mt 6575 4466 L
+6575 4466 mt 6563 4482 L
+6563 4482 mt 6540 4508 L
+6540 4508 mt 6539 4510 L
+6539 4510 mt 6514 4537 L
+6514 4537 mt 6506 4546 L
+6506 4546 mt 6486 4565 L
+6486 4565 mt 6471 4578 L
+6471 4578 mt 6455 4592 L
+6455 4592 mt 6436 4607 L
+6436 4607 mt 6418 4620 L
+6418 4620 mt 6401 4632 L
+6401 4632 mt 6375 4648 L
+6375 4648 mt 6366 4652 L
+6366 4652 mt 6331 4670 L
+6331 4670 mt 6319 4675 L
+6319 4675 mt 6296 4684 L
+6296 4684 mt 6261 4696 L
+6261 4696 mt 6238 4703 L
+6238 4703 mt 6227 4706 L
+6227 4706 mt 6192 4714 L
+6192 4714 mt 6157 4720 L
+6157 4720 mt 6122 4724 L
+6122 4724 mt 6087 4727 L
+6087 4727 mt 6052 4728 L
+6052 4728 mt 6017 4728 L
+6017 4728 mt 5983 4726 L
+5983 4726 mt 5948 4723 L
+5948 4723 mt 5913 4718 L
+5913 4718 mt 5878 4712 L
+5878 4712 mt 5843 4706 L
+5843 4706 mt 5829 4703 L
+5829 4703 mt 5808 4698 L
+5808 4698 mt 5773 4689 L
+5773 4689 mt 5738 4679 L
+5738 4679 mt 5726 4675 L
+5726 4675 mt 5704 4668 L
+5704 4668 mt 5669 4656 L
+5669 4656 mt 5645 4648 L
+5645 4648 mt 5634 4643 L
+5634 4643 mt 5599 4630 L
+5599 4630 mt 5577 4620 L
+5577 4620 mt 5564 4612 L
+5564 4612 mt 5538 4592 L
+5538 4592 mt 5529 4583 L
+5529 4583 mt 5512 4565 L
+5512 4565 mt 5498 4537 L
+5498 4537 mt 5494 4524 L
+5494 4524 mt 5490 4510 L
+5490 4510 mt 5488 4482 L
+5488 4482 mt 5487 4455 L
+5487 4455 mt 5485 4427 L
+5485 4427 mt 5480 4400 L
+5480 4400 mt 5471 4372 L
+5471 4372 mt 5460 4345 L
+5460 4345 mt 5459 4344 L
+5459 4344 mt 5448 4317 L
+5448 4317 mt 5437 4290 L
+5437 4290 mt 5429 4262 L
+5429 4262 mt 5425 4247 L
+5425 4247 mt 5421 4235 L
+5421 4235 mt 5415 4207 L
+5415 4207 mt 5409 4180 L
+5409 4180 mt 5403 4152 L
+5403 4152 mt 5398 4125 L
+5398 4125 mt 5392 4097 L
+5392 4097 mt 5390 4089 L
+5390 4089 mt 5384 4070 L
+5384 4070 mt 5375 4042 L
+5375 4042 mt 5364 4015 L
+5364 4015 mt 5355 3994 L
+5355 3994 mt 5351 3987 L
+5351 3987 mt 5331 3960 L
+5331 3960 mt 5320 3947 L
+5320 3947 mt 5302 3932 L
+5302 3932 mt 5285 3921 L
+5285 3921 mt 5251 3905 L
+5251 3905 mt 5250 3904 L
+5250 3904 mt 5215 3892 L
+5215 3892 mt 5181 3879 L
+5181 3879 mt 5177 3877 L
+5177 3877 mt 5146 3865 L
+5146 3865 mt 5116 3850 L
+5116 3850 mt 5111 3848 L
+5111 3848 mt 5076 3828 L
+5076 3828 mt 5068 3822 L
+5068 3822 mt 5041 3803 L
+5041 3803 mt 5031 3795 L
+5031 3795 mt 5006 3772 L
+5006 3772 mt 5002 3767 L
+5002 3767 mt 4978 3740 L
+4978 3740 mt 4971 3731 L
+4971 3731 mt 4957 3712 L
+4957 3712 mt 4936 3685 L
+4936 3685 mt 4936 3685 L
+4936 3685 mt 4917 3657 L
+4917 3657 mt 4902 3637 L
+4902 3637 mt 4897 3630 L
+4897 3630 mt 4877 3602 L
+4877 3602 mt 4867 3589 L
+4867 3589 mt 4856 3575 L
+4856 3575 mt 4836 3547 L
+4836 3547 mt 4832 3541 L
+4832 3541 mt 4817 3519 L
+4817 3519 mt 4800 3492 L
+4800 3492 mt 4797 3487 L
+4797 3487 mt 4783 3464 L
+4783 3464 mt 4768 3437 L
+4768 3437 mt 4762 3427 L
+4762 3427 mt 4752 3409 L
+4752 3409 mt 4733 3382 L
+4733 3382 mt 4727 3374 L
+4727 3374 mt 4711 3354 L
+4711 3354 mt 4692 3335 L
+4692 3335 mt 4684 3327 L
+4684 3327 mt 4657 3301 L
+4657 3301 mt 4655 3299 L
+4655 3299 mt 4627 3272 L
+4627 3272 mt 4623 3267 L
+4623 3267 mt 4602 3244 L
+4602 3244 mt 4588 3228 L
+4588 3228 mt 4578 3217 L
+4578 3217 mt 4559 3189 L
+4559 3189 mt 4553 3181 L
+4553 3181 mt 4538 3162 L
+4538 3162 mt 4518 3138 L
+4518 3138 mt 4514 3134 L
+4514 3134 mt 4484 3107 L
+4484 3107 mt 4483 3106 L
+4483 3106 mt 4449 3079 L
+4449 3079 mt 4448 3079 L
+4448 3079 mt 4413 3054 L
+4413 3054 mt 4410 3052 L
+4410 3052 mt 4379 3029 L
+4379 3029 mt 4371 3024 L
+4371 3024 mt 4344 3005 L
+4344 3005 mt 4330 2997 L
+4330 2997 mt 4309 2983 L
+4309 2983 mt 4287 2969 L
+4287 2969 mt 4274 2961 L
+4274 2961 mt 4239 2943 L
+4239 2943 mt 4237 2942 L
+4237 2942 mt 4204 2930 L
+4204 2930 mt 4169 2925 L
+4169 2925 mt 4134 2936 L
+4134 2936 mt 4124 2942 L
+4124 2942 mt 4100 2963 L
+4100 2963 mt 4093 2969 L
+4093 2969 mt 4073 2997 L
+4073 2997 mt 4065 3009 L
+4065 3009 mt 4054 3024 L
+4054 3024 mt 4034 3052 L
+4034 3052 mt 4030 3057 L
+4030 3057 mt 4011 3079 L
+4011 3079 mt 3995 3102 L
+3995 3102 mt 3991 3107 L
+3991 3107 mt 3973 3134 L
+3973 3134 mt 3960 3153 L
+3960 3153 mt 3953 3162 L
+3953 3162 mt 3933 3189 L
+3933 3189 mt 3925 3199 L
+3925 3199 mt 3908 3217 L
+3908 3217 mt 3890 3233 L
+3890 3233 mt 3876 3244 L
+3876 3244 mt 3855 3258 L
+3855 3258 mt 3831 3272 L
+3831 3272 mt 3821 3278 L
+3821 3278 mt 3786 3296 L
+3786 3296 mt 3780 3299 L
+3780 3299 mt 3751 3317 L
+3751 3317 mt 3738 3327 L
+3738 3327 mt 3716 3351 L
+3716 3351 mt 3713 3354 L
+3713 3354 mt 3705 3382 L
+3705 3382 mt 3703 3409 L
+3703 3409 mt 3707 3437 L
+3707 3437 mt 3715 3464 L
+3715 3464 mt 3716 3466 L
+3716 3466 mt 3734 3492 L
+3734 3492 mt 3751 3511 L
+3751 3511 mt 3760 3519 L
+3760 3519 mt 3785 3547 L
+3785 3547 mt 3786 3548 L
+3786 3548 mt 3807 3575 L
+3807 3575 mt 3821 3597 L
+3821 3597 mt 3824 3602 L
+3824 3602 mt 3839 3630 L
+3839 3630 mt 3852 3657 L
+3852 3657 mt 3855 3666 L
+3855 3666 mt 3863 3685 L
+3863 3685 mt 3873 3712 L
+3873 3712 mt 3880 3740 L
+3880 3740 mt 3884 3767 L
+3884 3767 mt 3884 3795 L
+3884 3795 mt 3881 3822 L
+3881 3822 mt 3875 3850 L
+3875 3850 mt 3867 3877 L
+3867 3877 mt 3858 3905 L
+3858 3905 mt 3855 3922 L
+3855 3922 mt 3854 3932 L
+3854 3932 mt 3851 3960 L
+3851 3960 mt 3853 3987 L
+3853 3987 mt 3855 3995 L
+3855 3995 mt 3862 4015 L
+3862 4015 mt 3874 4042 L
+3874 4042 mt 3884 4070 L
+3884 4070 mt 3890 4097 L
+3890 4097 mt 3890 4099 L
+3890 4099 mt 3895 4125 L
+3895 4125 mt 3897 4152 L
+3897 4152 mt 3898 4180 L
+3898 4180 mt 3896 4207 L
+3896 4207 mt 3891 4235 L
+3891 4235 mt 3890 4238 L
+3890 4238 mt 3882 4262 L
+3882 4262 mt 3867 4290 L
+3867 4290 mt 3855 4311 L
+3855 4311 mt 3851 4317 L
+3851 4317 mt 3846 4345 L
+3846 4345 mt 3855 4366 L
+3855 4366 mt 3858 4372 L
+3858 4372 mt 3873 4400 L
+3873 4400 mt 3885 4427 L
+3885 4427 mt 3890 4442 L
+3890 4442 mt 3895 4455 L
+3895 4455 mt 3905 4482 L
+3905 4482 mt 3914 4510 L
+3914 4510 mt 3922 4537 L
+3922 4537 mt 3925 4553 L
+3925 4553 mt 3928 4565 L
+3928 4565 mt 3931 4592 L
+3931 4592 mt 3926 4620 L
+3926 4620 mt 3925 4623 L
+3925 4623 mt 3916 4648 L
+3916 4648 mt 3903 4675 L
+3903 4675 mt 3890 4699 L
+3890 4699 mt 3888 4703 L
+3888 4703 mt 3873 4730 L
+3873 4730 mt 3855 4757 L
+3855 4757 mt 3855 4758 L
+3855 4758 mt 3836 4785 L
+3836 4785 mt 3821 4807 L
+3821 4807 mt 3816 4813 L
+3816 4813 mt 3795 4840 L
+3795 4840 mt 3786 4851 L
+3786 4851 mt 3771 4868 L
+3771 4868 mt 3751 4890 L
+3751 4890 mt 3746 4895 L
+3746 4895 mt 3718 4923 L
+3718 4923 mt 3716 4925 L
+3716 4925 mt 3688 4950 L
+3688 4950 mt 3681 4956 L
+3681 4956 mt 3656 4978 L
+3656 4978 mt 3646 4985 L
+3646 4985 mt 3620 5005 L
+3620 5005 mt 3611 5012 L
+3611 5012 mt 3581 5033 L
+3581 5033 mt 3577 5035 L
+3577 5035 mt 3542 5057 L
+3542 5057 mt 3537 5060 L
+3537 5060 mt 3507 5078 L
+3507 5078 mt 3488 5088 L
+3488 5088 mt 3472 5096 L
+3472 5096 mt 3437 5114 L
+3437 5114 mt 3433 5115 L
+3433 5115 mt 3402 5130 L
+3402 5130 mt 3373 5143 L
+3373 5143 mt 3367 5145 L
+3367 5145 mt 3332 5160 L
+3332 5160 mt 3306 5170 L
+3306 5170 mt 3298 5173 L
+3298 5173 mt 3263 5186 L
+3263 5186 mt 3229 5198 L
+3229 5198 mt 3228 5198 L
+3228 5198 mt 3193 5209 L
+3193 5209 mt 3158 5219 L
+3158 5219 mt 3134 5225 L
+3134 5225 mt 3123 5228 L
+3123 5228 mt 3088 5236 L
+3088 5236 mt 3053 5244 L
+3053 5244 mt 3019 5250 L
+3019 5250 mt 3001 5253 L
+3001 5253 mt 2984 5256 L
+2984 5256 mt 2949 5261 L
+2949 5261 mt 2914 5265 L
+2914 5265 mt 2879 5269 L
+2879 5269 mt 2844 5272 L
+2844 5272 mt 2809 5275 L
+2809 5275 mt 2774 5276 L
+2774 5276 mt 2740 5278 L
+2740 5278 mt 2705 5278 L
+2705 5278 mt 2670 5278 L
+2670 5278 mt 2635 5277 L
+2635 5277 mt 2600 5276 L
+2600 5276 mt 2565 5274 L
+2565 5274 mt 2530 5272 L
+2530 5272 mt 2496 5269 L
+2496 5269 mt 2461 5266 L
+2461 5266 mt 2426 5262 L
+2426 5262 mt 2391 5258 L
+2391 5258 mt 2356 5254 L
+2356 5254 mt 2349 5253 L
+2349 5253 mt 2321 5249 L
+2321 5249 mt 2286 5244 L
+2286 5244 mt 2251 5238 L
+2251 5238 mt 2217 5232 L
+2217 5232 mt 2184 5225 L
+2184 5225 mt 2182 5225 L
+2182 5225 mt 2147 5218 L
+2147 5218 mt 2112 5210 L
+2112 5210 mt 2077 5202 L
+2077 5202 mt 2063 5198 L
+2063 5198 mt 2042 5193 L
+2042 5193 mt 2007 5183 L
+2007 5183 mt 1972 5173 L
+1972 5173 mt 1963 5170 L
+1963 5170 mt 1938 5163 L
+1938 5163 mt 1903 5152 L
+1903 5152 mt 1876 5143 L
+1876 5143 mt 1868 5140 L
+1868 5140 mt 1833 5128 L
+1833 5128 mt 1798 5115 L
+1798 5115 mt 1798 5115 L
+1798 5115 mt 1763 5102 L
+1763 5102 mt 1729 5088 L
+1729 5088 mt 1728 5088 L
+1728 5088 mt 1694 5072 L
+1694 5072 mt 1667 5060 L
+1667 5060 mt 1659 5056 L
+1659 5056 mt 1624 5039 L
+1624 5039 mt 1613 5033 L
+1613 5033 mt 1589 5020 L
+1589 5020 mt 1564 5005 L
+1564 5005 mt 1554 4999 L
+1554 4999 mt 1520 4978 L
+1520 4978 mt 1519 4977 L
+1519 4977 mt 1484 4953 L
+1484 4953 mt 1480 4950 L
+1480 4950 mt 1449 4927 L
+1449 4927 mt 1444 4923 L
+1444 4923 mt 1415 4899 L
+1415 4899 mt 1411 4895 L
+1411 4895 mt 1380 4868 L
+1380 4868 mt 1380 4867 L
+1380 4867 mt 1352 4840 L
+1352 4840 mt 1345 4833 L
+1345 4833 mt 1326 4813 L
+1326 4813 mt 1310 4795 L
+1310 4795 mt 1302 4785 L
+1302 4785 mt 1279 4758 L
+1279 4758 mt 1275 4752 L
+1275 4752 mt 1258 4730 L
+1258 4730 mt 1240 4705 L
+1240 4705 mt 1238 4703 L
+1238 4703 mt 1220 4675 L
+1220 4675 mt 1205 4653 L
+1205 4653 mt 1202 4648 L
+1202 4648 mt 1185 4620 L
+1185 4620 mt 1170 4596 L
+1170 4596 mt 1169 4592 L
+1169 4592 mt 1153 4565 L
+1153 4565 mt 1138 4537 L
+1138 4537 mt 1136 4534 L
+1136 4534 mt 1123 4510 L
+1123 4510 mt 1109 4482 L
+1109 4482 mt 1101 4467 L
+1101 4467 mt 1095 4455 L
+1095 4455 mt 1082 4427 L
+1082 4427 mt 1069 4400 L
+1069 4400 mt 1066 4392 L
+1066 4392 mt 1057 4372 L
+1057 4372 mt 1046 4345 L
+1046 4345 mt 1035 4317 L
+1035 4317 mt 1031 4305 L
+1031 4305 mt 1026 4290 L
+1026 4290 mt 1016 4262 L
+1016 4262 mt 1008 4235 L
+1008 4235 mt  999 4207 L
+ 999 4207 mt  996 4196 L
+ 996 4196 mt  992 4180 L
+ 992 4180 mt  984 4152 L
+ 984 4152 mt  976 4125 L
+ 976 4125 mt  969 4097 L
+ 969 4097 mt  961 4070 L
+ 961 4070 mt  961 4069 L
+ 961 4069 mt  954 4042 L
+ 954 4042 mt  946 4015 L
+ 946 4015 mt  938 3987 L
+ 938 3987 mt  930 3960 L
+ 930 3960 mt  926 3948 L
+ 926 3948 mt  921 3932 L
+ 921 3932 mt  912 3905 L
+ 912 3905 mt  903 3877 L
+ 903 3877 mt  892 3850 L
+ 892 3850 mt  892 3848 L
+ 892 3848 mt  880 3822 L
+ 880 3822 mt  867 3795 L
+ 867 3795 mt  857 3775 L
+ 857 3775 mt  852 3767 L
+ 852 3767 mt  835 3740 L
+ 835 3740 mt  822 3720 L
+ 822 3720 mt  816 3712 L
+ 816 3712 mt  795 3685 L
+ 795 3685 mt  787 3675 L
+ 787 3675 mt  772 3657 L
+ 772 3657 mt  752 3636 L
+ 752 3636 mt  746 3630 L
+ 746 3630 mt  718 3602 L
+ 718 3602 mt  717 3601 L
+ 717 3601 mt  689 3575 L
+ 689 3575 mt  682 3569 L
+ 682 3569 mt  658 3547 L
+ 658 3547 mt  647 3538 L
+ 647 3538 mt  626 3519 L
+ 626 3519 mt  613 3508 L
+ 613 3508 mt  593 3492 L
+ 593 3492 mt  578 3479 L
+ 578 3479 mt  560 3464 L
+ 560 3464 mt  543 3451 L
+ 543 3451 mt  526 3437 L
+ 526 3437 mt  508 3423 L
+ 508 3423 mt  491 3409 L
+ 491 3409 mt  473 3395 L
+ 473 3395 mt  456 3382 L
+ 456 3382 mt  438 3369 L
+ 438 3369 mt  420 3354 L
+ 420 3354 mt  403 3342 L
+ 403 3342 mt  383 3327 L
+ 383 3327 mt  368 3316 L
+ 368 3316 mt  347 3299 L
+ 347 3299 mt  334 3289 L
+ 334 3289 mt  311 3272 L
+ 311 3272 mt  299 3262 L
+ 299 3262 mt  276 3244 L
+ 276 3244 mt  264 3234 L
+ 264 3234 mt  242 3217 L
+ 242 3217 mt  229 3206 L
+ 229 3206 mt  209 3189 L
+ 209 3189 mt  194 3177 L
+ 194 3177 mt  177 3162 L
+ 177 3162 mt  159 3146 L
+ 159 3146 mt  147 3134 L
+ 147 3134 mt  124 3113 L
+ 124 3113 mt  117 3107 L
+ 117 3107 mt   90 3080 L
+  90 3080 mt   89 3079 L
+  89 3079 mt   61 3052 L
+  61 3052 mt   55 3045 L
+  55 3045 mt   34 3024 L
+  34 3024 mt   20 3009 L
+  20 3009 mt    8 2997 L
+   8 2997 mt  -14 2971 L
+ -14 2971 mt  -16 2969 L
+ -16 2969 mt  -40 2942 L
+ -40 2942 mt  -49 2931 L
+ -49 2931 mt  -64 2914 L
+ -64 2914 mt  -84 2891 L
+ -84 2891 mt  -87 2887 L
+ -87 2887 mt -109 2859 L
+-109 2859 mt -119 2847 L
+-119 2847 mt -130 2832 L
+-130 2832 mt -150 2804 L
+-150 2804 mt -154 2799 L
+-154 2799 mt -170 2777 L
+-170 2777 mt -187 2749 L
+-187 2749 mt -188 2747 L
+-188 2747 mt -204 2722 L
+-204 2722 mt -220 2694 L
+-220 2694 mt -223 2688 L
+-223 2688 mt -235 2667 L
+-235 2667 mt -249 2639 L
+-249 2639 mt -258 2619 L
+-258 2619 mt -262 2612 L
+-262 2612 mt -274 2584 L
+-274 2584 mt -285 2557 L
+-285 2557 mt -293 2535 L
+-293 2535 mt -295 2529 L
+-295 2529 mt -305 2502 L
+-305 2502 mt -314 2474 L
+-314 2474 mt -321 2446 L
+-321 2446 mt -328 2419 L
+-328 2419 mt -328 2419 L
+-328 2419 mt -333 2391 L
+-333 2391 mt -338 2364 L
+-338 2364 mt -341 2336 L
+-341 2336 mt -343 2309 L
+-343 2309 mt -344 2281 L
+-344 2281 mt -344 2254 L
+-344 2254 mt -342 2226 L
+-342 2226 mt -339 2199 L
+-339 2199 mt -336 2171 L
+-336 2171 mt -331 2144 L
+-331 2144 mt -328 2130 L
+-328 2130 mt -325 2116 L
+-325 2116 mt -318 2089 L
+-318 2089 mt -311 2061 L
+-311 2061 mt -302 2034 L
+-302 2034 mt -293 2007 L
+-293 2007 mt -293 2006 L
+-293 2006 mt -283 1979 L
+-283 1979 mt -273 1951 L
+-273 1951 mt -262 1924 L
+-262 1924 mt -258 1914 L
+-258 1914 mt -251 1896 L
+-251 1896 mt -240 1869 L
+-240 1869 mt -229 1841 L
+-229 1841 mt -223 1828 L
+-223 1828 mt -217 1814 L
+-217 1814 mt -206 1786 L
+-206 1786 mt -194 1759 L
+-194 1759 mt -188 1745 L
+-188 1745 mt -183 1731 L
+-183 1731 mt -171 1704 L
+-171 1704 mt -160 1676 L
+-160 1676 mt -154 1663 L
+-154 1663 mt -147 1649 L
+-147 1649 mt -135 1621 L
+-135 1621 mt -123 1594 L
+-123 1594 mt -119 1585 L
+-119 1585 mt -110 1566 L
+-110 1566 mt  -98 1539 L
+ -98 1539 mt  -85 1511 L
+ -85 1511 mt  -84 1508 L
+ -84 1508 mt  -73 1484 L
+ -73 1484 mt  -61 1456 L
+ -61 1456 mt  -49 1428 L
+ -49 1428 mt  -49 1428 L
+ -49 1428 mt  -37 1401 L
+ -37 1401 mt  -26 1373 L
+ -26 1373 mt  -14 1346 L
+ -14 1346 mt  -14 1346 L
+ -14 1346 mt   -3 1318 L
+  -3 1318 mt    7 1291 L
+   7 1291 mt   18 1263 L
+  18 1263 mt   20 1258 L
+  20 1258 mt   28 1236 L
+  28 1236 mt   39 1208 L
+  39 1208 mt   50 1181 L
+  50 1181 mt   55 1168 L
+  55 1168 mt   60 1153 L
+  60 1153 mt   71 1126 L
+  71 1126 mt   83 1098 L
+  83 1098 mt   90 1082 L
+  90 1082 mt   94 1071 L
+  94 1071 mt  106 1043 L
+ 106 1043 mt  119 1016 L
+ 119 1016 mt  124 1006 L
+ 124 1006 mt  133  988 L
+ 133  988 mt  147  961 L
+ 147  961 mt  159  937 L
+ 159  937 mt  161  933 L
+ 161  933 mt  176  906 L
+ 176  906 mt  192  878 L
+ 192  878 mt  194  875 L
+ 194  875 mt  208  851 L
+ 208  851 mt  225  823 L
+ 225  823 mt  229  817 L
+ 229  817 mt  242  796 L
+ 242  796 mt  260  768 L
+ 260  768 mt  264  762 L
+ 264  762 mt  278  741 L
+ 278  741 mt  297  713 L
+ 297  713 mt  299  710 L
+ 299  710 mt  316  686 L
+ 316  686 mt  334  662 L
+ 334  662 mt  336  658 L
+ 336  658 mt  357  631 L
+ 357  631 mt  368  615 L
+ 368  615 mt  378  603 L
+ 378  603 mt  399  576 L
+ 399  576 mt  403  571 L
+ 403  571 mt  422  548 L
+ 422  548 mt  438  528 L
+ 438  528 mt  444  521 L
+ 444  521 mt  467  493 L
+ 467  493 mt  473  486 L
+ 473  486 mt  490  466 L
+ 490  466 mt  508  445 L
+ 508  445 mt  514  438 L
+ 514  438 mt  538  411 L
+ 538  411 mt  543  406 L
+ 543  406 mt  564  383 L
+ 564  383 mt  578  368 L
+ 578  368 mt  590  355 L
+ 590  355 mt  613  333 L
+ 613  333 mt  618  328 L
+ 618  328 mt  647  300 L
+ 647  300 mt  647  300 L
+ 647  300 mt  679  273 L
+ 679  273 mt  682  270 L
+ 682  270 mt  712  245 L
+ 712  245 mt  717  241 L
+ 717  241 mt  748  218 L
+ 748  218 mt  752  215 L
+ 752  215 mt  787  190 L
+ 787  190 mt  787  190 L
+ 787  190 mt  822  167 L
+ 822  167 mt  828  163 L
+ 828  163 mt  857  145 L
+ 857  145 mt  872  135 L
+ 872  135 mt  892  123 L
+ 892  123 mt  918  108 L
+ 918  108 mt  926  103 L
+ 926  103 mt  961   83 L
+ 961   83 mt  967   80 L
+ 967   80 mt  996   65 L
+ 996   65 mt 1019   53 L
+1019   53 mt 1031   47 L
+1031   47 mt 1066   30 L
+1066   30 mt 1075   25 L
+1075   25 mt 1101   13 L
+1101   13 mt 1135   -1 L
+1135   -1 mt 1136   -1 L
+1136   -1 mt 1170  -16 L
+1170  -16 mt 1200  -29 L
+1200  -29 mt 1205  -31 L
+1205  -31 mt 1240  -45 L
+1240  -45 mt 1269  -56 L
+1269  -56 mt 1275  -59 L
+1275  -59 mt 1310  -72 L
+1310  -72 mt 1342  -84 L
+1342  -84 mt 1345  -85 L
+1345  -85 mt 1380  -98 L
+1380  -98 mt 1415 -110 L
+1415 -110 mt 1419 -111 L
+1419 -111 mt 1449 -122 L
+1449 -122 mt 1484 -133 L
+1484 -133 mt 1502 -139 L
+1502 -139 mt 1519 -144 L
+1519 -144 mt 1554 -155 L
+1554 -155 mt 1589 -166 L
+1589 -166 mt 1591 -166 L
+1591 -166 mt 1624 -176 L
+1624 -176 mt 1659 -186 L
+1659 -186 mt 1687 -194 L
+1687 -194 mt 1694 -196 L
+1694 -196 mt 1728 -205 L
+1728 -205 mt 1763 -215 L
+1763 -215 mt 1789 -221 L
+1789 -221 mt 1798 -224 L
+1798 -224 mt 1833 -233 L
+1833 -233 mt 1868 -242 L
+1868 -242 mt 1894 -249 L
+1894 -249 mt 1903 -251 L
+1903 -251 mt 1938 -260 L
+1938 -260 mt 1972 -269 L
+1972 -269 mt 2000 -276 L
+2000 -276 mt 2007 -278 L
+2007 -278 mt 2042 -287 L
+2042 -287 mt 2077 -296 L
+2077 -296 mt 2106 -304 L
+2106 -304 mt 2112 -306 L
+2112 -306 mt 2147 -315 L
+2147 -315 mt 2182 -324 L
+2182 -324 mt 2211 -331 L
+2211 -331 mt 2217 -333 L
+2217 -333 mt 2251 -342 L
+2251 -342 mt 2286 -351 L
+2286 -351 mt 2317 -359 L
+2317 -359 mt 2321 -360 L
+2321 -360 mt 2356 -369 L
+2356 -369 mt 2391 -377 L
+2391 -377 mt 2426 -386 L
+2426 -386 mt 2427 -386 L
+2427 -386 mt 2461 -395 L
+2461 -395 mt 2496 -404 L
+2496 -404 mt 2530 -413 L
+2530 -413 mt 2536 -414 L
+2536 -414 mt 2565 -422 L
+2565 -422 mt 2600 -431 L
+2600 -431 mt 2635 -440 L
+2635 -440 mt 2640 -441 L
+2640 -441 mt 2670 -449 L
+2670 -449 mt 2705 -459 L
+2705 -459 mt 2740 -468 L
+2740 -468 mt 2743 -469 L
+2743 -469 mt 2774 -478 L
+2774 -478 mt 2809 -487 L
+2809 -487 mt 2844 -496 L
+2844 -496 mt 2845 -496 L
+2845 -496 mt 2879 -505 L
+2879 -505 mt 2914 -514 L
+2914 -514 mt 2949 -523 L
+2949 -523 mt 2953 -524 L
+2953 -524 mt 2984 -531 L
+2984 -531 mt 3019 -539 L
+3019 -539 mt 3053 -547 L
+3053 -547 mt 3074 -551 L
+3074 -551 mt 3088 -555 L
+3088 -555 mt 3123 -562 L
+3123 -562 mt 3158 -568 L
+3158 -568 mt 3193 -575 L
+3193 -575 mt 3217 -579 L
+3217 -579 mt 3228 -581 L
+3228 -581 mt 3263 -586 L
+3263 -586 mt 3298 -591 L
+3298 -591 mt 3332 -596 L
+3332 -596 mt 3367 -600 L
+3367 -600 mt 3402 -604 L
+3402 -604 mt 3423 -606 L
+3423 -606 mt 3437 -608 L
+3437 -608 mt 3472 -611 L
+3472 -611 mt 3507 -614 L
+3507 -614 mt 3542 -616 L
+3542 -616 mt 3577 -617 L
+3577 -617 mt 3611 -619 L
+3611 -619 mt 3646 -619 L
+3646 -619 mt 3681 -619 L
+3681 -619 mt 3716 -618 L
+3716 -618 mt 3751 -617 L
+3751 -617 mt 3786 -616 L
+3786 -616 mt 3821 -614 L
+3821 -614 mt 3855 -611 L
+3855 -611 mt 3890 -608 L
+3890 -608 mt 3910 -606 L
+3910 -606 mt 3925 -605 L
+3925 -605 mt 3960 -602 L
+3960 -602 mt 3995 -598 L
+3995 -598 mt 4030 -593 L
+4030 -593 mt 4065 -589 L
+4065 -589 mt 4100 -584 L
+4100 -584 mt 4134 -579 L
+4134 -579 mt 4137 -579 L
+4137 -579 mt 4169 -574 L
+4169 -574 mt 4204 -569 L
+4204 -569 mt 4239 -564 L
+4239 -564 mt 4274 -558 L
+4274 -558 mt 4309 -552 L
+4309 -552 mt 4314 -551 L
+4314 -551 mt 4344 -547 L
+4344 -547 mt 4379 -540 L
+4379 -540 mt 4413 -534 L
+4413 -534 mt 4448 -527 L
+4448 -527 mt 4462 -524 L
+4462 -524 mt 4483 -520 L
+4483 -520 mt 4518 -512 L
+4518 -512 mt 4553 -504 L
+4553 -504 mt 4584 -496 L
+4584 -496 mt 4588 -496 L
+4588 -496 mt 4623 -487 L
+4623 -487 mt 4657 -478 L
+4657 -478 mt 4690 -469 L
+4690 -469 mt 4692 -468 L
+4692 -468 mt 4727 -458 L
+4727 -458 mt 4762 -448 L
+4762 -448 mt 4783 -441 L
+4783 -441 mt 4797 -437 L
+4797 -437 mt 4832 -426 L
+4832 -426 mt 4867 -414 L
+4867 -414 mt 4868 -414 L
+4868 -414 mt 4902 -402 L
+4902 -402 mt 4936 -390 L
+4936 -390 mt 4946 -386 L
+4946 -386 mt 4971 -377 L
+4971 -377 mt 5006 -364 L
+5006 -364 mt 5021 -359 L
+5021 -359 mt 5041 -351 L
+5041 -351 mt 5076 -338 L
+5076 -338 mt 5093 -331 L
+5093 -331 mt 5111 -325 L
+5111 -325 mt 5146 -311 L
+5146 -311 mt 5164 -304 L
+5164 -304 mt 5181 -297 L
+5181 -297 mt 5215 -283 L
+5215 -283 mt 5231 -276 L
+5231 -276 mt 5250 -269 L
+5250 -269 mt 5285 -254 L
+5285 -254 mt 5296 -249 L
+5296 -249 mt 5320 -238 L
+5320 -238 mt 5355 -223 L
+5355 -223 mt 5358 -221 L
+5358 -221 mt 5390 -207 L
+5390 -207 mt 5417 -194 L
+5417 -194 mt 5425 -190 L
+5425 -190 mt 5459 -174 L
+5459 -174 mt 5474 -166 L
+5474 -166 mt 5494 -156 L
+5494 -156 mt 5528 -139 L
+5528 -139 mt 5529 -138 L
+5529 -138 mt 5564 -120 L
+5564 -120 mt 5581 -111 L
+5581 -111 mt 5599 -101 L
+5599 -101 mt 5630  -84 L
+5630  -84 mt 5634  -82 L
+5634  -82 mt 5669  -62 L
+5669  -62 mt 5678  -56 L
+5678  -56 mt 5704  -41 L
+5704  -41 mt 5723  -29 L
+5723  -29 mt 5738  -19 L
+5738  -19 mt 5765   -1 L
+5765   -1 mt 5773    3 L
+5773    3 mt 5806   25 L
+5806   25 mt 5808   27 L
+5808   27 mt 5843   51 L
+5843   51 mt 5846   53 L
+5846   53 mt 5878   76 L
+5878   76 mt 5884   80 L
+5884   80 mt 5913  102 L
+5913  102 mt 5921  108 L
+5921  108 mt 5948  129 L
+5948  129 mt 5956  135 L
+5956  135 mt 5983  156 L
+5983  156 mt 5991  163 L
+5991  163 mt 6017  185 L
+6017  185 mt 6025  190 L
+6025  190 mt 6052  214 L
+6052  214 mt 6057  218 L
+6057  218 mt 6087  244 L
+6087  244 mt 6089  245 L
+6089  245 mt 6120  273 L
+6120  273 mt 6122  275 L
+6122  275 mt 6151  300 L
+6151  300 mt 6157  306 L
+6157  306 mt 6181  328 L
+6181  328 mt 6192  338 L
+6192  338 mt 6211  355 L
+6211  355 mt 6227  370 L
+6227  370 mt 6240  383 L
+6240  383 mt 6261  403 L
+6261  403 mt 6269  411 L
+6269  411 mt 6296  436 L
+6296  436 mt 6299  438 L
+6299  438 mt 6328  466 L
+6328  466 mt 6331  469 L
+6331  469 mt 6357  493 L
+6357  493 mt 6366  501 L
+6366  501 mt 6387  521 L
+6387  521 mt 6401  534 L
+6401  534 mt 6416  548 L
+6416  548 mt 6436  566 L
+6436  566 mt 6446  576 L
+6446  576 mt 6471  599 L
+6471  599 mt 6475  603 L
+6475  603 mt 6505  631 L
+6505  631 mt 6506  631 L
+6506  631 mt 6534  658 L
+6534  658 mt 6540  664 L
+6540  664 mt 6564  686 L
+6564  686 mt 6575  696 L
+6575  696 mt 6593  713 L
+6593  713 mt 6610  729 L
+6610  729 mt 6623  741 L
+6623  741 mt 6645  762 L
+6645  762 mt 6652  768 L
+6652  768 mt 6680  795 L
+6680  795 mt 6681  796 L
+6681  796 mt 6709  823 L
+6709  823 mt 6715  829 L
+6715  829 mt 6738  851 L
+6738  851 mt 6750  863 L
+6750  863 mt 6766  878 L
+6766  878 mt 6785  897 L
+6785  897 mt 6793  906 L
+6793  906 mt 6819  932 L
+6819  932 mt 6820  933 L
+6820  933 mt 6847  961 L
+6847  961 mt 6854  968 L
+6854  968 mt 6874  988 L
+6874  988 mt 6889 1004 L
+6889 1004 mt 6901 1016 L
+6901 1016 mt 6924 1040 L
+6924 1040 mt 6927 1043 L
+6927 1043 mt 6953 1071 L
+6953 1071 mt 6959 1078 L
+6959 1078 mt 6978 1098 L
+6978 1098 mt 6994 1116 L
+6994 1116 mt 7003 1126 L
+7003 1126 mt 7027 1153 L
+7027 1153 mt 7029 1155 L
+7029 1155 mt 7052 1181 L
+7052 1181 mt 7063 1194 L
+7063 1194 mt 7077 1208 L
+7077 1208 mt 7098 1233 L
+7098 1233 mt 7101 1236 L
+7101 1236 mt 7125 1263 L
+7125 1263 mt 7133 1273 L
+7133 1273 mt 7149 1291 L
+7149 1291 mt 7168 1314 L
+7168 1314 mt 7172 1318 L
+7172 1318 mt 7196 1346 L
+7196 1346 mt 7203 1354 L
+7203 1354 mt 7220 1373 L
+7220 1373 mt 7238 1394 L
+7238 1394 mt 7244 1401 L
+7244 1401 mt 7267 1428 L
+7267 1428 mt 7273 1436 L
+7273 1436 mt 7289 1456 L
+7289 1456 mt 7308 1479 L
+7308 1479 mt 7311 1484 L
+7311 1484 mt 7333 1511 L
+7333 1511 mt 7342 1523 L
+7342 1523 mt 7355 1539 L
+7355 1539 mt 7376 1566 L
+7376 1566 mt 7377 1568 L
+7377 1568 mt 7396 1594 L
+7396 1594 mt 7412 1616 L
+7412 1616 mt 7416 1621 L
+7416 1621 mt 7435 1649 L
+7435 1649 mt 7447 1667 L
+7447 1667 mt 7453 1676 L
+7453 1676 mt 7471 1704 L
+7471 1704 mt 7482 1722 L
+7482 1722 mt 7488 1731 L
+7488 1731 mt 7504 1759 L
+7504 1759 mt 7517 1781 L
+7517 1781 mt 7520 1786 L
+7520 1786 mt 7534 1814 L
+7534 1814 mt 7548 1841 L
+7548 1841 mt 7552 1849 L
+7552 1849 mt 7561 1869 L
+7561 1869 mt 7573 1896 L
+7573 1896 mt 7583 1924 L
+7583 1924 mt 7587 1934 L
+7587 1934 mt 7593 1951 L
+7593 1951 mt 7601 1979 L
+7601 1979 mt 7609 2006 L
+7609 2006 mt 7615 2034 L
+7615 2034 mt 7620 2061 L
+7620 2061 mt 7621 2069 L
+7482 1954 mt 7488 1979 L
+7488 1979 mt 7494 2006 L
+7494 2006 mt 7499 2034 L
+7499 2034 mt 7503 2061 L
+7503 2061 mt 7506 2089 L
+7506 2089 mt 7508 2116 L
+7508 2116 mt 7509 2144 L
+7509 2144 mt 7509 2171 L
+7509 2171 mt 7509 2199 L
+7509 2199 mt 7507 2226 L
+7507 2226 mt 7505 2254 L
+7505 2254 mt 7503 2281 L
+7503 2281 mt 7500 2309 L
+7500 2309 mt 7497 2336 L
+7497 2336 mt 7494 2364 L
+7494 2364 mt 7490 2391 L
+7490 2391 mt 7486 2419 L
+7486 2419 mt 7482 2446 L
+7482 2446 mt 7482 2447 L
+7482 2447 mt 7478 2474 L
+7478 2474 mt 7473 2502 L
+7473 2502 mt 7468 2529 L
+7468 2529 mt 7462 2557 L
+7462 2557 mt 7456 2584 L
+7456 2584 mt 7449 2612 L
+7449 2612 mt 7447 2620 L
+7447 2620 mt 7442 2639 L
+7442 2639 mt 7434 2667 L
+7434 2667 mt 7426 2694 L
+7426 2694 mt 7417 2722 L
+7417 2722 mt 7412 2735 L
+7412 2735 mt 7407 2749 L
+7407 2749 mt 7398 2777 L
+7398 2777 mt 7388 2804 L
+7388 2804 mt 7377 2832 L
+7377 2832 mt 7377 2832 L
+7377 2832 mt 7367 2859 L
+7367 2859 mt 7356 2887 L
+7356 2887 mt 7346 2914 L
+7346 2914 mt 7342 2922 L
+7342 2922 mt 7335 2942 L
+7335 2942 mt 7324 2969 L
+7324 2969 mt 7312 2997 L
+7312 2997 mt 7308 3008 L
+7308 3008 mt 7301 3024 L
+7301 3024 mt 7289 3052 L
+7289 3052 mt 7278 3079 L
+7278 3079 mt 7273 3091 L
+7273 3091 mt 7266 3107 L
+7266 3107 mt 7254 3134 L
+7254 3134 mt 7241 3162 L
+7241 3162 mt 7238 3170 L
+7238 3170 mt 7229 3189 L
+7229 3189 mt 7216 3217 L
+7216 3217 mt 7203 3244 L
+7203 3244 mt 7203 3245 L
+7203 3245 mt 7190 3272 L
+7190 3272 mt 7177 3299 L
+7177 3299 mt 7168 3318 L
+7168 3318 mt 7164 3327 L
+7164 3327 mt 7150 3354 L
+7150 3354 mt 7136 3382 L
+7136 3382 mt 7133 3389 L
+7133 3389 mt 7123 3409 L
+7123 3409 mt 7110 3437 L
+7110 3437 mt 7098 3461 L
+7098 3461 mt 7097 3464 L
+7097 3464 mt 7084 3492 L
+7084 3492 mt 7071 3519 L
+7071 3519 mt 7063 3536 L
+7063 3536 mt 7058 3547 L
+7058 3547 mt 7045 3575 L
+7045 3575 mt 7032 3602 L
+7032 3602 mt 7029 3609 L
+7029 3609 mt 7019 3630 L
+7019 3630 mt 7005 3657 L
+7005 3657 mt 6994 3678 L
+6994 3678 mt 6990 3685 L
+6990 3685 mt 6976 3712 L
+6976 3712 mt 6961 3740 L
+6961 3740 mt 6959 3744 L
+6959 3744 mt 6947 3767 L
+6947 3767 mt 6932 3795 L
+6932 3795 mt 6924 3809 L
+6924 3809 mt 6917 3822 L
+6917 3822 mt 6902 3850 L
+6902 3850 mt 6889 3874 L
+6889 3874 mt 6887 3877 L
+6887 3877 mt 6872 3905 L
+6872 3905 mt 6856 3932 L
+6856 3932 mt 6854 3936 L
+6854 3936 mt 6841 3960 L
+6841 3960 mt 6824 3987 L
+6824 3987 mt 6819 3996 L
+6819 3996 mt 6808 4015 L
+6808 4015 mt 6791 4042 L
+6791 4042 mt 6785 4053 L
+6785 4053 mt 6775 4070 L
+6775 4070 mt 6758 4097 L
+6758 4097 mt 6750 4110 L
+6750 4110 mt 6741 4125 L
+6741 4125 mt 6723 4152 L
+6723 4152 mt 6715 4166 L
+6715 4166 mt 6706 4180 L
+6706 4180 mt 6688 4207 L
+6688 4207 mt 6680 4221 L
+6680 4221 mt 6671 4235 L
+6671 4235 mt 6654 4262 L
+6654 4262 mt 6645 4276 L
+6645 4276 mt 6636 4290 L
+6636 4290 mt 6619 4317 L
+6619 4317 mt 6610 4331 L
+6610 4331 mt 6601 4345 L
+6601 4345 mt 6584 4372 L
+6584 4372 mt 6575 4385 L
+6575 4385 mt 6565 4400 L
+6565 4400 mt 6546 4427 L
+6546 4427 mt 6540 4436 L
+6540 4436 mt 6527 4455 L
+6527 4455 mt 6506 4482 L
+6506 4482 mt 6505 4482 L
+6505 4482 mt 6482 4510 L
+6482 4510 mt 6471 4522 L
+6471 4522 mt 6457 4537 L
+6457 4537 mt 6436 4557 L
+6436 4557 mt 6428 4565 L
+6428 4565 mt 6401 4587 L
+6401 4587 mt 6394 4592 L
+6394 4592 mt 6366 4612 L
+6366 4612 mt 6353 4620 L
+6353 4620 mt 6331 4632 L
+6331 4632 mt 6299 4648 L
+6299 4648 mt 6296 4649 L
+6296 4649 mt 6261 4662 L
+6261 4662 mt 6227 4672 L
+6227 4672 mt 6213 4675 L
+6213 4675 mt 6192 4680 L
+6192 4680 mt 6157 4686 L
+6157 4686 mt 6122 4690 L
+6122 4690 mt 6087 4692 L
+6087 4692 mt 6052 4692 L
+6052 4692 mt 6017 4691 L
+6017 4691 mt 5983 4688 L
+5983 4688 mt 5948 4683 L
+5948 4683 mt 5913 4677 L
+5913 4677 mt 5905 4675 L
+5905 4675 mt 5878 4669 L
+5878 4669 mt 5843 4659 L
+5843 4659 mt 5808 4649 L
+5808 4649 mt 5805 4648 L
+5805 4648 mt 5773 4637 L
+5773 4637 mt 5738 4625 L
+5738 4625 mt 5726 4620 L
+5726 4620 mt 5704 4610 L
+5704 4610 mt 5671 4592 L
+5671 4592 mt 5669 4591 L
+5669 4591 mt 5634 4565 L
+5634 4565 mt 5633 4565 L
+5633 4565 mt 5612 4537 L
+5612 4537 mt 5605 4510 L
+5605 4510 mt 5603 4482 L
+5603 4482 mt 5603 4455 L
+5603 4455 mt 5601 4427 L
+5601 4427 mt 5599 4416 L
+5599 4416 mt 5596 4400 L
+5596 4400 mt 5587 4372 L
+5587 4372 mt 5575 4345 L
+5575 4345 mt 5564 4322 L
+5564 4322 mt 5562 4317 L
+5562 4317 mt 5550 4290 L
+5550 4290 mt 5541 4262 L
+5541 4262 mt 5533 4235 L
+5533 4235 mt 5529 4216 L
+5529 4216 mt 5527 4207 L
+5527 4207 mt 5523 4180 L
+5523 4180 mt 5518 4152 L
+5518 4152 mt 5514 4125 L
+5514 4125 mt 5510 4097 L
+5510 4097 mt 5506 4070 L
+5506 4070 mt 5500 4042 L
+5500 4042 mt 5494 4019 L
+5494 4019 mt 5493 4015 L
+5493 4015 mt 5484 3987 L
+5484 3987 mt 5474 3960 L
+5474 3960 mt 5461 3932 L
+5461 3932 mt 5459 3930 L
+5459 3930 mt 5444 3905 L
+5444 3905 mt 5425 3879 L
+5425 3879 mt 5423 3877 L
+5423 3877 mt 5395 3850 L
+5395 3850 mt 5390 3844 L
+5390 3844 mt 5360 3822 L
+5360 3822 mt 5355 3818 L
+5355 3818 mt 5320 3798 L
+5320 3798 mt 5314 3795 L
+5314 3795 mt 5285 3781 L
+5285 3781 mt 5254 3767 L
+5254 3767 mt 5250 3765 L
+5250 3765 mt 5215 3750 L
+5215 3750 mt 5189 3740 L
+5189 3740 mt 5181 3736 L
+5181 3736 mt 5146 3721 L
+5146 3721 mt 5128 3712 L
+5128 3712 mt 5111 3703 L
+5111 3703 mt 5084 3685 L
+5084 3685 mt 5076 3679 L
+5076 3679 mt 5049 3657 L
+5049 3657 mt 5041 3651 L
+5041 3651 mt 5017 3630 L
+5017 3630 mt 5006 3621 L
+5006 3621 mt 4988 3602 L
+4988 3602 mt 4971 3585 L
+4971 3585 mt 4962 3575 L
+4962 3575 mt 4937 3547 L
+4937 3547 mt 4936 3547 L
+4936 3547 mt 4913 3519 L
+4913 3519 mt 4902 3505 L
+4902 3505 mt 4891 3492 L
+4891 3492 mt 4871 3464 L
+4871 3464 mt 4867 3459 L
+4867 3459 mt 4851 3437 L
+4851 3437 mt 4832 3410 L
+4832 3410 mt 4831 3409 L
+4831 3409 mt 4812 3382 L
+4812 3382 mt 4797 3362 L
+4797 3362 mt 4792 3354 L
+4792 3354 mt 4770 3327 L
+4770 3327 mt 4762 3318 L
+4762 3318 mt 4745 3299 L
+4745 3299 mt 4727 3281 L
+4727 3281 mt 4719 3272 L
+4719 3272 mt 4692 3246 L
+4692 3246 mt 4691 3244 L
+4691 3244 mt 4665 3217 L
+4665 3217 mt 4657 3209 L
+4657 3209 mt 4642 3189 L
+4642 3189 mt 4625 3162 L
+4625 3162 mt 4623 3158 L
+4623 3158 mt 4608 3134 L
+4608 3134 mt 4588 3107 L
+4588 3107 mt 4588 3107 L
+4588 3107 mt 4561 3079 L
+4561 3079 mt 4553 3072 L
+4553 3072 mt 4527 3052 L
+4527 3052 mt 4518 3045 L
+4518 3045 mt 4488 3024 L
+4488 3024 mt 4483 3021 L
+4483 3021 mt 4448 2998 L
+4448 2998 mt 4447 2997 L
+4447 2997 mt 4413 2973 L
+4413 2973 mt 4409 2969 L
+4409 2969 mt 4379 2946 L
+4379 2946 mt 4373 2942 L
+4373 2942 mt 4344 2920 L
+4344 2920 mt 4336 2914 L
+4336 2914 mt 4309 2896 L
+4309 2896 mt 4293 2887 L
+4293 2887 mt 4274 2875 L
+4274 2875 mt 4246 2859 L
+4246 2859 mt 4239 2855 L
+4239 2855 mt 4204 2836 L
+4204 2836 mt 4194 2832 L
+4194 2832 mt 4169 2820 L
+4169 2820 mt 4134 2806 L
+4134 2806 mt 4127 2804 L
+4127 2804 mt 4100 2796 L
+4100 2796 mt 4065 2792 L
+4065 2792 mt 4030 2801 L
+4030 2801 mt 4025 2804 L
+4025 2804 mt 3995 2829 L
+3995 2829 mt 3993 2832 L
+3993 2832 mt 3966 2859 L
+3966 2859 mt 3960 2865 L
+3960 2865 mt 3937 2887 L
+3937 2887 mt 3925 2897 L
+3925 2897 mt 3904 2914 L
+3904 2914 mt 3890 2925 L
+3890 2925 mt 3867 2942 L
+3867 2942 mt 3855 2950 L
+3855 2950 mt 3826 2969 L
+3826 2969 mt 3821 2973 L
+3821 2973 mt 3786 2994 L
+3786 2994 mt 3781 2997 L
+3781 2997 mt 3751 3015 L
+3751 3015 mt 3733 3024 L
+3733 3024 mt 3716 3034 L
+3716 3034 mt 3682 3052 L
+3682 3052 mt 3681 3053 L
+3681 3053 mt 3646 3072 L
+3646 3072 mt 3632 3079 L
+3632 3079 mt 3611 3091 L
+3611 3091 mt 3581 3107 L
+3581 3107 mt 3577 3109 L
+3577 3109 mt 3542 3129 L
+3542 3129 mt 3531 3134 L
+3531 3134 mt 3507 3151 L
+3507 3151 mt 3490 3162 L
+3490 3162 mt 3472 3186 L
+3472 3186 mt 3469 3189 L
+3469 3189 mt 3467 3217 L
+3467 3217 mt 3472 3226 L
+3472 3226 mt 3479 3244 L
+3479 3244 mt 3495 3272 L
+3495 3272 mt 3507 3294 L
+3507 3294 mt 3509 3299 L
+3509 3299 mt 3524 3327 L
+3524 3327 mt 3540 3354 L
+3540 3354 mt 3542 3357 L
+3542 3357 mt 3556 3382 L
+3556 3382 mt 3576 3409 L
+3576 3409 mt 3577 3410 L
+3577 3410 mt 3597 3437 L
+3597 3437 mt 3611 3455 L
+3611 3455 mt 3619 3464 L
+3619 3464 mt 3642 3492 L
+3642 3492 mt 3646 3497 L
+3646 3497 mt 3666 3519 L
+3666 3519 mt 3681 3536 L
+3681 3536 mt 3692 3547 L
+3692 3547 mt 3716 3573 L
+3716 3573 mt 3717 3575 L
+3717 3575 mt 3741 3602 L
+3741 3602 mt 3751 3615 L
+3751 3615 mt 3761 3630 L
+3761 3630 mt 3777 3657 L
+3777 3657 mt 3786 3675 L
+3786 3675 mt 3790 3685 L
+3790 3685 mt 3800 3712 L
+3800 3712 mt 3807 3740 L
+3807 3740 mt 3810 3767 L
+3810 3767 mt 3810 3795 L
+3810 3795 mt 3804 3822 L
+3804 3822 mt 3793 3850 L
+3793 3850 mt 3786 3864 L
+3786 3864 mt 3779 3877 L
+3779 3877 mt 3766 3905 L
+3766 3905 mt 3757 3932 L
+3757 3932 mt 3751 3955 L
+3751 3955 mt 3749 3960 L
+3749 3960 mt 3747 3987 L
+3747 3987 mt 3751 3995 L
+3751 3995 mt 3760 4015 L
+3760 4015 mt 3779 4042 L
+3779 4042 mt 3786 4053 L
+3786 4053 mt 3796 4070 L
+3796 4070 mt 3809 4097 L
+3809 4097 mt 3818 4125 L
+3818 4125 mt 3821 4140 L
+3821 4140 mt 3823 4152 L
+3823 4152 mt 3826 4180 L
+3826 4180 mt 3826 4207 L
+3826 4207 mt 3821 4235 L
+3821 4235 mt 3821 4236 L
+3821 4236 mt 3807 4262 L
+3807 4262 mt 3786 4286 L
+3786 4286 mt 3782 4290 L
+3782 4290 mt 3754 4317 L
+3754 4317 mt 3751 4328 L
+3751 4328 mt 3743 4345 L
+3743 4345 mt 3751 4359 L
+3751 4359 mt 3757 4372 L
+3757 4372 mt 3782 4400 L
+3782 4400 mt 3786 4405 L
+3786 4405 mt 3802 4427 L
+3802 4427 mt 3816 4455 L
+3816 4455 mt 3821 4466 L
+3821 4466 mt 3828 4482 L
+3828 4482 mt 3837 4510 L
+3837 4510 mt 3844 4537 L
+3844 4537 mt 3848 4565 L
+3848 4565 mt 3851 4592 L
+3851 4592 mt 3846 4620 L
+3846 4620 mt 3836 4648 L
+3836 4648 mt 3823 4675 L
+3823 4675 mt 3821 4679 L
+3821 4679 mt 3808 4703 L
+3808 4703 mt 3790 4730 L
+3790 4730 mt 3786 4737 L
+3786 4737 mt 3771 4758 L
+3771 4758 mt 3751 4784 L
+3751 4784 mt 3750 4785 L
+3750 4785 mt 3727 4813 L
+3727 4813 mt 3716 4825 L
+3716 4825 mt 3701 4840 L
+3701 4840 mt 3681 4860 L
+3681 4860 mt 3673 4868 L
+3673 4868 mt 3646 4892 L
+3646 4892 mt 3643 4895 L
+3643 4895 mt 3611 4921 L
+3611 4921 mt 3609 4923 L
+3609 4923 mt 3577 4947 L
+3577 4947 mt 3572 4950 L
+3572 4950 mt 3542 4971 L
+3542 4971 mt 3531 4978 L
+3531 4978 mt 3507 4993 L
+3507 4993 mt 3485 5005 L
+3485 5005 mt 3472 5012 L
+3472 5012 mt 3437 5031 L
+3437 5031 mt 3433 5033 L
+3433 5033 mt 3402 5048 L
+3402 5048 mt 3375 5060 L
+3375 5060 mt 3367 5064 L
+3367 5064 mt 3332 5079 L
+3332 5079 mt 3311 5088 L
+3311 5088 mt 3298 5093 L
+3298 5093 mt 3263 5107 L
+3263 5107 mt 3239 5115 L
+3239 5115 mt 3228 5119 L
+3228 5119 mt 3193 5131 L
+3193 5131 mt 3158 5142 L
+3158 5142 mt 3157 5143 L
+3157 5143 mt 3123 5153 L
+3123 5153 mt 3088 5162 L
+3088 5162 mt 3053 5170 L
+3053 5170 mt 3053 5170 L
+3053 5170 mt 3019 5178 L
+3019 5178 mt 2984 5184 L
+2984 5184 mt 2949 5190 L
+2949 5190 mt 2914 5196 L
+2914 5196 mt 2898 5198 L
+2898 5198 mt 2879 5200 L
+2879 5200 mt 2844 5204 L
+2844 5204 mt 2809 5208 L
+2809 5208 mt 2774 5210 L
+2774 5210 mt 2740 5213 L
+2740 5213 mt 2705 5214 L
+2705 5214 mt 2670 5215 L
+2670 5215 mt 2635 5215 L
+2635 5215 mt 2600 5215 L
+2600 5215 mt 2565 5214 L
+2565 5214 mt 2530 5213 L
+2530 5213 mt 2496 5211 L
+2496 5211 mt 2461 5209 L
+2461 5209 mt 2426 5207 L
+2426 5207 mt 2391 5203 L
+2391 5203 mt 2356 5200 L
+2356 5200 mt 2339 5198 L
+2339 5198 mt 2321 5196 L
+2321 5196 mt 2286 5191 L
+2286 5191 mt 2251 5186 L
+2251 5186 mt 2217 5181 L
+2217 5181 mt 2182 5175 L
+2182 5175 mt 2159 5170 L
+2159 5170 mt 2147 5168 L
+2147 5168 mt 2112 5161 L
+2112 5161 mt 2077 5153 L
+2077 5153 mt 2042 5144 L
+2042 5144 mt 2036 5143 L
+2036 5143 mt 2007 5135 L
+2007 5135 mt 1972 5126 L
+1972 5126 mt 1938 5116 L
+1938 5116 mt 1937 5115 L
+1937 5115 mt 1903 5105 L
+1903 5105 mt 1868 5094 L
+1868 5094 mt 1851 5088 L
+1851 5088 mt 1833 5082 L
+1833 5082 mt 1798 5069 L
+1798 5069 mt 1776 5060 L
+1776 5060 mt 1763 5055 L
+1763 5055 mt 1728 5041 L
+1728 5041 mt 1710 5033 L
+1710 5033 mt 1694 5025 L
+1694 5025 mt 1659 5008 L
+1659 5008 mt 1653 5005 L
+1653 5005 mt 1624 4990 L
+1624 4990 mt 1602 4978 L
+1602 4978 mt 1589 4970 L
+1589 4970 mt 1557 4950 L
+1557 4950 mt 1554 4948 L
+1554 4948 mt 1519 4925 L
+1519 4925 mt 1516 4923 L
+1516 4923 mt 1484 4899 L
+1484 4899 mt 1479 4895 L
+1479 4895 mt 1449 4871 L
+1449 4871 mt 1445 4868 L
+1445 4868 mt 1415 4840 L
+1415 4840 mt 1415 4840 L
+1415 4840 mt 1387 4813 L
+1387 4813 mt 1380 4805 L
+1380 4805 mt 1361 4785 L
+1361 4785 mt 1345 4767 L
+1345 4767 mt 1337 4758 L
+1337 4758 mt 1315 4730 L
+1315 4730 mt 1310 4724 L
+1310 4724 mt 1294 4703 L
+1294 4703 mt 1275 4676 L
+1275 4676 mt 1275 4675 L
+1275 4675 mt 1256 4648 L
+1256 4648 mt 1240 4622 L
+1240 4622 mt 1239 4620 L
+1239 4620 mt 1222 4592 L
+1222 4592 mt 1207 4565 L
+1207 4565 mt 1205 4563 L
+1205 4563 mt 1191 4537 L
+1191 4537 mt 1176 4510 L
+1176 4510 mt 1170 4498 L
+1170 4498 mt 1162 4482 L
+1162 4482 mt 1149 4455 L
+1149 4455 mt 1136 4427 L
+1136 4427 mt 1136 4427 L
+1136 4427 mt 1123 4400 L
+1123 4400 mt 1112 4372 L
+1112 4372 mt 1101 4345 L
+1101 4345 mt 1101 4344 L
+1101 4344 mt 1091 4317 L
+1091 4317 mt 1082 4290 L
+1082 4290 mt 1073 4262 L
+1073 4262 mt 1066 4237 L
+1066 4237 mt 1065 4235 L
+1065 4235 mt 1058 4207 L
+1058 4207 mt 1051 4180 L
+1051 4180 mt 1044 4152 L
+1044 4152 mt 1038 4125 L
+1038 4125 mt 1032 4097 L
+1032 4097 mt 1031 4093 L
+1031 4093 mt 1026 4070 L
+1026 4070 mt 1020 4042 L
+1020 4042 mt 1014 4015 L
+1014 4015 mt 1007 3987 L
+1007 3987 mt 1001 3960 L
+1001 3960 mt  996 3938 L
+ 996 3938 mt  995 3932 L
+ 995 3932 mt  988 3905 L
+ 988 3905 mt  980 3877 L
+ 980 3877 mt  972 3850 L
+ 972 3850 mt  962 3822 L
+ 962 3822 mt  961 3819 L
+ 961 3819 mt  952 3795 L
+ 952 3795 mt  940 3767 L
+ 940 3767 mt  926 3741 L
+ 926 3741 mt  926 3740 L
+ 926 3740 mt  910 3712 L
+ 910 3712 mt  892 3685 L
+ 892 3685 mt  892 3684 L
+ 892 3684 mt  871 3657 L
+ 871 3657 mt  857 3639 L
+ 857 3639 mt  848 3630 L
+ 848 3630 mt  823 3602 L
+ 823 3602 mt  822 3601 L
+ 822 3601 mt  795 3575 L
+ 795 3575 mt  787 3567 L
+ 787 3567 mt  765 3547 L
+ 765 3547 mt  752 3536 L
+ 752 3536 mt  733 3519 L
+ 733 3519 mt  717 3506 L
+ 717 3506 mt  701 3492 L
+ 701 3492 mt  682 3477 L
+ 682 3477 mt  667 3464 L
+ 667 3464 mt  647 3449 L
+ 647 3449 mt  633 3437 L
+ 633 3437 mt  613 3421 L
+ 613 3421 mt  598 3409 L
+ 598 3409 mt  578 3393 L
+ 578 3393 mt  563 3382 L
+ 563 3382 mt  543 3366 L
+ 543 3366 mt  528 3354 L
+ 528 3354 mt  508 3339 L
+ 508 3339 mt  492 3327 L
+ 492 3327 mt  473 3312 L
+ 473 3312 mt  456 3299 L
+ 456 3299 mt  438 3285 L
+ 438 3285 mt  421 3272 L
+ 421 3272 mt  403 3258 L
+ 403 3258 mt  386 3244 L
+ 386 3244 mt  368 3231 L
+ 368 3231 mt  351 3217 L
+ 351 3217 mt  334 3203 L
+ 334 3203 mt  318 3189 L
+ 318 3189 mt  299 3173 L
+ 299 3173 mt  285 3162 L
+ 285 3162 mt  264 3143 L
+ 264 3143 mt  254 3134 L
+ 254 3134 mt  229 3111 L
+ 229 3111 mt  225 3107 L
+ 225 3107 mt  196 3079 L
+ 196 3079 mt  194 3077 L
+ 194 3077 mt  169 3052 L
+ 169 3052 mt  159 3042 L
+ 159 3042 mt  142 3024 L
+ 142 3024 mt  124 3005 L
+ 124 3005 mt  117 2997 L
+ 117 2997 mt   93 2969 L
+  93 2969 mt   90 2965 L
+  90 2965 mt   69 2942 L
+  69 2942 mt   55 2924 L
+  55 2924 mt   46 2914 L
+  46 2914 mt   24 2887 L
+  24 2887 mt   20 2881 L
+  20 2881 mt    3 2859 L
+   3 2859 mt  -14 2835 L
+ -14 2835 mt  -17 2832 L
+ -17 2832 mt  -36 2804 L
+ -36 2804 mt  -49 2785 L
+ -49 2785 mt  -55 2777 L
+ -55 2777 mt  -72 2749 L
+ -72 2749 mt  -84 2729 L
+ -84 2729 mt  -88 2722 L
+ -88 2722 mt -103 2694 L
+-103 2694 mt -117 2667 L
+-117 2667 mt -119 2664 L
+-119 2664 mt -131 2639 L
+-131 2639 mt -143 2612 L
+-143 2612 mt -154 2584 L
+-154 2584 mt -154 2584 L
+-154 2584 mt -164 2557 L
+-164 2557 mt -173 2529 L
+-173 2529 mt -182 2502 L
+-182 2502 mt -188 2476 L
+-188 2476 mt -189 2474 L
+-189 2474 mt -196 2446 L
+-196 2446 mt -201 2419 L
+-201 2419 mt -206 2391 L
+-206 2391 mt -209 2364 L
+-209 2364 mt -212 2336 L
+-212 2336 mt -214 2309 L
+-214 2309 mt -215 2281 L
+-215 2281 mt -215 2254 L
+-215 2254 mt -214 2226 L
+-214 2226 mt -212 2199 L
+-212 2199 mt -209 2171 L
+-209 2171 mt -205 2144 L
+-205 2144 mt -201 2116 L
+-201 2116 mt -196 2089 L
+-196 2089 mt -190 2061 L
+-190 2061 mt -188 2057 L
+-188 2057 mt -183 2034 L
+-183 2034 mt -176 2006 L
+-176 2006 mt -168 1979 L
+-168 1979 mt -160 1951 L
+-160 1951 mt -154 1932 L
+-154 1932 mt -151 1924 L
+-151 1924 mt -142 1896 L
+-142 1896 mt -133 1869 L
+-133 1869 mt -123 1841 L
+-123 1841 mt -119 1829 L
+-119 1829 mt -114 1814 L
+-114 1814 mt -104 1786 L
+-104 1786 mt  -94 1759 L
+ -94 1759 mt  -84 1731 L
+ -84 1731 mt  -84 1730 L
+ -84 1730 mt  -74 1704 L
+ -74 1704 mt  -64 1676 L
+ -64 1676 mt  -54 1649 L
+ -54 1649 mt  -49 1636 L
+ -49 1636 mt  -43 1621 L
+ -43 1621 mt  -33 1594 L
+ -33 1594 mt  -22 1566 L
+ -22 1566 mt  -14 1545 L
+ -14 1545 mt  -12 1539 L
+ -12 1539 mt   -1 1511 L
+  -1 1511 mt    8 1484 L
+   8 1484 mt   18 1456 L
+  18 1456 mt   20 1453 L
+  20 1453 mt   29 1428 L
+  29 1428 mt   39 1401 L
+  39 1401 mt   49 1373 L
+  49 1373 mt   55 1357 L
+  55 1357 mt   59 1346 L
+  59 1346 mt   68 1318 L
+  68 1318 mt   78 1291 L
+  78 1291 mt   88 1263 L
+  88 1263 mt   90 1258 L
+  90 1258 mt   97 1236 L
+  97 1236 mt  107 1208 L
+ 107 1208 mt  117 1181 L
+ 117 1181 mt  124 1160 L
+ 124 1160 mt  127 1153 L
+ 127 1153 mt  137 1126 L
+ 137 1126 mt  148 1098 L
+ 148 1098 mt  159 1071 L
+ 159 1071 mt  159 1070 L
+ 159 1070 mt  171 1043 L
+ 171 1043 mt  183 1016 L
+ 183 1016 mt  194  992 L
+ 194  992 mt  196  988 L
+ 196  988 mt  209  961 L
+ 209  961 mt  223  933 L
+ 223  933 mt  229  923 L
+ 229  923 mt  238  906 L
+ 238  906 mt  253  878 L
+ 253  878 mt  264  860 L
+ 264  860 mt  269  851 L
+ 269  851 mt  285  823 L
+ 285  823 mt  299  801 L
+ 299  801 mt  302  796 L
+ 302  796 mt  319  768 L
+ 319  768 mt  334  746 L
+ 334  746 mt  337  741 L
+ 337  741 mt  355  713 L
+ 355  713 mt  368  694 L
+ 368  694 mt  374  686 L
+ 374  686 mt  394  658 L
+ 394  658 mt  403  646 L
+ 403  646 mt  414  631 L
+ 414  631 mt  435  603 L
+ 435  603 mt  438  599 L
+ 438  599 mt  456  576 L
+ 456  576 mt  473  555 L
+ 473  555 mt  478  548 L
+ 478  548 mt  501  521 L
+ 501  521 mt  508  512 L
+ 508  512 mt  523  493 L
+ 523  493 mt  543  470 L
+ 543  470 mt  547  466 L
+ 547  466 mt  571  438 L
+ 571  438 mt  578  430 L
+ 578  430 mt  596  411 L
+ 596  411 mt  613  392 L
+ 613  392 mt  622  383 L
+ 622  383 mt  647  357 L
+ 647  357 mt  649  355 L
+ 649  355 mt  678  328 L
+ 678  328 mt  682  324 L
+ 682  324 mt  709  300 L
+ 709  300 mt  717  293 L
+ 717  293 mt  742  273 L
+ 742  273 mt  752  265 L
+ 752  265 mt  778  245 L
+ 778  245 mt  787  239 L
+ 787  239 mt  816  218 L
+ 816  218 mt  822  214 L
+ 822  214 mt  857  191 L
+ 857  191 mt  857  190 L
+ 857  190 mt  892  168 L
+ 892  168 mt  901  163 L
+ 901  163 mt  926  147 L
+ 926  147 mt  947  135 L
+ 947  135 mt  961  127 L
+ 961  127 mt  996  108 L
+ 996  108 mt  997  108 L
+ 997  108 mt 1031   90 L
+1031   90 mt 1051   80 L
+1051   80 mt 1066   73 L
+1066   73 mt 1101   56 L
+1101   56 mt 1108   53 L
+1108   53 mt 1136   40 L
+1136   40 mt 1170   26 L
+1170   26 mt 1171   25 L
+1171   25 mt 1205   11 L
+1205   11 mt 1239   -1 L
+1239   -1 mt 1240   -2 L
+1240   -2 mt 1275  -15 L
+1275  -15 mt 1310  -28 L
+1310  -28 mt 1312  -29 L
+1312  -29 mt 1345  -41 L
+1345  -41 mt 1380  -53 L
+1380  -53 mt 1390  -56 L
+1390  -56 mt 1415  -65 L
+1415  -65 mt 1449  -76 L
+1449  -76 mt 1475  -84 L
+1475  -84 mt 1484  -87 L
+1484  -87 mt 1519  -97 L
+1519  -97 mt 1554 -108 L
+1554 -108 mt 1567 -111 L
+1567 -111 mt 1589 -118 L
+1589 -118 mt 1624 -127 L
+1624 -127 mt 1659 -137 L
+1659 -137 mt 1667 -139 L
+1667 -139 mt 1694 -146 L
+1694 -146 mt 1728 -155 L
+1728 -155 mt 1763 -164 L
+1763 -164 mt 1774 -166 L
+1774 -166 mt 1798 -172 L
+1798 -172 mt 1833 -181 L
+1833 -181 mt 1868 -190 L
+1868 -190 mt 1886 -194 L
+1886 -194 mt 1903 -198 L
+1903 -198 mt 1938 -206 L
+1938 -206 mt 1972 -215 L
+1972 -215 mt 2001 -221 L
+2001 -221 mt 2007 -223 L
+2007 -223 mt 2042 -231 L
+2042 -231 mt 2077 -239 L
+2077 -239 mt 2112 -247 L
+2112 -247 mt 2119 -249 L
+2119 -249 mt 2147 -255 L
+2147 -255 mt 2182 -263 L
+2182 -263 mt 2217 -272 L
+2217 -272 mt 2236 -276 L
+2236 -276 mt 2251 -280 L
+2251 -280 mt 2286 -288 L
+2286 -288 mt 2321 -297 L
+2321 -297 mt 2352 -304 L
+2352 -304 mt 2356 -305 L
+2356 -305 mt 2391 -313 L
+2391 -313 mt 2426 -321 L
+2426 -321 mt 2461 -329 L
+2461 -329 mt 2470 -331 L
+2470 -331 mt 2496 -337 L
+2496 -337 mt 2530 -345 L
+2530 -345 mt 2565 -353 L
+2565 -353 mt 2589 -359 L
+2589 -359 mt 2600 -362 L
+2600 -362 mt 2635 -370 L
+2635 -370 mt 2670 -378 L
+2670 -378 mt 2705 -386 L
+2705 -386 mt 2706 -386 L
+2706 -386 mt 2740 -394 L
+2740 -394 mt 2774 -402 L
+2774 -402 mt 2809 -410 L
+2809 -410 mt 2825 -414 L
+2825 -414 mt 2844 -418 L
+2844 -418 mt 2879 -427 L
+2879 -427 mt 2914 -435 L
+2914 -435 mt 2945 -441 L
+2945 -441 mt 2949 -442 L
+2949 -442 mt 2984 -450 L
+2984 -450 mt 3019 -457 L
+3019 -457 mt 3053 -465 L
+3053 -465 mt 3075 -469 L
+3075 -469 mt 3088 -472 L
+3088 -472 mt 3123 -478 L
+3123 -478 mt 3158 -485 L
+3158 -485 mt 3193 -491 L
+3193 -491 mt 3228 -496 L
+3228 -496 mt 3229 -496 L
+3229 -496 mt 3263 -502 L
+3263 -502 mt 3298 -507 L
+3298 -507 mt 3332 -511 L
+3332 -511 mt 3367 -515 L
+3367 -515 mt 3402 -519 L
+3402 -519 mt 3437 -523 L
+3437 -523 mt 3449 -524 L
+3449 -524 mt 3472 -526 L
+3472 -526 mt 3507 -529 L
+3507 -529 mt 3542 -532 L
+3542 -532 mt 3577 -534 L
+3577 -534 mt 3611 -535 L
+3611 -535 mt 3646 -537 L
+3646 -537 mt 3681 -537 L
+3681 -537 mt 3716 -538 L
+3716 -538 mt 3751 -537 L
+3751 -537 mt 3786 -537 L
+3786 -537 mt 3821 -535 L
+3821 -535 mt 3855 -534 L
+3855 -534 mt 3890 -532 L
+3890 -532 mt 3925 -530 L
+3925 -530 mt 3960 -527 L
+3960 -527 mt 3995 -524 L
+3995 -524 mt 3998 -524 L
+3998 -524 mt 4030 -521 L
+4030 -521 mt 4065 -518 L
+4065 -518 mt 4100 -515 L
+4100 -515 mt 4134 -511 L
+4134 -511 mt 4169 -507 L
+4169 -507 mt 4204 -503 L
+4204 -503 mt 4239 -499 L
+4239 -499 mt 4257 -496 L
+4257 -496 mt 4274 -494 L
+4274 -494 mt 4309 -489 L
+4309 -489 mt 4344 -484 L
+4344 -484 mt 4379 -479 L
+4379 -479 mt 4413 -473 L
+4413 -473 mt 4438 -469 L
+4438 -469 mt 4448 -467 L
+4448 -467 mt 4483 -461 L
+4483 -461 mt 4518 -454 L
+4518 -454 mt 4553 -447 L
+4553 -447 mt 4578 -441 L
+4578 -441 mt 4588 -439 L
+4588 -439 mt 4623 -432 L
+4623 -432 mt 4657 -423 L
+4657 -423 mt 4692 -415 L
+4692 -415 mt 4695 -414 L
+4695 -414 mt 4727 -406 L
+4727 -406 mt 4762 -396 L
+4762 -396 mt 4795 -386 L
+4795 -386 mt 4797 -386 L
+4797 -386 mt 4832 -376 L
+4832 -376 mt 4867 -365 L
+4867 -365 mt 4885 -359 L
+4885 -359 mt 4902 -354 L
+4902 -354 mt 4936 -342 L
+4936 -342 mt 4967 -331 L
+4967 -331 mt 4971 -330 L
+4971 -330 mt 5006 -318 L
+5006 -318 mt 5041 -306 L
+5041 -306 mt 5046 -304 L
+5046 -304 mt 5076 -293 L
+5076 -293 mt 5111 -280 L
+5111 -280 mt 5120 -276 L
+5120 -276 mt 5146 -267 L
+5146 -267 mt 5181 -253 L
+5181 -253 mt 5192 -249 L
+5192 -249 mt 5215 -240 L
+5215 -240 mt 5250 -226 L
+5250 -226 mt 5261 -221 L
+5261 -221 mt 5285 -211 L
+5285 -211 mt 5320 -196 L
+5320 -196 mt 5325 -194 L
+5325 -194 mt 5355 -181 L
+5355 -181 mt 5387 -166 L
+5387 -166 mt 5390 -165 L
+5390 -165 mt 5425 -149 L
+5425 -149 mt 5445 -139 L
+5445 -139 mt 5459 -132 L
+5459 -132 mt 5494 -114 L
+5494 -114 mt 5500 -111 L
+5500 -111 mt 5529  -97 L
+5529  -97 mt 5553  -84 L
+5553  -84 mt 5564  -78 L
+5564  -78 mt 5599  -59 L
+5599  -59 mt 5603  -56 L
+5603  -56 mt 5634  -39 L
+5634  -39 mt 5651  -29 L
+5651  -29 mt 5669  -18 L
+5669  -18 mt 5696   -1 L
+5696   -1 mt 5704    3 L
+5704    3 mt 5738   25 L
+5738   25 mt 5738   25 L
+5738   25 mt 5773   49 L
+5773   49 mt 5779   53 L
+5779   53 mt 5808   73 L
+5808   73 mt 5819   80 L
+5819   80 mt 5843   98 L
+5843   98 mt 5856  108 L
+5856  108 mt 5878  124 L
+5878  124 mt 5893  135 L
+5893  135 mt 5913  151 L
+5913  151 mt 5928  163 L
+5928  163 mt 5948  179 L
+5948  179 mt 5962  190 L
+5962  190 mt 5983  207 L
+5983  207 mt 5995  218 L
+5995  218 mt 6017  237 L
+6017  237 mt 6028  245 L
+6028  245 mt 6052  267 L
+6052  267 mt 6059  273 L
+6059  273 mt 6087  298 L
+6087  298 mt 6090  300 L
+6090  300 mt 6120  328 L
+6120  328 mt 6122  330 L
+6122  330 mt 6150  355 L
+6150  355 mt 6157  362 L
+6157  362 mt 6179  383 L
+6179  383 mt 6192  395 L
+6192  395 mt 6209  411 L
+6209  411 mt 6227  428 L
+6227  428 mt 6238  438 L
+6238  438 mt 6261  460 L
+6261  460 mt 6267  466 L
+6267  466 mt 6296  493 L
+6296  493 mt 6296  493 L
+6296  493 mt 6325  521 L
+6325  521 mt 6331  526 L
+6331  526 mt 6354  548 L
+6354  548 mt 6366  559 L
+6366  559 mt 6384  576 L
+6384  576 mt 6401  592 L
+6401  592 mt 6413  603 L
+6413  603 mt 6436  625 L
+6436  625 mt 6442  631 L
+6442  631 mt 6471  658 L
+6471  658 mt 6471  658 L
+6471  658 mt 6500  686 L
+6500  686 mt 6506  691 L
+6506  691 mt 6530  713 L
+6530  713 mt 6540  723 L
+6540  723 mt 6559  741 L
+6559  741 mt 6575  757 L
+6575  757 mt 6588  768 L
+6588  768 mt 6610  790 L
+6610  790 mt 6616  796 L
+6616  796 mt 6645  823 L
+6645  823 mt 6645  823 L
+6645  823 mt 6673  851 L
+6673  851 mt 6680  857 L
+6680  857 mt 6701  878 L
+6701  878 mt 6715  892 L
+6715  892 mt 6729  906 L
+6729  906 mt 6750  927 L
+6750  927 mt 6756  933 L
+6756  933 mt 6783  961 L
+6783  961 mt 6785  963 L
+6785  963 mt 6809  988 L
+6809  988 mt 6819  999 L
+6819  999 mt 6835 1016 L
+6835 1016 mt 6854 1036 L
+6854 1036 mt 6861 1043 L
+6861 1043 mt 6887 1071 L
+6887 1071 mt 6889 1073 L
+6889 1073 mt 6912 1098 L
+6912 1098 mt 6924 1112 L
+6924 1112 mt 6937 1126 L
+6937 1126 mt 6959 1151 L
+6959 1151 mt 6961 1153 L
+6961 1153 mt 6985 1181 L
+6985 1181 mt 6994 1191 L
+6994 1191 mt 7008 1208 L
+7008 1208 mt 7029 1232 L
+7029 1232 mt 7032 1236 L
+7032 1236 mt 7055 1263 L
+7055 1263 mt 7063 1274 L
+7063 1274 mt 7078 1291 L
+7078 1291 mt 7098 1316 L
+7098 1316 mt 7100 1318 L
+7100 1318 mt 7123 1346 L
+7123 1346 mt 7133 1359 L
+7133 1359 mt 7145 1373 L
+7145 1373 mt 7167 1401 L
+7167 1401 mt 7168 1402 L
+7168 1402 mt 7189 1428 L
+7189 1428 mt 7203 1447 L
+7203 1447 mt 7210 1456 L
+7210 1456 mt 7231 1484 L
+7231 1484 mt 7238 1494 L
+7238 1494 mt 7251 1511 L
+7251 1511 mt 7271 1539 L
+7271 1539 mt 7273 1541 L
+7273 1541 mt 7290 1566 L
+7290 1566 mt 7308 1592 L
+7308 1592 mt 7309 1594 L
+7309 1594 mt 7327 1621 L
+7327 1621 mt 7342 1646 L
+7342 1646 mt 7344 1649 L
+7344 1649 mt 7361 1676 L
+7361 1676 mt 7376 1704 L
+7376 1704 mt 7377 1706 L
+7377 1706 mt 7391 1731 L
+7391 1731 mt 7405 1759 L
+7405 1759 mt 7412 1773 L
+7412 1773 mt 7419 1786 L
+7419 1786 mt 7432 1814 L
+7432 1814 mt 7443 1841 L
+7443 1841 mt 7447 1851 L
+7447 1851 mt 7454 1869 L
+7454 1869 mt 7464 1896 L
+7464 1896 mt 7473 1924 L
+7473 1924 mt 7481 1951 L
+7481 1951 mt 7482 1954 L
+7377 1916 mt 7380 1924 L
+7380 1924 mt 7387 1951 L
+7387 1951 mt 7393 1979 L
+7393 1979 mt 7398 2006 L
+7398 2006 mt 7402 2034 L
+7402 2034 mt 7405 2061 L
+7405 2061 mt 7407 2089 L
+7407 2089 mt 7408 2116 L
+7408 2116 mt 7409 2144 L
+7409 2144 mt 7408 2171 L
+7408 2171 mt 7407 2199 L
+7407 2199 mt 7406 2226 L
+7406 2226 mt 7403 2254 L
+7403 2254 mt 7401 2281 L
+7401 2281 mt 7398 2309 L
+7398 2309 mt 7395 2336 L
+7395 2336 mt 7391 2364 L
+7391 2364 mt 7388 2391 L
+7388 2391 mt 7384 2419 L
+7384 2419 mt 7380 2446 L
+7380 2446 mt 7377 2460 L
+7377 2460 mt 7375 2474 L
+7375 2474 mt 7370 2502 L
+7370 2502 mt 7365 2529 L
+7365 2529 mt 7359 2557 L
+7359 2557 mt 7353 2584 L
+7353 2584 mt 7346 2612 L
+7346 2612 mt 7342 2625 L
+7342 2625 mt 7339 2639 L
+7339 2639 mt 7331 2667 L
+7331 2667 mt 7323 2694 L
+7323 2694 mt 7314 2722 L
+7314 2722 mt 7308 2740 L
+7308 2740 mt 7305 2749 L
+7305 2749 mt 7295 2777 L
+7295 2777 mt 7286 2804 L
+7286 2804 mt 7276 2832 L
+7276 2832 mt 7273 2841 L
+7273 2841 mt 7266 2859 L
+7266 2859 mt 7257 2887 L
+7257 2887 mt 7246 2914 L
+7246 2914 mt 7238 2936 L
+7238 2936 mt 7236 2942 L
+7236 2942 mt 7225 2969 L
+7225 2969 mt 7214 2997 L
+7214 2997 mt 7203 3024 L
+7203 3024 mt 7203 3025 L
+7203 3025 mt 7192 3052 L
+7192 3052 mt 7181 3079 L
+7181 3079 mt 7169 3107 L
+7169 3107 mt 7168 3110 L
+7168 3110 mt 7158 3134 L
+7158 3134 mt 7146 3162 L
+7146 3162 mt 7134 3189 L
+7134 3189 mt 7133 3192 L
+7133 3192 mt 7122 3217 L
+7122 3217 mt 7110 3244 L
+7110 3244 mt 7098 3271 L
+7098 3271 mt 7098 3272 L
+7098 3272 mt 7086 3299 L
+7086 3299 mt 7073 3327 L
+7073 3327 mt 7063 3348 L
+7063 3348 mt 7061 3354 L
+7061 3354 mt 7048 3382 L
+7048 3382 mt 7036 3409 L
+7036 3409 mt 7029 3425 L
+7029 3425 mt 7023 3437 L
+7023 3437 mt 7011 3464 L
+7011 3464 mt 6999 3492 L
+6999 3492 mt 6994 3504 L
+6994 3504 mt 6987 3519 L
+6987 3519 mt 6974 3547 L
+6974 3547 mt 6962 3575 L
+6962 3575 mt 6959 3581 L
+6959 3581 mt 6949 3602 L
+6949 3602 mt 6936 3630 L
+6936 3630 mt 6924 3654 L
+6924 3654 mt 6923 3657 L
+6923 3657 mt 6909 3685 L
+6909 3685 mt 6896 3712 L
+6896 3712 mt 6889 3725 L
+6889 3725 mt 6882 3740 L
+6882 3740 mt 6868 3767 L
+6868 3767 mt 6854 3795 L
+6854 3795 mt 6854 3795 L
+6854 3795 mt 6840 3822 L
+6840 3822 mt 6826 3850 L
+6826 3850 mt 6819 3862 L
+6819 3862 mt 6812 3877 L
+6812 3877 mt 6797 3905 L
+6797 3905 mt 6785 3927 L
+6785 3927 mt 6782 3932 L
+6782 3932 mt 6766 3960 L
+6766 3960 mt 6751 3987 L
+6751 3987 mt 6750 3989 L
+6750 3989 mt 6735 4015 L
+6735 4015 mt 6719 4042 L
+6719 4042 mt 6715 4050 L
+6715 4050 mt 6703 4070 L
+6703 4070 mt 6687 4097 L
+6687 4097 mt 6680 4109 L
+6680 4109 mt 6671 4125 L
+6671 4125 mt 6654 4152 L
+6654 4152 mt 6645 4167 L
+6645 4167 mt 6638 4180 L
+6638 4180 mt 6621 4207 L
+6621 4207 mt 6610 4226 L
+6610 4226 mt 6605 4235 L
+6605 4235 mt 6589 4262 L
+6589 4262 mt 6575 4286 L
+6575 4286 mt 6573 4290 L
+6573 4290 mt 6557 4317 L
+6557 4317 mt 6541 4345 L
+6541 4345 mt 6540 4346 L
+6540 4346 mt 6525 4372 L
+6525 4372 mt 6508 4400 L
+6508 4400 mt 6506 4403 L
+6506 4403 mt 6490 4427 L
+6490 4427 mt 6471 4455 L
+6471 4455 mt 6471 4456 L
+6471 4456 mt 6451 4482 L
+6451 4482 mt 6436 4500 L
+6436 4500 mt 6428 4510 L
+6428 4510 mt 6402 4537 L
+6402 4537 mt 6401 4538 L
+6401 4538 mt 6371 4565 L
+6371 4565 mt 6366 4569 L
+6366 4569 mt 6333 4592 L
+6333 4592 mt 6331 4594 L
+6331 4594 mt 6296 4614 L
+6296 4614 mt 6282 4620 L
+6282 4620 mt 6261 4629 L
+6261 4629 mt 6227 4640 L
+6227 4640 mt 6192 4648 L
+6192 4648 mt 6192 4648 L
+6192 4648 mt 6157 4653 L
+6157 4653 mt 6122 4657 L
+6122 4657 mt 6087 4658 L
+6087 4658 mt 6052 4658 L
+6052 4658 mt 6017 4655 L
+6017 4655 mt 5983 4650 L
+5983 4650 mt 5972 4648 L
+5972 4648 mt 5948 4642 L
+5948 4642 mt 5913 4632 L
+5913 4632 mt 5878 4622 L
+5878 4622 mt 5872 4620 L
+5872 4620 mt 5843 4606 L
+5843 4606 mt 5816 4592 L
+5816 4592 mt 5808 4587 L
+5808 4587 mt 5774 4565 L
+5774 4565 mt 5773 4565 L
+5773 4565 mt 5746 4537 L
+5746 4537 mt 5738 4521 L
+5738 4521 mt 5734 4510 L
+5734 4510 mt 5730 4482 L
+5730 4482 mt 5729 4455 L
+5729 4455 mt 5727 4427 L
+5727 4427 mt 5720 4400 L
+5720 4400 mt 5708 4372 L
+5708 4372 mt 5704 4364 L
+5704 4364 mt 5693 4345 L
+5693 4345 mt 5676 4317 L
+5676 4317 mt 5669 4305 L
+5669 4305 mt 5660 4290 L
+5660 4290 mt 5647 4262 L
+5647 4262 mt 5636 4235 L
+5636 4235 mt 5634 4228 L
+5634 4228 mt 5628 4207 L
+5628 4207 mt 5622 4180 L
+5622 4180 mt 5618 4152 L
+5618 4152 mt 5615 4125 L
+5615 4125 mt 5613 4097 L
+5613 4097 mt 5609 4070 L
+5609 4070 mt 5604 4042 L
+5604 4042 mt 5599 4025 L
+5599 4025 mt 5596 4015 L
+5596 4015 mt 5587 3987 L
+5587 3987 mt 5576 3960 L
+5576 3960 mt 5564 3935 L
+5564 3935 mt 5563 3932 L
+5563 3932 mt 5548 3905 L
+5548 3905 mt 5530 3877 L
+5530 3877 mt 5529 3876 L
+5529 3876 mt 5510 3850 L
+5510 3850 mt 5494 3831 L
+5494 3831 mt 5486 3822 L
+5486 3822 mt 5459 3795 L
+5459 3795 mt 5459 3795 L
+5459 3795 mt 5428 3767 L
+5428 3767 mt 5425 3764 L
+5425 3764 mt 5393 3740 L
+5393 3740 mt 5390 3737 L
+5390 3737 mt 5357 3712 L
+5357 3712 mt 5355 3710 L
+5355 3710 mt 5322 3685 L
+5322 3685 mt 5320 3683 L
+5320 3683 mt 5287 3657 L
+5287 3657 mt 5285 3656 L
+5285 3656 mt 5250 3631 L
+5250 3631 mt 5248 3630 L
+5248 3630 mt 5215 3607 L
+5215 3607 mt 5207 3602 L
+5207 3602 mt 5181 3585 L
+5181 3585 mt 5163 3575 L
+5163 3575 mt 5146 3563 L
+5146 3563 mt 5121 3547 L
+5121 3547 mt 5111 3540 L
+5111 3540 mt 5082 3519 L
+5082 3519 mt 5076 3514 L
+5076 3514 mt 5049 3492 L
+5049 3492 mt 5041 3485 L
+5041 3485 mt 5021 3464 L
+5021 3464 mt 5006 3450 L
+5006 3450 mt 4993 3437 L
+4993 3437 mt 4971 3416 L
+4971 3416 mt 4965 3409 L
+4965 3409 mt 4936 3384 L
+4936 3384 mt 4934 3382 L
+4934 3382 mt 4905 3354 L
+4905 3354 mt 4902 3351 L
+4902 3351 mt 4878 3327 L
+4878 3327 mt 4867 3315 L
+4867 3315 mt 4852 3299 L
+4852 3299 mt 4832 3278 L
+4832 3278 mt 4826 3272 L
+4826 3272 mt 4798 3244 L
+4798 3244 mt 4797 3243 L
+4797 3243 mt 4770 3217 L
+4770 3217 mt 4762 3210 L
+4762 3210 mt 4742 3189 L
+4742 3189 mt 4727 3173 L
+4727 3173 mt 4718 3162 L
+4718 3162 mt 4701 3134 L
+4701 3134 mt 4692 3120 L
+4692 3120 mt 4686 3107 L
+4686 3107 mt 4669 3079 L
+4669 3079 mt 4657 3065 L
+4657 3065 mt 4646 3052 L
+4646 3052 mt 4623 3030 L
+4623 3030 mt 4615 3024 L
+4615 3024 mt 4588 3004 L
+4588 3004 mt 4577 2997 L
+4577 2997 mt 4553 2981 L
+4553 2981 mt 4534 2969 L
+4534 2969 mt 4518 2959 L
+4518 2959 mt 4492 2942 L
+4492 2942 mt 4483 2936 L
+4483 2936 mt 4453 2914 L
+4453 2914 mt 4448 2911 L
+4448 2911 mt 4416 2887 L
+4416 2887 mt 4413 2885 L
+4413 2885 mt 4379 2860 L
+4379 2860 mt 4378 2859 L
+4378 2859 mt 4344 2836 L
+4344 2836 mt 4336 2832 L
+4336 2832 mt 4309 2815 L
+4309 2815 mt 4291 2804 L
+4291 2804 mt 4274 2793 L
+4274 2793 mt 4246 2777 L
+4246 2777 mt 4239 2772 L
+4239 2772 mt 4204 2750 L
+4204 2750 mt 4202 2749 L
+4202 2749 mt 4169 2727 L
+4169 2727 mt 4161 2722 L
+4161 2722 mt 4134 2703 L
+4134 2703 mt 4119 2694 L
+4119 2694 mt 4100 2681 L
+4100 2681 mt 4071 2667 L
+4071 2667 mt 4065 2663 L
+4065 2663 mt 4030 2650 L
+4030 2650 mt 3995 2644 L
+3995 2644 mt 3960 2645 L
+3960 2645 mt 3925 2658 L
+3925 2658 mt 3911 2667 L
+3911 2667 mt 3890 2680 L
+3890 2680 mt 3873 2694 L
+3873 2694 mt 3855 2708 L
+3855 2708 mt 3838 2722 L
+3838 2722 mt 3821 2735 L
+3821 2735 mt 3799 2749 L
+3799 2749 mt 3786 2759 L
+3786 2759 mt 3755 2777 L
+3755 2777 mt 3751 2779 L
+3751 2779 mt 3716 2797 L
+3716 2797 mt 3700 2804 L
+3700 2804 mt 3681 2813 L
+3681 2813 mt 3646 2827 L
+3646 2827 mt 3632 2832 L
+3632 2832 mt 3611 2839 L
+3611 2839 mt 3577 2851 L
+3577 2851 mt 3550 2859 L
+3550 2859 mt 3542 2862 L
+3542 2862 mt 3507 2874 L
+3507 2874 mt 3472 2885 L
+3472 2885 mt 3468 2887 L
+3468 2887 mt 3437 2898 L
+3437 2898 mt 3402 2912 L
+3402 2912 mt 3396 2914 L
+3396 2914 mt 3367 2926 L
+3367 2926 mt 3332 2940 L
+3332 2940 mt 3328 2942 L
+3328 2942 mt 3298 2955 L
+3298 2955 mt 3267 2969 L
+3267 2969 mt 3263 2972 L
+3263 2972 mt 3228 2989 L
+3228 2989 mt 3211 2997 L
+3211 2997 mt 3193 3008 L
+3193 3008 mt 3167 3024 L
+3167 3024 mt 3158 3033 L
+3158 3033 mt 3143 3052 L
+3143 3052 mt 3132 3079 L
+3132 3079 mt 3144 3107 L
+3144 3107 mt 3158 3122 L
+3158 3122 mt 3169 3134 L
+3169 3134 mt 3193 3155 L
+3193 3155 mt 3200 3162 L
+3200 3162 mt 3228 3184 L
+3228 3184 mt 3233 3189 L
+3233 3189 mt 3263 3212 L
+3263 3212 mt 3268 3217 L
+3268 3217 mt 3298 3240 L
+3298 3240 mt 3303 3244 L
+3303 3244 mt 3332 3266 L
+3332 3266 mt 3340 3272 L
+3340 3272 mt 3367 3292 L
+3367 3292 mt 3378 3299 L
+3378 3299 mt 3402 3318 L
+3402 3318 mt 3412 3327 L
+3412 3327 mt 3437 3349 L
+3437 3349 mt 3442 3354 L
+3442 3354 mt 3468 3382 L
+3468 3382 mt 3472 3386 L
+3472 3386 mt 3494 3409 L
+3494 3409 mt 3507 3424 L
+3507 3424 mt 3519 3437 L
+3519 3437 mt 3542 3462 L
+3542 3462 mt 3544 3464 L
+3544 3464 mt 3569 3492 L
+3569 3492 mt 3577 3501 L
+3577 3501 mt 3593 3519 L
+3593 3519 mt 3611 3542 L
+3611 3542 mt 3616 3547 L
+3616 3547 mt 3640 3575 L
+3640 3575 mt 3646 3582 L
+3646 3582 mt 3665 3602 L
+3665 3602 mt 3681 3621 L
+3681 3621 mt 3689 3630 L
+3689 3630 mt 3709 3657 L
+3709 3657 mt 3716 3670 L
+3716 3670 mt 3724 3685 L
+3724 3685 mt 3733 3712 L
+3733 3712 mt 3738 3740 L
+3738 3740 mt 3737 3767 L
+3737 3767 mt 3730 3795 L
+3730 3795 mt 3717 3822 L
+3717 3822 mt 3716 3824 L
+3716 3824 mt 3697 3850 L
+3697 3850 mt 3681 3872 L
+3681 3872 mt 3677 3877 L
+3677 3877 mt 3657 3905 L
+3657 3905 mt 3646 3922 L
+3646 3922 mt 3640 3932 L
+3640 3932 mt 3629 3960 L
+3629 3960 mt 3635 3987 L
+3635 3987 mt 3646 3999 L
+3646 3999 mt 3661 4015 L
+3661 4015 mt 3681 4031 L
+3681 4031 mt 3694 4042 L
+3694 4042 mt 3716 4064 L
+3716 4064 mt 3721 4070 L
+3721 4070 mt 3740 4097 L
+3740 4097 mt 3751 4122 L
+3751 4122 mt 3752 4125 L
+3752 4125 mt 3760 4152 L
+3760 4152 mt 3765 4180 L
+3765 4180 mt 3763 4207 L
+3763 4207 mt 3754 4235 L
+3754 4235 mt 3751 4238 L
+3751 4238 mt 3730 4262 L
+3730 4262 mt 3716 4273 L
+3716 4273 mt 3690 4290 L
+3690 4290 mt 3681 4296 L
+3681 4296 mt 3650 4317 L
+3650 4317 mt 3646 4326 L
+3646 4326 mt 3636 4345 L
+3636 4345 mt 3646 4359 L
+3646 4359 mt 3654 4372 L
+3654 4372 mt 3681 4392 L
+3681 4392 mt 3691 4400 L
+3691 4400 mt 3716 4422 L
+3716 4422 mt 3722 4427 L
+3722 4427 mt 3743 4455 L
+3743 4455 mt 3751 4471 L
+3751 4471 mt 3757 4482 L
+3757 4482 mt 3767 4510 L
+3767 4510 mt 3774 4537 L
+3774 4537 mt 3777 4565 L
+3777 4565 mt 3779 4592 L
+3779 4592 mt 3775 4620 L
+3775 4620 mt 3764 4648 L
+3764 4648 mt 3751 4673 L
+3751 4673 mt 3750 4675 L
+3750 4675 mt 3732 4703 L
+3732 4703 mt 3716 4725 L
+3716 4725 mt 3713 4730 L
+3713 4730 mt 3690 4758 L
+3690 4758 mt 3681 4768 L
+3681 4768 mt 3666 4785 L
+3666 4785 mt 3646 4805 L
+3646 4805 mt 3638 4813 L
+3638 4813 mt 3611 4837 L
+3611 4837 mt 3608 4840 L
+3608 4840 mt 3577 4865 L
+3577 4865 mt 3574 4868 L
+3574 4868 mt 3542 4891 L
+3542 4891 mt 3536 4895 L
+3536 4895 mt 3507 4915 L
+3507 4915 mt 3494 4923 L
+3494 4923 mt 3472 4936 L
+3472 4936 mt 3447 4950 L
+3447 4950 mt 3437 4956 L
+3437 4956 mt 3402 4974 L
+3402 4974 mt 3394 4978 L
+3394 4978 mt 3367 4991 L
+3367 4991 mt 3335 5005 L
+3335 5005 mt 3332 5006 L
+3332 5006 mt 3298 5021 L
+3298 5021 mt 3269 5033 L
+3269 5033 mt 3263 5035 L
+3263 5035 mt 3228 5048 L
+3228 5048 mt 3195 5060 L
+3195 5060 mt 3193 5061 L
+3193 5061 mt 3158 5073 L
+3158 5073 mt 3123 5084 L
+3123 5084 mt 3109 5088 L
+3109 5088 mt 3088 5094 L
+3088 5094 mt 3053 5103 L
+3053 5103 mt 3019 5111 L
+3019 5111 mt 3001 5115 L
+3001 5115 mt 2984 5119 L
+2984 5119 mt 2949 5126 L
+2949 5126 mt 2914 5132 L
+2914 5132 mt 2879 5137 L
+2879 5137 mt 2844 5142 L
+2844 5142 mt 2837 5143 L
+2837 5143 mt 2809 5146 L
+2809 5146 mt 2774 5150 L
+2774 5150 mt 2740 5153 L
+2740 5153 mt 2705 5155 L
+2705 5155 mt 2670 5157 L
+2670 5157 mt 2635 5158 L
+2635 5158 mt 2600 5159 L
+2600 5159 mt 2565 5159 L
+2565 5159 mt 2530 5159 L
+2530 5159 mt 2496 5158 L
+2496 5158 mt 2461 5157 L
+2461 5157 mt 2426 5155 L
+2426 5155 mt 2391 5153 L
+2391 5153 mt 2356 5150 L
+2356 5150 mt 2321 5147 L
+2321 5147 mt 2287 5143 L
+2287 5143 mt 2286 5143 L
+2286 5143 mt 2251 5138 L
+2251 5138 mt 2217 5133 L
+2217 5133 mt 2182 5128 L
+2182 5128 mt 2147 5122 L
+2147 5122 mt 2114 5115 L
+2114 5115 mt 2112 5115 L
+2112 5115 mt 2077 5107 L
+2077 5107 mt 2042 5099 L
+2042 5099 mt 2007 5091 L
+2007 5091 mt 1996 5088 L
+1996 5088 mt 1972 5081 L
+1972 5081 mt 1938 5072 L
+1938 5072 mt 1903 5061 L
+1903 5061 mt 1901 5060 L
+1901 5060 mt 1868 5050 L
+1868 5050 mt 1833 5038 L
+1833 5038 mt 1819 5033 L
+1819 5033 mt 1798 5025 L
+1798 5025 mt 1763 5011 L
+1763 5011 mt 1749 5005 L
+1749 5005 mt 1728 4997 L
+1728 4997 mt 1694 4980 L
+1694 4980 mt 1688 4978 L
+1688 4978 mt 1659 4963 L
+1659 4963 mt 1636 4950 L
+1636 4950 mt 1624 4943 L
+1624 4943 mt 1589 4923 L
+1589 4923 mt 1589 4922 L
+1589 4922 mt 1554 4899 L
+1554 4899 mt 1548 4895 L
+1548 4895 mt 1519 4874 L
+1519 4874 mt 1511 4868 L
+1511 4868 mt 1484 4846 L
+1484 4846 mt 1477 4840 L
+1477 4840 mt 1449 4816 L
+1449 4816 mt 1446 4813 L
+1446 4813 mt 1418 4785 L
+1418 4785 mt 1415 4781 L
+1415 4781 mt 1393 4758 L
+1393 4758 mt 1380 4742 L
+1380 4742 mt 1369 4730 L
+1369 4730 mt 1348 4703 L
+1348 4703 mt 1345 4698 L
+1345 4698 mt 1328 4675 L
+1328 4675 mt 1310 4649 L
+1310 4649 mt 1309 4648 L
+1309 4648 mt 1291 4620 L
+1291 4620 mt 1275 4594 L
+1275 4594 mt 1274 4592 L
+1274 4592 mt 1258 4565 L
+1258 4565 mt 1243 4537 L
+1243 4537 mt 1240 4532 L
+1240 4532 mt 1228 4510 L
+1228 4510 mt 1214 4482 L
+1214 4482 mt 1205 4465 L
+1205 4465 mt 1200 4455 L
+1200 4455 mt 1188 4427 L
+1188 4427 mt 1176 4400 L
+1176 4400 mt 1170 4387 L
+1170 4387 mt 1164 4372 L
+1164 4372 mt 1154 4345 L
+1154 4345 mt 1144 4317 L
+1144 4317 mt 1136 4290 L
+1136 4290 mt 1136 4290 L
+1136 4290 mt 1127 4262 L
+1127 4262 mt 1120 4235 L
+1120 4235 mt 1114 4207 L
+1114 4207 mt 1108 4180 L
+1108 4180 mt 1102 4152 L
+1102 4152 mt 1101 4145 L
+1101 4145 mt 1097 4125 L
+1097 4125 mt 1092 4097 L
+1092 4097 mt 1087 4070 L
+1087 4070 mt 1083 4042 L
+1083 4042 mt 1078 4015 L
+1078 4015 mt 1074 3987 L
+1074 3987 mt 1069 3960 L
+1069 3960 mt 1066 3939 L
+1066 3939 mt 1065 3932 L
+1065 3932 mt 1060 3905 L
+1060 3905 mt 1055 3877 L
+1055 3877 mt 1048 3850 L
+1048 3850 mt 1041 3822 L
+1041 3822 mt 1033 3795 L
+1033 3795 mt 1031 3788 L
+1031 3788 mt 1024 3767 L
+1024 3767 mt 1012 3740 L
+1012 3740 mt  999 3712 L
+ 999 3712 mt  996 3706 L
+ 996 3706 mt  984 3685 L
+ 984 3685 mt  967 3657 L
+ 967 3657 mt  961 3650 L
+ 961 3650 mt  947 3630 L
+ 947 3630 mt  926 3605 L
+ 926 3605 mt  924 3602 L
+ 924 3602 mt  899 3575 L
+ 899 3575 mt  892 3568 L
+ 892 3568 mt  870 3547 L
+ 870 3547 mt  857 3535 L
+ 857 3535 mt  840 3519 L
+ 840 3519 mt  822 3504 L
+ 822 3504 mt  807 3492 L
+ 807 3492 mt  787 3476 L
+ 787 3476 mt  773 3464 L
+ 773 3464 mt  752 3448 L
+ 752 3448 mt  738 3437 L
+ 738 3437 mt  717 3421 L
+ 717 3421 mt  703 3409 L
+ 703 3409 mt  682 3394 L
+ 682 3394 mt  667 3382 L
+ 667 3382 mt  647 3367 L
+ 647 3367 mt  631 3354 L
+ 631 3354 mt  613 3341 L
+ 613 3341 mt  595 3327 L
+ 595 3327 mt  578 3314 L
+ 578 3314 mt  559 3299 L
+ 559 3299 mt  543 3287 L
+ 543 3287 mt  523 3272 L
+ 523 3272 mt  508 3260 L
+ 508 3260 mt  488 3244 L
+ 488 3244 mt  473 3233 L
+ 473 3233 mt  453 3217 L
+ 453 3217 mt  438 3205 L
+ 438 3205 mt  418 3189 L
+ 418 3189 mt  403 3177 L
+ 403 3177 mt  385 3162 L
+ 385 3162 mt  368 3147 L
+ 368 3147 mt  353 3134 L
+ 353 3134 mt  334 3116 L
+ 334 3116 mt  323 3107 L
+ 323 3107 mt  299 3084 L
+ 299 3084 mt  294 3079 L
+ 294 3079 mt  266 3052 L
+ 266 3052 mt  264 3050 L
+ 264 3050 mt  239 3024 L
+ 239 3024 mt  229 3013 L
+ 229 3013 mt  214 2997 L
+ 214 2997 mt  194 2975 L
+ 194 2975 mt  189 2969 L
+ 189 2969 mt  166 2942 L
+ 166 2942 mt  159 2934 L
+ 159 2934 mt  143 2914 L
+ 143 2914 mt  124 2890 L
+ 124 2890 mt  122 2887 L
+ 122 2887 mt  101 2859 L
+ 101 2859 mt   90 2843 L
+  90 2843 mt   81 2832 L
+  81 2832 mt   62 2804 L
+  62 2804 mt   55 2793 L
+  55 2793 mt   44 2777 L
+  44 2777 mt   27 2749 L
+  27 2749 mt   20 2737 L
+  20 2737 mt   11 2722 L
+  11 2722 mt   -3 2694 L
+  -3 2694 mt  -14 2672 L
+ -14 2672 mt  -17 2667 L
+ -17 2667 mt  -30 2639 L
+ -30 2639 mt  -42 2612 L
+ -42 2612 mt  -49 2593 L
+ -49 2593 mt  -53 2584 L
+ -53 2584 mt  -62 2557 L
+ -62 2557 mt  -71 2529 L
+ -71 2529 mt  -79 2502 L
+ -79 2502 mt  -84 2480 L
+ -84 2480 mt  -85 2474 L
+ -85 2474 mt  -91 2446 L
+ -91 2446 mt  -96 2419 L
+ -96 2419 mt -100 2391 L
+-100 2391 mt -104 2364 L
+-104 2364 mt -106 2336 L
+-106 2336 mt -107 2309 L
+-107 2309 mt -108 2281 L
+-108 2281 mt -108 2254 L
+-108 2254 mt -107 2226 L
+-107 2226 mt -106 2199 L
+-106 2199 mt -104 2171 L
+-104 2171 mt -101 2144 L
+-101 2144 mt  -97 2116 L
+ -97 2116 mt  -93 2089 L
+ -93 2089 mt  -88 2061 L
+ -88 2061 mt  -84 2038 L
+ -84 2038 mt  -83 2034 L
+ -83 2034 mt  -77 2006 L
+ -77 2006 mt  -71 1979 L
+ -71 1979 mt  -64 1951 L
+ -64 1951 mt  -56 1924 L
+ -56 1924 mt  -49 1900 L
+ -49 1900 mt  -48 1896 L
+ -48 1896 mt  -40 1869 L
+ -40 1869 mt  -31 1841 L
+ -31 1841 mt  -22 1814 L
+ -22 1814 mt  -14 1789 L
+ -14 1789 mt  -13 1786 L
+ -13 1786 mt   -4 1759 L
+  -4 1759 mt    3 1731 L
+   3 1731 mt   12 1704 L
+  12 1704 mt   20 1682 L
+  20 1682 mt   22 1676 L
+  22 1676 mt   31 1649 L
+  31 1649 mt   40 1621 L
+  40 1621 mt   49 1594 L
+  49 1594 mt   55 1576 L
+  55 1576 mt   58 1566 L
+  58 1566 mt   67 1539 L
+  67 1539 mt   75 1511 L
+  75 1511 mt   84 1484 L
+  84 1484 mt   90 1467 L
+  90 1467 mt   93 1456 L
+  93 1456 mt  102 1428 L
+ 102 1428 mt  110 1401 L
+ 110 1401 mt  119 1373 L
+ 119 1373 mt  124 1356 L
+ 124 1356 mt  127 1346 L
+ 127 1346 mt  136 1318 L
+ 136 1318 mt  144 1291 L
+ 144 1291 mt  153 1263 L
+ 153 1263 mt  159 1244 L
+ 159 1244 mt  162 1236 L
+ 162 1236 mt  171 1208 L
+ 171 1208 mt  180 1181 L
+ 180 1181 mt  189 1153 L
+ 189 1153 mt  194 1140 L
+ 194 1140 mt  199 1126 L
+ 199 1126 mt  209 1098 L
+ 209 1098 mt  220 1071 L
+ 220 1071 mt  229 1049 L
+ 229 1049 mt  231 1043 L
+ 231 1043 mt  243 1016 L
+ 243 1016 mt  256  988 L
+ 256  988 mt  264  971 L
+ 264  971 mt  269  961 L
+ 269  961 mt  282  933 L
+ 282  933 mt  297  906 L
+ 297  906 mt  299  902 L
+ 299  902 mt  311  878 L
+ 311  878 mt  326  851 L
+ 326  851 mt  334  838 L
+ 334  838 mt  342  823 L
+ 342  823 mt  358  796 L
+ 358  796 mt  368  779 L
+ 368  779 mt  375  768 L
+ 375  768 mt  393  741 L
+ 393  741 mt  403  724 L
+ 403  724 mt  411  713 L
+ 411  713 mt  429  686 L
+ 429  686 mt  438  673 L
+ 438  673 mt  449  658 L
+ 449  658 mt  469  631 L
+ 469  631 mt  473  625 L
+ 473  625 mt  489  603 L
+ 489  603 mt  508  579 L
+ 508  579 mt  511  576 L
+ 511  576 mt  532  548 L
+ 532  548 mt  543  535 L
+ 543  535 mt  555  521 L
+ 555  521 mt  577  493 L
+ 577  493 mt  578  493 L
+ 578  493 mt  601  466 L
+ 601  466 mt  613  452 L
+ 613  452 mt  625  438 L
+ 625  438 mt  647  414 L
+ 647  414 mt  651  411 L
+ 651  411 mt  678  383 L
+ 678  383 mt  682  378 L
+ 682  378 mt  706  355 L
+ 706  355 mt  717  345 L
+ 717  345 mt  736  328 L
+ 736  328 mt  752  315 L
+ 752  315 mt  769  300 L
+ 769  300 mt  787  286 L
+ 787  286 mt  804  273 L
+ 804  273 mt  822  260 L
+ 822  260 mt  842  245 L
+ 842  245 mt  857  235 L
+ 857  235 mt  883  218 L
+ 883  218 mt  892  212 L
+ 892  212 mt  926  190 L
+ 926  190 mt  926  190 L
+ 926  190 mt  961  170 L
+ 961  170 mt  973  163 L
+ 973  163 mt  996  150 L
+ 996  150 mt 1023  135 L
+1023  135 mt 1031  131 L
+1031  131 mt 1066  114 L
+1066  114 mt 1078  108 L
+1078  108 mt 1101   97 L
+1101   97 mt 1136   81 L
+1136   81 mt 1138   80 L
+1138   80 mt 1170   66 L
+1170   66 mt 1203   53 L
+1203   53 mt 1205   52 L
+1205   52 mt 1240   38 L
+1240   38 mt 1275   25 L
+1275   25 mt 1275   25 L
+1275   25 mt 1310   12 L
+1310   12 mt 1345    0 L
+1345    0 mt 1353   -1 L
+1353   -1 mt 1380  -10 L
+1380  -10 mt 1415  -21 L
+1415  -21 mt 1438  -29 L
+1438  -29 mt 1449  -32 L
+1449  -32 mt 1484  -43 L
+1484  -43 mt 1519  -53 L
+1519  -53 mt 1532  -56 L
+1532  -56 mt 1554  -63 L
+1554  -63 mt 1589  -72 L
+1589  -72 mt 1624  -81 L
+1624  -81 mt 1634  -84 L
+1634  -84 mt 1659  -90 L
+1659  -90 mt 1694  -99 L
+1694  -99 mt 1728 -107 L
+1728 -107 mt 1746 -111 L
+1746 -111 mt 1763 -115 L
+1763 -115 mt 1798 -124 L
+1798 -124 mt 1833 -132 L
+1833 -132 mt 1865 -139 L
+1865 -139 mt 1868 -139 L
+1868 -139 mt 1903 -147 L
+1903 -147 mt 1938 -155 L
+1938 -155 mt 1972 -163 L
+1972 -163 mt 1990 -166 L
+1990 -166 mt 2007 -170 L
+2007 -170 mt 2042 -178 L
+2042 -178 mt 2077 -185 L
+2077 -185 mt 2112 -192 L
+2112 -192 mt 2120 -194 L
+2120 -194 mt 2147 -199 L
+2147 -199 mt 2182 -207 L
+2182 -207 mt 2217 -214 L
+2217 -214 mt 2249 -221 L
+2249 -221 mt 2251 -222 L
+2251 -222 mt 2286 -230 L
+2286 -230 mt 2321 -237 L
+2321 -237 mt 2356 -245 L
+2356 -245 mt 2374 -249 L
+2374 -249 mt 2391 -253 L
+2391 -253 mt 2426 -260 L
+2426 -260 mt 2461 -268 L
+2461 -268 mt 2496 -275 L
+2496 -275 mt 2502 -276 L
+2502 -276 mt 2530 -282 L
+2530 -282 mt 2565 -290 L
+2565 -290 mt 2600 -297 L
+2600 -297 mt 2634 -304 L
+2634 -304 mt 2635 -304 L
+2635 -304 mt 2670 -311 L
+2670 -311 mt 2705 -319 L
+2705 -319 mt 2740 -326 L
+2740 -326 mt 2767 -331 L
+2767 -331 mt 2774 -333 L
+2774 -333 mt 2809 -340 L
+2809 -340 mt 2844 -347 L
+2844 -347 mt 2879 -354 L
+2879 -354 mt 2903 -359 L
+2903 -359 mt 2914 -361 L
+2914 -361 mt 2949 -368 L
+2949 -368 mt 2984 -375 L
+2984 -375 mt 3019 -382 L
+3019 -382 mt 3042 -386 L
+3042 -386 mt 3053 -389 L
+3053 -389 mt 3088 -395 L
+3088 -395 mt 3123 -401 L
+3123 -401 mt 3158 -407 L
+3158 -407 mt 3193 -413 L
+3193 -413 mt 3198 -414 L
+3198 -414 mt 3228 -419 L
+3228 -419 mt 3263 -424 L
+3263 -424 mt 3298 -429 L
+3298 -429 mt 3332 -433 L
+3332 -433 mt 3367 -437 L
+3367 -437 mt 3402 -441 L
+3402 -441 mt 3405 -441 L
+3405 -441 mt 3437 -445 L
+3437 -445 mt 3472 -448 L
+3472 -448 mt 3507 -451 L
+3507 -451 mt 3542 -454 L
+3542 -454 mt 3577 -457 L
+3577 -457 mt 3611 -459 L
+3611 -459 mt 3646 -461 L
+3646 -461 mt 3681 -462 L
+3681 -462 mt 3716 -463 L
+3716 -463 mt 3751 -464 L
+3751 -464 mt 3786 -464 L
+3786 -464 mt 3821 -463 L
+3821 -463 mt 3855 -462 L
+3855 -462 mt 3890 -461 L
+3890 -461 mt 3925 -460 L
+3925 -460 mt 3960 -459 L
+3960 -459 mt 3995 -457 L
+3995 -457 mt 4030 -455 L
+4030 -455 mt 4065 -453 L
+4065 -453 mt 4100 -450 L
+4100 -450 mt 4134 -448 L
+4134 -448 mt 4169 -445 L
+4169 -445 mt 4204 -442 L
+4204 -442 mt 4209 -441 L
+4209 -441 mt 4239 -438 L
+4239 -438 mt 4274 -435 L
+4274 -435 mt 4309 -431 L
+4309 -431 mt 4344 -426 L
+4344 -426 mt 4379 -422 L
+4379 -422 mt 4413 -417 L
+4413 -417 mt 4432 -414 L
+4432 -414 mt 4448 -411 L
+4448 -411 mt 4483 -406 L
+4483 -406 mt 4518 -400 L
+4518 -400 mt 4553 -394 L
+4553 -394 mt 4588 -387 L
+4588 -387 mt 4590 -386 L
+4590 -386 mt 4623 -380 L
+4623 -380 mt 4657 -372 L
+4657 -372 mt 4692 -364 L
+4692 -364 mt 4714 -359 L
+4714 -359 mt 4727 -356 L
+4727 -356 mt 4762 -347 L
+4762 -347 mt 4797 -338 L
+4797 -338 mt 4820 -331 L
+4820 -331 mt 4832 -328 L
+4832 -328 mt 4867 -318 L
+4867 -318 mt 4902 -308 L
+4902 -308 mt 4913 -304 L
+4913 -304 mt 4936 -297 L
+4936 -297 mt 4971 -286 L
+4971 -286 mt 4999 -276 L
+4999 -276 mt 5006 -274 L
+5006 -274 mt 5041 -262 L
+5041 -262 mt 5076 -250 L
+5076 -250 mt 5080 -249 L
+5080 -249 mt 5111 -238 L
+5111 -238 mt 5146 -225 L
+5146 -225 mt 5156 -221 L
+5156 -221 mt 5181 -212 L
+5181 -212 mt 5215 -199 L
+5215 -199 mt 5228 -194 L
+5228 -194 mt 5250 -185 L
+5250 -185 mt 5285 -171 L
+5285 -171 mt 5296 -166 L
+5296 -166 mt 5320 -156 L
+5320 -156 mt 5355 -141 L
+5355 -141 mt 5359 -139 L
+5359 -139 mt 5390 -125 L
+5390 -125 mt 5419 -111 L
+5419 -111 mt 5425 -109 L
+5425 -109 mt 5459  -92 L
+5459  -92 mt 5476  -84 L
+5476  -84 mt 5494  -74 L
+5494  -74 mt 5529  -56 L
+5529  -56 mt 5529  -56 L
+5529  -56 mt 5564  -37 L
+5564  -37 mt 5579  -29 L
+5579  -29 mt 5599  -17 L
+5599  -17 mt 5627   -1 L
+5627   -1 mt 5634    2 L
+5634    2 mt 5669   24 L
+5669   24 mt 5671   25 L
+5671   25 mt 5704   46 L
+5704   46 mt 5714   53 L
+5714   53 mt 5738   69 L
+5738   69 mt 5755   80 L
+5755   80 mt 5773   93 L
+5773   93 mt 5794  108 L
+5794  108 mt 5808  118 L
+5808  118 mt 5831  135 L
+5831  135 mt 5843  144 L
+5843  144 mt 5867  163 L
+5867  163 mt 5878  171 L
+5878  171 mt 5902  190 L
+5902  190 mt 5913  199 L
+5913  199 mt 5936  218 L
+5936  218 mt 5948  228 L
+5948  228 mt 5968  245 L
+5968  245 mt 5983  258 L
+5983  258 mt 6000  273 L
+6000  273 mt 6017  288 L
+6017  288 mt 6031  300 L
+6031  300 mt 6052  319 L
+6052  319 mt 6062  328 L
+6062  328 mt 6087  351 L
+6087  351 mt 6092  355 L
+6092  355 mt 6121  383 L
+6121  383 mt 6122  384 L
+6122  384 mt 6150  411 L
+6150  411 mt 6157  417 L
+6157  417 mt 6179  438 L
+6179  438 mt 6192  450 L
+6192  450 mt 6208  466 L
+6208  466 mt 6227  483 L
+6227  483 mt 6237  493 L
+6237  493 mt 6261  516 L
+6261  516 mt 6266  521 L
+6266  521 mt 6295  548 L
+6295  548 mt 6296  549 L
+6296  549 mt 6324  576 L
+6324  576 mt 6331  583 L
+6331  583 mt 6353  603 L
+6353  603 mt 6366  616 L
+6366  616 mt 6382  631 L
+6382  631 mt 6401  649 L
+6401  649 mt 6410  658 L
+6410  658 mt 6436  682 L
+6436  682 mt 6439  686 L
+6439  686 mt 6468  713 L
+6468  713 mt 6471  715 L
+6471  715 mt 6497  741 L
+6497  741 mt 6506  749 L
+6506  749 mt 6526  768 L
+6526  768 mt 6540  782 L
+6540  782 mt 6554  796 L
+6554  796 mt 6575  816 L
+6575  816 mt 6583  823 L
+6583  823 mt 6610  850 L
+6610  850 mt 6611  851 L
+6611  851 mt 6639  878 L
+6639  878 mt 6645  884 L
+6645  884 mt 6667  906 L
+6667  906 mt 6680  919 L
+6680  919 mt 6694  933 L
+6694  933 mt 6715  955 L
+6715  955 mt 6721  961 L
+6721  961 mt 6747  988 L
+6747  988 mt 6750  991 L
+6750  991 mt 6773 1016 L
+6773 1016 mt 6785 1028 L
+6785 1028 mt 6799 1043 L
+6799 1043 mt 6819 1066 L
+6819 1066 mt 6824 1071 L
+6824 1071 mt 6849 1098 L
+6849 1098 mt 6854 1104 L
+6854 1104 mt 6873 1126 L
+6873 1126 mt 6889 1144 L
+6889 1144 mt 6897 1153 L
+6897 1153 mt 6921 1181 L
+6921 1181 mt 6924 1185 L
+6924 1185 mt 6944 1208 L
+6944 1208 mt 6959 1226 L
+6959 1226 mt 6967 1236 L
+6967 1236 mt 6990 1263 L
+6990 1263 mt 6994 1269 L
+6994 1269 mt 7012 1291 L
+7012 1291 mt 7029 1313 L
+7029 1313 mt 7033 1318 L
+7033 1318 mt 7055 1346 L
+7055 1346 mt 7063 1357 L
+7063 1357 mt 7076 1373 L
+7076 1373 mt 7097 1401 L
+7097 1401 mt 7098 1403 L
+7098 1403 mt 7117 1428 L
+7117 1428 mt 7133 1451 L
+7133 1451 mt 7137 1456 L
+7137 1456 mt 7157 1484 L
+7157 1484 mt 7168 1500 L
+7168 1500 mt 7176 1511 L
+7176 1511 mt 7195 1539 L
+7195 1539 mt 7203 1552 L
+7203 1552 mt 7213 1566 L
+7213 1566 mt 7230 1594 L
+7230 1594 mt 7238 1607 L
+7238 1607 mt 7247 1621 L
+7247 1621 mt 7263 1649 L
+7263 1649 mt 7273 1667 L
+7273 1667 mt 7278 1676 L
+7278 1676 mt 7293 1704 L
+7293 1704 mt 7306 1731 L
+7306 1731 mt 7308 1734 L
+7308 1734 mt 7319 1759 L
+7319 1759 mt 7331 1786 L
+7331 1786 mt 7342 1814 L
+7342 1814 mt 7342 1814 L
+7342 1814 mt 7353 1841 L
+7353 1841 mt 7363 1869 L
+7363 1869 mt 7372 1896 L
+7372 1896 mt 7377 1916 L
+7308 1976 mt 7308 1979 L
+7308 1979 mt 7312 2006 L
+7312 2006 mt 7316 2034 L
+7316 2034 mt 7318 2061 L
+7318 2061 mt 7320 2089 L
+7320 2089 mt 7321 2116 L
+7321 2116 mt 7321 2144 L
+7321 2144 mt 7320 2171 L
+7320 2171 mt 7319 2199 L
+7319 2199 mt 7317 2226 L
+7317 2226 mt 7315 2254 L
+7315 2254 mt 7312 2281 L
+7312 2281 mt 7309 2309 L
+7309 2309 mt 7308 2320 L
+7308 2320 mt 7306 2336 L
+7306 2336 mt 7302 2364 L
+7302 2364 mt 7298 2391 L
+7298 2391 mt 7294 2419 L
+7294 2419 mt 7289 2446 L
+7289 2446 mt 7284 2474 L
+7284 2474 mt 7278 2502 L
+7278 2502 mt 7273 2529 L
+7273 2529 mt 7273 2529 L
+7273 2529 mt 7266 2557 L
+7266 2557 mt 7260 2584 L
+7260 2584 mt 7253 2612 L
+7253 2612 mt 7245 2639 L
+7245 2639 mt 7238 2666 L
+7238 2666 mt 7238 2667 L
+7238 2667 mt 7229 2694 L
+7229 2694 mt 7221 2722 L
+7221 2722 mt 7212 2749 L
+7212 2749 mt 7203 2776 L
+7203 2776 mt 7203 2777 L
+7203 2777 mt 7194 2804 L
+7194 2804 mt 7184 2832 L
+7184 2832 mt 7175 2859 L
+7175 2859 mt 7168 2878 L
+7168 2878 mt 7165 2887 L
+7165 2887 mt 7155 2914 L
+7155 2914 mt 7145 2942 L
+7145 2942 mt 7134 2969 L
+7134 2969 mt 7133 2972 L
+7133 2972 mt 7124 2997 L
+7124 2997 mt 7113 3024 L
+7113 3024 mt 7102 3052 L
+7102 3052 mt 7098 3061 L
+7098 3061 mt 7091 3079 L
+7091 3079 mt 7080 3107 L
+7080 3107 mt 7069 3134 L
+7069 3134 mt 7063 3147 L
+7063 3147 mt 7057 3162 L
+7057 3162 mt 7046 3189 L
+7046 3189 mt 7034 3217 L
+7034 3217 mt 7029 3230 L
+7029 3230 mt 7023 3244 L
+7023 3244 mt 7011 3272 L
+7011 3272 mt 6999 3299 L
+6999 3299 mt 6994 3312 L
+6994 3312 mt 6988 3327 L
+6988 3327 mt 6976 3354 L
+6976 3354 mt 6964 3382 L
+6964 3382 mt 6959 3395 L
+6959 3395 mt 6953 3409 L
+6953 3409 mt 6941 3437 L
+6941 3437 mt 6930 3464 L
+6930 3464 mt 6924 3477 L
+6924 3477 mt 6918 3492 L
+6918 3492 mt 6906 3519 L
+6906 3519 mt 6894 3547 L
+6894 3547 mt 6889 3559 L
+6889 3559 mt 6882 3575 L
+6882 3575 mt 6870 3602 L
+6870 3602 mt 6857 3630 L
+6857 3630 mt 6854 3636 L
+6854 3636 mt 6845 3657 L
+6845 3657 mt 6832 3685 L
+6832 3685 mt 6819 3711 L
+6819 3711 mt 6819 3712 L
+6819 3712 mt 6806 3740 L
+6806 3740 mt 6793 3767 L
+6793 3767 mt 6785 3785 L
+6785 3785 mt 6780 3795 L
+6780 3795 mt 6766 3822 L
+6766 3822 mt 6753 3850 L
+6753 3850 mt 6750 3855 L
+6750 3855 mt 6739 3877 L
+6739 3877 mt 6724 3905 L
+6724 3905 mt 6715 3922 L
+6715 3922 mt 6710 3932 L
+6710 3932 mt 6695 3960 L
+6695 3960 mt 6680 3987 L
+6680 3987 mt 6680 3987 L
+6680 3987 mt 6664 4015 L
+6664 4015 mt 6649 4042 L
+6649 4042 mt 6645 4049 L
+6645 4049 mt 6634 4070 L
+6634 4070 mt 6618 4097 L
+6618 4097 mt 6610 4111 L
+6610 4111 mt 6602 4125 L
+6602 4125 mt 6586 4152 L
+6586 4152 mt 6575 4172 L
+6575 4172 mt 6571 4180 L
+6571 4180 mt 6556 4207 L
+6556 4207 mt 6541 4235 L
+6541 4235 mt 6540 4235 L
+6540 4235 mt 6526 4262 L
+6526 4262 mt 6511 4290 L
+6511 4290 mt 6506 4301 L
+6506 4301 mt 6497 4317 L
+6497 4317 mt 6482 4345 L
+6482 4345 mt 6471 4366 L
+6471 4366 mt 6467 4372 L
+6467 4372 mt 6452 4400 L
+6452 4400 mt 6436 4427 L
+6436 4427 mt 6436 4428 L
+6436 4428 mt 6418 4455 L
+6418 4455 mt 6401 4479 L
+6401 4479 mt 6399 4482 L
+6399 4482 mt 6376 4510 L
+6376 4510 mt 6366 4520 L
+6366 4520 mt 6349 4537 L
+6349 4537 mt 6331 4553 L
+6331 4553 mt 6316 4565 L
+6316 4565 mt 6296 4578 L
+6296 4578 mt 6270 4592 L
+6270 4592 mt 6261 4597 L
+6261 4597 mt 6227 4609 L
+6227 4609 mt 6192 4617 L
+6192 4617 mt 6170 4620 L
+6170 4620 mt 6157 4622 L
+6157 4622 mt 6122 4624 L
+6122 4624 mt 6087 4624 L
+6087 4624 mt 6052 4623 L
+6052 4623 mt 6022 4620 L
+6022 4620 mt 6017 4619 L
+6017 4619 mt 5983 4608 L
+5983 4608 mt 5948 4593 L
+5948 4593 mt 5947 4592 L
+5947 4592 mt 5913 4572 L
+5913 4572 mt 5901 4565 L
+5901 4565 mt 5880 4537 L
+5880 4537 mt 5878 4528 L
+5878 4528 mt 5873 4510 L
+5873 4510 mt 5870 4482 L
+5870 4482 mt 5872 4455 L
+5872 4455 mt 5874 4427 L
+5874 4427 mt 5873 4400 L
+5873 4400 mt 5865 4372 L
+5865 4372 mt 5849 4345 L
+5849 4345 mt 5843 4337 L
+5843 4337 mt 5828 4317 L
+5828 4317 mt 5808 4293 L
+5808 4293 mt 5805 4290 L
+5805 4290 mt 5787 4262 L
+5787 4262 mt 5773 4235 L
+5773 4235 mt 5773 4235 L
+5773 4235 mt 5762 4207 L
+5762 4207 mt 5753 4180 L
+5753 4180 mt 5746 4152 L
+5746 4152 mt 5740 4125 L
+5740 4125 mt 5738 4119 L
+5738 4119 mt 5733 4097 L
+5733 4097 mt 5724 4070 L
+5724 4070 mt 5715 4042 L
+5715 4042 mt 5704 4015 L
+5704 4015 mt 5703 4015 L
+5703 4015 mt 5690 3987 L
+5690 3987 mt 5675 3960 L
+5675 3960 mt 5669 3948 L
+5669 3948 mt 5660 3932 L
+5660 3932 mt 5644 3905 L
+5644 3905 mt 5634 3888 L
+5634 3888 mt 5627 3877 L
+5627 3877 mt 5608 3850 L
+5608 3850 mt 5599 3838 L
+5599 3838 mt 5586 3822 L
+5586 3822 mt 5564 3797 L
+5564 3797 mt 5562 3795 L
+5562 3795 mt 5536 3767 L
+5536 3767 mt 5529 3760 L
+5529 3760 mt 5507 3740 L
+5507 3740 mt 5494 3727 L
+5494 3727 mt 5477 3712 L
+5477 3712 mt 5459 3697 L
+5459 3697 mt 5445 3685 L
+5445 3685 mt 5425 3667 L
+5425 3667 mt 5414 3657 L
+5414 3657 mt 5390 3635 L
+5390 3635 mt 5384 3630 L
+5384 3630 mt 5356 3602 L
+5356 3602 mt 5355 3600 L
+5355 3600 mt 5329 3575 L
+5329 3575 mt 5320 3565 L
+5320 3565 mt 5301 3547 L
+5301 3547 mt 5285 3531 L
+5285 3531 mt 5272 3519 L
+5272 3519 mt 5250 3499 L
+5250 3499 mt 5242 3492 L
+5242 3492 mt 5215 3467 L
+5215 3467 mt 5212 3464 L
+5212 3464 mt 5182 3437 L
+5182 3437 mt 5181 3435 L
+5181 3435 mt 5154 3409 L
+5154 3409 mt 5146 3401 L
+5146 3401 mt 5127 3382 L
+5127 3382 mt 5111 3365 L
+5111 3365 mt 5100 3354 L
+5100 3354 mt 5076 3330 L
+5076 3330 mt 5072 3327 L
+5072 3327 mt 5043 3299 L
+5043 3299 mt 5041 3298 L
+5041 3298 mt 5013 3272 L
+5013 3272 mt 5006 3265 L
+5006 3265 mt 4984 3244 L
+4984 3244 mt 4971 3232 L
+4971 3232 mt 4956 3217 L
+4956 3217 mt 4936 3199 L
+4936 3199 mt 4926 3189 L
+4926 3189 mt 4902 3168 L
+4902 3168 mt 4894 3162 L
+4894 3162 mt 4867 3142 L
+4867 3142 mt 4857 3134 L
+4857 3134 mt 4832 3116 L
+4832 3116 mt 4823 3107 L
+4823 3107 mt 4797 3079 L
+4797 3079 mt 4797 3079 L
+4797 3079 mt 4777 3052 L
+4777 3052 mt 4762 3034 L
+4762 3034 mt 4754 3024 L
+4754 3024 mt 4727 2998 L
+4727 2998 mt 4726 2997 L
+4726 2997 mt 4692 2969 L
+4692 2969 mt 4692 2969 L
+4692 2969 mt 4657 2946 L
+4657 2946 mt 4650 2942 L
+4650 2942 mt 4623 2925 L
+4623 2925 mt 4604 2914 L
+4604 2914 mt 4588 2903 L
+4588 2903 mt 4562 2887 L
+4562 2887 mt 4553 2881 L
+4553 2881 mt 4523 2859 L
+4523 2859 mt 4518 2856 L
+4518 2856 mt 4483 2832 L
+4483 2832 mt 4483 2832 L
+4483 2832 mt 4448 2811 L
+4448 2811 mt 4436 2804 L
+4436 2804 mt 4413 2792 L
+4413 2792 mt 4383 2777 L
+4383 2777 mt 4379 2774 L
+4379 2774 mt 4344 2755 L
+4344 2755 mt 4335 2749 L
+4335 2749 mt 4309 2731 L
+4309 2731 mt 4294 2722 L
+4294 2722 mt 4274 2708 L
+4274 2708 mt 4252 2694 L
+4252 2694 mt 4239 2685 L
+4239 2685 mt 4213 2667 L
+4213 2667 mt 4204 2660 L
+4204 2660 mt 4180 2639 L
+4180 2639 mt 4169 2630 L
+4169 2630 mt 4147 2612 L
+4147 2612 mt 4134 2601 L
+4134 2601 mt 4113 2584 L
+4113 2584 mt 4100 2574 L
+4100 2574 mt 4075 2557 L
+4075 2557 mt 4065 2550 L
+4065 2550 mt 4031 2529 L
+4031 2529 mt 4030 2529 L
+4030 2529 mt 3995 2512 L
+3995 2512 mt 3971 2502 L
+3971 2502 mt 3960 2497 L
+3960 2497 mt 3925 2487 L
+3925 2487 mt 3890 2480 L
+3890 2480 mt 3855 2480 L
+3855 2480 mt 3821 2489 L
+3821 2489 mt 3790 2502 L
+3790 2502 mt 3786 2504 L
+3786 2504 mt 3751 2527 L
+3751 2527 mt 3748 2529 L
+3748 2529 mt 3716 2553 L
+3716 2553 mt 3711 2557 L
+3711 2557 mt 3681 2579 L
+3681 2579 mt 3673 2584 L
+3673 2584 mt 3646 2602 L
+3646 2602 mt 3628 2612 L
+3628 2612 mt 3611 2621 L
+3611 2621 mt 3577 2636 L
+3577 2636 mt 3569 2639 L
+3569 2639 mt 3542 2650 L
+3542 2650 mt 3507 2662 L
+3507 2662 mt 3490 2667 L
+3490 2667 mt 3472 2672 L
+3472 2672 mt 3437 2683 L
+3437 2683 mt 3404 2694 L
+3404 2694 mt 3402 2695 L
+3402 2695 mt 3367 2707 L
+3367 2707 mt 3332 2719 L
+3332 2719 mt 3325 2722 L
+3325 2722 mt 3298 2732 L
+3298 2732 mt 3263 2745 L
+3263 2745 mt 3252 2749 L
+3252 2749 mt 3228 2759 L
+3228 2759 mt 3193 2772 L
+3193 2772 mt 3181 2777 L
+3181 2777 mt 3158 2786 L
+3158 2786 mt 3123 2799 L
+3123 2799 mt 3112 2804 L
+3112 2804 mt 3088 2814 L
+3088 2814 mt 3053 2831 L
+3053 2831 mt 3052 2832 L
+3052 2832 mt 3019 2853 L
+3019 2853 mt 3010 2859 L
+3010 2859 mt 2984 2883 L
+2984 2883 mt 2981 2887 L
+2981 2887 mt 2964 2914 L
+2964 2914 mt 2955 2942 L
+2955 2942 mt 2949 2969 L
+2949 2969 mt 2950 2997 L
+2950 2997 mt 2955 3024 L
+2955 3024 mt 2967 3052 L
+2967 3052 mt 2984 3079 L
+2984 3079 mt 2984 3079 L
+2984 3079 mt 3006 3107 L
+3006 3107 mt 3019 3118 L
+3019 3118 mt 3035 3134 L
+3035 3134 mt 3053 3148 L
+3053 3148 mt 3070 3162 L
+3070 3162 mt 3088 3176 L
+3088 3176 mt 3107 3189 L
+3107 3189 mt 3123 3201 L
+3123 3201 mt 3145 3217 L
+3145 3217 mt 3158 3225 L
+3158 3225 mt 3186 3244 L
+3186 3244 mt 3193 3249 L
+3193 3249 mt 3228 3271 L
+3228 3271 mt 3229 3272 L
+3229 3272 mt 3263 3293 L
+3263 3293 mt 3273 3299 L
+3273 3299 mt 3298 3315 L
+3298 3315 mt 3315 3327 L
+3315 3327 mt 3332 3338 L
+3332 3338 mt 3355 3354 L
+3355 3354 mt 3367 3364 L
+3367 3364 mt 3390 3382 L
+3390 3382 mt 3402 3392 L
+3402 3392 mt 3422 3409 L
+3422 3409 mt 3437 3423 L
+3437 3423 mt 3452 3437 L
+3452 3437 mt 3472 3457 L
+3472 3457 mt 3479 3464 L
+3479 3464 mt 3506 3492 L
+3506 3492 mt 3507 3493 L
+3507 3493 mt 3530 3519 L
+3530 3519 mt 3542 3533 L
+3542 3533 mt 3553 3547 L
+3553 3547 mt 3575 3575 L
+3575 3575 mt 3577 3577 L
+3577 3577 mt 3597 3602 L
+3597 3602 mt 3611 3618 L
+3611 3618 mt 3621 3630 L
+3621 3630 mt 3644 3657 L
+3644 3657 mt 3646 3660 L
+3646 3660 mt 3660 3685 L
+3660 3685 mt 3668 3712 L
+3668 3712 mt 3666 3740 L
+3666 3740 mt 3658 3767 L
+3658 3767 mt 3646 3786 L
+3646 3786 mt 3640 3795 L
+3640 3795 mt 3614 3822 L
+3614 3822 mt 3611 3825 L
+3611 3825 mt 3590 3850 L
+3590 3850 mt 3577 3865 L
+3577 3865 mt 3566 3877 L
+3566 3877 mt 3544 3905 L
+3544 3905 mt 3542 3908 L
+3542 3908 mt 3528 3932 L
+3528 3932 mt 3520 3960 L
+3520 3960 mt 3526 3987 L
+3526 3987 mt 3542 4004 L
+3542 4004 mt 3552 4015 L
+3552 4015 mt 3577 4030 L
+3577 4030 mt 3597 4042 L
+3597 4042 mt 3611 4050 L
+3611 4050 mt 3644 4070 L
+3644 4070 mt 3646 4071 L
+3646 4071 mt 3675 4097 L
+3675 4097 mt 3681 4105 L
+3681 4105 mt 3694 4125 L
+3694 4125 mt 3704 4152 L
+3704 4152 mt 3707 4180 L
+3707 4180 mt 3702 4207 L
+3702 4207 mt 3685 4235 L
+3685 4235 mt 3681 4238 L
+3681 4238 mt 3646 4262 L
+3646 4262 mt 3645 4262 L
+3645 4262 mt 3611 4278 L
+3611 4278 mt 3588 4290 L
+3588 4290 mt 3577 4298 L
+3577 4298 mt 3554 4317 L
+3554 4317 mt 3546 4345 L
+3546 4345 mt 3558 4372 L
+3558 4372 mt 3577 4389 L
+3577 4389 mt 3591 4400 L
+3591 4400 mt 3611 4413 L
+3611 4413 mt 3634 4427 L
+3634 4427 mt 3646 4437 L
+3646 4437 mt 3666 4455 L
+3666 4455 mt 3681 4475 L
+3681 4475 mt 3686 4482 L
+3686 4482 mt 3699 4510 L
+3699 4510 mt 3708 4537 L
+3708 4537 mt 3714 4565 L
+3714 4565 mt 3716 4584 L
+3716 4584 mt 3717 4592 L
+3717 4592 mt 3716 4596 L
+3716 4596 mt 3710 4620 L
+3710 4620 mt 3696 4648 L
+3696 4648 mt 3681 4672 L
+3681 4672 mt 3679 4675 L
+3679 4675 mt 3659 4703 L
+3659 4703 mt 3646 4718 L
+3646 4718 mt 3636 4730 L
+3636 4730 mt 3611 4756 L
+3611 4756 mt 3610 4758 L
+3610 4758 mt 3581 4785 L
+3581 4785 mt 3577 4789 L
+3577 4789 mt 3547 4813 L
+3547 4813 mt 3542 4817 L
+3542 4817 mt 3510 4840 L
+3510 4840 mt 3507 4842 L
+3507 4842 mt 3472 4865 L
+3472 4865 mt 3468 4868 L
+3468 4868 mt 3437 4886 L
+3437 4886 mt 3421 4895 L
+3421 4895 mt 3402 4905 L
+3402 4905 mt 3368 4923 L
+3368 4923 mt 3367 4923 L
+3367 4923 mt 3332 4940 L
+3332 4940 mt 3309 4950 L
+3309 4950 mt 3298 4955 L
+3298 4955 mt 3263 4970 L
+3263 4970 mt 3242 4978 L
+3242 4978 mt 3228 4983 L
+3228 4983 mt 3193 4996 L
+3193 4996 mt 3167 5005 L
+3167 5005 mt 3158 5008 L
+3158 5008 mt 3123 5020 L
+3123 5020 mt 3088 5030 L
+3088 5030 mt 3079 5033 L
+3079 5033 mt 3053 5040 L
+3053 5040 mt 3019 5049 L
+3019 5049 mt 2984 5057 L
+2984 5057 mt 2971 5060 L
+2971 5060 mt 2949 5065 L
+2949 5065 mt 2914 5072 L
+2914 5072 mt 2879 5078 L
+2879 5078 mt 2844 5084 L
+2844 5084 mt 2816 5088 L
+2816 5088 mt 2809 5089 L
+2809 5089 mt 2774 5093 L
+2774 5093 mt 2740 5097 L
+2740 5097 mt 2705 5100 L
+2705 5100 mt 2670 5103 L
+2670 5103 mt 2635 5105 L
+2635 5105 mt 2600 5107 L
+2600 5107 mt 2565 5108 L
+2565 5108 mt 2530 5108 L
+2530 5108 mt 2496 5108 L
+2496 5108 mt 2461 5108 L
+2461 5108 mt 2426 5107 L
+2426 5107 mt 2391 5105 L
+2391 5105 mt 2356 5103 L
+2356 5103 mt 2321 5100 L
+2321 5100 mt 2286 5097 L
+2286 5097 mt 2251 5093 L
+2251 5093 mt 2217 5089 L
+2217 5089 mt 2209 5088 L
+2209 5088 mt 2182 5084 L
+2182 5084 mt 2147 5078 L
+2147 5078 mt 2112 5072 L
+2112 5072 mt 2077 5065 L
+2077 5065 mt 2057 5060 L
+2057 5060 mt 2042 5057 L
+2042 5057 mt 2007 5049 L
+2007 5049 mt 1972 5040 L
+1972 5040 mt 1948 5033 L
+1948 5033 mt 1938 5030 L
+1938 5030 mt 1903 5020 L
+1903 5020 mt 1868 5008 L
+1868 5008 mt 1859 5005 L
+1859 5005 mt 1833 4997 L
+1833 4997 mt 1798 4984 L
+1798 4984 mt 1783 4978 L
+1783 4978 mt 1763 4970 L
+1763 4970 mt 1728 4954 L
+1728 4954 mt 1720 4950 L
+1720 4950 mt 1694 4937 L
+1694 4937 mt 1666 4923 L
+1666 4923 mt 1659 4919 L
+1659 4919 mt 1624 4899 L
+1624 4899 mt 1618 4895 L
+1618 4895 mt 1589 4876 L
+1589 4876 mt 1576 4868 L
+1576 4868 mt 1554 4852 L
+1554 4852 mt 1539 4840 L
+1539 4840 mt 1519 4824 L
+1519 4824 mt 1505 4813 L
+1505 4813 mt 1484 4794 L
+1484 4794 mt 1475 4785 L
+1475 4785 mt 1449 4759 L
+1449 4759 mt 1448 4758 L
+1448 4758 mt 1423 4730 L
+1423 4730 mt 1415 4720 L
+1415 4720 mt 1400 4703 L
+1400 4703 mt 1380 4676 L
+1380 4676 mt 1379 4675 L
+1379 4675 mt 1359 4648 L
+1359 4648 mt 1345 4625 L
+1345 4625 mt 1342 4620 L
+1342 4620 mt 1324 4592 L
+1324 4592 mt 1310 4568 L
+1310 4568 mt 1308 4565 L
+1308 4565 mt 1293 4537 L
+1293 4537 mt 1278 4510 L
+1278 4510 mt 1275 4504 L
+1275 4504 mt 1264 4482 L
+1264 4482 mt 1250 4455 L
+1250 4455 mt 1240 4433 L
+1240 4433 mt 1238 4427 L
+1238 4427 mt 1226 4400 L
+1226 4400 mt 1215 4372 L
+1215 4372 mt 1205 4346 L
+1205 4346 mt 1205 4345 L
+1205 4345 mt 1195 4317 L
+1195 4317 mt 1187 4290 L
+1187 4290 mt 1180 4262 L
+1180 4262 mt 1173 4235 L
+1173 4235 mt 1170 4224 L
+1170 4224 mt 1167 4207 L
+1167 4207 mt 1162 4180 L
+1162 4180 mt 1157 4152 L
+1157 4152 mt 1153 4125 L
+1153 4125 mt 1149 4097 L
+1149 4097 mt 1146 4070 L
+1146 4070 mt 1143 4042 L
+1143 4042 mt 1140 4015 L
+1140 4015 mt 1137 3987 L
+1137 3987 mt 1136 3969 L
+1136 3969 mt 1135 3960 L
+1135 3960 mt 1132 3932 L
+1132 3932 mt 1130 3905 L
+1130 3905 mt 1126 3877 L
+1126 3877 mt 1123 3850 L
+1123 3850 mt 1118 3822 L
+1118 3822 mt 1112 3795 L
+1112 3795 mt 1105 3767 L
+1105 3767 mt 1101 3752 L
+1101 3752 mt 1097 3740 L
+1097 3740 mt 1086 3712 L
+1086 3712 mt 1074 3685 L
+1074 3685 mt 1066 3670 L
+1066 3670 mt 1059 3657 L
+1059 3657 mt 1042 3630 L
+1042 3630 mt 1031 3614 L
+1031 3614 mt 1022 3602 L
+1022 3602 mt  999 3575 L
+ 999 3575 mt  996 3571 L
+ 996 3571 mt  973 3547 L
+ 973 3547 mt  961 3536 L
+ 961 3536 mt  944 3519 L
+ 944 3519 mt  926 3504 L
+ 926 3504 mt  913 3492 L
+ 913 3492 mt  892 3475 L
+ 892 3475 mt  879 3464 L
+ 879 3464 mt  857 3447 L
+ 857 3447 mt  844 3437 L
+ 844 3437 mt  822 3420 L
+ 822 3420 mt  807 3409 L
+ 807 3409 mt  787 3394 L
+ 787 3394 mt  770 3382 L
+ 770 3382 mt  752 3369 L
+ 752 3369 mt  733 3354 L
+ 733 3354 mt  717 3343 L
+ 717 3343 mt  695 3327 L
+ 695 3327 mt  682 3318 L
+ 682 3318 mt  658 3299 L
+ 658 3299 mt  647 3292 L
+ 647 3292 mt  621 3272 L
+ 621 3272 mt  613 3266 L
+ 613 3266 mt  584 3244 L
+ 584 3244 mt  578 3239 L
+ 578 3239 mt  549 3217 L
+ 549 3217 mt  543 3212 L
+ 543 3212 mt  513 3189 L
+ 513 3189 mt  508 3185 L
+ 508 3185 mt  479 3162 L
+ 479 3162 mt  473 3157 L
+ 473 3157 mt  446 3134 L
+ 446 3134 mt  438 3127 L
+ 438 3127 mt  415 3107 L
+ 415 3107 mt  403 3097 L
+ 403 3097 mt  384 3079 L
+ 384 3079 mt  368 3064 L
+ 368 3064 mt  355 3052 L
+ 355 3052 mt  334 3030 L
+ 334 3030 mt  328 3024 L
+ 328 3024 mt  302 2997 L
+ 302 2997 mt  299 2994 L
+ 299 2994 mt  277 2969 L
+ 277 2969 mt  264 2954 L
+ 264 2954 mt  253 2942 L
+ 253 2942 mt  230 2914 L
+ 230 2914 mt  229 2912 L
+ 229 2912 mt  209 2887 L
+ 209 2887 mt  194 2867 L
+ 194 2867 mt  189 2859 L
+ 189 2859 mt  169 2832 L
+ 169 2832 mt  159 2817 L
+ 159 2817 mt  150 2804 L
+ 150 2804 mt  132 2777 L
+ 132 2777 mt  124 2764 L
+ 124 2764 mt  115 2749 L
+ 115 2749 mt  100 2722 L
+ 100 2722 mt   90 2703 L
+  90 2703 mt   85 2694 L
+  85 2694 mt   71 2667 L
+  71 2667 mt   58 2639 L
+  58 2639 mt   55 2631 L
+  55 2631 mt   46 2612 L
+  46 2612 mt   36 2584 L
+  36 2584 mt   26 2557 L
+  26 2557 mt   20 2535 L
+  20 2535 mt   18 2529 L
+  18 2529 mt   10 2502 L
+  10 2502 mt    4 2474 L
+   4 2474 mt    0 2446 L
+   0 2446 mt   -5 2419 L
+  -5 2419 mt   -9 2391 L
+  -9 2391 mt  -11 2364 L
+ -11 2364 mt  -13 2336 L
+ -13 2336 mt  -14 2320 L
+ -14 2320 mt  -15 2309 L
+ -15 2309 mt  -15 2281 L
+ -15 2281 mt  -15 2254 L
+ -15 2254 mt  -15 2226 L
+ -15 2226 mt  -14 2207 L
+ -14 2207 mt  -14 2199 L
+ -14 2199 mt  -12 2171 L
+ -12 2171 mt  -10 2144 L
+ -10 2144 mt   -7 2116 L
+  -7 2116 mt   -3 2089 L
+  -3 2089 mt    0 2061 L
+   0 2061 mt    4 2034 L
+   4 2034 mt   10 2006 L
+  10 2006 mt   15 1979 L
+  15 1979 mt   20 1961 L
+  20 1961 mt   22 1951 L
+  22 1951 mt   29 1924 L
+  29 1924 mt   36 1896 L
+  36 1896 mt   44 1869 L
+  44 1869 mt   52 1841 L
+  52 1841 mt   55 1833 L
+  55 1833 mt   60 1814 L
+  60 1814 mt   68 1786 L
+  68 1786 mt   76 1759 L
+  76 1759 mt   85 1731 L
+  85 1731 mt   90 1715 L
+  90 1715 mt   93 1704 L
+  93 1704 mt  101 1676 L
+ 101 1676 mt  109 1649 L
+ 109 1649 mt  117 1621 L
+ 117 1621 mt  124 1597 L
+ 124 1597 mt  125 1594 L
+ 125 1594 mt  133 1566 L
+ 133 1566 mt  141 1539 L
+ 141 1539 mt  148 1511 L
+ 148 1511 mt  156 1484 L
+ 156 1484 mt  159 1470 L
+ 159 1470 mt  163 1456 L
+ 163 1456 mt  170 1428 L
+ 170 1428 mt  178 1401 L
+ 178 1401 mt  185 1373 L
+ 185 1373 mt  193 1346 L
+ 193 1346 mt  194 1341 L
+ 194 1341 mt  200 1318 L
+ 200 1318 mt  208 1291 L
+ 208 1291 mt  216 1263 L
+ 216 1263 mt  224 1236 L
+ 224 1236 mt  229 1218 L
+ 229 1218 mt  232 1208 L
+ 232 1208 mt  240 1181 L
+ 240 1181 mt  249 1153 L
+ 249 1153 mt  258 1126 L
+ 258 1126 mt  264 1111 L
+ 264 1111 mt  268 1098 L
+ 268 1098 mt  279 1071 L
+ 279 1071 mt  289 1043 L
+ 289 1043 mt  299 1021 L
+ 299 1021 mt  301 1016 L
+ 301 1016 mt  313  988 L
+ 313  988 mt  325  961 L
+ 325  961 mt  334  944 L
+ 334  944 mt  338  933 L
+ 338  933 mt  352  906 L
+ 352  906 mt  366  878 L
+ 366  878 mt  368  874 L
+ 368  874 mt  381  851 L
+ 381  851 mt  396  823 L
+ 396  823 mt  403  811 L
+ 403  811 mt  412  796 L
+ 412  796 mt  428  768 L
+ 428  768 mt  438  753 L
+ 438  753 mt  446  741 L
+ 446  741 mt  463  713 L
+ 463  713 mt  473  699 L
+ 473  699 mt  482  686 L
+ 482  686 mt  501  658 L
+ 501  658 mt  508  649 L
+ 508  649 mt  521  631 L
+ 521  631 mt  541  603 L
+ 541  603 mt  543  601 L
+ 543  601 mt  562  576 L
+ 562  576 mt  578  556 L
+ 578  556 mt  584  548 L
+ 584  548 mt  606  521 L
+ 606  521 mt  613  513 L
+ 613  513 mt  629  493 L
+ 629  493 mt  647  472 L
+ 647  472 mt  653  466 L
+ 653  466 mt  678  438 L
+ 678  438 mt  682  433 L
+ 682  433 mt  704  411 L
+ 704  411 mt  717  398 L
+ 717  398 mt  732  383 L
+ 732  383 mt  752  364 L
+ 752  364 mt  762  355 L
+ 762  355 mt  787  334 L
+ 787  334 mt  794  328 L
+ 794  328 mt  822  305 L
+ 822  305 mt  828  300 L
+ 828  300 mt  857  279 L
+ 857  279 mt  865  273 L
+ 865  273 mt  892  255 L
+ 892  255 mt  905  245 L
+ 905  245 mt  926  232 L
+ 926  232 mt  949  218 L
+ 949  218 mt  961  210 L
+ 961  210 mt  996  190 L
+ 996  190 mt  996  190 L
+ 996  190 mt 1031  171 L
+1031  171 mt 1046  163 L
+1046  163 mt 1066  153 L
+1066  153 mt 1101  136 L
+1101  136 mt 1102  135 L
+1102  135 mt 1136  120 L
+1136  120 mt 1164  108 L
+1164  108 mt 1170  105 L
+1170  105 mt 1205   91 L
+1205   91 mt 1233   80 L
+1233   80 mt 1240   77 L
+1240   77 mt 1275   64 L
+1275   64 mt 1309   53 L
+1309   53 mt 1310   52 L
+1310   52 mt 1345   41 L
+1345   41 mt 1380   29 L
+1380   29 mt 1393   25 L
+1393   25 mt 1415   19 L
+1415   19 mt 1449    8 L
+1449    8 mt 1484   -1 L
+1484   -1 mt 1487   -1 L
+1487   -1 mt 1519  -10 L
+1519  -10 mt 1554  -19 L
+1554  -19 mt 1589  -28 L
+1589  -28 mt 1591  -29 L
+1591  -29 mt 1624  -37 L
+1624  -37 mt 1659  -45 L
+1659  -45 mt 1694  -53 L
+1694  -53 mt 1706  -56 L
+1706  -56 mt 1728  -61 L
+1728  -61 mt 1763  -69 L
+1763  -69 mt 1798  -77 L
+1798  -77 mt 1831  -84 L
+1831  -84 mt 1833  -84 L
+1833  -84 mt 1868  -92 L
+1868  -92 mt 1903  -99 L
+1903  -99 mt 1938 -106 L
+1938 -106 mt 1964 -111 L
+1964 -111 mt 1972 -113 L
+1972 -113 mt 2007 -120 L
+2007 -120 mt 2042 -127 L
+2042 -127 mt 2077 -133 L
+2077 -133 mt 2105 -139 L
+2105 -139 mt 2112 -140 L
+2112 -140 mt 2147 -147 L
+2147 -147 mt 2182 -153 L
+2182 -153 mt 2217 -160 L
+2217 -160 mt 2250 -166 L
+2250 -166 mt 2251 -167 L
+2251 -167 mt 2286 -174 L
+2286 -174 mt 2321 -181 L
+2321 -181 mt 2356 -188 L
+2356 -188 mt 2386 -194 L
+2386 -194 mt 2391 -195 L
+2391 -195 mt 2426 -202 L
+2426 -202 mt 2461 -209 L
+2461 -209 mt 2496 -216 L
+2496 -216 mt 2526 -221 L
+2526 -221 mt 2530 -222 L
+2530 -222 mt 2565 -229 L
+2565 -229 mt 2600 -235 L
+2600 -235 mt 2635 -242 L
+2635 -242 mt 2670 -248 L
+2670 -248 mt 2672 -249 L
+2672 -249 mt 2705 -255 L
+2705 -255 mt 2740 -261 L
+2740 -261 mt 2774 -268 L
+2774 -268 mt 2809 -274 L
+2809 -274 mt 2822 -276 L
+2822 -276 mt 2844 -280 L
+2844 -280 mt 2879 -287 L
+2879 -287 mt 2914 -293 L
+2914 -293 mt 2949 -299 L
+2949 -299 mt 2976 -304 L
+2976 -304 mt 2984 -305 L
+2984 -305 mt 3019 -311 L
+3019 -311 mt 3053 -318 L
+3053 -318 mt 3088 -324 L
+3088 -324 mt 3123 -329 L
+3123 -329 mt 3135 -331 L
+3135 -331 mt 3158 -335 L
+3158 -335 mt 3193 -341 L
+3193 -341 mt 3228 -346 L
+3228 -346 mt 3263 -351 L
+3263 -351 mt 3298 -356 L
+3298 -356 mt 3321 -359 L
+3321 -359 mt 3332 -360 L
+3332 -360 mt 3367 -365 L
+3367 -365 mt 3402 -369 L
+3402 -369 mt 3437 -373 L
+3437 -373 mt 3472 -376 L
+3472 -376 mt 3507 -379 L
+3507 -379 mt 3542 -383 L
+3542 -383 mt 3577 -385 L
+3577 -385 mt 3590 -386 L
+3590 -386 mt 3611 -388 L
+3611 -388 mt 3646 -390 L
+3646 -390 mt 3681 -392 L
+3681 -392 mt 3716 -393 L
+3716 -393 mt 3751 -394 L
+3751 -394 mt 3786 -395 L
+3786 -395 mt 3821 -396 L
+3821 -396 mt 3855 -396 L
+3855 -396 mt 3890 -396 L
+3890 -396 mt 3925 -395 L
+3925 -395 mt 3960 -395 L
+3960 -395 mt 3995 -394 L
+3995 -394 mt 4030 -393 L
+4030 -393 mt 4065 -392 L
+4065 -392 mt 4100 -390 L
+4100 -390 mt 4134 -388 L
+4134 -388 mt 4169 -386 L
+4169 -386 mt 4170 -386 L
+4170 -386 mt 4204 -384 L
+4204 -384 mt 4239 -382 L
+4239 -382 mt 4274 -379 L
+4274 -379 mt 4309 -375 L
+4309 -375 mt 4344 -372 L
+4344 -372 mt 4379 -368 L
+4379 -368 mt 4413 -364 L
+4413 -364 mt 4448 -359 L
+4448 -359 mt 4449 -359 L
+4449 -359 mt 4483 -354 L
+4483 -354 mt 4518 -349 L
+4518 -349 mt 4553 -343 L
+4553 -343 mt 4588 -337 L
+4588 -337 mt 4619 -331 L
+4619 -331 mt 4623 -331 L
+4623 -331 mt 4657 -324 L
+4657 -324 mt 4692 -317 L
+4692 -317 mt 4727 -309 L
+4727 -309 mt 4748 -304 L
+4748 -304 mt 4762 -301 L
+4762 -301 mt 4797 -292 L
+4797 -292 mt 4832 -283 L
+4832 -283 mt 4858 -276 L
+4858 -276 mt 4867 -274 L
+4867 -274 mt 4902 -264 L
+4902 -264 mt 4936 -254 L
+4936 -254 mt 4953 -249 L
+4953 -249 mt 4971 -243 L
+4971 -243 mt 5006 -233 L
+5006 -233 mt 5040 -221 L
+5040 -221 mt 5041 -221 L
+5041 -221 mt 5076 -210 L
+5076 -210 mt 5111 -198 L
+5111 -198 mt 5122 -194 L
+5122 -194 mt 5146 -185 L
+5146 -185 mt 5181 -173 L
+5181 -173 mt 5198 -166 L
+5198 -166 mt 5215 -160 L
+5215 -160 mt 5250 -146 L
+5250 -146 mt 5269 -139 L
+5269 -139 mt 5285 -132 L
+5285 -132 mt 5320 -118 L
+5320 -118 mt 5335 -111 L
+5335 -111 mt 5355 -103 L
+5355 -103 mt 5390  -87 L
+5390  -87 mt 5396  -84 L
+5396  -84 mt 5425  -70 L
+5425  -70 mt 5454  -56 L
+5454  -56 mt 5459  -53 L
+5459  -53 mt 5494  -36 L
+5494  -36 mt 5507  -29 L
+5507  -29 mt 5529  -17 L
+5529  -17 mt 5558   -1 L
+5558   -1 mt 5564    1 L
+5564    1 mt 5599   22 L
+5599   22 mt 5605   25 L
+5605   25 mt 5634   43 L
+5634   43 mt 5649   53 L
+5649   53 mt 5669   65 L
+5669   65 mt 5692   80 L
+5692   80 mt 5704   88 L
+5704   88 mt 5732  108 L
+5732  108 mt 5738  112 L
+5738  112 mt 5771  135 L
+5771  135 mt 5773  137 L
+5773  137 mt 5808  163 L
+5808  163 mt 5808  163 L
+5808  163 mt 5843  190 L
+5843  190 mt 5843  190 L
+5843  190 mt 5877  218 L
+5877  218 mt 5878  218 L
+5878  218 mt 5911  245 L
+5911  245 mt 5913  247 L
+5913  247 mt 5943  273 L
+5943  273 mt 5948  277 L
+5948  277 mt 5975  300 L
+5975  300 mt 5983  308 L
+5983  308 mt 6005  328 L
+6005  328 mt 6017  339 L
+6017  339 mt 6035  355 L
+6035  355 mt 6052  371 L
+6052  371 mt 6065  383 L
+6065  383 mt 6087  404 L
+6087  404 mt 6094  411 L
+6094  411 mt 6122  437 L
+6122  437 mt 6123  438 L
+6123  438 mt 6151  466 L
+6151  466 mt 6157  471 L
+6157  471 mt 6180  493 L
+6180  493 mt 6192  504 L
+6192  504 mt 6209  521 L
+6209  521 mt 6227  537 L
+6227  537 mt 6238  548 L
+6238  548 mt 6261  571 L
+6261  571 mt 6267  576 L
+6267  576 mt 6295  603 L
+6295  603 mt 6296  604 L
+6296  604 mt 6324  631 L
+6324  631 mt 6331  638 L
+6331  638 mt 6352  658 L
+6352  658 mt 6366  671 L
+6366  671 mt 6381  686 L
+6381  686 mt 6401  705 L
+6401  705 mt 6409  713 L
+6409  713 mt 6436  739 L
+6436  739 mt 6438  741 L
+6438  741 mt 6466  768 L
+6466  768 mt 6471  772 L
+6471  772 mt 6495  796 L
+6495  796 mt 6506  806 L
+6506  806 mt 6523  823 L
+6523  823 mt 6540  840 L
+6540  840 mt 6551  851 L
+6551  851 mt 6575  875 L
+6575  875 mt 6579  878 L
+6579  878 mt 6607  906 L
+6607  906 mt 6610  909 L
+6610  909 mt 6634  933 L
+6634  933 mt 6645  945 L
+6645  945 mt 6661  961 L
+6661  961 mt 6680  981 L
+6680  981 mt 6687  988 L
+6687  988 mt 6713 1016 L
+6713 1016 mt 6715 1018 L
+6715 1018 mt 6738 1043 L
+6738 1043 mt 6750 1056 L
+6750 1056 mt 6764 1071 L
+6764 1071 mt 6785 1094 L
+6785 1094 mt 6788 1098 L
+6788 1098 mt 6813 1126 L
+6813 1126 mt 6819 1134 L
+6819 1134 mt 6837 1153 L
+6837 1153 mt 6854 1174 L
+6854 1174 mt 6860 1181 L
+6860 1181 mt 6883 1208 L
+6883 1208 mt 6889 1216 L
+6889 1216 mt 6906 1236 L
+6906 1236 mt 6924 1259 L
+6924 1259 mt 6928 1263 L
+6928 1263 mt 6949 1291 L
+6949 1291 mt 6959 1303 L
+6959 1303 mt 6971 1318 L
+6971 1318 mt 6991 1346 L
+6991 1346 mt 6994 1349 L
+6994 1349 mt 7012 1373 L
+7012 1373 mt 7029 1397 L
+7029 1397 mt 7032 1401 L
+7032 1401 mt 7051 1428 L
+7051 1428 mt 7063 1446 L
+7063 1446 mt 7070 1456 L
+7070 1456 mt 7089 1484 L
+7089 1484 mt 7098 1498 L
+7098 1498 mt 7107 1511 L
+7107 1511 mt 7125 1539 L
+7125 1539 mt 7133 1553 L
+7133 1553 mt 7142 1566 L
+7142 1566 mt 7158 1594 L
+7158 1594 mt 7168 1612 L
+7168 1612 mt 7174 1621 L
+7174 1621 mt 7189 1649 L
+7189 1649 mt 7203 1676 L
+7203 1676 mt 7203 1676 L
+7203 1676 mt 7217 1704 L
+7217 1704 mt 7230 1731 L
+7230 1731 mt 7238 1750 L
+7238 1750 mt 7242 1759 L
+7242 1759 mt 7253 1786 L
+7253 1786 mt 7263 1814 L
+7263 1814 mt 7273 1841 L
+7273 1841 mt 7273 1842 L
+7273 1842 mt 7281 1869 L
+7281 1869 mt 7290 1896 L
+7290 1896 mt 7297 1924 L
+7297 1924 mt 7303 1951 L
+7303 1951 mt 7308 1976 L
+7238 2031 mt 7238 2034 L
+7238 2034 mt 7240 2061 L
+7240 2061 mt 7241 2089 L
+7241 2089 mt 7242 2116 L
+7242 2116 mt 7242 2144 L
+7242 2144 mt 7241 2171 L
+7241 2171 mt 7240 2199 L
+7240 2199 mt 7238 2223 L
+7238 2223 mt 7238 2226 L
+7238 2226 mt 7235 2254 L
+7235 2254 mt 7232 2281 L
+7232 2281 mt 7229 2309 L
+7229 2309 mt 7225 2336 L
+7225 2336 mt 7221 2364 L
+7221 2364 mt 7217 2391 L
+7217 2391 mt 7212 2419 L
+7212 2419 mt 7206 2446 L
+7206 2446 mt 7203 2464 L
+7203 2464 mt 7201 2474 L
+7201 2474 mt 7195 2502 L
+7195 2502 mt 7189 2529 L
+7189 2529 mt 7182 2557 L
+7182 2557 mt 7175 2584 L
+7175 2584 mt 7168 2608 L
+7168 2608 mt 7167 2612 L
+7167 2612 mt 7159 2639 L
+7159 2639 mt 7151 2667 L
+7151 2667 mt 7143 2694 L
+7143 2694 mt 7134 2722 L
+7134 2722 mt 7133 2725 L
+7133 2725 mt 7126 2749 L
+7126 2749 mt 7117 2777 L
+7117 2777 mt 7108 2804 L
+7108 2804 mt 7098 2832 L
+7098 2832 mt 7098 2832 L
+7098 2832 mt 7089 2859 L
+7089 2859 mt 7079 2887 L
+7079 2887 mt 7070 2914 L
+7070 2914 mt 7063 2931 L
+7063 2931 mt 7059 2942 L
+7059 2942 mt 7049 2969 L
+7049 2969 mt 7039 2997 L
+7039 2997 mt 7029 3023 L
+7029 3023 mt 7028 3024 L
+7028 3024 mt 7018 3052 L
+7018 3052 mt 7007 3079 L
+7007 3079 mt 6996 3107 L
+6996 3107 mt 6994 3112 L
+6994 3112 mt 6985 3134 L
+6985 3134 mt 6974 3162 L
+6974 3162 mt 6962 3189 L
+6962 3189 mt 6959 3198 L
+6959 3198 mt 6951 3217 L
+6951 3217 mt 6940 3244 L
+6940 3244 mt 6929 3272 L
+6929 3272 mt 6924 3283 L
+6924 3283 mt 6918 3299 L
+6918 3299 mt 6907 3327 L
+6907 3327 mt 6896 3354 L
+6896 3354 mt 6889 3370 L
+6889 3370 mt 6885 3382 L
+6885 3382 mt 6874 3409 L
+6874 3409 mt 6863 3437 L
+6863 3437 mt 6854 3458 L
+6854 3458 mt 6852 3464 L
+6852 3464 mt 6841 3492 L
+6841 3492 mt 6829 3519 L
+6829 3519 mt 6819 3543 L
+6819 3543 mt 6818 3547 L
+6818 3547 mt 6806 3575 L
+6806 3575 mt 6794 3602 L
+6794 3602 mt 6785 3624 L
+6785 3624 mt 6782 3630 L
+6782 3630 mt 6770 3657 L
+6770 3657 mt 6758 3685 L
+6758 3685 mt 6750 3702 L
+6750 3702 mt 6745 3712 L
+6745 3712 mt 6733 3740 L
+6733 3740 mt 6720 3767 L
+6720 3767 mt 6715 3778 L
+6715 3778 mt 6707 3795 L
+6707 3795 mt 6694 3822 L
+6694 3822 mt 6681 3850 L
+6681 3850 mt 6680 3851 L
+6680 3851 mt 6667 3877 L
+6667 3877 mt 6653 3905 L
+6653 3905 mt 6645 3920 L
+6645 3920 mt 6639 3932 L
+6639 3932 mt 6625 3960 L
+6625 3960 mt 6610 3987 L
+6610 3987 mt 6610 3987 L
+6610 3987 mt 6595 4015 L
+6595 4015 mt 6580 4042 L
+6580 4042 mt 6575 4050 L
+6575 4050 mt 6565 4070 L
+6565 4070 mt 6549 4097 L
+6549 4097 mt 6540 4113 L
+6540 4113 mt 6534 4125 L
+6534 4125 mt 6519 4152 L
+6519 4152 mt 6506 4177 L
+6506 4177 mt 6504 4180 L
+6504 4180 mt 6490 4207 L
+6490 4207 mt 6477 4235 L
+6477 4235 mt 6471 4247 L
+6471 4247 mt 6463 4262 L
+6463 4262 mt 6450 4290 L
+6450 4290 mt 6437 4317 L
+6437 4317 mt 6436 4320 L
+6436 4320 mt 6424 4345 L
+6424 4345 mt 6411 4372 L
+6411 4372 mt 6401 4393 L
+6401 4393 mt 6398 4400 L
+6398 4400 mt 6383 4427 L
+6383 4427 mt 6367 4455 L
+6367 4455 mt 6366 4457 L
+6366 4457 mt 6349 4482 L
+6349 4482 mt 6331 4504 L
+6331 4504 mt 6327 4510 L
+6327 4510 mt 6299 4537 L
+6299 4537 mt 6296 4540 L
+6296 4540 mt 6261 4565 L
+6261 4565 mt 6261 4565 L
+6261 4565 mt 6227 4580 L
+6227 4580 mt 6192 4587 L
+6192 4587 mt 6157 4591 L
+6157 4591 mt 6122 4591 L
+6122 4591 mt 6087 4588 L
+6087 4588 mt 6052 4581 L
+6052 4581 mt 6017 4570 L
+6017 4570 mt 6011 4565 L
+6011 4565 mt 5991 4537 L
+5991 4537 mt 5983 4510 L
+5983 4510 mt 5983 4508 L
+5983 4508 mt 5981 4482 L
+5981 4482 mt 5983 4469 L
+5983 4469 mt 5984 4455 L
+5984 4455 mt 5989 4427 L
+5989 4427 mt 5993 4400 L
+5993 4400 mt 5993 4372 L
+5993 4372 mt 5986 4345 L
+5986 4345 mt 5983 4337 L
+5983 4337 mt 5973 4317 L
+5973 4317 mt 5957 4290 L
+5957 4290 mt 5948 4272 L
+5948 4272 mt 5942 4262 L
+5942 4262 mt 5928 4235 L
+5928 4235 mt 5916 4207 L
+5916 4207 mt 5913 4199 L
+5913 4199 mt 5904 4180 L
+5904 4180 mt 5893 4152 L
+5893 4152 mt 5883 4125 L
+5883 4125 mt 5878 4110 L
+5878 4110 mt 5873 4097 L
+5873 4097 mt 5859 4070 L
+5859 4070 mt 5843 4042 L
+5843 4042 mt 5843 4042 L
+5843 4042 mt 5829 4015 L
+5829 4015 mt 5812 3987 L
+5812 3987 mt 5808 3982 L
+5808 3982 mt 5791 3960 L
+5791 3960 mt 5773 3936 L
+5773 3936 mt 5771 3932 L
+5771 3932 mt 5751 3905 L
+5751 3905 mt 5738 3888 L
+5738 3888 mt 5731 3877 L
+5731 3877 mt 5710 3850 L
+5710 3850 mt 5704 3842 L
+5704 3842 mt 5688 3822 L
+5688 3822 mt 5669 3801 L
+5669 3801 mt 5663 3795 L
+5663 3795 mt 5636 3767 L
+5636 3767 mt 5634 3766 L
+5634 3766 mt 5607 3740 L
+5607 3740 mt 5599 3732 L
+5599 3732 mt 5577 3712 L
+5577 3712 mt 5564 3700 L
+5564 3700 mt 5547 3685 L
+5547 3685 mt 5529 3670 L
+5529 3670 mt 5515 3657 L
+5515 3657 mt 5494 3639 L
+5494 3639 mt 5483 3630 L
+5483 3630 mt 5459 3607 L
+5459 3607 mt 5454 3602 L
+5454 3602 mt 5427 3575 L
+5427 3575 mt 5425 3572 L
+5425 3572 mt 5402 3547 L
+5402 3547 mt 5390 3533 L
+5390 3533 mt 5377 3519 L
+5377 3519 mt 5355 3494 L
+5355 3494 mt 5353 3492 L
+5353 3492 mt 5328 3464 L
+5328 3464 mt 5320 3454 L
+5320 3454 mt 5304 3437 L
+5304 3437 mt 5285 3414 L
+5285 3414 mt 5281 3409 L
+5281 3409 mt 5258 3382 L
+5258 3382 mt 5250 3372 L
+5250 3372 mt 5236 3354 L
+5236 3354 mt 5217 3327 L
+5217 3327 mt 5215 3325 L
+5215 3325 mt 5196 3299 L
+5196 3299 mt 5181 3278 L
+5181 3278 mt 5175 3272 L
+5175 3272 mt 5153 3244 L
+5153 3244 mt 5146 3235 L
+5146 3235 mt 5130 3217 L
+5130 3217 mt 5111 3196 L
+5111 3196 mt 5104 3189 L
+5104 3189 mt 5076 3162 L
+5076 3162 mt 5076 3161 L
+5076 3161 mt 5047 3134 L
+5047 3134 mt 5041 3129 L
+5041 3129 mt 5015 3107 L
+5015 3107 mt 5006 3100 L
+5006 3100 mt 4977 3079 L
+4977 3079 mt 4971 3076 L
+4971 3076 mt 4936 3056 L
+4936 3056 mt 4929 3052 L
+4929 3052 mt 4902 3037 L
+4902 3037 mt 4884 3024 L
+4884 3024 mt 4867 3012 L
+4867 3012 mt 4849 2997 L
+4849 2997 mt 4832 2982 L
+4832 2982 mt 4818 2969 L
+4818 2969 mt 4797 2952 L
+4797 2952 mt 4784 2942 L
+4784 2942 mt 4762 2923 L
+4762 2923 mt 4751 2914 L
+4751 2914 mt 4727 2894 L
+4727 2894 mt 4718 2887 L
+4718 2887 mt 4692 2863 L
+4692 2863 mt 4687 2859 L
+4687 2859 mt 4658 2832 L
+4658 2832 mt 4657 2831 L
+4657 2831 mt 4627 2804 L
+4627 2804 mt 4623 2801 L
+4623 2801 mt 4590 2777 L
+4590 2777 mt 4588 2775 L
+4588 2775 mt 4553 2751 L
+4553 2751 mt 4549 2749 L
+4549 2749 mt 4518 2731 L
+4518 2731 mt 4499 2722 L
+4499 2722 mt 4483 2714 L
+4483 2714 mt 4448 2698 L
+4448 2698 mt 4439 2694 L
+4439 2694 mt 4413 2683 L
+4413 2683 mt 4379 2668 L
+4379 2668 mt 4377 2667 L
+4377 2667 mt 4344 2651 L
+4344 2651 mt 4322 2639 L
+4322 2639 mt 4309 2631 L
+4309 2631 mt 4279 2612 L
+4279 2612 mt 4274 2608 L
+4274 2608 mt 4245 2584 L
+4245 2584 mt 4239 2579 L
+4239 2579 mt 4212 2557 L
+4212 2557 mt 4204 2551 L
+4204 2551 mt 4177 2529 L
+4177 2529 mt 4169 2523 L
+4169 2523 mt 4138 2502 L
+4138 2502 mt 4134 2499 L
+4134 2499 mt 4100 2478 L
+4100 2478 mt 4091 2474 L
+4091 2474 mt 4065 2461 L
+4065 2461 mt 4031 2446 L
+4031 2446 mt 4030 2446 L
+4030 2446 mt 3995 2432 L
+3995 2432 mt 3961 2419 L
+3961 2419 mt 3960 2419 L
+3960 2419 mt 3925 2406 L
+3925 2406 mt 3890 2393 L
+3890 2393 mt 3886 2391 L
+3886 2391 mt 3855 2380 L
+3855 2380 mt 3821 2366 L
+3821 2366 mt 3814 2364 L
+3814 2364 mt 3786 2352 L
+3786 2352 mt 3752 2336 L
+3752 2336 mt 3751 2336 L
+3751 2336 mt 3716 2333 L
+3716 2333 mt 3696 2336 L
+3696 2336 mt 3681 2342 L
+3681 2342 mt 3649 2364 L
+3649 2364 mt 3646 2366 L
+3646 2366 mt 3617 2391 L
+3617 2391 mt 3611 2397 L
+3611 2397 mt 3582 2419 L
+3582 2419 mt 3577 2423 L
+3577 2423 mt 3542 2445 L
+3542 2445 mt 3538 2446 L
+3538 2446 mt 3507 2457 L
+3507 2457 mt 3472 2469 L
+3472 2469 mt 3455 2474 L
+3455 2474 mt 3437 2479 L
+3437 2479 mt 3402 2489 L
+3402 2489 mt 3367 2500 L
+3367 2500 mt 3362 2502 L
+3362 2502 mt 3332 2511 L
+3332 2511 mt 3298 2523 L
+3298 2523 mt 3280 2529 L
+3280 2529 mt 3263 2535 L
+3263 2535 mt 3228 2548 L
+3228 2548 mt 3205 2557 L
+3205 2557 mt 3193 2561 L
+3193 2561 mt 3158 2575 L
+3158 2575 mt 3135 2584 L
+3135 2584 mt 3123 2589 L
+3123 2589 mt 3088 2602 L
+3088 2602 mt 3065 2612 L
+3065 2612 mt 3053 2616 L
+3053 2616 mt 3019 2630 L
+3019 2630 mt 2997 2639 L
+2997 2639 mt 2984 2644 L
+2984 2644 mt 2949 2661 L
+2949 2661 mt 2939 2667 L
+2939 2667 mt 2914 2680 L
+2914 2680 mt 2892 2694 L
+2892 2694 mt 2879 2703 L
+2879 2703 mt 2857 2722 L
+2857 2722 mt 2844 2734 L
+2844 2734 mt 2832 2749 L
+2832 2749 mt 2816 2777 L
+2816 2777 mt 2809 2796 L
+2809 2796 mt 2807 2804 L
+2807 2804 mt 2804 2832 L
+2804 2832 mt 2805 2859 L
+2805 2859 mt 2809 2887 L
+2809 2887 mt 2809 2889 L
+2809 2889 mt 2815 2914 L
+2815 2914 mt 2823 2942 L
+2823 2942 mt 2830 2969 L
+2830 2969 mt 2836 2997 L
+2836 2997 mt 2843 3024 L
+2843 3024 mt 2844 3029 L
+2844 3029 mt 2852 3052 L
+2852 3052 mt 2869 3079 L
+2869 3079 mt 2879 3090 L
+2879 3090 mt 2897 3107 L
+2897 3107 mt 2914 3119 L
+2914 3119 mt 2934 3134 L
+2934 3134 mt 2949 3143 L
+2949 3143 mt 2975 3162 L
+2975 3162 mt 2984 3167 L
+2984 3167 mt 3017 3189 L
+3017 3189 mt 3019 3190 L
+3019 3190 mt 3053 3213 L
+3053 3213 mt 3059 3217 L
+3059 3217 mt 3088 3238 L
+3088 3238 mt 3097 3244 L
+3097 3244 mt 3123 3265 L
+3123 3265 mt 3133 3272 L
+3133 3272 mt 3158 3290 L
+3158 3290 mt 3172 3299 L
+3172 3299 mt 3193 3314 L
+3193 3314 mt 3213 3327 L
+3213 3327 mt 3228 3336 L
+3228 3336 mt 3258 3354 L
+3258 3354 mt 3263 3357 L
+3263 3357 mt 3298 3378 L
+3298 3378 mt 3303 3382 L
+3303 3382 mt 3332 3402 L
+3332 3402 mt 3342 3409 L
+3342 3409 mt 3367 3428 L
+3367 3428 mt 3379 3437 L
+3379 3437 mt 3402 3457 L
+3402 3457 mt 3410 3464 L
+3410 3464 mt 3436 3492 L
+3436 3492 mt 3437 3494 L
+3437 3494 mt 3459 3519 L
+3459 3519 mt 3472 3536 L
+3472 3536 mt 3481 3547 L
+3481 3547 mt 3501 3575 L
+3501 3575 mt 3507 3581 L
+3507 3581 mt 3519 3602 L
+3519 3602 mt 3542 3629 L
+3542 3629 mt 3542 3630 L
+3542 3630 mt 3562 3657 L
+3562 3657 mt 3577 3679 L
+3577 3679 mt 3580 3685 L
+3580 3685 mt 3584 3712 L
+3584 3712 mt 3577 3740 L
+3577 3740 mt 3577 3740 L
+3577 3740 mt 3555 3767 L
+3555 3767 mt 3542 3781 L
+3542 3781 mt 3527 3795 L
+3527 3795 mt 3507 3816 L
+3507 3816 mt 3502 3822 L
+3502 3822 mt 3481 3850 L
+3481 3850 mt 3472 3862 L
+3472 3862 mt 3463 3877 L
+3463 3877 mt 3449 3905 L
+3449 3905 mt 3438 3932 L
+3438 3932 mt 3437 3934 L
+3437 3934 mt 3427 3960 L
+3427 3960 mt 3428 3987 L
+3428 3987 mt 3437 4002 L
+3437 4002 mt 3446 4015 L
+3446 4015 mt 3472 4035 L
+3472 4035 mt 3484 4042 L
+3484 4042 mt 3507 4053 L
+3507 4053 mt 3542 4070 L
+3542 4070 mt 3542 4070 L
+3542 4070 mt 3577 4087 L
+3577 4087 mt 3594 4097 L
+3594 4097 mt 3611 4112 L
+3611 4112 mt 3625 4125 L
+3625 4125 mt 3640 4152 L
+3640 4152 mt 3641 4180 L
+3641 4180 mt 3627 4207 L
+3627 4207 mt 3611 4220 L
+3611 4220 mt 3593 4235 L
+3593 4235 mt 3577 4244 L
+3577 4244 mt 3542 4261 L
+3542 4261 mt 3539 4262 L
+3539 4262 mt 3507 4285 L
+3507 4285 mt 3501 4290 L
+3501 4290 mt 3479 4317 L
+3479 4317 mt 3472 4341 L
+3472 4341 mt 3471 4345 L
+3471 4345 mt 3472 4350 L
+3472 4350 mt 3477 4372 L
+3477 4372 mt 3501 4400 L
+3501 4400 mt 3507 4404 L
+3507 4404 mt 3536 4427 L
+3536 4427 mt 3542 4432 L
+3542 4432 mt 3577 4455 L
+3577 4455 mt 3577 4455 L
+3577 4455 mt 3608 4482 L
+3608 4482 mt 3611 4487 L
+3611 4487 mt 3626 4510 L
+3626 4510 mt 3639 4537 L
+3639 4537 mt 3646 4563 L
+3646 4563 mt 3647 4565 L
+3647 4565 mt 3651 4592 L
+3651 4592 mt 3646 4610 L
+3646 4610 mt 3644 4620 L
+3644 4620 mt 3629 4648 L
+3629 4648 mt 3611 4673 L
+3611 4673 mt 3610 4675 L
+3610 4675 mt 3586 4703 L
+3586 4703 mt 3577 4713 L
+3577 4713 mt 3559 4730 L
+3559 4730 mt 3542 4746 L
+3542 4746 mt 3527 4758 L
+3527 4758 mt 3507 4774 L
+3507 4774 mt 3491 4785 L
+3491 4785 mt 3472 4798 L
+3472 4798 mt 3449 4813 L
+3449 4813 mt 3437 4820 L
+3437 4820 mt 3403 4840 L
+3403 4840 mt 3402 4841 L
+3402 4841 mt 3367 4859 L
+3367 4859 mt 3351 4868 L
+3351 4868 mt 3332 4877 L
+3332 4877 mt 3298 4893 L
+3298 4893 mt 3293 4895 L
+3293 4895 mt 3263 4908 L
+3263 4908 mt 3228 4922 L
+3228 4922 mt 3226 4923 L
+3226 4923 mt 3193 4935 L
+3193 4935 mt 3158 4947 L
+3158 4947 mt 3150 4950 L
+3150 4950 mt 3123 4959 L
+3123 4959 mt 3088 4970 L
+3088 4970 mt 3063 4978 L
+3063 4978 mt 3053 4981 L
+3053 4981 mt 3019 4990 L
+3019 4990 mt 2984 4999 L
+2984 4999 mt 2959 5005 L
+2959 5005 mt 2949 5008 L
+2949 5008 mt 2914 5015 L
+2914 5015 mt 2879 5022 L
+2879 5022 mt 2844 5029 L
+2844 5029 mt 2819 5033 L
+2819 5033 mt 2809 5034 L
+2809 5034 mt 2774 5040 L
+2774 5040 mt 2740 5044 L
+2740 5044 mt 2705 5048 L
+2705 5048 mt 2670 5052 L
+2670 5052 mt 2635 5055 L
+2635 5055 mt 2600 5057 L
+2600 5057 mt 2565 5059 L
+2565 5059 mt 2535 5060 L
+2535 5060 mt 2530 5060 L
+2530 5060 mt 2496 5061 L
+2496 5061 mt 2461 5061 L
+2461 5061 mt 2426 5061 L
+2426 5061 mt 2397 5060 L
+2397 5060 mt 2391 5060 L
+2391 5060 mt 2356 5059 L
+2356 5059 mt 2321 5057 L
+2321 5057 mt 2286 5054 L
+2286 5054 mt 2251 5051 L
+2251 5051 mt 2217 5047 L
+2217 5047 mt 2182 5042 L
+2182 5042 mt 2147 5037 L
+2147 5037 mt 2123 5033 L
+2123 5033 mt 2112 5031 L
+2112 5031 mt 2077 5024 L
+2077 5024 mt 2042 5017 L
+2042 5017 mt 2007 5009 L
+2007 5009 mt 1994 5005 L
+1994 5005 mt 1972 5000 L
+1972 5000 mt 1938 4990 L
+1938 4990 mt 1903 4980 L
+1903 4980 mt 1895 4978 L
+1895 4978 mt 1868 4969 L
+1868 4969 mt 1833 4957 L
+1833 4957 mt 1814 4950 L
+1814 4950 mt 1798 4944 L
+1798 4944 mt 1763 4930 L
+1763 4930 mt 1748 4923 L
+1748 4923 mt 1728 4914 L
+1728 4914 mt 1694 4896 L
+1694 4896 mt 1692 4895 L
+1692 4895 mt 1659 4877 L
+1659 4877 mt 1644 4868 L
+1644 4868 mt 1624 4855 L
+1624 4855 mt 1602 4840 L
+1602 4840 mt 1589 4831 L
+1589 4831 mt 1564 4813 L
+1564 4813 mt 1554 4804 L
+1554 4804 mt 1531 4785 L
+1531 4785 mt 1519 4774 L
+1519 4774 mt 1501 4758 L
+1501 4758 mt 1484 4740 L
+1484 4740 mt 1475 4730 L
+1475 4730 mt 1451 4703 L
+1451 4703 mt 1449 4701 L
+1449 4701 mt 1429 4675 L
+1429 4675 mt 1415 4656 L
+1415 4656 mt 1408 4648 L
+1408 4648 mt 1390 4620 L
+1390 4620 mt 1380 4604 L
+1380 4604 mt 1373 4592 L
+1373 4592 mt 1356 4565 L
+1356 4565 mt 1345 4545 L
+1345 4545 mt 1341 4537 L
+1341 4537 mt 1326 4510 L
+1326 4510 mt 1312 4482 L
+1312 4482 mt 1310 4478 L
+1310 4478 mt 1299 4455 L
+1299 4455 mt 1286 4427 L
+1286 4427 mt 1275 4401 L
+1275 4401 mt 1275 4400 L
+1275 4400 mt 1264 4372 L
+1264 4372 mt 1254 4345 L
+1254 4345 mt 1245 4317 L
+1245 4317 mt 1240 4301 L
+1240 4301 mt 1237 4290 L
+1237 4290 mt 1230 4262 L
+1230 4262 mt 1223 4235 L
+1223 4235 mt 1218 4207 L
+1218 4207 mt 1213 4180 L
+1213 4180 mt 1209 4152 L
+1209 4152 mt 1206 4125 L
+1206 4125 mt 1205 4114 L
+1205 4114 mt 1204 4097 L
+1204 4097 mt 1202 4070 L
+1202 4070 mt 1200 4042 L
+1200 4042 mt 1199 4015 L
+1199 4015 mt 1199 3987 L
+1199 3987 mt 1198 3960 L
+1198 3960 mt 1198 3932 L
+1198 3932 mt 1197 3905 L
+1197 3905 mt 1196 3877 L
+1196 3877 mt 1195 3850 L
+1195 3850 mt 1193 3822 L
+1193 3822 mt 1190 3795 L
+1190 3795 mt 1186 3767 L
+1186 3767 mt 1180 3740 L
+1180 3740 mt 1173 3712 L
+1173 3712 mt 1170 3706 L
+1170 3706 mt 1163 3685 L
+1163 3685 mt 1151 3657 L
+1151 3657 mt 1136 3630 L
+1136 3630 mt 1136 3629 L
+1136 3629 mt 1119 3602 L
+1119 3602 mt 1101 3578 L
+1101 3578 mt 1098 3575 L
+1098 3575 mt 1075 3547 L
+1075 3547 mt 1066 3538 L
+1066 3538 mt 1048 3519 L
+1048 3519 mt 1031 3504 L
+1031 3504 mt 1018 3492 L
+1018 3492 mt  996 3474 L
+ 996 3474 mt  984 3464 L
+ 984 3464 mt  961 3447 L
+ 961 3447 mt  949 3437 L
+ 949 3437 mt  926 3420 L
+ 926 3420 mt  912 3409 L
+ 912 3409 mt  892 3395 L
+ 892 3395 mt  874 3382 L
+ 874 3382 mt  857 3370 L
+ 857 3370 mt  835 3354 L
+ 835 3354 mt  822 3346 L
+ 822 3346 mt  795 3327 L
+ 795 3327 mt  787 3321 L
+ 787 3321 mt  756 3299 L
+ 756 3299 mt  752 3297 L
+ 752 3297 mt  717 3272 L
+ 717 3272 mt  717 3272 L
+ 717 3272 mt  682 3247 L
+ 682 3247 mt  678 3244 L
+ 678 3244 mt  647 3222 L
+ 647 3222 mt  641 3217 L
+ 641 3217 mt  613 3196 L
+ 613 3196 mt  604 3189 L
+ 604 3189 mt  578 3169 L
+ 578 3169 mt  569 3162 L
+ 569 3162 mt  543 3141 L
+ 543 3141 mt  534 3134 L
+ 534 3134 mt  508 3113 L
+ 508 3113 mt  501 3107 L
+ 501 3107 mt  473 3083 L
+ 473 3083 mt  469 3079 L
+ 469 3079 mt  439 3052 L
+ 439 3052 mt  438 3051 L
+ 438 3051 mt  410 3024 L
+ 410 3024 mt  403 3017 L
+ 403 3017 mt  383 2997 L
+ 383 2997 mt  368 2981 L
+ 368 2981 mt  357 2969 L
+ 357 2969 mt  334 2942 L
+ 334 2942 mt  333 2942 L
+ 333 2942 mt  310 2914 L
+ 310 2914 mt  299 2900 L
+ 299 2900 mt  288 2887 L
+ 288 2887 mt  268 2859 L
+ 268 2859 mt  264 2854 L
+ 264 2854 mt  248 2832 L
+ 248 2832 mt  230 2804 L
+ 230 2804 mt  229 2803 L
+ 229 2803 mt  212 2777 L
+ 212 2777 mt  196 2749 L
+ 196 2749 mt  194 2746 L
+ 194 2746 mt  180 2722 L
+ 180 2722 mt  165 2694 L
+ 165 2694 mt  159 2682 L
+ 159 2682 mt  151 2667 L
+ 151 2667 mt  139 2639 L
+ 139 2639 mt  127 2612 L
+ 127 2612 mt  124 2604 L
+ 124 2604 mt  117 2584 L
+ 117 2584 mt  107 2557 L
+ 107 2557 mt   99 2529 L
+  99 2529 mt   92 2502 L
+  92 2502 mt   90 2490 L
+  90 2490 mt   86 2474 L
+  86 2474 mt   81 2446 L
+  81 2446 mt   76 2419 L
+  76 2419 mt   73 2391 L
+  73 2391 mt   70 2364 L
+  70 2364 mt   68 2336 L
+  68 2336 mt   67 2309 L
+  67 2309 mt   66 2281 L
+  66 2281 mt   66 2254 L
+  66 2254 mt   67 2226 L
+  67 2226 mt   68 2199 L
+  68 2199 mt   69 2171 L
+  69 2171 mt   71 2144 L
+  71 2144 mt   74 2116 L
+  74 2116 mt   77 2089 L
+  77 2089 mt   81 2061 L
+  81 2061 mt   86 2034 L
+  86 2034 mt   90 2013 L
+  90 2013 mt   91 2006 L
+  91 2006 mt   96 1979 L
+  96 1979 mt  102 1951 L
+ 102 1951 mt  109 1924 L
+ 109 1924 mt  116 1896 L
+ 116 1896 mt  123 1869 L
+ 123 1869 mt  124 1864 L
+ 124 1864 mt  130 1841 L
+ 130 1841 mt  138 1814 L
+ 138 1814 mt  145 1786 L
+ 145 1786 mt  153 1759 L
+ 153 1759 mt  159 1736 L
+ 159 1736 mt  161 1731 L
+ 161 1731 mt  168 1704 L
+ 168 1704 mt  176 1676 L
+ 176 1676 mt  183 1649 L
+ 183 1649 mt  190 1621 L
+ 190 1621 mt  194 1606 L
+ 194 1606 mt  197 1594 L
+ 197 1594 mt  204 1566 L
+ 204 1566 mt  210 1539 L
+ 210 1539 mt  217 1511 L
+ 217 1511 mt  223 1484 L
+ 223 1484 mt  229 1459 L
+ 229 1459 mt  230 1456 L
+ 230 1456 mt  236 1428 L
+ 236 1428 mt  242 1401 L
+ 242 1401 mt  249 1373 L
+ 249 1373 mt  255 1346 L
+ 255 1346 mt  262 1318 L
+ 262 1318 mt  264 1311 L
+ 264 1311 mt  269 1291 L
+ 269 1291 mt  276 1263 L
+ 276 1263 mt  283 1236 L
+ 283 1236 mt  291 1208 L
+ 291 1208 mt  299 1181 L
+ 299 1181 mt  299 1180 L
+ 299 1180 mt  307 1153 L
+ 307 1153 mt  316 1126 L
+ 316 1126 mt  325 1098 L
+ 325 1098 mt  334 1074 L
+ 334 1074 mt  335 1071 L
+ 335 1071 mt  345 1043 L
+ 345 1043 mt  356 1016 L
+ 356 1016 mt  367  988 L
+ 367  988 mt  368  986 L
+ 368  986 mt  379  961 L
+ 379  961 mt  392  933 L
+ 392  933 mt  403  909 L
+ 403  909 mt  405  906 L
+ 405  906 mt  419  878 L
+ 419  878 mt  433  851 L
+ 433  851 mt  438  841 L
+ 438  841 mt  448  823 L
+ 448  823 mt  463  796 L
+ 463  796 mt  473  779 L
+ 473  779 mt  479  768 L
+ 479  768 mt  496  741 L
+ 496  741 mt  508  722 L
+ 508  722 mt  514  713 L
+ 514  713 mt  532  686 L
+ 532  686 mt  543  670 L
+ 543  670 mt  551  658 L
+ 551  658 mt  570  631 L
+ 570  631 mt  578  621 L
+ 578  621 mt  591  603 L
+ 591  603 mt  612  576 L
+ 612  576 mt  613  575 L
+ 613  575 mt  633  548 L
+ 633  548 mt  647  531 L
+ 647  531 mt  656  521 L
+ 656  521 mt  679  493 L
+ 679  493 mt  682  489 L
+ 682  489 mt  703  466 L
+ 703  466 mt  717  451 L
+ 717  451 mt  729  438 L
+ 729  438 mt  752  415 L
+ 752  415 mt  756  411 L
+ 756  411 mt  785  383 L
+ 785  383 mt  787  381 L
+ 787  381 mt  816  355 L
+ 816  355 mt  822  351 L
+ 822  351 mt  850  328 L
+ 850  328 mt  857  322 L
+ 857  322 mt  886  300 L
+ 886  300 mt  892  296 L
+ 892  296 mt  925  273 L
+ 925  273 mt  926  272 L
+ 926  272 mt  961  250 L
+ 961  250 mt  968  245 L
+ 968  245 mt  996  229 L
+ 996  229 mt 1015  218 L
+1015  218 mt 1031  209 L
+1031  209 mt 1066  191 L
+1066  191 mt 1066  190 L
+1066  190 mt 1101  173 L
+1101  173 mt 1123  163 L
+1123  163 mt 1136  157 L
+1136  157 mt 1170  142 L
+1170  142 mt 1187  135 L
+1187  135 mt 1205  128 L
+1205  128 mt 1240  115 L
+1240  115 mt 1260  108 L
+1260  108 mt 1275  102 L
+1275  102 mt 1310   90 L
+1310   90 mt 1341   80 L
+1341   80 mt 1345   79 L
+1345   79 mt 1380   68 L
+1380   68 mt 1415   58 L
+1415   58 mt 1434   53 L
+1434   53 mt 1449   48 L
+1449   48 mt 1484   39 L
+1484   39 mt 1519   30 L
+1519   30 mt 1538   25 L
+1538   25 mt 1554   21 L
+1554   21 mt 1589   13 L
+1589   13 mt 1624    5 L
+1624    5 mt 1654   -1 L
+1654   -1 mt 1659   -2 L
+1659   -2 mt 1694  -10 L
+1694  -10 mt 1728  -17 L
+1728  -17 mt 1763  -25 L
+1763  -25 mt 1783  -29 L
+1783  -29 mt 1798  -32 L
+1798  -32 mt 1833  -39 L
+1833  -39 mt 1868  -46 L
+1868  -46 mt 1903  -52 L
+1903  -52 mt 1924  -56 L
+1924  -56 mt 1938  -59 L
+1938  -59 mt 1972  -65 L
+1972  -65 mt 2007  -72 L
+2007  -72 mt 2042  -78 L
+2042  -78 mt 2075  -84 L
+2075  -84 mt 2077  -84 L
+2077  -84 mt 2112  -90 L
+2112  -90 mt 2147  -96 L
+2147  -96 mt 2182 -102 L
+2182 -102 mt 2217 -108 L
+2217 -108 mt 2237 -111 L
+2237 -111 mt 2251 -114 L
+2251 -114 mt 2286 -120 L
+2286 -120 mt 2321 -126 L
+2321 -126 mt 2356 -133 L
+2356 -133 mt 2389 -139 L
+2389 -139 mt 2391 -139 L
+2391 -139 mt 2426 -146 L
+2426 -146 mt 2461 -152 L
+2461 -152 mt 2496 -158 L
+2496 -158 mt 2530 -164 L
+2530 -164 mt 2542 -166 L
+2542 -166 mt 2565 -170 L
+2565 -170 mt 2600 -176 L
+2600 -176 mt 2635 -182 L
+2635 -182 mt 2670 -188 L
+2670 -188 mt 2702 -194 L
+2702 -194 mt 2705 -194 L
+2705 -194 mt 2740 -200 L
+2740 -200 mt 2774 -206 L
+2774 -206 mt 2809 -212 L
+2809 -212 mt 2844 -217 L
+2844 -217 mt 2869 -221 L
+2869 -221 mt 2879 -223 L
+2879 -223 mt 2914 -229 L
+2914 -229 mt 2949 -234 L
+2949 -234 mt 2984 -240 L
+2984 -240 mt 3019 -245 L
+3019 -245 mt 3041 -249 L
+3041 -249 mt 3053 -251 L
+3053 -251 mt 3088 -256 L
+3088 -256 mt 3123 -262 L
+3123 -262 mt 3158 -267 L
+3158 -267 mt 3193 -272 L
+3193 -272 mt 3220 -276 L
+3220 -276 mt 3228 -277 L
+3228 -277 mt 3263 -283 L
+3263 -283 mt 3298 -287 L
+3298 -287 mt 3332 -292 L
+3332 -292 mt 3367 -296 L
+3367 -296 mt 3402 -301 L
+3402 -301 mt 3432 -304 L
+3432 -304 mt 3437 -304 L
+3437 -304 mt 3472 -308 L
+3472 -308 mt 3507 -312 L
+3507 -312 mt 3542 -315 L
+3542 -315 mt 3577 -318 L
+3577 -318 mt 3611 -321 L
+3611 -321 mt 3646 -323 L
+3646 -323 mt 3681 -325 L
+3681 -325 mt 3716 -327 L
+3716 -327 mt 3751 -329 L
+3751 -329 mt 3786 -330 L
+3786 -330 mt 3818 -331 L
+3818 -331 mt 3821 -331 L
+3821 -331 mt 3855 -332 L
+3855 -332 mt 3890 -333 L
+3890 -333 mt 3925 -334 L
+3925 -334 mt 3960 -334 L
+3960 -334 mt 3995 -334 L
+3995 -334 mt 4030 -334 L
+4030 -334 mt 4065 -334 L
+4065 -334 mt 4100 -333 L
+4100 -333 mt 4134 -332 L
+4134 -332 mt 4154 -331 L
+4154 -331 mt 4169 -331 L
+4169 -331 mt 4204 -329 L
+4204 -329 mt 4239 -327 L
+4239 -327 mt 4274 -325 L
+4274 -325 mt 4309 -323 L
+4309 -323 mt 4344 -320 L
+4344 -320 mt 4379 -317 L
+4379 -317 mt 4413 -313 L
+4413 -313 mt 4448 -309 L
+4448 -309 mt 4483 -305 L
+4483 -305 mt 4493 -304 L
+4493 -304 mt 4518 -301 L
+4518 -301 mt 4553 -296 L
+4553 -296 mt 4588 -290 L
+4588 -290 mt 4623 -284 L
+4623 -284 mt 4657 -278 L
+4657 -278 mt 4666 -276 L
+4666 -276 mt 4692 -271 L
+4692 -271 mt 4727 -264 L
+4727 -264 mt 4762 -257 L
+4762 -257 mt 4797 -249 L
+4797 -249 mt 4797 -249 L
+4797 -249 mt 4832 -241 L
+4832 -241 mt 4867 -232 L
+4867 -232 mt 4902 -223 L
+4902 -223 mt 4907 -221 L
+4907 -221 mt 4936 -213 L
+4936 -213 mt 4971 -203 L
+4971 -203 mt 5003 -194 L
+5003 -194 mt 5006 -193 L
+5006 -193 mt 5041 -182 L
+5041 -182 mt 5076 -171 L
+5076 -171 mt 5090 -166 L
+5090 -166 mt 5111 -159 L
+5111 -159 mt 5146 -148 L
+5146 -148 mt 5170 -139 L
+5170 -139 mt 5181 -135 L
+5181 -135 mt 5215 -123 L
+5215 -123 mt 5245 -111 L
+5245 -111 mt 5250 -109 L
+5250 -109 mt 5285  -95 L
+5285  -95 mt 5313  -84 L
+5313  -84 mt 5320  -81 L
+5320  -81 mt 5355  -66 L
+5355  -66 mt 5376  -56 L
+5376  -56 mt 5390  -50 L
+5390  -50 mt 5425  -34 L
+5425  -34 mt 5434  -29 L
+5434  -29 mt 5459  -16 L
+5459  -16 mt 5488   -1 L
+5488   -1 mt 5494    1 L
+5494    1 mt 5529   20 L
+5529   20 mt 5539   25 L
+5539   25 mt 5564   40 L
+5564   40 mt 5586   53 L
+5586   53 mt 5599   61 L
+5599   61 mt 5630   80 L
+5630   80 mt 5634   83 L
+5634   83 mt 5669  106 L
+5669  106 mt 5672  108 L
+5672  108 mt 5704  130 L
+5704  130 mt 5711  135 L
+5711  135 mt 5738  155 L
+5738  155 mt 5749  163 L
+5749  163 mt 5773  181 L
+5773  181 mt 5786  190 L
+5786  190 mt 5808  208 L
+5808  208 mt 5821  218 L
+5821  218 mt 5843  236 L
+5843  236 mt 5855  245 L
+5855  245 mt 5878  265 L
+5878  265 mt 5888  273 L
+5888  273 mt 5913  295 L
+5913  295 mt 5919  300 L
+5919  300 mt 5948  325 L
+5948  325 mt 5951  328 L
+5951  328 mt 5981  355 L
+5981  355 mt 5983  357 L
+5983  357 mt 6010  383 L
+6010  383 mt 6017  390 L
+6017  390 mt 6040  411 L
+6040  411 mt 6052  423 L
+6052  423 mt 6068  438 L
+6068  438 mt 6087  456 L
+6087  456 mt 6097  466 L
+6097  466 mt 6122  490 L
+6122  490 mt 6126  493 L
+6126  493 mt 6154  521 L
+6154  521 mt 6157  523 L
+6157  523 mt 6183  548 L
+6183  548 mt 6192  557 L
+6192  557 mt 6211  576 L
+6211  576 mt 6227  590 L
+6227  590 mt 6240  603 L
+6240  603 mt 6261  624 L
+6261  624 mt 6268  631 L
+6268  631 mt 6296  658 L
+6296  658 mt 6296  658 L
+6296  658 mt 6325  686 L
+6325  686 mt 6331  692 L
+6331  692 mt 6353  713 L
+6353  713 mt 6366  726 L
+6366  726 mt 6381  741 L
+6381  741 mt 6401  761 L
+6401  761 mt 6409  768 L
+6409  768 mt 6436  795 L
+6436  795 mt 6437  796 L
+6437  796 mt 6465  823 L
+6465  823 mt 6471  829 L
+6471  829 mt 6493  851 L
+6493  851 mt 6506  863 L
+6506  863 mt 6521  878 L
+6521  878 mt 6540  898 L
+6540  898 mt 6548  906 L
+6548  906 mt 6575  933 L
+6575  933 mt 6575  933 L
+6575  933 mt 6602  961 L
+6602  961 mt 6610  969 L
+6610  969 mt 6629  988 L
+6629  988 mt 6645 1006 L
+6645 1006 mt 6655 1016 L
+6655 1016 mt 6680 1043 L
+6680 1043 mt 6680 1043 L
+6680 1043 mt 6705 1071 L
+6705 1071 mt 6715 1081 L
+6715 1081 mt 6730 1098 L
+6730 1098 mt 6750 1121 L
+6750 1121 mt 6754 1126 L
+6754 1126 mt 6778 1153 L
+6778 1153 mt 6785 1161 L
+6785 1161 mt 6801 1181 L
+6801 1181 mt 6819 1203 L
+6819 1203 mt 6824 1208 L
+6824 1208 mt 6847 1236 L
+6847 1236 mt 6854 1245 L
+6854 1245 mt 6869 1263 L
+6869 1263 mt 6889 1290 L
+6889 1290 mt 6890 1291 L
+6890 1291 mt 6911 1318 L
+6911 1318 mt 6924 1336 L
+6924 1336 mt 6931 1346 L
+6931 1346 mt 6951 1373 L
+6951 1373 mt 6959 1384 L
+6959 1384 mt 6971 1401 L
+6971 1401 mt 6990 1428 L
+6990 1428 mt 6994 1435 L
+6994 1435 mt 7008 1456 L
+7008 1456 mt 7026 1484 L
+7026 1484 mt 7029 1488 L
+7029 1488 mt 7043 1511 L
+7043 1511 mt 7060 1539 L
+7060 1539 mt 7063 1545 L
+7063 1545 mt 7076 1566 L
+7076 1566 mt 7091 1594 L
+7091 1594 mt 7098 1607 L
+7098 1607 mt 7106 1621 L
+7106 1621 mt 7121 1649 L
+7121 1649 mt 7133 1674 L
+7133 1674 mt 7134 1676 L
+7134 1676 mt 7147 1704 L
+7147 1704 mt 7159 1731 L
+7159 1731 mt 7168 1753 L
+7168 1753 mt 7170 1759 L
+7170 1759 mt 7181 1786 L
+7181 1786 mt 7191 1814 L
+7191 1814 mt 7200 1841 L
+7200 1841 mt 7203 1853 L
+7203 1853 mt 7208 1869 L
+7208 1869 mt 7215 1896 L
+7215 1896 mt 7221 1924 L
+7221 1924 mt 7227 1951 L
+7227 1951 mt 7232 1979 L
+7232 1979 mt 7235 2006 L
+7235 2006 mt 7238 2031 L
+7168 2056 mt 7168 2061 L
+7168 2061 mt 7169 2089 L
+7169 2089 mt 7170 2116 L
+7170 2116 mt 7169 2144 L
+7169 2144 mt 7168 2171 L
+7168 2171 mt 7168 2178 L
+7168 2178 mt 7167 2199 L
+7167 2199 mt 7165 2226 L
+7165 2226 mt 7162 2254 L
+7162 2254 mt 7159 2281 L
+7159 2281 mt 7155 2309 L
+7155 2309 mt 7151 2336 L
+7151 2336 mt 7147 2364 L
+7147 2364 mt 7142 2391 L
+7142 2391 mt 7136 2419 L
+7136 2419 mt 7133 2432 L
+7133 2432 mt 7130 2446 L
+7130 2446 mt 7124 2474 L
+7124 2474 mt 7118 2502 L
+7118 2502 mt 7111 2529 L
+7111 2529 mt 7103 2557 L
+7103 2557 mt 7098 2573 L
+7098 2573 mt 7095 2584 L
+7095 2584 mt 7087 2612 L
+7087 2612 mt 7079 2639 L
+7079 2639 mt 7071 2667 L
+7071 2667 mt 7063 2689 L
+7063 2689 mt 7062 2694 L
+7062 2694 mt 7053 2722 L
+7053 2722 mt 7044 2749 L
+7044 2749 mt 7035 2777 L
+7035 2777 mt 7029 2796 L
+7029 2796 mt 7026 2804 L
+7026 2804 mt 7017 2832 L
+7017 2832 mt 7007 2859 L
+7007 2859 mt 6997 2887 L
+6997 2887 mt 6994 2897 L
+6994 2897 mt 6988 2914 L
+6988 2914 mt 6978 2942 L
+6978 2942 mt 6968 2969 L
+6968 2969 mt 6959 2993 L
+6959 2993 mt 6957 2997 L
+6957 2997 mt 6947 3024 L
+6947 3024 mt 6937 3052 L
+6937 3052 mt 6926 3079 L
+6926 3079 mt 6924 3084 L
+6924 3084 mt 6915 3107 L
+6915 3107 mt 6904 3134 L
+6904 3134 mt 6893 3162 L
+6893 3162 mt 6889 3173 L
+6889 3173 mt 6882 3189 L
+6882 3189 mt 6872 3217 L
+6872 3217 mt 6861 3244 L
+6861 3244 mt 6854 3261 L
+6854 3261 mt 6850 3272 L
+6850 3272 mt 6840 3299 L
+6840 3299 mt 6829 3327 L
+6829 3327 mt 6819 3352 L
+6819 3352 mt 6819 3354 L
+6819 3354 mt 6808 3382 L
+6808 3382 mt 6798 3409 L
+6798 3409 mt 6788 3437 L
+6788 3437 mt 6785 3445 L
+6785 3445 mt 6777 3464 L
+6777 3464 mt 6766 3492 L
+6766 3492 mt 6755 3519 L
+6755 3519 mt 6750 3534 L
+6750 3534 mt 6744 3547 L
+6744 3547 mt 6733 3575 L
+6733 3575 mt 6721 3602 L
+6721 3602 mt 6715 3617 L
+6715 3617 mt 6709 3630 L
+6709 3630 mt 6697 3657 L
+6697 3657 mt 6685 3685 L
+6685 3685 mt 6680 3697 L
+6680 3697 mt 6673 3712 L
+6673 3712 mt 6661 3740 L
+6661 3740 mt 6649 3767 L
+6649 3767 mt 6645 3775 L
+6645 3775 mt 6636 3795 L
+6636 3795 mt 6623 3822 L
+6623 3822 mt 6610 3849 L
+6610 3849 mt 6610 3850 L
+6610 3850 mt 6597 3877 L
+6597 3877 mt 6583 3905 L
+6583 3905 mt 6575 3920 L
+6575 3920 mt 6569 3932 L
+6569 3932 mt 6555 3960 L
+6555 3960 mt 6540 3986 L
+6540 3986 mt 6540 3987 L
+6540 3987 mt 6525 4015 L
+6525 4015 mt 6510 4042 L
+6510 4042 mt 6506 4050 L
+6506 4050 mt 6495 4070 L
+6495 4070 mt 6479 4097 L
+6479 4097 mt 6471 4114 L
+6471 4114 mt 6465 4125 L
+6465 4125 mt 6451 4152 L
+6451 4152 mt 6437 4180 L
+6437 4180 mt 6436 4182 L
+6436 4182 mt 6424 4207 L
+6424 4207 mt 6411 4235 L
+6411 4235 mt 6401 4257 L
+6401 4257 mt 6399 4262 L
+6399 4262 mt 6386 4290 L
+6386 4290 mt 6375 4317 L
+6375 4317 mt 6366 4339 L
+6366 4339 mt 6364 4345 L
+6364 4345 mt 6353 4372 L
+6353 4372 mt 6343 4400 L
+6343 4400 mt 6332 4427 L
+6332 4427 mt 6331 4428 L
+6331 4428 mt 6318 4455 L
+6318 4455 mt 6301 4482 L
+6301 4482 mt 6296 4488 L
+6296 4488 mt 6278 4510 L
+6278 4510 mt 6261 4526 L
+6261 4526 mt 6249 4537 L
+6249 4537 mt 6227 4551 L
+6227 4551 mt 6192 4558 L
+6192 4558 mt 6157 4557 L
+6157 4557 mt 6122 4554 L
+6122 4554 mt 6087 4538 L
+6087 4538 mt 6086 4537 L
+6086 4537 mt 6068 4510 L
+6068 4510 mt 6064 4482 L
+6064 4482 mt 6065 4455 L
+6065 4455 mt 6068 4427 L
+6068 4427 mt 6071 4400 L
+6071 4400 mt 6070 4372 L
+6070 4372 mt 6066 4345 L
+6066 4345 mt 6060 4317 L
+6060 4317 mt 6052 4290 L
+6052 4290 mt 6052 4289 L
+6052 4289 mt 6045 4262 L
+6045 4262 mt 6038 4235 L
+6038 4235 mt 6032 4207 L
+6032 4207 mt 6026 4180 L
+6026 4180 mt 6019 4152 L
+6019 4152 mt 6017 4144 L
+6017 4144 mt 6012 4125 L
+6012 4125 mt 6003 4097 L
+6003 4097 mt 5992 4070 L
+5992 4070 mt 5983 4050 L
+5983 4050 mt 5978 4042 L
+5978 4042 mt 5961 4015 L
+5961 4015 mt 5948 3994 L
+5948 3994 mt 5943 3987 L
+5943 3987 mt 5922 3960 L
+5922 3960 mt 5913 3948 L
+5913 3948 mt 5900 3932 L
+5900 3932 mt 5879 3905 L
+5879 3905 mt 5878 3904 L
+5878 3904 mt 5858 3877 L
+5858 3877 mt 5843 3859 L
+5843 3859 mt 5835 3850 L
+5835 3850 mt 5810 3822 L
+5810 3822 mt 5808 3821 L
+5808 3821 mt 5780 3795 L
+5780 3795 mt 5773 3789 L
+5773 3789 mt 5747 3767 L
+5747 3767 mt 5738 3761 L
+5738 3761 mt 5712 3740 L
+5712 3740 mt 5704 3733 L
+5704 3733 mt 5677 3712 L
+5677 3712 mt 5669 3706 L
+5669 3706 mt 5641 3685 L
+5641 3685 mt 5634 3679 L
+5634 3679 mt 5606 3657 L
+5606 3657 mt 5599 3651 L
+5599 3651 mt 5573 3630 L
+5573 3630 mt 5564 3622 L
+5564 3622 mt 5541 3602 L
+5541 3602 mt 5529 3590 L
+5529 3590 mt 5513 3575 L
+5513 3575 mt 5494 3555 L
+5494 3555 mt 5487 3547 L
+5487 3547 mt 5463 3519 L
+5463 3519 mt 5459 3516 L
+5459 3516 mt 5439 3492 L
+5439 3492 mt 5425 3474 L
+5425 3474 mt 5417 3464 L
+5417 3464 mt 5396 3437 L
+5396 3437 mt 5390 3428 L
+5390 3428 mt 5377 3409 L
+5377 3409 mt 5358 3382 L
+5358 3382 mt 5355 3378 L
+5355 3378 mt 5338 3354 L
+5338 3354 mt 5320 3328 L
+5320 3328 mt 5319 3327 L
+5319 3327 mt 5302 3299 L
+5302 3299 mt 5286 3272 L
+5286 3272 mt 5285 3269 L
+5285 3269 mt 5270 3244 L
+5270 3244 mt 5251 3217 L
+5251 3217 mt 5250 3215 L
+5250 3215 mt 5230 3189 L
+5230 3189 mt 5215 3173 L
+5215 3173 mt 5205 3162 L
+5205 3162 mt 5181 3138 L
+5181 3138 mt 5177 3134 L
+5177 3134 mt 5148 3107 L
+5148 3107 mt 5146 3105 L
+5146 3105 mt 5116 3079 L
+5116 3079 mt 5111 3075 L
+5111 3075 mt 5079 3052 L
+5079 3052 mt 5076 3050 L
+5076 3050 mt 5041 3029 L
+5041 3029 mt 5032 3024 L
+5032 3024 mt 5006 3012 L
+5006 3012 mt 4976 2997 L
+4976 2997 mt 4971 2995 L
+4971 2995 mt 4936 2976 L
+4936 2976 mt 4925 2969 L
+4925 2969 mt 4902 2955 L
+4902 2955 mt 4882 2942 L
+4882 2942 mt 4867 2931 L
+4867 2931 mt 4845 2914 L
+4845 2914 mt 4832 2903 L
+4832 2903 mt 4813 2887 L
+4813 2887 mt 4797 2871 L
+4797 2871 mt 4785 2859 L
+4785 2859 mt 4762 2835 L
+4762 2835 mt 4759 2832 L
+4759 2832 mt 4733 2804 L
+4733 2804 mt 4727 2798 L
+4727 2798 mt 4705 2777 L
+4705 2777 mt 4692 2764 L
+4692 2764 mt 4675 2749 L
+4675 2749 mt 4657 2733 L
+4657 2733 mt 4645 2722 L
+4645 2722 mt 4623 2701 L
+4623 2701 mt 4615 2694 L
+4615 2694 mt 4588 2669 L
+4588 2669 mt 4584 2667 L
+4584 2667 mt 4553 2643 L
+4553 2643 mt 4546 2639 L
+4546 2639 mt 4518 2623 L
+4518 2623 mt 4495 2612 L
+4495 2612 mt 4483 2605 L
+4483 2605 mt 4448 2589 L
+4448 2589 mt 4438 2584 L
+4438 2584 mt 4413 2572 L
+4413 2572 mt 4387 2557 L
+4387 2557 mt 4379 2552 L
+4379 2552 mt 4344 2530 L
+4344 2530 mt 4343 2529 L
+4343 2529 mt 4309 2507 L
+4309 2507 mt 4301 2502 L
+4301 2502 mt 4274 2484 L
+4274 2484 mt 4258 2474 L
+4258 2474 mt 4239 2463 L
+4239 2463 mt 4210 2446 L
+4210 2446 mt 4204 2443 L
+4204 2443 mt 4169 2427 L
+4169 2427 mt 4151 2419 L
+4151 2419 mt 4134 2413 L
+4134 2413 mt 4100 2400 L
+4100 2400 mt 4078 2391 L
+4078 2391 mt 4065 2386 L
+4065 2386 mt 4030 2372 L
+4030 2372 mt 4011 2364 L
+4011 2364 mt 3995 2357 L
+3995 2357 mt 3960 2339 L
+3960 2339 mt 3955 2336 L
+3955 2336 mt 3925 2320 L
+3925 2320 mt 3904 2309 L
+3904 2309 mt 3890 2300 L
+3890 2300 mt 3856 2281 L
+3856 2281 mt 3855 2281 L
+3855 2281 mt 3821 2262 L
+3821 2262 mt 3804 2254 L
+3804 2254 mt 3786 2245 L
+3786 2245 mt 3751 2229 L
+3751 2229 mt 3744 2226 L
+3744 2226 mt 3716 2214 L
+3716 2214 mt 3681 2203 L
+3681 2203 mt 3659 2199 L
+3659 2199 mt 3646 2196 L
+3646 2196 mt 3611 2195 L
+3611 2195 mt 3588 2199 L
+3588 2199 mt 3577 2201 L
+3577 2201 mt 3542 2214 L
+3542 2214 mt 3515 2226 L
+3515 2226 mt 3507 2230 L
+3507 2230 mt 3472 2245 L
+3472 2245 mt 3449 2254 L
+3449 2254 mt 3437 2258 L
+3437 2258 mt 3402 2270 L
+3402 2270 mt 3367 2279 L
+3367 2279 mt 3354 2281 L
+3354 2281 mt 3332 2286 L
+3332 2286 mt 3298 2293 L
+3298 2293 mt 3263 2298 L
+3263 2298 mt 3228 2304 L
+3228 2304 mt 3201 2309 L
+3201 2309 mt 3193 2310 L
+3193 2310 mt 3158 2318 L
+3158 2318 mt 3123 2328 L
+3123 2328 mt 3099 2336 L
+3099 2336 mt 3088 2340 L
+3088 2340 mt 3053 2354 L
+3053 2354 mt 3032 2364 L
+3032 2364 mt 3019 2370 L
+3019 2370 mt 2984 2387 L
+2984 2387 mt 2976 2391 L
+2976 2391 mt 2949 2406 L
+2949 2406 mt 2925 2419 L
+2925 2419 mt 2914 2425 L
+2914 2425 mt 2879 2446 L
+2879 2446 mt 2879 2446 L
+2879 2446 mt 2844 2469 L
+2844 2469 mt 2838 2474 L
+2838 2474 mt 2809 2495 L
+2809 2495 mt 2802 2502 L
+2802 2502 mt 2774 2523 L
+2774 2523 mt 2768 2529 L
+2768 2529 mt 2740 2555 L
+2740 2555 mt 2738 2557 L
+2738 2557 mt 2712 2584 L
+2712 2584 mt 2705 2592 L
+2705 2592 mt 2688 2612 L
+2688 2612 mt 2670 2636 L
+2670 2636 mt 2668 2639 L
+2668 2639 mt 2654 2667 L
+2654 2667 mt 2648 2694 L
+2648 2694 mt 2647 2722 L
+2647 2722 mt 2652 2749 L
+2652 2749 mt 2660 2777 L
+2660 2777 mt 2670 2803 L
+2670 2803 mt 2670 2804 L
+2670 2804 mt 2682 2832 L
+2682 2832 mt 2693 2859 L
+2693 2859 mt 2705 2886 L
+2705 2886 mt 2705 2887 L
+2705 2887 mt 2717 2914 L
+2717 2914 mt 2728 2942 L
+2728 2942 mt 2738 2969 L
+2738 2969 mt 2740 2973 L
+2740 2973 mt 2748 2997 L
+2748 2997 mt 2755 3024 L
+2755 3024 mt 2762 3052 L
+2762 3052 mt 2771 3079 L
+2771 3079 mt 2774 3085 L
+2774 3085 mt 2790 3107 L
+2790 3107 mt 2809 3122 L
+2809 3122 mt 2827 3134 L
+2827 3134 mt 2844 3143 L
+2844 3143 mt 2879 3162 L
+2879 3162 mt 2879 3162 L
+2879 3162 mt 2914 3181 L
+2914 3181 mt 2929 3189 L
+2929 3189 mt 2949 3201 L
+2949 3201 mt 2976 3217 L
+2976 3217 mt 2984 3222 L
+2984 3222 mt 3019 3244 L
+3019 3244 mt 3019 3244 L
+3019 3244 mt 3053 3271 L
+3053 3271 mt 3055 3272 L
+3055 3272 mt 3087 3299 L
+3087 3299 mt 3088 3300 L
+3088 3300 mt 3118 3327 L
+3118 3327 mt 3123 3333 L
+3123 3333 mt 3147 3354 L
+3147 3354 mt 3158 3365 L
+3158 3365 mt 3177 3382 L
+3177 3382 mt 3193 3398 L
+3193 3398 mt 3208 3409 L
+3208 3409 mt 3228 3428 L
+3228 3428 mt 3240 3437 L
+3240 3437 mt 3263 3458 L
+3263 3458 mt 3271 3464 L
+3271 3464 mt 3298 3488 L
+3298 3488 mt 3303 3492 L
+3303 3492 mt 3328 3519 L
+3328 3519 mt 3332 3527 L
+3332 3527 mt 3343 3547 L
+3343 3547 mt 3347 3575 L
+3347 3575 mt 3344 3602 L
+3344 3602 mt 3339 3630 L
+3339 3630 mt 3332 3648 L
+3332 3648 mt 3329 3657 L
+3329 3657 mt 3322 3685 L
+3322 3685 mt 3318 3712 L
+3318 3712 mt 3323 3740 L
+3323 3740 mt 3328 3767 L
+3328 3767 mt 3332 3780 L
+3332 3780 mt 3336 3795 L
+3336 3795 mt 3340 3822 L
+3340 3822 mt 3345 3850 L
+3345 3850 mt 3348 3877 L
+3348 3877 mt 3349 3905 L
+3349 3905 mt 3343 3932 L
+3343 3932 mt 3334 3960 L
+3334 3960 mt 3332 3975 L
+3332 3975 mt 3331 3987 L
+3331 3987 mt 3332 3991 L
+3332 3991 mt 3344 4015 L
+3344 4015 mt 3367 4038 L
+3367 4038 mt 3373 4042 L
+3373 4042 mt 3402 4061 L
+3402 4061 mt 3418 4070 L
+3418 4070 mt 3437 4080 L
+3437 4080 mt 3472 4096 L
+3472 4096 mt 3475 4097 L
+3475 4097 mt 3507 4116 L
+3507 4116 mt 3523 4125 L
+3523 4125 mt 3542 4147 L
+3542 4147 mt 3546 4152 L
+3546 4152 mt 3544 4180 L
+3544 4180 mt 3542 4183 L
+3542 4183 mt 3517 4207 L
+3517 4207 mt 3507 4213 L
+3507 4213 mt 3476 4235 L
+3476 4235 mt 3472 4238 L
+3472 4238 mt 3443 4262 L
+3443 4262 mt 3437 4269 L
+3437 4269 mt 3417 4290 L
+3417 4290 mt 3402 4312 L
+3402 4312 mt 3399 4317 L
+3399 4317 mt 3390 4345 L
+3390 4345 mt 3393 4372 L
+3393 4372 mt 3402 4387 L
+3402 4387 mt 3411 4400 L
+3411 4400 mt 3437 4424 L
+3437 4424 mt 3441 4427 L
+3441 4427 mt 3472 4449 L
+3472 4449 mt 3480 4455 L
+3480 4455 mt 3507 4473 L
+3507 4473 mt 3519 4482 L
+3519 4482 mt 3542 4502 L
+3542 4502 mt 3550 4510 L
+3550 4510 mt 3570 4537 L
+3570 4537 mt 3577 4551 L
+3577 4551 mt 3582 4565 L
+3582 4565 mt 3587 4592 L
+3587 4592 mt 3580 4620 L
+3580 4620 mt 3577 4627 L
+3577 4627 mt 3563 4648 L
+3563 4648 mt 3542 4673 L
+3542 4673 mt 3540 4675 L
+3540 4675 mt 3511 4703 L
+3511 4703 mt 3507 4707 L
+3507 4707 mt 3477 4730 L
+3477 4730 mt 3472 4734 L
+3472 4734 mt 3437 4758 L
+3437 4758 mt 3437 4758 L
+3437 4758 mt 3402 4779 L
+3402 4779 mt 3391 4785 L
+3391 4785 mt 3367 4798 L
+3367 4798 mt 3340 4813 L
+3340 4813 mt 3332 4816 L
+3332 4816 mt 3298 4833 L
+3298 4833 mt 3282 4840 L
+3282 4840 mt 3263 4849 L
+3263 4849 mt 3228 4863 L
+3228 4863 mt 3217 4868 L
+3217 4868 mt 3193 4877 L
+3193 4877 mt 3158 4890 L
+3158 4890 mt 3142 4895 L
+3142 4895 mt 3123 4902 L
+3123 4902 mt 3088 4913 L
+3088 4913 mt 3057 4923 L
+3057 4923 mt 3053 4924 L
+3053 4924 mt 3019 4934 L
+3019 4934 mt 2984 4943 L
+2984 4943 mt 2957 4950 L
+2957 4950 mt 2949 4952 L
+2949 4952 mt 2914 4961 L
+2914 4961 mt 2879 4968 L
+2879 4968 mt 2844 4976 L
+2844 4976 mt 2833 4978 L
+2833 4978 mt 2809 4982 L
+2809 4982 mt 2774 4988 L
+2774 4988 mt 2740 4994 L
+2740 4994 mt 2705 4999 L
+2705 4999 mt 2670 5003 L
+2670 5003 mt 2648 5005 L
+2648 5005 mt 2635 5007 L
+2635 5007 mt 2600 5010 L
+2600 5010 mt 2565 5012 L
+2565 5012 mt 2530 5014 L
+2530 5014 mt 2496 5016 L
+2496 5016 mt 2461 5017 L
+2461 5017 mt 2426 5017 L
+2426 5017 mt 2391 5017 L
+2391 5017 mt 2356 5016 L
+2356 5016 mt 2321 5015 L
+2321 5015 mt 2286 5013 L
+2286 5013 mt 2251 5010 L
+2251 5010 mt 2217 5007 L
+2217 5007 mt 2206 5005 L
+2206 5005 mt 2182 5002 L
+2182 5002 mt 2147 4998 L
+2147 4998 mt 2112 4992 L
+2112 4992 mt 2077 4986 L
+2077 4986 mt 2042 4979 L
+2042 4979 mt 2038 4978 L
+2038 4978 mt 2007 4971 L
+2007 4971 mt 1972 4962 L
+1972 4962 mt 1938 4953 L
+1938 4953 mt 1928 4950 L
+1928 4950 mt 1903 4943 L
+1903 4943 mt 1868 4932 L
+1868 4932 mt 1842 4923 L
+1842 4923 mt 1833 4919 L
+1833 4919 mt 1798 4906 L
+1798 4906 mt 1772 4895 L
+1772 4895 mt 1763 4891 L
+1763 4891 mt 1728 4875 L
+1728 4875 mt 1715 4868 L
+1715 4868 mt 1694 4856 L
+1694 4856 mt 1666 4840 L
+1666 4840 mt 1659 4836 L
+1659 4836 mt 1624 4813 L
+1624 4813 mt 1624 4813 L
+1624 4813 mt 1589 4787 L
+1589 4787 mt 1587 4785 L
+1587 4785 mt 1554 4758 L
+1554 4758 mt 1554 4757 L
+1554 4757 mt 1525 4730 L
+1525 4730 mt 1519 4723 L
+1519 4723 mt 1500 4703 L
+1500 4703 mt 1484 4684 L
+1484 4684 mt 1477 4675 L
+1477 4675 mt 1456 4648 L
+1456 4648 mt 1449 4638 L
+1449 4638 mt 1437 4620 L
+1437 4620 mt 1419 4592 L
+1419 4592 mt 1415 4585 L
+1415 4585 mt 1403 4565 L
+1403 4565 mt 1387 4537 L
+1387 4537 mt 1380 4523 L
+1380 4523 mt 1373 4510 L
+1373 4510 mt 1359 4482 L
+1359 4482 mt 1346 4455 L
+1346 4455 mt 1345 4453 L
+1345 4453 mt 1334 4427 L
+1334 4427 mt 1322 4400 L
+1322 4400 mt 1312 4372 L
+1312 4372 mt 1310 4368 L
+1310 4368 mt 1302 4345 L
+1302 4345 mt 1293 4317 L
+1293 4317 mt 1285 4290 L
+1285 4290 mt 1278 4262 L
+1278 4262 mt 1275 4249 L
+1275 4249 mt 1272 4235 L
+1272 4235 mt 1267 4207 L
+1267 4207 mt 1263 4180 L
+1263 4180 mt 1260 4152 L
+1260 4152 mt 1258 4125 L
+1258 4125 mt 1256 4097 L
+1256 4097 mt 1256 4070 L
+1256 4070 mt 1256 4042 L
+1256 4042 mt 1257 4015 L
+1257 4015 mt 1258 3987 L
+1258 3987 mt 1260 3960 L
+1260 3960 mt 1262 3932 L
+1262 3932 mt 1264 3905 L
+1264 3905 mt 1266 3877 L
+1266 3877 mt 1267 3850 L
+1267 3850 mt 1268 3822 L
+1268 3822 mt 1268 3795 L
+1268 3795 mt 1267 3767 L
+1267 3767 mt 1264 3740 L
+1264 3740 mt 1259 3712 L
+1259 3712 mt 1253 3685 L
+1253 3685 mt 1243 3657 L
+1243 3657 mt 1240 3650 L
+1240 3650 mt 1232 3630 L
+1232 3630 mt 1217 3602 L
+1217 3602 mt 1205 3585 L
+1205 3585 mt 1199 3575 L
+1199 3575 mt 1177 3547 L
+1177 3547 mt 1170 3539 L
+1170 3539 mt 1152 3519 L
+1152 3519 mt 1136 3503 L
+1136 3503 mt 1124 3492 L
+1124 3492 mt 1101 3472 L
+1101 3472 mt 1092 3464 L
+1092 3464 mt 1066 3445 L
+1066 3445 mt 1056 3437 L
+1056 3437 mt 1031 3419 L
+1031 3419 mt 1018 3409 L
+1018 3409 mt  996 3394 L
+ 996 3394 mt  978 3382 L
+ 978 3382 mt  961 3371 L
+ 961 3371 mt  937 3354 L
+ 937 3354 mt  926 3347 L
+ 926 3347 mt  896 3327 L
+ 896 3327 mt  892 3324 L
+ 892 3324 mt  857 3301 L
+ 857 3301 mt  855 3299 L
+ 855 3299 mt  822 3278 L
+ 822 3278 mt  813 3272 L
+ 813 3272 mt  787 3254 L
+ 787 3254 mt  772 3244 L
+ 772 3244 mt  752 3231 L
+ 752 3231 mt  732 3217 L
+ 732 3217 mt  717 3207 L
+ 717 3207 mt  693 3189 L
+ 693 3189 mt  682 3182 L
+ 682 3182 mt  655 3162 L
+ 655 3162 mt  647 3156 L
+ 647 3156 mt  619 3134 L
+ 619 3134 mt  613 3129 L
+ 613 3129 mt  584 3107 L
+ 584 3107 mt  578 3102 L
+ 578 3102 mt  551 3079 L
+ 551 3079 mt  543 3073 L
+ 543 3073 mt  519 3052 L
+ 519 3052 mt  508 3042 L
+ 508 3042 mt  488 3024 L
+ 488 3024 mt  473 3010 L
+ 473 3010 mt  460 2997 L
+ 460 2997 mt  438 2975 L
+ 438 2975 mt  433 2969 L
+ 433 2969 mt  408 2942 L
+ 408 2942 mt  403 2937 L
+ 403 2937 mt  384 2914 L
+ 384 2914 mt  368 2895 L
+ 368 2895 mt  362 2887 L
+ 362 2887 mt  341 2859 L
+ 341 2859 mt  334 2849 L
+ 334 2849 mt  321 2832 L
+ 321 2832 mt  303 2804 L
+ 303 2804 mt  299 2798 L
+ 299 2798 mt  285 2777 L
+ 285 2777 mt  269 2749 L
+ 269 2749 mt  264 2740 L
+ 264 2740 mt  253 2722 L
+ 253 2722 mt  239 2694 L
+ 239 2694 mt  229 2674 L
+ 229 2674 mt  225 2667 L
+ 225 2667 mt  213 2639 L
+ 213 2639 mt  201 2612 L
+ 201 2612 mt  194 2592 L
+ 194 2592 mt  191 2584 L
+ 191 2584 mt  182 2557 L
+ 182 2557 mt  174 2529 L
+ 174 2529 mt  167 2502 L
+ 167 2502 mt  161 2474 L
+ 161 2474 mt  159 2464 L
+ 159 2464 mt  156 2446 L
+ 156 2446 mt  152 2419 L
+ 152 2419 mt  149 2391 L
+ 149 2391 mt  146 2364 L
+ 146 2364 mt  144 2336 L
+ 144 2336 mt  143 2309 L
+ 143 2309 mt  142 2281 L
+ 142 2281 mt  142 2254 L
+ 142 2254 mt  142 2226 L
+ 142 2226 mt  143 2199 L
+ 143 2199 mt  145 2171 L
+ 145 2171 mt  147 2144 L
+ 147 2144 mt  150 2116 L
+ 150 2116 mt  154 2089 L
+ 154 2089 mt  158 2061 L
+ 158 2061 mt  159 2051 L
+ 159 2051 mt  162 2034 L
+ 162 2034 mt  167 2006 L
+ 167 2006 mt  173 1979 L
+ 173 1979 mt  178 1951 L
+ 178 1951 mt  185 1924 L
+ 185 1924 mt  191 1896 L
+ 191 1896 mt  194 1884 L
+ 194 1884 mt  198 1869 L
+ 198 1869 mt  204 1841 L
+ 204 1841 mt  211 1814 L
+ 211 1814 mt  218 1786 L
+ 218 1786 mt  225 1759 L
+ 225 1759 mt  229 1744 L
+ 229 1744 mt  232 1731 L
+ 232 1731 mt  239 1704 L
+ 239 1704 mt  246 1676 L
+ 246 1676 mt  253 1649 L
+ 253 1649 mt  259 1621 L
+ 259 1621 mt  264 1599 L
+ 264 1599 mt  265 1594 L
+ 265 1594 mt  271 1566 L
+ 271 1566 mt  277 1539 L
+ 277 1539 mt  282 1511 L
+ 282 1511 mt  288 1484 L
+ 288 1484 mt  293 1456 L
+ 293 1456 mt  299 1429 L
+ 299 1429 mt  299 1428 L
+ 299 1428 mt  304 1401 L
+ 304 1401 mt  310 1373 L
+ 310 1373 mt  316 1346 L
+ 316 1346 mt  322 1318 L
+ 322 1318 mt  328 1291 L
+ 328 1291 mt  334 1265 L
+ 334 1265 mt  334 1263 L
+ 334 1263 mt  341 1236 L
+ 341 1236 mt  347 1208 L
+ 347 1208 mt  355 1181 L
+ 355 1181 mt  363 1153 L
+ 363 1153 mt  368 1134 L
+ 368 1134 mt  371 1126 L
+ 371 1126 mt  379 1098 L
+ 379 1098 mt  389 1071 L
+ 389 1071 mt  398 1043 L
+ 398 1043 mt  403 1030 L
+ 403 1030 mt  409 1016 L
+ 409 1016 mt  420  988 L
+ 420  988 mt  431  961 L
+ 431  961 mt  438  945 L
+ 438  945 mt  443  933 L
+ 443  933 mt  456  906 L
+ 456  906 mt  469  878 L
+ 469  878 mt  473  870 L
+ 473  870 mt  483  851 L
+ 483  851 mt  497  823 L
+ 497  823 mt  508  804 L
+ 508  804 mt  512  796 L
+ 512  796 mt  528  768 L
+ 528  768 mt  543  744 L
+ 543  744 mt  545  741 L
+ 545  741 mt  562  713 L
+ 562  713 mt  578  689 L
+ 578  689 mt  580  686 L
+ 580  686 mt  598  658 L
+ 598  658 mt  613  638 L
+ 613  638 mt  618  631 L
+ 618  631 mt  638  603 L
+ 638  603 mt  647  591 L
+ 647  591 mt  659  576 L
+ 659  576 mt  681  548 L
+ 681  548 mt  682  547 L
+ 682  547 mt  704  521 L
+ 704  521 mt  717  505 L
+ 717  505 mt  727  493 L
+ 727  493 mt  752  466 L
+ 752  466 mt  752  466 L
+ 752  466 mt  779  438 L
+ 779  438 mt  787  430 L
+ 787  430 mt  807  411 L
+ 807  411 mt  822  397 L
+ 822  397 mt  837  383 L
+ 837  383 mt  857  366 L
+ 857  366 mt  869  355 L
+ 869  355 mt  892  338 L
+ 892  338 mt  905  328 L
+ 905  328 mt  926  312 L
+ 926  312 mt  943  300 L
+ 943  300 mt  961  288 L
+ 961  288 mt  986  273 L
+ 986  273 mt  996  266 L
+ 996  266 mt 1031  246 L
+1031  246 mt 1032  245 L
+1032  245 mt 1066  227 L
+1066  227 mt 1084  218 L
+1084  218 mt 1101  209 L
+1101  209 mt 1136  193 L
+1136  193 mt 1141  190 L
+1141  190 mt 1170  178 L
+1170  178 mt 1205  164 L
+1205  164 mt 1207  163 L
+1207  163 mt 1240  150 L
+1240  150 mt 1275  138 L
+1275  138 mt 1284  135 L
+1284  135 mt 1310  127 L
+1310  127 mt 1345  116 L
+1345  116 mt 1373  108 L
+1373  108 mt 1380  106 L
+1380  106 mt 1415   96 L
+1415   96 mt 1449   87 L
+1449   87 mt 1476   80 L
+1476   80 mt 1484   78 L
+1484   78 mt 1519   70 L
+1519   70 mt 1554   61 L
+1554   61 mt 1589   54 L
+1589   54 mt 1592   53 L
+1592   53 mt 1624   46 L
+1624   46 mt 1659   38 L
+1659   38 mt 1694   31 L
+1694   31 mt 1722   25 L
+1722   25 mt 1728   24 L
+1728   24 mt 1763   17 L
+1763   17 mt 1798   10 L
+1798   10 mt 1833    4 L
+1833    4 mt 1868   -1 L
+1868   -1 mt 1868   -1 L
+1868   -1 mt 1903   -7 L
+1903   -7 mt 1938  -14 L
+1938  -14 mt 1972  -19 L
+1972  -19 mt 2007  -25 L
+2007  -25 mt 2029  -29 L
+2029  -29 mt 2042  -31 L
+2042  -31 mt 2077  -36 L
+2077  -36 mt 2112  -42 L
+2112  -42 mt 2147  -47 L
+2147  -47 mt 2182  -52 L
+2182  -52 mt 2208  -56 L
+2208  -56 mt 2217  -57 L
+2217  -57 mt 2251  -63 L
+2251  -63 mt 2286  -68 L
+2286  -68 mt 2321  -74 L
+2321  -74 mt 2356  -79 L
+2356  -79 mt 2382  -84 L
+2382  -84 mt 2391  -85 L
+2391  -85 mt 2426  -91 L
+2426  -91 mt 2461  -97 L
+2461  -97 mt 2496 -103 L
+2496 -103 mt 2530 -109 L
+2530 -109 mt 2547 -111 L
+2547 -111 mt 2565 -114 L
+2565 -114 mt 2600 -120 L
+2600 -120 mt 2635 -125 L
+2635 -125 mt 2670 -131 L
+2670 -131 mt 2705 -136 L
+2705 -136 mt 2722 -139 L
+2722 -139 mt 2740 -141 L
+2740 -141 mt 2774 -147 L
+2774 -147 mt 2809 -152 L
+2809 -152 mt 2844 -157 L
+2844 -157 mt 2879 -162 L
+2879 -162 mt 2906 -166 L
+2906 -166 mt 2914 -167 L
+2914 -167 mt 2949 -172 L
+2949 -172 mt 2984 -178 L
+2984 -178 mt 3019 -183 L
+3019 -183 mt 3053 -188 L
+3053 -188 mt 3088 -193 L
+3088 -193 mt 3096 -194 L
+3096 -194 mt 3123 -198 L
+3123 -198 mt 3158 -203 L
+3158 -203 mt 3193 -208 L
+3193 -208 mt 3228 -213 L
+3228 -213 mt 3263 -217 L
+3263 -217 mt 3292 -221 L
+3292 -221 mt 3298 -222 L
+3298 -222 mt 3332 -227 L
+3332 -227 mt 3367 -231 L
+3367 -231 mt 3402 -235 L
+3402 -235 mt 3437 -239 L
+3437 -239 mt 3472 -243 L
+3472 -243 mt 3507 -247 L
+3507 -247 mt 3527 -249 L
+3527 -249 mt 3542 -250 L
+3542 -250 mt 3577 -253 L
+3577 -253 mt 3611 -256 L
+3611 -256 mt 3646 -259 L
+3646 -259 mt 3681 -262 L
+3681 -262 mt 3716 -264 L
+3716 -264 mt 3751 -266 L
+3751 -266 mt 3786 -268 L
+3786 -268 mt 3821 -270 L
+3821 -270 mt 3855 -272 L
+3855 -272 mt 3890 -274 L
+3890 -274 mt 3925 -275 L
+3925 -275 mt 3960 -276 L
+3960 -276 mt 3971 -276 L
+3971 -276 mt 3995 -277 L
+3995 -277 mt 4030 -278 L
+4030 -278 mt 4065 -278 L
+4065 -278 mt 4100 -278 L
+4100 -278 mt 4134 -278 L
+4134 -278 mt 4169 -277 L
+4169 -277 mt 4204 -277 L
+4204 -277 mt 4217 -276 L
+4217 -276 mt 4239 -276 L
+4239 -276 mt 4274 -274 L
+4274 -274 mt 4309 -272 L
+4309 -272 mt 4344 -270 L
+4344 -270 mt 4379 -268 L
+4379 -268 mt 4413 -265 L
+4413 -265 mt 4448 -262 L
+4448 -262 mt 4483 -258 L
+4483 -258 mt 4518 -254 L
+4518 -254 mt 4553 -250 L
+4553 -250 mt 4562 -249 L
+4562 -249 mt 4588 -245 L
+4588 -245 mt 4623 -240 L
+4623 -240 mt 4657 -235 L
+4657 -235 mt 4692 -228 L
+4692 -228 mt 4727 -222 L
+4727 -222 mt 4730 -221 L
+4730 -221 mt 4762 -215 L
+4762 -215 mt 4797 -208 L
+4797 -208 mt 4832 -200 L
+4832 -200 mt 4860 -194 L
+4860 -194 mt 4867 -192 L
+4867 -192 mt 4902 -184 L
+4902 -184 mt 4936 -175 L
+4936 -175 mt 4967 -166 L
+4967 -166 mt 4971 -165 L
+4971 -165 mt 5006 -155 L
+5006 -155 mt 5041 -145 L
+5041 -145 mt 5061 -139 L
+5061 -139 mt 5076 -134 L
+5076 -134 mt 5111 -123 L
+5111 -123 mt 5146 -111 L
+5146 -111 mt 5146 -111 L
+5146 -111 mt 5181 -100 L
+5181 -100 mt 5215  -87 L
+5215  -87 mt 5224  -84 L
+5224  -84 mt 5250  -74 L
+5250  -74 mt 5285  -60 L
+5285  -60 mt 5294  -56 L
+5294  -56 mt 5320  -46 L
+5320  -46 mt 5355  -31 L
+5355  -31 mt 5359  -29 L
+5359  -29 mt 5390  -15 L
+5390  -15 mt 5417   -1 L
+5417   -1 mt 5425    1 L
+5425    1 mt 5459   19 L
+5459   19 mt 5472   25 L
+5472   25 mt 5494   37 L
+5494   37 mt 5522   53 L
+5522   53 mt 5529   57 L
+5529   57 mt 5564   78 L
+5564   78 mt 5568   80 L
+5568   80 mt 5599   99 L
+5599   99 mt 5612  108 L
+5612  108 mt 5634  122 L
+5634  122 mt 5653  135 L
+5653  135 mt 5669  146 L
+5669  146 mt 5692  163 L
+5692  163 mt 5704  171 L
+5704  171 mt 5730  190 L
+5730  190 mt 5738  197 L
+5738  197 mt 5765  218 L
+5765  218 mt 5773  224 L
+5773  224 mt 5800  245 L
+5800  245 mt 5808  252 L
+5808  252 mt 5833  273 L
+5833  273 mt 5843  281 L
+5843  281 mt 5866  300 L
+5866  300 mt 5878  311 L
+5878  311 mt 5897  328 L
+5897  328 mt 5913  342 L
+5913  342 mt 5928  355 L
+5928  355 mt 5948  374 L
+5948  374 mt 5958  383 L
+5958  383 mt 5983  406 L
+5983  406 mt 5987  411 L
+5987  411 mt 6016  438 L
+6016  438 mt 6017  439 L
+6017  439 mt 6045  466 L
+6045  466 mt 6052  473 L
+6052  473 mt 6073  493 L
+6073  493 mt 6087  507 L
+6087  507 mt 6101  521 L
+6101  521 mt 6122  541 L
+6122  541 mt 6130  548 L
+6130  548 mt 6157  575 L
+6157  575 mt 6158  576 L
+6158  576 mt 6186  603 L
+6186  603 mt 6192  609 L
+6192  609 mt 6214  631 L
+6214  631 mt 6227  643 L
+6227  643 mt 6242  658 L
+6242  658 mt 6261  677 L
+6261  677 mt 6270  686 L
+6270  686 mt 6296  712 L
+6296  712 mt 6298  713 L
+6298  713 mt 6326  741 L
+6326  741 mt 6331  746 L
+6331  746 mt 6353  768 L
+6353  768 mt 6366  781 L
+6366  781 mt 6381  796 L
+6381  796 mt 6401  816 L
+6401  816 mt 6409  823 L
+6409  823 mt 6436  850 L
+6436  850 mt 6436  851 L
+6436  851 mt 6464  878 L
+6464  878 mt 6471  885 L
+6471  885 mt 6491  906 L
+6491  906 mt 6506  920 L
+6506  920 mt 6518  933 L
+6518  933 mt 6540  956 L
+6540  956 mt 6545  961 L
+6545  961 mt 6572  988 L
+6572  988 mt 6575  992 L
+6575  992 mt 6598 1016 L
+6598 1016 mt 6610 1029 L
+6610 1029 mt 6623 1043 L
+6623 1043 mt 6645 1067 L
+6645 1067 mt 6649 1071 L
+6649 1071 mt 6673 1098 L
+6673 1098 mt 6680 1106 L
+6680 1106 mt 6698 1126 L
+6698 1126 mt 6715 1146 L
+6715 1146 mt 6722 1153 L
+6722 1153 mt 6745 1181 L
+6745 1181 mt 6750 1187 L
+6750 1187 mt 6768 1208 L
+6768 1208 mt 6785 1229 L
+6785 1229 mt 6790 1236 L
+6790 1236 mt 6812 1263 L
+6812 1263 mt 6819 1273 L
+6819 1273 mt 6833 1291 L
+6833 1291 mt 6854 1318 L
+6854 1318 mt 6854 1319 L
+6854 1319 mt 6874 1346 L
+6874 1346 mt 6889 1367 L
+6889 1367 mt 6894 1373 L
+6894 1373 mt 6913 1401 L
+6913 1401 mt 6924 1417 L
+6924 1417 mt 6932 1428 L
+6932 1428 mt 6949 1456 L
+6949 1456 mt 6959 1471 L
+6959 1471 mt 6967 1484 L
+6967 1484 mt 6983 1511 L
+6983 1511 mt 6994 1529 L
+6994 1529 mt 6999 1539 L
+6999 1539 mt 7015 1566 L
+7015 1566 mt 7029 1592 L
+7029 1592 mt 7029 1594 L
+7029 1594 mt 7044 1621 L
+7044 1621 mt 7057 1649 L
+7057 1649 mt 7063 1662 L
+7063 1662 mt 7070 1676 L
+7070 1676 mt 7082 1704 L
+7082 1704 mt 7094 1731 L
+7094 1731 mt 7098 1743 L
+7098 1743 mt 7105 1759 L
+7105 1759 mt 7115 1786 L
+7115 1786 mt 7124 1814 L
+7124 1814 mt 7132 1841 L
+7132 1841 mt 7133 1845 L
+7133 1845 mt 7140 1869 L
+7140 1869 mt 7146 1896 L
+7146 1896 mt 7152 1924 L
+7152 1924 mt 7157 1951 L
+7157 1951 mt 7161 1979 L
+7161 1979 mt 7164 2006 L
+7164 2006 mt 7167 2034 L
+7167 2034 mt 7168 2056 L
+7098 2005 mt 7098 2006 L
+7098 2006 mt 7101 2034 L
+7101 2034 mt 7102 2061 L
+7102 2061 mt 7103 2089 L
+7103 2089 mt 7103 2116 L
+7103 2116 mt 7102 2144 L
+7102 2144 mt 7101 2171 L
+7101 2171 mt 7099 2199 L
+7099 2199 mt 7098 2210 L
+7098 2210 mt 7097 2226 L
+7097 2226 mt 7094 2254 L
+7094 2254 mt 7091 2281 L
+7091 2281 mt 7087 2309 L
+7087 2309 mt 7082 2336 L
+7082 2336 mt 7077 2364 L
+7077 2364 mt 7071 2391 L
+7071 2391 mt 7065 2419 L
+7065 2419 mt 7063 2426 L
+7063 2426 mt 7059 2446 L
+7059 2446 mt 7052 2474 L
+7052 2474 mt 7045 2502 L
+7045 2502 mt 7037 2529 L
+7037 2529 mt 7029 2557 L
+7029 2557 mt 7029 2558 L
+7029 2558 mt 7021 2584 L
+7021 2584 mt 7012 2612 L
+7012 2612 mt 7003 2639 L
+7003 2639 mt 6994 2667 L
+6994 2667 mt 6994 2668 L
+6994 2668 mt 6985 2694 L
+6985 2694 mt 6976 2722 L
+6976 2722 mt 6967 2749 L
+6967 2749 mt 6959 2771 L
+6959 2771 mt 6957 2777 L
+6957 2777 mt 6947 2804 L
+6947 2804 mt 6937 2832 L
+6937 2832 mt 6928 2859 L
+6928 2859 mt 6924 2869 L
+6924 2869 mt 6918 2887 L
+6918 2887 mt 6908 2914 L
+6908 2914 mt 6898 2942 L
+6898 2942 mt 6889 2966 L
+6889 2966 mt 6888 2969 L
+6888 2969 mt 6878 2997 L
+6878 2997 mt 6868 3024 L
+6868 3024 mt 6857 3052 L
+6857 3052 mt 6854 3060 L
+6854 3060 mt 6847 3079 L
+6847 3079 mt 6836 3107 L
+6836 3107 mt 6826 3134 L
+6826 3134 mt 6819 3151 L
+6819 3151 mt 6815 3162 L
+6815 3162 mt 6805 3189 L
+6805 3189 mt 6794 3217 L
+6794 3217 mt 6785 3243 L
+6785 3243 mt 6784 3244 L
+6784 3244 mt 6774 3272 L
+6774 3272 mt 6764 3299 L
+6764 3299 mt 6755 3327 L
+6755 3327 mt 6750 3341 L
+6750 3341 mt 6745 3354 L
+6745 3354 mt 6735 3382 L
+6735 3382 mt 6726 3409 L
+6726 3409 mt 6716 3437 L
+6716 3437 mt 6715 3439 L
+6715 3439 mt 6706 3464 L
+6706 3464 mt 6695 3492 L
+6695 3492 mt 6684 3519 L
+6684 3519 mt 6680 3531 L
+6680 3531 mt 6674 3547 L
+6674 3547 mt 6662 3575 L
+6662 3575 mt 6651 3602 L
+6651 3602 mt 6645 3615 L
+6645 3615 mt 6639 3630 L
+6639 3630 mt 6627 3657 L
+6627 3657 mt 6615 3685 L
+6615 3685 mt 6610 3695 L
+6610 3695 mt 6603 3712 L
+6603 3712 mt 6590 3740 L
+6590 3740 mt 6578 3767 L
+6578 3767 mt 6575 3772 L
+6575 3772 mt 6565 3795 L
+6565 3795 mt 6552 3822 L
+6552 3822 mt 6540 3846 L
+6540 3846 mt 6539 3850 L
+6539 3850 mt 6525 3877 L
+6525 3877 mt 6511 3905 L
+6511 3905 mt 6506 3916 L
+6506 3916 mt 6498 3932 L
+6498 3932 mt 6483 3960 L
+6483 3960 mt 6471 3983 L
+6471 3983 mt 6468 3987 L
+6468 3987 mt 6453 4015 L
+6453 4015 mt 6437 4042 L
+6437 4042 mt 6436 4044 L
+6436 4044 mt 6421 4070 L
+6421 4070 mt 6406 4097 L
+6406 4097 mt 6401 4106 L
+6401 4106 mt 6391 4125 L
+6391 4125 mt 6378 4152 L
+6378 4152 mt 6366 4179 L
+6366 4179 mt 6366 4180 L
+6366 4180 mt 6354 4207 L
+6354 4207 mt 6341 4235 L
+6341 4235 mt 6331 4255 L
+6331 4255 mt 6327 4262 L
+6327 4262 mt 6313 4290 L
+6313 4290 mt 6303 4317 L
+6303 4317 mt 6296 4342 L
+6296 4342 mt 6295 4345 L
+6295 4345 mt 6290 4372 L
+6290 4372 mt 6286 4400 L
+6286 4400 mt 6280 4427 L
+6280 4427 mt 6270 4455 L
+6270 4455 mt 6261 4468 L
+6261 4468 mt 6250 4482 L
+6250 4482 mt 6227 4505 L
+6227 4505 mt 6216 4510 L
+6216 4510 mt 6192 4519 L
+6192 4519 mt 6162 4510 L
+6162 4510 mt 6157 4507 L
+6157 4507 mt 6136 4482 L
+6136 4482 mt 6129 4455 L
+6129 4455 mt 6130 4427 L
+6130 4427 mt 6132 4400 L
+6132 4400 mt 6132 4372 L
+6132 4372 mt 6131 4345 L
+6131 4345 mt 6129 4317 L
+6129 4317 mt 6125 4290 L
+6125 4290 mt 6122 4276 L
+6122 4276 mt 6119 4262 L
+6119 4262 mt 6113 4235 L
+6113 4235 mt 6107 4207 L
+6107 4207 mt 6102 4180 L
+6102 4180 mt 6096 4152 L
+6096 4152 mt 6090 4125 L
+6090 4125 mt 6087 4112 L
+6087 4112 mt 6084 4097 L
+6084 4097 mt 6076 4070 L
+6076 4070 mt 6067 4042 L
+6067 4042 mt 6056 4015 L
+6056 4015 mt 6052 4006 L
+6052 4006 mt 6043 3987 L
+6043 3987 mt 6029 3960 L
+6029 3960 mt 6017 3938 L
+6017 3938 mt 6013 3932 L
+6013 3932 mt 5995 3905 L
+5995 3905 mt 5983 3885 L
+5983 3885 mt 5977 3877 L
+5977 3877 mt 5958 3850 L
+5958 3850 mt 5948 3835 L
+5948 3835 mt 5938 3822 L
+5938 3822 mt 5914 3795 L
+5914 3795 mt 5913 3793 L
+5913 3793 mt 5883 3767 L
+5883 3767 mt 5878 3763 L
+5878 3763 mt 5845 3740 L
+5845 3740 mt 5843 3738 L
+5843 3738 mt 5808 3717 L
+5808 3717 mt 5800 3712 L
+5800 3712 mt 5773 3698 L
+5773 3698 mt 5750 3685 L
+5750 3685 mt 5738 3678 L
+5738 3678 mt 5704 3658 L
+5704 3658 mt 5703 3657 L
+5703 3657 mt 5669 3635 L
+5669 3635 mt 5660 3630 L
+5660 3630 mt 5634 3610 L
+5634 3610 mt 5624 3602 L
+5624 3602 mt 5599 3581 L
+5599 3581 mt 5592 3575 L
+5592 3575 mt 5565 3547 L
+5565 3547 mt 5564 3547 L
+5564 3547 mt 5540 3519 L
+5540 3519 mt 5529 3506 L
+5529 3506 mt 5517 3492 L
+5517 3492 mt 5495 3464 L
+5495 3464 mt 5494 3463 L
+5494 3463 mt 5475 3437 L
+5475 3437 mt 5459 3413 L
+5459 3413 mt 5457 3409 L
+5457 3409 mt 5439 3382 L
+5439 3382 mt 5425 3357 L
+5425 3357 mt 5423 3354 L
+5423 3354 mt 5407 3327 L
+5407 3327 mt 5393 3299 L
+5393 3299 mt 5390 3292 L
+5390 3292 mt 5380 3272 L
+5380 3272 mt 5367 3244 L
+5367 3244 mt 5355 3218 L
+5355 3218 mt 5355 3217 L
+5355 3217 mt 5338 3189 L
+5338 3189 mt 5320 3168 L
+5320 3168 mt 5315 3162 L
+5315 3162 mt 5287 3134 L
+5287 3134 mt 5285 3133 L
+5285 3133 mt 5256 3107 L
+5256 3107 mt 5250 3102 L
+5250 3102 mt 5225 3079 L
+5225 3079 mt 5215 3071 L
+5215 3071 mt 5194 3052 L
+5194 3052 mt 5181 3039 L
+5181 3039 mt 5161 3024 L
+5161 3024 mt 5146 3014 L
+5146 3014 mt 5114 2997 L
+5114 2997 mt 5111 2996 L
+5111 2996 mt 5076 2981 L
+5076 2981 mt 5047 2969 L
+5047 2969 mt 5041 2967 L
+5041 2967 mt 5006 2951 L
+5006 2951 mt 4988 2942 L
+4988 2942 mt 4971 2933 L
+4971 2933 mt 4937 2914 L
+4937 2914 mt 4936 2914 L
+4936 2914 mt 4902 2892 L
+4902 2892 mt 4895 2887 L
+4895 2887 mt 4867 2864 L
+4867 2864 mt 4862 2859 L
+4862 2859 mt 4835 2832 L
+4835 2832 mt 4832 2828 L
+4832 2828 mt 4810 2804 L
+4810 2804 mt 4797 2789 L
+4797 2789 mt 4786 2777 L
+4786 2777 mt 4762 2750 L
+4762 2750 mt 4761 2749 L
+4761 2749 mt 4734 2722 L
+4734 2722 mt 4727 2713 L
+4727 2713 mt 4709 2694 L
+4709 2694 mt 4692 2674 L
+4692 2674 mt 4685 2667 L
+4685 2667 mt 4663 2639 L
+4663 2639 mt 4657 2630 L
+4657 2630 mt 4643 2612 L
+4643 2612 mt 4625 2584 L
+4625 2584 mt 4623 2580 L
+4623 2580 mt 4605 2557 L
+4605 2557 mt 4588 2529 L
+4588 2529 mt 4588 2529 L
+4588 2529 mt 4561 2502 L
+4561 2502 mt 4553 2496 L
+4553 2496 mt 4518 2475 L
+4518 2475 mt 4515 2474 L
+4515 2474 mt 4483 2463 L
+4483 2463 mt 4448 2452 L
+4448 2452 mt 4432 2446 L
+4432 2446 mt 4413 2440 L
+4413 2440 mt 4379 2427 L
+4379 2427 mt 4361 2419 L
+4361 2419 mt 4344 2412 L
+4344 2412 mt 4309 2395 L
+4309 2395 mt 4301 2391 L
+4301 2391 mt 4274 2380 L
+4274 2380 mt 4239 2366 L
+4239 2366 mt 4232 2364 L
+4232 2364 mt 4204 2354 L
+4204 2354 mt 4169 2344 L
+4169 2344 mt 4145 2336 L
+4145 2336 mt 4134 2333 L
+4134 2333 mt 4100 2322 L
+4100 2322 mt 4065 2310 L
+4065 2310 mt 4062 2309 L
+4062 2309 mt 4030 2294 L
+4030 2294 mt 4007 2281 L
+4007 2281 mt 3995 2274 L
+3995 2274 mt 3969 2254 L
+3969 2254 mt 3960 2247 L
+3960 2247 mt 3935 2226 L
+3935 2226 mt 3925 2219 L
+3925 2219 mt 3898 2199 L
+3898 2199 mt 3890 2193 L
+3890 2193 mt 3855 2174 L
+3855 2174 mt 3849 2171 L
+3849 2171 mt 3821 2155 L
+3821 2155 mt 3802 2144 L
+3802 2144 mt 3786 2134 L
+3786 2134 mt 3756 2116 L
+3756 2116 mt 3751 2113 L
+3751 2113 mt 3716 2091 L
+3716 2091 mt 3712 2089 L
+3712 2089 mt 3681 2072 L
+3681 2072 mt 3654 2061 L
+3654 2061 mt 3646 2058 L
+3646 2058 mt 3611 2046 L
+3611 2046 mt 3577 2038 L
+3577 2038 mt 3543 2034 L
+3543 2034 mt 3542 2034 L
+3542 2034 mt 3537 2034 L
+3537 2034 mt 3507 2035 L
+3507 2035 mt 3472 2041 L
+3472 2041 mt 3437 2050 L
+3437 2050 mt 3403 2061 L
+3403 2061 mt 3402 2062 L
+3402 2062 mt 3367 2073 L
+3367 2073 mt 3332 2083 L
+3332 2083 mt 3311 2089 L
+3311 2089 mt 3298 2092 L
+3298 2092 mt 3263 2101 L
+3263 2101 mt 3228 2107 L
+3228 2107 mt 3193 2113 L
+3193 2113 mt 3173 2116 L
+3173 2116 mt 3158 2119 L
+3158 2119 mt 3123 2125 L
+3123 2125 mt 3088 2132 L
+3088 2132 mt 3053 2140 L
+3053 2140 mt 3039 2144 L
+3039 2144 mt 3019 2149 L
+3019 2149 mt 2984 2160 L
+2984 2160 mt 2950 2171 L
+2950 2171 mt 2949 2172 L
+2949 2172 mt 2914 2185 L
+2914 2185 mt 2882 2199 L
+2882 2199 mt 2879 2200 L
+2879 2200 mt 2844 2216 L
+2844 2216 mt 2825 2226 L
+2825 2226 mt 2809 2234 L
+2809 2234 mt 2774 2253 L
+2774 2253 mt 2773 2254 L
+2773 2254 mt 2740 2274 L
+2740 2274 mt 2728 2281 L
+2728 2281 mt 2705 2296 L
+2705 2296 mt 2686 2309 L
+2686 2309 mt 2670 2321 L
+2670 2321 mt 2649 2336 L
+2649 2336 mt 2635 2348 L
+2635 2348 mt 2617 2364 L
+2617 2364 mt 2600 2380 L
+2600 2380 mt 2589 2391 L
+2589 2391 mt 2565 2418 L
+2565 2418 mt 2565 2419 L
+2565 2419 mt 2545 2446 L
+2545 2446 mt 2530 2471 L
+2530 2471 mt 2529 2474 L
+2529 2474 mt 2517 2502 L
+2517 2502 mt 2508 2529 L
+2508 2529 mt 2504 2557 L
+2504 2557 mt 2503 2584 L
+2503 2584 mt 2505 2612 L
+2505 2612 mt 2509 2639 L
+2509 2639 mt 2515 2667 L
+2515 2667 mt 2523 2694 L
+2523 2694 mt 2530 2715 L
+2530 2715 mt 2533 2722 L
+2533 2722 mt 2547 2749 L
+2547 2749 mt 2563 2777 L
+2563 2777 mt 2565 2779 L
+2565 2779 mt 2582 2804 L
+2582 2804 mt 2600 2832 L
+2600 2832 mt 2600 2832 L
+2600 2832 mt 2616 2859 L
+2616 2859 mt 2630 2887 L
+2630 2887 mt 2635 2897 L
+2635 2897 mt 2644 2914 L
+2644 2914 mt 2655 2942 L
+2655 2942 mt 2664 2969 L
+2664 2969 mt 2670 2991 L
+2670 2991 mt 2672 2997 L
+2672 2997 mt 2680 3024 L
+2680 3024 mt 2684 3052 L
+2684 3052 mt 2684 3079 L
+2684 3079 mt 2689 3107 L
+2689 3107 mt 2705 3129 L
+2705 3129 mt 2709 3134 L
+2709 3134 mt 2740 3153 L
+2740 3153 mt 2756 3162 L
+2756 3162 mt 2774 3169 L
+2774 3169 mt 2809 3183 L
+2809 3183 mt 2825 3189 L
+2825 3189 mt 2844 3198 L
+2844 3198 mt 2879 3214 L
+2879 3214 mt 2884 3217 L
+2884 3217 mt 2914 3234 L
+2914 3234 mt 2932 3244 L
+2932 3244 mt 2949 3256 L
+2949 3256 mt 2971 3272 L
+2971 3272 mt 2984 3283 L
+2984 3283 mt 3004 3299 L
+3004 3299 mt 3019 3314 L
+3019 3314 mt 3031 3327 L
+3031 3327 mt 3053 3354 L
+3053 3354 mt 3054 3354 L
+3054 3354 mt 3072 3382 L
+3072 3382 mt 3086 3409 L
+3086 3409 mt 3088 3415 L
+3088 3415 mt 3098 3437 L
+3098 3437 mt 3106 3464 L
+3106 3464 mt 3112 3492 L
+3112 3492 mt 3116 3519 L
+3116 3519 mt 3116 3547 L
+3116 3547 mt 3115 3575 L
+3115 3575 mt 3112 3602 L
+3112 3602 mt 3109 3630 L
+3109 3630 mt 3105 3657 L
+3105 3657 mt 3099 3685 L
+3099 3685 mt 3094 3712 L
+3094 3712 mt 3092 3740 L
+3092 3740 mt 3100 3767 L
+3100 3767 mt 3119 3795 L
+3119 3795 mt 3123 3798 L
+3123 3798 mt 3148 3822 L
+3148 3822 mt 3158 3831 L
+3158 3831 mt 3178 3850 L
+3178 3850 mt 3193 3866 L
+3193 3866 mt 3202 3877 L
+3202 3877 mt 3219 3905 L
+3219 3905 mt 3228 3932 L
+3228 3932 mt 3228 3932 L
+3228 3932 mt 3231 3960 L
+3231 3960 mt 3235 3987 L
+3235 3987 mt 3247 4015 L
+3247 4015 mt 3263 4037 L
+3263 4037 mt 3267 4042 L
+3267 4042 mt 3295 4070 L
+3295 4070 mt 3298 4072 L
+3298 4072 mt 3328 4097 L
+3328 4097 mt 3332 4103 L
+3332 4103 mt 3357 4125 L
+3357 4125 mt 3367 4139 L
+3367 4139 mt 3380 4152 L
+3380 4152 mt 3384 4180 L
+3384 4180 mt 3369 4207 L
+3369 4207 mt 3367 4209 L
+3367 4209 mt 3347 4235 L
+3347 4235 mt 3332 4255 L
+3332 4255 mt 3328 4262 L
+3328 4262 mt 3312 4290 L
+3312 4290 mt 3302 4317 L
+3302 4317 mt 3299 4345 L
+3299 4345 mt 3303 4372 L
+3303 4372 mt 3313 4400 L
+3313 4400 mt 3332 4423 L
+3332 4423 mt 3336 4427 L
+3336 4427 mt 3367 4451 L
+3367 4451 mt 3373 4455 L
+3373 4455 mt 3402 4471 L
+3402 4471 mt 3421 4482 L
+3421 4482 mt 3437 4491 L
+3437 4491 mt 3467 4510 L
+3467 4510 mt 3472 4513 L
+3472 4513 mt 3499 4537 L
+3499 4537 mt 3507 4547 L
+3507 4547 mt 3518 4565 L
+3518 4565 mt 3525 4592 L
+3525 4592 mt 3518 4620 L
+3518 4620 mt 3507 4634 L
+3507 4634 mt 3495 4648 L
+3495 4648 mt 3472 4669 L
+3472 4669 mt 3465 4675 L
+3465 4675 mt 3437 4696 L
+3437 4696 mt 3427 4703 L
+3427 4703 mt 3402 4719 L
+3402 4719 mt 3383 4730 L
+3383 4730 mt 3367 4739 L
+3367 4739 mt 3332 4757 L
+3332 4757 mt 3331 4758 L
+3331 4758 mt 3298 4774 L
+3298 4774 mt 3274 4785 L
+3274 4785 mt 3263 4790 L
+3263 4790 mt 3228 4806 L
+3228 4806 mt 3211 4813 L
+3211 4813 mt 3193 4820 L
+3193 4820 mt 3158 4833 L
+3158 4833 mt 3139 4840 L
+3139 4840 mt 3123 4846 L
+3123 4846 mt 3088 4857 L
+3088 4857 mt 3056 4868 L
+3056 4868 mt 3053 4869 L
+3053 4869 mt 3019 4879 L
+3019 4879 mt 2984 4889 L
+2984 4889 mt 2962 4895 L
+2962 4895 mt 2949 4899 L
+2949 4899 mt 2914 4908 L
+2914 4908 mt 2879 4916 L
+2879 4916 mt 2850 4923 L
+2850 4923 mt 2844 4924 L
+2844 4924 mt 2809 4931 L
+2809 4931 mt 2774 4938 L
+2774 4938 mt 2740 4944 L
+2740 4944 mt 2705 4950 L
+2705 4950 mt 2704 4950 L
+2704 4950 mt 2670 4955 L
+2670 4955 mt 2635 4960 L
+2635 4960 mt 2600 4963 L
+2600 4963 mt 2565 4967 L
+2565 4967 mt 2530 4970 L
+2530 4970 mt 2496 4972 L
+2496 4972 mt 2461 4974 L
+2461 4974 mt 2426 4975 L
+2426 4975 mt 2391 4975 L
+2391 4975 mt 2356 4975 L
+2356 4975 mt 2321 4974 L
+2321 4974 mt 2286 4973 L
+2286 4973 mt 2251 4971 L
+2251 4971 mt 2217 4968 L
+2217 4968 mt 2182 4964 L
+2182 4964 mt 2147 4960 L
+2147 4960 mt 2112 4955 L
+2112 4955 mt 2085 4950 L
+2085 4950 mt 2077 4949 L
+2077 4949 mt 2042 4942 L
+2042 4942 mt 2007 4935 L
+2007 4935 mt 1972 4926 L
+1972 4926 mt 1959 4923 L
+1959 4923 mt 1938 4917 L
+1938 4917 mt 1903 4907 L
+1903 4907 mt 1868 4896 L
+1868 4896 mt 1866 4895 L
+1866 4895 mt 1833 4883 L
+1833 4883 mt 1798 4870 L
+1798 4870 mt 1794 4868 L
+1794 4868 mt 1763 4854 L
+1763 4854 mt 1735 4840 L
+1735 4840 mt 1728 4837 L
+1728 4837 mt 1694 4818 L
+1694 4818 mt 1685 4813 L
+1685 4813 mt 1659 4796 L
+1659 4796 mt 1643 4785 L
+1643 4785 mt 1624 4771 L
+1624 4771 mt 1607 4758 L
+1607 4758 mt 1589 4742 L
+1589 4742 mt 1575 4730 L
+1575 4730 mt 1554 4709 L
+1554 4709 mt 1548 4703 L
+1548 4703 mt 1523 4675 L
+1523 4675 mt 1519 4670 L
+1519 4670 mt 1502 4648 L
+1502 4648 mt 1484 4623 L
+1484 4623 mt 1482 4620 L
+1482 4620 mt 1464 4592 L
+1464 4592 mt 1449 4568 L
+1449 4568 mt 1448 4565 L
+1448 4565 mt 1432 4537 L
+1432 4537 mt 1418 4510 L
+1418 4510 mt 1415 4503 L
+1415 4503 mt 1404 4482 L
+1404 4482 mt 1392 4455 L
+1392 4455 mt 1380 4427 L
+1380 4427 mt 1380 4427 L
+1380 4427 mt 1369 4400 L
+1369 4400 mt 1358 4372 L
+1358 4372 mt 1349 4345 L
+1349 4345 mt 1345 4333 L
+1345 4333 mt 1340 4317 L
+1340 4317 mt 1332 4290 L
+1332 4290 mt 1325 4262 L
+1325 4262 mt 1319 4235 L
+1319 4235 mt 1314 4207 L
+1314 4207 mt 1311 4180 L
+1311 4180 mt 1310 4171 L
+1310 4171 mt 1308 4152 L
+1308 4152 mt 1307 4125 L
+1307 4125 mt 1307 4097 L
+1307 4097 mt 1308 4070 L
+1308 4070 mt 1310 4042 L
+1310 4042 mt 1310 4039 L
+1310 4039 mt 1312 4015 L
+1312 4015 mt 1316 3987 L
+1316 3987 mt 1320 3960 L
+1320 3960 mt 1325 3932 L
+1325 3932 mt 1330 3905 L
+1330 3905 mt 1335 3877 L
+1335 3877 mt 1339 3850 L
+1339 3850 mt 1344 3822 L
+1344 3822 mt 1345 3812 L
+1345 3812 mt 1347 3795 L
+1347 3795 mt 1349 3767 L
+1349 3767 mt 1349 3740 L
+1349 3740 mt 1348 3712 L
+1348 3712 mt 1345 3689 L
+1345 3689 mt 1344 3685 L
+1344 3685 mt 1338 3657 L
+1338 3657 mt 1329 3630 L
+1329 3630 mt 1317 3602 L
+1317 3602 mt 1310 3589 L
+1310 3589 mt 1302 3575 L
+1302 3575 mt 1283 3547 L
+1283 3547 mt 1275 3537 L
+1275 3537 mt 1260 3519 L
+1260 3519 mt 1240 3499 L
+1240 3499 mt 1234 3492 L
+1234 3492 mt 1205 3467 L
+1205 3467 mt 1203 3464 L
+1203 3464 mt 1170 3439 L
+1170 3439 mt 1168 3437 L
+1168 3437 mt 1136 3414 L
+1136 3414 mt 1129 3409 L
+1129 3409 mt 1101 3391 L
+1101 3391 mt 1087 3382 L
+1087 3382 mt 1066 3369 L
+1066 3369 mt 1044 3354 L
+1044 3354 mt 1031 3347 L
+1031 3347 mt  999 3327 L
+ 999 3327 mt  996 3325 L
+ 996 3325 mt  961 3303 L
+ 961 3303 mt  955 3299 L
+ 955 3299 mt  926 3282 L
+ 926 3282 mt  911 3272 L
+ 911 3272 mt  892 3260 L
+ 892 3260 mt  867 3244 L
+ 867 3244 mt  857 3238 L
+ 857 3238 mt  824 3217 L
+ 824 3217 mt  822 3215 L
+ 822 3215 mt  787 3193 L
+ 787 3193 mt  782 3189 L
+ 782 3189 mt  752 3169 L
+ 752 3169 mt  741 3162 L
+ 741 3162 mt  717 3145 L
+ 717 3145 mt  702 3134 L
+ 702 3134 mt  682 3120 L
+ 682 3120 mt  665 3107 L
+ 665 3107 mt  647 3094 L
+ 647 3094 mt  629 3079 L
+ 629 3079 mt  613 3066 L
+ 613 3066 mt  595 3052 L
+ 595 3052 mt  578 3037 L
+ 578 3037 mt  563 3024 L
+ 563 3024 mt  543 3006 L
+ 543 3006 mt  533 2997 L
+ 533 2997 mt  508 2972 L
+ 508 2972 mt  505 2969 L
+ 505 2969 mt  478 2942 L
+ 478 2942 mt  473 2936 L
+ 473 2936 mt  453 2914 L
+ 453 2914 mt  438 2896 L
+ 438 2896 mt  430 2887 L
+ 430 2887 mt  409 2859 L
+ 409 2859 mt  403 2851 L
+ 403 2851 mt  389 2832 L
+ 389 2832 mt  370 2804 L
+ 370 2804 mt  368 2801 L
+ 368 2801 mt  353 2777 L
+ 353 2777 mt  337 2749 L
+ 337 2749 mt  334 2744 L
+ 334 2744 mt  321 2722 L
+ 321 2722 mt  307 2694 L
+ 307 2694 mt  299 2677 L
+ 299 2677 mt  293 2667 L
+ 293 2667 mt  281 2639 L
+ 281 2639 mt  270 2612 L
+ 270 2612 mt  264 2595 L
+ 264 2595 mt  260 2584 L
+ 260 2584 mt  251 2557 L
+ 251 2557 mt  243 2529 L
+ 243 2529 mt  236 2502 L
+ 236 2502 mt  231 2474 L
+ 231 2474 mt  229 2464 L
+ 229 2464 mt  226 2446 L
+ 226 2446 mt  222 2419 L
+ 222 2419 mt  219 2391 L
+ 219 2391 mt  216 2364 L
+ 216 2364 mt  214 2336 L
+ 214 2336 mt  213 2309 L
+ 213 2309 mt  213 2281 L
+ 213 2281 mt  213 2254 L
+ 213 2254 mt  213 2226 L
+ 213 2226 mt  215 2199 L
+ 215 2199 mt  217 2171 L
+ 217 2171 mt  219 2144 L
+ 219 2144 mt  222 2116 L
+ 222 2116 mt  226 2089 L
+ 226 2089 mt  229 2071 L
+ 229 2071 mt  230 2061 L
+ 230 2061 mt  235 2034 L
+ 235 2034 mt  240 2006 L
+ 240 2006 mt  246 1979 L
+ 246 1979 mt  251 1951 L
+ 251 1951 mt  257 1924 L
+ 257 1924 mt  263 1896 L
+ 263 1896 mt  264 1894 L
+ 264 1894 mt  270 1869 L
+ 270 1869 mt  276 1841 L
+ 276 1841 mt  282 1814 L
+ 282 1814 mt  288 1786 L
+ 288 1786 mt  295 1759 L
+ 295 1759 mt  299 1742 L
+ 299 1742 mt  301 1731 L
+ 301 1731 mt  307 1704 L
+ 307 1704 mt  313 1676 L
+ 313 1676 mt  319 1649 L
+ 319 1649 mt  325 1621 L
+ 325 1621 mt  330 1594 L
+ 330 1594 mt  334 1575 L
+ 334 1575 mt  335 1566 L
+ 335 1566 mt  340 1539 L
+ 340 1539 mt  345 1511 L
+ 345 1511 mt  350 1484 L
+ 350 1484 mt  355 1456 L
+ 355 1456 mt  360 1428 L
+ 360 1428 mt  365 1401 L
+ 365 1401 mt  368 1380 L
+ 368 1380 mt  370 1373 L
+ 370 1373 mt  375 1346 L
+ 375 1346 mt  380 1318 L
+ 380 1318 mt  385 1291 L
+ 385 1291 mt  391 1263 L
+ 391 1263 mt  396 1236 L
+ 396 1236 mt  403 1208 L
+ 403 1208 mt  403 1206 L
+ 403 1206 mt  409 1181 L
+ 409 1181 mt  417 1153 L
+ 417 1153 mt  424 1126 L
+ 424 1126 mt  432 1098 L
+ 432 1098 mt  438 1080 L
+ 438 1080 mt  441 1071 L
+ 441 1071 mt  450 1043 L
+ 450 1043 mt  460 1016 L
+ 460 1016 mt  470  988 L
+ 470  988 mt  473  981 L
+ 473  981 mt  481  961 L
+ 481  961 mt  492  933 L
+ 492  933 mt  505  906 L
+ 505  906 mt  508  899 L
+ 508  899 mt  517  878 L
+ 517  878 mt  531  851 L
+ 531  851 mt  543  827 L
+ 543  827 mt  545  823 L
+ 545  823 mt  559  796 L
+ 559  796 mt  575  768 L
+ 575  768 mt  578  763 L
+ 578  763 mt  591  741 L
+ 591  741 mt  608  713 L
+ 608  713 mt  613  706 L
+ 613  706 mt  626  686 L
+ 626  686 mt  644  658 L
+ 644  658 mt  647  654 L
+ 647  654 mt  664  631 L
+ 664  631 mt  682  606 L
+ 682  606 mt  684  603 L
+ 684  603 mt  705  576 L
+ 705  576 mt  717  561 L
+ 717  561 mt  727  548 L
+ 727  548 mt  750  521 L
+ 750  521 mt  752  519 L
+ 752  519 mt  774  493 L
+ 774  493 mt  787  479 L
+ 787  479 mt  800  466 L
+ 800  466 mt  822  443 L
+ 822  443 mt  827  438 L
+ 827  438 mt  856  411 L
+ 856  411 mt  857  410 L
+ 857  410 mt  888  383 L
+ 888  383 mt  892  380 L
+ 892  380 mt  922  355 L
+ 922  355 mt  926  352 L
+ 926  352 mt  959  328 L
+ 959  328 mt  961  327 L
+ 961  327 mt  996  303 L
+ 996  303 mt 1001  300 L
+1001  300 mt 1031  282 L
+1031  282 mt 1047  273 L
+1047  273 mt 1066  262 L
+1066  262 mt 1098  245 L
+1098  245 mt 1101  244 L
+1101  244 mt 1136  227 L
+1136  227 mt 1157  218 L
+1157  218 mt 1170  212 L
+1170  212 mt 1205  198 L
+1205  198 mt 1225  190 L
+1225  190 mt 1240  185 L
+1240  185 mt 1275  173 L
+1275  173 mt 1307  163 L
+1307  163 mt 1310  162 L
+1310  162 mt 1345  151 L
+1345  151 mt 1380  142 L
+1380  142 mt 1405  135 L
+1405  135 mt 1415  133 L
+1415  133 mt 1449  124 L
+1449  124 mt 1484  116 L
+1484  116 mt 1519  108 L
+1519  108 mt 1521  108 L
+1521  108 mt 1554  100 L
+1554  100 mt 1589   93 L
+1589   93 mt 1624   86 L
+1624   86 mt 1650   80 L
+1650   80 mt 1659   79 L
+1659   79 mt 1694   72 L
+1694   72 mt 1728   65 L
+1728   65 mt 1763   59 L
+1763   59 mt 1796   53 L
+1796   53 mt 1798   52 L
+1798   52 mt 1833   46 L
+1833   46 mt 1868   40 L
+1868   40 mt 1903   35 L
+1903   35 mt 1938   29 L
+1938   29 mt 1964   25 L
+1964   25 mt 1972   24 L
+1972   24 mt 2007   19 L
+2007   19 mt 2042   14 L
+2042   14 mt 2077    9 L
+2077    9 mt 2112    4 L
+2112    4 mt 2147    0 L
+2147    0 mt 2161   -1 L
+2161   -1 mt 2182   -4 L
+2182   -4 mt 2217   -9 L
+2217   -9 mt 2251  -13 L
+2251  -13 mt 2286  -18 L
+2286  -18 mt 2321  -23 L
+2321  -23 mt 2356  -28 L
+2356  -28 mt 2362  -29 L
+2362  -29 mt 2391  -33 L
+2391  -33 mt 2426  -38 L
+2426  -38 mt 2461  -44 L
+2461  -44 mt 2496  -49 L
+2496  -49 mt 2530  -55 L
+2530  -55 mt 2542  -56 L
+2542  -56 mt 2565  -60 L
+2565  -60 mt 2600  -65 L
+2600  -65 mt 2635  -70 L
+2635  -70 mt 2670  -75 L
+2670  -75 mt 2705  -80 L
+2705  -80 mt 2733  -84 L
+2733  -84 mt 2740  -85 L
+2740  -85 mt 2774  -90 L
+2774  -90 mt 2809  -94 L
+2809  -94 mt 2844  -99 L
+2844  -99 mt 2879 -104 L
+2879 -104 mt 2914 -109 L
+2914 -109 mt 2934 -111 L
+2934 -111 mt 2949 -113 L
+2949 -113 mt 2984 -118 L
+2984 -118 mt 3019 -122 L
+3019 -122 mt 3053 -127 L
+3053 -127 mt 3088 -132 L
+3088 -132 mt 3123 -136 L
+3123 -136 mt 3143 -139 L
+3143 -139 mt 3158 -141 L
+3158 -141 mt 3193 -145 L
+3193 -145 mt 3228 -150 L
+3228 -150 mt 3263 -155 L
+3263 -155 mt 3298 -159 L
+3298 -159 mt 3332 -164 L
+3332 -164 mt 3352 -166 L
+3352 -166 mt 3367 -168 L
+3367 -168 mt 3402 -172 L
+3402 -172 mt 3437 -176 L
+3437 -176 mt 3472 -180 L
+3472 -180 mt 3507 -184 L
+3507 -184 mt 3542 -188 L
+3542 -188 mt 3577 -191 L
+3577 -191 mt 3605 -194 L
+3605 -194 mt 3611 -194 L
+3611 -194 mt 3646 -197 L
+3646 -197 mt 3681 -201 L
+3681 -201 mt 3716 -203 L
+3716 -203 mt 3751 -206 L
+3751 -206 mt 3786 -209 L
+3786 -209 mt 3821 -212 L
+3821 -212 mt 3855 -214 L
+3855 -214 mt 3890 -216 L
+3890 -216 mt 3925 -218 L
+3925 -218 mt 3960 -220 L
+3960 -220 mt 3984 -221 L
+3984 -221 mt 3995 -222 L
+3995 -222 mt 4030 -223 L
+4030 -223 mt 4065 -224 L
+4065 -224 mt 4100 -225 L
+4100 -225 mt 4134 -226 L
+4134 -226 mt 4169 -226 L
+4169 -226 mt 4204 -226 L
+4204 -226 mt 4239 -226 L
+4239 -226 mt 4274 -225 L
+4274 -225 mt 4309 -224 L
+4309 -224 mt 4344 -223 L
+4344 -223 mt 4375 -221 L
+4375 -221 mt 4379 -221 L
+4379 -221 mt 4413 -219 L
+4413 -219 mt 4448 -217 L
+4448 -217 mt 4483 -214 L
+4483 -214 mt 4518 -210 L
+4518 -210 mt 4553 -207 L
+4553 -207 mt 4588 -202 L
+4588 -202 mt 4623 -198 L
+4623 -198 mt 4649 -194 L
+4649 -194 mt 4657 -193 L
+4657 -193 mt 4692 -187 L
+4692 -187 mt 4727 -182 L
+4727 -182 mt 4762 -175 L
+4762 -175 mt 4797 -169 L
+4797 -169 mt 4809 -166 L
+4809 -166 mt 4832 -162 L
+4832 -162 mt 4867 -154 L
+4867 -154 mt 4902 -146 L
+4902 -146 mt 4932 -139 L
+4932 -139 mt 4936 -138 L
+4936 -138 mt 4971 -129 L
+4971 -129 mt 5006 -119 L
+5006 -119 mt 5034 -111 L
+5034 -111 mt 5041 -109 L
+5041 -109 mt 5076  -99 L
+5076  -99 mt 5111  -88 L
+5111  -88 mt 5124  -84 L
+5124  -84 mt 5146  -77 L
+5146  -77 mt 5181  -65 L
+5181  -65 mt 5206  -56 L
+5206  -56 mt 5215  -53 L
+5215  -53 mt 5250  -40 L
+5250  -40 mt 5279  -29 L
+5279  -29 mt 5285  -26 L
+5285  -26 mt 5320  -12 L
+5320  -12 mt 5344   -1 L
+5344   -1 mt 5355    3 L
+5355    3 mt 5390   19 L
+5390   19 mt 5403   25 L
+5403   25 mt 5425   36 L
+5425   36 mt 5457   53 L
+5457   53 mt 5459   54 L
+5459   54 mt 5494   73 L
+5494   73 mt 5507   80 L
+5507   80 mt 5529   93 L
+5529   93 mt 5553  108 L
+5553  108 mt 5564  115 L
+5564  115 mt 5596  135 L
+5596  135 mt 5599  137 L
+5599  137 mt 5634  161 L
+5634  161 mt 5636  163 L
+5636  163 mt 5669  186 L
+5669  186 mt 5675  190 L
+5675  190 mt 5704  212 L
+5704  212 mt 5712  218 L
+5712  218 mt 5738  239 L
+5738  239 mt 5747  245 L
+5747  245 mt 5773  267 L
+5773  267 mt 5781  273 L
+5781  273 mt 5808  296 L
+5808  296 mt 5814  300 L
+5814  300 mt 5843  326 L
+5843  326 mt 5845  328 L
+5845  328 mt 5876  355 L
+5876  355 mt 5878  357 L
+5878  357 mt 5907  383 L
+5907  383 mt 5913  389 L
+5913  389 mt 5936  411 L
+5936  411 mt 5948  422 L
+5948  422 mt 5965  438 L
+5965  438 mt 5983  455 L
+5983  455 mt 5994  466 L
+5994  466 mt 6017  489 L
+6017  489 mt 6022  493 L
+6022  493 mt 6050  521 L
+6050  521 mt 6052  523 L
+6052  523 mt 6078  548 L
+6078  548 mt 6087  557 L
+6087  557 mt 6106  576 L
+6106  576 mt 6122  591 L
+6122  591 mt 6134  603 L
+6134  603 mt 6157  626 L
+6157  626 mt 6162  631 L
+6162  631 mt 6190  658 L
+6190  658 mt 6192  660 L
+6192  660 mt 6217  686 L
+6217  686 mt 6227  695 L
+6227  695 mt 6245  713 L
+6245  713 mt 6261  730 L
+6261  730 mt 6272  741 L
+6272  741 mt 6296  765 L
+6296  765 mt 6300  768 L
+6300  768 mt 6327  796 L
+6327  796 mt 6331  800 L
+6331  800 mt 6354  823 L
+6354  823 mt 6366  835 L
+6366  835 mt 6381  851 L
+6381  851 mt 6401  870 L
+6401  870 mt 6409  878 L
+6409  878 mt 6436  906 L
+6436  906 mt 6436  906 L
+6436  906 mt 6463  933 L
+6463  933 mt 6471  941 L
+6471  941 mt 6490  961 L
+6490  961 mt 6506  977 L
+6506  977 mt 6516  988 L
+6516  988 mt 6540 1014 L
+6540 1014 mt 6542 1016 L
+6542 1016 mt 6568 1043 L
+6568 1043 mt 6575 1051 L
+6575 1051 mt 6594 1071 L
+6594 1071 mt 6610 1089 L
+6610 1089 mt 6618 1098 L
+6618 1098 mt 6643 1126 L
+6643 1126 mt 6645 1129 L
+6645 1129 mt 6667 1153 L
+6667 1153 mt 6680 1169 L
+6680 1169 mt 6690 1181 L
+6690 1181 mt 6713 1208 L
+6713 1208 mt 6715 1211 L
+6715 1211 mt 6735 1236 L
+6735 1236 mt 6750 1254 L
+6750 1254 mt 6757 1263 L
+6757 1263 mt 6778 1291 L
+6778 1291 mt 6785 1299 L
+6785 1299 mt 6799 1318 L
+6799 1318 mt 6819 1346 L
+6819 1346 mt 6819 1346 L
+6819 1346 mt 6839 1373 L
+6839 1373 mt 6854 1396 L
+6854 1396 mt 6858 1401 L
+6858 1401 mt 6876 1428 L
+6876 1428 mt 6889 1449 L
+6889 1449 mt 6894 1456 L
+6894 1456 mt 6911 1484 L
+6911 1484 mt 6924 1506 L
+6924 1506 mt 6927 1511 L
+6927 1511 mt 6943 1539 L
+6943 1539 mt 6957 1566 L
+6957 1566 mt 6959 1569 L
+6959 1569 mt 6972 1594 L
+6972 1594 mt 6985 1621 L
+6985 1621 mt 6994 1640 L
+6994 1640 mt 6998 1649 L
+6998 1649 mt 7010 1676 L
+7010 1676 mt 7022 1704 L
+7022 1704 mt 7029 1720 L
+7029 1720 mt 7033 1731 L
+7033 1731 mt 7043 1759 L
+7043 1759 mt 7053 1786 L
+7053 1786 mt 7061 1814 L
+7061 1814 mt 7063 1821 L
+7063 1821 mt 7069 1841 L
+7069 1841 mt 7076 1869 L
+7076 1869 mt 7082 1896 L
+7082 1896 mt 7088 1924 L
+7088 1924 mt 7092 1951 L
+7092 1951 mt 7096 1979 L
+7096 1979 mt 7098 2005 L
+7029 1934 mt 7031 1951 L
+7031 1951 mt 7034 1979 L
+7034 1979 mt 7037 2006 L
+7037 2006 mt 7039 2034 L
+7039 2034 mt 7040 2061 L
+7040 2061 mt 7040 2089 L
+7040 2089 mt 7040 2116 L
+7040 2116 mt 7039 2144 L
+7039 2144 mt 7038 2171 L
+7038 2171 mt 7036 2199 L
+7036 2199 mt 7033 2226 L
+7033 2226 mt 7030 2254 L
+7030 2254 mt 7029 2260 L
+7029 2260 mt 7026 2281 L
+7026 2281 mt 7021 2309 L
+7021 2309 mt 7016 2336 L
+7016 2336 mt 7011 2364 L
+7011 2364 mt 7004 2391 L
+7004 2391 mt 6998 2419 L
+6998 2419 mt 6994 2435 L
+6994 2435 mt 6991 2446 L
+6991 2446 mt 6983 2474 L
+6983 2474 mt 6975 2502 L
+6975 2502 mt 6967 2529 L
+6967 2529 mt 6959 2555 L
+6959 2555 mt 6958 2557 L
+6958 2557 mt 6950 2584 L
+6950 2584 mt 6940 2612 L
+6940 2612 mt 6931 2639 L
+6931 2639 mt 6924 2659 L
+6924 2659 mt 6921 2667 L
+6921 2667 mt 6912 2694 L
+6912 2694 mt 6902 2722 L
+6902 2722 mt 6891 2749 L
+6891 2749 mt 6889 2755 L
+6889 2755 mt 6881 2777 L
+6881 2777 mt 6871 2804 L
+6871 2804 mt 6860 2832 L
+6860 2832 mt 6854 2847 L
+6854 2847 mt 6850 2859 L
+6850 2859 mt 6839 2887 L
+6839 2887 mt 6829 2914 L
+6829 2914 mt 6819 2940 L
+6819 2940 mt 6819 2942 L
+6819 2942 mt 6809 2969 L
+6809 2969 mt 6799 2997 L
+6799 2997 mt 6789 3024 L
+6789 3024 mt 6785 3035 L
+6785 3035 mt 6778 3052 L
+6778 3052 mt 6768 3079 L
+6768 3079 mt 6758 3107 L
+6758 3107 mt 6750 3129 L
+6750 3129 mt 6748 3134 L
+6748 3134 mt 6738 3162 L
+6738 3162 mt 6728 3189 L
+6728 3189 mt 6718 3217 L
+6718 3217 mt 6715 3228 L
+6715 3228 mt 6709 3244 L
+6709 3244 mt 6700 3272 L
+6700 3272 mt 6691 3299 L
+6691 3299 mt 6682 3327 L
+6682 3327 mt 6680 3335 L
+6680 3335 mt 6674 3354 L
+6674 3354 mt 6665 3382 L
+6665 3382 mt 6656 3409 L
+6656 3409 mt 6646 3437 L
+6646 3437 mt 6645 3440 L
+6645 3440 mt 6637 3464 L
+6637 3464 mt 6627 3492 L
+6627 3492 mt 6616 3519 L
+6616 3519 mt 6610 3534 L
+6610 3534 mt 6605 3547 L
+6605 3547 mt 6594 3575 L
+6594 3575 mt 6582 3602 L
+6582 3602 mt 6575 3618 L
+6575 3618 mt 6570 3630 L
+6570 3630 mt 6558 3657 L
+6558 3657 mt 6545 3685 L
+6545 3685 mt 6540 3695 L
+6540 3695 mt 6532 3712 L
+6532 3712 mt 6519 3740 L
+6519 3740 mt 6506 3767 L
+6506 3767 mt 6506 3768 L
+6506 3768 mt 6492 3795 L
+6492 3795 mt 6479 3822 L
+6479 3822 mt 6471 3838 L
+6471 3838 mt 6465 3850 L
+6465 3850 mt 6451 3877 L
+6451 3877 mt 6437 3905 L
+6437 3905 mt 6436 3908 L
+6436 3908 mt 6423 3932 L
+6423 3932 mt 6408 3960 L
+6408 3960 mt 6401 3972 L
+6401 3972 mt 6392 3987 L
+6392 3987 mt 6374 4015 L
+6374 4015 mt 6366 4026 L
+6366 4026 mt 6354 4042 L
+6354 4042 mt 6335 4070 L
+6335 4070 mt 6331 4076 L
+6331 4076 mt 6316 4097 L
+6316 4097 mt 6303 4125 L
+6303 4125 mt 6296 4144 L
+6296 4144 mt 6293 4152 L
+6293 4152 mt 6284 4180 L
+6284 4180 mt 6274 4207 L
+6274 4207 mt 6261 4224 L
+6261 4224 mt 6241 4235 L
+6241 4235 mt 6227 4242 L
+6227 4242 mt 6210 4235 L
+6210 4235 mt 6192 4224 L
+6192 4224 mt 6182 4207 L
+6182 4207 mt 6169 4180 L
+6169 4180 mt 6160 4152 L
+6160 4152 mt 6157 4137 L
+6157 4137 mt 6155 4125 L
+6155 4125 mt 6151 4097 L
+6151 4097 mt 6147 4070 L
+6147 4070 mt 6137 4042 L
+6137 4042 mt 6124 4015 L
+6124 4015 mt 6122 4010 L
+6122 4010 mt 6112 3987 L
+6112 3987 mt 6100 3960 L
+6100 3960 mt 6087 3932 L
+6087 3932 mt 6087 3932 L
+6087 3932 mt 6073 3905 L
+6073 3905 mt 6060 3877 L
+6060 3877 mt 6052 3859 L
+6052 3859 mt 6048 3850 L
+6048 3850 mt 6036 3822 L
+6036 3822 mt 6022 3795 L
+6022 3795 mt 6017 3787 L
+6017 3787 mt 6002 3767 L
+6002 3767 mt 5983 3746 L
+5983 3746 mt 5976 3740 L
+5976 3740 mt 5948 3717 L
+5948 3717 mt 5940 3712 L
+5940 3712 mt 5913 3696 L
+5913 3696 mt 5891 3685 L
+5891 3685 mt 5878 3679 L
+5878 3679 mt 5843 3664 L
+5843 3664 mt 5827 3657 L
+5827 3657 mt 5808 3649 L
+5808 3649 mt 5773 3633 L
+5773 3633 mt 5766 3630 L
+5766 3630 mt 5738 3616 L
+5738 3616 mt 5714 3602 L
+5714 3602 mt 5704 3596 L
+5704 3596 mt 5672 3575 L
+5672 3575 mt 5669 3572 L
+5669 3572 mt 5638 3547 L
+5638 3547 mt 5634 3543 L
+5634 3543 mt 5611 3519 L
+5611 3519 mt 5599 3506 L
+5599 3506 mt 5587 3492 L
+5587 3492 mt 5567 3464 L
+5567 3464 mt 5564 3460 L
+5564 3460 mt 5547 3437 L
+5547 3437 mt 5530 3409 L
+5530 3409 mt 5529 3408 L
+5529 3408 mt 5514 3382 L
+5514 3382 mt 5500 3354 L
+5500 3354 mt 5494 3340 L
+5494 3340 mt 5488 3327 L
+5488 3327 mt 5478 3299 L
+5478 3299 mt 5469 3272 L
+5469 3272 mt 5460 3244 L
+5460 3244 mt 5459 3243 L
+5459 3243 mt 5448 3217 L
+5448 3217 mt 5434 3189 L
+5434 3189 mt 5425 3174 L
+5425 3174 mt 5417 3162 L
+5417 3162 mt 5393 3134 L
+5393 3134 mt 5390 3131 L
+5390 3131 mt 5361 3107 L
+5361 3107 mt 5355 3102 L
+5355 3102 mt 5325 3079 L
+5325 3079 mt 5320 3076 L
+5320 3076 mt 5292 3052 L
+5292 3052 mt 5285 3046 L
+5285 3046 mt 5263 3024 L
+5263 3024 mt 5250 3012 L
+5250 3012 mt 5233 2997 L
+5233 2997 mt 5215 2983 L
+5215 2983 mt 5194 2969 L
+5194 2969 mt 5181 2962 L
+5181 2962 mt 5146 2949 L
+5146 2949 mt 5120 2942 L
+5120 2942 mt 5111 2939 L
+5111 2939 mt 5076 2928 L
+5076 2928 mt 5044 2914 L
+5044 2914 mt 5041 2913 L
+5041 2913 mt 5006 2894 L
+5006 2894 mt 4991 2887 L
+4991 2887 mt 4971 2876 L
+4971 2876 mt 4942 2859 L
+4942 2859 mt 4936 2856 L
+4936 2856 mt 4906 2832 L
+4906 2832 mt 4902 2827 L
+4902 2827 mt 4879 2804 L
+4879 2804 mt 4867 2790 L
+4867 2790 mt 4855 2777 L
+4855 2777 mt 4832 2749 L
+4832 2749 mt 4832 2748 L
+4832 2748 mt 4810 2722 L
+4810 2722 mt 4797 2706 L
+4797 2706 mt 4787 2694 L
+4787 2694 mt 4766 2667 L
+4766 2667 mt 4762 2660 L
+4762 2660 mt 4749 2639 L
+4749 2639 mt 4733 2612 L
+4733 2612 mt 4727 2600 L
+4727 2600 mt 4719 2584 L
+4719 2584 mt 4707 2557 L
+4707 2557 mt 4697 2529 L
+4697 2529 mt 4692 2514 L
+4692 2514 mt 4688 2502 L
+4688 2502 mt 4680 2474 L
+4680 2474 mt 4668 2446 L
+4668 2446 mt 4657 2433 L
+4657 2433 mt 4639 2419 L
+4639 2419 mt 4623 2409 L
+4623 2409 mt 4588 2393 L
+4588 2393 mt 4583 2391 L
+4583 2391 mt 4553 2376 L
+4553 2376 mt 4525 2364 L
+4525 2364 mt 4518 2360 L
+4518 2360 mt 4483 2345 L
+4483 2345 mt 4460 2336 L
+4460 2336 mt 4448 2332 L
+4448 2332 mt 4413 2321 L
+4413 2321 mt 4379 2311 L
+4379 2311 mt 4370 2309 L
+4370 2309 mt 4344 2302 L
+4344 2302 mt 4309 2293 L
+4309 2293 mt 4274 2285 L
+4274 2285 mt 4259 2281 L
+4259 2281 mt 4239 2275 L
+4239 2275 mt 4204 2265 L
+4204 2265 mt 4169 2255 L
+4169 2255 mt 4166 2254 L
+4166 2254 mt 4134 2243 L
+4134 2243 mt 4100 2229 L
+4100 2229 mt 4095 2226 L
+4095 2226 mt 4065 2209 L
+4065 2209 mt 4051 2199 L
+4051 2199 mt 4030 2182 L
+4030 2182 mt 4018 2171 L
+4018 2171 mt 3995 2150 L
+3995 2150 mt 3988 2144 L
+3988 2144 mt 3962 2116 L
+3962 2116 mt 3960 2113 L
+3960 2113 mt 3940 2089 L
+3940 2089 mt 3925 2067 L
+3925 2067 mt 3921 2061 L
+3921 2061 mt 3900 2034 L
+3900 2034 mt 3890 2022 L
+3890 2022 mt 3874 2006 L
+3874 2006 mt 3855 1993 L
+3855 1993 mt 3823 1979 L
+3823 1979 mt 3821 1978 L
+3821 1978 mt 3786 1969 L
+3786 1969 mt 3751 1962 L
+3751 1962 mt 3716 1954 L
+3716 1954 mt 3711 1951 L
+3711 1951 mt 3681 1938 L
+3681 1938 mt 3660 1924 L
+3660 1924 mt 3646 1914 L
+3646 1914 mt 3621 1896 L
+3621 1896 mt 3611 1889 L
+3611 1889 mt 3580 1869 L
+3580 1869 mt 3577 1866 L
+3577 1866 mt 3542 1847 L
+3542 1847 mt 3524 1841 L
+3524 1841 mt 3507 1834 L
+3507 1834 mt 3472 1828 L
+3472 1828 mt 3437 1827 L
+3437 1827 mt 3402 1831 L
+3402 1831 mt 3367 1838 L
+3367 1838 mt 3355 1841 L
+3355 1841 mt 3332 1847 L
+3332 1847 mt 3298 1856 L
+3298 1856 mt 3263 1863 L
+3263 1863 mt 3231 1869 L
+3231 1869 mt 3228 1869 L
+3228 1869 mt 3193 1873 L
+3193 1873 mt 3158 1876 L
+3158 1876 mt 3123 1877 L
+3123 1877 mt 3088 1876 L
+3088 1876 mt 3053 1875 L
+3053 1875 mt 3019 1874 L
+3019 1874 mt 2984 1873 L
+2984 1873 mt 2949 1873 L
+2949 1873 mt 2914 1874 L
+2914 1874 mt 2879 1878 L
+2879 1878 mt 2844 1883 L
+2844 1883 mt 2809 1891 L
+2809 1891 mt 2792 1896 L
+2792 1896 mt 2774 1902 L
+2774 1902 mt 2740 1915 L
+2740 1915 mt 2720 1924 L
+2720 1924 mt 2705 1931 L
+2705 1931 mt 2670 1948 L
+2670 1948 mt 2664 1951 L
+2664 1951 mt 2635 1967 L
+2635 1967 mt 2615 1979 L
+2615 1979 mt 2600 1987 L
+2600 1987 mt 2566 2006 L
+2566 2006 mt 2565 2006 L
+2565 2006 mt 2530 2026 L
+2530 2026 mt 2515 2034 L
+2515 2034 mt 2496 2045 L
+2496 2045 mt 2468 2061 L
+2468 2061 mt 2461 2067 L
+2461 2067 mt 2431 2089 L
+2431 2089 mt 2426 2094 L
+2426 2094 mt 2403 2116 L
+2403 2116 mt 2391 2132 L
+2391 2132 mt 2383 2144 L
+2383 2144 mt 2367 2171 L
+2367 2171 mt 2356 2193 L
+2356 2193 mt 2354 2199 L
+2354 2199 mt 2342 2226 L
+2342 2226 mt 2331 2254 L
+2331 2254 mt 2321 2281 L
+2321 2281 mt 2321 2281 L
+2321 2281 mt 2316 2309 L
+2316 2309 mt 2316 2336 L
+2316 2336 mt 2320 2364 L
+2320 2364 mt 2321 2366 L
+2321 2366 mt 2328 2391 L
+2328 2391 mt 2336 2419 L
+2336 2419 mt 2343 2446 L
+2343 2446 mt 2350 2474 L
+2350 2474 mt 2356 2502 L
+2356 2502 mt 2356 2503 L
+2356 2503 mt 2363 2529 L
+2363 2529 mt 2372 2557 L
+2372 2557 mt 2383 2584 L
+2383 2584 mt 2391 2602 L
+2391 2602 mt 2395 2612 L
+2395 2612 mt 2408 2639 L
+2408 2639 mt 2422 2667 L
+2422 2667 mt 2426 2675 L
+2426 2675 mt 2435 2694 L
+2435 2694 mt 2450 2722 L
+2450 2722 mt 2461 2740 L
+2461 2740 mt 2466 2749 L
+2466 2749 mt 2486 2777 L
+2486 2777 mt 2496 2789 L
+2496 2789 mt 2508 2804 L
+2508 2804 mt 2530 2831 L
+2530 2831 mt 2531 2832 L
+2531 2832 mt 2551 2859 L
+2551 2859 mt 2565 2881 L
+2565 2881 mt 2569 2887 L
+2569 2887 mt 2583 2914 L
+2583 2914 mt 2594 2942 L
+2594 2942 mt 2600 2969 L
+2600 2969 mt 2600 2969 L
+2600 2969 mt 2604 2997 L
+2604 2997 mt 2606 3024 L
+2606 3024 mt 2606 3052 L
+2606 3052 mt 2600 3079 L
+2600 3079 mt 2600 3080 L
+2600 3080 mt 2593 3107 L
+2593 3107 mt 2595 3134 L
+2595 3134 mt 2600 3143 L
+2600 3143 mt 2618 3162 L
+2618 3162 mt 2635 3172 L
+2635 3172 mt 2670 3187 L
+2670 3187 mt 2675 3189 L
+2675 3189 mt 2705 3200 L
+2705 3200 mt 2740 3212 L
+2740 3212 mt 2752 3217 L
+2752 3217 mt 2774 3227 L
+2774 3227 mt 2809 3244 L
+2809 3244 mt 2810 3244 L
+2810 3244 mt 2844 3267 L
+2844 3267 mt 2852 3272 L
+2852 3272 mt 2879 3295 L
+2879 3295 mt 2884 3299 L
+2884 3299 mt 2911 3327 L
+2911 3327 mt 2914 3331 L
+2914 3331 mt 2933 3354 L
+2933 3354 mt 2949 3379 L
+2949 3379 mt 2951 3382 L
+2951 3382 mt 2963 3409 L
+2963 3409 mt 2972 3437 L
+2972 3437 mt 2979 3464 L
+2979 3464 mt 2984 3486 L
+2984 3486 mt 2985 3492 L
+2985 3492 mt 2992 3519 L
+2992 3519 mt 2999 3547 L
+2999 3547 mt 3006 3575 L
+3006 3575 mt 3014 3602 L
+3014 3602 mt 3018 3630 L
+3018 3630 mt 3017 3657 L
+3017 3657 mt 3010 3685 L
+3010 3685 mt 3000 3712 L
+3000 3712 mt 2990 3740 L
+2990 3740 mt 2985 3767 L
+2985 3767 mt 2987 3795 L
+2987 3795 mt 2999 3822 L
+2999 3822 mt 3019 3846 L
+3019 3846 mt 3021 3850 L
+3021 3850 mt 3053 3877 L
+3053 3877 mt 3054 3877 L
+3054 3877 mt 3084 3905 L
+3084 3905 mt 3088 3910 L
+3088 3910 mt 3103 3932 L
+3103 3932 mt 3112 3960 L
+3112 3960 mt 3114 3987 L
+3114 3987 mt 3116 4015 L
+3116 4015 mt 3116 4042 L
+3116 4042 mt 3116 4070 L
+3116 4070 mt 3113 4097 L
+3113 4097 mt 3109 4125 L
+3109 4125 mt 3100 4152 L
+3100 4152 mt 3088 4180 L
+3088 4180 mt 3088 4180 L
+3088 4180 mt 3081 4207 L
+3081 4207 mt 3074 4235 L
+3074 4235 mt 3076 4262 L
+3076 4262 mt 3080 4290 L
+3080 4290 mt 3088 4311 L
+3088 4311 mt 3090 4317 L
+3090 4317 mt 3103 4345 L
+3103 4345 mt 3122 4372 L
+3122 4372 mt 3123 4374 L
+3123 4374 mt 3148 4400 L
+3148 4400 mt 3158 4407 L
+3158 4407 mt 3183 4427 L
+3183 4427 mt 3193 4433 L
+3193 4433 mt 3228 4455 L
+3228 4455 mt 3228 4455 L
+3228 4455 mt 3263 4472 L
+3263 4472 mt 3283 4482 L
+3283 4482 mt 3298 4488 L
+3298 4488 mt 3332 4503 L
+3332 4503 mt 3348 4510 L
+3348 4510 mt 3367 4518 L
+3367 4518 mt 3402 4535 L
+3402 4535 mt 3406 4537 L
+3406 4537 mt 3437 4562 L
+3437 4562 mt 3440 4565 L
+3440 4565 mt 3456 4592 L
+3456 4592 mt 3448 4620 L
+3448 4620 mt 3437 4630 L
+3437 4630 mt 3415 4648 L
+3415 4648 mt 3402 4657 L
+3402 4657 mt 3374 4675 L
+3374 4675 mt 3367 4679 L
+3367 4679 mt 3332 4697 L
+3332 4697 mt 3321 4703 L
+3321 4703 mt 3298 4714 L
+3298 4714 mt 3265 4730 L
+3265 4730 mt 3263 4731 L
+3263 4731 mt 3228 4747 L
+3228 4747 mt 3203 4758 L
+3203 4758 mt 3193 4762 L
+3193 4762 mt 3158 4776 L
+3158 4776 mt 3135 4785 L
+3135 4785 mt 3123 4790 L
+3123 4790 mt 3088 4802 L
+3088 4802 mt 3058 4813 L
+3058 4813 mt 3053 4814 L
+3053 4814 mt 3019 4825 L
+3019 4825 mt 2984 4836 L
+2984 4836 mt 2969 4840 L
+2969 4840 mt 2949 4846 L
+2949 4846 mt 2914 4855 L
+2914 4855 mt 2879 4864 L
+2879 4864 mt 2866 4868 L
+2866 4868 mt 2844 4873 L
+2844 4873 mt 2809 4881 L
+2809 4881 mt 2774 4889 L
+2774 4889 mt 2742 4895 L
+2742 4895 mt 2740 4896 L
+2740 4896 mt 2705 4902 L
+2705 4902 mt 2670 4908 L
+2670 4908 mt 2635 4913 L
+2635 4913 mt 2600 4918 L
+2600 4918 mt 2565 4922 L
+2565 4922 mt 2560 4923 L
+2560 4923 mt 2530 4926 L
+2530 4926 mt 2496 4929 L
+2496 4929 mt 2461 4931 L
+2461 4931 mt 2426 4933 L
+2426 4933 mt 2391 4935 L
+2391 4935 mt 2356 4935 L
+2356 4935 mt 2321 4935 L
+2321 4935 mt 2286 4935 L
+2286 4935 mt 2251 4933 L
+2251 4933 mt 2217 4931 L
+2217 4931 mt 2182 4928 L
+2182 4928 mt 2147 4924 L
+2147 4924 mt 2140 4923 L
+2140 4923 mt 2112 4919 L
+2112 4919 mt 2077 4913 L
+2077 4913 mt 2042 4907 L
+2042 4907 mt 2007 4900 L
+2007 4900 mt 1988 4895 L
+1988 4895 mt 1972 4892 L
+1972 4892 mt 1938 4883 L
+1938 4883 mt 1903 4873 L
+1903 4873 mt 1888 4868 L
+1888 4868 mt 1868 4861 L
+1868 4861 mt 1833 4849 L
+1833 4849 mt 1812 4840 L
+1812 4840 mt 1798 4834 L
+1798 4834 mt 1763 4819 L
+1763 4819 mt 1752 4813 L
+1752 4813 mt 1728 4800 L
+1728 4800 mt 1702 4785 L
+1702 4785 mt 1694 4780 L
+1694 4780 mt 1660 4758 L
+1660 4758 mt 1659 4756 L
+1659 4756 mt 1625 4730 L
+1625 4730 mt 1624 4729 L
+1624 4729 mt 1595 4703 L
+1595 4703 mt 1589 4697 L
+1589 4697 mt 1569 4675 L
+1569 4675 mt 1554 4658 L
+1554 4658 mt 1546 4648 L
+1546 4648 mt 1526 4620 L
+1526 4620 mt 1519 4610 L
+1519 4610 mt 1507 4592 L
+1507 4592 mt 1491 4565 L
+1491 4565 mt 1484 4553 L
+1484 4553 mt 1476 4537 L
+1476 4537 mt 1462 4510 L
+1462 4510 mt 1449 4484 L
+1449 4484 mt 1449 4482 L
+1449 4482 mt 1436 4455 L
+1436 4455 mt 1425 4427 L
+1425 4427 mt 1415 4401 L
+1415 4401 mt 1414 4400 L
+1414 4400 mt 1404 4372 L
+1404 4372 mt 1395 4345 L
+1395 4345 mt 1386 4317 L
+1386 4317 mt 1380 4297 L
+1380 4297 mt 1377 4290 L
+1377 4290 mt 1370 4262 L
+1370 4262 mt 1364 4235 L
+1364 4235 mt 1360 4207 L
+1360 4207 mt 1357 4180 L
+1357 4180 mt 1355 4152 L
+1355 4152 mt 1354 4125 L
+1354 4125 mt 1356 4097 L
+1356 4097 mt 1358 4070 L
+1358 4070 mt 1362 4042 L
+1362 4042 mt 1367 4015 L
+1367 4015 mt 1374 3987 L
+1374 3987 mt 1380 3964 L
+1380 3964 mt 1381 3960 L
+1381 3960 mt 1389 3932 L
+1389 3932 mt 1398 3905 L
+1398 3905 mt 1406 3877 L
+1406 3877 mt 1415 3850 L
+1415 3850 mt 1415 3850 L
+1415 3850 mt 1423 3822 L
+1423 3822 mt 1430 3795 L
+1430 3795 mt 1435 3767 L
+1435 3767 mt 1439 3740 L
+1439 3740 mt 1440 3712 L
+1440 3712 mt 1440 3685 L
+1440 3685 mt 1436 3657 L
+1436 3657 mt 1430 3630 L
+1430 3630 mt 1421 3602 L
+1421 3602 mt 1415 3587 L
+1415 3587 mt 1409 3575 L
+1409 3575 mt 1393 3547 L
+1393 3547 mt 1380 3528 L
+1380 3528 mt 1374 3519 L
+1374 3519 mt 1350 3492 L
+1350 3492 mt 1345 3487 L
+1345 3487 mt 1321 3464 L
+1321 3464 mt 1310 3455 L
+1310 3455 mt 1287 3437 L
+1287 3437 mt 1275 3429 L
+1275 3429 mt 1248 3409 L
+1248 3409 mt 1240 3405 L
+1240 3405 mt 1205 3383 L
+1205 3383 mt 1204 3382 L
+1204 3382 mt 1170 3362 L
+1170 3362 mt 1157 3354 L
+1157 3354 mt 1136 3342 L
+1136 3342 mt 1109 3327 L
+1109 3327 mt 1101 3323 L
+1101 3323 mt 1066 3303 L
+1066 3303 mt 1060 3299 L
+1060 3299 mt 1031 3283 L
+1031 3283 mt 1011 3272 L
+1011 3272 mt  996 3263 L
+ 996 3263 mt  964 3244 L
+ 964 3244 mt  961 3243 L
+ 961 3243 mt  926 3222 L
+ 926 3222 mt  918 3217 L
+ 918 3217 mt  892 3201 L
+ 892 3201 mt  873 3189 L
+ 873 3189 mt  857 3179 L
+ 857 3179 mt  829 3162 L
+ 829 3162 mt  822 3157 L
+ 822 3157 mt  787 3135 L
+ 787 3135 mt  786 3134 L
+ 786 3134 mt  752 3111 L
+ 752 3111 mt  745 3107 L
+ 745 3107 mt  717 3087 L
+ 717 3087 mt  707 3079 L
+ 707 3079 mt  682 3061 L
+ 682 3061 mt  670 3052 L
+ 670 3052 mt  647 3033 L
+ 647 3033 mt  636 3024 L
+ 636 3024 mt  613 3004 L
+ 613 3004 mt  604 2997 L
+ 604 2997 mt  578 2973 L
+ 578 2973 mt  574 2969 L
+ 574 2969 mt  546 2942 L
+ 546 2942 mt  543 2939 L
+ 543 2939 mt  520 2914 L
+ 520 2914 mt  508 2901 L
+ 508 2901 mt  496 2887 L
+ 496 2887 mt  473 2859 L
+ 473 2859 mt  473 2859 L
+ 473 2859 mt  453 2832 L
+ 453 2832 mt  438 2811 L
+ 438 2811 mt  434 2804 L
+ 434 2804 mt  416 2777 L
+ 416 2777 mt  403 2755 L
+ 403 2755 mt  400 2749 L
+ 400 2749 mt  384 2722 L
+ 384 2722 mt  370 2694 L
+ 370 2694 mt  368 2691 L
+ 368 2691 mt  357 2667 L
+ 357 2667 mt  345 2639 L
+ 345 2639 mt  334 2612 L
+ 334 2612 mt  334 2611 L
+ 334 2611 mt  324 2584 L
+ 324 2584 mt  315 2557 L
+ 315 2557 mt  308 2529 L
+ 308 2529 mt  301 2502 L
+ 301 2502 mt  299 2489 L
+ 299 2489 mt  296 2474 L
+ 296 2474 mt  291 2446 L
+ 291 2446 mt  287 2419 L
+ 287 2419 mt  284 2391 L
+ 284 2391 mt  282 2364 L
+ 282 2364 mt  281 2336 L
+ 281 2336 mt  280 2309 L
+ 280 2309 mt  279 2281 L
+ 279 2281 mt  280 2254 L
+ 280 2254 mt  281 2226 L
+ 281 2226 mt  283 2199 L
+ 283 2199 mt  285 2171 L
+ 285 2171 mt  288 2144 L
+ 288 2144 mt  292 2116 L
+ 292 2116 mt  296 2089 L
+ 296 2089 mt  299 2073 L
+ 299 2073 mt  301 2061 L
+ 301 2061 mt  306 2034 L
+ 306 2034 mt  311 2006 L
+ 311 2006 mt  317 1979 L
+ 317 1979 mt  322 1951 L
+ 322 1951 mt  328 1924 L
+ 328 1924 mt  334 1896 L
+ 334 1896 mt  334 1896 L
+ 334 1896 mt  339 1869 L
+ 339 1869 mt  345 1841 L
+ 345 1841 mt  351 1814 L
+ 351 1814 mt  356 1786 L
+ 356 1786 mt  362 1759 L
+ 362 1759 mt  368 1731 L
+ 368 1731 mt  368 1728 L
+ 368 1728 mt  373 1704 L
+ 373 1704 mt  378 1676 L
+ 378 1676 mt  383 1649 L
+ 383 1649 mt  388 1621 L
+ 388 1621 mt  393 1594 L
+ 393 1594 mt  398 1566 L
+ 398 1566 mt  402 1539 L
+ 402 1539 mt  403 1531 L
+ 403 1531 mt  407 1511 L
+ 407 1511 mt  411 1484 L
+ 411 1484 mt  415 1456 L
+ 415 1456 mt  419 1428 L
+ 419 1428 mt  423 1401 L
+ 423 1401 mt  428 1373 L
+ 428 1373 mt  432 1346 L
+ 432 1346 mt  436 1318 L
+ 436 1318 mt  438 1306 L
+ 438 1306 mt  441 1291 L
+ 441 1291 mt  446 1263 L
+ 446 1263 mt  451 1236 L
+ 451 1236 mt  457 1208 L
+ 457 1208 mt  463 1181 L
+ 463 1181 mt  469 1153 L
+ 469 1153 mt  473 1138 L
+ 473 1138 mt  476 1126 L
+ 476 1126 mt  484 1098 L
+ 484 1098 mt  492 1071 L
+ 492 1071 mt  500 1043 L
+ 500 1043 mt  508 1021 L
+ 508 1021 mt  510 1016 L
+ 510 1016 mt  519  988 L
+ 519  988 mt  529  961 L
+ 529  961 mt  540  933 L
+ 540  933 mt  543  927 L
+ 543  927 mt  552  906 L
+ 552  906 mt  564  878 L
+ 564  878 mt  577  851 L
+ 577  851 mt  578  849 L
+ 578  849 mt  590  823 L
+ 590  823 mt  605  796 L
+ 605  796 mt  613  781 L
+ 613  781 mt  620  768 L
+ 620  768 mt  636  741 L
+ 636  741 mt  647  722 L
+ 647  722 mt  653  713 L
+ 653  713 mt  670  686 L
+ 670  686 mt  682  668 L
+ 682  668 mt  689  658 L
+ 689  658 mt  708  631 L
+ 708  631 mt  717  619 L
+ 717  619 mt  729  603 L
+ 729  603 mt  750  576 L
+ 750  576 mt  752  573 L
+ 752  573 mt  772  548 L
+ 772  548 mt  787  531 L
+ 787  531 mt  796  521 L
+ 796  521 mt  820  493 L
+ 820  493 mt  822  492 L
+ 822  492 mt  846  466 L
+ 846  466 mt  857  455 L
+ 857  455 mt  874  438 L
+ 874  438 mt  892  422 L
+ 892  422 mt  904  411 L
+ 904  411 mt  926  392 L
+ 926  392 mt  937  383 L
+ 937  383 mt  961  365 L
+ 961  365 mt  974  355 L
+ 974  355 mt  996  340 L
+ 996  340 mt 1014  328 L
+1014  328 mt 1031  317 L
+1031  317 mt 1059  300 L
+1059  300 mt 1066  296 L
+1066  296 mt 1101  277 L
+1101  277 mt 1110  273 L
+1110  273 mt 1136  260 L
+1136  260 mt 1169  245 L
+1169  245 mt 1170  245 L
+1170  245 mt 1205  230 L
+1205  230 mt 1239  218 L
+1239  218 mt 1240  218 L
+1240  218 mt 1275  206 L
+1275  206 mt 1310  195 L
+1310  195 mt 1328  190 L
+1328  190 mt 1345  186 L
+1345  186 mt 1380  177 L
+1380  177 mt 1415  168 L
+1415  168 mt 1439  163 L
+1439  163 mt 1449  160 L
+1449  160 mt 1484  153 L
+1484  153 mt 1519  146 L
+1519  146 mt 1554  138 L
+1554  138 mt 1569  135 L
+1569  135 mt 1589  131 L
+1589  131 mt 1624  125 L
+1624  125 mt 1659  118 L
+1659  118 mt 1694  111 L
+1694  111 mt 1713  108 L
+1713  108 mt 1728  105 L
+1728  105 mt 1763   99 L
+1763   99 mt 1798   93 L
+1798   93 mt 1833   87 L
+1833   87 mt 1868   82 L
+1868   82 mt 1880   80 L
+1880   80 mt 1903   77 L
+1903   77 mt 1938   72 L
+1938   72 mt 1972   67 L
+1972   67 mt 2007   63 L
+2007   63 mt 2042   59 L
+2042   59 mt 2077   54 L
+2077   54 mt 2090   53 L
+2090   53 mt 2112   50 L
+2112   50 mt 2147   46 L
+2147   46 mt 2182   42 L
+2182   42 mt 2217   38 L
+2217   38 mt 2251   34 L
+2251   34 mt 2286   30 L
+2286   30 mt 2321   26 L
+2321   26 mt 2324   25 L
+2324   25 mt 2356   21 L
+2356   21 mt 2391   17 L
+2391   17 mt 2426   12 L
+2426   12 mt 2461    7 L
+2461    7 mt 2496    2 L
+2496    2 mt 2526   -1 L
+2526   -1 mt 2530   -2 L
+2530   -2 mt 2565   -7 L
+2565   -7 mt 2600  -11 L
+2600  -11 mt 2635  -16 L
+2635  -16 mt 2670  -20 L
+2670  -20 mt 2705  -25 L
+2705  -25 mt 2736  -29 L
+2736  -29 mt 2740  -29 L
+2740  -29 mt 2774  -34 L
+2774  -34 mt 2809  -38 L
+2809  -38 mt 2844  -43 L
+2844  -43 mt 2879  -47 L
+2879  -47 mt 2914  -51 L
+2914  -51 mt 2949  -56 L
+2949  -56 mt 2955  -56 L
+2955  -56 mt 2984  -60 L
+2984  -60 mt 3019  -64 L
+3019  -64 mt 3053  -68 L
+3053  -68 mt 3088  -72 L
+3088  -72 mt 3123  -76 L
+3123  -76 mt 3158  -81 L
+3158  -81 mt 3182  -84 L
+3182  -84 mt 3193  -85 L
+3193  -85 mt 3228  -89 L
+3228  -89 mt 3263  -94 L
+3263  -94 mt 3298  -98 L
+3298  -98 mt 3332 -102 L
+3332 -102 mt 3367 -107 L
+3367 -107 mt 3402 -111 L
+3402 -111 mt 3405 -111 L
+3405 -111 mt 3437 -115 L
+3437 -115 mt 3472 -119 L
+3472 -119 mt 3507 -123 L
+3507 -123 mt 3542 -127 L
+3542 -127 mt 3577 -131 L
+3577 -131 mt 3611 -134 L
+3611 -134 mt 3646 -138 L
+3646 -138 mt 3655 -139 L
+3655 -139 mt 3681 -141 L
+3681 -141 mt 3716 -145 L
+3716 -145 mt 3751 -148 L
+3751 -148 mt 3786 -152 L
+3786 -152 mt 3821 -155 L
+3821 -155 mt 3855 -158 L
+3855 -158 mt 3890 -161 L
+3890 -161 mt 3925 -164 L
+3925 -164 mt 3960 -166 L
+3960 -166 mt 3962 -166 L
+3962 -166 mt 3995 -168 L
+3995 -168 mt 4030 -170 L
+4030 -170 mt 4065 -172 L
+4065 -172 mt 4100 -174 L
+4100 -174 mt 4134 -175 L
+4134 -175 mt 4169 -176 L
+4169 -176 mt 4204 -177 L
+4204 -177 mt 4239 -177 L
+4239 -177 mt 4274 -178 L
+4274 -178 mt 4309 -177 L
+4309 -177 mt 4344 -177 L
+4344 -177 mt 4379 -176 L
+4379 -176 mt 4413 -174 L
+4413 -174 mt 4448 -173 L
+4448 -173 mt 4483 -170 L
+4483 -170 mt 4518 -168 L
+4518 -168 mt 4533 -166 L
+4533 -166 mt 4553 -164 L
+4553 -164 mt 4588 -161 L
+4588 -161 mt 4623 -157 L
+4623 -157 mt 4657 -153 L
+4657 -153 mt 4692 -148 L
+4692 -148 mt 4727 -143 L
+4727 -143 mt 4751 -139 L
+4751 -139 mt 4762 -137 L
+4762 -137 mt 4797 -131 L
+4797 -131 mt 4832 -125 L
+4832 -125 mt 4867 -118 L
+4867 -118 mt 4897 -111 L
+4897 -111 mt 4902 -110 L
+4902 -110 mt 4936 -102 L
+4936 -102 mt 4971  -94 L
+4971  -94 mt 5006  -85 L
+5006  -85 mt 5009  -84 L
+5009  -84 mt 5041  -75 L
+5041  -75 mt 5076  -65 L
+5076  -65 mt 5105  -56 L
+5105  -56 mt 5111  -55 L
+5111  -55 mt 5146  -44 L
+5146  -44 mt 5181  -32 L
+5181  -32 mt 5191  -29 L
+5191  -29 mt 5215  -20 L
+5215  -20 mt 5250   -7 L
+5250   -7 mt 5266   -1 L
+5266   -1 mt 5285    5 L
+5285    5 mt 5320   20 L
+5320   20 mt 5332   25 L
+5332   25 mt 5355   36 L
+5355   36 mt 5390   52 L
+5390   52 mt 5391   53 L
+5391   53 mt 5425   70 L
+5425   70 mt 5445   80 L
+5445   80 mt 5459   88 L
+5459   88 mt 5494  108 L
+5494  108 mt 5494  108 L
+5494  108 mt 5529  129 L
+5529  129 mt 5539  135 L
+5539  135 mt 5564  151 L
+5564  151 mt 5581  163 L
+5581  163 mt 5599  175 L
+5599  175 mt 5621  190 L
+5621  190 mt 5634  199 L
+5634  199 mt 5659  218 L
+5659  218 mt 5669  225 L
+5669  225 mt 5695  245 L
+5695  245 mt 5704  252 L
+5704  252 mt 5730  273 L
+5730  273 mt 5738  280 L
+5738  280 mt 5763  300 L
+5763  300 mt 5773  309 L
+5773  309 mt 5795  328 L
+5795  328 mt 5808  339 L
+5808  339 mt 5826  355 L
+5826  355 mt 5843  371 L
+5843  371 mt 5857  383 L
+5857  383 mt 5878  403 L
+5878  403 mt 5886  411 L
+5886  411 mt 5913  435 L
+5913  435 mt 5915  438 L
+5915  438 mt 5944  466 L
+5944  466 mt 5948  469 L
+5948  469 mt 5973  493 L
+5973  493 mt 5983  503 L
+5983  503 mt 6001  521 L
+6001  521 mt 6017  537 L
+6017  537 mt 6029  548 L
+6029  548 mt 6052  572 L
+6052  572 mt 6056  576 L
+6056  576 mt 6084  603 L
+6084  603 mt 6087  606 L
+6087  606 mt 6112  631 L
+6112  631 mt 6122  641 L
+6122  641 mt 6139  658 L
+6139  658 mt 6157  676 L
+6157  676 mt 6166  686 L
+6166  686 mt 6192  712 L
+6192  712 mt 6193  713 L
+6193  713 mt 6220  741 L
+6220  741 mt 6227  747 L
+6227  747 mt 6247  768 L
+6247  768 mt 6261  783 L
+6261  783 mt 6274  796 L
+6274  796 mt 6296  818 L
+6296  818 mt 6301  823 L
+6301  823 mt 6328  851 L
+6328  851 mt 6331  854 L
+6331  854 mt 6355  878 L
+6355  878 mt 6366  889 L
+6366  889 mt 6382  906 L
+6382  906 mt 6401  925 L
+6401  925 mt 6409  933 L
+6409  933 mt 6435  961 L
+6435  961 mt 6436  961 L
+6436  961 mt 6462  988 L
+6462  988 mt 6471  998 L
+6471  998 mt 6488 1016 L
+6488 1016 mt 6506 1034 L
+6506 1034 mt 6514 1043 L
+6514 1043 mt 6540 1071 L
+6540 1071 mt 6540 1072 L
+6540 1072 mt 6565 1098 L
+6565 1098 mt 6575 1110 L
+6575 1110 mt 6589 1126 L
+6589 1126 mt 6610 1150 L
+6610 1150 mt 6613 1153 L
+6613 1153 mt 6637 1181 L
+6637 1181 mt 6645 1191 L
+6645 1191 mt 6660 1208 L
+6660 1208 mt 6680 1233 L
+6680 1233 mt 6682 1236 L
+6682 1236 mt 6704 1263 L
+6704 1263 mt 6715 1277 L
+6715 1277 mt 6726 1291 L
+6726 1291 mt 6746 1318 L
+6746 1318 mt 6750 1323 L
+6750 1323 mt 6767 1346 L
+6767 1346 mt 6785 1371 L
+6785 1371 mt 6786 1373 L
+6786 1373 mt 6805 1401 L
+6805 1401 mt 6819 1423 L
+6819 1423 mt 6823 1428 L
+6823 1428 mt 6841 1456 L
+6841 1456 mt 6854 1478 L
+6854 1478 mt 6858 1484 L
+6858 1484 mt 6874 1511 L
+6874 1511 mt 6889 1539 L
+6889 1539 mt 6889 1539 L
+6889 1539 mt 6903 1566 L
+6903 1566 mt 6917 1594 L
+6917 1594 mt 6924 1608 L
+6924 1608 mt 6930 1621 L
+6930 1621 mt 6943 1649 L
+6943 1649 mt 6954 1676 L
+6954 1676 mt 6959 1688 L
+6959 1688 mt 6965 1704 L
+6965 1704 mt 6976 1731 L
+6976 1731 mt 6985 1759 L
+6985 1759 mt 6994 1784 L
+6994 1784 mt 6994 1786 L
+6994 1786 mt 7003 1814 L
+7003 1814 mt 7010 1841 L
+7010 1841 mt 7017 1869 L
+7017 1869 mt 7022 1896 L
+7022 1896 mt 7027 1924 L
+7027 1924 mt 7029 1934 L
+6959 1864 mt 6960 1869 L
+6960 1869 mt 6965 1896 L
+6965 1896 mt 6970 1924 L
+6970 1924 mt 6973 1951 L
+6973 1951 mt 6976 1979 L
+6976 1979 mt 6979 2006 L
+6979 2006 mt 6980 2034 L
+6980 2034 mt 6981 2061 L
+6981 2061 mt 6981 2089 L
+6981 2089 mt 6981 2116 L
+6981 2116 mt 6980 2144 L
+6980 2144 mt 6978 2171 L
+6978 2171 mt 6975 2199 L
+6975 2199 mt 6972 2226 L
+6972 2226 mt 6968 2254 L
+6968 2254 mt 6964 2281 L
+6964 2281 mt 6959 2309 L
+6959 2309 mt 6959 2310 L
+6959 2310 mt 6954 2336 L
+6954 2336 mt 6947 2364 L
+6947 2364 mt 6941 2391 L
+6941 2391 mt 6934 2419 L
+6934 2419 mt 6926 2446 L
+6926 2446 mt 6924 2453 L
+6924 2453 mt 6918 2474 L
+6918 2474 mt 6909 2502 L
+6909 2502 mt 6900 2529 L
+6900 2529 mt 6891 2557 L
+6891 2557 mt 6889 2562 L
+6889 2562 mt 6881 2584 L
+6881 2584 mt 6872 2612 L
+6872 2612 mt 6862 2639 L
+6862 2639 mt 6854 2658 L
+6854 2658 mt 6851 2667 L
+6851 2667 mt 6840 2694 L
+6840 2694 mt 6830 2722 L
+6830 2722 mt 6819 2746 L
+6819 2746 mt 6818 2749 L
+6818 2749 mt 6807 2777 L
+6807 2777 mt 6795 2804 L
+6795 2804 mt 6785 2830 L
+6785 2830 mt 6784 2832 L
+6784 2832 mt 6773 2859 L
+6773 2859 mt 6761 2887 L
+6761 2887 mt 6750 2914 L
+6750 2914 mt 6750 2916 L
+6750 2916 mt 6740 2942 L
+6740 2942 mt 6729 2969 L
+6729 2969 mt 6719 2997 L
+6719 2997 mt 6715 3007 L
+6715 3007 mt 6708 3024 L
+6708 3024 mt 6698 3052 L
+6698 3052 mt 6688 3079 L
+6688 3079 mt 6680 3103 L
+6680 3103 mt 6679 3107 L
+6679 3107 mt 6669 3134 L
+6669 3134 mt 6660 3162 L
+6660 3162 mt 6652 3189 L
+6652 3189 mt 6645 3212 L
+6645 3212 mt 6643 3217 L
+6643 3217 mt 6635 3244 L
+6635 3244 mt 6628 3272 L
+6628 3272 mt 6620 3299 L
+6620 3299 mt 6612 3327 L
+6612 3327 mt 6610 3333 L
+6610 3333 mt 6604 3354 L
+6604 3354 mt 6596 3382 L
+6596 3382 mt 6588 3409 L
+6588 3409 mt 6579 3437 L
+6579 3437 mt 6575 3448 L
+6575 3448 mt 6570 3464 L
+6570 3464 mt 6560 3492 L
+6560 3492 mt 6550 3519 L
+6550 3519 mt 6540 3543 L
+6540 3543 mt 6539 3547 L
+6539 3547 mt 6527 3575 L
+6527 3575 mt 6515 3602 L
+6515 3602 mt 6506 3622 L
+6506 3622 mt 6502 3630 L
+6502 3630 mt 6488 3657 L
+6488 3657 mt 6474 3685 L
+6474 3685 mt 6471 3691 L
+6471 3691 mt 6459 3712 L
+6459 3712 mt 6444 3740 L
+6444 3740 mt 6436 3755 L
+6436 3755 mt 6429 3767 L
+6429 3767 mt 6414 3795 L
+6414 3795 mt 6401 3819 L
+6401 3819 mt 6399 3822 L
+6399 3822 mt 6385 3850 L
+6385 3850 mt 6372 3877 L
+6372 3877 mt 6366 3888 L
+6366 3888 mt 6358 3905 L
+6358 3905 mt 6344 3932 L
+6344 3932 mt 6331 3952 L
+6331 3952 mt 6325 3960 L
+6325 3960 mt 6301 3987 L
+6301 3987 mt 6296 3992 L
+6296 3992 mt 6267 4015 L
+6267 4015 mt 6261 4019 L
+6261 4019 mt 6227 4022 L
+6227 4022 mt 6216 4015 L
+6216 4015 mt 6192 3998 L
+6192 3998 mt 6184 3987 L
+6184 3987 mt 6166 3960 L
+6166 3960 mt 6157 3944 L
+6157 3944 mt 6151 3932 L
+6151 3932 mt 6138 3905 L
+6138 3905 mt 6125 3877 L
+6125 3877 mt 6122 3868 L
+6122 3868 mt 6115 3850 L
+6115 3850 mt 6105 3822 L
+6105 3822 mt 6094 3795 L
+6094 3795 mt 6087 3782 L
+6087 3782 mt 6079 3767 L
+6079 3767 mt 6062 3740 L
+6062 3740 mt 6052 3727 L
+6052 3727 mt 6040 3712 L
+6040 3712 mt 6017 3688 L
+6017 3688 mt 6013 3685 L
+6013 3685 mt 5983 3661 L
+5983 3661 mt 5976 3657 L
+5976 3657 mt 5948 3642 L
+5948 3642 mt 5915 3630 L
+5915 3630 mt 5913 3629 L
+5913 3629 mt 5878 3617 L
+5878 3617 mt 5843 3605 L
+5843 3605 mt 5835 3602 L
+5835 3602 mt 5808 3592 L
+5808 3592 mt 5773 3577 L
+5773 3577 mt 5768 3575 L
+5768 3575 mt 5738 3559 L
+5738 3559 mt 5720 3547 L
+5720 3547 mt 5704 3536 L
+5704 3536 mt 5683 3519 L
+5683 3519 mt 5669 3507 L
+5669 3507 mt 5654 3492 L
+5654 3492 mt 5634 3470 L
+5634 3470 mt 5630 3464 L
+5630 3464 mt 5610 3437 L
+5610 3437 mt 5599 3417 L
+5599 3417 mt 5595 3409 L
+5595 3409 mt 5581 3382 L
+5581 3382 mt 5569 3354 L
+5569 3354 mt 5564 3340 L
+5564 3340 mt 5559 3327 L
+5559 3327 mt 5551 3299 L
+5551 3299 mt 5545 3272 L
+5545 3272 mt 5538 3244 L
+5538 3244 mt 5530 3217 L
+5530 3217 mt 5529 3214 L
+5529 3214 mt 5520 3189 L
+5520 3189 mt 5509 3162 L
+5509 3162 mt 5494 3137 L
+5494 3137 mt 5493 3134 L
+5493 3134 mt 5470 3107 L
+5470 3107 mt 5459 3097 L
+5459 3097 mt 5438 3079 L
+5438 3079 mt 5425 3070 L
+5425 3070 mt 5397 3052 L
+5397 3052 mt 5390 3047 L
+5390 3047 mt 5360 3024 L
+5360 3024 mt 5355 3020 L
+5355 3020 mt 5329 2997 L
+5329 2997 mt 5320 2988 L
+5320 2988 mt 5300 2969 L
+5300 2969 mt 5285 2957 L
+5285 2957 mt 5266 2942 L
+5266 2942 mt 5250 2931 L
+5250 2931 mt 5219 2914 L
+5219 2914 mt 5215 2913 L
+5215 2913 mt 5181 2901 L
+5181 2901 mt 5146 2892 L
+5146 2892 mt 5129 2887 L
+5129 2887 mt 5111 2881 L
+5111 2881 mt 5076 2866 L
+5076 2866 mt 5062 2859 L
+5062 2859 mt 5041 2849 L
+5041 2849 mt 5007 2832 L
+5007 2832 mt 5006 2831 L
+5006 2831 mt 4971 2810 L
+4971 2810 mt 4964 2804 L
+4964 2804 mt 4936 2780 L
+4936 2780 mt 4933 2777 L
+4933 2777 mt 4906 2749 L
+4906 2749 mt 4902 2744 L
+4902 2744 mt 4884 2722 L
+4884 2722 mt 4867 2700 L
+4867 2700 mt 4863 2694 L
+4863 2694 mt 4845 2667 L
+4845 2667 mt 4832 2646 L
+4832 2646 mt 4827 2639 L
+4827 2639 mt 4815 2612 L
+4815 2612 mt 4804 2584 L
+4804 2584 mt 4797 2563 L
+4797 2563 mt 4795 2557 L
+4795 2557 mt 4791 2529 L
+4791 2529 mt 4789 2502 L
+4789 2502 mt 4788 2474 L
+4788 2474 mt 4787 2446 L
+4787 2446 mt 4783 2419 L
+4783 2419 mt 4769 2391 L
+4769 2391 mt 4762 2383 L
+4762 2383 mt 4745 2364 L
+4745 2364 mt 4727 2347 L
+4727 2347 mt 4715 2336 L
+4715 2336 mt 4692 2315 L
+4692 2315 mt 4685 2309 L
+4685 2309 mt 4657 2283 L
+4657 2283 mt 4656 2281 L
+4656 2281 mt 4627 2254 L
+4627 2254 mt 4623 2250 L
+4623 2250 mt 4594 2226 L
+4594 2226 mt 4588 2221 L
+4588 2221 mt 4562 2199 L
+4562 2199 mt 4553 2188 L
+4553 2188 mt 4538 2171 L
+4538 2171 mt 4522 2144 L
+4522 2144 mt 4518 2133 L
+4518 2133 mt 4511 2116 L
+4511 2116 mt 4504 2089 L
+4504 2089 mt 4497 2061 L
+4497 2061 mt 4484 2034 L
+4484 2034 mt 4483 2032 L
+4483 2032 mt 4448 2009 L
+4448 2009 mt 4442 2006 L
+4442 2006 mt 4413 1999 L
+4413 1999 mt 4379 1993 L
+4379 1993 mt 4344 1989 L
+4344 1989 mt 4309 1984 L
+4309 1984 mt 4274 1981 L
+4274 1981 mt 4257 1979 L
+4257 1979 mt 4239 1976 L
+4239 1976 mt 4204 1970 L
+4204 1970 mt 4172 1951 L
+4172 1951 mt 4169 1949 L
+4169 1949 mt 4147 1924 L
+4147 1924 mt 4134 1911 L
+4134 1911 mt 4122 1896 L
+4122 1896 mt 4100 1874 L
+4100 1874 mt 4094 1869 L
+4094 1869 mt 4065 1849 L
+4065 1849 mt 4047 1841 L
+4047 1841 mt 4030 1834 L
+4030 1834 mt 3995 1826 L
+3995 1826 mt 3960 1818 L
+3960 1818 mt 3933 1814 L
+3933 1814 mt 3925 1813 L
+3925 1813 mt 3890 1807 L
+3890 1807 mt 3855 1803 L
+3855 1803 mt 3821 1799 L
+3821 1799 mt 3786 1794 L
+3786 1794 mt 3751 1787 L
+3751 1787 mt 3747 1786 L
+3747 1786 mt 3716 1776 L
+3716 1776 mt 3681 1759 L
+3681 1759 mt 3680 1759 L
+3680 1759 mt 3646 1740 L
+3646 1740 mt 3634 1731 L
+3634 1731 mt 3611 1715 L
+3611 1715 mt 3597 1704 L
+3597 1704 mt 3577 1687 L
+3577 1687 mt 3564 1676 L
+3564 1676 mt 3542 1656 L
+3542 1656 mt 3532 1649 L
+3532 1649 mt 3507 1628 L
+3507 1628 mt 3496 1621 L
+3496 1621 mt 3472 1604 L
+3472 1604 mt 3451 1594 L
+3451 1594 mt 3437 1585 L
+3437 1585 mt 3402 1571 L
+3402 1571 mt 3384 1566 L
+3384 1566 mt 3367 1561 L
+3367 1561 mt 3332 1556 L
+3332 1556 mt 3298 1552 L
+3298 1552 mt 3263 1548 L
+3263 1548 mt 3228 1543 L
+3228 1543 mt 3203 1539 L
+3203 1539 mt 3193 1537 L
+3193 1537 mt 3158 1529 L
+3158 1529 mt 3123 1520 L
+3123 1520 mt 3091 1511 L
+3091 1511 mt 3088 1510 L
+3088 1510 mt 3053 1502 L
+3053 1502 mt 3019 1493 L
+3019 1493 mt 2984 1487 L
+2984 1487 mt 2960 1484 L
+2960 1484 mt 2949 1482 L
+2949 1482 mt 2914 1480 L
+2914 1480 mt 2879 1479 L
+2879 1479 mt 2844 1479 L
+2844 1479 mt 2809 1482 L
+2809 1482 mt 2791 1484 L
+2791 1484 mt 2774 1485 L
+2774 1485 mt 2740 1490 L
+2740 1490 mt 2705 1495 L
+2705 1495 mt 2670 1500 L
+2670 1500 mt 2635 1506 L
+2635 1506 mt 2610 1511 L
+2610 1511 mt 2600 1513 L
+2600 1513 mt 2565 1519 L
+2565 1519 mt 2530 1525 L
+2530 1525 mt 2496 1530 L
+2496 1530 mt 2461 1533 L
+2461 1533 mt 2426 1534 L
+2426 1534 mt 2391 1533 L
+2391 1533 mt 2356 1532 L
+2356 1532 mt 2321 1530 L
+2321 1530 mt 2286 1528 L
+2286 1528 mt 2251 1527 L
+2251 1527 mt 2217 1530 L
+2217 1530 mt 2182 1536 L
+2182 1536 mt 2173 1539 L
+2173 1539 mt 2147 1549 L
+2147 1549 mt 2122 1566 L
+2122 1566 mt 2112 1574 L
+2112 1574 mt 2094 1594 L
+2094 1594 mt 2077 1614 L
+2077 1614 mt 2073 1621 L
+2073 1621 mt 2058 1649 L
+2058 1649 mt 2044 1676 L
+2044 1676 mt 2042 1681 L
+2042 1681 mt 2034 1704 L
+2034 1704 mt 2026 1731 L
+2026 1731 mt 2020 1759 L
+2020 1759 mt 2015 1786 L
+2015 1786 mt 2012 1814 L
+2012 1814 mt 2009 1841 L
+2009 1841 mt 2007 1863 L
+2007 1863 mt 2007 1869 L
+2007 1869 mt 2006 1896 L
+2006 1896 mt 2005 1924 L
+2005 1924 mt 2004 1951 L
+2004 1951 mt 2005 1979 L
+2005 1979 mt 2007 1998 L
+2007 1998 mt 2009 2006 L
+2009 2006 mt 2017 2034 L
+2017 2034 mt 2026 2061 L
+2026 2061 mt 2031 2089 L
+2031 2089 mt 2028 2116 L
+2028 2116 mt 2015 2144 L
+2015 2144 mt 2007 2155 L
+2007 2155 mt 1998 2171 L
+1998 2171 mt 1983 2199 L
+1983 2199 mt 1976 2226 L
+1976 2226 mt 1980 2254 L
+1980 2254 mt 1992 2281 L
+1992 2281 mt 2007 2305 L
+2007 2305 mt 2011 2309 L
+2011 2309 mt 2037 2336 L
+2037 2336 mt 2042 2342 L
+2042 2342 mt 2069 2364 L
+2069 2364 mt 2077 2371 L
+2077 2371 mt 2103 2391 L
+2103 2391 mt 2112 2398 L
+2112 2398 mt 2138 2419 L
+2138 2419 mt 2147 2426 L
+2147 2426 mt 2172 2446 L
+2172 2446 mt 2182 2455 L
+2182 2455 mt 2202 2474 L
+2202 2474 mt 2217 2489 L
+2217 2489 mt 2227 2502 L
+2227 2502 mt 2247 2529 L
+2247 2529 mt 2251 2535 L
+2251 2535 mt 2265 2557 L
+2265 2557 mt 2282 2584 L
+2282 2584 mt 2286 2592 L
+2286 2592 mt 2298 2612 L
+2298 2612 mt 2313 2639 L
+2313 2639 mt 2321 2652 L
+2321 2652 mt 2330 2667 L
+2330 2667 mt 2348 2694 L
+2348 2694 mt 2356 2706 L
+2356 2706 mt 2367 2722 L
+2367 2722 mt 2388 2749 L
+2388 2749 mt 2391 2752 L
+2391 2752 mt 2412 2777 L
+2412 2777 mt 2426 2792 L
+2426 2792 mt 2436 2804 L
+2436 2804 mt 2461 2830 L
+2461 2830 mt 2462 2832 L
+2462 2832 mt 2487 2859 L
+2487 2859 mt 2496 2870 L
+2496 2870 mt 2508 2887 L
+2508 2887 mt 2525 2914 L
+2525 2914 mt 2530 2927 L
+2530 2927 mt 2537 2942 L
+2537 2942 mt 2542 2969 L
+2542 2969 mt 2541 2997 L
+2541 2997 mt 2537 3024 L
+2537 3024 mt 2533 3052 L
+2533 3052 mt 2530 3061 L
+2530 3061 mt 2526 3079 L
+2526 3079 mt 2517 3107 L
+2517 3107 mt 2511 3134 L
+2511 3134 mt 2514 3162 L
+2514 3162 mt 2530 3188 L
+2530 3188 mt 2532 3189 L
+2532 3189 mt 2565 3211 L
+2565 3211 mt 2576 3217 L
+2576 3217 mt 2600 3228 L
+2600 3228 mt 2635 3243 L
+2635 3243 mt 2639 3244 L
+2639 3244 mt 2670 3258 L
+2670 3258 mt 2697 3272 L
+2697 3272 mt 2705 3277 L
+2705 3277 mt 2739 3299 L
+2739 3299 mt 2740 3300 L
+2740 3300 mt 2768 3327 L
+2768 3327 mt 2774 3334 L
+2774 3334 mt 2790 3354 L
+2790 3354 mt 2809 3382 L
+2809 3382 mt 2809 3382 L
+2809 3382 mt 2826 3409 L
+2826 3409 mt 2841 3437 L
+2841 3437 mt 2844 3443 L
+2844 3443 mt 2855 3464 L
+2855 3464 mt 2867 3492 L
+2867 3492 mt 2879 3517 L
+2879 3517 mt 2880 3519 L
+2880 3519 mt 2894 3547 L
+2894 3547 mt 2907 3575 L
+2907 3575 mt 2914 3589 L
+2914 3589 mt 2920 3602 L
+2920 3602 mt 2928 3630 L
+2928 3630 mt 2930 3657 L
+2930 3657 mt 2925 3685 L
+2925 3685 mt 2915 3712 L
+2915 3712 mt 2914 3713 L
+2914 3713 mt 2902 3740 L
+2902 3740 mt 2889 3767 L
+2889 3767 mt 2879 3795 L
+2879 3795 mt 2879 3796 L
+2879 3796 mt 2871 3822 L
+2871 3822 mt 2864 3850 L
+2864 3850 mt 2857 3877 L
+2857 3877 mt 2846 3905 L
+2846 3905 mt 2844 3907 L
+2844 3907 mt 2826 3932 L
+2826 3932 mt 2809 3947 L
+2809 3947 mt 2792 3960 L
+2792 3960 mt 2774 3971 L
+2774 3971 mt 2746 3987 L
+2746 3987 mt 2740 3991 L
+2740 3991 mt 2705 4009 L
+2705 4009 mt 2696 4015 L
+2696 4015 mt 2670 4030 L
+2670 4030 mt 2652 4042 L
+2652 4042 mt 2635 4056 L
+2635 4056 mt 2623 4070 L
+2623 4070 mt 2609 4097 L
+2609 4097 mt 2606 4125 L
+2606 4125 mt 2613 4152 L
+2613 4152 mt 2626 4180 L
+2626 4180 mt 2635 4193 L
+2635 4193 mt 2646 4207 L
+2646 4207 mt 2670 4235 L
+2670 4235 mt 2670 4235 L
+2670 4235 mt 2699 4262 L
+2699 4262 mt 2705 4267 L
+2705 4267 mt 2737 4290 L
+2737 4290 mt 2740 4291 L
+2740 4291 mt 2774 4309 L
+2774 4309 mt 2792 4317 L
+2792 4317 mt 2809 4325 L
+2809 4325 mt 2844 4339 L
+2844 4339 mt 2857 4345 L
+2857 4345 mt 2879 4354 L
+2879 4354 mt 2914 4371 L
+2914 4371 mt 2915 4372 L
+2915 4372 mt 2949 4391 L
+2949 4391 mt 2962 4400 L
+2962 4400 mt 2984 4413 L
+2984 4413 mt 3008 4427 L
+3008 4427 mt 3019 4433 L
+3019 4433 mt 3053 4453 L
+3053 4453 mt 3057 4455 L
+3057 4455 mt 3088 4472 L
+3088 4472 mt 3109 4482 L
+3109 4482 mt 3123 4489 L
+3123 4489 mt 3158 4504 L
+3158 4504 mt 3171 4510 L
+3171 4510 mt 3193 4519 L
+3193 4519 mt 3228 4532 L
+3228 4532 mt 3244 4537 L
+3244 4537 mt 3263 4545 L
+3263 4545 mt 3298 4556 L
+3298 4556 mt 3320 4565 L
+3320 4565 mt 3332 4571 L
+3332 4571 mt 3362 4592 L
+3362 4592 mt 3353 4620 L
+3353 4620 mt 3332 4633 L
+3332 4633 mt 3298 4648 L
+3298 4648 mt 3298 4648 L
+3298 4648 mt 3263 4664 L
+3263 4664 mt 3243 4675 L
+3243 4675 mt 3228 4682 L
+3228 4682 mt 3193 4700 L
+3193 4700 mt 3187 4703 L
+3187 4703 mt 3158 4716 L
+3158 4716 mt 3126 4730 L
+3126 4730 mt 3123 4731 L
+3123 4731 mt 3088 4745 L
+3088 4745 mt 3057 4758 L
+3057 4758 mt 3053 4759 L
+3053 4759 mt 3019 4771 L
+3019 4771 mt 2984 4782 L
+2984 4782 mt 2975 4785 L
+2975 4785 mt 2949 4793 L
+2949 4793 mt 2914 4803 L
+2914 4803 mt 2879 4813 L
+2879 4813 mt 2879 4813 L
+2879 4813 mt 2844 4822 L
+2844 4822 mt 2809 4830 L
+2809 4830 mt 2774 4839 L
+2774 4839 mt 2768 4840 L
+2768 4840 mt 2740 4846 L
+2740 4846 mt 2705 4854 L
+2705 4854 mt 2670 4861 L
+2670 4861 mt 2635 4867 L
+2635 4867 mt 2630 4868 L
+2630 4868 mt 2600 4872 L
+2600 4872 mt 2565 4878 L
+2565 4878 mt 2530 4882 L
+2530 4882 mt 2496 4886 L
+2496 4886 mt 2461 4890 L
+2461 4890 mt 2426 4893 L
+2426 4893 mt 2391 4895 L
+2391 4895 mt 2385 4895 L
+2385 4895 mt 2356 4896 L
+2356 4896 mt 2321 4897 L
+2321 4897 mt 2286 4897 L
+2286 4897 mt 2251 4896 L
+2251 4896 mt 2230 4895 L
+2230 4895 mt 2217 4895 L
+2217 4895 mt 2182 4892 L
+2182 4892 mt 2147 4889 L
+2147 4889 mt 2112 4884 L
+2112 4884 mt 2077 4879 L
+2077 4879 mt 2042 4873 L
+2042 4873 mt 2015 4868 L
+2015 4868 mt 2007 4866 L
+2007 4866 mt 1972 4858 L
+1972 4858 mt 1938 4849 L
+1938 4849 mt 1906 4840 L
+1906 4840 mt 1903 4839 L
+1903 4839 mt 1868 4828 L
+1868 4828 mt 1833 4815 L
+1833 4815 mt 1827 4813 L
+1827 4813 mt 1798 4801 L
+1798 4801 mt 1766 4785 L
+1766 4785 mt 1763 4784 L
+1763 4784 mt 1728 4765 L
+1728 4765 mt 1716 4758 L
+1716 4758 mt 1694 4743 L
+1694 4743 mt 1675 4730 L
+1675 4730 mt 1659 4717 L
+1659 4717 mt 1641 4703 L
+1641 4703 mt 1624 4686 L
+1624 4686 mt 1613 4675 L
+1613 4675 mt 1589 4648 L
+1589 4648 mt 1589 4648 L
+1589 4648 mt 1568 4620 L
+1568 4620 mt 1554 4599 L
+1554 4599 mt 1550 4592 L
+1550 4592 mt 1533 4565 L
+1533 4565 mt 1519 4539 L
+1519 4539 mt 1518 4537 L
+1518 4537 mt 1505 4510 L
+1505 4510 mt 1492 4482 L
+1492 4482 mt 1484 4464 L
+1484 4464 mt 1480 4455 L
+1480 4455 mt 1470 4427 L
+1470 4427 mt 1460 4400 L
+1460 4400 mt 1450 4372 L
+1450 4372 mt 1449 4371 L
+1449 4371 mt 1441 4345 L
+1441 4345 mt 1432 4317 L
+1432 4317 mt 1423 4290 L
+1423 4290 mt 1415 4262 L
+1415 4262 mt 1415 4259 L
+1415 4259 mt 1409 4235 L
+1409 4235 mt 1404 4207 L
+1404 4207 mt 1401 4180 L
+1401 4180 mt 1400 4152 L
+1400 4152 mt 1400 4125 L
+1400 4125 mt 1403 4097 L
+1403 4097 mt 1407 4070 L
+1407 4070 mt 1414 4042 L
+1414 4042 mt 1415 4040 L
+1415 4040 mt 1422 4015 L
+1422 4015 mt 1432 3987 L
+1432 3987 mt 1443 3960 L
+1443 3960 mt 1449 3945 L
+1449 3945 mt 1456 3932 L
+1456 3932 mt 1469 3905 L
+1469 3905 mt 1483 3877 L
+1483 3877 mt 1484 3874 L
+1484 3874 mt 1497 3850 L
+1497 3850 mt 1509 3822 L
+1509 3822 mt 1519 3797 L
+1519 3797 mt 1520 3795 L
+1520 3795 mt 1529 3767 L
+1529 3767 mt 1536 3740 L
+1536 3740 mt 1540 3712 L
+1540 3712 mt 1541 3685 L
+1541 3685 mt 1539 3657 L
+1539 3657 mt 1535 3630 L
+1535 3630 mt 1528 3602 L
+1528 3602 mt 1519 3575 L
+1519 3575 mt 1519 3574 L
+1519 3574 mt 1507 3547 L
+1507 3547 mt 1492 3519 L
+1492 3519 mt 1484 3509 L
+1484 3509 mt 1472 3492 L
+1472 3492 mt 1449 3466 L
+1449 3466 mt 1448 3464 L
+1448 3464 mt 1417 3437 L
+1417 3437 mt 1415 3435 L
+1415 3435 mt 1380 3409 L
+1380 3409 mt 1380 3409 L
+1380 3409 mt 1345 3387 L
+1345 3387 mt 1336 3382 L
+1336 3382 mt 1310 3368 L
+1310 3368 mt 1286 3354 L
+1286 3354 mt 1275 3349 L
+1275 3349 mt 1240 3332 L
+1240 3332 mt 1231 3327 L
+1231 3327 mt 1205 3315 L
+1205 3315 mt 1175 3299 L
+1175 3299 mt 1170 3297 L
+1170 3297 mt 1136 3280 L
+1136 3280 mt 1119 3272 L
+1119 3272 mt 1101 3263 L
+1101 3263 mt 1066 3245 L
+1066 3245 mt 1065 3244 L
+1065 3244 mt 1031 3226 L
+1031 3226 mt 1014 3217 L
+1014 3217 mt  996 3207 L
+ 996 3207 mt  965 3189 L
+ 965 3189 mt  961 3187 L
+ 961 3187 mt  926 3167 L
+ 926 3167 mt  918 3162 L
+ 918 3162 mt  892 3146 L
+ 892 3146 mt  872 3134 L
+ 872 3134 mt  857 3125 L
+ 857 3125 mt  828 3107 L
+ 828 3107 mt  822 3103 L
+ 822 3103 mt  787 3080 L
+ 787 3080 mt  785 3079 L
+ 785 3079 mt  752 3057 L
+ 752 3057 mt  745 3052 L
+ 745 3052 mt  717 3031 L
+ 717 3031 mt  708 3024 L
+ 708 3024 mt  682 3004 L
+ 682 3004 mt  673 2997 L
+ 673 2997 mt  647 2975 L
+ 647 2975 mt  641 2969 L
+ 641 2969 mt  613 2943 L
+ 613 2943 mt  611 2942 L
+ 611 2942 mt  583 2914 L
+ 583 2914 mt  578 2908 L
+ 578 2908 mt  558 2887 L
+ 558 2887 mt  543 2869 L
+ 543 2869 mt  534 2859 L
+ 534 2859 mt  513 2832 L
+ 513 2832 mt  508 2825 L
+ 508 2825 mt  493 2804 L
+ 493 2804 mt  475 2777 L
+ 475 2777 mt  473 2773 L
+ 473 2773 mt  459 2749 L
+ 459 2749 mt  444 2722 L
+ 444 2722 mt  438 2711 L
+ 438 2711 mt  429 2694 L
+ 429 2694 mt  416 2667 L
+ 416 2667 mt  405 2639 L
+ 405 2639 mt  403 2636 L
+ 403 2636 mt  394 2612 L
+ 394 2612 mt  384 2584 L
+ 384 2584 mt  376 2557 L
+ 376 2557 mt  368 2530 L
+ 368 2530 mt  368 2529 L
+ 368 2529 mt  362 2502 L
+ 362 2502 mt  357 2474 L
+ 357 2474 mt  353 2446 L
+ 353 2446 mt  349 2419 L
+ 349 2419 mt  347 2391 L
+ 347 2391 mt  345 2364 L
+ 345 2364 mt  343 2336 L
+ 343 2336 mt  343 2309 L
+ 343 2309 mt  343 2281 L
+ 343 2281 mt  344 2254 L
+ 344 2254 mt  346 2226 L
+ 346 2226 mt  348 2199 L
+ 348 2199 mt  351 2171 L
+ 351 2171 mt  355 2144 L
+ 355 2144 mt  359 2116 L
+ 359 2116 mt  364 2089 L
+ 364 2089 mt  368 2066 L
+ 368 2066 mt  369 2061 L
+ 369 2061 mt  375 2034 L
+ 375 2034 mt  380 2006 L
+ 380 2006 mt  386 1979 L
+ 386 1979 mt  392 1951 L
+ 392 1951 mt  397 1924 L
+ 397 1924 mt  402 1896 L
+ 402 1896 mt  403 1892 L
+ 403 1892 mt  408 1869 L
+ 408 1869 mt  413 1841 L
+ 413 1841 mt  418 1814 L
+ 418 1814 mt  423 1786 L
+ 423 1786 mt  428 1759 L
+ 428 1759 mt  433 1731 L
+ 433 1731 mt  438 1704 L
+ 438 1704 mt  438 1702 L
+ 438 1702 mt  443 1676 L
+ 443 1676 mt  447 1649 L
+ 447 1649 mt  451 1621 L
+ 451 1621 mt  455 1594 L
+ 455 1594 mt  459 1566 L
+ 459 1566 mt  463 1539 L
+ 463 1539 mt  467 1511 L
+ 467 1511 mt  470 1484 L
+ 470 1484 mt  473 1463 L
+ 473 1463 mt  474 1456 L
+ 474 1456 mt  478 1428 L
+ 478 1428 mt  481 1401 L
+ 481 1401 mt  484 1373 L
+ 484 1373 mt  488 1346 L
+ 488 1346 mt  491 1318 L
+ 491 1318 mt  495 1291 L
+ 495 1291 mt  499 1263 L
+ 499 1263 mt  504 1236 L
+ 504 1236 mt  508 1215 L
+ 508 1215 mt  509 1208 L
+ 509 1208 mt  515 1181 L
+ 515 1181 mt  521 1153 L
+ 521 1153 mt  527 1126 L
+ 527 1126 mt  534 1098 L
+ 534 1098 mt  541 1071 L
+ 541 1071 mt  543 1066 L
+ 543 1066 mt  549 1043 L
+ 549 1043 mt  558 1016 L
+ 558 1016 mt  567  988 L
+ 567  988 mt  577  961 L
+ 577  961 mt  578  958 L
+ 578  958 mt  587  933 L
+ 587  933 mt  598  906 L
+ 598  906 mt  609  878 L
+ 609  878 mt  613  871 L
+ 613  871 mt  621  851 L
+ 621  851 mt  635  823 L
+ 635  823 mt  647  798 L
+ 647  798 mt  649  796 L
+ 649  796 mt  663  768 L
+ 663  768 mt  679  741 L
+ 679  741 mt  682  735 L
+ 682  735 mt  696  713 L
+ 696  713 mt  714  686 L
+ 714  686 mt  717  680 L
+ 717  680 mt  732  658 L
+ 732  658 mt  752  631 L
+ 752  631 mt  752  630 L
+ 752  630 mt  772  603 L
+ 772  603 mt  787  585 L
+ 787  585 mt  794  576 L
+ 794  576 mt  816  548 L
+ 816  548 mt  822  542 L
+ 822  542 mt  840  521 L
+ 840  521 mt  857  502 L
+ 857  502 mt  865  493 L
+ 865  493 mt  892  466 L
+ 892  466 mt  892  466 L
+ 892  466 mt  920  438 L
+ 920  438 mt  926  433 L
+ 926  433 mt  952  411 L
+ 952  411 mt  961  403 L
+ 961  403 mt  987  383 L
+ 987  383 mt  996  376 L
+ 996  376 mt 1025  355 L
+1025  355 mt 1031  352 L
+1031  352 mt 1066  330 L
+1066  330 mt 1069  328 L
+1069  328 mt 1101  310 L
+1101  310 mt 1119  300 L
+1119  300 mt 1136  292 L
+1136  292 mt 1170  276 L
+1170  276 mt 1178  273 L
+1178  273 mt 1205  262 L
+1205  262 mt 1240  249 L
+1240  249 mt 1251  245 L
+1251  245 mt 1275  238 L
+1275  238 mt 1310  227 L
+1310  227 mt 1345  218 L
+1345  218 mt 1347  218 L
+1347  218 mt 1380  210 L
+1380  210 mt 1415  203 L
+1415  203 mt 1449  196 L
+1449  196 mt 1476  190 L
+1476  190 mt 1484  189 L
+1484  189 mt 1519  182 L
+1519  182 mt 1554  176 L
+1554  176 mt 1589  169 L
+1589  169 mt 1624  163 L
+1624  163 mt 1624  163 L
+1624  163 mt 1659  157 L
+1659  157 mt 1694  150 L
+1694  150 mt 1728  144 L
+1728  144 mt 1763  139 L
+1763  139 mt 1783  135 L
+1783  135 mt 1798  133 L
+1798  133 mt 1833  128 L
+1833  128 mt 1868  123 L
+1868  123 mt 1903  118 L
+1903  118 mt 1938  114 L
+1938  114 mt 1972  110 L
+1972  110 mt 1992  108 L
+1992  108 mt 2007  106 L
+2007  106 mt 2042  103 L
+2042  103 mt 2077   99 L
+2077   99 mt 2112   96 L
+2112   96 mt 2147   92 L
+2147   92 mt 2182   89 L
+2182   89 mt 2217   85 L
+2217   85 mt 2251   82 L
+2251   82 mt 2264   80 L
+2264   80 mt 2286   78 L
+2286   78 mt 2321   74 L
+2321   74 mt 2356   70 L
+2356   70 mt 2391   66 L
+2391   66 mt 2426   62 L
+2426   62 mt 2461   58 L
+2461   58 mt 2496   53 L
+2496   53 mt 2500   53 L
+2500   53 mt 2530   49 L
+2530   49 mt 2565   45 L
+2565   45 mt 2600   41 L
+2600   41 mt 2635   36 L
+2635   36 mt 2670   32 L
+2670   32 mt 2705   28 L
+2705   28 mt 2730   25 L
+2730   25 mt 2740   24 L
+2740   24 mt 2774   20 L
+2774   20 mt 2809   16 L
+2809   16 mt 2844   12 L
+2844   12 mt 2879    8 L
+2879    8 mt 2914    4 L
+2914    4 mt 2949    0 L
+2949    0 mt 2969   -1 L
+2969   -1 mt 2984   -3 L
+2984   -3 mt 3019   -7 L
+3019   -7 mt 3053  -10 L
+3053  -10 mt 3088  -14 L
+3088  -14 mt 3123  -18 L
+3123  -18 mt 3158  -22 L
+3158  -22 mt 3193  -26 L
+3193  -26 mt 3217  -29 L
+3217  -29 mt 3228  -30 L
+3228  -30 mt 3263  -34 L
+3263  -34 mt 3298  -38 L
+3298  -38 mt 3332  -42 L
+3332  -42 mt 3367  -47 L
+3367  -47 mt 3402  -51 L
+3402  -51 mt 3437  -55 L
+3437  -55 mt 3448  -56 L
+3448  -56 mt 3472  -59 L
+3472  -59 mt 3507  -63 L
+3507  -63 mt 3542  -67 L
+3542  -67 mt 3577  -72 L
+3577  -72 mt 3611  -76 L
+3611  -76 mt 3646  -80 L
+3646  -80 mt 3679  -84 L
+3679  -84 mt 3681  -84 L
+3681  -84 mt 3716  -88 L
+3716  -88 mt 3751  -92 L
+3751  -92 mt 3786  -96 L
+3786  -96 mt 3821 -100 L
+3821 -100 mt 3855 -104 L
+3855 -104 mt 3890 -107 L
+3890 -107 mt 3925 -110 L
+3925 -110 mt 3935 -111 L
+3935 -111 mt 3960 -113 L
+3960 -113 mt 3995 -116 L
+3995 -116 mt 4030 -119 L
+4030 -119 mt 4065 -121 L
+4065 -121 mt 4100 -124 L
+4100 -124 mt 4134 -126 L
+4134 -126 mt 4169 -128 L
+4169 -128 mt 4204 -129 L
+4204 -129 mt 4239 -131 L
+4239 -131 mt 4274 -131 L
+4274 -131 mt 4309 -132 L
+4309 -132 mt 4344 -132 L
+4344 -132 mt 4379 -132 L
+4379 -132 mt 4413 -131 L
+4413 -131 mt 4448 -130 L
+4448 -130 mt 4483 -128 L
+4483 -128 mt 4518 -126 L
+4518 -126 mt 4553 -124 L
+4553 -124 mt 4588 -121 L
+4588 -121 mt 4623 -118 L
+4623 -118 mt 4657 -114 L
+4657 -114 mt 4679 -111 L
+4679 -111 mt 4692 -110 L
+4692 -110 mt 4727 -105 L
+4727 -105 mt 4762 -100 L
+4762 -100 mt 4797  -95 L
+4797  -95 mt 4832  -89 L
+4832  -89 mt 4861  -84 L
+4861  -84 mt 4867  -83 L
+4867  -83 mt 4902  -76 L
+4902  -76 mt 4936  -68 L
+4936  -68 mt 4971  -60 L
+4971  -60 mt 4987  -56 L
+4987  -56 mt 5006  -52 L
+5006  -52 mt 5041  -42 L
+5041  -42 mt 5076  -33 L
+5076  -33 mt 5090  -29 L
+5090  -29 mt 5111  -23 L
+5111  -23 mt 5146  -12 L
+5146  -12 mt 5179   -1 L
+5179   -1 mt 5181   -1 L
+5181   -1 mt 5215   10 L
+5215   10 mt 5250   23 L
+5250   23 mt 5255   25 L
+5255   25 mt 5285   37 L
+5285   37 mt 5320   52 L
+5320   52 mt 5322   53 L
+5322   53 mt 5355   68 L
+5355   68 mt 5381   80 L
+5381   80 mt 5390   85 L
+5390   85 mt 5425  103 L
+5425  103 mt 5434  108 L
+5434  108 mt 5459  122 L
+5459  122 mt 5482  135 L
+5482  135 mt 5494  143 L
+5494  143 mt 5527  163 L
+5527  163 mt 5529  164 L
+5529  164 mt 5564  188 L
+5564  188 mt 5568  190 L
+5568  190 mt 5599  212 L
+5599  212 mt 5607  218 L
+5607  218 mt 5634  238 L
+5634  238 mt 5644  245 L
+5644  245 mt 5669  265 L
+5669  265 mt 5679  273 L
+5679  273 mt 5704  293 L
+5704  293 mt 5713  300 L
+5713  300 mt 5738  322 L
+5738  322 mt 5746  328 L
+5746  328 mt 5773  352 L
+5773  352 mt 5777  355 L
+5777  355 mt 5808  383 L
+5808  383 mt 5808  383 L
+5808  383 mt 5838  411 L
+5838  411 mt 5843  415 L
+5843  415 mt 5867  438 L
+5867  438 mt 5878  448 L
+5878  448 mt 5896  466 L
+5896  466 mt 5913  482 L
+5913  482 mt 5924  493 L
+5924  493 mt 5948  516 L
+5948  516 mt 5952  521 L
+5952  521 mt 5980  548 L
+5980  548 mt 5983  550 L
+5983  550 mt 6008  576 L
+6008  576 mt 6017  585 L
+6017  585 mt 6035  603 L
+6035  603 mt 6052  620 L
+6052  620 mt 6063  631 L
+6063  631 mt 6087  656 L
+6087  656 mt 6090  658 L
+6090  658 mt 6117  686 L
+6117  686 mt 6122  691 L
+6122  691 mt 6144  713 L
+6144  713 mt 6157  727 L
+6157  727 mt 6170  741 L
+6170  741 mt 6192  763 L
+6192  763 mt 6197  768 L
+6197  768 mt 6223  796 L
+6223  796 mt 6227  799 L
+6227  799 mt 6250  823 L
+6250  823 mt 6261  835 L
+6261  835 mt 6277  851 L
+6277  851 mt 6296  871 L
+6296  871 mt 6303  878 L
+6303  878 mt 6330  906 L
+6330  906 mt 6331  907 L
+6331  907 mt 6356  933 L
+6356  933 mt 6366  944 L
+6366  944 mt 6383  961 L
+6383  961 mt 6401  980 L
+6401  980 mt 6409  988 L
+6409  988 mt 6435 1016 L
+6435 1016 mt 6436 1017 L
+6436 1017 mt 6461 1043 L
+6461 1043 mt 6471 1054 L
+6471 1054 mt 6487 1071 L
+6487 1071 mt 6506 1092 L
+6506 1092 mt 6512 1098 L
+6512 1098 mt 6537 1126 L
+6537 1126 mt 6540 1130 L
+6540 1130 mt 6561 1153 L
+6561 1153 mt 6575 1170 L
+6575 1170 mt 6585 1181 L
+6585 1181 mt 6608 1208 L
+6608 1208 mt 6610 1211 L
+6610 1211 mt 6631 1236 L
+6631 1236 mt 6645 1254 L
+6645 1254 mt 6653 1263 L
+6653 1263 mt 6674 1291 L
+6674 1291 mt 6680 1298 L
+6680 1298 mt 6695 1318 L
+6695 1318 mt 6715 1345 L
+6715 1345 mt 6716 1346 L
+6716 1346 mt 6735 1373 L
+6735 1373 mt 6750 1394 L
+6750 1394 mt 6754 1401 L
+6754 1401 mt 6773 1428 L
+6773 1428 mt 6785 1447 L
+6785 1447 mt 6790 1456 L
+6790 1456 mt 6807 1484 L
+6807 1484 mt 6819 1506 L
+6819 1506 mt 6823 1511 L
+6823 1511 mt 6838 1539 L
+6838 1539 mt 6852 1566 L
+6852 1566 mt 6854 1571 L
+6854 1571 mt 6865 1594 L
+6865 1594 mt 6878 1621 L
+6878 1621 mt 6889 1647 L
+6889 1647 mt 6890 1649 L
+6890 1649 mt 6901 1676 L
+6901 1676 mt 6912 1704 L
+6912 1704 mt 6922 1731 L
+6922 1731 mt 6924 1739 L
+6924 1739 mt 6931 1759 L
+6931 1759 mt 6939 1786 L
+6939 1786 mt 6947 1814 L
+6947 1814 mt 6954 1841 L
+6954 1841 mt 6959 1864 L
+6924 2025 mt 6924 2034 L
+6924 2034 mt 6925 2061 L
+6925 2061 mt 6925 2089 L
+6925 2089 mt 6924 2116 L
+6924 2116 mt 6924 2122 L
+6924 2122 mt 6923 2144 L
+6923 2144 mt 6921 2171 L
+6921 2171 mt 6918 2199 L
+6918 2199 mt 6914 2226 L
+6914 2226 mt 6910 2254 L
+6910 2254 mt 6905 2281 L
+6905 2281 mt 6900 2309 L
+6900 2309 mt 6894 2336 L
+6894 2336 mt 6889 2354 L
+6889 2354 mt 6887 2364 L
+6887 2364 mt 6880 2391 L
+6880 2391 mt 6872 2419 L
+6872 2419 mt 6864 2446 L
+6864 2446 mt 6855 2474 L
+6855 2474 mt 6854 2476 L
+6854 2476 mt 6846 2502 L
+6846 2502 mt 6836 2529 L
+6836 2529 mt 6826 2557 L
+6826 2557 mt 6819 2574 L
+6819 2574 mt 6816 2584 L
+6816 2584 mt 6805 2612 L
+6805 2612 mt 6794 2639 L
+6794 2639 mt 6785 2662 L
+6785 2662 mt 6782 2667 L
+6782 2667 mt 6771 2694 L
+6771 2694 mt 6759 2722 L
+6759 2722 mt 6750 2741 L
+6750 2741 mt 6746 2749 L
+6746 2749 mt 6733 2777 L
+6733 2777 mt 6721 2804 L
+6721 2804 mt 6715 2817 L
+6715 2817 mt 6708 2832 L
+6708 2832 mt 6695 2859 L
+6695 2859 mt 6683 2887 L
+6683 2887 mt 6680 2893 L
+6680 2893 mt 6671 2914 L
+6671 2914 mt 6659 2942 L
+6659 2942 mt 6648 2969 L
+6648 2969 mt 6645 2976 L
+6645 2976 mt 6637 2997 L
+6637 2997 mt 6626 3024 L
+6626 3024 mt 6616 3052 L
+6616 3052 mt 6610 3069 L
+6610 3069 mt 6607 3079 L
+6607 3079 mt 6598 3107 L
+6598 3107 mt 6590 3134 L
+6590 3134 mt 6583 3162 L
+6583 3162 mt 6576 3189 L
+6576 3189 mt 6575 3190 L
+6575 3190 mt 6569 3217 L
+6569 3217 mt 6562 3244 L
+6562 3244 mt 6556 3272 L
+6556 3272 mt 6550 3299 L
+6550 3299 mt 6543 3327 L
+6543 3327 mt 6540 3338 L
+6540 3338 mt 6536 3354 L
+6536 3354 mt 6529 3382 L
+6529 3382 mt 6522 3409 L
+6522 3409 mt 6514 3437 L
+6514 3437 mt 6506 3462 L
+6506 3462 mt 6505 3464 L
+6505 3464 mt 6495 3492 L
+6495 3492 mt 6485 3519 L
+6485 3519 mt 6474 3547 L
+6474 3547 mt 6471 3554 L
+6471 3554 mt 6461 3575 L
+6461 3575 mt 6447 3602 L
+6447 3602 mt 6436 3623 L
+6436 3623 mt 6432 3630 L
+6432 3630 mt 6416 3657 L
+6416 3657 mt 6401 3681 L
+6401 3681 mt 6398 3685 L
+6398 3685 mt 6379 3712 L
+6379 3712 mt 6366 3730 L
+6366 3730 mt 6358 3740 L
+6358 3740 mt 6337 3767 L
+6337 3767 mt 6331 3776 L
+6331 3776 mt 6315 3795 L
+6315 3795 mt 6296 3822 L
+6296 3822 mt 6296 3822 L
+6296 3822 mt 6280 3850 L
+6280 3850 mt 6273 3877 L
+6273 3877 mt 6266 3905 L
+6266 3905 mt 6261 3913 L
+6261 3913 mt 6227 3916 L
+6227 3916 mt 6218 3905 L
+6218 3905 mt 6202 3877 L
+6202 3877 mt 6192 3863 L
+6192 3863 mt 6186 3850 L
+6186 3850 mt 6177 3822 L
+6177 3822 mt 6162 3795 L
+6162 3795 mt 6157 3788 L
+6157 3788 mt 6146 3767 L
+6146 3767 mt 6130 3740 L
+6130 3740 mt 6122 3728 L
+6122 3728 mt 6112 3712 L
+6112 3712 mt 6092 3685 L
+6092 3685 mt 6087 3678 L
+6087 3678 mt 6069 3657 L
+6069 3657 mt 6052 3639 L
+6052 3639 mt 6042 3630 L
+6042 3630 mt 6017 3610 L
+6017 3610 mt 6003 3602 L
+6003 3602 mt 5983 3591 L
+5983 3591 mt 5948 3579 L
+5948 3579 mt 5933 3575 L
+5933 3575 mt 5913 3568 L
+5913 3568 mt 5878 3557 L
+5878 3557 mt 5849 3547 L
+5849 3547 mt 5843 3545 L
+5843 3545 mt 5808 3531 L
+5808 3531 mt 5782 3519 L
+5782 3519 mt 5773 3515 L
+5773 3515 mt 5738 3494 L
+5738 3494 mt 5736 3492 L
+5736 3492 mt 5704 3465 L
+5704 3465 mt 5703 3464 L
+5703 3464 mt 5680 3437 L
+5680 3437 mt 5669 3419 L
+5669 3419 mt 5663 3409 L
+5663 3409 mt 5651 3382 L
+5651 3382 mt 5640 3354 L
+5640 3354 mt 5634 3335 L
+5634 3335 mt 5631 3327 L
+5631 3327 mt 5624 3299 L
+5624 3299 mt 5617 3272 L
+5617 3272 mt 5610 3244 L
+5610 3244 mt 5603 3217 L
+5603 3217 mt 5599 3202 L
+5599 3202 mt 5595 3189 L
+5595 3189 mt 5586 3162 L
+5586 3162 mt 5575 3134 L
+5575 3134 mt 5564 3113 L
+5564 3113 mt 5560 3107 L
+5560 3107 mt 5538 3079 L
+5538 3079 mt 5529 3071 L
+5529 3071 mt 5506 3052 L
+5506 3052 mt 5494 3043 L
+5494 3043 mt 5468 3024 L
+5468 3024 mt 5459 3018 L
+5459 3018 mt 5431 2997 L
+5431 2997 mt 5425 2991 L
+5425 2991 mt 5399 2969 L
+5399 2969 mt 5390 2961 L
+5390 2961 mt 5368 2942 L
+5368 2942 mt 5355 2930 L
+5355 2930 mt 5336 2914 L
+5336 2914 mt 5320 2901 L
+5320 2901 mt 5302 2887 L
+5302 2887 mt 5285 2875 L
+5285 2875 mt 5256 2859 L
+5256 2859 mt 5250 2856 L
+5250 2856 mt 5215 2841 L
+5215 2841 mt 5191 2832 L
+5191 2832 mt 5181 2826 L
+5181 2826 mt 5146 2806 L
+5146 2806 mt 5142 2804 L
+5142 2804 mt 5111 2778 L
+5111 2778 mt 5109 2777 L
+5109 2777 mt 5081 2749 L
+5081 2749 mt 5076 2744 L
+5076 2744 mt 5051 2722 L
+5051 2722 mt 5041 2714 L
+5041 2714 mt 5014 2694 L
+5014 2694 mt 5006 2689 L
+5006 2689 mt 4976 2667 L
+4976 2667 mt 4971 2664 L
+4971 2664 mt 4946 2639 L
+4946 2639 mt 4936 2624 L
+4936 2624 mt 4930 2612 L
+4930 2612 mt 4929 2584 L
+4929 2584 mt 4934 2557 L
+4934 2557 mt 4936 2546 L
+4936 2546 mt 4941 2529 L
+4941 2529 mt 4947 2502 L
+4947 2502 mt 4948 2474 L
+4948 2474 mt 4944 2446 L
+4944 2446 mt 4936 2424 L
+4936 2424 mt 4935 2419 L
+4935 2419 mt 4924 2391 L
+4924 2391 mt 4908 2364 L
+4908 2364 mt 4902 2356 L
+4902 2356 mt 4883 2336 L
+4883 2336 mt 4867 2322 L
+4867 2322 mt 4852 2309 L
+4852 2309 mt 4832 2292 L
+4832 2292 mt 4819 2281 L
+4819 2281 mt 4797 2265 L
+4797 2265 mt 4783 2254 L
+4783 2254 mt 4762 2240 L
+4762 2240 mt 4744 2226 L
+4744 2226 mt 4727 2216 L
+4727 2216 mt 4703 2199 L
+4703 2199 mt 4692 2192 L
+4692 2192 mt 4669 2171 L
+4669 2171 mt 4657 2159 L
+4657 2159 mt 4644 2144 L
+4644 2144 mt 4626 2116 L
+4626 2116 mt 4623 2109 L
+4623 2109 mt 4613 2089 L
+4613 2089 mt 4605 2061 L
+4605 2061 mt 4599 2034 L
+4599 2034 mt 4591 2006 L
+4591 2006 mt 4588 1997 L
+4588 1997 mt 4579 1979 L
+4579 1979 mt 4556 1951 L
+4556 1951 mt 4553 1949 L
+4553 1949 mt 4518 1929 L
+4518 1929 mt 4500 1924 L
+4500 1924 mt 4483 1919 L
+4483 1919 mt 4448 1914 L
+4448 1914 mt 4413 1909 L
+4413 1909 mt 4379 1901 L
+4379 1901 mt 4364 1896 L
+4364 1896 mt 4344 1888 L
+4344 1888 mt 4309 1873 L
+4309 1873 mt 4302 1869 L
+4302 1869 mt 4274 1850 L
+4274 1850 mt 4263 1841 L
+4263 1841 mt 4239 1815 L
+4239 1815 mt 4238 1814 L
+4238 1814 mt 4215 1786 L
+4215 1786 mt 4204 1774 L
+4204 1774 mt 4188 1759 L
+4188 1759 mt 4169 1741 L
+4169 1741 mt 4155 1731 L
+4155 1731 mt 4134 1717 L
+4134 1717 mt 4109 1704 L
+4109 1704 mt 4100 1699 L
+4100 1699 mt 4065 1686 L
+4065 1686 mt 4030 1677 L
+4030 1677 mt 4024 1676 L
+4024 1676 mt 3995 1670 L
+3995 1670 mt 3960 1666 L
+3960 1666 mt 3925 1663 L
+3925 1663 mt 3890 1661 L
+3890 1661 mt 3855 1658 L
+3855 1658 mt 3821 1654 L
+3821 1654 mt 3797 1649 L
+3797 1649 mt 3786 1646 L
+3786 1646 mt 3751 1629 L
+3751 1629 mt 3736 1621 L
+3736 1621 mt 3716 1611 L
+3716 1611 mt 3683 1594 L
+3683 1594 mt 3681 1593 L
+3681 1593 mt 3646 1571 L
+3646 1571 mt 3640 1566 L
+3640 1566 mt 3611 1544 L
+3611 1544 mt 3605 1539 L
+3605 1539 mt 3577 1511 L
+3577 1511 mt 3576 1511 L
+3576 1511 mt 3550 1484 L
+3550 1484 mt 3542 1472 L
+3542 1472 mt 3529 1456 L
+3529 1456 mt 3508 1428 L
+3508 1428 mt 3507 1426 L
+3507 1426 mt 3477 1401 L
+3477 1401 mt 3472 1398 L
+3472 1398 mt 3437 1382 L
+3437 1382 mt 3405 1373 L
+3405 1373 mt 3402 1373 L
+3402 1373 mt 3367 1368 L
+3367 1368 mt 3332 1365 L
+3332 1365 mt 3298 1363 L
+3298 1363 mt 3263 1361 L
+3263 1361 mt 3228 1357 L
+3228 1357 mt 3193 1352 L
+3193 1352 mt 3164 1346 L
+3164 1346 mt 3158 1345 L
+3158 1345 mt 3123 1335 L
+3123 1335 mt 3088 1325 L
+3088 1325 mt 3064 1318 L
+3064 1318 mt 3053 1315 L
+3053 1315 mt 3019 1307 L
+3019 1307 mt 2984 1300 L
+2984 1300 mt 2949 1296 L
+2949 1296 mt 2914 1294 L
+2914 1294 mt 2879 1293 L
+2879 1293 mt 2844 1292 L
+2844 1292 mt 2818 1291 L
+2818 1291 mt 2809 1291 L
+2809 1291 mt 2774 1289 L
+2774 1289 mt 2740 1288 L
+2740 1288 mt 2705 1287 L
+2705 1287 mt 2670 1287 L
+2670 1287 mt 2635 1287 L
+2635 1287 mt 2600 1287 L
+2600 1287 mt 2565 1287 L
+2565 1287 mt 2530 1286 L
+2530 1286 mt 2496 1283 L
+2496 1283 mt 2461 1280 L
+2461 1280 mt 2426 1274 L
+2426 1274 mt 2391 1268 L
+2391 1268 mt 2363 1263 L
+2363 1263 mt 2356 1262 L
+2356 1262 mt 2321 1257 L
+2321 1257 mt 2286 1252 L
+2286 1252 mt 2251 1249 L
+2251 1249 mt 2217 1248 L
+2217 1248 mt 2182 1248 L
+2182 1248 mt 2147 1250 L
+2147 1250 mt 2112 1253 L
+2112 1253 mt 2077 1259 L
+2077 1259 mt 2054 1263 L
+2054 1263 mt 2042 1266 L
+2042 1266 mt 2007 1277 L
+2007 1277 mt 1972 1290 L
+1972 1290 mt 1971 1291 L
+1971 1291 mt 1938 1308 L
+1938 1308 mt 1921 1318 L
+1921 1318 mt 1903 1332 L
+1903 1332 mt 1888 1346 L
+1888 1346 mt 1868 1369 L
+1868 1369 mt 1865 1373 L
+1865 1373 mt 1851 1401 L
+1851 1401 mt 1841 1428 L
+1841 1428 mt 1835 1456 L
+1835 1456 mt 1833 1464 L
+1833 1464 mt 1830 1484 L
+1830 1484 mt 1825 1511 L
+1825 1511 mt 1821 1539 L
+1821 1539 mt 1816 1566 L
+1816 1566 mt 1812 1594 L
+1812 1594 mt 1808 1621 L
+1808 1621 mt 1806 1649 L
+1806 1649 mt 1805 1676 L
+1805 1676 mt 1807 1704 L
+1807 1704 mt 1809 1731 L
+1809 1731 mt 1811 1759 L
+1811 1759 mt 1811 1786 L
+1811 1786 mt 1807 1814 L
+1807 1814 mt 1801 1841 L
+1801 1841 mt 1798 1852 L
+1798 1852 mt 1794 1869 L
+1794 1869 mt 1789 1896 L
+1789 1896 mt 1789 1924 L
+1789 1924 mt 1797 1951 L
+1797 1951 mt 1798 1953 L
+1798 1953 mt 1814 1979 L
+1814 1979 mt 1833 2004 L
+1833 2004 mt 1835 2006 L
+1835 2006 mt 1853 2034 L
+1853 2034 mt 1860 2061 L
+1860 2061 mt 1856 2089 L
+1856 2089 mt 1840 2116 L
+1840 2116 mt 1833 2125 L
+1833 2125 mt 1817 2144 L
+1817 2144 mt 1798 2169 L
+1798 2169 mt 1797 2171 L
+1797 2171 mt 1786 2199 L
+1786 2199 mt 1792 2226 L
+1792 2226 mt 1798 2234 L
+1798 2234 mt 1811 2254 L
+1811 2254 mt 1833 2272 L
+1833 2272 mt 1844 2281 L
+1844 2281 mt 1868 2299 L
+1868 2299 mt 1880 2309 L
+1880 2309 mt 1903 2326 L
+1903 2326 mt 1915 2336 L
+1915 2336 mt 1938 2357 L
+1938 2357 mt 1945 2364 L
+1945 2364 mt 1972 2389 L
+1972 2389 mt 1975 2391 L
+1975 2391 mt 2006 2419 L
+2006 2419 mt 2007 2420 L
+2007 2420 mt 2038 2446 L
+2038 2446 mt 2042 2450 L
+2042 2450 mt 2069 2474 L
+2069 2474 mt 2077 2481 L
+2077 2481 mt 2101 2502 L
+2101 2502 mt 2112 2511 L
+2112 2511 mt 2133 2529 L
+2133 2529 mt 2147 2540 L
+2147 2540 mt 2164 2557 L
+2164 2557 mt 2182 2575 L
+2182 2575 mt 2190 2584 L
+2190 2584 mt 2210 2612 L
+2210 2612 mt 2217 2622 L
+2217 2622 mt 2228 2639 L
+2228 2639 mt 2246 2667 L
+2246 2667 mt 2251 2675 L
+2251 2675 mt 2265 2694 L
+2265 2694 mt 2286 2719 L
+2286 2719 mt 2288 2722 L
+2288 2722 mt 2313 2749 L
+2313 2749 mt 2321 2757 L
+2321 2757 mt 2341 2777 L
+2341 2777 mt 2356 2792 L
+2356 2792 mt 2368 2804 L
+2368 2804 mt 2391 2828 L
+2391 2828 mt 2395 2832 L
+2395 2832 mt 2422 2859 L
+2422 2859 mt 2426 2863 L
+2426 2863 mt 2448 2887 L
+2448 2887 mt 2461 2902 L
+2461 2902 mt 2469 2914 L
+2469 2914 mt 2481 2942 L
+2481 2942 mt 2483 2969 L
+2483 2969 mt 2477 2997 L
+2477 2997 mt 2466 3024 L
+2466 3024 mt 2461 3043 L
+2461 3043 mt 2457 3052 L
+2457 3052 mt 2448 3079 L
+2448 3079 mt 2438 3107 L
+2438 3107 mt 2432 3134 L
+2432 3134 mt 2432 3162 L
+2432 3162 mt 2439 3189 L
+2439 3189 mt 2457 3217 L
+2457 3217 mt 2461 3221 L
+2461 3221 mt 2487 3244 L
+2487 3244 mt 2496 3250 L
+2496 3250 mt 2530 3272 L
+2530 3272 mt 2530 3272 L
+2530 3272 mt 2565 3293 L
+2565 3293 mt 2577 3299 L
+2577 3299 mt 2600 3315 L
+2600 3315 mt 2617 3327 L
+2617 3327 mt 2635 3342 L
+2635 3342 mt 2647 3354 L
+2647 3354 mt 2670 3381 L
+2670 3381 mt 2670 3382 L
+2670 3382 mt 2694 3409 L
+2694 3409 mt 2705 3423 L
+2705 3423 mt 2716 3437 L
+2716 3437 mt 2737 3464 L
+2737 3464 mt 2740 3468 L
+2740 3468 mt 2756 3492 L
+2756 3492 mt 2774 3519 L
+2774 3519 mt 2774 3520 L
+2774 3520 mt 2791 3547 L
+2791 3547 mt 2808 3575 L
+2808 3575 mt 2809 3577 L
+2809 3577 mt 2823 3602 L
+2823 3602 mt 2836 3630 L
+2836 3630 mt 2844 3657 L
+2844 3657 mt 2844 3672 L
+2844 3672 mt 2844 3685 L
+2844 3685 mt 2844 3685 L
+2844 3685 mt 2834 3712 L
+2834 3712 mt 2816 3740 L
+2816 3740 mt 2809 3749 L
+2809 3749 mt 2792 3767 L
+2792 3767 mt 2774 3785 L
+2774 3785 mt 2762 3795 L
+2762 3795 mt 2740 3812 L
+2740 3812 mt 2721 3822 L
+2721 3822 mt 2705 3831 L
+2705 3831 mt 2670 3846 L
+2670 3846 mt 2657 3850 L
+2657 3850 mt 2635 3858 L
+2635 3858 mt 2600 3868 L
+2600 3868 mt 2572 3877 L
+2572 3877 mt 2565 3880 L
+2565 3880 mt 2530 3895 L
+2530 3895 mt 2511 3905 L
+2511 3905 mt 2496 3915 L
+2496 3915 mt 2475 3932 L
+2475 3932 mt 2461 3949 L
+2461 3949 mt 2454 3960 L
+2454 3960 mt 2441 3987 L
+2441 3987 mt 2434 4015 L
+2434 4015 mt 2431 4042 L
+2431 4042 mt 2433 4070 L
+2433 4070 mt 2439 4097 L
+2439 4097 mt 2449 4125 L
+2449 4125 mt 2461 4149 L
+2461 4149 mt 2462 4152 L
+2462 4152 mt 2477 4180 L
+2477 4180 mt 2494 4207 L
+2494 4207 mt 2496 4210 L
+2496 4210 mt 2512 4235 L
+2512 4235 mt 2530 4259 L
+2530 4259 mt 2533 4262 L
+2533 4262 mt 2555 4290 L
+2555 4290 mt 2565 4302 L
+2565 4302 mt 2581 4317 L
+2581 4317 mt 2600 4335 L
+2600 4335 mt 2612 4345 L
+2612 4345 mt 2635 4362 L
+2635 4362 mt 2653 4372 L
+2653 4372 mt 2670 4382 L
+2670 4382 mt 2705 4396 L
+2705 4396 mt 2715 4400 L
+2715 4400 mt 2740 4407 L
+2740 4407 mt 2774 4414 L
+2774 4414 mt 2809 4420 L
+2809 4420 mt 2844 4425 L
+2844 4425 mt 2855 4427 L
+2855 4427 mt 2879 4432 L
+2879 4432 mt 2914 4442 L
+2914 4442 mt 2947 4455 L
+2947 4455 mt 2949 4456 L
+2949 4456 mt 2984 4473 L
+2984 4473 mt 3001 4482 L
+3001 4482 mt 3019 4492 L
+3019 4492 mt 3053 4510 L
+3053 4510 mt 3054 4510 L
+3054 4510 mt 3088 4527 L
+3088 4527 mt 3109 4537 L
+3109 4537 mt 3123 4545 L
+3123 4545 mt 3158 4563 L
+3158 4563 mt 3163 4565 L
+3163 4565 mt 3193 4589 L
+3193 4589 mt 3197 4592 L
+3197 4592 mt 3193 4620 L
+3193 4620 mt 3193 4620 L
+3193 4620 mt 3158 4644 L
+3158 4644 mt 3153 4648 L
+3153 4648 mt 3123 4664 L
+3123 4664 mt 3104 4675 L
+3104 4675 mt 3088 4683 L
+3088 4683 mt 3053 4699 L
+3053 4699 mt 3046 4703 L
+3046 4703 mt 3019 4714 L
+3019 4714 mt 2984 4727 L
+2984 4727 mt 2974 4730 L
+2974 4730 mt 2949 4738 L
+2949 4738 mt 2914 4750 L
+2914 4750 mt 2887 4758 L
+2887 4758 mt 2879 4760 L
+2879 4760 mt 2844 4770 L
+2844 4770 mt 2809 4779 L
+2809 4779 mt 2785 4785 L
+2785 4785 mt 2774 4788 L
+2774 4788 mt 2740 4796 L
+2740 4796 mt 2705 4804 L
+2705 4804 mt 2670 4812 L
+2670 4812 mt 2668 4813 L
+2668 4813 mt 2635 4820 L
+2635 4820 mt 2600 4826 L
+2600 4826 mt 2565 4833 L
+2565 4833 mt 2530 4839 L
+2530 4839 mt 2522 4840 L
+2522 4840 mt 2496 4844 L
+2496 4844 mt 2461 4848 L
+2461 4848 mt 2426 4852 L
+2426 4852 mt 2391 4856 L
+2391 4856 mt 2356 4858 L
+2356 4858 mt 2321 4860 L
+2321 4860 mt 2286 4860 L
+2286 4860 mt 2251 4860 L
+2251 4860 mt 2217 4859 L
+2217 4859 mt 2182 4857 L
+2182 4857 mt 2147 4855 L
+2147 4855 mt 2112 4851 L
+2112 4851 mt 2077 4846 L
+2077 4846 mt 2042 4840 L
+2042 4840 mt 2042 4840 L
+2042 4840 mt 2007 4834 L
+2007 4834 mt 1972 4826 L
+1972 4826 mt 1938 4817 L
+1938 4817 mt 1922 4813 L
+1922 4813 mt 1903 4807 L
+1903 4807 mt 1868 4796 L
+1868 4796 mt 1840 4785 L
+1840 4785 mt 1833 4782 L
+1833 4782 mt 1798 4767 L
+1798 4767 mt 1778 4758 L
+1778 4758 mt 1763 4750 L
+1763 4750 mt 1728 4730 L
+1728 4730 mt 1728 4730 L
+1728 4730 mt 1694 4706 L
+1694 4706 mt 1689 4703 L
+1689 4703 mt 1659 4677 L
+1659 4677 mt 1656 4675 L
+1656 4675 mt 1630 4648 L
+1630 4648 mt 1624 4640 L
+1624 4640 mt 1608 4620 L
+1608 4620 mt 1590 4592 L
+1590 4592 mt 1589 4591 L
+1589 4591 mt 1574 4565 L
+1574 4565 mt 1560 4537 L
+1560 4537 mt 1554 4525 L
+1554 4525 mt 1547 4510 L
+1547 4510 mt 1535 4482 L
+1535 4482 mt 1524 4455 L
+1524 4455 mt 1519 4442 L
+1519 4442 mt 1514 4427 L
+1514 4427 mt 1505 4400 L
+1505 4400 mt 1497 4372 L
+1497 4372 mt 1488 4345 L
+1488 4345 mt 1484 4334 L
+1484 4334 mt 1479 4317 L
+1479 4317 mt 1469 4290 L
+1469 4290 mt 1460 4262 L
+1460 4262 mt 1453 4235 L
+1453 4235 mt 1449 4217 L
+1449 4217 mt 1448 4207 L
+1448 4207 mt 1444 4180 L
+1444 4180 mt 1443 4152 L
+1443 4152 mt 1445 4125 L
+1445 4125 mt 1449 4097 L
+1449 4097 mt 1449 4095 L
+1449 4095 mt 1456 4070 L
+1456 4070 mt 1465 4042 L
+1465 4042 mt 1478 4015 L
+1478 4015 mt 1484 4001 L
+1484 4001 mt 1492 3987 L
+1492 3987 mt 1509 3960 L
+1509 3960 mt 1519 3945 L
+1519 3945 mt 1529 3932 L
+1529 3932 mt 1550 3905 L
+1550 3905 mt 1554 3899 L
+1554 3899 mt 1572 3877 L
+1572 3877 mt 1589 3855 L
+1589 3855 mt 1594 3850 L
+1594 3850 mt 1613 3822 L
+1613 3822 mt 1624 3801 L
+1624 3801 mt 1627 3795 L
+1627 3795 mt 1638 3767 L
+1638 3767 mt 1644 3740 L
+1644 3740 mt 1647 3712 L
+1647 3712 mt 1647 3685 L
+1647 3685 mt 1645 3657 L
+1645 3657 mt 1641 3630 L
+1641 3630 mt 1635 3602 L
+1635 3602 mt 1628 3575 L
+1628 3575 mt 1624 3561 L
+1624 3561 mt 1619 3547 L
+1619 3547 mt 1608 3519 L
+1608 3519 mt 1595 3492 L
+1595 3492 mt 1589 3482 L
+1589 3482 mt 1578 3464 L
+1578 3464 mt 1556 3437 L
+1556 3437 mt 1554 3435 L
+1554 3435 mt 1528 3409 L
+1528 3409 mt 1519 3403 L
+1519 3403 mt 1490 3382 L
+1490 3382 mt 1484 3378 L
+1484 3378 mt 1449 3358 L
+1449 3358 mt 1442 3354 L
+1442 3354 mt 1415 3341 L
+1415 3341 mt 1383 3327 L
+1383 3327 mt 1380 3326 L
+1380 3326 mt 1345 3312 L
+1345 3312 mt 1315 3299 L
+1315 3299 mt 1310 3298 L
+1310 3298 mt 1275 3284 L
+1275 3284 mt 1246 3272 L
+1246 3272 mt 1240 3270 L
+1240 3270 mt 1205 3256 L
+1205 3256 mt 1180 3244 L
+1180 3244 mt 1170 3241 L
+1170 3241 mt 1136 3225 L
+1136 3225 mt 1118 3217 L
+1118 3217 mt 1101 3209 L
+1101 3209 mt 1066 3191 L
+1066 3191 mt 1062 3189 L
+1062 3189 mt 1031 3173 L
+1031 3173 mt 1010 3162 L
+1010 3162 mt  996 3155 L
+ 996 3155 mt  961 3135 L
+ 961 3135 mt  960 3134 L
+ 960 3134 mt  926 3115 L
+ 926 3115 mt  913 3107 L
+ 913 3107 mt  892 3094 L
+ 892 3094 mt  866 3079 L
+ 866 3079 mt  857 3073 L
+ 857 3073 mt  822 3052 L
+ 822 3052 mt  822 3052 L
+ 822 3052 mt  787 3029 L
+ 787 3029 mt  780 3024 L
+ 780 3024 mt  752 3004 L
+ 752 3004 mt  742 2997 L
+ 742 2997 mt  717 2978 L
+ 717 2978 mt  707 2969 L
+ 707 2969 mt  682 2949 L
+ 682 2949 mt  674 2942 L
+ 674 2942 mt  647 2917 L
+ 647 2917 mt  644 2914 L
+ 644 2914 mt  617 2887 L
+ 617 2887 mt  613 2881 L
+ 613 2881 mt  593 2859 L
+ 593 2859 mt  578 2841 L
+ 578 2841 mt  570 2832 L
+ 570 2832 mt  550 2804 L
+ 550 2804 mt  543 2794 L
+ 543 2794 mt  531 2777 L
+ 531 2777 mt  514 2749 L
+ 514 2749 mt  508 2737 L
+ 508 2737 mt  499 2722 L
+ 499 2722 mt  485 2694 L
+ 485 2694 mt  473 2668 L
+ 473 2668 mt  472 2667 L
+ 472 2667 mt  460 2639 L
+ 460 2639 mt  450 2612 L
+ 450 2612 mt  441 2584 L
+ 441 2584 mt  438 2576 L
+ 438 2576 mt  432 2557 L
+ 432 2557 mt  425 2529 L
+ 425 2529 mt  419 2502 L
+ 419 2502 mt  415 2474 L
+ 415 2474 mt  411 2446 L
+ 411 2446 mt  408 2419 L
+ 408 2419 mt  406 2391 L
+ 406 2391 mt  405 2364 L
+ 405 2364 mt  404 2336 L
+ 404 2336 mt  404 2309 L
+ 404 2309 mt  405 2281 L
+ 405 2281 mt  407 2254 L
+ 407 2254 mt  409 2226 L
+ 409 2226 mt  412 2199 L
+ 412 2199 mt  416 2171 L
+ 416 2171 mt  421 2144 L
+ 421 2144 mt  426 2116 L
+ 426 2116 mt  431 2089 L
+ 431 2089 mt  437 2061 L
+ 437 2061 mt  438 2056 L
+ 438 2056 mt  443 2034 L
+ 443 2034 mt  449 2006 L
+ 449 2006 mt  455 1979 L
+ 455 1979 mt  460 1951 L
+ 460 1951 mt  466 1924 L
+ 466 1924 mt  471 1896 L
+ 471 1896 mt  473 1884 L
+ 473 1884 mt  476 1869 L
+ 476 1869 mt  481 1841 L
+ 481 1841 mt  485 1814 L
+ 485 1814 mt  490 1786 L
+ 490 1786 mt  494 1759 L
+ 494 1759 mt  498 1731 L
+ 498 1731 mt  502 1704 L
+ 502 1704 mt  506 1676 L
+ 506 1676 mt  508 1661 L
+ 508 1661 mt  510 1649 L
+ 510 1649 mt  513 1621 L
+ 513 1621 mt  517 1594 L
+ 517 1594 mt  520 1566 L
+ 520 1566 mt  523 1539 L
+ 523 1539 mt  527 1511 L
+ 527 1511 mt  530 1484 L
+ 530 1484 mt  533 1456 L
+ 533 1456 mt  535 1428 L
+ 535 1428 mt  538 1401 L
+ 538 1401 mt  540 1373 L
+ 540 1373 mt  543 1350 L
+ 543 1350 mt  543 1346 L
+ 543 1346 mt  546 1318 L
+ 546 1318 mt  549 1291 L
+ 549 1291 mt  553 1263 L
+ 553 1263 mt  556 1236 L
+ 556 1236 mt  561 1208 L
+ 561 1208 mt  566 1181 L
+ 566 1181 mt  571 1153 L
+ 571 1153 mt  577 1126 L
+ 577 1126 mt  578 1122 L
+ 578 1122 mt  583 1098 L
+ 583 1098 mt  590 1071 L
+ 590 1071 mt  597 1043 L
+ 597 1043 mt  605 1016 L
+ 605 1016 mt  613  991 L
+ 613  991 mt  613  988 L
+ 613  988 mt  622  961 L
+ 622  961 mt  632  933 L
+ 632  933 mt  642  906 L
+ 642  906 mt  647  893 L
+ 647  893 mt  653  878 L
+ 653  878 mt  665  851 L
+ 665  851 mt  678  823 L
+ 678  823 mt  682  814 L
+ 682  814 mt  691  796 L
+ 691  796 mt  706  768 L
+ 706  768 mt  717  748 L
+ 717  748 mt  721  741 L
+ 721  741 mt  738  713 L
+ 738  713 mt  752  691 L
+ 752  691 mt  756  686 L
+ 756  686 mt  775  658 L
+ 775  658 mt  787  641 L
+ 787  641 mt  795  631 L
+ 795  631 mt  815  603 L
+ 815  603 mt  822  595 L
+ 822  595 mt  837  576 L
+ 837  576 mt  857  552 L
+ 857  552 mt  860  548 L
+ 860  548 mt  883  521 L
+ 883  521 mt  892  512 L
+ 892  512 mt  909  493 L
+ 909  493 mt  926  475 L
+ 926  475 mt  936  466 L
+ 936  466 mt  961  442 L
+ 961  442 mt  966  438 L
+ 966  438 mt  996  412 L
+ 996  412 mt  999  411 L
+ 999  411 mt 1031  386 L
+1031  386 mt 1036  383 L
+1036  383 mt 1066  363 L
+1066  363 mt 1078  355 L
+1078  355 mt 1101  342 L
+1101  342 mt 1127  328 L
+1127  328 mt 1136  323 L
+1136  323 mt 1170  307 L
+1170  307 mt 1185  300 L
+1185  300 mt 1205  292 L
+1205  292 mt 1240  279 L
+1240  279 mt 1260  273 L
+1260  273 mt 1275  268 L
+1275  268 mt 1310  258 L
+1310  258 mt 1345  250 L
+1345  250 mt 1367  245 L
+1367  245 mt 1380  243 L
+1380  243 mt 1415  236 L
+1415  236 mt 1449  230 L
+1449  230 mt 1484  224 L
+1484  224 mt 1519  218 L
+1519  218 mt 1522  218 L
+1522  218 mt 1554  213 L
+1554  213 mt 1589  207 L
+1589  207 mt 1624  201 L
+1624  201 mt 1659  195 L
+1659  195 mt 1686  190 L
+1686  190 mt 1694  189 L
+1694  189 mt 1728  183 L
+1728  183 mt 1763  178 L
+1763  178 mt 1798  172 L
+1798  172 mt 1833  168 L
+1833  168 mt 1868  163 L
+1868  163 mt 1870  163 L
+1870  163 mt 1903  159 L
+1903  159 mt 1938  155 L
+1938  155 mt 1972  152 L
+1972  152 mt 2007  149 L
+2007  149 mt 2042  146 L
+2042  146 mt 2077  143 L
+2077  143 mt 2112  141 L
+2112  141 mt 2147  138 L
+2147  138 mt 2176  135 L
+2176  135 mt 2182  135 L
+2182  135 mt 2217  132 L
+2217  132 mt 2251  129 L
+2251  129 mt 2286  126 L
+2286  126 mt 2321  122 L
+2321  122 mt 2356  119 L
+2356  119 mt 2391  115 L
+2391  115 mt 2426  112 L
+2426  112 mt 2461  108 L
+2461  108 mt 2463  108 L
+2463  108 mt 2496  104 L
+2496  104 mt 2530  100 L
+2530  100 mt 2565   97 L
+2565   97 mt 2600   93 L
+2600   93 mt 2635   89 L
+2635   89 mt 2670   85 L
+2670   85 mt 2705   82 L
+2705   82 mt 2717   80 L
+2717   80 mt 2740   78 L
+2740   78 mt 2774   74 L
+2774   74 mt 2809   70 L
+2809   70 mt 2844   67 L
+2844   67 mt 2879   63 L
+2879   63 mt 2914   60 L
+2914   60 mt 2949   56 L
+2949   56 mt 2982   53 L
+2982   53 mt 2984   53 L
+2984   53 mt 3019   49 L
+3019   49 mt 3053   46 L
+3053   46 mt 3088   43 L
+3088   43 mt 3123   39 L
+3123   39 mt 3158   35 L
+3158   35 mt 3193   32 L
+3193   32 mt 3228   28 L
+3228   28 mt 3252   25 L
+3252   25 mt 3263   24 L
+3263   24 mt 3298   20 L
+3298   20 mt 3332   16 L
+3332   16 mt 3367   12 L
+3367   12 mt 3402    7 L
+3402    7 mt 3437    3 L
+3437    3 mt 3472    0 L
+3472    0 mt 3479   -1 L
+3479   -1 mt 3507   -5 L
+3507   -5 mt 3542   -9 L
+3542   -9 mt 3577  -14 L
+3577  -14 mt 3611  -19 L
+3611  -19 mt 3646  -23 L
+3646  -23 mt 3681  -28 L
+3681  -28 mt 3687  -29 L
+3687  -29 mt 3716  -33 L
+3716  -33 mt 3751  -37 L
+3751  -37 mt 3786  -42 L
+3786  -42 mt 3821  -46 L
+3821  -46 mt 3855  -50 L
+3855  -50 mt 3890  -54 L
+3890  -54 mt 3907  -56 L
+3907  -56 mt 3925  -58 L
+3925  -58 mt 3960  -62 L
+3960  -62 mt 3995  -65 L
+3995  -65 mt 4030  -69 L
+4030  -69 mt 4065  -72 L
+4065  -72 mt 4100  -75 L
+4100  -75 mt 4134  -78 L
+4134  -78 mt 4169  -80 L
+4169  -80 mt 4204  -83 L
+4204  -83 mt 4224  -84 L
+4224  -84 mt 4239  -85 L
+4239  -85 mt 4274  -86 L
+4274  -86 mt 4309  -88 L
+4309  -88 mt 4344  -89 L
+4344  -89 mt 4379  -89 L
+4379  -89 mt 4413  -89 L
+4413  -89 mt 4448  -88 L
+4448  -88 mt 4483  -87 L
+4483  -87 mt 4518  -86 L
+4518  -86 mt 4553  -84 L
+4553  -84 mt 4560  -84 L
+4560  -84 mt 4588  -82 L
+4588  -82 mt 4623  -79 L
+4623  -79 mt 4657  -76 L
+4657  -76 mt 4692  -73 L
+4692  -73 mt 4727  -69 L
+4727  -69 mt 4762  -65 L
+4762  -65 mt 4797  -60 L
+4797  -60 mt 4822  -56 L
+4822  -56 mt 4832  -55 L
+4832  -55 mt 4867  -49 L
+4867  -49 mt 4902  -43 L
+4902  -43 mt 4936  -36 L
+4936  -36 mt 4967  -29 L
+4967  -29 mt 4971  -28 L
+4971  -28 mt 5006  -20 L
+5006  -20 mt 5041  -11 L
+5041  -11 mt 5076   -2 L
+5076   -2 mt 5077   -1 L
+5077   -1 mt 5111    7 L
+5111    7 mt 5146   18 L
+5146   18 mt 5170   25 L
+5170   25 mt 5181   29 L
+5181   29 mt 5215   41 L
+5215   41 mt 5248   53 L
+5248   53 mt 5250   54 L
+5250   54 mt 5285   68 L
+5285   68 mt 5315   80 L
+5315   80 mt 5320   83 L
+5320   83 mt 5355   99 L
+5355   99 mt 5373  108 L
+5373  108 mt 5390  116 L
+5390  116 mt 5425  135 L
+5425  135 mt 5425  135 L
+5425  135 mt 5459  155 L
+5459  155 mt 5472  163 L
+5472  163 mt 5494  177 L
+5494  177 mt 5516  190 L
+5516  190 mt 5529  199 L
+5529  199 mt 5556  218 L
+5556  218 mt 5564  224 L
+5564  224 mt 5594  245 L
+5594  245 mt 5599  249 L
+5599  249 mt 5630  273 L
+5630  273 mt 5634  276 L
+5634  276 mt 5665  300 L
+5665  300 mt 5669  304 L
+5669  304 mt 5698  328 L
+5698  328 mt 5704  333 L
+5704  333 mt 5730  355 L
+5730  355 mt 5738  363 L
+5738  363 mt 5761  383 L
+5761  383 mt 5773  394 L
+5773  394 mt 5791  411 L
+5791  411 mt 5808  427 L
+5808  427 mt 5820  438 L
+5820  438 mt 5843  460 L
+5843  460 mt 5849  466 L
+5849  466 mt 5878  493 L
+5878  493 mt 5878  493 L
+5878  493 mt 5906  521 L
+5906  521 mt 5913  528 L
+5913  528 mt 5933  548 L
+5933  548 mt 5948  563 L
+5948  563 mt 5961  576 L
+5961  576 mt 5983  598 L
+5983  598 mt 5988  603 L
+5988  603 mt 6015  631 L
+6015  631 mt 6017  633 L
+6017  633 mt 6042  658 L
+6042  658 mt 6052  669 L
+6052  669 mt 6068  686 L
+6068  686 mt 6087  705 L
+6087  705 mt 6095  713 L
+6095  713 mt 6121  741 L
+6121  741 mt 6122  741 L
+6122  741 mt 6148  768 L
+6148  768 mt 6157  778 L
+6157  778 mt 6174  796 L
+6174  796 mt 6192  814 L
+6192  814 mt 6200  823 L
+6200  823 mt 6226  851 L
+6226  851 mt 6227  851 L
+6227  851 mt 6253  878 L
+6253  878 mt 6261  888 L
+6261  888 mt 6279  906 L
+6279  906 mt 6296  924 L
+6296  924 mt 6305  933 L
+6305  933 mt 6331  961 L
+6331  961 mt 6331  961 L
+6331  961 mt 6357  988 L
+6357  988 mt 6366  998 L
+6366  998 mt 6383 1016 L
+6383 1016 mt 6401 1035 L
+6401 1035 mt 6409 1043 L
+6409 1043 mt 6434 1071 L
+6434 1071 mt 6436 1072 L
+6436 1072 mt 6460 1098 L
+6460 1098 mt 6471 1110 L
+6471 1110 mt 6485 1126 L
+6485 1126 mt 6506 1149 L
+6506 1149 mt 6510 1153 L
+6510 1153 mt 6534 1181 L
+6534 1181 mt 6540 1189 L
+6540 1189 mt 6557 1208 L
+6557 1208 mt 6575 1230 L
+6575 1230 mt 6580 1236 L
+6580 1236 mt 6603 1263 L
+6603 1263 mt 6610 1273 L
+6610 1273 mt 6625 1291 L
+6625 1291 mt 6645 1317 L
+6645 1317 mt 6646 1318 L
+6646 1318 mt 6666 1346 L
+6666 1346 mt 6680 1365 L
+6680 1365 mt 6686 1373 L
+6686 1373 mt 6705 1401 L
+6705 1401 mt 6715 1415 L
+6715 1415 mt 6724 1428 L
+6724 1428 mt 6741 1456 L
+6741 1456 mt 6750 1470 L
+6750 1470 mt 6758 1484 L
+6758 1484 mt 6774 1511 L
+6774 1511 mt 6785 1531 L
+6785 1531 mt 6789 1539 L
+6789 1539 mt 6803 1566 L
+6803 1566 mt 6816 1594 L
+6816 1594 mt 6819 1602 L
+6819 1602 mt 6828 1621 L
+6828 1621 mt 6840 1649 L
+6840 1649 mt 6851 1676 L
+6851 1676 mt 6854 1686 L
+6854 1686 mt 6861 1704 L
+6861 1704 mt 6870 1731 L
+6870 1731 mt 6879 1759 L
+6879 1759 mt 6887 1786 L
+6887 1786 mt 6889 1795 L
+6889 1795 mt 6894 1814 L
+6894 1814 mt 6901 1841 L
+6901 1841 mt 6906 1869 L
+6906 1869 mt 6911 1896 L
+6911 1896 mt 6915 1924 L
+6915 1924 mt 6918 1951 L
+6918 1951 mt 6921 1979 L
+6921 1979 mt 6923 2006 L
+6923 2006 mt 6924 2025 L
+6854 1868 mt 6854 1869 L
+6854 1869 mt 6859 1896 L
+6859 1896 mt 6863 1924 L
+6863 1924 mt 6866 1951 L
+6866 1951 mt 6868 1979 L
+6868 1979 mt 6870 2006 L
+6870 2006 mt 6871 2034 L
+6871 2034 mt 6872 2061 L
+6872 2061 mt 6871 2089 L
+6871 2089 mt 6870 2116 L
+6870 2116 mt 6868 2144 L
+6868 2144 mt 6866 2171 L
+6866 2171 mt 6862 2199 L
+6862 2199 mt 6858 2226 L
+6858 2226 mt 6854 2250 L
+6854 2250 mt 6854 2254 L
+6854 2254 mt 6848 2281 L
+6848 2281 mt 6842 2309 L
+6842 2309 mt 6836 2336 L
+6836 2336 mt 6829 2364 L
+6829 2364 mt 6821 2391 L
+6821 2391 mt 6819 2396 L
+6819 2396 mt 6812 2419 L
+6812 2419 mt 6804 2446 L
+6804 2446 mt 6794 2474 L
+6794 2474 mt 6785 2501 L
+6785 2501 mt 6784 2502 L
+6784 2502 mt 6774 2529 L
+6774 2529 mt 6763 2557 L
+6763 2557 mt 6752 2584 L
+6752 2584 mt 6750 2589 L
+6750 2589 mt 6740 2612 L
+6740 2612 mt 6728 2639 L
+6728 2639 mt 6715 2667 L
+6715 2667 mt 6715 2667 L
+6715 2667 mt 6702 2694 L
+6702 2694 mt 6688 2722 L
+6688 2722 mt 6680 2738 L
+6680 2738 mt 6674 2749 L
+6674 2749 mt 6660 2777 L
+6660 2777 mt 6645 2804 L
+6645 2804 mt 6645 2804 L
+6645 2804 mt 6630 2832 L
+6630 2832 mt 6616 2859 L
+6616 2859 mt 6610 2871 L
+6610 2871 mt 6602 2887 L
+6602 2887 mt 6588 2914 L
+6588 2914 mt 6575 2941 L
+6575 2941 mt 6575 2942 L
+6575 2942 mt 6562 2969 L
+6562 2969 mt 6550 2997 L
+6550 2997 mt 6540 3023 L
+6540 3023 mt 6540 3024 L
+6540 3024 mt 6530 3052 L
+6530 3052 mt 6522 3079 L
+6522 3079 mt 6515 3107 L
+6515 3107 mt 6509 3134 L
+6509 3134 mt 6506 3152 L
+6506 3152 mt 6504 3162 L
+6504 3162 mt 6499 3189 L
+6499 3189 mt 6494 3217 L
+6494 3217 mt 6489 3244 L
+6489 3244 mt 6485 3272 L
+6485 3272 mt 6480 3299 L
+6480 3299 mt 6475 3327 L
+6475 3327 mt 6471 3349 L
+6471 3349 mt 6470 3354 L
+6470 3354 mt 6464 3382 L
+6464 3382 mt 6457 3409 L
+6457 3409 mt 6450 3437 L
+6450 3437 mt 6442 3464 L
+6442 3464 mt 6436 3481 L
+6436 3481 mt 6432 3492 L
+6432 3492 mt 6421 3519 L
+6421 3519 mt 6408 3547 L
+6408 3547 mt 6401 3561 L
+6401 3561 mt 6393 3575 L
+6393 3575 mt 6377 3602 L
+6377 3602 mt 6366 3618 L
+6366 3618 mt 6357 3630 L
+6357 3630 mt 6335 3657 L
+6335 3657 mt 6331 3661 L
+6331 3661 mt 6306 3685 L
+6306 3685 mt 6296 3693 L
+6296 3693 mt 6263 3712 L
+6263 3712 mt 6261 3713 L
+6261 3713 mt 6227 3724 L
+6227 3724 mt 6193 3712 L
+6193 3712 mt 6192 3712 L
+6192 3712 mt 6165 3685 L
+6165 3685 mt 6157 3677 L
+6157 3677 mt 6140 3657 L
+6140 3657 mt 6122 3636 L
+6122 3636 mt 6117 3630 L
+6117 3630 mt 6094 3602 L
+6094 3602 mt 6087 3595 L
+6087 3595 mt 6064 3575 L
+6064 3575 mt 6052 3565 L
+6052 3565 mt 6022 3547 L
+6022 3547 mt 6017 3545 L
+6017 3545 mt 5983 3531 L
+5983 3531 mt 5948 3520 L
+5948 3520 mt 5946 3519 L
+5946 3519 mt 5913 3509 L
+5913 3509 mt 5878 3496 L
+5878 3496 mt 5869 3492 L
+5869 3492 mt 5843 3480 L
+5843 3480 mt 5811 3464 L
+5811 3464 mt 5808 3463 L
+5808 3463 mt 5773 3438 L
+5773 3438 mt 5772 3437 L
+5772 3437 mt 5747 3409 L
+5747 3409 mt 5738 3395 L
+5738 3395 mt 5731 3382 L
+5731 3382 mt 5720 3354 L
+5720 3354 mt 5711 3327 L
+5711 3327 mt 5704 3306 L
+5704 3306 mt 5701 3299 L
+5701 3299 mt 5692 3272 L
+5692 3272 mt 5682 3244 L
+5682 3244 mt 5672 3217 L
+5672 3217 mt 5669 3206 L
+5669 3206 mt 5663 3189 L
+5663 3189 mt 5654 3162 L
+5654 3162 mt 5645 3134 L
+5645 3134 mt 5634 3107 L
+5634 3107 mt 5634 3107 L
+5634 3107 mt 5617 3079 L
+5617 3079 mt 5599 3055 L
+5599 3055 mt 5596 3052 L
+5596 3052 mt 5566 3024 L
+5566 3024 mt 5564 3023 L
+5564 3023 mt 5529 2997 L
+5529 2997 mt 5529 2997 L
+5529 2997 mt 5494 2971 L
+5494 2971 mt 5492 2969 L
+5492 2969 mt 5461 2942 L
+5461 2942 mt 5459 2940 L
+5459 2940 mt 5432 2914 L
+5432 2914 mt 5425 2907 L
+5425 2907 mt 5401 2887 L
+5401 2887 mt 5390 2877 L
+5390 2877 mt 5368 2859 L
+5368 2859 mt 5355 2848 L
+5355 2848 mt 5334 2832 L
+5334 2832 mt 5320 2819 L
+5320 2819 mt 5300 2804 L
+5300 2804 mt 5285 2788 L
+5285 2788 mt 5274 2777 L
+5274 2777 mt 5259 2749 L
+5259 2749 mt 5256 2722 L
+5256 2722 mt 5260 2694 L
+5260 2694 mt 5267 2667 L
+5267 2667 mt 5271 2639 L
+5271 2639 mt 5270 2612 L
+5270 2612 mt 5263 2584 L
+5263 2584 mt 5250 2558 L
+5250 2558 mt 5249 2557 L
+5249 2557 mt 5226 2529 L
+5226 2529 mt 5215 2518 L
+5215 2518 mt 5196 2502 L
+5196 2502 mt 5181 2489 L
+5181 2489 mt 5162 2474 L
+5162 2474 mt 5146 2460 L
+5146 2460 mt 5131 2446 L
+5131 2446 mt 5111 2428 L
+5111 2428 mt 5103 2419 L
+5103 2419 mt 5078 2391 L
+5078 2391 mt 5076 2389 L
+5076 2389 mt 5057 2364 L
+5057 2364 mt 5041 2342 L
+5041 2342 mt 5037 2336 L
+5037 2336 mt 5016 2309 L
+5016 2309 mt 5006 2299 L
+5006 2299 mt 4989 2281 L
+4989 2281 mt 4971 2267 L
+4971 2267 mt 4955 2254 L
+4955 2254 mt 4936 2242 L
+4936 2242 mt 4911 2226 L
+4911 2226 mt 4902 2221 L
+4902 2221 mt 4867 2203 L
+4867 2203 mt 4858 2199 L
+4858 2199 mt 4832 2187 L
+4832 2187 mt 4797 2172 L
+4797 2172 mt 4795 2171 L
+4795 2171 mt 4762 2156 L
+4762 2156 mt 4743 2144 L
+4743 2144 mt 4727 2131 L
+4727 2131 mt 4713 2116 L
+4713 2116 mt 4696 2089 L
+4696 2089 mt 4692 2082 L
+4692 2082 mt 4684 2061 L
+4684 2061 mt 4677 2034 L
+4677 2034 mt 4670 2006 L
+4670 2006 mt 4662 1979 L
+4662 1979 mt 4657 1965 L
+4657 1965 mt 4653 1951 L
+4653 1951 mt 4641 1924 L
+4641 1924 mt 4626 1896 L
+4626 1896 mt 4623 1892 L
+4623 1892 mt 4600 1869 L
+4600 1869 mt 4588 1859 L
+4588 1859 mt 4554 1841 L
+4554 1841 mt 4553 1841 L
+4553 1841 mt 4518 1828 L
+4518 1828 mt 4483 1818 L
+4483 1818 mt 4467 1814 L
+4467 1814 mt 4448 1809 L
+4448 1809 mt 4413 1799 L
+4413 1799 mt 4380 1786 L
+4380 1786 mt 4379 1785 L
+4379 1785 mt 4344 1767 L
+4344 1767 mt 4333 1759 L
+4333 1759 mt 4309 1737 L
+4309 1737 mt 4303 1731 L
+4303 1731 mt 4281 1704 L
+4281 1704 mt 4274 1694 L
+4274 1694 mt 4261 1676 L
+4261 1676 mt 4242 1649 L
+4242 1649 mt 4239 1644 L
+4239 1644 mt 4219 1621 L
+4219 1621 mt 4204 1604 L
+4204 1604 mt 4192 1594 L
+4192 1594 mt 4169 1575 L
+4169 1575 mt 4155 1566 L
+4155 1566 mt 4134 1554 L
+4134 1554 mt 4100 1540 L
+4100 1540 mt 4093 1539 L
+4093 1539 mt 4065 1532 L
+4065 1532 mt 4030 1526 L
+4030 1526 mt 3995 1522 L
+3995 1522 mt 3960 1520 L
+3960 1520 mt 3925 1518 L
+3925 1518 mt 3890 1516 L
+3890 1516 mt 3856 1511 L
+3856 1511 mt 3855 1511 L
+3855 1511 mt 3821 1503 L
+3821 1503 mt 3786 1490 L
+3786 1490 mt 3772 1484 L
+3772 1484 mt 3751 1472 L
+3751 1472 mt 3727 1456 L
+3727 1456 mt 3716 1447 L
+3716 1447 mt 3695 1428 L
+3695 1428 mt 3681 1414 L
+3681 1414 mt 3670 1401 L
+3670 1401 mt 3647 1373 L
+3647 1373 mt 3646 1373 L
+3646 1373 mt 3626 1346 L
+3626 1346 mt 3611 1329 L
+3611 1329 mt 3602 1318 L
+3602 1318 mt 3577 1297 L
+3577 1297 mt 3566 1291 L
+3566 1291 mt 3542 1279 L
+3542 1279 mt 3507 1267 L
+3507 1267 mt 3493 1263 L
+3493 1263 mt 3472 1258 L
+3472 1258 mt 3437 1251 L
+3437 1251 mt 3402 1245 L
+3402 1245 mt 3367 1239 L
+3367 1239 mt 3347 1236 L
+3347 1236 mt 3332 1233 L
+3332 1233 mt 3298 1226 L
+3298 1226 mt 3263 1219 L
+3263 1219 mt 3228 1210 L
+3228 1210 mt 3221 1208 L
+3221 1208 mt 3193 1200 L
+3193 1200 mt 3158 1190 L
+3158 1190 mt 3128 1181 L
+3128 1181 mt 3123 1180 L
+3123 1180 mt 3088 1170 L
+3088 1170 mt 3053 1162 L
+3053 1162 mt 3019 1157 L
+3019 1157 mt 2984 1154 L
+2984 1154 mt 2965 1153 L
+2965 1153 mt 2949 1152 L
+2949 1152 mt 2914 1149 L
+2914 1149 mt 2879 1147 L
+2879 1147 mt 2844 1146 L
+2844 1146 mt 2809 1146 L
+2809 1146 mt 2774 1147 L
+2774 1147 mt 2740 1148 L
+2740 1148 mt 2705 1148 L
+2705 1148 mt 2670 1147 L
+2670 1147 mt 2635 1144 L
+2635 1144 mt 2600 1140 L
+2600 1140 mt 2565 1136 L
+2565 1136 mt 2530 1131 L
+2530 1131 mt 2501 1126 L
+2501 1126 mt 2496 1125 L
+2496 1125 mt 2461 1115 L
+2461 1115 mt 2426 1107 L
+2426 1107 mt 2391 1100 L
+2391 1100 mt 2372 1098 L
+2372 1098 mt 2356 1097 L
+2356 1097 mt 2321 1095 L
+2321 1095 mt 2286 1095 L
+2286 1095 mt 2251 1096 L
+2251 1096 mt 2217 1097 L
+2217 1097 mt 2195 1098 L
+2195 1098 mt 2182 1099 L
+2182 1099 mt 2147 1103 L
+2147 1103 mt 2112 1107 L
+2112 1107 mt 2077 1113 L
+2077 1113 mt 2042 1121 L
+2042 1121 mt 2021 1126 L
+2021 1126 mt 2007 1129 L
+2007 1129 mt 1972 1140 L
+1972 1140 mt 1938 1152 L
+1938 1152 mt 1933 1153 L
+1933 1153 mt 1903 1166 L
+1903 1166 mt 1871 1181 L
+1871 1181 mt 1868 1183 L
+1868 1183 mt 1833 1203 L
+1833 1203 mt 1825 1208 L
+1825 1208 mt 1798 1227 L
+1798 1227 mt 1787 1236 L
+1787 1236 mt 1763 1258 L
+1763 1258 mt 1758 1263 L
+1758 1263 mt 1737 1291 L
+1737 1291 mt 1728 1307 L
+1728 1307 mt 1724 1318 L
+1724 1318 mt 1717 1346 L
+1717 1346 mt 1713 1373 L
+1713 1373 mt 1711 1401 L
+1711 1401 mt 1709 1428 L
+1709 1428 mt 1704 1456 L
+1704 1456 mt 1698 1484 L
+1698 1484 mt 1694 1498 L
+1694 1498 mt 1690 1511 L
+1690 1511 mt 1679 1539 L
+1679 1539 mt 1667 1566 L
+1667 1566 mt 1659 1587 L
+1659 1587 mt 1656 1594 L
+1656 1594 mt 1650 1621 L
+1650 1621 mt 1649 1649 L
+1649 1649 mt 1653 1676 L
+1653 1676 mt 1659 1696 L
+1659 1696 mt 1661 1704 L
+1661 1704 mt 1669 1731 L
+1669 1731 mt 1674 1759 L
+1674 1759 mt 1673 1786 L
+1673 1786 mt 1669 1814 L
+1669 1814 mt 1663 1841 L
+1663 1841 mt 1659 1856 L
+1659 1856 mt 1655 1869 L
+1655 1869 mt 1649 1896 L
+1649 1896 mt 1646 1924 L
+1646 1924 mt 1648 1951 L
+1648 1951 mt 1654 1979 L
+1654 1979 mt 1659 1999 L
+1659 1999 mt 1661 2006 L
+1661 2006 mt 1666 2034 L
+1666 2034 mt 1666 2061 L
+1666 2061 mt 1661 2089 L
+1661 2089 mt 1659 2096 L
+1659 2096 mt 1654 2116 L
+1654 2116 mt 1647 2144 L
+1647 2144 mt 1644 2171 L
+1644 2171 mt 1648 2199 L
+1648 2199 mt 1659 2220 L
+1659 2220 mt 1661 2226 L
+1661 2226 mt 1688 2254 L
+1688 2254 mt 1694 2258 L
+1694 2258 mt 1725 2281 L
+1725 2281 mt 1728 2284 L
+1728 2284 mt 1763 2306 L
+1763 2306 mt 1768 2309 L
+1768 2309 mt 1798 2327 L
+1798 2327 mt 1813 2336 L
+1813 2336 mt 1833 2350 L
+1833 2350 mt 1853 2364 L
+1853 2364 mt 1868 2376 L
+1868 2376 mt 1886 2391 L
+1886 2391 mt 1903 2409 L
+1903 2409 mt 1912 2419 L
+1912 2419 mt 1937 2446 L
+1937 2446 mt 1938 2448 L
+1938 2448 mt 1961 2474 L
+1961 2474 mt 1972 2486 L
+1972 2486 mt 1987 2502 L
+1987 2502 mt 2007 2522 L
+2007 2522 mt 2016 2529 L
+2016 2529 mt 2042 2550 L
+2042 2550 mt 2051 2557 L
+2051 2557 mt 2077 2574 L
+2077 2574 mt 2091 2584 L
+2091 2584 mt 2112 2600 L
+2112 2600 mt 2124 2612 L
+2124 2612 mt 2147 2638 L
+2147 2638 mt 2147 2639 L
+2147 2639 mt 2167 2667 L
+2167 2667 mt 2182 2684 L
+2182 2684 mt 2189 2694 L
+2189 2694 mt 2213 2722 L
+2213 2722 mt 2217 2725 L
+2217 2725 mt 2240 2749 L
+2240 2749 mt 2251 2760 L
+2251 2760 mt 2268 2777 L
+2268 2777 mt 2286 2794 L
+2286 2794 mt 2297 2804 L
+2297 2804 mt 2321 2830 L
+2321 2830 mt 2323 2832 L
+2323 2832 mt 2348 2859 L
+2348 2859 mt 2356 2869 L
+2356 2869 mt 2372 2887 L
+2372 2887 mt 2391 2907 L
+2391 2907 mt 2397 2914 L
+2397 2914 mt 2412 2942 L
+2412 2942 mt 2408 2969 L
+2408 2969 mt 2394 2997 L
+2394 2997 mt 2391 3003 L
+2391 3003 mt 2376 3024 L
+2376 3024 mt 2362 3052 L
+2362 3052 mt 2356 3063 L
+2356 3063 mt 2345 3079 L
+2345 3079 mt 2330 3107 L
+2330 3107 mt 2321 3134 L
+2321 3134 mt 2321 3134 L
+2321 3134 mt 2321 3137 L
+2321 3137 mt 2323 3162 L
+2323 3162 mt 2335 3189 L
+2335 3189 mt 2353 3217 L
+2353 3217 mt 2356 3220 L
+2356 3220 mt 2378 3244 L
+2378 3244 mt 2391 3256 L
+2391 3256 mt 2409 3272 L
+2409 3272 mt 2426 3286 L
+2426 3286 mt 2442 3299 L
+2442 3299 mt 2461 3315 L
+2461 3315 mt 2476 3327 L
+2476 3327 mt 2496 3342 L
+2496 3342 mt 2512 3354 L
+2512 3354 mt 2530 3368 L
+2530 3368 mt 2548 3382 L
+2548 3382 mt 2565 3395 L
+2565 3395 mt 2582 3409 L
+2582 3409 mt 2600 3427 L
+2600 3427 mt 2610 3437 L
+2610 3437 mt 2633 3464 L
+2633 3464 mt 2635 3467 L
+2635 3467 mt 2652 3492 L
+2652 3492 mt 2669 3519 L
+2669 3519 mt 2670 3521 L
+2670 3521 mt 2686 3547 L
+2686 3547 mt 2703 3575 L
+2703 3575 mt 2705 3578 L
+2705 3578 mt 2719 3602 L
+2719 3602 mt 2734 3630 L
+2734 3630 mt 2740 3645 L
+2740 3645 mt 2744 3657 L
+2744 3657 mt 2746 3685 L
+2746 3685 mt 2740 3697 L
+2740 3697 mt 2732 3712 L
+2732 3712 mt 2705 3735 L
+2705 3735 mt 2696 3740 L
+2696 3740 mt 2670 3752 L
+2670 3752 mt 2635 3765 L
+2635 3765 mt 2629 3767 L
+2629 3767 mt 2600 3776 L
+2600 3776 mt 2565 3787 L
+2565 3787 mt 2541 3795 L
+2541 3795 mt 2530 3798 L
+2530 3798 mt 2496 3812 L
+2496 3812 mt 2469 3822 L
+2469 3822 mt 2461 3826 L
+2461 3826 mt 2426 3842 L
+2426 3842 mt 2410 3850 L
+2410 3850 mt 2391 3861 L
+2391 3861 mt 2364 3877 L
+2364 3877 mt 2356 3883 L
+2356 3883 mt 2327 3905 L
+2327 3905 mt 2321 3910 L
+2321 3910 mt 2295 3932 L
+2295 3932 mt 2286 3942 L
+2286 3942 mt 2267 3960 L
+2267 3960 mt 2251 3981 L
+2251 3981 mt 2246 3987 L
+2246 3987 mt 2236 4015 L
+2236 4015 mt 2237 4042 L
+2237 4042 mt 2249 4070 L
+2249 4070 mt 2251 4073 L
+2251 4073 mt 2268 4097 L
+2268 4097 mt 2286 4119 L
+2286 4119 mt 2290 4125 L
+2290 4125 mt 2315 4152 L
+2315 4152 mt 2321 4159 L
+2321 4159 mt 2338 4180 L
+2338 4180 mt 2356 4202 L
+2356 4202 mt 2360 4207 L
+2360 4207 mt 2381 4235 L
+2381 4235 mt 2391 4249 L
+2391 4249 mt 2401 4262 L
+2401 4262 mt 2419 4290 L
+2419 4290 mt 2426 4299 L
+2426 4299 mt 2439 4317 L
+2439 4317 mt 2461 4341 L
+2461 4341 mt 2464 4345 L
+2464 4345 mt 2495 4372 L
+2495 4372 mt 2496 4373 L
+2496 4373 mt 2530 4400 L
+2530 4400 mt 2531 4400 L
+2531 4400 mt 2565 4421 L
+2565 4421 mt 2576 4427 L
+2576 4427 mt 2600 4440 L
+2600 4440 mt 2630 4455 L
+2630 4455 mt 2635 4457 L
+2635 4457 mt 2670 4471 L
+2670 4471 mt 2705 4481 L
+2705 4481 mt 2712 4482 L
+2712 4482 mt 2740 4487 L
+2740 4487 mt 2774 4490 L
+2774 4490 mt 2809 4491 L
+2809 4491 mt 2844 4493 L
+2844 4493 mt 2879 4497 L
+2879 4497 mt 2914 4505 L
+2914 4505 mt 2930 4510 L
+2930 4510 mt 2949 4516 L
+2949 4516 mt 2984 4532 L
+2984 4532 mt 2994 4537 L
+2994 4537 mt 3019 4552 L
+3019 4552 mt 3038 4565 L
+3038 4565 mt 3053 4585 L
+3053 4585 mt 3059 4592 L
+3059 4592 mt 3055 4620 L
+3055 4620 mt 3053 4621 L
+3053 4621 mt 3021 4648 L
+3021 4648 mt 3019 4649 L
+3019 4649 mt 2984 4665 L
+2984 4665 mt 2959 4675 L
+2959 4675 mt 2949 4679 L
+2949 4679 mt 2914 4692 L
+2914 4692 mt 2884 4703 L
+2884 4703 mt 2879 4704 L
+2879 4704 mt 2844 4715 L
+2844 4715 mt 2809 4724 L
+2809 4724 mt 2789 4730 L
+2789 4730 mt 2774 4734 L
+2774 4734 mt 2740 4743 L
+2740 4743 mt 2705 4752 L
+2705 4752 mt 2684 4758 L
+2684 4758 mt 2670 4761 L
+2670 4761 mt 2635 4770 L
+2635 4770 mt 2600 4779 L
+2600 4779 mt 2573 4785 L
+2573 4785 mt 2565 4787 L
+2565 4787 mt 2530 4794 L
+2530 4794 mt 2496 4801 L
+2496 4801 mt 2461 4807 L
+2461 4807 mt 2426 4812 L
+2426 4812 mt 2420 4813 L
+2420 4813 mt 2391 4816 L
+2391 4816 mt 2356 4820 L
+2356 4820 mt 2321 4822 L
+2321 4822 mt 2286 4824 L
+2286 4824 mt 2251 4825 L
+2251 4825 mt 2217 4825 L
+2217 4825 mt 2182 4824 L
+2182 4824 mt 2147 4821 L
+2147 4821 mt 2112 4818 L
+2112 4818 mt 2077 4814 L
+2077 4814 mt 2070 4813 L
+2070 4813 mt 2042 4808 L
+2042 4808 mt 2007 4802 L
+2007 4802 mt 1972 4794 L
+1972 4794 mt 1938 4786 L
+1938 4786 mt 1935 4785 L
+1935 4785 mt 1903 4776 L
+1903 4776 mt 1868 4764 L
+1868 4764 mt 1851 4758 L
+1851 4758 mt 1833 4751 L
+1833 4751 mt 1798 4735 L
+1798 4735 mt 1788 4730 L
+1788 4730 mt 1763 4717 L
+1763 4717 mt 1739 4703 L
+1739 4703 mt 1728 4696 L
+1728 4696 mt 1700 4675 L
+1700 4675 mt 1694 4669 L
+1694 4669 mt 1670 4648 L
+1670 4648 mt 1659 4634 L
+1659 4634 mt 1647 4620 L
+1647 4620 mt 1629 4592 L
+1629 4592 mt 1624 4584 L
+1624 4584 mt 1613 4565 L
+1613 4565 mt 1600 4537 L
+1600 4537 mt 1589 4511 L
+1589 4511 mt 1589 4510 L
+1589 4510 mt 1578 4482 L
+1578 4482 mt 1567 4455 L
+1567 4455 mt 1558 4427 L
+1558 4427 mt 1554 4408 L
+1554 4408 mt 1552 4400 L
+1552 4400 mt 1546 4372 L
+1546 4372 mt 1539 4345 L
+1539 4345 mt 1529 4317 L
+1529 4317 mt 1519 4294 L
+1519 4294 mt 1518 4290 L
+1518 4290 mt 1507 4262 L
+1507 4262 mt 1497 4235 L
+1497 4235 mt 1490 4207 L
+1490 4207 mt 1486 4180 L
+1486 4180 mt 1485 4152 L
+1485 4152 mt 1488 4125 L
+1488 4125 mt 1494 4097 L
+1494 4097 mt 1504 4070 L
+1504 4070 mt 1518 4042 L
+1518 4042 mt 1519 4040 L
+1519 4040 mt 1536 4015 L
+1536 4015 mt 1554 3992 L
+1554 3992 mt 1558 3987 L
+1558 3987 mt 1585 3960 L
+1585 3960 mt 1589 3956 L
+1589 3956 mt 1618 3932 L
+1618 3932 mt 1624 3927 L
+1624 3927 mt 1659 3905 L
+1659 3905 mt 1660 3905 L
+1660 3905 mt 1694 3882 L
+1694 3882 mt 1701 3877 L
+1701 3877 mt 1728 3854 L
+1728 3854 mt 1734 3850 L
+1734 3850 mt 1756 3822 L
+1756 3822 mt 1763 3803 L
+1763 3803 mt 1767 3795 L
+1767 3795 mt 1770 3767 L
+1770 3767 mt 1767 3740 L
+1767 3740 mt 1763 3721 L
+1763 3721 mt 1762 3712 L
+1762 3712 mt 1755 3685 L
+1755 3685 mt 1748 3657 L
+1748 3657 mt 1741 3630 L
+1741 3630 mt 1735 3602 L
+1735 3602 mt 1729 3575 L
+1729 3575 mt 1728 3572 L
+1728 3572 mt 1722 3547 L
+1722 3547 mt 1714 3519 L
+1714 3519 mt 1704 3492 L
+1704 3492 mt 1694 3466 L
+1694 3466 mt 1693 3464 L
+1693 3464 mt 1679 3437 L
+1679 3437 mt 1662 3409 L
+1662 3409 mt 1659 3405 L
+1659 3405 mt 1640 3382 L
+1640 3382 mt 1624 3366 L
+1624 3366 mt 1611 3354 L
+1611 3354 mt 1589 3340 L
+1589 3340 mt 1566 3327 L
+1566 3327 mt 1554 3321 L
+1554 3321 mt 1519 3305 L
+1519 3305 mt 1507 3299 L
+1507 3299 mt 1484 3291 L
+1484 3291 mt 1449 3279 L
+1449 3279 mt 1426 3272 L
+1426 3272 mt 1415 3269 L
+1415 3269 mt 1380 3259 L
+1380 3259 mt 1345 3249 L
+1345 3249 mt 1331 3244 L
+1331 3244 mt 1310 3238 L
+1310 3238 mt 1275 3227 L
+1275 3227 mt 1246 3217 L
+1246 3217 mt 1240 3215 L
+1240 3215 mt 1205 3203 L
+1205 3203 mt 1171 3189 L
+1171 3189 mt 1170 3189 L
+1170 3189 mt 1136 3175 L
+1136 3175 mt 1107 3162 L
+1107 3162 mt 1101 3159 L
+1101 3159 mt 1066 3142 L
+1066 3142 mt 1051 3134 L
+1051 3134 mt 1031 3124 L
+1031 3124 mt  999 3107 L
+ 999 3107 mt  996 3105 L
+ 996 3105 mt  961 3086 L
+ 961 3086 mt  950 3079 L
+ 950 3079 mt  926 3066 L
+ 926 3066 mt  902 3052 L
+ 902 3052 mt  892 3046 L
+ 892 3046 mt  857 3025 L
+ 857 3025 mt  856 3024 L
+ 856 3024 mt  822 3003 L
+ 822 3003 mt  812 2997 L
+ 812 2997 mt  787 2980 L
+ 787 2980 mt  773 2969 L
+ 773 2969 mt  752 2954 L
+ 752 2954 mt  737 2942 L
+ 737 2942 mt  717 2926 L
+ 717 2926 mt  704 2914 L
+ 704 2914 mt  682 2894 L
+ 682 2894 mt  675 2887 L
+ 675 2887 mt  649 2859 L
+ 649 2859 mt  647 2858 L
+ 647 2858 mt  625 2832 L
+ 625 2832 mt  613 2816 L
+ 613 2816 mt  604 2804 L
+ 604 2804 mt  584 2777 L
+ 584 2777 mt  578 2766 L
+ 578 2766 mt  567 2749 L
+ 567 2749 mt  551 2722 L
+ 551 2722 mt  543 2704 L
+ 543 2704 mt  538 2694 L
+ 538 2694 mt  525 2667 L
+ 525 2667 mt  513 2639 L
+ 513 2639 mt  508 2624 L
+ 508 2624 mt  503 2612 L
+ 503 2612 mt  494 2584 L
+ 494 2584 mt  486 2557 L
+ 486 2557 mt  480 2529 L
+ 480 2529 mt  474 2502 L
+ 474 2502 mt  473 2494 L
+ 473 2494 mt  470 2474 L
+ 470 2474 mt  467 2446 L
+ 467 2446 mt  464 2419 L
+ 464 2419 mt  463 2391 L
+ 463 2391 mt  462 2364 L
+ 462 2364 mt  462 2336 L
+ 462 2336 mt  463 2309 L
+ 463 2309 mt  465 2281 L
+ 465 2281 mt  468 2254 L
+ 468 2254 mt  471 2226 L
+ 471 2226 mt  473 2215 L
+ 473 2215 mt  476 2199 L
+ 476 2199 mt  480 2171 L
+ 480 2171 mt  486 2144 L
+ 486 2144 mt  492 2116 L
+ 492 2116 mt  498 2089 L
+ 498 2089 mt  505 2061 L
+ 505 2061 mt  508 2047 L
+ 508 2047 mt  511 2034 L
+ 511 2034 mt  518 2006 L
+ 518 2006 mt  524 1979 L
+ 524 1979 mt  529 1951 L
+ 529 1951 mt  535 1924 L
+ 535 1924 mt  540 1896 L
+ 540 1896 mt  543 1878 L
+ 543 1878 mt  544 1869 L
+ 544 1869 mt  548 1841 L
+ 548 1841 mt  552 1814 L
+ 552 1814 mt  556 1786 L
+ 556 1786 mt  560 1759 L
+ 560 1759 mt  563 1731 L
+ 563 1731 mt  566 1704 L
+ 566 1704 mt  570 1676 L
+ 570 1676 mt  573 1649 L
+ 573 1649 mt  576 1621 L
+ 576 1621 mt  578 1603 L
+ 578 1603 mt  579 1594 L
+ 579 1594 mt  582 1566 L
+ 582 1566 mt  584 1539 L
+ 584 1539 mt  587 1511 L
+ 587 1511 mt  589 1484 L
+ 589 1484 mt  591 1456 L
+ 591 1456 mt  593 1428 L
+ 593 1428 mt  595 1401 L
+ 595 1401 mt  596 1373 L
+ 596 1373 mt  598 1346 L
+ 598 1346 mt  600 1318 L
+ 600 1318 mt  602 1291 L
+ 602 1291 mt  605 1263 L
+ 605 1263 mt  608 1236 L
+ 608 1236 mt  612 1208 L
+ 612 1208 mt  613 1202 L
+ 613 1202 mt  616 1181 L
+ 616 1181 mt  620 1153 L
+ 620 1153 mt  626 1126 L
+ 626 1126 mt  631 1098 L
+ 631 1098 mt  638 1071 L
+ 638 1071 mt  644 1043 L
+ 644 1043 mt  647 1032 L
+ 647 1032 mt  652 1016 L
+ 652 1016 mt  659  988 L
+ 659  988 mt  667  961 L
+ 667  961 mt  676  933 L
+ 676  933 mt  682  916 L
+ 682  916 mt  686  906 L
+ 686  906 mt  696  878 L
+ 696  878 mt  707  851 L
+ 707  851 mt  717  828 L
+ 717  828 mt  719  823 L
+ 719  823 mt  733  796 L
+ 733  796 mt  747  768 L
+ 747  768 mt  752  759 L
+ 752  759 mt  763  741 L
+ 763  741 mt  779  713 L
+ 779  713 mt  787  702 L
+ 787  702 mt  797  686 L
+ 797  686 mt  817  658 L
+ 817  658 mt  822  651 L
+ 822  651 mt  837  631 L
+ 837  631 mt  857  604 L
+ 857  604 mt  858  603 L
+ 858  603 mt  879  576 L
+ 879  576 mt  892  561 L
+ 892  561 mt  902  548 L
+ 902  548 mt  926  521 L
+ 926  521 mt  926  520 L
+ 926  520 mt  951  493 L
+ 951  493 mt  961  483 L
+ 961  483 mt  979  466 L
+ 979  466 mt  996  450 L
+ 996  450 mt 1010  438 L
+1010  438 mt 1031  421 L
+1031  421 mt 1045  411 L
+1045  411 mt 1066  396 L
+1066  396 mt 1085  383 L
+1085  383 mt 1101  373 L
+1101  373 mt 1132  355 L
+1132  355 mt 1136  354 L
+1136  354 mt 1170  336 L
+1170  336 mt 1189  328 L
+1189  328 mt 1205  321 L
+1205  321 mt 1240  308 L
+1240  308 mt 1265  300 L
+1265  300 mt 1275  297 L
+1275  297 mt 1310  288 L
+1310  288 mt 1345  280 L
+1345  280 mt 1380  274 L
+1380  274 mt 1387  273 L
+1387  273 mt 1415  269 L
+1415  269 mt 1449  264 L
+1449  264 mt 1484  259 L
+1484  259 mt 1519  254 L
+1519  254 mt 1554  250 L
+1554  250 mt 1582  245 L
+1582  245 mt 1589  244 L
+1589  244 mt 1624  239 L
+1624  239 mt 1659  233 L
+1659  233 mt 1694  228 L
+1694  228 mt 1728  222 L
+1728  222 mt 1756  218 L
+1756  218 mt 1763  217 L
+1763  217 mt 1798  212 L
+1798  212 mt 1833  207 L
+1833  207 mt 1868  203 L
+1868  203 mt 1903  199 L
+1903  199 mt 1938  196 L
+1938  196 mt 1972  194 L
+1972  194 mt 2007  192 L
+2007  192 mt 2028  190 L
+2028  190 mt 2042  190 L
+2042  190 mt 2077  188 L
+2077  188 mt 2112  186 L
+2112  186 mt 2147  184 L
+2147  184 mt 2182  181 L
+2182  181 mt 2217  179 L
+2217  179 mt 2251  176 L
+2251  176 mt 2286  173 L
+2286  173 mt 2321  170 L
+2321  170 mt 2356  167 L
+2356  167 mt 2391  164 L
+2391  164 mt 2405  163 L
+2405  163 mt 2426  161 L
+2426  161 mt 2461  158 L
+2461  158 mt 2496  155 L
+2496  155 mt 2530  152 L
+2530  152 mt 2565  148 L
+2565  148 mt 2600  145 L
+2600  145 mt 2635  142 L
+2635  142 mt 2670  138 L
+2670  138 mt 2698  135 L
+2698  135 mt 2705  135 L
+2705  135 mt 2740  131 L
+2740  131 mt 2774  128 L
+2774  128 mt 2809  125 L
+2809  125 mt 2844  121 L
+2844  121 mt 2879  118 L
+2879  118 mt 2914  115 L
+2914  115 mt 2949  112 L
+2949  112 mt 2984  109 L
+2984  109 mt 2999  108 L
+2999  108 mt 3019  106 L
+3019  106 mt 3053  103 L
+3053  103 mt 3088  100 L
+3088  100 mt 3123   97 L
+3123   97 mt 3158   94 L
+3158   94 mt 3193   91 L
+3193   91 mt 3228   87 L
+3228   87 mt 3263   83 L
+3263   83 mt 3286   80 L
+3286   80 mt 3298   79 L
+3298   79 mt 3332   75 L
+3332   75 mt 3367   70 L
+3367   70 mt 3402   66 L
+3402   66 mt 3437   61 L
+3437   61 mt 3472   56 L
+3472   56 mt 3498   53 L
+3498   53 mt 3507   52 L
+3507   52 mt 3542   47 L
+3542   47 mt 3577   42 L
+3577   42 mt 3611   36 L
+3611   36 mt 3646   31 L
+3646   31 mt 3681   26 L
+3681   26 mt 3686   25 L
+3686   25 mt 3716   21 L
+3716   21 mt 3751   16 L
+3751   16 mt 3786   11 L
+3786   11 mt 3821    6 L
+3821    6 mt 3855    1 L
+3855    1 mt 3882   -1 L
+3882   -1 mt 3890   -2 L
+3890   -2 mt 3925   -7 L
+3925   -7 mt 3960  -11 L
+3960  -11 mt 3995  -15 L
+3995  -15 mt 4030  -19 L
+4030  -19 mt 4065  -23 L
+4065  -23 mt 4100  -27 L
+4100  -27 mt 4119  -29 L
+4119  -29 mt 4134  -30 L
+4134  -30 mt 4169  -34 L
+4169  -34 mt 4204  -37 L
+4204  -37 mt 4239  -40 L
+4239  -40 mt 4274  -42 L
+4274  -42 mt 4309  -44 L
+4309  -44 mt 4344  -46 L
+4344  -46 mt 4379  -47 L
+4379  -47 mt 4413  -48 L
+4413  -48 mt 4448  -48 L
+4448  -48 mt 4483  -48 L
+4483  -48 mt 4518  -47 L
+4518  -47 mt 4553  -46 L
+4553  -46 mt 4588  -44 L
+4588  -44 mt 4623  -42 L
+4623  -42 mt 4657  -40 L
+4657  -40 mt 4692  -37 L
+4692  -37 mt 4727  -34 L
+4727  -34 mt 4762  -30 L
+4762  -30 mt 4776  -29 L
+4776  -29 mt 4797  -26 L
+4797  -26 mt 4832  -22 L
+4832  -22 mt 4867  -16 L
+4867  -16 mt 4902  -10 L
+4902  -10 mt 4936   -4 L
+4936   -4 mt 4949   -1 L
+4949   -1 mt 4971    2 L
+4971    2 mt 5006   10 L
+5006   10 mt 5041   18 L
+5041   18 mt 5068   25 L
+5068   25 mt 5076   27 L
+5076   27 mt 5111   37 L
+5111   37 mt 5146   47 L
+5146   47 mt 5164   53 L
+5164   53 mt 5181   58 L
+5181   58 mt 5215   70 L
+5215   70 mt 5243   80 L
+5243   80 mt 5250   83 L
+5250   83 mt 5285   97 L
+5285   97 mt 5309  108 L
+5309  108 mt 5320  113 L
+5320  113 mt 5355  129 L
+5355  129 mt 5367  135 L
+5367  135 mt 5390  147 L
+5390  147 mt 5417  163 L
+5417  163 mt 5425  167 L
+5425  167 mt 5459  188 L
+5459  188 mt 5463  190 L
+5463  190 mt 5494  210 L
+5494  210 mt 5506  218 L
+5506  218 mt 5529  234 L
+5529  234 mt 5545  245 L
+5545  245 mt 5564  259 L
+5564  259 mt 5582  273 L
+5582  273 mt 5599  286 L
+5599  286 mt 5617  300 L
+5617  300 mt 5634  314 L
+5634  314 mt 5651  328 L
+5651  328 mt 5669  343 L
+5669  343 mt 5683  355 L
+5683  355 mt 5704  373 L
+5704  373 mt 5714  383 L
+5714  383 mt 5738  405 L
+5738  405 mt 5745  411 L
+5745  411 mt 5773  437 L
+5773  437 mt 5774  438 L
+5774  438 mt 5803  466 L
+5803  466 mt 5808  470 L
+5808  470 mt 5832  493 L
+5832  493 mt 5843  504 L
+5843  504 mt 5860  521 L
+5860  521 mt 5878  539 L
+5878  539 mt 5887  548 L
+5887  548 mt 5913  574 L
+5913  574 mt 5915  576 L
+5915  576 mt 5942  603 L
+5942  603 mt 5948  609 L
+5948  609 mt 5968  631 L
+5968  631 mt 5983  645 L
+5983  645 mt 5995  658 L
+5995  658 mt 6017  682 L
+6017  682 mt 6021  686 L
+6021  686 mt 6047  713 L
+6047  713 mt 6052  718 L
+6052  718 mt 6074  741 L
+6074  741 mt 6087  755 L
+6087  755 mt 6100  768 L
+6100  768 mt 6122  792 L
+6122  792 mt 6126  796 L
+6126  796 mt 6152  823 L
+6152  823 mt 6157  829 L
+6157  829 mt 6178  851 L
+6178  851 mt 6192  866 L
+6192  866 mt 6203  878 L
+6203  878 mt 6227  903 L
+6227  903 mt 6229  906 L
+6229  906 mt 6255  933 L
+6255  933 mt 6261  940 L
+6261  940 mt 6281  961 L
+6281  961 mt 6296  977 L
+6296  977 mt 6307  988 L
+6307  988 mt 6331 1014 L
+6331 1014 mt 6333 1016 L
+6333 1016 mt 6358 1043 L
+6358 1043 mt 6366 1052 L
+6366 1052 mt 6384 1071 L
+6384 1071 mt 6401 1089 L
+6401 1089 mt 6409 1098 L
+6409 1098 mt 6434 1126 L
+6434 1126 mt 6436 1128 L
+6436 1128 mt 6459 1153 L
+6459 1153 mt 6471 1166 L
+6471 1166 mt 6484 1181 L
+6484 1181 mt 6506 1206 L
+6506 1206 mt 6508 1208 L
+6508 1208 mt 6531 1236 L
+6531 1236 mt 6540 1247 L
+6540 1247 mt 6554 1263 L
+6554 1263 mt 6575 1290 L
+6575 1290 mt 6576 1291 L
+6576 1291 mt 6597 1318 L
+6597 1318 mt 6610 1335 L
+6610 1335 mt 6618 1346 L
+6618 1346 mt 6638 1373 L
+6638 1373 mt 6645 1383 L
+6645 1383 mt 6658 1401 L
+6658 1401 mt 6676 1428 L
+6676 1428 mt 6680 1435 L
+6680 1435 mt 6694 1456 L
+6694 1456 mt 6710 1484 L
+6710 1484 mt 6715 1491 L
+6715 1491 mt 6726 1511 L
+6726 1511 mt 6741 1539 L
+6741 1539 mt 6750 1555 L
+6750 1555 mt 6755 1566 L
+6755 1566 mt 6768 1594 L
+6768 1594 mt 6781 1621 L
+6781 1621 mt 6785 1631 L
+6785 1631 mt 6792 1649 L
+6792 1649 mt 6803 1676 L
+6803 1676 mt 6812 1704 L
+6812 1704 mt 6819 1726 L
+6819 1726 mt 6821 1731 L
+6821 1731 mt 6829 1759 L
+6829 1759 mt 6837 1786 L
+6837 1786 mt 6844 1814 L
+6844 1814 mt 6849 1841 L
+6849 1841 mt 6854 1868 L
+6819 2024 mt 6820 2034 L
+6820 2034 mt 6820 2061 L
+6820 2061 mt 6819 2074 L
+6819 2074 mt 6819 2089 L
+6819 2089 mt 6818 2116 L
+6818 2116 mt 6815 2144 L
+6815 2144 mt 6812 2171 L
+6812 2171 mt 6809 2199 L
+6809 2199 mt 6804 2226 L
+6804 2226 mt 6799 2254 L
+6799 2254 mt 6794 2281 L
+6794 2281 mt 6787 2309 L
+6787 2309 mt 6785 2319 L
+6785 2319 mt 6780 2336 L
+6780 2336 mt 6772 2364 L
+6772 2364 mt 6764 2391 L
+6764 2391 mt 6755 2419 L
+6755 2419 mt 6750 2435 L
+6750 2435 mt 6746 2446 L
+6746 2446 mt 6736 2474 L
+6736 2474 mt 6725 2502 L
+6725 2502 mt 6715 2526 L
+6715 2526 mt 6714 2529 L
+6714 2529 mt 6702 2557 L
+6702 2557 mt 6689 2584 L
+6689 2584 mt 6680 2604 L
+6680 2604 mt 6676 2612 L
+6676 2612 mt 6662 2639 L
+6662 2639 mt 6648 2667 L
+6648 2667 mt 6645 2672 L
+6645 2672 mt 6633 2694 L
+6633 2694 mt 6617 2722 L
+6617 2722 mt 6610 2733 L
+6610 2733 mt 6601 2749 L
+6601 2749 mt 6584 2777 L
+6584 2777 mt 6575 2791 L
+6575 2791 mt 6567 2804 L
+6567 2804 mt 6550 2832 L
+6550 2832 mt 6540 2847 L
+6540 2847 mt 6533 2859 L
+6533 2859 mt 6516 2887 L
+6516 2887 mt 6506 2905 L
+6506 2905 mt 6500 2914 L
+6500 2914 mt 6484 2942 L
+6484 2942 mt 6471 2969 L
+6471 2969 mt 6471 2969 L
+6471 2969 mt 6458 2997 L
+6458 2997 mt 6448 3024 L
+6448 3024 mt 6440 3052 L
+6440 3052 mt 6436 3070 L
+6436 3070 mt 6434 3079 L
+6434 3079 mt 6429 3107 L
+6429 3107 mt 6425 3134 L
+6425 3134 mt 6423 3162 L
+6423 3162 mt 6420 3189 L
+6420 3189 mt 6418 3217 L
+6418 3217 mt 6415 3244 L
+6415 3244 mt 6413 3272 L
+6413 3272 mt 6410 3299 L
+6410 3299 mt 6407 3327 L
+6407 3327 mt 6403 3354 L
+6403 3354 mt 6401 3369 L
+6401 3369 mt 6399 3382 L
+6399 3382 mt 6393 3409 L
+6393 3409 mt 6387 3437 L
+6387 3437 mt 6379 3464 L
+6379 3464 mt 6368 3492 L
+6368 3492 mt 6366 3497 L
+6366 3497 mt 6355 3519 L
+6355 3519 mt 6339 3547 L
+6339 3547 mt 6331 3559 L
+6331 3559 mt 6320 3575 L
+6320 3575 mt 6297 3602 L
+6297 3602 mt 6296 3602 L
+6296 3602 mt 6264 3630 L
+6264 3630 mt 6261 3631 L
+6261 3631 mt 6227 3642 L
+6227 3642 mt 6192 3630 L
+6192 3630 mt 6192 3630 L
+6192 3630 mt 6163 3602 L
+6163 3602 mt 6157 3596 L
+6157 3596 mt 6138 3575 L
+6138 3575 mt 6122 3557 L
+6122 3557 mt 6112 3547 L
+6112 3547 mt 6087 3525 L
+6087 3525 mt 6080 3519 L
+6080 3519 mt 6052 3500 L
+6052 3500 mt 6035 3492 L
+6035 3492 mt 6017 3483 L
+6017 3483 mt 5983 3469 L
+5983 3469 mt 5970 3464 L
+5970 3464 mt 5948 3455 L
+5948 3455 mt 5913 3439 L
+5913 3439 mt 5909 3437 L
+5909 3437 mt 5878 3419 L
+5878 3419 mt 5862 3409 L
+5862 3409 mt 5843 3395 L
+5843 3395 mt 5829 3382 L
+5829 3382 mt 5808 3355 L
+5808 3355 mt 5808 3354 L
+5808 3354 mt 5794 3327 L
+5794 3327 mt 5783 3299 L
+5783 3299 mt 5773 3279 L
+5773 3279 mt 5770 3272 L
+5770 3272 mt 5757 3244 L
+5757 3244 mt 5744 3217 L
+5744 3217 mt 5738 3203 L
+5738 3203 mt 5733 3189 L
+5733 3189 mt 5722 3162 L
+5722 3162 mt 5711 3134 L
+5711 3134 mt 5704 3118 L
+5704 3118 mt 5699 3107 L
+5699 3107 mt 5684 3079 L
+5684 3079 mt 5669 3055 L
+5669 3055 mt 5667 3052 L
+5667 3052 mt 5645 3024 L
+5645 3024 mt 5634 3012 L
+5634 3012 mt 5617 2997 L
+5617 2997 mt 5599 2982 L
+5599 2982 mt 5582 2969 L
+5582 2969 mt 5564 2957 L
+5564 2957 mt 5543 2942 L
+5543 2942 mt 5529 2930 L
+5529 2930 mt 5512 2914 L
+5512 2914 mt 5494 2896 L
+5494 2896 mt 5485 2887 L
+5485 2887 mt 5459 2863 L
+5459 2863 mt 5455 2859 L
+5455 2859 mt 5425 2833 L
+5425 2833 mt 5423 2832 L
+5423 2832 mt 5392 2804 L
+5392 2804 mt 5390 2802 L
+5390 2802 mt 5366 2777 L
+5366 2777 mt 5355 2759 L
+5355 2759 mt 5349 2749 L
+5349 2749 mt 5340 2722 L
+5340 2722 mt 5338 2694 L
+5338 2694 mt 5340 2667 L
+5340 2667 mt 5345 2639 L
+5345 2639 mt 5351 2612 L
+5351 2612 mt 5355 2594 L
+5355 2594 mt 5357 2584 L
+5357 2584 mt 5358 2557 L
+5358 2557 mt 5355 2529 L
+5355 2529 mt 5355 2529 L
+5355 2529 mt 5347 2502 L
+5347 2502 mt 5334 2474 L
+5334 2474 mt 5320 2450 L
+5320 2450 mt 5317 2446 L
+5317 2446 mt 5294 2419 L
+5294 2419 mt 5285 2410 L
+5285 2410 mt 5264 2391 L
+5264 2391 mt 5250 2380 L
+5250 2380 mt 5229 2364 L
+5229 2364 mt 5215 2355 L
+5215 2355 mt 5189 2336 L
+5189 2336 mt 5181 2331 L
+5181 2331 mt 5153 2309 L
+5153 2309 mt 5146 2302 L
+5146 2302 mt 5123 2281 L
+5123 2281 mt 5111 2271 L
+5111 2271 mt 5093 2254 L
+5093 2254 mt 5076 2240 L
+5076 2240 mt 5059 2226 L
+5059 2226 mt 5041 2212 L
+5041 2212 mt 5024 2199 L
+5024 2199 mt 5006 2185 L
+5006 2185 mt 4987 2171 L
+4987 2171 mt 4971 2160 L
+4971 2160 mt 4944 2144 L
+4944 2144 mt 4936 2139 L
+4936 2139 mt 4902 2119 L
+4902 2119 mt 4897 2116 L
+4897 2116 mt 4867 2094 L
+4867 2094 mt 4858 2089 L
+4858 2089 mt 4832 2067 L
+4832 2067 mt 4825 2061 L
+4825 2061 mt 4797 2038 L
+4797 2038 mt 4793 2034 L
+4793 2034 mt 4765 2006 L
+4765 2006 mt 4762 2004 L
+4762 2004 mt 4742 1979 L
+4742 1979 mt 4727 1955 L
+4727 1955 mt 4725 1951 L
+4725 1951 mt 4717 1924 L
+4717 1924 mt 4709 1896 L
+4709 1896 mt 4702 1869 L
+4702 1869 mt 4693 1841 L
+4693 1841 mt 4692 1838 L
+4692 1838 mt 4682 1814 L
+4682 1814 mt 4668 1786 L
+4668 1786 mt 4657 1769 L
+4657 1769 mt 4646 1759 L
+4646 1759 mt 4623 1742 L
+4623 1742 mt 4595 1731 L
+4595 1731 mt 4588 1729 L
+4588 1729 mt 4553 1721 L
+4553 1721 mt 4518 1715 L
+4518 1715 mt 4483 1708 L
+4483 1708 mt 4464 1704 L
+4464 1704 mt 4448 1700 L
+4448 1700 mt 4413 1687 L
+4413 1687 mt 4392 1676 L
+4392 1676 mt 4379 1667 L
+4379 1667 mt 4364 1649 L
+4364 1649 mt 4347 1621 L
+4347 1621 mt 4344 1614 L
+4344 1614 mt 4334 1594 L
+4334 1594 mt 4320 1566 L
+4320 1566 mt 4309 1544 L
+4309 1544 mt 4306 1539 L
+4306 1539 mt 4289 1511 L
+4289 1511 mt 4274 1487 L
+4274 1487 mt 4271 1484 L
+4271 1484 mt 4249 1456 L
+4249 1456 mt 4239 1447 L
+4239 1447 mt 4214 1428 L
+4214 1428 mt 4204 1423 L
+4204 1423 mt 4169 1407 L
+4169 1407 mt 4147 1401 L
+4147 1401 mt 4134 1398 L
+4134 1398 mt 4100 1395 L
+4100 1395 mt 4065 1392 L
+4065 1392 mt 4030 1390 L
+4030 1390 mt 3995 1386 L
+3995 1386 mt 3960 1378 L
+3960 1378 mt 3945 1373 L
+3945 1373 mt 3925 1367 L
+3925 1367 mt 3890 1352 L
+3890 1352 mt 3880 1346 L
+3880 1346 mt 3855 1332 L
+3855 1332 mt 3836 1318 L
+3836 1318 mt 3821 1307 L
+3821 1307 mt 3801 1291 L
+3801 1291 mt 3786 1278 L
+3786 1278 mt 3769 1263 L
+3769 1263 mt 3751 1250 L
+3751 1250 mt 3730 1236 L
+3730 1236 mt 3716 1228 L
+3716 1228 mt 3681 1211 L
+3681 1211 mt 3676 1208 L
+3676 1208 mt 3646 1198 L
+3646 1198 mt 3611 1187 L
+3611 1187 mt 3592 1181 L
+3592 1181 mt 3577 1176 L
+3577 1176 mt 3542 1167 L
+3542 1167 mt 3507 1157 L
+3507 1157 mt 3494 1153 L
+3494 1153 mt 3472 1147 L
+3472 1147 mt 3437 1136 L
+3437 1136 mt 3407 1126 L
+3407 1126 mt 3402 1124 L
+3402 1124 mt 3367 1112 L
+3367 1112 mt 3332 1100 L
+3332 1100 mt 3327 1098 L
+3327 1098 mt 3298 1088 L
+3298 1088 mt 3263 1076 L
+3263 1076 mt 3248 1071 L
+3248 1071 mt 3228 1063 L
+3228 1063 mt 3193 1051 L
+3193 1051 mt 3171 1043 L
+3171 1043 mt 3158 1039 L
+3158 1039 mt 3123 1027 L
+3123 1027 mt 3088 1017 L
+3088 1017 mt 3084 1016 L
+3084 1016 mt 3053 1007 L
+3053 1007 mt 3019 1000 L
+3019 1000 mt 2984  994 L
+2984  994 mt 2949  989 L
+2949  989 mt 2942  988 L
+2942  988 mt 2914  985 L
+2914  985 mt 2879  984 L
+2879  984 mt 2844  984 L
+2844  984 mt 2809  984 L
+2809  984 mt 2774  984 L
+2774  984 mt 2740  985 L
+2740  985 mt 2705  984 L
+2705  984 mt 2670  983 L
+2670  983 mt 2635  980 L
+2635  980 mt 2600  976 L
+2600  976 mt 2565  971 L
+2565  971 mt 2530  967 L
+2530  967 mt 2496  964 L
+2496  964 mt 2467  961 L
+2467  961 mt 2461  960 L
+2461  960 mt 2426  958 L
+2426  958 mt 2391  956 L
+2391  956 mt 2356  958 L
+2356  958 mt 2321  960 L
+2321  960 mt 2316  961 L
+2316  961 mt 2286  964 L
+2286  964 mt 2251  969 L
+2251  969 mt 2217  974 L
+2217  974 mt 2182  979 L
+2182  979 mt 2147  984 L
+2147  984 mt 2120  988 L
+2120  988 mt 2112  989 L
+2112  989 mt 2077  995 L
+2077  995 mt 2042 1002 L
+2042 1002 mt 2007 1009 L
+2007 1009 mt 1977 1016 L
+1977 1016 mt 1972 1017 L
+1972 1017 mt 1938 1026 L
+1938 1026 mt 1903 1036 L
+1903 1036 mt 1883 1043 L
+1883 1043 mt 1868 1049 L
+1868 1049 mt 1833 1063 L
+1833 1063 mt 1819 1071 L
+1819 1071 mt 1798 1081 L
+1798 1081 mt 1771 1098 L
+1771 1098 mt 1763 1103 L
+1763 1103 mt 1731 1126 L
+1731 1126 mt 1728 1128 L
+1728 1128 mt 1696 1153 L
+1696 1153 mt 1694 1156 L
+1694 1156 mt 1664 1181 L
+1664 1181 mt 1659 1186 L
+1659 1186 mt 1636 1208 L
+1636 1208 mt 1624 1223 L
+1624 1223 mt 1613 1236 L
+1613 1236 mt 1598 1263 L
+1598 1263 mt 1591 1291 L
+1591 1291 mt 1591 1318 L
+1591 1318 mt 1596 1346 L
+1596 1346 mt 1602 1373 L
+1602 1373 mt 1608 1401 L
+1608 1401 mt 1610 1428 L
+1610 1428 mt 1607 1456 L
+1607 1456 mt 1596 1484 L
+1596 1484 mt 1589 1494 L
+1589 1494 mt 1577 1511 L
+1577 1511 mt 1554 1536 L
+1554 1536 mt 1551 1539 L
+1551 1539 mt 1521 1566 L
+1521 1566 mt 1519 1569 L
+1519 1569 mt 1496 1594 L
+1496 1594 mt 1484 1621 L
+1484 1621 mt 1484 1621 L
+1484 1621 mt 1481 1649 L
+1481 1649 mt 1484 1676 L
+1484 1676 mt 1484 1681 L
+1484 1681 mt 1486 1704 L
+1486 1704 mt 1490 1731 L
+1490 1731 mt 1494 1759 L
+1494 1759 mt 1500 1786 L
+1500 1786 mt 1505 1814 L
+1505 1814 mt 1507 1841 L
+1507 1841 mt 1507 1869 L
+1507 1869 mt 1506 1896 L
+1506 1896 mt 1507 1924 L
+1507 1924 mt 1511 1951 L
+1511 1951 mt 1517 1979 L
+1517 1979 mt 1519 1991 L
+1519 1991 mt 1522 2006 L
+1522 2006 mt 1528 2034 L
+1528 2034 mt 1533 2061 L
+1533 2061 mt 1538 2089 L
+1538 2089 mt 1542 2116 L
+1542 2116 mt 1547 2144 L
+1547 2144 mt 1552 2171 L
+1552 2171 mt 1554 2184 L
+1554 2184 mt 1557 2199 L
+1557 2199 mt 1567 2226 L
+1567 2226 mt 1589 2254 L
+1589 2254 mt 1589 2254 L
+1589 2254 mt 1624 2281 L
+1624 2281 mt 1624 2281 L
+1624 2281 mt 1659 2302 L
+1659 2302 mt 1669 2309 L
+1669 2309 mt 1694 2323 L
+1694 2323 mt 1717 2336 L
+1717 2336 mt 1728 2343 L
+1728 2343 mt 1763 2364 L
+1763 2364 mt 1763 2364 L
+1763 2364 mt 1798 2387 L
+1798 2387 mt 1804 2391 L
+1804 2391 mt 1833 2418 L
+1833 2418 mt 1834 2419 L
+1834 2419 mt 1853 2446 L
+1853 2446 mt 1866 2474 L
+1866 2474 mt 1868 2483 L
+1868 2483 mt 1874 2502 L
+1874 2502 mt 1883 2529 L
+1883 2529 mt 1897 2557 L
+1897 2557 mt 1903 2563 L
+1903 2563 mt 1928 2584 L
+1928 2584 mt 1938 2589 L
+1938 2589 mt 1972 2606 L
+1972 2606 mt 1983 2612 L
+1983 2612 mt 2007 2621 L
+2007 2621 mt 2042 2639 L
+2042 2639 mt 2042 2639 L
+2042 2639 mt 2077 2665 L
+2077 2665 mt 2079 2667 L
+2079 2667 mt 2106 2694 L
+2106 2694 mt 2112 2700 L
+2112 2700 mt 2133 2722 L
+2133 2722 mt 2147 2734 L
+2147 2734 mt 2162 2749 L
+2162 2749 mt 2182 2768 L
+2182 2768 mt 2191 2777 L
+2191 2777 mt 2217 2803 L
+2217 2803 mt 2218 2804 L
+2218 2804 mt 2242 2832 L
+2242 2832 mt 2251 2844 L
+2251 2844 mt 2263 2859 L
+2263 2859 mt 2279 2887 L
+2279 2887 mt 2286 2907 L
+2286 2907 mt 2289 2914 L
+2289 2914 mt 2287 2942 L
+2287 2942 mt 2286 2943 L
+2286 2943 mt 2270 2969 L
+2270 2969 mt 2251 2993 L
+2251 2993 mt 2247 2997 L
+2247 2997 mt 2223 3024 L
+2223 3024 mt 2217 3032 L
+2217 3032 mt 2199 3052 L
+2199 3052 mt 2182 3078 L
+2182 3078 mt 2181 3079 L
+2181 3079 mt 2175 3107 L
+2175 3107 mt 2181 3134 L
+2181 3134 mt 2182 3136 L
+2182 3136 mt 2198 3162 L
+2198 3162 mt 2217 3185 L
+2217 3185 mt 2220 3189 L
+2220 3189 mt 2246 3217 L
+2246 3217 mt 2251 3223 L
+2251 3223 mt 2273 3244 L
+2273 3244 mt 2286 3256 L
+2286 3256 mt 2304 3272 L
+2304 3272 mt 2321 3287 L
+2321 3287 mt 2336 3299 L
+2336 3299 mt 2356 3316 L
+2356 3316 mt 2369 3327 L
+2369 3327 mt 2391 3346 L
+2391 3346 mt 2401 3354 L
+2401 3354 mt 2426 3375 L
+2426 3375 mt 2435 3382 L
+2435 3382 mt 2461 3402 L
+2461 3402 mt 2470 3409 L
+2470 3409 mt 2496 3430 L
+2496 3430 mt 2504 3437 L
+2504 3437 mt 2530 3463 L
+2530 3463 mt 2532 3464 L
+2532 3464 mt 2554 3492 L
+2554 3492 mt 2565 3512 L
+2565 3512 mt 2569 3519 L
+2569 3519 mt 2580 3547 L
+2580 3547 mt 2591 3575 L
+2591 3575 mt 2600 3595 L
+2600 3595 mt 2604 3602 L
+2604 3602 mt 2617 3630 L
+2617 3630 mt 2623 3657 L
+2623 3657 mt 2616 3685 L
+2616 3685 mt 2600 3699 L
+2600 3699 mt 2584 3712 L
+2584 3712 mt 2565 3722 L
+2565 3722 mt 2530 3738 L
+2530 3738 mt 2528 3740 L
+2528 3740 mt 2496 3753 L
+2496 3753 mt 2463 3767 L
+2463 3767 mt 2461 3768 L
+2461 3768 mt 2426 3783 L
+2426 3783 mt 2400 3795 L
+2400 3795 mt 2391 3799 L
+2391 3799 mt 2356 3816 L
+2356 3816 mt 2344 3822 L
+2344 3822 mt 2321 3835 L
+2321 3835 mt 2294 3850 L
+2294 3850 mt 2286 3854 L
+2286 3854 mt 2251 3874 L
+2251 3874 mt 2246 3877 L
+2246 3877 mt 2217 3894 L
+2217 3894 mt 2195 3905 L
+2195 3905 mt 2182 3913 L
+2182 3913 mt 2150 3932 L
+2150 3932 mt 2147 3935 L
+2147 3935 mt 2119 3960 L
+2119 3960 mt 2112 3970 L
+2112 3970 mt 2101 3987 L
+2101 3987 mt 2093 4015 L
+2093 4015 mt 2092 4042 L
+2092 4042 mt 2098 4070 L
+2098 4070 mt 2109 4097 L
+2109 4097 mt 2112 4102 L
+2112 4102 mt 2127 4125 L
+2127 4125 mt 2147 4150 L
+2147 4150 mt 2149 4152 L
+2149 4152 mt 2175 4180 L
+2175 4180 mt 2182 4187 L
+2182 4187 mt 2204 4207 L
+2204 4207 mt 2217 4221 L
+2217 4221 mt 2231 4235 L
+2231 4235 mt 2251 4258 L
+2251 4258 mt 2255 4262 L
+2255 4262 mt 2278 4290 L
+2278 4290 mt 2286 4300 L
+2286 4300 mt 2301 4317 L
+2301 4317 mt 2321 4338 L
+2321 4338 mt 2327 4345 L
+2327 4345 mt 2356 4369 L
+2356 4369 mt 2360 4372 L
+2360 4372 mt 2391 4394 L
+2391 4394 mt 2400 4400 L
+2400 4400 mt 2426 4414 L
+2426 4414 mt 2451 4427 L
+2451 4427 mt 2461 4432 L
+2461 4432 mt 2496 4450 L
+2496 4450 mt 2505 4455 L
+2505 4455 mt 2530 4467 L
+2530 4467 mt 2560 4482 L
+2560 4482 mt 2565 4485 L
+2565 4485 mt 2600 4502 L
+2600 4502 mt 2618 4510 L
+2618 4510 mt 2635 4517 L
+2635 4517 mt 2670 4530 L
+2670 4530 mt 2694 4537 L
+2694 4537 mt 2705 4541 L
+2705 4541 mt 2740 4547 L
+2740 4547 mt 2774 4551 L
+2774 4551 mt 2809 4554 L
+2809 4554 mt 2844 4558 L
+2844 4558 mt 2875 4565 L
+2875 4565 mt 2879 4567 L
+2879 4567 mt 2913 4592 L
+2913 4592 mt 2900 4620 L
+2900 4620 mt 2879 4635 L
+2879 4635 mt 2860 4648 L
+2860 4648 mt 2844 4654 L
+2844 4654 mt 2809 4664 L
+2809 4664 mt 2774 4672 L
+2774 4672 mt 2763 4675 L
+2763 4675 mt 2740 4681 L
+2740 4681 mt 2705 4691 L
+2705 4691 mt 2674 4703 L
+2674 4703 mt 2670 4704 L
+2670 4704 mt 2635 4715 L
+2635 4715 mt 2600 4727 L
+2600 4727 mt 2590 4730 L
+2590 4730 mt 2565 4737 L
+2565 4737 mt 2530 4747 L
+2530 4747 mt 2496 4756 L
+2496 4756 mt 2487 4758 L
+2487 4758 mt 2461 4763 L
+2461 4763 mt 2426 4770 L
+2426 4770 mt 2391 4776 L
+2391 4776 mt 2356 4781 L
+2356 4781 mt 2321 4785 L
+2321 4785 mt 2320 4785 L
+2320 4785 mt 2286 4788 L
+2286 4788 mt 2251 4790 L
+2251 4790 mt 2217 4790 L
+2217 4790 mt 2182 4790 L
+2182 4790 mt 2147 4789 L
+2147 4789 mt 2112 4786 L
+2112 4786 mt 2104 4785 L
+2104 4785 mt 2077 4782 L
+2077 4782 mt 2042 4777 L
+2042 4777 mt 2007 4771 L
+2007 4771 mt 1972 4764 L
+1972 4764 mt 1948 4758 L
+1948 4758 mt 1938 4755 L
+1938 4755 mt 1903 4745 L
+1903 4745 mt 1868 4733 L
+1868 4733 mt 1859 4730 L
+1859 4730 mt 1833 4720 L
+1833 4720 mt 1798 4704 L
+1798 4704 mt 1796 4703 L
+1796 4703 mt 1763 4685 L
+1763 4685 mt 1748 4675 L
+1748 4675 mt 1728 4662 L
+1728 4662 mt 1711 4648 L
+1711 4648 mt 1694 4630 L
+1694 4630 mt 1685 4620 L
+1685 4620 mt 1665 4592 L
+1665 4592 mt 1659 4580 L
+1659 4580 mt 1651 4565 L
+1651 4565 mt 1640 4537 L
+1640 4537 mt 1630 4510 L
+1630 4510 mt 1624 4487 L
+1624 4487 mt 1622 4482 L
+1622 4482 mt 1614 4455 L
+1614 4455 mt 1604 4427 L
+1604 4427 mt 1601 4400 L
+1601 4400 mt 1603 4372 L
+1603 4372 mt 1600 4345 L
+1600 4345 mt 1590 4317 L
+1590 4317 mt 1589 4315 L
+1589 4315 mt 1576 4290 L
+1576 4290 mt 1558 4262 L
+1558 4262 mt 1554 4257 L
+1554 4257 mt 1543 4235 L
+1543 4235 mt 1534 4207 L
+1534 4207 mt 1528 4180 L
+1528 4180 mt 1527 4152 L
+1527 4152 mt 1531 4125 L
+1531 4125 mt 1540 4097 L
+1540 4097 mt 1554 4070 L
+1554 4070 mt 1554 4070 L
+1554 4070 mt 1575 4042 L
+1575 4042 mt 1589 4027 L
+1589 4027 mt 1604 4015 L
+1604 4015 mt 1624 3998 L
+1624 3998 mt 1641 3987 L
+1641 3987 mt 1659 3976 L
+1659 3976 mt 1694 3961 L
+1694 3961 mt 1696 3960 L
+1696 3960 mt 1728 3947 L
+1728 3947 mt 1759 3932 L
+1759 3932 mt 1763 3930 L
+1763 3930 mt 1798 3910 L
+1798 3910 mt 1808 3905 L
+1808 3905 mt 1833 3887 L
+1833 3887 mt 1848 3877 L
+1848 3877 mt 1868 3857 L
+1868 3857 mt 1876 3850 L
+1876 3850 mt 1890 3822 L
+1890 3822 mt 1892 3795 L
+1892 3795 mt 1887 3767 L
+1887 3767 mt 1877 3740 L
+1877 3740 mt 1868 3723 L
+1868 3723 mt 1862 3712 L
+1862 3712 mt 1848 3685 L
+1848 3685 mt 1836 3657 L
+1836 3657 mt 1833 3648 L
+1833 3648 mt 1827 3630 L
+1827 3630 mt 1819 3602 L
+1819 3602 mt 1812 3575 L
+1812 3575 mt 1805 3547 L
+1805 3547 mt 1798 3521 L
+1798 3521 mt 1798 3519 L
+1798 3519 mt 1788 3492 L
+1788 3492 mt 1778 3464 L
+1778 3464 mt 1765 3437 L
+1765 3437 mt 1763 3433 L
+1763 3433 mt 1750 3409 L
+1750 3409 mt 1732 3382 L
+1732 3382 mt 1728 3376 L
+1728 3376 mt 1711 3354 L
+1711 3354 mt 1694 3334 L
+1694 3334 mt 1686 3327 L
+1686 3327 mt 1659 3302 L
+1659 3302 mt 1655 3299 L
+1655 3299 mt 1624 3278 L
+1624 3278 mt 1614 3272 L
+1614 3272 mt 1589 3259 L
+1589 3259 mt 1555 3244 L
+1555 3244 mt 1554 3244 L
+1554 3244 mt 1519 3234 L
+1519 3234 mt 1484 3224 L
+1484 3224 mt 1452 3217 L
+1452 3217 mt 1449 3216 L
+1449 3216 mt 1415 3210 L
+1415 3210 mt 1380 3203 L
+1380 3203 mt 1345 3194 L
+1345 3194 mt 1326 3189 L
+1326 3189 mt 1310 3185 L
+1310 3185 mt 1275 3175 L
+1275 3175 mt 1240 3165 L
+1240 3165 mt 1229 3162 L
+1229 3162 mt 1205 3155 L
+1205 3155 mt 1170 3142 L
+1170 3142 mt 1152 3134 L
+1152 3134 mt 1136 3128 L
+1136 3128 mt 1101 3112 L
+1101 3112 mt 1090 3107 L
+1090 3107 mt 1066 3095 L
+1066 3095 mt 1036 3079 L
+1036 3079 mt 1031 3076 L
+1031 3076 mt  996 3057 L
+ 996 3057 mt  986 3052 L
+ 986 3052 mt  961 3038 L
+ 961 3038 mt  936 3024 L
+ 936 3024 mt  926 3019 L
+ 926 3019 mt  892 2999 L
+ 892 2999 mt  887 2997 L
+ 887 2997 mt  857 2979 L
+ 857 2979 mt  842 2969 L
+ 842 2969 mt  822 2957 L
+ 822 2957 mt  800 2942 L
+ 800 2942 mt  787 2932 L
+ 787 2932 mt  764 2914 L
+ 764 2914 mt  752 2905 L
+ 752 2905 mt  731 2887 L
+ 731 2887 mt  717 2873 L
+ 717 2873 mt  703 2859 L
+ 703 2859 mt  682 2837 L
+ 682 2837 mt  677 2832 L
+ 677 2832 mt  655 2804 L
+ 655 2804 mt  647 2794 L
+ 647 2794 mt  635 2777 L
+ 635 2777 mt  617 2749 L
+ 617 2749 mt  613 2741 L
+ 613 2741 mt  601 2722 L
+ 601 2722 mt  587 2694 L
+ 587 2694 mt  578 2673 L
+ 578 2673 mt  575 2667 L
+ 575 2667 mt  563 2639 L
+ 563 2639 mt  553 2612 L
+ 553 2612 mt  545 2584 L
+ 545 2584 mt  543 2576 L
+ 543 2576 mt  537 2557 L
+ 537 2557 mt  531 2529 L
+ 531 2529 mt  527 2502 L
+ 527 2502 mt  523 2474 L
+ 523 2474 mt  520 2446 L
+ 520 2446 mt  519 2419 L
+ 519 2419 mt  518 2391 L
+ 518 2391 mt  518 2364 L
+ 518 2364 mt  519 2336 L
+ 519 2336 mt  521 2309 L
+ 521 2309 mt  524 2281 L
+ 524 2281 mt  528 2254 L
+ 528 2254 mt  533 2226 L
+ 533 2226 mt  538 2199 L
+ 538 2199 mt  543 2179 L
+ 543 2179 mt  545 2171 L
+ 545 2171 mt  551 2144 L
+ 551 2144 mt  559 2116 L
+ 559 2116 mt  566 2089 L
+ 566 2089 mt  574 2061 L
+ 574 2061 mt  578 2045 L
+ 578 2045 mt  581 2034 L
+ 581 2034 mt  588 2006 L
+ 588 2006 mt  594 1979 L
+ 594 1979 mt  600 1951 L
+ 600 1951 mt  605 1924 L
+ 605 1924 mt  610 1896 L
+ 610 1896 mt  613 1879 L
+ 613 1879 mt  614 1869 L
+ 614 1869 mt  618 1841 L
+ 618 1841 mt  621 1814 L
+ 621 1814 mt  623 1786 L
+ 623 1786 mt  626 1759 L
+ 626 1759 mt  628 1731 L
+ 628 1731 mt  631 1704 L
+ 631 1704 mt  634 1676 L
+ 634 1676 mt  637 1649 L
+ 637 1649 mt  639 1621 L
+ 639 1621 mt  642 1594 L
+ 642 1594 mt  644 1566 L
+ 644 1566 mt  646 1539 L
+ 646 1539 mt  647 1524 L
+ 647 1524 mt  648 1511 L
+ 648 1511 mt  650 1484 L
+ 650 1484 mt  651 1456 L
+ 651 1456 mt  651 1428 L
+ 651 1428 mt  652 1401 L
+ 652 1401 mt  653 1373 L
+ 653 1373 mt  653 1346 L
+ 653 1346 mt  654 1318 L
+ 654 1318 mt  655 1291 L
+ 655 1291 mt  657 1263 L
+ 657 1263 mt  659 1236 L
+ 659 1236 mt  662 1208 L
+ 662 1208 mt  665 1181 L
+ 665 1181 mt  669 1153 L
+ 669 1153 mt  674 1126 L
+ 674 1126 mt  679 1098 L
+ 679 1098 mt  682 1083 L
+ 682 1083 mt  685 1071 L
+ 685 1071 mt  691 1043 L
+ 691 1043 mt  698 1016 L
+ 698 1016 mt  705  988 L
+ 705  988 mt  712  961 L
+ 712  961 mt  717  943 L
+ 717  943 mt  720  933 L
+ 720  933 mt  729  906 L
+ 729  906 mt  738  878 L
+ 738  878 mt  748  851 L
+ 748  851 mt  752  842 L
+ 752  842 mt  760  823 L
+ 760  823 mt  773  796 L
+ 773  796 mt  787  769 L
+ 787  769 mt  787  768 L
+ 787  768 mt  803  741 L
+ 803  741 mt  820  713 L
+ 820  713 mt  822  711 L
+ 822  711 mt  839  686 L
+ 839  686 mt  857  661 L
+ 857  661 mt  858  658 L
+ 858  658 mt  879  631 L
+ 879  631 mt  892  614 L
+ 892  614 mt  900  603 L
+ 900  603 mt  921  576 L
+ 921  576 mt  926  569 L
+ 926  569 mt  943  548 L
+ 943  548 mt  961  527 L
+ 961  527 mt  967  521 L
+ 967  521 mt  992  493 L
+ 992  493 mt  996  489 L
+ 996  489 mt 1021  466 L
+1021  466 mt 1031  457 L
+1031  457 mt 1054  438 L
+1054  438 mt 1066  429 L
+1066  429 mt 1092  411 L
+1092  411 mt 1101  405 L
+1101  405 mt 1136  384 L
+1136  384 mt 1137  383 L
+1137  383 mt 1170  365 L
+1170  365 mt 1192  355 L
+1192  355 mt 1205  349 L
+1205  349 mt 1240  336 L
+1240  336 mt 1266  328 L
+1266  328 mt 1275  325 L
+1275  325 mt 1310  316 L
+1310  316 mt 1345  310 L
+1345  310 mt 1380  305 L
+1380  305 mt 1415  301 L
+1415  301 mt 1419  300 L
+1419  300 mt 1449  297 L
+1449  297 mt 1484  294 L
+1484  294 mt 1519  291 L
+1519  291 mt 1554  287 L
+1554  287 mt 1589  283 L
+1589  283 mt 1624  278 L
+1624  278 mt 1658  273 L
+1658  273 mt 1659  273 L
+1659  273 mt 1694  267 L
+1694  267 mt 1728  262 L
+1728  262 mt 1763  256 L
+1763  256 mt 1798  251 L
+1798  251 mt 1833  247 L
+1833  247 mt 1842  245 L
+1842  245 mt 1868  243 L
+1868  243 mt 1903  239 L
+1903  239 mt 1938  237 L
+1938  237 mt 1972  235 L
+1972  235 mt 2007  234 L
+2007  234 mt 2042  233 L
+2042  233 mt 2077  233 L
+2077  233 mt 2112  232 L
+2112  232 mt 2147  230 L
+2147  230 mt 2182  229 L
+2182  229 mt 2217  227 L
+2217  227 mt 2251  224 L
+2251  224 mt 2286  222 L
+2286  222 mt 2321  219 L
+2321  219 mt 2333  218 L
+2333  218 mt 2356  216 L
+2356  216 mt 2391  213 L
+2391  213 mt 2426  211 L
+2426  211 mt 2461  208 L
+2461  208 mt 2496  205 L
+2496  205 mt 2530  203 L
+2530  203 mt 2565  200 L
+2565  200 mt 2600  197 L
+2600  197 mt 2635  194 L
+2635  194 mt 2670  191 L
+2670  191 mt 2677  190 L
+2677  190 mt 2705  188 L
+2705  188 mt 2740  185 L
+2740  185 mt 2774  182 L
+2774  182 mt 2809  179 L
+2809  179 mt 2844  176 L
+2844  176 mt 2879  173 L
+2879  173 mt 2914  171 L
+2914  171 mt 2949  168 L
+2949  168 mt 2984  166 L
+2984  166 mt 3019  164 L
+3019  164 mt 3033  163 L
+3033  163 mt 3053  161 L
+3053  161 mt 3088  159 L
+3088  159 mt 3123  156 L
+3123  156 mt 3158  153 L
+3158  153 mt 3193  150 L
+3193  150 mt 3228  146 L
+3228  146 mt 3263  143 L
+3263  143 mt 3298  138 L
+3298  138 mt 3320  135 L
+3320  135 mt 3332  134 L
+3332  134 mt 3367  129 L
+3367  129 mt 3402  124 L
+3402  124 mt 3437  119 L
+3437  119 mt 3472  114 L
+3472  114 mt 3507  108 L
+3507  108 mt 3510  108 L
+3510  108 mt 3542  103 L
+3542  103 mt 3577   97 L
+3577   97 mt 3611   92 L
+3611   92 mt 3646   86 L
+3646   86 mt 3681   81 L
+3681   81 mt 3683   80 L
+3683   80 mt 3716   75 L
+3716   75 mt 3751   70 L
+3751   70 mt 3786   64 L
+3786   64 mt 3821   59 L
+3821   59 mt 3855   53 L
+3855   53 mt 3860   53 L
+3860   53 mt 3890   48 L
+3890   48 mt 3925   43 L
+3925   43 mt 3960   38 L
+3960   38 mt 3995   33 L
+3995   33 mt 4030   29 L
+4030   29 mt 4056   25 L
+4056   25 mt 4065   24 L
+4065   24 mt 4100   20 L
+4100   20 mt 4134   15 L
+4134   15 mt 4169   11 L
+4169   11 mt 4204    7 L
+4204    7 mt 4239    4 L
+4239    4 mt 4274    1 L
+4274    1 mt 4309   -1 L
+4309   -1 mt 4309   -1 L
+4309   -1 mt 4344   -4 L
+4344   -4 mt 4379   -5 L
+4379   -5 mt 4413   -7 L
+4413   -7 mt 4448   -8 L
+4448   -8 mt 4483   -8 L
+4483   -8 mt 4518   -8 L
+4518   -8 mt 4553   -8 L
+4553   -8 mt 4588   -7 L
+4588   -7 mt 4623   -6 L
+4623   -6 mt 4657   -4 L
+4657   -4 mt 4692   -2 L
+4692   -2 mt 4707   -1 L
+4707   -1 mt 4727    0 L
+4727    0 mt 4762    2 L
+4762    2 mt 4797    6 L
+4797    6 mt 4832   10 L
+4832   10 mt 4867   14 L
+4867   14 mt 4902   20 L
+4902   20 mt 4934   25 L
+4934   25 mt 4936   26 L
+4936   26 mt 4971   32 L
+4971   32 mt 5006   40 L
+5006   40 mt 5041   48 L
+5041   48 mt 5062   53 L
+5062   53 mt 5076   56 L
+5076   56 mt 5111   65 L
+5111   65 mt 5146   76 L
+5146   76 mt 5161   80 L
+5161   80 mt 5181   87 L
+5181   87 mt 5215   99 L
+5215   99 mt 5240  108 L
+5240  108 mt 5250  112 L
+5250  112 mt 5285  126 L
+5285  126 mt 5305  135 L
+5305  135 mt 5320  142 L
+5320  142 mt 5355  159 L
+5355  159 mt 5361  163 L
+5361  163 mt 5390  178 L
+5390  178 mt 5411  190 L
+5411  190 mt 5425  198 L
+5425  198 mt 5456  218 L
+5456  218 mt 5459  220 L
+5459  220 mt 5494  244 L
+5494  244 mt 5497  245 L
+5497  245 mt 5529  269 L
+5529  269 mt 5535  273 L
+5535  273 mt 5564  295 L
+5564  295 mt 5571  300 L
+5571  300 mt 5599  323 L
+5599  323 mt 5605  328 L
+5605  328 mt 5634  352 L
+5634  352 mt 5638  355 L
+5638  355 mt 5669  383 L
+5669  383 mt 5669  383 L
+5669  383 mt 5700  411 L
+5700  411 mt 5704  414 L
+5704  414 mt 5730  438 L
+5730  438 mt 5738  446 L
+5738  446 mt 5759  466 L
+5759  466 mt 5773  480 L
+5773  480 mt 5787  493 L
+5787  493 mt 5808  514 L
+5808  514 mt 5815  521 L
+5815  521 mt 5842  548 L
+5842  548 mt 5843  549 L
+5843  549 mt 5869  576 L
+5869  576 mt 5878  584 L
+5878  584 mt 5896  603 L
+5896  603 mt 5913  620 L
+5913  620 mt 5923  631 L
+5923  631 mt 5948  657 L
+5948  657 mt 5949  658 L
+5949  658 mt 5975  686 L
+5975  686 mt 5983  693 L
+5983  693 mt 6001  713 L
+6001  713 mt 6017  730 L
+6017  730 mt 6027  741 L
+6027  741 mt 6052  768 L
+6052  768 mt 6053  768 L
+6053  768 mt 6078  796 L
+6078  796 mt 6087  805 L
+6087  805 mt 6104  823 L
+6104  823 mt 6122  842 L
+6122  842 mt 6130  851 L
+6130  851 mt 6155  878 L
+6155  878 mt 6157  880 L
+6157  880 mt 6181  906 L
+6181  906 mt 6192  917 L
+6192  917 mt 6206  933 L
+6206  933 mt 6227  955 L
+6227  955 mt 6232  961 L
+6232  961 mt 6257  988 L
+6257  988 mt 6261  993 L
+6261  993 mt 6283 1016 L
+6283 1016 mt 6296 1030 L
+6296 1030 mt 6309 1043 L
+6309 1043 mt 6331 1068 L
+6331 1068 mt 6334 1071 L
+6334 1071 mt 6360 1098 L
+6360 1098 mt 6366 1106 L
+6366 1106 mt 6385 1126 L
+6385 1126 mt 6401 1144 L
+6401 1144 mt 6409 1153 L
+6409 1153 mt 6434 1181 L
+6434 1181 mt 6436 1183 L
+6436 1183 mt 6458 1208 L
+6458 1208 mt 6471 1223 L
+6471 1223 mt 6482 1236 L
+6482 1236 mt 6506 1263 L
+6506 1263 mt 6506 1263 L
+6506 1263 mt 6528 1291 L
+6528 1291 mt 6540 1306 L
+6540 1306 mt 6550 1318 L
+6550 1318 mt 6571 1346 L
+6571 1346 mt 6575 1352 L
+6575 1352 mt 6592 1373 L
+6592 1373 mt 6610 1400 L
+6610 1400 mt 6611 1401 L
+6611 1401 mt 6630 1428 L
+6630 1428 mt 6645 1452 L
+6645 1452 mt 6648 1456 L
+6648 1456 mt 6664 1484 L
+6664 1484 mt 6680 1510 L
+6680 1510 mt 6680 1511 L
+6680 1511 mt 6695 1539 L
+6695 1539 mt 6709 1566 L
+6709 1566 mt 6715 1578 L
+6715 1578 mt 6722 1594 L
+6722 1594 mt 6735 1621 L
+6735 1621 mt 6746 1649 L
+6746 1649 mt 6750 1659 L
+6750 1659 mt 6756 1676 L
+6756 1676 mt 6765 1704 L
+6765 1704 mt 6774 1731 L
+6774 1731 mt 6782 1759 L
+6782 1759 mt 6785 1770 L
+6785 1770 mt 6789 1786 L
+6789 1786 mt 6795 1814 L
+6795 1814 mt 6800 1841 L
+6800 1841 mt 6805 1869 L
+6805 1869 mt 6809 1896 L
+6809 1896 mt 6813 1924 L
+6813 1924 mt 6815 1951 L
+6815 1951 mt 6817 1979 L
+6817 1979 mt 6819 2006 L
+6819 2006 mt 6819 2024 L
+6750 1822 mt 6753 1841 L
+6753 1841 mt 6758 1869 L
+6758 1869 mt 6761 1896 L
+6761 1896 mt 6764 1924 L
+6764 1924 mt 6767 1951 L
+6767 1951 mt 6769 1979 L
+6769 1979 mt 6770 2006 L
+6770 2006 mt 6770 2034 L
+6770 2034 mt 6770 2061 L
+6770 2061 mt 6769 2089 L
+6769 2089 mt 6767 2116 L
+6767 2116 mt 6764 2144 L
+6764 2144 mt 6761 2171 L
+6761 2171 mt 6757 2199 L
+6757 2199 mt 6752 2226 L
+6752 2226 mt 6750 2238 L
+6750 2238 mt 6746 2254 L
+6746 2254 mt 6740 2281 L
+6740 2281 mt 6734 2309 L
+6734 2309 mt 6726 2336 L
+6726 2336 mt 6718 2364 L
+6718 2364 mt 6715 2374 L
+6715 2374 mt 6709 2391 L
+6709 2391 mt 6700 2419 L
+6700 2419 mt 6690 2446 L
+6690 2446 mt 6680 2471 L
+6680 2471 mt 6679 2474 L
+6679 2474 mt 6667 2502 L
+6667 2502 mt 6655 2529 L
+6655 2529 mt 6645 2550 L
+6645 2550 mt 6642 2557 L
+6642 2557 mt 6628 2584 L
+6628 2584 mt 6613 2612 L
+6613 2612 mt 6610 2616 L
+6610 2616 mt 6597 2639 L
+6597 2639 mt 6580 2667 L
+6580 2667 mt 6575 2675 L
+6575 2675 mt 6563 2694 L
+6563 2694 mt 6544 2722 L
+6544 2722 mt 6540 2727 L
+6540 2727 mt 6524 2749 L
+6524 2749 mt 6506 2775 L
+6506 2775 mt 6504 2777 L
+6504 2777 mt 6483 2804 L
+6483 2804 mt 6471 2821 L
+6471 2821 mt 6462 2832 L
+6462 2832 mt 6441 2859 L
+6441 2859 mt 6436 2867 L
+6436 2867 mt 6421 2887 L
+6421 2887 mt 6401 2914 L
+6401 2914 mt 6401 2914 L
+6401 2914 mt 6382 2942 L
+6382 2942 mt 6366 2969 L
+6366 2969 mt 6366 2970 L
+6366 2970 mt 6353 2997 L
+6353 2997 mt 6344 3024 L
+6344 3024 mt 6339 3052 L
+6339 3052 mt 6337 3079 L
+6337 3079 mt 6337 3107 L
+6337 3107 mt 6337 3134 L
+6337 3134 mt 6337 3162 L
+6337 3162 mt 6338 3189 L
+6338 3189 mt 6338 3217 L
+6338 3217 mt 6338 3244 L
+6338 3244 mt 6338 3272 L
+6338 3272 mt 6338 3299 L
+6338 3299 mt 6337 3327 L
+6337 3327 mt 6335 3354 L
+6335 3354 mt 6332 3382 L
+6332 3382 mt 6331 3389 L
+6331 3389 mt 6328 3409 L
+6328 3409 mt 6322 3437 L
+6322 3437 mt 6314 3464 L
+6314 3464 mt 6302 3492 L
+6302 3492 mt 6296 3501 L
+6296 3501 mt 6282 3519 L
+6282 3519 mt 6261 3538 L
+6261 3538 mt 6237 3547 L
+6237 3547 mt 6227 3553 L
+6227 3553 mt 6208 3547 L
+6208 3547 mt 6192 3542 L
+6192 3542 mt 6168 3519 L
+6168 3519 mt 6157 3510 L
+6157 3510 mt 6139 3492 L
+6139 3492 mt 6122 3475 L
+6122 3475 mt 6110 3464 L
+6110 3464 mt 6087 3444 L
+6087 3444 mt 6076 3437 L
+6076 3437 mt 6052 3419 L
+6052 3419 mt 6036 3409 L
+6036 3409 mt 6017 3396 L
+6017 3396 mt 5997 3382 L
+5997 3382 mt 5983 3371 L
+5983 3371 mt 5962 3354 L
+5962 3354 mt 5948 3342 L
+5948 3342 mt 5930 3327 L
+5930 3327 mt 5913 3309 L
+5913 3309 mt 5904 3299 L
+5904 3299 mt 5882 3272 L
+5882 3272 mt 5878 3265 L
+5878 3265 mt 5866 3244 L
+5866 3244 mt 5849 3217 L
+5849 3217 mt 5843 3208 L
+5843 3208 mt 5832 3189 L
+5832 3189 mt 5813 3162 L
+5813 3162 mt 5808 3156 L
+5808 3156 mt 5796 3134 L
+5796 3134 mt 5778 3107 L
+5778 3107 mt 5773 3102 L
+5773 3102 mt 5758 3079 L
+5758 3079 mt 5738 3054 L
+5738 3054 mt 5737 3052 L
+5737 3052 mt 5718 3024 L
+5718 3024 mt 5704 3007 L
+5704 3007 mt 5695 2997 L
+5695 2997 mt 5669 2973 L
+5669 2973 mt 5664 2969 L
+5664 2969 mt 5634 2948 L
+5634 2948 mt 5625 2942 L
+5625 2942 mt 5599 2923 L
+5599 2923 mt 5588 2914 L
+5588 2914 mt 5564 2893 L
+5564 2893 mt 5558 2887 L
+5558 2887 mt 5531 2859 L
+5531 2859 mt 5529 2858 L
+5529 2858 mt 5501 2832 L
+5501 2832 mt 5494 2826 L
+5494 2826 mt 5471 2804 L
+5471 2804 mt 5459 2792 L
+5459 2792 mt 5444 2777 L
+5444 2777 mt 5425 2749 L
+5425 2749 mt 5425 2749 L
+5425 2749 mt 5412 2722 L
+5412 2722 mt 5407 2694 L
+5407 2694 mt 5406 2667 L
+5406 2667 mt 5410 2639 L
+5410 2639 mt 5417 2612 L
+5417 2612 mt 5425 2584 L
+5425 2584 mt 5425 2584 L
+5425 2584 mt 5432 2557 L
+5432 2557 mt 5437 2529 L
+5437 2529 mt 5441 2502 L
+5441 2502 mt 5441 2474 L
+5441 2474 mt 5438 2446 L
+5438 2446 mt 5432 2419 L
+5432 2419 mt 5425 2396 L
+5425 2396 mt 5423 2391 L
+5423 2391 mt 5412 2364 L
+5412 2364 mt 5398 2336 L
+5398 2336 mt 5390 2323 L
+5390 2323 mt 5380 2309 L
+5380 2309 mt 5355 2281 L
+5355 2281 mt 5355 2281 L
+5355 2281 mt 5320 2255 L
+5320 2255 mt 5318 2254 L
+5318 2254 mt 5285 2239 L
+5285 2239 mt 5250 2230 L
+5250 2230 mt 5231 2226 L
+5231 2226 mt 5215 2220 L
+5215 2220 mt 5184 2199 L
+5184 2199 mt 5181 2193 L
+5181 2193 mt 5172 2171 L
+5172 2171 mt 5169 2144 L
+5169 2144 mt 5176 2116 L
+5176 2116 mt 5181 2102 L
+5181 2102 mt 5184 2089 L
+5184 2089 mt 5191 2061 L
+5191 2061 mt 5194 2034 L
+5194 2034 mt 5191 2006 L
+5191 2006 mt 5181 1979 L
+5181 1979 mt 5181 1978 L
+5181 1978 mt 5160 1951 L
+5160 1951 mt 5146 1941 L
+5146 1941 mt 5111 1925 L
+5111 1925 mt 5104 1924 L
+5104 1924 mt 5076 1919 L
+5076 1919 mt 5041 1918 L
+5041 1918 mt 5006 1919 L
+5006 1919 mt 4971 1922 L
+4971 1922 mt 4957 1924 L
+4957 1924 mt 4936 1926 L
+4936 1926 mt 4902 1931 L
+4902 1931 mt 4867 1932 L
+4867 1932 mt 4832 1926 L
+4832 1926 mt 4828 1924 L
+4828 1924 mt 4797 1906 L
+4797 1906 mt 4788 1896 L
+4788 1896 mt 4773 1869 L
+4773 1869 mt 4766 1841 L
+4766 1841 mt 4764 1814 L
+4764 1814 mt 4765 1786 L
+4765 1786 mt 4768 1759 L
+4768 1759 mt 4771 1731 L
+4771 1731 mt 4772 1704 L
+4772 1704 mt 4768 1676 L
+4768 1676 mt 4762 1664 L
+4762 1664 mt 4750 1649 L
+4750 1649 mt 4727 1634 L
+4727 1634 mt 4692 1623 L
+4692 1623 mt 4680 1621 L
+4680 1621 mt 4657 1618 L
+4657 1618 mt 4623 1616 L
+4623 1616 mt 4588 1616 L
+4588 1616 mt 4553 1615 L
+4553 1615 mt 4518 1613 L
+4518 1613 mt 4483 1604 L
+4483 1604 mt 4463 1594 L
+4463 1594 mt 4448 1583 L
+4448 1583 mt 4435 1566 L
+4435 1566 mt 4419 1539 L
+4419 1539 mt 4413 1526 L
+4413 1526 mt 4407 1511 L
+4407 1511 mt 4395 1484 L
+4395 1484 mt 4381 1456 L
+4381 1456 mt 4379 1451 L
+4379 1451 mt 4365 1428 L
+4365 1428 mt 4344 1407 L
+4344 1407 mt 4337 1401 L
+4337 1401 mt 4309 1383 L
+4309 1383 mt 4290 1373 L
+4290 1373 mt 4274 1366 L
+4274 1366 mt 4239 1353 L
+4239 1353 mt 4220 1346 L
+4220 1346 mt 4204 1340 L
+4204 1340 mt 4169 1328 L
+4169 1328 mt 4140 1318 L
+4140 1318 mt 4134 1316 L
+4134 1316 mt 4100 1305 L
+4100 1305 mt 4065 1294 L
+4065 1294 mt 4055 1291 L
+4055 1291 mt 4030 1279 L
+4030 1279 mt 4002 1263 L
+4002 1263 mt 3995 1258 L
+3995 1258 mt 3968 1236 L
+3968 1236 mt 3960 1228 L
+3960 1228 mt 3939 1208 L
+3939 1208 mt 3925 1196 L
+3925 1196 mt 3906 1181 L
+3906 1181 mt 3890 1169 L
+3890 1169 mt 3864 1153 L
+3864 1153 mt 3855 1149 L
+3855 1149 mt 3821 1133 L
+3821 1133 mt 3801 1126 L
+3801 1126 mt 3786 1121 L
+3786 1121 mt 3751 1110 L
+3751 1110 mt 3716 1101 L
+3716 1101 mt 3706 1098 L
+3706 1098 mt 3681 1092 L
+3681 1092 mt 3646 1081 L
+3646 1081 mt 3614 1071 L
+3614 1071 mt 3611 1070 L
+3611 1070 mt 3577 1056 L
+3577 1056 mt 3545 1043 L
+3545 1043 mt 3542 1042 L
+3542 1042 mt 3507 1026 L
+3507 1026 mt 3486 1016 L
+3486 1016 mt 3472 1008 L
+3472 1008 mt 3437  989 L
+3437  989 mt 3436  988 L
+3436  988 mt 3402  968 L
+3402  968 mt 3390  961 L
+3390  961 mt 3367  945 L
+3367  945 mt 3348  933 L
+3348  933 mt 3332  922 L
+3332  922 mt 3307  906 L
+3307  906 mt 3298  899 L
+3298  899 mt 3263  880 L
+3263  880 mt 3258  878 L
+3258  878 mt 3228  861 L
+3228  861 mt 3209  851 L
+3209  851 mt 3193  836 L
+3193  836 mt 3178  823 L
+3178  823 mt 3158  803 L
+3158  803 mt 3151  796 L
+3151  796 mt 3123  769 L
+3123  769 mt 3123  768 L
+3123  768 mt 3088  741 L
+3088  741 mt 3088  741 L
+3088  741 mt 3053  722 L
+3053  722 mt 3029  713 L
+3029  713 mt 3019  710 L
+3019  710 mt 2984  703 L
+2984  703 mt 2949  700 L
+2949  700 mt 2914  702 L
+2914  702 mt 2879  706 L
+2879  706 mt 2844  711 L
+2844  711 mt 2831  713 L
+2831  713 mt 2809  717 L
+2809  717 mt 2774  722 L
+2774  722 mt 2740  726 L
+2740  726 mt 2705  728 L
+2705  728 mt 2670  730 L
+2670  730 mt 2635  730 L
+2635  730 mt 2600  730 L
+2600  730 mt 2565  728 L
+2565  728 mt 2530  726 L
+2530  726 mt 2496  723 L
+2496  723 mt 2461  723 L
+2461  723 mt 2426  726 L
+2426  726 mt 2391  733 L
+2391  733 mt 2367  741 L
+2367  741 mt 2356  745 L
+2356  745 mt 2321  760 L
+2321  760 mt 2302  768 L
+2302  768 mt 2286  776 L
+2286  776 mt 2251  792 L
+2251  792 mt 2242  796 L
+2242  796 mt 2217  806 L
+2217  806 mt 2182  816 L
+2182  816 mt 2147  823 L
+2147  823 mt 2141  823 L
+2141  823 mt 2112  826 L
+2112  826 mt 2077  827 L
+2077  827 mt 2042  826 L
+2042  826 mt 2007  824 L
+2007  824 mt 1983  823 L
+1983  823 mt 1972  823 L
+1972  823 mt 1938  821 L
+1938  821 mt 1903  823 L
+1903  823 mt 1897  823 L
+1897  823 mt 1868  828 L
+1868  828 mt 1833  838 L
+1833  838 mt 1805  851 L
+1805  851 mt 1798  854 L
+1798  854 mt 1763  878 L
+1763  878 mt 1763  878 L
+1763  878 mt 1735  906 L
+1735  906 mt 1728  911 L
+1728  911 mt 1710  933 L
+1710  933 mt 1694  950 L
+1694  950 mt 1685  961 L
+1685  961 mt 1661  988 L
+1661  988 mt 1659  991 L
+1659  991 mt 1637 1016 L
+1637 1016 mt 1624 1029 L
+1624 1029 mt 1610 1043 L
+1610 1043 mt 1589 1062 L
+1589 1062 mt 1580 1071 L
+1580 1071 mt 1554 1093 L
+1554 1093 mt 1548 1098 L
+1548 1098 mt 1519 1123 L
+1519 1123 mt 1516 1126 L
+1516 1126 mt 1487 1153 L
+1487 1153 mt 1484 1156 L
+1484 1156 mt 1463 1181 L
+1463 1181 mt 1449 1205 L
+1449 1205 mt 1448 1208 L
+1448 1208 mt 1440 1236 L
+1440 1236 mt 1439 1263 L
+1439 1263 mt 1444 1291 L
+1444 1291 mt 1449 1306 L
+1449 1306 mt 1454 1318 L
+1454 1318 mt 1467 1346 L
+1467 1346 mt 1482 1373 L
+1482 1373 mt 1484 1380 L
+1484 1380 mt 1494 1401 L
+1494 1401 mt 1497 1428 L
+1497 1428 mt 1487 1456 L
+1487 1456 mt 1484 1459 L
+1484 1459 mt 1456 1484 L
+1456 1484 mt 1449 1487 L
+1449 1487 mt 1415 1495 L
+1415 1495 mt 1380 1498 L
+1380 1498 mt 1345 1500 L
+1345 1500 mt 1310 1506 L
+1310 1506 mt 1292 1511 L
+1292 1511 mt 1275 1519 L
+1275 1519 mt 1243 1539 L
+1243 1539 mt 1240 1541 L
+1240 1541 mt 1221 1566 L
+1221 1566 mt 1213 1594 L
+1213 1594 mt 1213 1621 L
+1213 1621 mt 1219 1649 L
+1219 1649 mt 1229 1676 L
+1229 1676 mt 1239 1704 L
+1239 1704 mt 1240 1706 L
+1240 1706 mt 1251 1731 L
+1251 1731 mt 1262 1759 L
+1262 1759 mt 1274 1786 L
+1274 1786 mt 1275 1788 L
+1275 1788 mt 1287 1814 L
+1287 1814 mt 1301 1841 L
+1301 1841 mt 1310 1857 L
+1310 1857 mt 1317 1869 L
+1317 1869 mt 1334 1896 L
+1334 1896 mt 1345 1913 L
+1345 1913 mt 1351 1924 L
+1351 1924 mt 1367 1951 L
+1367 1951 mt 1380 1974 L
+1380 1974 mt 1382 1979 L
+1382 1979 mt 1395 2006 L
+1395 2006 mt 1408 2034 L
+1408 2034 mt 1415 2048 L
+1415 2048 mt 1421 2061 L
+1421 2061 mt 1435 2089 L
+1435 2089 mt 1449 2111 L
+1449 2111 mt 1452 2116 L
+1452 2116 mt 1466 2144 L
+1466 2144 mt 1474 2171 L
+1474 2171 mt 1479 2199 L
+1479 2199 mt 1484 2215 L
+1484 2215 mt 1487 2226 L
+1487 2226 mt 1503 2254 L
+1503 2254 mt 1519 2270 L
+1519 2270 mt 1531 2281 L
+1531 2281 mt 1554 2298 L
+1554 2298 mt 1572 2309 L
+1572 2309 mt 1589 2319 L
+1589 2319 mt 1621 2336 L
+1621 2336 mt 1624 2338 L
+1624 2338 mt 1659 2357 L
+1659 2357 mt 1671 2364 L
+1671 2364 mt 1694 2378 L
+1694 2378 mt 1714 2391 L
+1714 2391 mt 1728 2402 L
+1728 2402 mt 1751 2419 L
+1751 2419 mt 1763 2434 L
+1763 2434 mt 1773 2446 L
+1773 2446 mt 1783 2474 L
+1783 2474 mt 1783 2502 L
+1783 2502 mt 1777 2529 L
+1777 2529 mt 1769 2557 L
+1769 2557 mt 1763 2576 L
+1763 2576 mt 1761 2584 L
+1761 2584 mt 1759 2612 L
+1759 2612 mt 1763 2629 L
+1763 2629 mt 1768 2639 L
+1768 2639 mt 1798 2665 L
+1798 2665 mt 1802 2667 L
+1802 2667 mt 1833 2677 L
+1833 2677 mt 1868 2683 L
+1868 2683 mt 1903 2688 L
+1903 2688 mt 1938 2693 L
+1938 2693 mt 1944 2694 L
+1944 2694 mt 1972 2701 L
+1972 2701 mt 2007 2715 L
+2007 2715 mt 2019 2722 L
+2019 2722 mt 2042 2736 L
+2042 2736 mt 2059 2749 L
+2059 2749 mt 2077 2762 L
+2077 2762 mt 2095 2777 L
+2095 2777 mt 2112 2790 L
+2112 2790 mt 2127 2804 L
+2127 2804 mt 2147 2830 L
+2147 2830 mt 2148 2832 L
+2148 2832 mt 2149 2859 L
+2149 2859 mt 2147 2863 L
+2147 2863 mt 2131 2887 L
+2131 2887 mt 2112 2905 L
+2112 2905 mt 2099 2914 L
+2099 2914 mt 2077 2930 L
+2077 2930 mt 2067 2942 L
+2067 2942 mt 2050 2969 L
+2050 2969 mt 2042 2990 L
+2042 2990 mt 2040 2997 L
+2040 2997 mt 2036 3024 L
+2036 3024 mt 2038 3052 L
+2038 3052 mt 2042 3074 L
+2042 3074 mt 2043 3079 L
+2043 3079 mt 2054 3107 L
+2054 3107 mt 2069 3134 L
+2069 3134 mt 2077 3145 L
+2077 3145 mt 2090 3162 L
+2090 3162 mt 2112 3185 L
+2112 3185 mt 2116 3189 L
+2116 3189 mt 2146 3217 L
+2146 3217 mt 2147 3218 L
+2147 3218 mt 2177 3244 L
+2177 3244 mt 2182 3249 L
+2182 3249 mt 2206 3272 L
+2206 3272 mt 2217 3281 L
+2217 3281 mt 2239 3299 L
+2239 3299 mt 2251 3309 L
+2251 3309 mt 2274 3327 L
+2274 3327 mt 2286 3337 L
+2286 3337 mt 2307 3354 L
+2307 3354 mt 2321 3366 L
+2321 3366 mt 2340 3382 L
+2340 3382 mt 2356 3396 L
+2356 3396 mt 2373 3409 L
+2373 3409 mt 2391 3424 L
+2391 3424 mt 2406 3437 L
+2406 3437 mt 2426 3456 L
+2426 3456 mt 2435 3464 L
+2435 3464 mt 2460 3492 L
+2460 3492 mt 2461 3493 L
+2461 3493 mt 2480 3519 L
+2480 3519 mt 2495 3547 L
+2495 3547 mt 2496 3547 L
+2496 3547 mt 2508 3575 L
+2508 3575 mt 2517 3602 L
+2517 3602 mt 2522 3630 L
+2522 3630 mt 2520 3657 L
+2520 3657 mt 2504 3685 L
+2504 3685 mt 2496 3691 L
+2496 3691 mt 2466 3712 L
+2466 3712 mt 2461 3715 L
+2461 3715 mt 2426 3734 L
+2426 3734 mt 2415 3740 L
+2415 3740 mt 2391 3751 L
+2391 3751 mt 2359 3767 L
+2359 3767 mt 2356 3769 L
+2356 3769 mt 2321 3787 L
+2321 3787 mt 2306 3795 L
+2306 3795 mt 2286 3805 L
+2286 3805 mt 2254 3822 L
+2254 3822 mt 2251 3823 L
+2251 3823 mt 2217 3840 L
+2217 3840 mt 2191 3850 L
+2191 3850 mt 2182 3853 L
+2182 3853 mt 2147 3864 L
+2147 3864 mt 2112 3869 L
+2112 3869 mt 2077 3866 L
+2077 3866 mt 2050 3850 L
+2050 3850 mt 2042 3844 L
+2042 3844 mt 2023 3822 L
+2023 3822 mt 2007 3807 L
+2007 3807 mt 1996 3795 L
+1996 3795 mt 1972 3767 L
+1972 3767 mt 1972 3767 L
+1972 3767 mt 1953 3740 L
+1953 3740 mt 1938 3712 L
+1938 3712 mt 1937 3712 L
+1937 3712 mt 1924 3685 L
+1924 3685 mt 1912 3657 L
+1912 3657 mt 1903 3632 L
+1903 3632 mt 1902 3630 L
+1902 3630 mt 1894 3602 L
+1894 3602 mt 1886 3575 L
+1886 3575 mt 1877 3547 L
+1877 3547 mt 1868 3519 L
+1868 3519 mt 1868 3519 L
+1868 3519 mt 1858 3492 L
+1858 3492 mt 1847 3464 L
+1847 3464 mt 1834 3437 L
+1834 3437 mt 1833 3435 L
+1833 3435 mt 1819 3409 L
+1819 3409 mt 1802 3382 L
+1802 3382 mt 1798 3377 L
+1798 3377 mt 1783 3354 L
+1783 3354 mt 1763 3328 L
+1763 3328 mt 1762 3327 L
+1762 3327 mt 1738 3299 L
+1738 3299 mt 1728 3290 L
+1728 3290 mt 1708 3272 L
+1708 3272 mt 1694 3261 L
+1694 3261 mt 1671 3244 L
+1671 3244 mt 1659 3237 L
+1659 3237 mt 1624 3219 L
+1624 3219 mt 1620 3217 L
+1620 3217 mt 1589 3205 L
+1589 3205 mt 1554 3194 L
+1554 3194 mt 1540 3189 L
+1540 3189 mt 1519 3184 L
+1519 3184 mt 1484 3175 L
+1484 3175 mt 1449 3167 L
+1449 3167 mt 1424 3162 L
+1424 3162 mt 1415 3160 L
+1415 3160 mt 1380 3152 L
+1380 3152 mt 1345 3144 L
+1345 3144 mt 1310 3135 L
+1310 3135 mt 1305 3134 L
+1305 3134 mt 1275 3128 L
+1275 3128 mt 1240 3120 L
+1240 3120 mt 1205 3111 L
+1205 3111 mt 1194 3107 L
+1194 3107 mt 1170 3098 L
+1170 3098 mt 1136 3083 L
+1136 3083 mt 1128 3079 L
+1128 3079 mt 1101 3066 L
+1101 3066 mt 1073 3052 L
+1073 3052 mt 1066 3048 L
+1066 3048 mt 1031 3030 L
+1031 3030 mt 1021 3024 L
+1021 3024 mt  996 3011 L
+ 996 3011 mt  969 2997 L
+ 969 2997 mt  961 2993 L
+ 961 2993 mt  926 2974 L
+ 926 2974 mt  917 2969 L
+ 917 2969 mt  892 2955 L
+ 892 2955 mt  868 2942 L
+ 868 2942 mt  857 2935 L
+ 857 2935 mt  825 2914 L
+ 825 2914 mt  822 2912 L
+ 822 2912 mt  788 2887 L
+ 788 2887 mt  787 2886 L
+ 787 2886 mt  756 2859 L
+ 756 2859 mt  752 2855 L
+ 752 2855 mt  728 2832 L
+ 728 2832 mt  717 2819 L
+ 717 2819 mt  704 2804 L
+ 704 2804 mt  683 2777 L
+ 683 2777 mt  682 2775 L
+ 682 2775 mt  665 2749 L
+ 665 2749 mt  649 2722 L
+ 649 2722 mt  647 2719 L
+ 647 2719 mt  634 2694 L
+ 634 2694 mt  622 2667 L
+ 622 2667 mt  613 2642 L
+ 613 2642 mt  611 2639 L
+ 611 2639 mt  602 2612 L
+ 602 2612 mt  594 2584 L
+ 594 2584 mt  587 2557 L
+ 587 2557 mt  581 2529 L
+ 581 2529 mt  578 2505 L
+ 578 2505 mt  577 2502 L
+ 577 2502 mt  574 2474 L
+ 574 2474 mt  572 2446 L
+ 572 2446 mt  571 2419 L
+ 571 2419 mt  572 2391 L
+ 572 2391 mt  573 2364 L
+ 573 2364 mt  575 2336 L
+ 575 2336 mt  578 2314 L
+ 578 2314 mt  578 2309 L
+ 578 2309 mt  583 2281 L
+ 583 2281 mt  588 2254 L
+ 588 2254 mt  594 2226 L
+ 594 2226 mt  602 2199 L
+ 602 2199 mt  610 2171 L
+ 610 2171 mt  613 2162 L
+ 613 2162 mt  618 2144 L
+ 618 2144 mt  627 2116 L
+ 627 2116 mt  636 2089 L
+ 636 2089 mt  645 2061 L
+ 645 2061 mt  647 2054 L
+ 647 2054 mt  654 2034 L
+ 654 2034 mt  662 2006 L
+ 662 2006 mt  669 1979 L
+ 669 1979 mt  675 1951 L
+ 675 1951 mt  680 1924 L
+ 680 1924 mt  682 1906 L
+ 682 1906 mt  684 1896 L
+ 684 1896 mt  687 1869 L
+ 687 1869 mt  689 1841 L
+ 689 1841 mt  691 1814 L
+ 691 1814 mt  692 1786 L
+ 692 1786 mt  694 1759 L
+ 694 1759 mt  695 1731 L
+ 695 1731 mt  698 1704 L
+ 698 1704 mt  700 1676 L
+ 700 1676 mt  703 1649 L
+ 703 1649 mt  705 1621 L
+ 705 1621 mt  708 1594 L
+ 708 1594 mt  710 1566 L
+ 710 1566 mt  712 1539 L
+ 712 1539 mt  713 1511 L
+ 713 1511 mt  713 1484 L
+ 713 1484 mt  712 1456 L
+ 712 1456 mt  711 1428 L
+ 711 1428 mt  710 1401 L
+ 710 1401 mt  709 1373 L
+ 709 1373 mt  709 1346 L
+ 709 1346 mt  708 1318 L
+ 708 1318 mt  709 1291 L
+ 709 1291 mt  709 1263 L
+ 709 1263 mt  710 1236 L
+ 710 1236 mt  712 1208 L
+ 712 1208 mt  715 1181 L
+ 715 1181 mt  717 1161 L
+ 717 1161 mt  718 1153 L
+ 718 1153 mt  722 1126 L
+ 722 1126 mt  727 1098 L
+ 727 1098 mt  732 1071 L
+ 732 1071 mt  738 1043 L
+ 738 1043 mt  744 1016 L
+ 744 1016 mt  750  988 L
+ 750  988 mt  752  980 L
+ 752  980 mt  756  961 L
+ 756  961 mt  763  933 L
+ 763  933 mt  771  906 L
+ 771  906 mt  779  878 L
+ 779  878 mt  787  856 L
+ 787  856 mt  789  851 L
+ 789  851 mt  800  823 L
+ 800  823 mt  813  796 L
+ 813  796 mt  822  779 L
+ 822  779 mt  828  768 L
+ 828  768 mt  844  741 L
+ 844  741 mt  857  721 L
+ 857  721 mt  862  713 L
+ 862  713 mt  881  686 L
+ 881  686 mt  892  671 L
+ 892  671 mt  901  658 L
+ 901  658 mt  921  631 L
+ 921  631 mt  926  624 L
+ 926  624 mt  942  603 L
+ 942  603 mt  961  577 L
+ 961  577 mt  962  576 L
+ 962  576 mt  983  548 L
+ 983  548 mt  996  533 L
+ 996  533 mt 1007  521 L
+1007  521 mt 1031  495 L
+1031  495 mt 1033  493 L
+1033  493 mt 1063  466 L
+1063  466 mt 1066  464 L
+1066  464 mt 1099  438 L
+1099  438 mt 1101  437 L
+1101  437 mt 1136  414 L
+1136  414 mt 1142  411 L
+1142  411 mt 1170  394 L
+1170  394 mt 1193  383 L
+1193  383 mt 1205  377 L
+1205  377 mt 1240  363 L
+1240  363 mt 1265  355 L
+1265  355 mt 1275  352 L
+1275  352 mt 1310  343 L
+1310  343 mt 1345  338 L
+1345  338 mt 1380  335 L
+1380  335 mt 1415  333 L
+1415  333 mt 1449  332 L
+1449  332 mt 1484  330 L
+1484  330 mt 1519  329 L
+1519  329 mt 1530  328 L
+1530  328 mt 1554  326 L
+1554  326 mt 1589  323 L
+1589  323 mt 1624  319 L
+1624  319 mt 1659  314 L
+1659  314 mt 1694  309 L
+1694  309 mt 1728  303 L
+1728  303 mt 1741  300 L
+1741  300 mt 1763  297 L
+1763  297 mt 1798  291 L
+1798  291 mt 1833  286 L
+1833  286 mt 1868  282 L
+1868  282 mt 1903  279 L
+1903  279 mt 1938  277 L
+1938  277 mt 1972  277 L
+1972  277 mt 2007  277 L
+2007  277 mt 2042  278 L
+2042  278 mt 2077  279 L
+2077  279 mt 2112  280 L
+2112  280 mt 2147  280 L
+2147  280 mt 2182  279 L
+2182  279 mt 2217  277 L
+2217  277 mt 2251  275 L
+2251  275 mt 2275  273 L
+2275  273 mt 2286  272 L
+2286  272 mt 2321  269 L
+2321  269 mt 2356  266 L
+2356  266 mt 2391  263 L
+2391  263 mt 2426  261 L
+2426  261 mt 2461  259 L
+2461  259 mt 2496  257 L
+2496  257 mt 2530  255 L
+2530  255 mt 2565  253 L
+2565  253 mt 2600  251 L
+2600  251 mt 2635  249 L
+2635  249 mt 2670  245 L
+2670  245 mt 2670  245 L
+2670  245 mt 2705  242 L
+2705  242 mt 2740  239 L
+2740  239 mt 2774  236 L
+2774  236 mt 2809  233 L
+2809  233 mt 2844  231 L
+2844  231 mt 2879  229 L
+2879  229 mt 2914  227 L
+2914  227 mt 2949  226 L
+2949  226 mt 2984  224 L
+2984  224 mt 3019  223 L
+3019  223 mt 3053  221 L
+3053  221 mt 3088  220 L
+3088  220 mt 3115  218 L
+3115  218 mt 3123  217 L
+3123  217 mt 3158  215 L
+3158  215 mt 3193  212 L
+3193  212 mt 3228  208 L
+3228  208 mt 3263  204 L
+3263  204 mt 3298  199 L
+3298  199 mt 3332  194 L
+3332  194 mt 3353  190 L
+3353  190 mt 3367  188 L
+3367  188 mt 3402  183 L
+3402  183 mt 3437  177 L
+3437  177 mt 3472  171 L
+3472  171 mt 3507  165 L
+3507  165 mt 3520  163 L
+3520  163 mt 3542  159 L
+3542  159 mt 3577  153 L
+3577  153 mt 3611  147 L
+3611  147 mt 3646  141 L
+3646  141 mt 3680  135 L
+3680  135 mt 3681  135 L
+3681  135 mt 3716  129 L
+3716  129 mt 3751  123 L
+3751  123 mt 3786  117 L
+3786  117 mt 3821  112 L
+3821  112 mt 3842  108 L
+3842  108 mt 3855  106 L
+3855  106 mt 3890  100 L
+3890  100 mt 3925   94 L
+3925   94 mt 3960   88 L
+3960   88 mt 3995   83 L
+3995   83 mt 4011   80 L
+4011   80 mt 4030   77 L
+4030   77 mt 4065   72 L
+4065   72 mt 4100   67 L
+4100   67 mt 4134   62 L
+4134   62 mt 4169   57 L
+4169   57 mt 4199   53 L
+4199   53 mt 4204   52 L
+4204   52 mt 4239   48 L
+4239   48 mt 4274   44 L
+4274   44 mt 4309   40 L
+4309   40 mt 4344   37 L
+4344   37 mt 4379   34 L
+4379   34 mt 4413   32 L
+4413   32 mt 4448   30 L
+4448   30 mt 4483   29 L
+4483   29 mt 4518   28 L
+4518   28 mt 4553   28 L
+4553   28 mt 4588   28 L
+4588   28 mt 4623   29 L
+4623   29 mt 4657   29 L
+4657   29 mt 4692   31 L
+4692   31 mt 4727   33 L
+4727   33 mt 4762   35 L
+4762   35 mt 4797   38 L
+4797   38 mt 4832   41 L
+4832   41 mt 4867   45 L
+4867   45 mt 4902   50 L
+4902   50 mt 4920   53 L
+4920   53 mt 4936   55 L
+4936   55 mt 4971   61 L
+4971   61 mt 5006   68 L
+5006   68 mt 5041   76 L
+5041   76 mt 5060   80 L
+5060   80 mt 5076   84 L
+5076   84 mt 5111   93 L
+5111   93 mt 5146  103 L
+5146  103 mt 5161  108 L
+5161  108 mt 5181  114 L
+5181  114 mt 5215  126 L
+5215  126 mt 5239  135 L
+5239  135 mt 5250  140 L
+5250  140 mt 5285  154 L
+5285  154 mt 5303  163 L
+5303  163 mt 5320  171 L
+5320  171 mt 5355  189 L
+5355  189 mt 5358  190 L
+5358  190 mt 5390  208 L
+5390  208 mt 5405  218 L
+5405  218 mt 5425  230 L
+5425  230 mt 5449  245 L
+5449  245 mt 5459  253 L
+5459  253 mt 5488  273 L
+5488  273 mt 5494  277 L
+5494  277 mt 5525  300 L
+5525  300 mt 5529  304 L
+5529  304 mt 5560  328 L
+5560  328 mt 5564  332 L
+5564  332 mt 5593  355 L
+5593  355 mt 5599  361 L
+5599  361 mt 5625  383 L
+5625  383 mt 5634  391 L
+5634  391 mt 5656  411 L
+5656  411 mt 5669  423 L
+5669  423 mt 5686  438 L
+5686  438 mt 5704  455 L
+5704  455 mt 5715  466 L
+5715  466 mt 5738  488 L
+5738  488 mt 5743  493 L
+5743  493 mt 5771  521 L
+5771  521 mt 5773  523 L
+5773  523 mt 5799  548 L
+5799  548 mt 5808  558 L
+5808  558 mt 5825  576 L
+5825  576 mt 5843  594 L
+5843  594 mt 5852  603 L
+5852  603 mt 5878  630 L
+5878  630 mt 5878  631 L
+5878  631 mt 5904  658 L
+5904  658 mt 5913  667 L
+5913  667 mt 5930  686 L
+5930  686 mt 5948  705 L
+5948  705 mt 5956  713 L
+5956  713 mt 5981  741 L
+5981  741 mt 5983  742 L
+5983  742 mt 6007  768 L
+6007  768 mt 6017  780 L
+6017  780 mt 6032  796 L
+6032  796 mt 6052  818 L
+6052  818 mt 6058  823 L
+6058  823 mt 6083  851 L
+6083  851 mt 6087  855 L
+6087  855 mt 6108  878 L
+6108  878 mt 6122  893 L
+6122  893 mt 6134  906 L
+6134  906 mt 6157  931 L
+6157  931 mt 6159  933 L
+6159  933 mt 6184  961 L
+6184  961 mt 6192  969 L
+6192  969 mt 6209  988 L
+6209  988 mt 6227 1007 L
+6227 1007 mt 6235 1016 L
+6235 1016 mt 6260 1043 L
+6260 1043 mt 6261 1045 L
+6261 1045 mt 6285 1071 L
+6285 1071 mt 6296 1083 L
+6296 1083 mt 6310 1098 L
+6310 1098 mt 6331 1121 L
+6331 1121 mt 6336 1126 L
+6336 1126 mt 6361 1153 L
+6361 1153 mt 6366 1159 L
+6366 1159 mt 6385 1181 L
+6385 1181 mt 6401 1198 L
+6401 1198 mt 6410 1208 L
+6410 1208 mt 6434 1236 L
+6434 1236 mt 6436 1238 L
+6436 1238 mt 6458 1263 L
+6458 1263 mt 6471 1279 L
+6471 1279 mt 6481 1291 L
+6481 1291 mt 6503 1318 L
+6503 1318 mt 6506 1321 L
+6506 1321 mt 6525 1346 L
+6525 1346 mt 6540 1367 L
+6540 1367 mt 6546 1373 L
+6546 1373 mt 6566 1401 L
+6566 1401 mt 6575 1415 L
+6575 1415 mt 6585 1428 L
+6585 1428 mt 6603 1456 L
+6603 1456 mt 6610 1468 L
+6610 1468 mt 6620 1484 L
+6620 1484 mt 6636 1511 L
+6636 1511 mt 6645 1528 L
+6645 1528 mt 6651 1539 L
+6651 1539 mt 6665 1566 L
+6665 1566 mt 6678 1594 L
+6678 1594 mt 6680 1599 L
+6680 1599 mt 6690 1621 L
+6690 1621 mt 6701 1649 L
+6701 1649 mt 6711 1676 L
+6711 1676 mt 6715 1688 L
+6715 1688 mt 6720 1704 L
+6720 1704 mt 6728 1731 L
+6728 1731 mt 6736 1759 L
+6736 1759 mt 6742 1786 L
+6742 1786 mt 6748 1814 L
+6748 1814 mt 6750 1822 L
+1589 4112 mt 1597 4097 L
+1597 4097 mt 1619 4070 L
+1619 4070 mt 1624 4065 L
+1624 4065 mt 1652 4042 L
+1652 4042 mt 1659 4037 L
+1659 4037 mt 1694 4017 L
+1694 4017 mt 1697 4015 L
+1697 4015 mt 1728 3999 L
+1728 3999 mt 1754 3987 L
+1754 3987 mt 1763 3983 L
+1763 3983 mt 1798 3966 L
+1798 3966 mt 1813 3960 L
+1813 3960 mt 1833 3950 L
+1833 3950 mt 1868 3935 L
+1868 3935 mt 1878 3932 L
+1878 3932 mt 1903 3923 L
+1903 3923 mt 1938 3915 L
+1938 3915 mt 1972 3914 L
+1972 3914 mt 2006 3932 L
+2006 3932 mt 2007 3934 L
+2007 3934 mt 2016 3960 L
+2016 3960 mt 2016 3987 L
+2016 3987 mt 2013 4015 L
+2013 4015 mt 2013 4042 L
+2013 4042 mt 2016 4070 L
+2016 4070 mt 2021 4097 L
+2021 4097 mt 2030 4125 L
+2030 4125 mt 2042 4152 L
+2042 4152 mt 2042 4153 L
+2042 4153 mt 2058 4180 L
+2058 4180 mt 2077 4207 L
+2077 4207 mt 2077 4208 L
+2077 4208 mt 2099 4235 L
+2099 4235 mt 2112 4251 L
+2112 4251 mt 2122 4262 L
+2122 4262 mt 2146 4290 L
+2146 4290 mt 2147 4291 L
+2147 4291 mt 2171 4317 L
+2171 4317 mt 2182 4329 L
+2182 4329 mt 2198 4345 L
+2198 4345 mt 2217 4363 L
+2217 4363 mt 2228 4372 L
+2228 4372 mt 2251 4388 L
+2251 4388 mt 2269 4400 L
+2269 4400 mt 2286 4409 L
+2286 4409 mt 2321 4427 L
+2321 4427 mt 2323 4427 L
+2323 4427 mt 2356 4442 L
+2356 4442 mt 2388 4455 L
+2388 4455 mt 2391 4456 L
+2391 4456 mt 2426 4469 L
+2426 4469 mt 2457 4482 L
+2457 4482 mt 2461 4484 L
+2461 4484 mt 2496 4500 L
+2496 4500 mt 2514 4510 L
+2514 4510 mt 2530 4519 L
+2530 4519 mt 2565 4537 L
+2565 4537 mt 2565 4537 L
+2565 4537 mt 2600 4557 L
+2600 4557 mt 2615 4565 L
+2615 4565 mt 2635 4580 L
+2635 4580 mt 2653 4592 L
+2653 4592 mt 2657 4620 L
+2657 4620 mt 2635 4643 L
+2635 4643 mt 2630 4648 L
+2630 4648 mt 2600 4664 L
+2600 4664 mt 2579 4675 L
+2579 4675 mt 2565 4681 L
+2565 4681 mt 2530 4694 L
+2530 4694 mt 2508 4703 L
+2508 4703 mt 2496 4707 L
+2496 4707 mt 2461 4717 L
+2461 4717 mt 2426 4727 L
+2426 4727 mt 2412 4730 L
+2412 4730 mt 2391 4735 L
+2391 4735 mt 2356 4741 L
+2356 4741 mt 2321 4747 L
+2321 4747 mt 2286 4751 L
+2286 4751 mt 2251 4754 L
+2251 4754 mt 2217 4756 L
+2217 4756 mt 2182 4757 L
+2182 4757 mt 2147 4756 L
+2147 4756 mt 2112 4754 L
+2112 4754 mt 2077 4751 L
+2077 4751 mt 2042 4746 L
+2042 4746 mt 2007 4741 L
+2007 4741 mt 1972 4733 L
+1972 4733 mt 1959 4730 L
+1959 4730 mt 1938 4725 L
+1938 4725 mt 1903 4715 L
+1903 4715 mt 1868 4703 L
+1868 4703 mt 1866 4703 L
+1866 4703 mt 1833 4689 L
+1833 4689 mt 1802 4675 L
+1802 4675 mt 1798 4673 L
+1798 4673 mt 1763 4653 L
+1763 4653 mt 1755 4648 L
+1755 4648 mt 1728 4627 L
+1728 4627 mt 1721 4620 L
+1721 4620 mt 1701 4592 L
+1701 4592 mt 1694 4576 L
+1694 4576 mt 1688 4565 L
+1688 4565 mt 1679 4537 L
+1679 4537 mt 1672 4510 L
+1672 4510 mt 1671 4482 L
+1671 4482 mt 1674 4455 L
+1674 4455 mt 1680 4427 L
+1680 4427 mt 1691 4400 L
+1691 4400 mt 1694 4392 L
+1694 4392 mt 1703 4372 L
+1703 4372 mt 1705 4345 L
+1705 4345 mt 1694 4320 L
+1694 4320 mt 1693 4317 L
+1693 4317 mt 1671 4290 L
+1671 4290 mt 1659 4279 L
+1659 4279 mt 1641 4262 L
+1641 4262 mt 1624 4247 L
+1624 4247 mt 1612 4235 L
+1612 4235 mt 1591 4207 L
+1591 4207 mt 1589 4203 L
+1589 4203 mt 1582 4180 L
+1582 4180 mt 1580 4152 L
+1580 4152 mt 1584 4125 L
+1584 4125 mt 1589 4112 L
+6715 1896 mt 6715 1896 L
+6715 1896 mt 6717 1924 L
+6717 1924 mt 6720 1951 L
+6720 1951 mt 6721 1979 L
+6721 1979 mt 6722 2006 L
+6722 2006 mt 6722 2034 L
+6722 2034 mt 6721 2061 L
+6721 2061 mt 6719 2089 L
+6719 2089 mt 6717 2116 L
+6717 2116 mt 6715 2138 L
+6715 2138 mt 6714 2144 L
+6714 2144 mt 6711 2171 L
+6711 2171 mt 6706 2199 L
+6706 2199 mt 6701 2226 L
+6701 2226 mt 6695 2254 L
+6695 2254 mt 6689 2281 L
+6689 2281 mt 6681 2309 L
+6681 2309 mt 6680 2314 L
+6680 2314 mt 6674 2336 L
+6674 2336 mt 6665 2364 L
+6665 2364 mt 6656 2391 L
+6656 2391 mt 6646 2419 L
+6646 2419 mt 6645 2421 L
+6645 2421 mt 6635 2446 L
+6635 2446 mt 6623 2474 L
+6623 2474 mt 6611 2502 L
+6611 2502 mt 6610 2503 L
+6610 2503 mt 6597 2529 L
+6597 2529 mt 6582 2557 L
+6582 2557 mt 6575 2569 L
+6575 2569 mt 6567 2584 L
+6567 2584 mt 6550 2612 L
+6550 2612 mt 6540 2626 L
+6540 2626 mt 6531 2639 L
+6531 2639 mt 6511 2667 L
+6511 2667 mt 6506 2674 L
+6506 2674 mt 6490 2694 L
+6490 2694 mt 6471 2717 L
+6471 2717 mt 6467 2722 L
+6467 2722 mt 6442 2749 L
+6442 2749 mt 6436 2756 L
+6436 2756 mt 6416 2777 L
+6416 2777 mt 6401 2793 L
+6401 2793 mt 6389 2804 L
+6389 2804 mt 6366 2828 L
+6366 2828 mt 6362 2832 L
+6362 2832 mt 6335 2859 L
+6335 2859 mt 6331 2863 L
+6331 2863 mt 6306 2887 L
+6306 2887 mt 6296 2897 L
+6296 2897 mt 6274 2914 L
+6274 2914 mt 6261 2926 L
+6261 2926 mt 6236 2942 L
+6236 2942 mt 6227 2950 L
+6227 2950 mt 6195 2969 L
+6195 2969 mt 6192 2973 L
+6192 2973 mt 6157 2990 L
+6157 2990 mt 6122 2981 L
+6122 2981 mt 6101 2969 L
+6101 2969 mt 6087 2967 L
+6087 2967 mt 6052 2964 L
+6052 2964 mt 6017 2966 L
+6017 2966 mt 6009 2969 L
+6009 2969 mt 5983 2987 L
+5983 2987 mt 5968 2997 L
+5968 2997 mt 5948 3013 L
+5948 3013 mt 5920 3024 L
+5920 3024 mt 5913 3028 L
+5913 3028 mt 5878 3030 L
+5878 3030 mt 5858 3024 L
+5858 3024 mt 5843 3021 L
+5843 3021 mt 5808 3003 L
+5808 3003 mt 5801 2997 L
+5801 2997 mt 5773 2979 L
+5773 2979 mt 5762 2969 L
+5762 2969 mt 5738 2955 L
+5738 2955 mt 5719 2942 L
+5719 2942 mt 5704 2933 L
+5704 2933 mt 5672 2914 L
+5672 2914 mt 5669 2912 L
+5669 2912 mt 5634 2888 L
+5634 2888 mt 5632 2887 L
+5632 2887 mt 5601 2859 L
+5601 2859 mt 5599 2857 L
+5599 2857 mt 5573 2832 L
+5573 2832 mt 5564 2823 L
+5564 2823 mt 5544 2804 L
+5544 2804 mt 5529 2789 L
+5529 2789 mt 5517 2777 L
+5517 2777 mt 5497 2749 L
+5497 2749 mt 5494 2744 L
+5494 2744 mt 5483 2722 L
+5483 2722 mt 5475 2694 L
+5475 2694 mt 5471 2667 L
+5471 2667 mt 5473 2639 L
+5473 2639 mt 5478 2612 L
+5478 2612 mt 5486 2584 L
+5486 2584 mt 5494 2563 L
+5494 2563 mt 5497 2557 L
+5497 2557 mt 5506 2529 L
+5506 2529 mt 5514 2502 L
+5514 2502 mt 5518 2474 L
+5518 2474 mt 5519 2446 L
+5519 2446 mt 5519 2419 L
+5519 2419 mt 5519 2391 L
+5519 2391 mt 5520 2364 L
+5520 2364 mt 5520 2336 L
+5520 2336 mt 5520 2309 L
+5520 2309 mt 5518 2281 L
+5518 2281 mt 5511 2254 L
+5511 2254 mt 5501 2226 L
+5501 2226 mt 5494 2209 L
+5494 2209 mt 5489 2199 L
+5489 2199 mt 5476 2171 L
+5476 2171 mt 5465 2144 L
+5465 2144 mt 5459 2129 L
+5459 2129 mt 5454 2116 L
+5454 2116 mt 5444 2089 L
+5444 2089 mt 5434 2061 L
+5434 2061 mt 5425 2035 L
+5425 2035 mt 5424 2034 L
+5424 2034 mt 5409 2006 L
+5409 2006 mt 5393 1979 L
+5393 1979 mt 5390 1974 L
+5390 1974 mt 5373 1951 L
+5373 1951 mt 5355 1930 L
+5355 1930 mt 5350 1924 L
+5350 1924 mt 5320 1896 L
+5320 1896 mt 5320 1896 L
+5320 1896 mt 5285 1872 L
+5285 1872 mt 5279 1869 L
+5279 1869 mt 5250 1852 L
+5250 1852 mt 5227 1841 L
+5227 1841 mt 5215 1836 L
+5215 1836 mt 5181 1827 L
+5181 1827 mt 5146 1823 L
+5146 1823 mt 5111 1823 L
+5111 1823 mt 5076 1826 L
+5076 1826 mt 5041 1832 L
+5041 1832 mt 5006 1839 L
+5006 1839 mt 4995 1841 L
+4995 1841 mt 4971 1847 L
+4971 1847 mt 4936 1855 L
+4936 1855 mt 4902 1858 L
+4902 1858 mt 4867 1851 L
+4867 1851 mt 4850 1841 L
+4850 1841 mt 4832 1823 L
+4832 1823 mt 4827 1814 L
+4827 1814 mt 4823 1786 L
+4823 1786 mt 4827 1759 L
+4827 1759 mt 4832 1742 L
+4832 1742 mt 4835 1731 L
+4835 1731 mt 4844 1704 L
+4844 1704 mt 4854 1676 L
+4854 1676 mt 4861 1649 L
+4861 1649 mt 4862 1621 L
+4862 1621 mt 4853 1594 L
+4853 1594 mt 4832 1573 L
+4832 1573 mt 4819 1566 L
+4819 1566 mt 4797 1559 L
+4797 1559 mt 4762 1554 L
+4762 1554 mt 4727 1554 L
+4727 1554 mt 4692 1553 L
+4692 1553 mt 4657 1553 L
+4657 1553 mt 4623 1550 L
+4623 1550 mt 4588 1545 L
+4588 1545 mt 4567 1539 L
+4567 1539 mt 4553 1533 L
+4553 1533 mt 4519 1511 L
+4519 1511 mt 4518 1510 L
+4518 1510 mt 4497 1484 L
+4497 1484 mt 4483 1457 L
+4483 1457 mt 4483 1456 L
+4483 1456 mt 4470 1428 L
+4470 1428 mt 4455 1401 L
+4455 1401 mt 4448 1390 L
+4448 1390 mt 4435 1373 L
+4435 1373 mt 4413 1354 L
+4413 1354 mt 4401 1346 L
+4401 1346 mt 4379 1332 L
+4379 1332 mt 4350 1318 L
+4350 1318 mt 4344 1315 L
+4344 1315 mt 4309 1299 L
+4309 1299 mt 4287 1291 L
+4287 1291 mt 4274 1284 L
+4274 1284 mt 4239 1267 L
+4239 1267 mt 4233 1263 L
+4233 1263 mt 4204 1241 L
+4204 1241 mt 4200 1236 L
+4200 1236 mt 4184 1208 L
+4184 1208 mt 4169 1183 L
+4169 1183 mt 4168 1181 L
+4168 1181 mt 4146 1153 L
+4146 1153 mt 4134 1142 L
+4134 1142 mt 4117 1126 L
+4117 1126 mt 4100 1113 L
+4100 1113 mt 4080 1098 L
+4080 1098 mt 4065 1089 L
+4065 1089 mt 4032 1071 L
+4032 1071 mt 4030 1070 L
+4030 1070 mt 3995 1054 L
+3995 1054 mt 3968 1043 L
+3968 1043 mt 3960 1041 L
+3960 1041 mt 3925 1030 L
+3925 1030 mt 3890 1021 L
+3890 1021 mt 3871 1016 L
+3871 1016 mt 3855 1012 L
+3855 1012 mt 3821 1002 L
+3821 1002 mt 3786  992 L
+3786  992 mt 3774  988 L
+3774  988 mt 3751  980 L
+3751  980 mt 3716  966 L
+3716  966 mt 3704  961 L
+3704  961 mt 3681  949 L
+3681  949 mt 3652  933 L
+3652  933 mt 3646  930 L
+3646  930 mt 3611  906 L
+3611  906 mt 3611  906 L
+3611  906 mt 3577  878 L
+3577  878 mt 3577  878 L
+3577  878 mt 3548  851 L
+3548  851 mt 3542  844 L
+3542  844 mt 3523  823 L
+3523  823 mt 3507  801 L
+3507  801 mt 3503  796 L
+3503  796 mt 3484  768 L
+3484  768 mt 3472  754 L
+3472  754 mt 3460  741 L
+3460  741 mt 3437  718 L
+3437  718 mt 3433  713 L
+3433  713 mt 3402  688 L
+3402  688 mt 3399  686 L
+3399  686 mt 3367  663 L
+3367  663 mt 3360  658 L
+3360  658 mt 3332  643 L
+3332  643 mt 3310  631 L
+3310  631 mt 3298  625 L
+3298  625 mt 3263  611 L
+3263  611 mt 3240  603 L
+3240  603 mt 3228  599 L
+3228  599 mt 3193  589 L
+3193  589 mt 3158  581 L
+3158  581 mt 3137  576 L
+3137  576 mt 3123  573 L
+3123  573 mt 3088  567 L
+3088  567 mt 3053  562 L
+3053  562 mt 3019  559 L
+3019  559 mt 2984  557 L
+2984  557 mt 2949  557 L
+2949  557 mt 2914  558 L
+2914  558 mt 2879  561 L
+2879  561 mt 2844  565 L
+2844  565 mt 2809  570 L
+2809  570 mt 2775  576 L
+2775  576 mt 2774  576 L
+2774  576 mt 2740  583 L
+2740  583 mt 2705  590 L
+2705  590 mt 2670  598 L
+2670  598 mt 2638  603 L
+2638  603 mt 2635  604 L
+2635  604 mt 2600  607 L
+2600  607 mt 2565  608 L
+2565  608 mt 2530  607 L
+2530  607 mt 2496  607 L
+2496  607 mt 2461  610 L
+2461  610 mt 2426  614 L
+2426  614 mt 2391  620 L
+2391  620 mt 2356  626 L
+2356  626 mt 2327  631 L
+2327  631 mt 2321  632 L
+2321  632 mt 2286  638 L
+2286  638 mt 2251  643 L
+2251  643 mt 2217  647 L
+2217  647 mt 2182  650 L
+2182  650 mt 2147  651 L
+2147  651 mt 2112  652 L
+2112  652 mt 2077  652 L
+2077  652 mt 2042  653 L
+2042  653 mt 2007  656 L
+2007  656 mt 1994  658 L
+1994  658 mt 1972  661 L
+1972  661 mt 1938  669 L
+1938  669 mt 1903  678 L
+1903  678 mt 1879  686 L
+1879  686 mt 1868  689 L
+1868  689 mt 1833  699 L
+1833  699 mt 1798  708 L
+1798  708 mt 1777  713 L
+1777  713 mt 1763  717 L
+1763  717 mt 1728  724 L
+1728  724 mt 1694  730 L
+1694  730 mt 1659  737 L
+1659  737 mt 1644  741 L
+1644  741 mt 1624  748 L
+1624  748 mt 1589  767 L
+1589  767 mt 1587  768 L
+1587  768 mt 1560  796 L
+1560  796 mt 1554  806 L
+1554  806 mt 1544  823 L
+1544  823 mt 1532  851 L
+1532  851 mt 1521  878 L
+1521  878 mt 1519  883 L
+1519  883 mt 1510  906 L
+1510  906 mt 1496  933 L
+1496  933 mt 1484  949 L
+1484  949 mt 1476  961 L
+1476  961 mt 1449  987 L
+1449  987 mt 1448  988 L
+1448  988 mt 1415 1016 L
+1415 1016 mt 1415 1016 L
+1415 1016 mt 1380 1043 L
+1380 1043 mt 1379 1043 L
+1379 1043 mt 1346 1071 L
+1346 1071 mt 1345 1073 L
+1345 1073 mt 1327 1098 L
+1327 1098 mt 1318 1126 L
+1318 1126 mt 1315 1153 L
+1315 1153 mt 1316 1181 L
+1316 1181 mt 1318 1208 L
+1318 1208 mt 1320 1236 L
+1320 1236 mt 1323 1263 L
+1323 1263 mt 1327 1291 L
+1327 1291 mt 1330 1318 L
+1330 1318 mt 1328 1346 L
+1328 1346 mt 1311 1373 L
+1311 1373 mt 1310 1374 L
+1310 1374 mt 1275 1395 L
+1275 1395 mt 1260 1401 L
+1260 1401 mt 1240 1408 L
+1240 1408 mt 1205 1422 L
+1205 1422 mt 1191 1428 L
+1191 1428 mt 1170 1439 L
+1170 1439 mt 1145 1456 L
+1145 1456 mt 1136 1463 L
+1136 1463 mt 1116 1484 L
+1116 1484 mt 1101 1504 L
+1101 1504 mt 1097 1511 L
+1097 1511 mt 1085 1539 L
+1085 1539 mt 1079 1566 L
+1079 1566 mt 1077 1594 L
+1077 1594 mt 1077 1621 L
+1077 1621 mt 1080 1649 L
+1080 1649 mt 1084 1676 L
+1084 1676 mt 1090 1704 L
+1090 1704 mt 1097 1731 L
+1097 1731 mt 1101 1745 L
+1101 1745 mt 1105 1759 L
+1105 1759 mt 1115 1786 L
+1115 1786 mt 1126 1814 L
+1126 1814 mt 1136 1836 L
+1136 1836 mt 1138 1841 L
+1138 1841 mt 1152 1869 L
+1152 1869 mt 1168 1896 L
+1168 1896 mt 1170 1900 L
+1170 1900 mt 1186 1924 L
+1186 1924 mt 1205 1951 L
+1205 1951 mt 1205 1952 L
+1205 1952 mt 1225 1979 L
+1225 1979 mt 1240 2002 L
+1240 2002 mt 1243 2006 L
+1243 2006 mt 1260 2034 L
+1260 2034 mt 1275 2060 L
+1275 2060 mt 1276 2061 L
+1276 2061 mt 1291 2089 L
+1291 2089 mt 1309 2116 L
+1309 2116 mt 1310 2118 L
+1310 2118 mt 1328 2144 L
+1328 2144 mt 1345 2165 L
+1345 2165 mt 1349 2171 L
+1349 2171 mt 1369 2199 L
+1369 2199 mt 1380 2211 L
+1380 2211 mt 1389 2226 L
+1389 2226 mt 1409 2254 L
+1409 2254 mt 1415 2259 L
+1415 2259 mt 1435 2281 L
+1435 2281 mt 1449 2293 L
+1449 2293 mt 1471 2309 L
+1471 2309 mt 1484 2318 L
+1484 2318 mt 1513 2336 L
+1513 2336 mt 1519 2341 L
+1519 2341 mt 1554 2362 L
+1554 2362 mt 1557 2364 L
+1557 2364 mt 1589 2384 L
+1589 2384 mt 1603 2391 L
+1603 2391 mt 1624 2406 L
+1624 2406 mt 1644 2419 L
+1644 2419 mt 1659 2432 L
+1659 2432 mt 1675 2446 L
+1675 2446 mt 1691 2474 L
+1691 2474 mt 1688 2502 L
+1688 2502 mt 1678 2529 L
+1678 2529 mt 1668 2557 L
+1668 2557 mt 1659 2581 L
+1659 2581 mt 1657 2584 L
+1657 2584 mt 1648 2612 L
+1648 2612 mt 1642 2639 L
+1642 2639 mt 1642 2667 L
+1642 2667 mt 1651 2694 L
+1651 2694 mt 1659 2705 L
+1659 2705 mt 1673 2722 L
+1673 2722 mt 1694 2739 L
+1694 2739 mt 1711 2749 L
+1711 2749 mt 1728 2759 L
+1728 2759 mt 1763 2775 L
+1763 2775 mt 1768 2777 L
+1768 2777 mt 1798 2790 L
+1798 2790 mt 1828 2804 L
+1828 2804 mt 1833 2807 L
+1833 2807 mt 1868 2827 L
+1868 2827 mt 1876 2832 L
+1876 2832 mt 1903 2854 L
+1903 2854 mt 1908 2859 L
+1908 2859 mt 1924 2887 L
+1924 2887 mt 1930 2914 L
+1930 2914 mt 1932 2942 L
+1932 2942 mt 1935 2969 L
+1935 2969 mt 1938 2981 L
+1938 2981 mt 1940 2997 L
+1940 2997 mt 1946 3024 L
+1946 3024 mt 1952 3052 L
+1952 3052 mt 1960 3079 L
+1960 3079 mt 1972 3107 L
+1972 3107 mt 1972 3108 L
+1972 3108 mt 1987 3134 L
+1987 3134 mt 2005 3162 L
+2005 3162 mt 2007 3164 L
+2007 3164 mt 2029 3189 L
+2029 3189 mt 2042 3202 L
+2042 3202 mt 2057 3217 L
+2057 3217 mt 2077 3235 L
+2077 3235 mt 2087 3244 L
+2087 3244 mt 2112 3267 L
+2112 3267 mt 2118 3272 L
+2118 3272 mt 2147 3296 L
+2147 3296 mt 2151 3299 L
+2151 3299 mt 2182 3322 L
+2182 3322 mt 2188 3327 L
+2188 3327 mt 2217 3347 L
+2217 3347 mt 2226 3354 L
+2226 3354 mt 2251 3375 L
+2251 3375 mt 2260 3382 L
+2260 3382 mt 2286 3404 L
+2286 3404 mt 2292 3409 L
+2292 3409 mt 2321 3434 L
+2321 3434 mt 2325 3437 L
+2325 3437 mt 2356 3464 L
+2356 3464 mt 2357 3464 L
+2357 3464 mt 2385 3492 L
+2385 3492 mt 2391 3499 L
+2391 3499 mt 2407 3519 L
+2407 3519 mt 2424 3547 L
+2424 3547 mt 2426 3550 L
+2426 3550 mt 2436 3575 L
+2436 3575 mt 2443 3602 L
+2443 3602 mt 2445 3630 L
+2445 3630 mt 2437 3657 L
+2437 3657 mt 2426 3670 L
+2426 3670 mt 2414 3685 L
+2414 3685 mt 2391 3701 L
+2391 3701 mt 2374 3712 L
+2374 3712 mt 2356 3722 L
+2356 3722 mt 2323 3740 L
+2323 3740 mt 2321 3740 L
+2321 3740 mt 2286 3758 L
+2286 3758 mt 2265 3767 L
+2265 3767 mt 2251 3773 L
+2251 3773 mt 2217 3787 L
+2217 3787 mt 2186 3795 L
+2186 3795 mt 2182 3796 L
+2182 3796 mt 2147 3799 L
+2147 3799 mt 2124 3795 L
+2124 3795 mt 2112 3792 L
+2112 3792 mt 2077 3775 L
+2077 3775 mt 2067 3767 L
+2067 3767 mt 2042 3747 L
+2042 3747 mt 2034 3740 L
+2034 3740 mt 2011 3712 L
+2011 3712 mt 2007 3705 L
+2007 3705 mt 1996 3685 L
+1996 3685 mt 1986 3657 L
+1986 3657 mt 1978 3630 L
+1978 3630 mt 1972 3607 L
+1972 3607 mt 1971 3602 L
+1971 3602 mt 1963 3575 L
+1963 3575 mt 1953 3547 L
+1953 3547 mt 1942 3519 L
+1942 3519 mt 1938 3510 L
+1938 3510 mt 1929 3492 L
+1929 3492 mt 1914 3464 L
+1914 3464 mt 1903 3443 L
+1903 3443 mt 1899 3437 L
+1899 3437 mt 1883 3409 L
+1883 3409 mt 1868 3386 L
+1868 3386 mt 1865 3382 L
+1865 3382 mt 1847 3354 L
+1847 3354 mt 1833 3333 L
+1833 3333 mt 1829 3327 L
+1829 3327 mt 1810 3299 L
+1810 3299 mt 1798 3285 L
+1798 3285 mt 1786 3272 L
+1786 3272 mt 1763 3252 L
+1763 3252 mt 1754 3244 L
+1754 3244 mt 1728 3226 L
+1728 3226 mt 1715 3217 L
+1715 3217 mt 1694 3204 L
+1694 3204 mt 1667 3189 L
+1667 3189 mt 1659 3185 L
+1659 3185 mt 1624 3171 L
+1624 3171 mt 1598 3162 L
+1598 3162 mt 1589 3159 L
+1589 3159 mt 1554 3149 L
+1554 3149 mt 1519 3139 L
+1519 3139 mt 1503 3134 L
+1503 3134 mt 1484 3129 L
+1484 3129 mt 1449 3119 L
+1449 3119 mt 1415 3111 L
+1415 3111 mt 1396 3107 L
+1396 3107 mt 1380 3103 L
+1380 3103 mt 1345 3095 L
+1345 3095 mt 1310 3088 L
+1310 3088 mt 1275 3082 L
+1275 3082 mt 1258 3079 L
+1258 3079 mt 1240 3077 L
+1240 3077 mt 1205 3068 L
+1205 3068 mt 1170 3054 L
+1170 3054 mt 1165 3052 L
+1165 3052 mt 1136 3038 L
+1136 3038 mt 1109 3024 L
+1109 3024 mt 1101 3020 L
+1101 3020 mt 1066 3001 L
+1066 3001 mt 1059 2997 L
+1059 2997 mt 1031 2982 L
+1031 2982 mt 1004 2969 L
+1004 2969 mt  996 2965 L
+ 996 2965 mt  961 2949 L
+ 961 2949 mt  947 2942 L
+ 947 2942 mt  926 2932 L
+ 926 2932 mt  892 2914 L
+ 892 2914 mt  892 2914 L
+ 892 2914 mt  857 2893 L
+ 857 2893 mt  847 2887 L
+ 847 2887 mt  822 2869 L
+ 822 2869 mt  809 2859 L
+ 809 2859 mt  787 2839 L
+ 787 2839 mt  779 2832 L
+ 779 2832 mt  753 2804 L
+ 753 2804 mt  752 2803 L
+ 752 2803 mt  730 2777 L
+ 730 2777 mt  717 2758 L
+ 717 2758 mt  711 2749 L
+ 711 2749 mt  694 2722 L
+ 694 2722 mt  682 2698 L
+ 682 2698 mt  680 2694 L
+ 680 2694 mt  667 2667 L
+ 667 2667 mt  657 2639 L
+ 657 2639 mt  648 2612 L
+ 648 2612 mt  647 2609 L
+ 647 2609 mt  640 2584 L
+ 640 2584 mt  634 2557 L
+ 634 2557 mt  629 2529 L
+ 629 2529 mt  626 2502 L
+ 626 2502 mt  624 2474 L
+ 624 2474 mt  623 2446 L
+ 623 2446 mt  623 2419 L
+ 623 2419 mt  624 2391 L
+ 624 2391 mt  627 2364 L
+ 627 2364 mt  630 2336 L
+ 630 2336 mt  635 2309 L
+ 635 2309 mt  641 2281 L
+ 641 2281 mt  647 2258 L
+ 647 2258 mt  648 2254 L
+ 648 2254 mt  657 2226 L
+ 657 2226 mt  667 2199 L
+ 667 2199 mt  677 2171 L
+ 677 2171 mt  682 2159 L
+ 682 2159 mt  689 2144 L
+ 689 2144 mt  700 2116 L
+ 700 2116 mt  712 2089 L
+ 712 2089 mt  717 2075 L
+ 717 2075 mt  723 2061 L
+ 723 2061 mt  734 2034 L
+ 734 2034 mt  743 2006 L
+ 743 2006 mt  751 1979 L
+ 751 1979 mt  752 1976 L
+ 752 1976 mt  758 1951 L
+ 758 1951 mt  762 1924 L
+ 762 1924 mt  765 1896 L
+ 765 1896 mt  766 1869 L
+ 766 1869 mt  765 1841 L
+ 765 1841 mt  765 1814 L
+ 765 1814 mt  764 1786 L
+ 764 1786 mt  764 1759 L
+ 764 1759 mt  765 1731 L
+ 765 1731 mt  767 1704 L
+ 767 1704 mt  769 1676 L
+ 769 1676 mt  773 1649 L
+ 773 1649 mt  777 1621 L
+ 777 1621 mt  780 1594 L
+ 780 1594 mt  783 1566 L
+ 783 1566 mt  785 1539 L
+ 785 1539 mt  784 1511 L
+ 784 1511 mt  782 1484 L
+ 782 1484 mt  779 1456 L
+ 779 1456 mt  775 1428 L
+ 775 1428 mt  771 1401 L
+ 771 1401 mt  768 1373 L
+ 768 1373 mt  766 1346 L
+ 766 1346 mt  764 1318 L
+ 764 1318 mt  763 1291 L
+ 763 1291 mt  763 1263 L
+ 763 1263 mt  763 1236 L
+ 763 1236 mt  763 1208 L
+ 763 1208 mt  764 1181 L
+ 764 1181 mt  767 1153 L
+ 767 1153 mt  771 1126 L
+ 771 1126 mt  776 1098 L
+ 776 1098 mt  781 1071 L
+ 781 1071 mt  786 1043 L
+ 786 1043 mt  787 1040 L
+ 787 1040 mt  792 1016 L
+ 792 1016 mt  797  988 L
+ 797  988 mt  801  961 L
+ 801  961 mt  806  933 L
+ 806  933 mt  812  906 L
+ 812  906 mt  819  878 L
+ 819  878 mt  822  870 L
+ 822  870 mt  828  851 L
+ 828  851 mt  840  823 L
+ 840  823 mt  853  796 L
+ 853  796 mt  857  789 L
+ 857  789 mt  868  768 L
+ 868  768 mt  885  741 L
+ 885  741 mt  892  730 L
+ 892  730 mt  903  713 L
+ 903  713 mt  923  686 L
+ 923  686 mt  926  682 L
+ 926  682 mt  945  658 L
+ 945  658 mt  961  635 L
+ 961  635 mt  965  631 L
+ 965  631 mt  984  603 L
+ 984  603 mt  996  585 L
+ 996  585 mt 1002  576 L
+1002  576 mt 1023  548 L
+1023  548 mt 1031  538 L
+1031  538 mt 1046  521 L
+1046  521 mt 1066  500 L
+1066  500 mt 1073  493 L
+1073  493 mt 1101  470 L
+1101  470 mt 1107  466 L
+1107  466 mt 1136  445 L
+1136  445 mt 1147  438 L
+1147  438 mt 1170  424 L
+1170  424 mt 1195  411 L
+1195  411 mt 1205  405 L
+1205  405 mt 1240  390 L
+1240  390 mt 1261  383 L
+1261  383 mt 1275  378 L
+1275  378 mt 1310  370 L
+1310  370 mt 1345  365 L
+1345  365 mt 1380  365 L
+1380  365 mt 1415  366 L
+1415  366 mt 1449  368 L
+1449  368 mt 1484  369 L
+1484  369 mt 1519  370 L
+1519  370 mt 1554  369 L
+1554  369 mt 1589  367 L
+1589  367 mt 1624  363 L
+1624  363 mt 1659  359 L
+1659  359 mt 1677  355 L
+1677  355 mt 1694  353 L
+1694  353 mt 1728  346 L
+1728  346 mt 1763  339 L
+1763  339 mt 1798  332 L
+1798  332 mt 1820  328 L
+1820  328 mt 1833  326 L
+1833  326 mt 1868  321 L
+1868  321 mt 1903  318 L
+1903  318 mt 1938  317 L
+1938  317 mt 1972  319 L
+1972  319 mt 2007  322 L
+2007  322 mt 2042  326 L
+2042  326 mt 2065  328 L
+2065  328 mt 2077  329 L
+2077  329 mt 2112  332 L
+2112  332 mt 2147  334 L
+2147  334 mt 2182  334 L
+2182  334 mt 2217  333 L
+2217  333 mt 2251  330 L
+2251  330 mt 2271  328 L
+2271  328 mt 2286  327 L
+2286  327 mt 2321  323 L
+2321  323 mt 2356  319 L
+2356  319 mt 2391  315 L
+2391  315 mt 2426  312 L
+2426  312 mt 2461  311 L
+2461  311 mt 2496  310 L
+2496  310 mt 2530  310 L
+2530  310 mt 2565  311 L
+2565  311 mt 2600  310 L
+2600  310 mt 2635  308 L
+2635  308 mt 2670  305 L
+2670  305 mt 2699  300 L
+2699  300 mt 2705  300 L
+2705  300 mt 2740  295 L
+2740  295 mt 2774  291 L
+2774  291 mt 2809  288 L
+2809  288 mt 2844  286 L
+2844  286 mt 2879  286 L
+2879  286 mt 2914  285 L
+2914  285 mt 2949  286 L
+2949  286 mt 2984  286 L
+2984  286 mt 3019  286 L
+3019  286 mt 3053  285 L
+3053  285 mt 3088  285 L
+3088  285 mt 3123  283 L
+3123  283 mt 3158  281 L
+3158  281 mt 3193  278 L
+3193  278 mt 3228  274 L
+3228  274 mt 3236  273 L
+3236  273 mt 3263  269 L
+3263  269 mt 3298  263 L
+3298  263 mt 3332  256 L
+3332  256 mt 3367  249 L
+3367  249 mt 3386  245 L
+3386  245 mt 3402  242 L
+3402  242 mt 3437  235 L
+3437  235 mt 3472  229 L
+3472  229 mt 3507  222 L
+3507  222 mt 3531  218 L
+3531  218 mt 3542  216 L
+3542  216 mt 3577  210 L
+3577  210 mt 3611  203 L
+3611  203 mt 3646  197 L
+3646  197 mt 3681  190 L
+3681  190 mt 3681  190 L
+3681  190 mt 3716  184 L
+3716  184 mt 3751  178 L
+3751  178 mt 3786  171 L
+3786  171 mt 3821  165 L
+3821  165 mt 3830  163 L
+3830  163 mt 3855  158 L
+3855  158 mt 3890  152 L
+3890  152 mt 3925  145 L
+3925  145 mt 3960  139 L
+3960  139 mt 3979  135 L
+3979  135 mt 3995  133 L
+3995  133 mt 4030  126 L
+4030  126 mt 4065  120 L
+4065  120 mt 4100  114 L
+4100  114 mt 4134  108 L
+4134  108 mt 4136  108 L
+4136  108 mt 4169  102 L
+4169  102 mt 4204   97 L
+4204   97 mt 4239   92 L
+4239   92 mt 4274   87 L
+4274   87 mt 4309   83 L
+4309   83 mt 4328   80 L
+4328   80 mt 4344   79 L
+4344   79 mt 4379   75 L
+4379   75 mt 4413   72 L
+4413   72 mt 4448   69 L
+4448   69 mt 4483   67 L
+4483   67 mt 4518   66 L
+4518   66 mt 4553   64 L
+4553   64 mt 4588   64 L
+4588   64 mt 4623   63 L
+4623   63 mt 4657   64 L
+4657   64 mt 4692   64 L
+4692   64 mt 4727   65 L
+4727   65 mt 4762   67 L
+4762   67 mt 4797   69 L
+4797   69 mt 4832   72 L
+4832   72 mt 4867   75 L
+4867   75 mt 4902   79 L
+4902   79 mt 4908   80 L
+4908   80 mt 4936   84 L
+4936   84 mt 4971   90 L
+4971   90 mt 5006   96 L
+5006   96 mt 5041  103 L
+5041  103 mt 5062  108 L
+5062  108 mt 5076  111 L
+5076  111 mt 5111  120 L
+5111  120 mt 5146  130 L
+5146  130 mt 5164  135 L
+5164  135 mt 5181  141 L
+5181  141 mt 5215  153 L
+5215  153 mt 5240  163 L
+5240  163 mt 5250  167 L
+5250  167 mt 5285  182 L
+5285  182 mt 5302  190 L
+5302  190 mt 5320  199 L
+5320  199 mt 5355  218 L
+5355  218 mt 5355  218 L
+5355  218 mt 5390  239 L
+5390  239 mt 5401  245 L
+5401  245 mt 5425  261 L
+5425  261 mt 5442  273 L
+5442  273 mt 5459  285 L
+5459  285 mt 5480  300 L
+5480  300 mt 5494  311 L
+5494  311 mt 5516  328 L
+5516  328 mt 5529  339 L
+5529  339 mt 5549  355 L
+5549  355 mt 5564  368 L
+5564  368 mt 5581  383 L
+5581  383 mt 5599  399 L
+5599  399 mt 5612  411 L
+5612  411 mt 5634  430 L
+5634  430 mt 5642  438 L
+5642  438 mt 5669  463 L
+5669  463 mt 5672  466 L
+5672  466 mt 5700  493 L
+5700  493 mt 5704  496 L
+5704  496 mt 5728  521 L
+5728  521 mt 5738  531 L
+5738  531 mt 5755  548 L
+5755  548 mt 5773  567 L
+5773  567 mt 5782  576 L
+5782  576 mt 5808  603 L
+5808  603 mt 5809  603 L
+5809  603 mt 5834  631 L
+5834  631 mt 5843  640 L
+5843  640 mt 5860  658 L
+5860  658 mt 5878  677 L
+5878  677 mt 5886  686 L
+5886  686 mt 5911  713 L
+5911  713 mt 5913  715 L
+5913  715 mt 5936  741 L
+5936  741 mt 5948  753 L
+5948  753 mt 5961  768 L
+5961  768 mt 5983  791 L
+5983  791 mt 5987  796 L
+5987  796 mt 6012  823 L
+6012  823 mt 6017  829 L
+6017  829 mt 6037  851 L
+6037  851 mt 6052  868 L
+6052  868 mt 6062  878 L
+6062  878 mt 6087  906 L
+6087  906 mt 6087  906 L
+6087  906 mt 6112  933 L
+6112  933 mt 6122  944 L
+6122  944 mt 6137  961 L
+6137  961 mt 6157  983 L
+6157  983 mt 6162  988 L
+6162  988 mt 6187 1016 L
+6187 1016 mt 6192 1021 L
+6192 1021 mt 6212 1043 L
+6212 1043 mt 6227 1059 L
+6227 1059 mt 6237 1071 L
+6237 1071 mt 6261 1098 L
+6261 1098 mt 6262 1098 L
+6262 1098 mt 6287 1126 L
+6287 1126 mt 6296 1136 L
+6296 1136 mt 6312 1153 L
+6312 1153 mt 6331 1174 L
+6331 1174 mt 6337 1181 L
+6337 1181 mt 6362 1208 L
+6362 1208 mt 6366 1213 L
+6366 1213 mt 6386 1236 L
+6386 1236 mt 6401 1253 L
+6401 1253 mt 6410 1263 L
+6410 1263 mt 6434 1291 L
+6434 1291 mt 6436 1293 L
+6436 1293 mt 6457 1318 L
+6457 1318 mt 6471 1336 L
+6471 1336 mt 6479 1346 L
+6479 1346 mt 6500 1373 L
+6500 1373 mt 6506 1380 L
+6506 1380 mt 6521 1401 L
+6521 1401 mt 6540 1428 L
+6540 1428 mt 6540 1429 L
+6540 1429 mt 6559 1456 L
+6559 1456 mt 6575 1483 L
+6575 1483 mt 6576 1484 L
+6576 1484 mt 6592 1511 L
+6592 1511 mt 6607 1539 L
+6607 1539 mt 6610 1544 L
+6610 1544 mt 6621 1566 L
+6621 1566 mt 6634 1594 L
+6634 1594 mt 6645 1618 L
+6645 1618 mt 6646 1621 L
+6646 1621 mt 6657 1649 L
+6657 1649 mt 6667 1676 L
+6667 1676 mt 6676 1704 L
+6676 1704 mt 6680 1717 L
+6680 1717 mt 6684 1731 L
+6684 1731 mt 6691 1759 L
+6691 1759 mt 6697 1786 L
+6697 1786 mt 6703 1814 L
+6703 1814 mt 6708 1841 L
+6708 1841 mt 6711 1869 L
+6711 1869 mt 6715 1896 L
+6227 3163 mt 6229 3189 L
+6229 3189 mt 6233 3217 L
+6233 3217 mt 6236 3244 L
+6236 3244 mt 6240 3272 L
+6240 3272 mt 6244 3299 L
+6244 3299 mt 6247 3327 L
+6247 3327 mt 6247 3354 L
+6247 3354 mt 6246 3382 L
+6246 3382 mt 6241 3409 L
+6241 3409 mt 6232 3437 L
+6232 3437 mt 6227 3444 L
+6227 3444 mt 6221 3437 L
+6221 3437 mt 6204 3409 L
+6204 3409 mt 6192 3387 L
+6192 3387 mt 6189 3382 L
+6189 3382 mt 6178 3354 L
+6178 3354 mt 6167 3327 L
+6167 3327 mt 6157 3302 L
+6157 3302 mt 6156 3299 L
+6156 3299 mt 6149 3272 L
+6149 3272 mt 6144 3244 L
+6144 3244 mt 6141 3217 L
+6141 3217 mt 6140 3189 L
+6140 3189 mt 6142 3162 L
+6142 3162 mt 6148 3134 L
+6148 3134 mt 6157 3112 L
+6157 3112 mt 6192 3112 L
+6192 3112 mt 6207 3134 L
+6207 3134 mt 6226 3162 L
+6226 3162 mt 6227 3163 L
+1694 4092 mt 1714 4070 L
+1714 4070 mt 1728 4059 L
+1728 4059 mt 1753 4042 L
+1753 4042 mt 1763 4037 L
+1763 4037 mt 1798 4017 L
+1798 4017 mt 1804 4015 L
+1804 4015 mt 1833 4002 L
+1833 4002 mt 1868 3992 L
+1868 3992 mt 1903 3995 L
+1903 3995 mt 1931 4015 L
+1931 4015 mt 1938 4027 L
+1938 4027 mt 1943 4042 L
+1943 4042 mt 1947 4070 L
+1947 4070 mt 1950 4097 L
+1950 4097 mt 1954 4125 L
+1954 4125 mt 1960 4152 L
+1960 4152 mt 1968 4180 L
+1968 4180 mt 1972 4193 L
+1972 4193 mt 1978 4207 L
+1978 4207 mt 1994 4235 L
+1994 4235 mt 2007 4253 L
+2007 4253 mt 2014 4262 L
+2014 4262 mt 2041 4290 L
+2041 4290 mt 2042 4291 L
+2042 4291 mt 2070 4317 L
+2070 4317 mt 2077 4324 L
+2077 4324 mt 2099 4345 L
+2099 4345 mt 2112 4357 L
+2112 4357 mt 2128 4372 L
+2128 4372 mt 2147 4388 L
+2147 4388 mt 2162 4400 L
+2162 4400 mt 2182 4414 L
+2182 4414 mt 2204 4427 L
+2204 4427 mt 2217 4434 L
+2217 4434 mt 2251 4450 L
+2251 4450 mt 2262 4455 L
+2262 4455 mt 2286 4464 L
+2286 4464 mt 2321 4477 L
+2321 4477 mt 2338 4482 L
+2338 4482 mt 2356 4489 L
+2356 4489 mt 2391 4500 L
+2391 4500 mt 2416 4510 L
+2416 4510 mt 2426 4514 L
+2426 4514 mt 2461 4531 L
+2461 4531 mt 2473 4537 L
+2473 4537 mt 2496 4552 L
+2496 4552 mt 2515 4565 L
+2515 4565 mt 2530 4583 L
+2530 4583 mt 2539 4592 L
+2539 4592 mt 2533 4620 L
+2533 4620 mt 2530 4622 L
+2530 4622 mt 2496 4648 L
+2496 4648 mt 2496 4648 L
+2496 4648 mt 2461 4664 L
+2461 4664 mt 2435 4675 L
+2435 4675 mt 2426 4678 L
+2426 4678 mt 2391 4689 L
+2391 4689 mt 2356 4699 L
+2356 4699 mt 2341 4703 L
+2341 4703 mt 2321 4707 L
+2321 4707 mt 2286 4713 L
+2286 4713 mt 2251 4718 L
+2251 4718 mt 2217 4722 L
+2217 4722 mt 2182 4724 L
+2182 4724 mt 2147 4724 L
+2147 4724 mt 2112 4723 L
+2112 4723 mt 2077 4720 L
+2077 4720 mt 2042 4716 L
+2042 4716 mt 2007 4710 L
+2007 4710 mt 1972 4703 L
+1972 4703 mt 1970 4703 L
+1970 4703 mt 1938 4695 L
+1938 4695 mt 1903 4685 L
+1903 4685 mt 1874 4675 L
+1874 4675 mt 1868 4673 L
+1868 4673 mt 1833 4659 L
+1833 4659 mt 1810 4648 L
+1810 4648 mt 1798 4642 L
+1798 4642 mt 1763 4621 L
+1763 4621 mt 1762 4620 L
+1762 4620 mt 1734 4592 L
+1734 4592 mt 1728 4580 L
+1728 4580 mt 1723 4565 L
+1723 4565 mt 1720 4537 L
+1720 4537 mt 1721 4510 L
+1721 4510 mt 1728 4490 L
+1728 4490 mt 1733 4482 L
+1733 4482 mt 1761 4455 L
+1761 4455 mt 1763 4453 L
+1763 4453 mt 1798 4427 L
+1798 4427 mt 1798 4427 L
+1798 4427 mt 1829 4400 L
+1829 4400 mt 1833 4393 L
+1833 4393 mt 1846 4372 L
+1846 4372 mt 1851 4345 L
+1851 4345 mt 1843 4317 L
+1843 4317 mt 1833 4305 L
+1833 4305 mt 1821 4290 L
+1821 4290 mt 1798 4272 L
+1798 4272 mt 1785 4262 L
+1785 4262 mt 1763 4248 L
+1763 4248 mt 1742 4235 L
+1742 4235 mt 1728 4225 L
+1728 4225 mt 1705 4207 L
+1705 4207 mt 1694 4193 L
+1694 4193 mt 1683 4180 L
+1683 4180 mt 1673 4152 L
+1673 4152 mt 1676 4125 L
+1676 4125 mt 1689 4097 L
+1689 4097 mt 1694 4092 L
+6645 1749 mt 6647 1759 L
+6647 1759 mt 6654 1786 L
+6654 1786 mt 6659 1814 L
+6659 1814 mt 6663 1841 L
+6663 1841 mt 6667 1869 L
+6667 1869 mt 6670 1896 L
+6670 1896 mt 6672 1924 L
+6672 1924 mt 6674 1951 L
+6674 1951 mt 6675 1979 L
+6675 1979 mt 6675 2006 L
+6675 2006 mt 6675 2034 L
+6675 2034 mt 6673 2061 L
+6673 2061 mt 6671 2089 L
+6671 2089 mt 6669 2116 L
+6669 2116 mt 6665 2144 L
+6665 2144 mt 6661 2171 L
+6661 2171 mt 6657 2199 L
+6657 2199 mt 6651 2226 L
+6651 2226 mt 6645 2254 L
+6645 2254 mt 6645 2254 L
+6645 2254 mt 6638 2281 L
+6638 2281 mt 6631 2309 L
+6631 2309 mt 6622 2336 L
+6622 2336 mt 6613 2364 L
+6613 2364 mt 6610 2373 L
+6610 2373 mt 6604 2391 L
+6604 2391 mt 6593 2419 L
+6593 2419 mt 6582 2446 L
+6582 2446 mt 6575 2460 L
+6575 2460 mt 6569 2474 L
+6569 2474 mt 6555 2502 L
+6555 2502 mt 6540 2529 L
+6540 2529 mt 6540 2529 L
+6540 2529 mt 6524 2557 L
+6524 2557 mt 6506 2584 L
+6506 2584 mt 6506 2584 L
+6506 2584 mt 6486 2612 L
+6486 2612 mt 6471 2631 L
+6471 2631 mt 6463 2639 L
+6463 2639 mt 6439 2667 L
+6439 2667 mt 6436 2670 L
+6436 2670 mt 6411 2694 L
+6411 2694 mt 6401 2704 L
+6401 2704 mt 6381 2722 L
+6381 2722 mt 6366 2735 L
+6366 2735 mt 6348 2749 L
+6348 2749 mt 6331 2762 L
+6331 2762 mt 6311 2777 L
+6311 2777 mt 6296 2787 L
+6296 2787 mt 6269 2804 L
+6269 2804 mt 6261 2810 L
+6261 2810 mt 6227 2829 L
+6227 2829 mt 6219 2832 L
+6219 2832 mt 6192 2841 L
+6192 2841 mt 6157 2838 L
+6157 2838 mt 6127 2832 L
+6127 2832 mt 6122 2831 L
+6122 2831 mt 6087 2825 L
+6087 2825 mt 6052 2823 L
+6052 2823 mt 6017 2828 L
+6017 2828 mt 6009 2832 L
+6009 2832 mt 5983 2846 L
+5983 2846 mt 5961 2859 L
+5961 2859 mt 5948 2867 L
+5948 2867 mt 5913 2885 L
+5913 2885 mt 5908 2887 L
+5908 2887 mt 5878 2895 L
+5878 2895 mt 5843 2897 L
+5843 2897 mt 5808 2894 L
+5808 2894 mt 5773 2889 L
+5773 2889 mt 5764 2887 L
+5764 2887 mt 5738 2881 L
+5738 2881 mt 5704 2867 L
+5704 2867 mt 5689 2859 L
+5689 2859 mt 5669 2847 L
+5669 2847 mt 5650 2832 L
+5650 2832 mt 5634 2818 L
+5634 2818 mt 5619 2804 L
+5619 2804 mt 5599 2784 L
+5599 2784 mt 5591 2777 L
+5591 2777 mt 5568 2749 L
+5568 2749 mt 5564 2743 L
+5564 2743 mt 5552 2722 L
+5552 2722 mt 5542 2694 L
+5542 2694 mt 5536 2667 L
+5536 2667 mt 5534 2639 L
+5534 2639 mt 5537 2612 L
+5537 2612 mt 5544 2584 L
+5544 2584 mt 5554 2557 L
+5554 2557 mt 5564 2530 L
+5564 2530 mt 5565 2529 L
+5565 2529 mt 5572 2502 L
+5572 2502 mt 5576 2474 L
+5576 2474 mt 5579 2446 L
+5579 2446 mt 5581 2419 L
+5581 2419 mt 5584 2391 L
+5584 2391 mt 5590 2364 L
+5590 2364 mt 5597 2336 L
+5597 2336 mt 5599 2329 L
+5599 2329 mt 5604 2309 L
+5604 2309 mt 5608 2281 L
+5608 2281 mt 5608 2254 L
+5608 2254 mt 5604 2226 L
+5604 2226 mt 5599 2208 L
+5599 2208 mt 5596 2199 L
+5596 2199 mt 5586 2171 L
+5586 2171 mt 5573 2144 L
+5573 2144 mt 5564 2125 L
+5564 2125 mt 5560 2116 L
+5560 2116 mt 5546 2089 L
+5546 2089 mt 5532 2061 L
+5532 2061 mt 5529 2055 L
+5529 2055 mt 5518 2034 L
+5518 2034 mt 5502 2006 L
+5502 2006 mt 5494 1994 L
+5494 1994 mt 5485 1979 L
+5485 1979 mt 5465 1951 L
+5465 1951 mt 5459 1944 L
+5459 1944 mt 5444 1924 L
+5444 1924 mt 5425 1899 L
+5425 1899 mt 5422 1896 L
+5422 1896 mt 5396 1869 L
+5396 1869 mt 5390 1864 L
+5390 1864 mt 5361 1841 L
+5361 1841 mt 5355 1837 L
+5355 1837 mt 5322 1814 L
+5322 1814 mt 5320 1812 L
+5320 1812 mt 5285 1790 L
+5285 1790 mt 5279 1786 L
+5279 1786 mt 5250 1773 L
+5250 1773 mt 5215 1764 L
+5215 1764 mt 5181 1762 L
+5181 1762 mt 5146 1765 L
+5146 1765 mt 5111 1770 L
+5111 1770 mt 5076 1776 L
+5076 1776 mt 5041 1783 L
+5041 1783 mt 5025 1786 L
+5025 1786 mt 5006 1790 L
+5006 1790 mt 4971 1796 L
+4971 1796 mt 4936 1798 L
+4936 1798 mt 4902 1788 L
+4902 1788 mt 4899 1786 L
+4899 1786 mt 4885 1759 L
+4885 1759 mt 4889 1731 L
+4889 1731 mt 4900 1704 L
+4900 1704 mt 4902 1699 L
+4902 1699 mt 4912 1676 L
+4912 1676 mt 4926 1649 L
+4926 1649 mt 4936 1626 L
+4936 1626 mt 4938 1621 L
+4938 1621 mt 4943 1594 L
+4943 1594 mt 4936 1567 L
+4936 1567 mt 4936 1566 L
+4936 1566 mt 4914 1539 L
+4914 1539 mt 4902 1529 L
+4902 1529 mt 4867 1512 L
+4867 1512 mt 4861 1511 L
+4861 1511 mt 4832 1507 L
+4832 1507 mt 4797 1506 L
+4797 1506 mt 4762 1505 L
+4762 1505 mt 4727 1505 L
+4727 1505 mt 4692 1504 L
+4692 1504 mt 4657 1501 L
+4657 1501 mt 4623 1494 L
+4623 1494 mt 4600 1484 L
+4600 1484 mt 4588 1476 L
+4588 1476 mt 4567 1456 L
+4567 1456 mt 4553 1436 L
+4553 1436 mt 4548 1428 L
+4548 1428 mt 4535 1401 L
+4535 1401 mt 4521 1373 L
+4521 1373 mt 4518 1369 L
+4518 1369 mt 4503 1346 L
+4503 1346 mt 4483 1321 L
+4483 1321 mt 4481 1318 L
+4481 1318 mt 4452 1291 L
+4452 1291 mt 4448 1287 L
+4448 1287 mt 4424 1263 L
+4424 1263 mt 4413 1240 L
+4413 1240 mt 4411 1236 L
+4411 1236 mt 4401 1208 L
+4401 1208 mt 4399 1181 L
+4399 1181 mt 4396 1153 L
+4396 1153 mt 4389 1126 L
+4389 1126 mt 4379 1108 L
+4379 1108 mt 4373 1098 L
+4373 1098 mt 4349 1071 L
+4349 1071 mt 4344 1066 L
+4344 1066 mt 4317 1043 L
+4317 1043 mt 4309 1037 L
+4309 1037 mt 4279 1016 L
+4279 1016 mt 4274 1012 L
+4274 1012 mt 4239  992 L
+4239  992 mt 4232  988 L
+4232  988 mt 4204  974 L
+4204  974 mt 4176  961 L
+4176  961 mt 4169  957 L
+4169  957 mt 4134  940 L
+4134  940 mt 4118  933 L
+4118  933 mt 4100  925 L
+4100  925 mt 4065  911 L
+4065  911 mt 4048  906 L
+4048  906 mt 4030  899 L
+4030  899 mt 3995  888 L
+3995  888 mt 3969  878 L
+3969  878 mt 3960  875 L
+3960  875 mt 3925  859 L
+3925  859 mt 3908  851 L
+3908  851 mt 3890  840 L
+3890  840 mt 3863  823 L
+3863  823 mt 3855  817 L
+3855  817 mt 3828  796 L
+3828  796 mt 3821  788 L
+3821  788 mt 3801  768 L
+3801  768 mt 3786  752 L
+3786  752 mt 3776  741 L
+3776  741 mt 3751  717 L
+3751  717 mt 3747  713 L
+3747  713 mt 3716  691 L
+3716  691 mt 3709  686 L
+3709  686 mt 3681  671 L
+3681  671 mt 3656  658 L
+3656  658 mt 3646  654 L
+3646  654 mt 3611  640 L
+3611  640 mt 3589  631 L
+3589  631 mt 3577  626 L
+3577  626 mt 3542  612 L
+3542  612 mt 3524  603 L
+3524  603 mt 3507  596 L
+3507  596 mt 3472  581 L
+3472  581 mt 3460  576 L
+3460  576 mt 3437  566 L
+3437  566 mt 3402  552 L
+3402  552 mt 3392  548 L
+3392  548 mt 3367  539 L
+3367  539 mt 3332  528 L
+3332  528 mt 3307  521 L
+3307  521 mt 3298  518 L
+3298  518 mt 3263  509 L
+3263  509 mt 3228  502 L
+3228  502 mt 3193  496 L
+3193  496 mt 3171  493 L
+3171  493 mt 3158  491 L
+3158  491 mt 3123  487 L
+3123  487 mt 3088  483 L
+3088  483 mt 3053  480 L
+3053  480 mt 3019  478 L
+3019  478 mt 2984  476 L
+2984  476 mt 2949  476 L
+2949  476 mt 2914  476 L
+2914  476 mt 2879  478 L
+2879  478 mt 2844  479 L
+2844  479 mt 2809  480 L
+2809  480 mt 2774  480 L
+2774  480 mt 2740  477 L
+2740  477 mt 2705  474 L
+2705  474 mt 2670  471 L
+2670  471 mt 2635  474 L
+2635  474 mt 2600  486 L
+2600  486 mt 2586  493 L
+2586  493 mt 2565  500 L
+2565  500 mt 2530  511 L
+2530  511 mt 2497  521 L
+2497  521 mt 2496  521 L
+2496  521 mt 2461  528 L
+2461  528 mt 2426  535 L
+2426  535 mt 2391  542 L
+2391  542 mt 2356  548 L
+2356  548 mt 2355  548 L
+2355  548 mt 2321  552 L
+2321  552 mt 2286  555 L
+2286  555 mt 2251  557 L
+2251  557 mt 2217  557 L
+2217  557 mt 2182  557 L
+2182  557 mt 2147  557 L
+2147  557 mt 2112  558 L
+2112  558 mt 2077  560 L
+2077  560 mt 2042  564 L
+2042  564 mt 2007  571 L
+2007  571 mt 1993  576 L
+1993  576 mt 1972  581 L
+1972  581 mt 1938  592 L
+1938  592 mt 1912  603 L
+1912  603 mt 1903  607 L
+1903  607 mt 1868  623 L
+1868  623 mt 1853  631 L
+1853  631 mt 1833  640 L
+1833  640 mt 1798  655 L
+1798  655 mt 1788  658 L
+1788  658 mt 1763  665 L
+1763  665 mt 1728  670 L
+1728  670 mt 1694  670 L
+1694  670 mt 1659  667 L
+1659  667 mt 1624  666 L
+1624  666 mt 1589  667 L
+1589  667 mt 1554  674 L
+1554  674 mt 1523  686 L
+1523  686 mt 1519  688 L
+1519  688 mt 1484  710 L
+1484  710 mt 1481  713 L
+1481  713 mt 1455  741 L
+1455  741 mt 1449  749 L
+1449  749 mt 1436  768 L
+1436  768 mt 1421  796 L
+1421  796 mt 1415  808 L
+1415  808 mt 1406  823 L
+1406  823 mt 1390  851 L
+1390  851 mt 1380  864 L
+1380  864 mt 1368  878 L
+1368  878 mt 1345  901 L
+1345  901 mt 1339  906 L
+1339  906 mt 1310  927 L
+1310  927 mt 1301  933 L
+1301  933 mt 1275  952 L
+1275  952 mt 1265  961 L
+1265  961 mt 1240  982 L
+1240  982 mt 1235  988 L
+1235  988 mt 1217 1016 L
+1217 1016 mt 1205 1042 L
+1205 1042 mt 1205 1043 L
+1205 1043 mt 1200 1071 L
+1200 1071 mt 1199 1098 L
+1199 1098 mt 1200 1126 L
+1200 1126 mt 1204 1153 L
+1204 1153 mt 1205 1158 L
+1205 1158 mt 1211 1181 L
+1211 1181 mt 1216 1208 L
+1216 1208 mt 1219 1236 L
+1219 1236 mt 1218 1263 L
+1218 1263 mt 1209 1291 L
+1209 1291 mt 1205 1297 L
+1205 1297 mt 1188 1318 L
+1188 1318 mt 1170 1332 L
+1170 1332 mt 1153 1346 L
+1153 1346 mt 1136 1357 L
+1136 1357 mt 1113 1373 L
+1113 1373 mt 1101 1382 L
+1101 1382 mt 1078 1401 L
+1078 1401 mt 1066 1411 L
+1066 1411 mt 1048 1428 L
+1048 1428 mt 1031 1448 L
+1031 1448 mt 1024 1456 L
+1024 1456 mt 1007 1484 L
+1007 1484 mt  998 1511 L
+ 998 1511 mt  996 1518 L
+ 996 1518 mt  990 1539 L
+ 990 1539 mt  987 1566 L
+ 987 1566 mt  986 1594 L
+ 986 1594 mt  985 1621 L
+ 985 1621 mt  984 1649 L
+ 984 1649 mt  984 1676 L
+ 984 1676 mt  985 1704 L
+ 985 1704 mt  988 1731 L
+ 988 1731 mt  993 1759 L
+ 993 1759 mt  996 1773 L
+ 996 1773 mt  999 1786 L
+ 999 1786 mt 1006 1814 L
+1006 1814 mt 1015 1841 L
+1015 1841 mt 1026 1869 L
+1026 1869 mt 1031 1881 L
+1031 1881 mt 1037 1896 L
+1037 1896 mt 1048 1924 L
+1048 1924 mt 1060 1951 L
+1060 1951 mt 1066 1966 L
+1066 1966 mt 1071 1979 L
+1071 1979 mt 1082 2006 L
+1082 2006 mt 1093 2034 L
+1093 2034 mt 1101 2054 L
+1101 2054 mt 1103 2061 L
+1103 2061 mt 1114 2089 L
+1114 2089 mt 1124 2116 L
+1124 2116 mt 1134 2144 L
+1134 2144 mt 1136 2148 L
+1136 2148 mt 1149 2171 L
+1149 2171 mt 1167 2199 L
+1167 2199 mt 1170 2203 L
+1170 2203 mt 1197 2226 L
+1197 2226 mt 1205 2232 L
+1205 2232 mt 1240 2251 L
+1240 2251 mt 1245 2254 L
+1245 2254 mt 1275 2267 L
+1275 2267 mt 1304 2281 L
+1304 2281 mt 1310 2284 L
+1310 2284 mt 1345 2301 L
+1345 2301 mt 1357 2309 L
+1357 2309 mt 1380 2322 L
+1380 2322 mt 1400 2336 L
+1400 2336 mt 1415 2349 L
+1415 2349 mt 1434 2364 L
+1434 2364 mt 1449 2379 L
+1449 2379 mt 1465 2391 L
+1465 2391 mt 1484 2412 L
+1484 2412 mt 1490 2419 L
+1490 2419 mt 1511 2446 L
+1511 2446 mt 1519 2457 L
+1519 2457 mt 1530 2474 L
+1530 2474 mt 1540 2502 L
+1540 2502 mt 1544 2529 L
+1544 2529 mt 1547 2557 L
+1547 2557 mt 1551 2584 L
+1551 2584 mt 1554 2604 L
+1554 2604 mt 1555 2612 L
+1555 2612 mt 1556 2639 L
+1556 2639 mt 1558 2667 L
+1558 2667 mt 1565 2694 L
+1565 2694 mt 1579 2722 L
+1579 2722 mt 1589 2736 L
+1589 2736 mt 1599 2749 L
+1599 2749 mt 1624 2772 L
+1624 2772 mt 1629 2777 L
+1629 2777 mt 1659 2799 L
+1659 2799 mt 1667 2804 L
+1667 2804 mt 1694 2823 L
+1694 2823 mt 1707 2832 L
+1707 2832 mt 1728 2849 L
+1728 2849 mt 1742 2859 L
+1742 2859 mt 1763 2879 L
+1763 2879 mt 1771 2887 L
+1771 2887 mt 1798 2914 L
+1798 2914 mt 1798 2914 L
+1798 2914 mt 1823 2942 L
+1823 2942 mt 1833 2953 L
+1833 2953 mt 1846 2969 L
+1846 2969 mt 1864 2997 L
+1864 2997 mt 1868 3003 L
+1868 3003 mt 1879 3024 L
+1879 3024 mt 1888 3052 L
+1888 3052 mt 1894 3079 L
+1894 3079 mt 1901 3107 L
+1901 3107 mt 1903 3111 L
+1903 3111 mt 1911 3134 L
+1911 3134 mt 1922 3162 L
+1922 3162 mt 1934 3189 L
+1934 3189 mt 1938 3196 L
+1938 3196 mt 1951 3217 L
+1951 3217 mt 1972 3232 L
+1972 3232 mt 1988 3244 L
+1988 3244 mt 2007 3254 L
+2007 3254 mt 2030 3272 L
+2030 3272 mt 2042 3281 L
+2042 3281 mt 2063 3299 L
+2063 3299 mt 2077 3312 L
+2077 3312 mt 2095 3327 L
+2095 3327 mt 2112 3340 L
+2112 3340 mt 2132 3354 L
+2132 3354 mt 2147 3364 L
+2147 3364 mt 2175 3382 L
+2175 3382 mt 2182 3386 L
+2182 3386 mt 2213 3409 L
+2213 3409 mt 2217 3412 L
+2217 3412 mt 2247 3437 L
+2247 3437 mt 2251 3441 L
+2251 3441 mt 2279 3464 L
+2279 3464 mt 2286 3470 L
+2286 3470 mt 2310 3492 L
+2310 3492 mt 2321 3503 L
+2321 3503 mt 2335 3519 L
+2335 3519 mt 2354 3547 L
+2354 3547 mt 2356 3551 L
+2356 3551 mt 2367 3575 L
+2367 3575 mt 2374 3602 L
+2374 3602 mt 2375 3630 L
+2375 3630 mt 2363 3657 L
+2363 3657 mt 2356 3663 L
+2356 3663 mt 2331 3685 L
+2331 3685 mt 2321 3690 L
+2321 3690 mt 2286 3708 L
+2286 3708 mt 2275 3712 L
+2275 3712 mt 2251 3722 L
+2251 3722 mt 2217 3733 L
+2217 3733 mt 2182 3739 L
+2182 3739 mt 2147 3736 L
+2147 3736 mt 2112 3723 L
+2112 3723 mt 2097 3712 L
+2097 3712 mt 2077 3694 L
+2077 3694 mt 2070 3685 L
+2070 3685 mt 2054 3657 L
+2054 3657 mt 2043 3630 L
+2043 3630 mt 2042 3627 L
+2042 3627 mt 2035 3602 L
+2035 3602 mt 2028 3575 L
+2028 3575 mt 2019 3547 L
+2019 3547 mt 2008 3519 L
+2008 3519 mt 2007 3517 L
+2007 3517 mt 1995 3492 L
+1995 3492 mt 1980 3464 L
+1980 3464 mt 1972 3453 L
+1972 3453 mt 1964 3437 L
+1964 3437 mt 1948 3409 L
+1948 3409 mt 1938 3391 L
+1938 3391 mt 1932 3382 L
+1932 3382 mt 1917 3354 L
+1917 3354 mt 1903 3328 L
+1903 3328 mt 1902 3327 L
+1902 3327 mt 1892 3299 L
+1892 3299 mt 1882 3272 L
+1882 3272 mt 1868 3253 L
+1868 3253 mt 1861 3244 L
+1861 3244 mt 1833 3226 L
+1833 3226 mt 1819 3217 L
+1819 3217 mt 1798 3205 L
+1798 3205 mt 1771 3189 L
+1771 3189 mt 1763 3186 L
+1763 3186 mt 1728 3169 L
+1728 3169 mt 1715 3162 L
+1715 3162 mt 1694 3153 L
+1694 3153 mt 1659 3139 L
+1659 3139 mt 1647 3134 L
+1647 3134 mt 1624 3125 L
+1624 3125 mt 1589 3114 L
+1589 3114 mt 1565 3107 L
+1565 3107 mt 1554 3104 L
+1554 3104 mt 1519 3094 L
+1519 3094 mt 1484 3084 L
+1484 3084 mt 1469 3079 L
+1469 3079 mt 1449 3074 L
+1449 3074 mt 1415 3065 L
+1415 3065 mt 1380 3056 L
+1380 3056 mt 1360 3052 L
+1360 3052 mt 1345 3048 L
+1345 3048 mt 1310 3042 L
+1310 3042 mt 1275 3037 L
+1275 3037 mt 1240 3031 L
+1240 3031 mt 1214 3024 L
+1214 3024 mt 1205 3022 L
+1205 3022 mt 1170 3006 L
+1170 3006 mt 1153 2997 L
+1153 2997 mt 1136 2986 L
+1136 2986 mt 1106 2969 L
+1106 2969 mt 1101 2967 L
+1101 2967 mt 1066 2949 L
+1066 2949 mt 1048 2942 L
+1048 2942 mt 1031 2935 L
+1031 2935 mt  996 2922 L
+ 996 2922 mt  978 2914 L
+ 978 2914 mt  961 2908 L
+ 961 2908 mt  926 2893 L
+ 926 2893 mt  915 2887 L
+ 915 2887 mt  892 2875 L
+ 892 2875 mt  866 2859 L
+ 866 2859 mt  857 2853 L
+ 857 2853 mt  829 2832 L
+ 829 2832 mt  822 2825 L
+ 822 2825 mt  800 2804 L
+ 800 2804 mt  787 2790 L
+ 787 2790 mt  776 2777 L
+ 776 2777 mt  756 2749 L
+ 756 2749 mt  752 2744 L
+ 752 2744 mt  738 2722 L
+ 738 2722 mt  724 2694 L
+ 724 2694 mt  717 2680 L
+ 717 2680 mt  711 2667 L
+ 711 2667 mt  701 2639 L
+ 701 2639 mt  692 2612 L
+ 692 2612 mt  686 2584 L
+ 686 2584 mt  682 2567 L
+ 682 2567 mt  680 2557 L
+ 680 2557 mt  676 2529 L
+ 676 2529 mt  674 2502 L
+ 674 2502 mt  672 2474 L
+ 672 2474 mt  672 2446 L
+ 672 2446 mt  673 2419 L
+ 673 2419 mt  676 2391 L
+ 676 2391 mt  680 2364 L
+ 680 2364 mt  682 2350 L
+ 682 2350 mt  685 2336 L
+ 685 2336 mt  692 2309 L
+ 692 2309 mt  701 2281 L
+ 701 2281 mt  711 2254 L
+ 711 2254 mt  717 2239 L
+ 717 2239 mt  723 2226 L
+ 723 2226 mt  736 2199 L
+ 736 2199 mt  751 2171 L
+ 751 2171 mt  752 2169 L
+ 752 2169 mt  767 2144 L
+ 767 2144 mt  782 2116 L
+ 782 2116 mt  787 2107 L
+ 787 2107 mt  798 2089 L
+ 798 2089 mt  813 2061 L
+ 813 2061 mt  822 2046 L
+ 822 2046 mt  830 2034 L
+ 830 2034 mt  847 2006 L
+ 847 2006 mt  857 1984 L
+ 857 1984 mt  860 1979 L
+ 860 1979 mt  868 1951 L
+ 868 1951 mt  870 1924 L
+ 870 1924 mt  866 1896 L
+ 866 1896 mt  860 1869 L
+ 860 1869 mt  857 1858 L
+ 857 1858 mt  853 1841 L
+ 853 1841 mt  848 1814 L
+ 848 1814 mt  843 1786 L
+ 843 1786 mt  841 1759 L
+ 841 1759 mt  840 1731 L
+ 840 1731 mt  842 1704 L
+ 842 1704 mt  846 1676 L
+ 846 1676 mt  853 1649 L
+ 853 1649 mt  857 1636 L
+ 857 1636 mt  862 1621 L
+ 862 1621 mt  872 1594 L
+ 872 1594 mt  879 1566 L
+ 879 1566 mt  883 1539 L
+ 883 1539 mt  881 1511 L
+ 881 1511 mt  874 1484 L
+ 874 1484 mt  861 1456 L
+ 861 1456 mt  857 1450 L
+ 857 1450 mt  848 1428 L
+ 848 1428 mt  836 1401 L
+ 836 1401 mt  829 1373 L
+ 829 1373 mt  826 1346 L
+ 826 1346 mt  824 1318 L
+ 824 1318 mt  822 1291 L
+ 822 1291 mt  822 1291 L
+ 822 1291 mt  820 1263 L
+ 820 1263 mt  817 1236 L
+ 817 1236 mt  815 1208 L
+ 815 1208 mt  814 1181 L
+ 814 1181 mt  817 1153 L
+ 817 1153 mt  821 1126 L
+ 821 1126 mt  822 1121 L
+ 822 1121 mt  827 1098 L
+ 827 1098 mt  833 1071 L
+ 833 1071 mt  838 1043 L
+ 838 1043 mt  842 1016 L
+ 842 1016 mt  845  988 L
+ 845  988 mt  848  961 L
+ 848  961 mt  850  933 L
+ 850  933 mt  853  906 L
+ 853  906 mt  857  890 L
+ 857  890 mt  859  878 L
+ 859  878 mt  867  851 L
+ 867  851 mt  880  823 L
+ 880  823 mt  892  801 L
+ 892  801 mt  894  796 L
+ 894  796 mt  909  768 L
+ 909  768 mt  926  741 L
+ 926  741 mt  926  740 L
+ 926  740 mt  947  713 L
+ 947  713 mt  961  695 L
+ 961  695 mt  970  686 L
+ 970  686 mt  991  658 L
+ 991  658 mt  996  652 L
+ 996  652 mt 1010  631 L
+1010  631 mt 1026  603 L
+1026  603 mt 1031  594 L
+1031  594 mt 1041  576 L
+1041  576 mt 1061  548 L
+1061  548 mt 1066  543 L
+1066  543 mt 1084  521 L
+1084  521 mt 1101  505 L
+1101  505 mt 1116  493 L
+1116  493 mt 1136  478 L
+1136  478 mt 1154  466 L
+1154  466 mt 1170  455 L
+1170  455 mt 1198  438 L
+1198  438 mt 1205  434 L
+1205  434 mt 1240  418 L
+1240  418 mt 1260  411 L
+1260  411 mt 1275  405 L
+1275  405 mt 1310  395 L
+1310  395 mt 1345  392 L
+1345  392 mt 1380  397 L
+1380  397 mt 1415  403 L
+1415  403 mt 1449  410 L
+1449  410 mt 1458  411 L
+1458  411 mt 1484  414 L
+1484  414 mt 1519  418 L
+1519  418 mt 1554  418 L
+1554  418 mt 1589  418 L
+1589  418 mt 1624  415 L
+1624  415 mt 1657  411 L
+1657  411 mt 1659  410 L
+1659  410 mt 1694  404 L
+1694  404 mt 1728  396 L
+1728  396 mt 1763  386 L
+1763  386 mt 1774  383 L
+1774  383 mt 1798  377 L
+1798  377 mt 1833  368 L
+1833  368 mt 1868  360 L
+1868  360 mt 1903  356 L
+1903  356 mt 1938  356 L
+1938  356 mt 1972  362 L
+1972  362 mt 2007  372 L
+2007  372 mt 2042  382 L
+2042  382 mt 2047  383 L
+2047  383 mt 2077  392 L
+2077  392 mt 2112  400 L
+2112  400 mt 2147  403 L
+2147  403 mt 2182  403 L
+2182  403 mt 2217  401 L
+2217  401 mt 2251  397 L
+2251  397 mt 2286  391 L
+2286  391 mt 2321  384 L
+2321  384 mt 2328  383 L
+2328  383 mt 2356  378 L
+2356  378 mt 2391  372 L
+2391  372 mt 2426  367 L
+2426  367 mt 2461  364 L
+2461  364 mt 2496  365 L
+2496  365 mt 2530  371 L
+2530  371 mt 2565  383 L
+2565  383 mt 2565  383 L
+2565  383 mt 2600  398 L
+2600  398 mt 2635  403 L
+2635  403 mt 2670  392 L
+2670  392 mt 2681  383 L
+2681  383 mt 2705  374 L
+2705  374 mt 2740  357 L
+2740  357 mt 2745  355 L
+2745  355 mt 2774  349 L
+2774  349 mt 2809  345 L
+2809  345 mt 2844  345 L
+2844  345 mt 2879  347 L
+2879  347 mt 2914  349 L
+2914  349 mt 2949  352 L
+2949  352 mt 2984  355 L
+2984  355 mt 2984  355 L
+2984  355 mt 3019  358 L
+3019  358 mt 3053  360 L
+3053  360 mt 3088  361 L
+3088  361 mt 3123  362 L
+3123  362 mt 3158  360 L
+3158  360 mt 3193  358 L
+3193  358 mt 3212  355 L
+3212  355 mt 3228  354 L
+3228  354 mt 3263  348 L
+3263  348 mt 3298  338 L
+3298  338 mt 3328  328 L
+3328  328 mt 3332  327 L
+3332  327 mt 3367  316 L
+3367  316 mt 3402  305 L
+3402  305 mt 3418  300 L
+3418  300 mt 3437  296 L
+3437  296 mt 3472  288 L
+3472  288 mt 3507  281 L
+3507  281 mt 3542  275 L
+3542  275 mt 3550  273 L
+3550  273 mt 3577  268 L
+3577  268 mt 3611  261 L
+3611  261 mt 3646  254 L
+3646  254 mt 3681  247 L
+3681  247 mt 3689  245 L
+3689  245 mt 3716  240 L
+3716  240 mt 3751  233 L
+3751  233 mt 3786  226 L
+3786  226 mt 3821  219 L
+3821  219 mt 3826  218 L
+3826  218 mt 3855  212 L
+3855  212 mt 3890  205 L
+3890  205 mt 3925  198 L
+3925  198 mt 3960  190 L
+3960  190 mt 3960  190 L
+3960  190 mt 3995  183 L
+3995  183 mt 4030  176 L
+4030  176 mt 4065  169 L
+4065  169 mt 4094  163 L
+4094  163 mt 4100  162 L
+4100  162 mt 4134  155 L
+4134  155 mt 4169  148 L
+4169  148 mt 4204  142 L
+4204  142 mt 4239  136 L
+4239  136 mt 4243  135 L
+4243  135 mt 4274  130 L
+4274  130 mt 4309  125 L
+4309  125 mt 4344  120 L
+4344  120 mt 4379  116 L
+4379  116 mt 4413  112 L
+4413  112 mt 4448  108 L
+4448  108 mt 4450  108 L
+4450  108 mt 4483  105 L
+4483  105 mt 4518  103 L
+4518  103 mt 4553  101 L
+4553  101 mt 4588   99 L
+4588   99 mt 4623   98 L
+4623   98 mt 4657   97 L
+4657   97 mt 4692   97 L
+4692   97 mt 4727   98 L
+4727   98 mt 4762   99 L
+4762   99 mt 4797  100 L
+4797  100 mt 4832  102 L
+4832  102 mt 4867  105 L
+4867  105 mt 4899  108 L
+4899  108 mt 4902  108 L
+4902  108 mt 4936  112 L
+4936  112 mt 4971  117 L
+4971  117 mt 5006  123 L
+5006  123 mt 5041  129 L
+5041  129 mt 5068  135 L
+5068  135 mt 5076  137 L
+5076  137 mt 5111  146 L
+5111  146 mt 5146  155 L
+5146  155 mt 5169  163 L
+5169  163 mt 5181  167 L
+5181  167 mt 5215  179 L
+5215  179 mt 5243  190 L
+5243  190 mt 5250  193 L
+5250  193 mt 5285  209 L
+5285  209 mt 5302  218 L
+5302  218 mt 5320  227 L
+5320  227 mt 5352  245 L
+5352  245 mt 5355  247 L
+5355  247 mt 5390  269 L
+5390  269 mt 5396  273 L
+5396  273 mt 5425  292 L
+5425  292 mt 5436  300 L
+5436  300 mt 5459  318 L
+5459  318 mt 5472  328 L
+5472  328 mt 5494  346 L
+5494  346 mt 5506  355 L
+5506  355 mt 5529  375 L
+5529  375 mt 5539  383 L
+5539  383 mt 5564  405 L
+5564  405 mt 5570  411 L
+5570  411 mt 5599  437 L
+5599  437 mt 5600  438 L
+5600  438 mt 5629  466 L
+5629  466 mt 5634  470 L
+5634  470 mt 5658  493 L
+5658  493 mt 5669  504 L
+5669  504 mt 5686  521 L
+5686  521 mt 5704  539 L
+5704  539 mt 5713  548 L
+5713  548 mt 5738  575 L
+5738  575 mt 5739  576 L
+5739  576 mt 5766  603 L
+5766  603 mt 5773  611 L
+5773  611 mt 5791  631 L
+5791  631 mt 5808  649 L
+5808  649 mt 5817  658 L
+5817  658 mt 5842  686 L
+5842  686 mt 5843  687 L
+5843  687 mt 5867  713 L
+5867  713 mt 5878  726 L
+5878  726 mt 5892  741 L
+5892  741 mt 5913  764 L
+5913  764 mt 5916  768 L
+5916  768 mt 5941  796 L
+5941  796 mt 5948  803 L
+5948  803 mt 5966  823 L
+5966  823 mt 5983  841 L
+5983  841 mt 5991  851 L
+5991  851 mt 6016  878 L
+6016  878 mt 6017  880 L
+6017  880 mt 6041  906 L
+6041  906 mt 6052  919 L
+6052  919 mt 6066  933 L
+6066  933 mt 6087  957 L
+6087  957 mt 6090  961 L
+6090  961 mt 6115  988 L
+6115  988 mt 6122  996 L
+6122  996 mt 6140 1016 L
+6140 1016 mt 6157 1035 L
+6157 1035 mt 6165 1043 L
+6165 1043 mt 6190 1071 L
+6190 1071 mt 6192 1073 L
+6192 1073 mt 6214 1098 L
+6214 1098 mt 6227 1112 L
+6227 1112 mt 6239 1126 L
+6239 1126 mt 6261 1151 L
+6261 1151 mt 6264 1153 L
+6264 1153 mt 6289 1181 L
+6289 1181 mt 6296 1189 L
+6296 1189 mt 6314 1208 L
+6314 1208 mt 6331 1228 L
+6331 1228 mt 6339 1236 L
+6339 1236 mt 6363 1263 L
+6363 1263 mt 6366 1267 L
+6366 1267 mt 6387 1291 L
+6387 1291 mt 6401 1307 L
+6401 1307 mt 6410 1318 L
+6410 1318 mt 6433 1346 L
+6433 1346 mt 6436 1349 L
+6436 1349 mt 6455 1373 L
+6455 1373 mt 6471 1394 L
+6471 1394 mt 6476 1401 L
+6476 1401 mt 6496 1428 L
+6496 1428 mt 6506 1442 L
+6506 1442 mt 6515 1456 L
+6515 1456 mt 6533 1484 L
+6533 1484 mt 6540 1496 L
+6540 1496 mt 6549 1511 L
+6549 1511 mt 6565 1539 L
+6565 1539 mt 6575 1559 L
+6575 1559 mt 6579 1566 L
+6579 1566 mt 6592 1594 L
+6592 1594 mt 6604 1621 L
+6604 1621 mt 6610 1638 L
+6610 1638 mt 6615 1649 L
+6615 1649 mt 6624 1676 L
+6624 1676 mt 6633 1704 L
+6633 1704 mt 6641 1731 L
+6641 1731 mt 6645 1749 L
+1763 4563 mt 1768 4537 L
+1768 4537 mt 1787 4510 L
+1787 4510 mt 1798 4500 L
+1798 4500 mt 1821 4482 L
+1821 4482 mt 1833 4475 L
+1833 4475 mt 1861 4455 L
+1861 4455 mt 1868 4450 L
+1868 4450 mt 1894 4427 L
+1894 4427 mt 1903 4417 L
+1903 4417 mt 1919 4400 L
+1919 4400 mt 1938 4375 L
+1938 4375 mt 1941 4372 L
+1941 4372 mt 1972 4354 L
+1972 4354 mt 2007 4357 L
+2007 4357 mt 2040 4372 L
+2040 4372 mt 2042 4374 L
+2042 4374 mt 2077 4398 L
+2077 4398 mt 2079 4400 L
+2079 4400 mt 2112 4423 L
+2112 4423 mt 2118 4427 L
+2118 4427 mt 2147 4445 L
+2147 4445 mt 2164 4455 L
+2164 4455 mt 2182 4464 L
+2182 4464 mt 2217 4480 L
+2217 4480 mt 2222 4482 L
+2222 4482 mt 2251 4494 L
+2251 4494 mt 2286 4507 L
+2286 4507 mt 2296 4510 L
+2296 4510 mt 2321 4519 L
+2321 4519 mt 2356 4531 L
+2356 4531 mt 2372 4537 L
+2372 4537 mt 2391 4547 L
+2391 4547 mt 2418 4565 L
+2418 4565 mt 2426 4582 L
+2426 4582 mt 2433 4592 L
+2433 4592 mt 2426 4602 L
+2426 4602 mt 2417 4620 L
+2417 4620 mt 2391 4636 L
+2391 4636 mt 2364 4648 L
+2364 4648 mt 2356 4651 L
+2356 4651 mt 2321 4662 L
+2321 4662 mt 2286 4673 L
+2286 4673 mt 2278 4675 L
+2278 4675 mt 2251 4681 L
+2251 4681 mt 2217 4687 L
+2217 4687 mt 2182 4691 L
+2182 4691 mt 2147 4692 L
+2147 4692 mt 2112 4691 L
+2112 4691 mt 2077 4689 L
+2077 4689 mt 2042 4685 L
+2042 4685 mt 2007 4679 L
+2007 4679 mt 1986 4675 L
+1986 4675 mt 1972 4672 L
+1972 4672 mt 1938 4664 L
+1938 4664 mt 1903 4654 L
+1903 4654 mt 1883 4648 L
+1883 4648 mt 1868 4642 L
+1868 4642 mt 1833 4627 L
+1833 4627 mt 1819 4620 L
+1819 4620 mt 1798 4606 L
+1798 4606 mt 1779 4592 L
+1779 4592 mt 1763 4565 L
+1763 4565 mt 1763 4565 L
+1763 4565 mt 1763 4563 L
+6610 1784 mt 6611 1786 L
+6611 1786 mt 6616 1814 L
+6616 1814 mt 6620 1841 L
+6620 1841 mt 6623 1869 L
+6623 1869 mt 6626 1896 L
+6626 1896 mt 6628 1924 L
+6628 1924 mt 6629 1951 L
+6629 1951 mt 6629 1979 L
+6629 1979 mt 6629 2006 L
+6629 2006 mt 6628 2034 L
+6628 2034 mt 6627 2061 L
+6627 2061 mt 6624 2089 L
+6624 2089 mt 6621 2116 L
+6621 2116 mt 6618 2144 L
+6618 2144 mt 6613 2171 L
+6613 2171 mt 6610 2188 L
+6610 2188 mt 6608 2199 L
+6608 2199 mt 6602 2226 L
+6602 2226 mt 6596 2254 L
+6596 2254 mt 6589 2281 L
+6589 2281 mt 6581 2309 L
+6581 2309 mt 6575 2326 L
+6575 2326 mt 6572 2336 L
+6572 2336 mt 6563 2364 L
+6563 2364 mt 6553 2391 L
+6553 2391 mt 6542 2419 L
+6542 2419 mt 6540 2422 L
+6540 2422 mt 6529 2446 L
+6529 2446 mt 6516 2474 L
+6516 2474 mt 6506 2493 L
+6506 2493 mt 6501 2502 L
+6501 2502 mt 6484 2529 L
+6484 2529 mt 6471 2549 L
+6471 2549 mt 6465 2557 L
+6465 2557 mt 6444 2584 L
+6444 2584 mt 6436 2594 L
+6436 2594 mt 6420 2612 L
+6420 2612 mt 6401 2631 L
+6401 2631 mt 6392 2639 L
+6392 2639 mt 6366 2661 L
+6366 2661 mt 6359 2667 L
+6359 2667 mt 6331 2687 L
+6331 2687 mt 6320 2694 L
+6320 2694 mt 6296 2709 L
+6296 2709 mt 6272 2722 L
+6272 2722 mt 6261 2727 L
+6261 2727 mt 6227 2742 L
+6227 2742 mt 6192 2746 L
+6192 2746 mt 6157 2743 L
+6157 2743 mt 6122 2739 L
+6122 2739 mt 6087 2736 L
+6087 2736 mt 6052 2737 L
+6052 2737 mt 6017 2742 L
+6017 2742 mt 5987 2749 L
+5987 2749 mt 5983 2751 L
+5983 2751 mt 5948 2765 L
+5948 2765 mt 5918 2777 L
+5918 2777 mt 5913 2779 L
+5913 2779 mt 5878 2791 L
+5878 2791 mt 5843 2801 L
+5843 2801 mt 5826 2804 L
+5826 2804 mt 5808 2807 L
+5808 2807 mt 5773 2809 L
+5773 2809 mt 5741 2804 L
+5741 2804 mt 5738 2804 L
+5738 2804 mt 5704 2788 L
+5704 2788 mt 5687 2777 L
+5687 2777 mt 5669 2763 L
+5669 2763 mt 5655 2749 L
+5655 2749 mt 5634 2727 L
+5634 2727 mt 5630 2722 L
+5630 2722 mt 5615 2694 L
+5615 2694 mt 5604 2667 L
+5604 2667 mt 5599 2648 L
+5599 2648 mt 5597 2639 L
+5597 2639 mt 5597 2612 L
+5597 2612 mt 5599 2602 L
+5599 2602 mt 5603 2584 L
+5603 2584 mt 5612 2557 L
+5612 2557 mt 5620 2529 L
+5620 2529 mt 5626 2502 L
+5626 2502 mt 5627 2474 L
+5627 2474 mt 5628 2446 L
+5628 2446 mt 5631 2419 L
+5631 2419 mt 5633 2391 L
+5633 2391 mt 5634 2390 L
+5634 2390 mt 5640 2364 L
+5640 2364 mt 5650 2336 L
+5650 2336 mt 5661 2309 L
+5661 2309 mt 5669 2288 L
+5669 2288 mt 5671 2281 L
+5671 2281 mt 5679 2254 L
+5679 2254 mt 5682 2226 L
+5682 2226 mt 5681 2199 L
+5681 2199 mt 5675 2171 L
+5675 2171 mt 5669 2155 L
+5669 2155 mt 5664 2144 L
+5664 2144 mt 5651 2116 L
+5651 2116 mt 5636 2089 L
+5636 2089 mt 5634 2085 L
+5634 2085 mt 5620 2061 L
+5620 2061 mt 5605 2034 L
+5605 2034 mt 5599 2024 L
+5599 2024 mt 5589 2006 L
+5589 2006 mt 5572 1979 L
+5572 1979 mt 5564 1967 L
+5564 1967 mt 5553 1951 L
+5553 1951 mt 5532 1924 L
+5532 1924 mt 5529 1921 L
+5529 1921 mt 5508 1896 L
+5508 1896 mt 5494 1884 L
+5494 1884 mt 5479 1869 L
+5479 1869 mt 5459 1852 L
+5459 1852 mt 5447 1841 L
+5447 1841 mt 5425 1823 L
+5425 1823 mt 5413 1814 L
+5413 1814 mt 5390 1795 L
+5390 1795 mt 5379 1786 L
+5379 1786 mt 5355 1767 L
+5355 1767 mt 5343 1759 L
+5343 1759 mt 5320 1743 L
+5320 1743 mt 5299 1731 L
+5299 1731 mt 5285 1725 L
+5285 1725 mt 5250 1716 L
+5250 1716 mt 5215 1713 L
+5215 1713 mt 5181 1715 L
+5181 1715 mt 5146 1720 L
+5146 1720 mt 5111 1726 L
+5111 1726 mt 5085 1731 L
+5085 1731 mt 5076 1733 L
+5076 1733 mt 5041 1740 L
+5041 1740 mt 5006 1744 L
+5006 1744 mt 4971 1740 L
+4971 1740 mt 4958 1731 L
+4958 1731 mt 4954 1704 L
+4954 1704 mt 4966 1676 L
+4966 1676 mt 4971 1665 L
+4971 1665 mt 4981 1649 L
+4981 1649 mt 4992 1621 L
+4992 1621 mt 4999 1594 L
+4999 1594 mt 4998 1566 L
+4998 1566 mt 4988 1539 L
+4988 1539 mt 4971 1514 L
+4971 1514 mt 4968 1511 L
+4968 1511 mt 4936 1487 L
+4936 1487 mt 4929 1484 L
+4929 1484 mt 4902 1472 L
+4902 1472 mt 4867 1464 L
+4867 1464 mt 4832 1463 L
+4832 1463 mt 4797 1463 L
+4797 1463 mt 4762 1463 L
+4762 1463 mt 4727 1461 L
+4727 1461 mt 4692 1457 L
+4692 1457 mt 4688 1456 L
+4688 1456 mt 4657 1448 L
+4657 1448 mt 4625 1428 L
+4625 1428 mt 4623 1426 L
+4623 1426 mt 4603 1401 L
+4603 1401 mt 4588 1374 L
+4588 1374 mt 4587 1373 L
+4587 1373 mt 4572 1346 L
+4572 1346 mt 4558 1318 L
+4558 1318 mt 4553 1308 L
+4553 1308 mt 4544 1291 L
+4544 1291 mt 4536 1263 L
+4536 1263 mt 4535 1236 L
+4535 1236 mt 4546 1208 L
+4546 1208 mt 4553 1196 L
+4553 1196 mt 4562 1181 L
+4562 1181 mt 4573 1153 L
+4573 1153 mt 4578 1126 L
+4578 1126 mt 4572 1098 L
+4572 1098 mt 4557 1071 L
+4557 1071 mt 4553 1065 L
+4553 1065 mt 4531 1043 L
+4531 1043 mt 4518 1032 L
+4518 1032 mt 4498 1016 L
+4498 1016 mt 4483 1005 L
+4483 1005 mt 4462  988 L
+4462  988 mt 4448  978 L
+4448  978 mt 4426  961 L
+4426  961 mt 4413  951 L
+4413  951 mt 4389  933 L
+4389  933 mt 4379  925 L
+4379  925 mt 4352  906 L
+4352  906 mt 4344  900 L
+4344  900 mt 4313  878 L
+4313  878 mt 4309  875 L
+4309  875 mt 4274  851 L
+4274  851 mt 4274  850 L
+4274  850 mt 4239  825 L
+4239  825 mt 4237  823 L
+4237  823 mt 4204  797 L
+4204  797 mt 4202  796 L
+4202  796 mt 4169  768 L
+4169  768 mt 4169  768 L
+4169  768 mt 4134  741 L
+4134  741 mt 4134  741 L
+4134  741 mt 4100  716 L
+4100  716 mt 4096  713 L
+4096  713 mt 4065  693 L
+4065  693 mt 4052  686 L
+4052  686 mt 4030  674 L
+4030  674 mt 3998  658 L
+3998  658 mt 3995  657 L
+3995  657 mt 3960  642 L
+3960  642 mt 3933  631 L
+3933  631 mt 3925  628 L
+3925  628 mt 3890  616 L
+3890  616 mt 3855  605 L
+3855  605 mt 3849  603 L
+3849  603 mt 3821  595 L
+3821  595 mt 3786  585 L
+3786  585 mt 3752  576 L
+3752  576 mt 3751  575 L
+3751  575 mt 3716  566 L
+3716  566 mt 3681  556 L
+3681  556 mt 3651  548 L
+3651  548 mt 3646  547 L
+3646  547 mt 3611  537 L
+3611  537 mt 3577  526 L
+3577  526 mt 3560  521 L
+3560  521 mt 3542  514 L
+3542  514 mt 3507  502 L
+3507  502 mt 3483  493 L
+3483  493 mt 3472  489 L
+3472  489 mt 3437  474 L
+3437  474 mt 3420  466 L
+3420  466 mt 3402  452 L
+3402  452 mt 3387  438 L
+3387  438 mt 3381  411 L
+3381  411 mt 3397  383 L
+3397  383 mt 3402  379 L
+3402  379 mt 3437  358 L
+3437  358 mt 3445  355 L
+3445  355 mt 3472  348 L
+3472  348 mt 3507  343 L
+3507  343 mt 3542  338 L
+3542  338 mt 3577  333 L
+3577  333 mt 3599  328 L
+3599  328 mt 3611  326 L
+3611  326 mt 3646  317 L
+3646  317 mt 3681  307 L
+3681  307 mt 3708  300 L
+3708  300 mt 3716  299 L
+3716  299 mt 3751  291 L
+3751  291 mt 3786  283 L
+3786  283 mt 3821  276 L
+3821  276 mt 3834  273 L
+3834  273 mt 3855  269 L
+3855  269 mt 3890  261 L
+3890  261 mt 3925  253 L
+3925  253 mt 3954  245 L
+3954  245 mt 3960  244 L
+3960  244 mt 3995  236 L
+3995  236 mt 4030  227 L
+4030  227 mt 4065  219 L
+4065  219 mt 4069  218 L
+4069  218 mt 4100  211 L
+4100  211 mt 4134  203 L
+4134  203 mt 4169  195 L
+4169  195 mt 4193  190 L
+4193  190 mt 4204  188 L
+4204  188 mt 4239  181 L
+4239  181 mt 4274  174 L
+4274  174 mt 4309  168 L
+4309  168 mt 4337  163 L
+4337  163 mt 4344  162 L
+4344  162 mt 4379  156 L
+4379  156 mt 4413  151 L
+4413  151 mt 4448  147 L
+4448  147 mt 4483  143 L
+4483  143 mt 4518  139 L
+4518  139 mt 4553  137 L
+4553  137 mt 4570  135 L
+4570  135 mt 4588  134 L
+4588  134 mt 4623  132 L
+4623  132 mt 4657  131 L
+4657  131 mt 4692  130 L
+4692  130 mt 4727  130 L
+4727  130 mt 4762  130 L
+4762  130 mt 4797  130 L
+4797  130 mt 4832  132 L
+4832  132 mt 4867  134 L
+4867  134 mt 4892  135 L
+4892  135 mt 4902  136 L
+4902  136 mt 4936  139 L
+4936  139 mt 4971  144 L
+4971  144 mt 5006  149 L
+5006  149 mt 5041  155 L
+5041  155 mt 5076  162 L
+5076  162 mt 5078  163 L
+5078  163 mt 5111  171 L
+5111  171 mt 5146  180 L
+5146  180 mt 5176  190 L
+5176  190 mt 5181  192 L
+5181  192 mt 5215  205 L
+5215  205 mt 5247  218 L
+5247  218 mt 5250  219 L
+5250  219 mt 5285  236 L
+5285  236 mt 5303  245 L
+5303  245 mt 5320  255 L
+5320  255 mt 5350  273 L
+5350  273 mt 5355  276 L
+5355  276 mt 5390  299 L
+5390  299 mt 5392  300 L
+5392  300 mt 5425  324 L
+5425  324 mt 5430  328 L
+5430  328 mt 5459  352 L
+5459  352 mt 5464  355 L
+5464  355 mt 5494  381 L
+5494  381 mt 5497  383 L
+5497  383 mt 5528  411 L
+5528  411 mt 5529  412 L
+5529  412 mt 5558  438 L
+5558  438 mt 5564  443 L
+5564  443 mt 5588  466 L
+5588  466 mt 5599  476 L
+5599  476 mt 5616  493 L
+5616  493 mt 5634  510 L
+5634  510 mt 5644  521 L
+5644  521 mt 5669  545 L
+5669  545 mt 5671  548 L
+5671  548 mt 5698  576 L
+5698  576 mt 5704  582 L
+5704  582 mt 5724  603 L
+5724  603 mt 5738  619 L
+5738  619 mt 5749  631 L
+5749  631 mt 5773  658 L
+5773  658 mt 5774  658 L
+5774  658 mt 5798  686 L
+5798  686 mt 5808  697 L
+5808  697 mt 5823  713 L
+5823  713 mt 5843  736 L
+5843  736 mt 5847  741 L
+5847  741 mt 5872  768 L
+5872  768 mt 5878  775 L
+5878  775 mt 5896  796 L
+5896  796 mt 5913  815 L
+5913  815 mt 5921  823 L
+5921  823 mt 5945  851 L
+5945  851 mt 5948  854 L
+5948  854 mt 5970  878 L
+5970  878 mt 5983  892 L
+5983  892 mt 5995  906 L
+5995  906 mt 6017  931 L
+6017  931 mt 6019  933 L
+6019  933 mt 6044  961 L
+6044  961 mt 6052  970 L
+6052  970 mt 6069  988 L
+6069  988 mt 6087 1009 L
+6087 1009 mt 6093 1016 L
+6093 1016 mt 6118 1043 L
+6118 1043 mt 6122 1048 L
+6122 1048 mt 6142 1071 L
+6142 1071 mt 6157 1087 L
+6157 1087 mt 6167 1098 L
+6167 1098 mt 6192 1126 L
+6192 1126 mt 6192 1126 L
+6192 1126 mt 6216 1153 L
+6216 1153 mt 6227 1165 L
+6227 1165 mt 6241 1181 L
+6241 1181 mt 6261 1204 L
+6261 1204 mt 6266 1208 L
+6266 1208 mt 6291 1236 L
+6291 1236 mt 6296 1242 L
+6296 1242 mt 6316 1263 L
+6316 1263 mt 6331 1281 L
+6331 1281 mt 6340 1291 L
+6340 1291 mt 6364 1318 L
+6364 1318 mt 6366 1320 L
+6366 1320 mt 6388 1346 L
+6388 1346 mt 6401 1362 L
+6401 1362 mt 6410 1373 L
+6410 1373 mt 6432 1401 L
+6432 1401 mt 6436 1406 L
+6436 1406 mt 6452 1428 L
+6452 1428 mt 6471 1454 L
+6471 1454 mt 6472 1456 L
+6472 1456 mt 6490 1484 L
+6490 1484 mt 6506 1509 L
+6506 1509 mt 6507 1511 L
+6507 1511 mt 6523 1539 L
+6523 1539 mt 6537 1566 L
+6537 1566 mt 6540 1573 L
+6540 1573 mt 6550 1594 L
+6550 1594 mt 6562 1621 L
+6562 1621 mt 6573 1649 L
+6573 1649 mt 6575 1656 L
+6575 1656 mt 6582 1676 L
+6582 1676 mt 6591 1704 L
+6591 1704 mt 6599 1731 L
+6599 1731 mt 6605 1759 L
+6605 1759 mt 6610 1784 L
+ 752 2304 mt  762 2281 L
+ 762 2281 mt  777 2254 L
+ 777 2254 mt  787 2238 L
+ 787 2238 mt  795 2226 L
+ 795 2226 mt  816 2199 L
+ 816 2199 mt  822 2192 L
+ 822 2192 mt  841 2171 L
+ 841 2171 mt  857 2153 L
+ 857 2153 mt  868 2144 L
+ 868 2144 mt  890 2116 L
+ 890 2116 mt  892 2115 L
+ 892 2115 mt  918 2089 L
+ 918 2089 mt  926 2084 L
+ 926 2084 mt  938 2089 L
+ 938 2089 mt  961 2104 L
+ 961 2104 mt  973 2116 L
+ 973 2116 mt  995 2144 L
+ 995 2144 mt  996 2145 L
+ 996 2145 mt 1014 2171 L
+1014 2171 mt 1031 2197 L
+1031 2197 mt 1032 2199 L
+1032 2199 mt 1052 2226 L
+1052 2226 mt 1066 2244 L
+1066 2244 mt 1074 2254 L
+1074 2254 mt 1101 2278 L
+1101 2278 mt 1105 2281 L
+1105 2281 mt 1136 2301 L
+1136 2301 mt 1149 2309 L
+1149 2309 mt 1170 2319 L
+1170 2319 mt 1205 2333 L
+1205 2333 mt 1215 2336 L
+1215 2336 mt 1240 2346 L
+1240 2346 mt 1275 2360 L
+1275 2360 mt 1283 2364 L
+1283 2364 mt 1308 2391 L
+1308 2391 mt 1310 2405 L
+1310 2405 mt 1313 2419 L
+1313 2419 mt 1313 2446 L
+1313 2446 mt 1315 2474 L
+1315 2474 mt 1327 2502 L
+1327 2502 mt 1345 2520 L
+1345 2520 mt 1355 2529 L
+1355 2529 mt 1380 2545 L
+1380 2545 mt 1395 2557 L
+1395 2557 mt 1415 2571 L
+1415 2571 mt 1428 2584 L
+1428 2584 mt 1449 2610 L
+1449 2610 mt 1450 2612 L
+1450 2612 mt 1466 2639 L
+1466 2639 mt 1476 2667 L
+1476 2667 mt 1484 2691 L
+1484 2691 mt 1485 2694 L
+1485 2694 mt 1497 2722 L
+1497 2722 mt 1514 2749 L
+1514 2749 mt 1519 2755 L
+1519 2755 mt 1537 2777 L
+1537 2777 mt 1554 2794 L
+1554 2794 mt 1565 2804 L
+1565 2804 mt 1589 2826 L
+1589 2826 mt 1596 2832 L
+1596 2832 mt 1624 2857 L
+1624 2857 mt 1626 2859 L
+1626 2859 mt 1653 2887 L
+1653 2887 mt 1659 2894 L
+1659 2894 mt 1677 2914 L
+1677 2914 mt 1694 2934 L
+1694 2934 mt 1700 2942 L
+1700 2942 mt 1727 2969 L
+1727 2969 mt 1728 2970 L
+1728 2970 mt 1757 2997 L
+1757 2997 mt 1763 3003 L
+1763 3003 mt 1783 3024 L
+1783 3024 mt 1798 3049 L
+1798 3049 mt 1800 3052 L
+1800 3052 mt 1805 3079 L
+1805 3079 mt 1798 3093 L
+1798 3093 mt 1782 3107 L
+1782 3107 mt 1763 3112 L
+1763 3112 mt 1728 3108 L
+1728 3108 mt 1723 3107 L
+1723 3107 mt 1694 3097 L
+1694 3097 mt 1659 3086 L
+1659 3086 mt 1638 3079 L
+1638 3079 mt 1624 3074 L
+1624 3074 mt 1589 3063 L
+1589 3063 mt 1554 3055 L
+1554 3055 mt 1542 3052 L
+1542 3052 mt 1519 3045 L
+1519 3045 mt 1484 3036 L
+1484 3036 mt 1449 3027 L
+1449 3027 mt 1438 3024 L
+1438 3024 mt 1415 3019 L
+1415 3019 mt 1380 3012 L
+1380 3012 mt 1345 3005 L
+1345 3005 mt 1310 2999 L
+1310 2999 mt 1296 2997 L
+1296 2997 mt 1275 2993 L
+1275 2993 mt 1240 2983 L
+1240 2983 mt 1208 2969 L
+1208 2969 mt 1205 2968 L
+1205 2968 mt 1170 2945 L
+1170 2945 mt 1165 2942 L
+1165 2942 mt 1136 2924 L
+1136 2924 mt 1113 2914 L
+1113 2914 mt 1101 2909 L
+1101 2909 mt 1066 2897 L
+1066 2897 mt 1031 2888 L
+1031 2888 mt 1028 2887 L
+1028 2887 mt  996 2879 L
+ 996 2879 mt  961 2869 L
+ 961 2869 mt  934 2859 L
+ 934 2859 mt  926 2856 L
+ 926 2856 mt  892 2838 L
+ 892 2838 mt  882 2832 L
+ 882 2832 mt  857 2812 L
+ 857 2812 mt  848 2804 L
+ 848 2804 mt  822 2778 L
+ 822 2778 mt  821 2777 L
+ 821 2777 mt  799 2749 L
+ 799 2749 mt  787 2731 L
+ 787 2731 mt  781 2722 L
+ 781 2722 mt  766 2694 L
+ 766 2694 mt  754 2667 L
+ 754 2667 mt  752 2662 L
+ 752 2662 mt  744 2639 L
+ 744 2639 mt  736 2612 L
+ 736 2612 mt  730 2584 L
+ 730 2584 mt  725 2557 L
+ 725 2557 mt  722 2529 L
+ 722 2529 mt  721 2502 L
+ 721 2502 mt  720 2474 L
+ 720 2474 mt  721 2446 L
+ 721 2446 mt  723 2419 L
+ 723 2419 mt  727 2391 L
+ 727 2391 mt  733 2364 L
+ 733 2364 mt  740 2336 L
+ 740 2336 mt  750 2309 L
+ 750 2309 mt  752 2304 L
+ 892 1071 mt  898 1043 L
+ 898 1043 mt  902 1016 L
+ 902 1016 mt  901  988 L
+ 901  988 mt  898  961 L
+ 898  961 mt  895  933 L
+ 895  933 mt  896  906 L
+ 896  906 mt  899  878 L
+ 899  878 mt  909  851 L
+ 909  851 mt  924  823 L
+ 924  823 mt  926  819 L
+ 926  819 mt  939  796 L
+ 939  796 mt  953  768 L
+ 953  768 mt  961  756 L
+ 961  756 mt  973  741 L
+ 973  741 mt  996  713 L
+ 996  713 mt  996  713 L
+ 996  713 mt 1023  686 L
+1023  686 mt 1031  676 L
+1031  676 mt 1045  658 L
+1045  658 mt 1060  631 L
+1060  631 mt 1066  612 L
+1066  612 mt 1069  603 L
+1069  603 mt 1083  576 L
+1083  576 mt 1101  550 L
+1101  550 mt 1102  548 L
+1102  548 mt 1127  521 L
+1127  521 mt 1136  514 L
+1136  514 mt 1165  493 L
+1165  493 mt 1170  489 L
+1170  489 mt 1204  466 L
+1204  466 mt 1205  465 L
+1205  465 mt 1240  447 L
+1240  447 mt 1263  438 L
+1263  438 mt 1275  434 L
+1275  434 mt 1310  425 L
+1310  425 mt 1345  426 L
+1345  426 mt 1375  438 L
+1375  438 mt 1380  440 L
+1380  440 mt 1415  456 L
+1415  456 mt 1442  466 L
+1442  466 mt 1449  469 L
+1449  469 mt 1484  478 L
+1484  478 mt 1519  482 L
+1519  482 mt 1554  484 L
+1554  484 mt 1589  485 L
+1589  485 mt 1624  484 L
+1624  484 mt 1659  481 L
+1659  481 mt 1694  475 L
+1694  475 mt 1721  466 L
+1721  466 mt 1728  463 L
+1728  463 mt 1763  450 L
+1763  450 mt 1786  438 L
+1786  438 mt 1798  433 L
+1798  433 mt 1833  417 L
+1833  417 mt 1847  411 L
+1847  411 mt 1868  403 L
+1868  403 mt 1903  393 L
+1903  393 mt 1938  396 L
+1938  396 mt 1963  411 L
+1963  411 mt 1972  424 L
+1972  424 mt 1986  438 L
+1986  438 mt 1994  466 L
+1994  466 mt 1981  493 L
+1981  493 mt 1972  499 L
+1972  499 mt 1945  521 L
+1945  521 mt 1938  524 L
+1938  524 mt 1903  545 L
+1903  545 mt 1899  548 L
+1899  548 mt 1868  567 L
+1868  567 mt 1853  576 L
+1853  576 mt 1833  586 L
+1833  586 mt 1802  603 L
+1802  603 mt 1798  605 L
+1798  605 mt 1763  620 L
+1763  620 mt 1728  629 L
+1728  629 mt 1694  625 L
+1694  625 mt 1659  617 L
+1659  617 mt 1624  609 L
+1624  609 mt 1591  603 L
+1591  603 mt 1589  603 L
+1589  603 mt 1554  599 L
+1554  599 mt 1519  600 L
+1519  600 mt 1503  603 L
+1503  603 mt 1484  606 L
+1484  606 mt 1449  618 L
+1449  618 mt 1431  631 L
+1431  631 mt 1415  644 L
+1415  644 mt 1402  658 L
+1402  658 mt 1382  686 L
+1382  686 mt 1380  689 L
+1380  689 mt 1365  713 L
+1365  713 mt 1349  741 L
+1349  741 mt 1345  747 L
+1345  747 mt 1332  768 L
+1332  768 mt 1312  796 L
+1312  796 mt 1310  798 L
+1310  798 mt 1289  823 L
+1289  823 mt 1275  838 L
+1275  838 mt 1262  851 L
+1262  851 mt 1240  871 L
+1240  871 mt 1232  878 L
+1232  878 mt 1205  904 L
+1205  904 mt 1203  906 L
+1203  906 mt 1176  933 L
+1176  933 mt 1170  940 L
+1170  940 mt 1153  961 L
+1153  961 mt 1136  988 L
+1136  988 mt 1136  990 L
+1136  990 mt 1126 1016 L
+1126 1016 mt 1119 1043 L
+1119 1043 mt 1115 1071 L
+1115 1071 mt 1112 1098 L
+1112 1098 mt 1109 1126 L
+1109 1126 mt 1105 1153 L
+1105 1153 mt 1101 1181 L
+1101 1181 mt 1101 1183 L
+1101 1183 mt 1096 1208 L
+1096 1208 mt 1088 1236 L
+1088 1236 mt 1077 1263 L
+1077 1263 mt 1066 1281 L
+1066 1281 mt 1060 1291 L
+1060 1291 mt 1038 1318 L
+1038 1318 mt 1031 1325 L
+1031 1325 mt 1011 1346 L
+1011 1346 mt  996 1360 L
+ 996 1360 mt  978 1373 L
+ 978 1373 mt  961 1385 L
+ 961 1385 mt  926 1396 L
+ 926 1396 mt  893 1373 L
+ 893 1373 mt  895 1346 L
+ 895 1346 mt  896 1318 L
+ 896 1318 mt  896 1291 L
+ 896 1291 mt  892 1275 L
+ 892 1275 mt  889 1263 L
+ 889 1263 mt  881 1236 L
+ 881 1236 mt  870 1208 L
+ 870 1208 mt  865 1181 L
+ 865 1181 mt  868 1153 L
+ 868 1153 mt  875 1126 L
+ 875 1126 mt  884 1098 L
+ 884 1098 mt  892 1071 L
+ 892 1071 mt  892 1071 L
+1833 4551 mt 1840 4537 L
+1840 4537 mt 1868 4512 L
+1868 4512 mt 1870 4510 L
+1870 4510 mt 1903 4486 L
+1903 4486 mt 1908 4482 L
+1908 4482 mt 1938 4462 L
+1938 4462 mt 1951 4455 L
+1951 4455 mt 1972 4443 L
+1972 4443 mt 2007 4435 L
+2007 4435 mt 2042 4440 L
+2042 4440 mt 2077 4454 L
+2077 4454 mt 2078 4455 L
+2078 4455 mt 2112 4472 L
+2112 4472 mt 2133 4482 L
+2133 4482 mt 2147 4489 L
+2147 4489 mt 2182 4506 L
+2182 4506 mt 2190 4510 L
+2190 4510 mt 2217 4522 L
+2217 4522 mt 2251 4537 L
+2251 4537 mt 2254 4537 L
+2254 4537 mt 2286 4556 L
+2286 4556 mt 2303 4565 L
+2303 4565 mt 2315 4592 L
+2315 4592 mt 2291 4620 L
+2291 4620 mt 2286 4622 L
+2286 4622 mt 2251 4638 L
+2251 4638 mt 2221 4648 L
+2221 4648 mt 2217 4649 L
+2217 4649 mt 2182 4656 L
+2182 4656 mt 2147 4659 L
+2147 4659 mt 2112 4659 L
+2112 4659 mt 2077 4656 L
+2077 4656 mt 2042 4652 L
+2042 4652 mt 2011 4648 L
+2011 4648 mt 2007 4647 L
+2007 4647 mt 1972 4640 L
+1972 4640 mt 1938 4632 L
+1938 4632 mt 1903 4622 L
+1903 4622 mt 1898 4620 L
+1898 4620 mt 1868 4606 L
+1868 4606 mt 1841 4592 L
+1841 4592 mt 1833 4579 L
+1833 4579 mt 1827 4565 L
+1827 4565 mt 1833 4551 L
+2077 3418 mt 2112 3433 L
+2112 3433 mt 2118 3437 L
+2118 3437 mt 2147 3453 L
+2147 3453 mt 2164 3464 L
+2164 3464 mt 2182 3475 L
+2182 3475 mt 2206 3492 L
+2206 3492 mt 2217 3500 L
+2217 3500 mt 2241 3519 L
+2241 3519 mt 2251 3528 L
+2251 3528 mt 2268 3547 L
+2268 3547 mt 2286 3574 L
+2286 3574 mt 2286 3575 L
+2286 3575 mt 2292 3602 L
+2292 3602 mt 2287 3630 L
+2287 3630 mt 2286 3630 L
+2286 3630 mt 2251 3656 L
+2251 3656 mt 2250 3657 L
+2250 3657 mt 2217 3665 L
+2217 3665 mt 2182 3665 L
+2182 3665 mt 2152 3657 L
+2152 3657 mt 2147 3654 L
+2147 3654 mt 2127 3630 L
+2127 3630 mt 2112 3607 L
+2112 3607 mt 2110 3602 L
+2110 3602 mt 2104 3575 L
+2104 3575 mt 2098 3547 L
+2098 3547 mt 2089 3519 L
+2089 3519 mt 2077 3493 L
+2077 3493 mt 2077 3492 L
+2077 3492 mt 2070 3464 L
+2070 3464 mt 2064 3437 L
+2064 3437 mt 2077 3418 L
+6575 1830 mt 6577 1841 L
+6577 1841 mt 6580 1869 L
+6580 1869 mt 6582 1896 L
+6582 1896 mt 6584 1924 L
+6584 1924 mt 6584 1951 L
+6584 1951 mt 6584 1979 L
+6584 1979 mt 6584 2006 L
+6584 2006 mt 6582 2034 L
+6582 2034 mt 6580 2061 L
+6580 2061 mt 6578 2089 L
+6578 2089 mt 6575 2108 L
+6575 2108 mt 6574 2116 L
+6574 2116 mt 6570 2144 L
+6570 2144 mt 6566 2171 L
+6566 2171 mt 6560 2199 L
+6560 2199 mt 6554 2226 L
+6554 2226 mt 6547 2254 L
+6547 2254 mt 6540 2279 L
+6540 2279 mt 6540 2281 L
+6540 2281 mt 6532 2309 L
+6532 2309 mt 6523 2336 L
+6523 2336 mt 6513 2364 L
+6513 2364 mt 6506 2384 L
+6506 2384 mt 6503 2391 L
+6503 2391 mt 6491 2419 L
+6491 2419 mt 6478 2446 L
+6478 2446 mt 6471 2460 L
+6471 2460 mt 6463 2474 L
+6463 2474 mt 6447 2502 L
+6447 2502 mt 6436 2517 L
+6436 2517 mt 6428 2529 L
+6428 2529 mt 6406 2557 L
+6406 2557 mt 6401 2562 L
+6401 2562 mt 6380 2584 L
+6380 2584 mt 6366 2597 L
+6366 2597 mt 6349 2612 L
+6349 2612 mt 6331 2626 L
+6331 2626 mt 6310 2639 L
+6310 2639 mt 6296 2648 L
+6296 2648 mt 6261 2664 L
+6261 2664 mt 6253 2667 L
+6253 2667 mt 6227 2674 L
+6227 2674 mt 6192 2677 L
+6192 2677 mt 6157 2676 L
+6157 2676 mt 6122 2675 L
+6122 2675 mt 6087 2675 L
+6087 2675 mt 6052 2678 L
+6052 2678 mt 6017 2682 L
+6017 2682 mt 5983 2689 L
+5983 2689 mt 5961 2694 L
+5961 2694 mt 5948 2697 L
+5948 2697 mt 5913 2705 L
+5913 2705 mt 5878 2710 L
+5878 2710 mt 5843 2711 L
+5843 2711 mt 5808 2708 L
+5808 2708 mt 5773 2700 L
+5773 2700 mt 5759 2694 L
+5759 2694 mt 5738 2684 L
+5738 2684 mt 5710 2667 L
+5710 2667 mt 5704 2661 L
+5704 2661 mt 5683 2639 L
+5683 2639 mt 5672 2612 L
+5672 2612 mt 5673 2584 L
+5673 2584 mt 5677 2557 L
+5677 2557 mt 5680 2529 L
+5680 2529 mt 5682 2502 L
+5682 2502 mt 5681 2474 L
+5681 2474 mt 5680 2446 L
+5680 2446 mt 5681 2419 L
+5681 2419 mt 5685 2391 L
+5685 2391 mt 5692 2364 L
+5692 2364 mt 5703 2336 L
+5703 2336 mt 5704 2334 L
+5704 2334 mt 5716 2309 L
+5716 2309 mt 5730 2281 L
+5730 2281 mt 5738 2266 L
+5738 2266 mt 5745 2254 L
+5745 2254 mt 5754 2226 L
+5754 2226 mt 5759 2199 L
+5759 2199 mt 5760 2171 L
+5760 2171 mt 5755 2144 L
+5755 2144 mt 5746 2116 L
+5746 2116 mt 5738 2102 L
+5738 2102 mt 5731 2089 L
+5731 2089 mt 5715 2061 L
+5715 2061 mt 5704 2044 L
+5704 2044 mt 5697 2034 L
+5697 2034 mt 5680 2006 L
+5680 2006 mt 5669 1989 L
+5669 1989 mt 5662 1979 L
+5662 1979 mt 5645 1951 L
+5645 1951 mt 5634 1936 L
+5634 1936 mt 5626 1924 L
+5626 1924 mt 5604 1896 L
+5604 1896 mt 5599 1890 L
+5599 1890 mt 5579 1869 L
+5579 1869 mt 5564 1856 L
+5564 1856 mt 5546 1841 L
+5546 1841 mt 5529 1829 L
+5529 1829 mt 5507 1814 L
+5507 1814 mt 5494 1806 L
+5494 1806 mt 5466 1786 L
+5466 1786 mt 5459 1782 L
+5459 1782 mt 5430 1759 L
+5430 1759 mt 5425 1754 L
+5425 1754 mt 5396 1731 L
+5396 1731 mt 5390 1727 L
+5390 1727 mt 5357 1704 L
+5357 1704 mt 5355 1703 L
+5355 1703 mt 5320 1684 L
+5320 1684 mt 5295 1676 L
+5295 1676 mt 5285 1673 L
+5285 1673 mt 5250 1669 L
+5250 1669 mt 5215 1669 L
+5215 1669 mt 5181 1673 L
+5181 1673 mt 5155 1676 L
+5155 1676 mt 5146 1677 L
+5146 1677 mt 5111 1681 L
+5111 1681 mt 5076 1680 L
+5076 1680 mt 5058 1676 L
+5058 1676 mt 5041 1649 L
+5041 1649 mt 5044 1621 L
+5044 1621 mt 5047 1594 L
+5047 1594 mt 5049 1566 L
+5049 1566 mt 5045 1539 L
+5045 1539 mt 5041 1526 L
+5041 1526 mt 5035 1511 L
+5035 1511 mt 5014 1484 L
+5014 1484 mt 5006 1476 L
+5006 1476 mt 4979 1456 L
+4979 1456 mt 4971 1451 L
+4971 1451 mt 4936 1435 L
+4936 1435 mt 4917 1428 L
+4917 1428 mt 4902 1424 L
+4902 1424 mt 4867 1418 L
+4867 1418 mt 4832 1416 L
+4832 1416 mt 4797 1416 L
+4797 1416 mt 4762 1415 L
+4762 1415 mt 4727 1409 L
+4727 1409 mt 4703 1401 L
+4703 1401 mt 4692 1396 L
+4692 1396 mt 4662 1373 L
+4662 1373 mt 4657 1368 L
+4657 1368 mt 4641 1346 L
+4641 1346 mt 4627 1318 L
+4627 1318 mt 4623 1306 L
+4623 1306 mt 4617 1291 L
+4617 1291 mt 4614 1263 L
+4614 1263 mt 4619 1236 L
+4619 1236 mt 4623 1229 L
+4623 1229 mt 4634 1208 L
+4634 1208 mt 4653 1181 L
+4653 1181 mt 4657 1174 L
+4657 1174 mt 4670 1153 L
+4670 1153 mt 4680 1126 L
+4680 1126 mt 4683 1098 L
+4683 1098 mt 4678 1071 L
+4678 1071 mt 4666 1043 L
+4666 1043 mt 4657 1031 L
+4657 1031 mt 4645 1016 L
+4645 1016 mt 4623  992 L
+4623  992 mt 4619  988 L
+4619  988 mt 4589  961 L
+4589  961 mt 4588  959 L
+4588  959 mt 4560  933 L
+4560  933 mt 4553  926 L
+4553  926 mt 4532  906 L
+4532  906 mt 4518  891 L
+4518  891 mt 4505  878 L
+4505  878 mt 4483  856 L
+4483  856 mt 4478  851 L
+4478  851 mt 4449  823 L
+4449  823 mt 4448  823 L
+4448  823 mt 4417  796 L
+4417  796 mt 4413  792 L
+4413  792 mt 4383  768 L
+4383  768 mt 4379  765 L
+4379  765 mt 4347  741 L
+4347  741 mt 4344  738 L
+4344  738 mt 4310  713 L
+4310  713 mt 4309  712 L
+4309  712 mt 4274  687 L
+4274  687 mt 4272  686 L
+4272  686 mt 4239  663 L
+4239  663 mt 4231  658 L
+4231  658 mt 4204  641 L
+4204  641 mt 4186  631 L
+4186  631 mt 4169  622 L
+4169  622 mt 4134  606 L
+4134  606 mt 4128  603 L
+4128  603 mt 4100  592 L
+4100  592 mt 4065  580 L
+4065  580 mt 4053  576 L
+4053  576 mt 4030  568 L
+4030  568 mt 3995  557 L
+3995  557 mt 3966  548 L
+3966  548 mt 3960  546 L
+3960  546 mt 3925  536 L
+3925  536 mt 3890  526 L
+3890  526 mt 3866  521 L
+3866  521 mt 3855  518 L
+3855  518 mt 3821  510 L
+3821  510 mt 3786  502 L
+3786  502 mt 3751  493 L
+3751  493 mt 3751  493 L
+3751  493 mt 3716  482 L
+3716  482 mt 3681  467 L
+3681  467 mt 3678  466 L
+3678  466 mt 3651  438 L
+3651  438 mt 3655  411 L
+3655  411 mt 3681  385 L
+3681  385 mt 3682  383 L
+3682  383 mt 3716  362 L
+3716  362 mt 3736  355 L
+3736  355 mt 3751  351 L
+3751  351 mt 3786  344 L
+3786  344 mt 3821  339 L
+3821  339 mt 3855  332 L
+3855  332 mt 3872  328 L
+3872  328 mt 3890  324 L
+3890  324 mt 3925  314 L
+3925  314 mt 3960  303 L
+3960  303 mt 3967  300 L
+3967  300 mt 3995  292 L
+3995  292 mt 4030  282 L
+4030  282 mt 4061  273 L
+4061  273 mt 4065  272 L
+4065  272 mt 4100  263 L
+4100  263 mt 4134  253 L
+4134  253 mt 4165  245 L
+4165  245 mt 4169  244 L
+4169  244 mt 4204  236 L
+4204  236 mt 4239  227 L
+4239  227 mt 4274  219 L
+4274  219 mt 4279  218 L
+4279  218 mt 4309  212 L
+4309  212 mt 4344  204 L
+4344  204 mt 4379  198 L
+4379  198 mt 4413  191 L
+4413  191 mt 4419  190 L
+4419  190 mt 4448  186 L
+4448  186 mt 4483  181 L
+4483  181 mt 4518  176 L
+4518  176 mt 4553  173 L
+4553  173 mt 4588  169 L
+4588  169 mt 4623  167 L
+4623  167 mt 4657  164 L
+4657  164 mt 4688  163 L
+4688  163 mt 4692  163 L
+4692  163 mt 4727  161 L
+4727  161 mt 4762  161 L
+4762  161 mt 4797  160 L
+4797  160 mt 4832  161 L
+4832  161 mt 4867  162 L
+4867  162 mt 4889  163 L
+4889  163 mt 4902  164 L
+4902  164 mt 4936  166 L
+4936  166 mt 4971  170 L
+4971  170 mt 5006  174 L
+5006  174 mt 5041  180 L
+5041  180 mt 5076  187 L
+5076  187 mt 5091  190 L
+5091  190 mt 5111  195 L
+5111  195 mt 5146  205 L
+5146  205 mt 5181  216 L
+5181  216 mt 5185  218 L
+5185  218 mt 5215  230 L
+5215  230 mt 5250  245 L
+5250  245 mt 5251  245 L
+5251  245 mt 5285  263 L
+5285  263 mt 5304  273 L
+5304  273 mt 5320  283 L
+5320  283 mt 5348  300 L
+5348  300 mt 5355  305 L
+5355  305 mt 5387  328 L
+5387  328 mt 5390  330 L
+5390  330 mt 5423  355 L
+5423  355 mt 5425  357 L
+5425  357 mt 5456  383 L
+5456  383 mt 5459  386 L
+5459  386 mt 5487  411 L
+5487  411 mt 5494  417 L
+5494  417 mt 5517  438 L
+5517  438 mt 5529  449 L
+5529  449 mt 5547  466 L
+5547  466 mt 5564  482 L
+5564  482 mt 5575  493 L
+5575  493 mt 5599  517 L
+5599  517 mt 5603  521 L
+5603  521 mt 5630  548 L
+5630  548 mt 5634  552 L
+5634  552 mt 5656  576 L
+5656  576 mt 5669  589 L
+5669  589 mt 5682  603 L
+5682  603 mt 5704  627 L
+5704  627 mt 5707  631 L
+5707  631 mt 5732  658 L
+5732  658 mt 5738  666 L
+5738  666 mt 5756  686 L
+5756  686 mt 5773  706 L
+5773  706 mt 5779  713 L
+5779  713 mt 5803  741 L
+5803  741 mt 5808  746 L
+5808  746 mt 5827  768 L
+5827  768 mt 5843  786 L
+5843  786 mt 5851  796 L
+5851  796 mt 5875  823 L
+5875  823 mt 5878  826 L
+5878  826 mt 5900  851 L
+5900  851 mt 5913  866 L
+5913  866 mt 5924  878 L
+5924  878 mt 5948  905 L
+5948  905 mt 5948  906 L
+5948  906 mt 5973  933 L
+5973  933 mt 5983  944 L
+5983  944 mt 5998  961 L
+5998  961 mt 6017  983 L
+6017  983 mt 6022  988 L
+6022  988 mt 6047 1016 L
+6047 1016 mt 6052 1022 L
+6052 1022 mt 6071 1043 L
+6071 1043 mt 6087 1061 L
+6087 1061 mt 6096 1071 L
+6096 1071 mt 6120 1098 L
+6120 1098 mt 6122 1101 L
+6122 1101 mt 6144 1126 L
+6144 1126 mt 6157 1140 L
+6157 1140 mt 6169 1153 L
+6169 1153 mt 6192 1179 L
+6192 1179 mt 6194 1181 L
+6194 1181 mt 6218 1208 L
+6218 1208 mt 6227 1218 L
+6227 1218 mt 6243 1236 L
+6243 1236 mt 6261 1256 L
+6261 1256 mt 6268 1263 L
+6268 1263 mt 6293 1291 L
+6293 1291 mt 6296 1295 L
+6296 1295 mt 6317 1318 L
+6317 1318 mt 6331 1334 L
+6331 1334 mt 6342 1346 L
+6342 1346 mt 6365 1373 L
+6365 1373 mt 6366 1375 L
+6366 1375 mt 6387 1401 L
+6387 1401 mt 6401 1419 L
+6401 1419 mt 6409 1428 L
+6409 1428 mt 6429 1456 L
+6429 1456 mt 6436 1466 L
+6436 1466 mt 6448 1484 L
+6448 1484 mt 6465 1511 L
+6465 1511 mt 6471 1521 L
+6471 1521 mt 6481 1539 L
+6481 1539 mt 6496 1566 L
+6496 1566 mt 6506 1586 L
+6506 1586 mt 6509 1594 L
+6509 1594 mt 6521 1621 L
+6521 1621 mt 6532 1649 L
+6532 1649 mt 6540 1673 L
+6540 1673 mt 6541 1676 L
+6541 1676 mt 6550 1704 L
+6550 1704 mt 6557 1731 L
+6557 1731 mt 6563 1759 L
+6563 1759 mt 6569 1786 L
+6569 1786 mt 6573 1814 L
+6573 1814 mt 6575 1830 L
+ 787 2363 mt  797 2336 L
+ 797 2336 mt  811 2309 L
+ 811 2309 mt  822 2292 L
+ 822 2292 mt  830 2281 L
+ 830 2281 mt  855 2254 L
+ 855 2254 mt  857 2253 L
+ 857 2253 mt  892 2228 L
+ 892 2228 mt  897 2226 L
+ 897 2226 mt  926 2216 L
+ 926 2216 mt  955 2226 L
+ 955 2226 mt  961 2228 L
+ 961 2228 mt  992 2254 L
+ 992 2254 mt  996 2257 L
+ 996 2257 mt 1021 2281 L
+1021 2281 mt 1031 2290 L
+1031 2290 mt 1054 2309 L
+1054 2309 mt 1066 2318 L
+1066 2318 mt 1092 2336 L
+1092 2336 mt 1101 2342 L
+1101 2342 mt 1136 2363 L
+1136 2363 mt 1138 2364 L
+1138 2364 mt 1170 2384 L
+1170 2384 mt 1182 2391 L
+1182 2391 mt 1201 2419 L
+1201 2419 mt 1205 2446 L
+1205 2446 mt 1205 2474 L
+1205 2474 mt 1205 2476 L
+1205 2476 mt 1208 2502 L
+1208 2502 mt 1218 2529 L
+1218 2529 mt 1238 2557 L
+1238 2557 mt 1240 2559 L
+1240 2559 mt 1275 2583 L
+1275 2583 mt 1277 2584 L
+1277 2584 mt 1310 2600 L
+1310 2600 mt 1332 2612 L
+1332 2612 mt 1345 2619 L
+1345 2619 mt 1371 2639 L
+1371 2639 mt 1380 2648 L
+1380 2648 mt 1394 2667 L
+1394 2667 mt 1410 2694 L
+1410 2694 mt 1415 2703 L
+1415 2703 mt 1423 2722 L
+1423 2722 mt 1438 2749 L
+1438 2749 mt 1449 2767 L
+1449 2767 mt 1457 2777 L
+1457 2777 mt 1480 2804 L
+1480 2804 mt 1484 2809 L
+1484 2809 mt 1506 2832 L
+1506 2832 mt 1519 2846 L
+1519 2846 mt 1532 2859 L
+1532 2859 mt 1554 2887 L
+1554 2887 mt 1554 2887 L
+1554 2887 mt 1570 2914 L
+1570 2914 mt 1581 2942 L
+1581 2942 mt 1578 2969 L
+1578 2969 mt 1554 2983 L
+1554 2983 mt 1519 2985 L
+1519 2985 mt 1484 2982 L
+1484 2982 mt 1449 2978 L
+1449 2978 mt 1415 2974 L
+1415 2974 mt 1385 2969 L
+1385 2969 mt 1380 2968 L
+1380 2968 mt 1345 2961 L
+1345 2961 mt 1310 2953 L
+1310 2953 mt 1275 2942 L
+1275 2942 mt 1275 2942 L
+1275 2942 mt 1240 2924 L
+1240 2924 mt 1226 2914 L
+1226 2914 mt 1205 2901 L
+1205 2901 mt 1181 2887 L
+1181 2887 mt 1170 2881 L
+1170 2881 mt 1136 2868 L
+1136 2868 mt 1108 2859 L
+1108 2859 mt 1101 2857 L
+1101 2857 mt 1066 2848 L
+1066 2848 mt 1031 2842 L
+1031 2842 mt  996 2837 L
+ 996 2837 mt  969 2832 L
+ 969 2832 mt  961 2830 L
+ 961 2830 mt  926 2819 L
+ 926 2819 mt  900 2804 L
+ 900 2804 mt  892 2799 L
+ 892 2799 mt  867 2777 L
+ 867 2777 mt  857 2765 L
+ 857 2765 mt  843 2749 L
+ 843 2749 mt  823 2722 L
+ 823 2722 mt  822 2720 L
+ 822 2720 mt  807 2694 L
+ 807 2694 mt  795 2667 L
+ 795 2667 mt  787 2644 L
+ 787 2644 mt  785 2639 L
+ 785 2639 mt  778 2612 L
+ 778 2612 mt  773 2584 L
+ 773 2584 mt  770 2557 L
+ 770 2557 mt  768 2529 L
+ 768 2529 mt  768 2502 L
+ 768 2502 mt  768 2474 L
+ 768 2474 mt  770 2446 L
+ 770 2446 mt  774 2419 L
+ 774 2419 mt  779 2391 L
+ 779 2391 mt  787 2364 L
+ 787 2364 mt  787 2363 L
+ 926 1167 mt  932 1153 L
+ 932 1153 mt  952 1126 L
+ 952 1126 mt  961 1110 L
+ 961 1110 mt  978 1098 L
+ 978 1098 mt  996 1072 L
+ 996 1072 mt 1013 1098 L
+1013 1098 mt 1007 1126 L
+1007 1126 mt  996 1148 L
+ 996 1148 mt  992 1153 L
+ 992 1153 mt  962 1181 L
+ 962 1181 mt  961 1181 L
+ 961 1181 mt  926 1184 L
+ 926 1184 mt  924 1181 L
+ 924 1181 mt  926 1167 L
+ 961  857 mt  963  851 L
+ 963  851 mt  977  823 L
+ 977  823 mt  991  796 L
+ 991  796 mt  996  786 L
+ 996  786 mt 1007  768 L
+1007  768 mt 1029  741 L
+1029  741 mt 1031  739 L
+1031  739 mt 1056  713 L
+1056  713 mt 1066  703 L
+1066  703 mt 1083  686 L
+1083  686 mt 1100  658 L
+1100  658 mt 1101  655 L
+1101  655 mt 1107  631 L
+1107  631 mt 1115  603 L
+1115  603 mt 1130  576 L
+1130  576 mt 1136  569 L
+1136  569 mt 1153  548 L
+1153  548 mt 1170  533 L
+1170  533 mt 1187  521 L
+1187  521 mt 1205  508 L
+1205  508 mt 1231  493 L
+1231  493 mt 1240  488 L
+1240  488 mt 1275  476 L
+1275  476 mt 1310  479 L
+1310  479 mt 1333  493 L
+1333  493 mt 1345  512 L
+1345  512 mt 1349  521 L
+1349  521 mt 1348  548 L
+1348  548 mt 1345  560 L
+1345  560 mt 1341  576 L
+1341  576 mt 1335  603 L
+1335  603 mt 1328  631 L
+1328  631 mt 1318  658 L
+1318  658 mt 1310  676 L
+1310  676 mt 1306  686 L
+1306  686 mt 1291  713 L
+1291  713 mt 1275  737 L
+1275  737 mt 1273  741 L
+1273  741 mt 1252  768 L
+1252  768 mt 1240  782 L
+1240  782 mt 1228  796 L
+1228  796 mt 1205  822 L
+1205  822 mt 1204  823 L
+1204  823 mt 1177  851 L
+1177  851 mt 1170  857 L
+1170  857 mt 1150  878 L
+1150  878 mt 1136  893 L
+1136  893 mt 1122  906 L
+1122  906 mt 1101  927 L
+1101  927 mt 1093  933 L
+1093  933 mt 1069  961 L
+1069  961 mt 1066  966 L
+1066  966 mt 1044  988 L
+1044  988 mt 1033 1016 L
+1033 1016 mt 1031 1028 L
+1031 1028 mt 1023 1016 L
+1023 1016 mt  996  992 L
+ 996  992 mt  995  988 L
+ 995  988 mt  978  961 L
+ 978  961 mt  961  943 L
+ 961  943 mt  956  933 L
+ 956  933 mt  950  906 L
+ 950  906 mt  954  878 L
+ 954  878 mt  961  857 L
+1938 4524 mt 1959 4510 L
+1959 4510 mt 1972 4503 L
+1972 4503 mt 2007 4492 L
+2007 4492 mt 2042 4493 L
+2042 4493 mt 2077 4503 L
+2077 4503 mt 2094 4510 L
+2094 4510 mt 2112 4518 L
+2112 4518 mt 2147 4534 L
+2147 4534 mt 2155 4537 L
+2155 4537 mt 2182 4553 L
+2182 4553 mt 2202 4565 L
+2202 4565 mt 2212 4592 L
+2212 4592 mt 2182 4616 L
+2182 4616 mt 2175 4620 L
+2175 4620 mt 2147 4626 L
+2147 4626 mt 2112 4625 L
+2112 4625 mt 2077 4620 L
+2077 4620 mt 2074 4620 L
+2074 4620 mt 2042 4614 L
+2042 4614 mt 2007 4610 L
+2007 4610 mt 1972 4605 L
+1972 4605 mt 1938 4592 L
+1938 4592 mt 1938 4592 L
+1938 4592 mt 1904 4565 L
+1904 4565 mt 1921 4537 L
+1921 4537 mt 1938 4524 L
+6506 1692 mt 6509 1704 L
+6509 1704 mt 6516 1731 L
+6516 1731 mt 6522 1759 L
+6522 1759 mt 6527 1786 L
+6527 1786 mt 6531 1814 L
+6531 1814 mt 6534 1841 L
+6534 1841 mt 6537 1869 L
+6537 1869 mt 6539 1896 L
+6539 1896 mt 6540 1924 L
+6540 1924 mt 6540 1951 L
+6540 1951 mt 6540 1979 L
+6540 1979 mt 6539 2006 L
+6539 2006 mt 6537 2034 L
+6537 2034 mt 6534 2061 L
+6534 2061 mt 6531 2089 L
+6531 2089 mt 6527 2116 L
+6527 2116 mt 6523 2144 L
+6523 2144 mt 6518 2171 L
+6518 2171 mt 6512 2199 L
+6512 2199 mt 6506 2226 L
+6506 2226 mt 6506 2228 L
+6506 2228 mt 6499 2254 L
+6499 2254 mt 6491 2281 L
+6491 2281 mt 6483 2309 L
+6483 2309 mt 6474 2336 L
+6474 2336 mt 6471 2346 L
+6471 2346 mt 6464 2364 L
+6464 2364 mt 6453 2391 L
+6453 2391 mt 6441 2419 L
+6441 2419 mt 6436 2429 L
+6436 2429 mt 6427 2446 L
+6427 2446 mt 6411 2474 L
+6411 2474 mt 6401 2489 L
+6401 2489 mt 6392 2502 L
+6392 2502 mt 6370 2529 L
+6370 2529 mt 6366 2534 L
+6366 2534 mt 6344 2557 L
+6344 2557 mt 6331 2568 L
+6331 2568 mt 6311 2584 L
+6311 2584 mt 6296 2594 L
+6296 2594 mt 6266 2612 L
+6266 2612 mt 6261 2614 L
+6261 2614 mt 6227 2624 L
+6227 2624 mt 6192 2626 L
+6192 2626 mt 6157 2625 L
+6157 2625 mt 6122 2624 L
+6122 2624 mt 6087 2625 L
+6087 2625 mt 6052 2627 L
+6052 2627 mt 6017 2630 L
+6017 2630 mt 5983 2634 L
+5983 2634 mt 5948 2635 L
+5948 2635 mt 5913 2634 L
+5913 2634 mt 5878 2628 L
+5878 2628 mt 5843 2616 L
+5843 2616 mt 5832 2612 L
+5832 2612 mt 5808 2600 L
+5808 2600 mt 5787 2584 L
+5787 2584 mt 5773 2570 L
+5773 2570 mt 5765 2557 L
+5765 2557 mt 5756 2529 L
+5756 2529 mt 5751 2502 L
+5751 2502 mt 5747 2474 L
+5747 2474 mt 5742 2446 L
+5742 2446 mt 5741 2419 L
+5741 2419 mt 5745 2391 L
+5745 2391 mt 5752 2364 L
+5752 2364 mt 5763 2336 L
+5763 2336 mt 5773 2315 L
+5773 2315 mt 5777 2309 L
+5777 2309 mt 5792 2281 L
+5792 2281 mt 5807 2254 L
+5807 2254 mt 5808 2251 L
+5808 2251 mt 5818 2226 L
+5818 2226 mt 5826 2199 L
+5826 2199 mt 5833 2171 L
+5833 2171 mt 5837 2144 L
+5837 2144 mt 5834 2116 L
+5834 2116 mt 5826 2089 L
+5826 2089 mt 5816 2061 L
+5816 2061 mt 5808 2045 L
+5808 2045 mt 5801 2034 L
+5801 2034 mt 5784 2006 L
+5784 2006 mt 5773 1990 L
+5773 1990 mt 5766 1979 L
+5766 1979 mt 5747 1951 L
+5747 1951 mt 5738 1940 L
+5738 1940 mt 5727 1924 L
+5727 1924 mt 5708 1896 L
+5708 1896 mt 5704 1890 L
+5704 1890 mt 5688 1869 L
+5688 1869 mt 5669 1845 L
+5669 1845 mt 5666 1841 L
+5666 1841 mt 5639 1814 L
+5639 1814 mt 5634 1809 L
+5634 1809 mt 5601 1786 L
+5601 1786 mt 5599 1785 L
+5599 1785 mt 5564 1766 L
+5564 1766 mt 5548 1759 L
+5548 1759 mt 5529 1749 L
+5529 1749 mt 5498 1731 L
+5498 1731 mt 5494 1729 L
+5494 1729 mt 5459 1708 L
+5459 1708 mt 5453 1704 L
+5453 1704 mt 5425 1685 L
+5425 1685 mt 5411 1676 L
+5411 1676 mt 5390 1663 L
+5390 1663 mt 5361 1649 L
+5361 1649 mt 5355 1646 L
+5355 1646 mt 5320 1634 L
+5320 1634 mt 5285 1627 L
+5285 1627 mt 5250 1624 L
+5250 1624 mt 5215 1623 L
+5215 1623 mt 5181 1624 L
+5181 1624 mt 5146 1623 L
+5146 1623 mt 5133 1621 L
+5133 1621 mt 5111 1609 L
+5111 1609 mt 5105 1594 L
+5105 1594 mt 5105 1566 L
+5105 1566 mt 5103 1539 L
+5103 1539 mt 5096 1511 L
+5096 1511 mt 5083 1484 L
+5083 1484 mt 5076 1473 L
+5076 1473 mt 5062 1456 L
+5062 1456 mt 5041 1436 L
+5041 1436 mt 5032 1428 L
+5032 1428 mt 5006 1410 L
+5006 1410 mt 4990 1401 L
+4990 1401 mt 4971 1391 L
+4971 1391 mt 4936 1376 L
+4936 1376 mt 4927 1373 L
+4927 1373 mt 4902 1365 L
+4902 1365 mt 4867 1357 L
+4867 1357 mt 4832 1351 L
+4832 1351 mt 4797 1347 L
+4797 1347 mt 4788 1346 L
+4788 1346 mt 4762 1342 L
+4762 1342 mt 4727 1329 L
+4727 1329 mt 4714 1318 L
+4714 1318 mt 4695 1291 L
+4695 1291 mt 4693 1263 L
+4693 1263 mt 4704 1236 L
+4704 1236 mt 4720 1208 L
+4720 1208 mt 4727 1197 L
+4727 1197 mt 4739 1181 L
+4739 1181 mt 4754 1153 L
+4754 1153 mt 4762 1131 L
+4762 1131 mt 4764 1126 L
+4764 1126 mt 4770 1098 L
+4770 1098 mt 4770 1071 L
+4770 1071 mt 4766 1043 L
+4766 1043 mt 4762 1034 L
+4762 1034 mt 4754 1016 L
+4754 1016 mt 4736  988 L
+4736  988 mt 4727  976 L
+4727  976 mt 4714  961 L
+4714  961 mt 4692  938 L
+4692  938 mt 4687  933 L
+4687  933 mt 4659  906 L
+4659  906 mt 4657  904 L
+4657  904 mt 4632  878 L
+4632  878 mt 4623  869 L
+4623  869 mt 4606  851 L
+4606  851 mt 4588  832 L
+4588  832 mt 4580  823 L
+4580  823 mt 4553  796 L
+4553  796 mt 4553  795 L
+4553  795 mt 4526  768 L
+4526  768 mt 4518  761 L
+4518  761 mt 4496  741 L
+4496  741 mt 4483  729 L
+4483  729 mt 4465  713 L
+4465  713 mt 4448  699 L
+4448  699 mt 4431  686 L
+4431  686 mt 4413  672 L
+4413  672 mt 4395  658 L
+4395  658 mt 4379  645 L
+4379  645 mt 4358  631 L
+4358  631 mt 4344  620 L
+4344  620 mt 4319  603 L
+4319  603 mt 4309  597 L
+4309  597 mt 4274  577 L
+4274  577 mt 4271  576 L
+4271  576 mt 4239  561 L
+4239  561 mt 4210  548 L
+4210  548 mt 4204  546 L
+4204  546 mt 4169  533 L
+4169  533 mt 4134  522 L
+4134  522 mt 4131  521 L
+4131  521 mt 4100  511 L
+4100  511 mt 4065  500 L
+4065  500 mt 4042  493 L
+4042  493 mt 4030  488 L
+4030  488 mt 3995  475 L
+3995  475 mt 3973  466 L
+3973  466 mt 3960  456 L
+3960  456 mt 3934  438 L
+3934  438 mt 3934  411 L
+3934  411 mt 3959  383 L
+3959  383 mt 3960  382 L
+3960  382 mt 3995  358 L
+3995  358 mt 4001  355 L
+4001  355 mt 4030  343 L
+4030  343 mt 4065  331 L
+4065  331 mt 4075  328 L
+4075  328 mt 4100  320 L
+4100  320 mt 4134  308 L
+4134  308 mt 4159  300 L
+4159  300 mt 4169  297 L
+4169  297 mt 4204  287 L
+4204  287 mt 4239  277 L
+4239  277 mt 4251  273 L
+4251  273 mt 4274  267 L
+4274  267 mt 4309  257 L
+4309  257 mt 4344  248 L
+4344  248 mt 4355  245 L
+4355  245 mt 4379  240 L
+4379  240 mt 4413  232 L
+4413  232 mt 4448  226 L
+4448  226 mt 4483  219 L
+4483  219 mt 4492  218 L
+4492  218 mt 4518  214 L
+4518  214 mt 4553  209 L
+4553  209 mt 4588  205 L
+4588  205 mt 4623  201 L
+4623  201 mt 4657  198 L
+4657  198 mt 4692  195 L
+4692  195 mt 4727  193 L
+4727  193 mt 4762  191 L
+4762  191 mt 4791  190 L
+4791  190 mt 4797  190 L
+4797  190 mt 4832  190 L
+4832  190 mt 4867  190 L
+4867  190 mt 4898  190 L
+4898  190 mt 4902  190 L
+4902  190 mt 4936  192 L
+4936  192 mt 4971  195 L
+4971  195 mt 5006  199 L
+5006  199 mt 5041  204 L
+5041  204 mt 5076  211 L
+5076  211 mt 5107  218 L
+5107  218 mt 5111  219 L
+5111  219 mt 5146  228 L
+5146  228 mt 5181  240 L
+5181  240 mt 5194  245 L
+5194  245 mt 5215  254 L
+5215  254 mt 5250  270 L
+5250  270 mt 5255  273 L
+5255  273 mt 5285  289 L
+5285  289 mt 5304  300 L
+5304  300 mt 5320  311 L
+5320  311 mt 5346  328 L
+5346  328 mt 5355  335 L
+5355  335 mt 5382  355 L
+5382  355 mt 5390  362 L
+5390  362 mt 5416  383 L
+5416  383 mt 5425  391 L
+5425  391 mt 5447  411 L
+5447  411 mt 5459  422 L
+5459  422 mt 5477  438 L
+5477  438 mt 5494  454 L
+5494  454 mt 5506  466 L
+5506  466 mt 5529  488 L
+5529  488 mt 5535  493 L
+5535  493 mt 5562  521 L
+5562  521 mt 5564  522 L
+5564  522 mt 5589  548 L
+5589  548 mt 5599  558 L
+5599  558 mt 5616  576 L
+5616  576 mt 5634  595 L
+5634  595 mt 5641  603 L
+5641  603 mt 5666  631 L
+5666  631 mt 5669  634 L
+5669  634 mt 5690  658 L
+5690  658 mt 5704  675 L
+5704  675 mt 5713  686 L
+5713  686 mt 5736  713 L
+5736  713 mt 5738  716 L
+5738  716 mt 5760  741 L
+5760  741 mt 5773  757 L
+5773  757 mt 5783  768 L
+5783  768 mt 5806  796 L
+5806  796 mt 5808  798 L
+5808  798 mt 5830  823 L
+5830  823 mt 5843  839 L
+5843  839 mt 5854  851 L
+5854  851 mt 5878  878 L
+5878  878 mt 5878  878 L
+5878  878 mt 5902  906 L
+5902  906 mt 5913  918 L
+5913  918 mt 5926  933 L
+5926  933 mt 5948  957 L
+5948  957 mt 5951  961 L
+5951  961 mt 5975  988 L
+5975  988 mt 5983  996 L
+5983  996 mt 6000 1016 L
+6000 1016 mt 6017 1035 L
+6017 1035 mt 6024 1043 L
+6024 1043 mt 6049 1071 L
+6049 1071 mt 6052 1075 L
+6052 1075 mt 6073 1098 L
+6073 1098 mt 6087 1115 L
+6087 1115 mt 6097 1126 L
+6097 1126 mt 6121 1153 L
+6121 1153 mt 6122 1154 L
+6122 1154 mt 6145 1181 L
+6145 1181 mt 6157 1194 L
+6157 1194 mt 6170 1208 L
+6170 1208 mt 6192 1232 L
+6192 1232 mt 6195 1236 L
+6195 1236 mt 6220 1263 L
+6220 1263 mt 6227 1270 L
+6227 1270 mt 6245 1291 L
+6245 1291 mt 6261 1309 L
+6261 1309 mt 6270 1318 L
+6270 1318 mt 6295 1346 L
+6295 1346 mt 6296 1348 L
+6296 1348 mt 6319 1373 L
+6319 1373 mt 6331 1388 L
+6331 1388 mt 6342 1401 L
+6342 1401 mt 6364 1428 L
+6364 1428 mt 6366 1431 L
+6366 1431 mt 6385 1456 L
+6385 1456 mt 6401 1478 L
+6401 1478 mt 6405 1484 L
+6405 1484 mt 6423 1511 L
+6423 1511 mt 6436 1532 L
+6436 1532 mt 6440 1539 L
+6440 1539 mt 6455 1566 L
+6455 1566 mt 6469 1594 L
+6469 1594 mt 6471 1598 L
+6471 1598 mt 6481 1621 L
+6481 1621 mt 6492 1649 L
+6492 1649 mt 6501 1676 L
+6501 1676 mt 6506 1692 L
+ 822 2438 mt  825 2419 L
+ 825 2419 mt  832 2391 L
+ 832 2391 mt  842 2364 L
+ 842 2364 mt  857 2337 L
+ 857 2337 mt  857 2336 L
+ 857 2336 mt  882 2309 L
+ 882 2309 mt  892 2301 L
+ 892 2301 mt  926 2285 L
+ 926 2285 mt  961 2292 L
+ 961 2292 mt  986 2309 L
+ 986 2309 mt  996 2314 L
+ 996 2314 mt 1025 2336 L
+1025 2336 mt 1031 2340 L
+1031 2340 mt 1065 2364 L
+1065 2364 mt 1066 2364 L
+1066 2364 mt 1101 2389 L
+1101 2389 mt 1104 2391 L
+1104 2391 mt 1127 2419 L
+1127 2419 mt 1135 2446 L
+1135 2446 mt 1136 2451 L
+1136 2451 mt 1138 2474 L
+1138 2474 mt 1141 2502 L
+1141 2502 mt 1149 2529 L
+1149 2529 mt 1163 2557 L
+1163 2557 mt 1170 2568 L
+1170 2568 mt 1184 2584 L
+1184 2584 mt 1205 2604 L
+1205 2604 mt 1215 2612 L
+1215 2612 mt 1240 2631 L
+1240 2631 mt 1253 2639 L
+1253 2639 mt 1275 2654 L
+1275 2654 mt 1292 2667 L
+1292 2667 mt 1310 2682 L
+1310 2682 mt 1323 2694 L
+1323 2694 mt 1345 2720 L
+1345 2720 mt 1346 2722 L
+1346 2722 mt 1365 2749 L
+1365 2749 mt 1380 2771 L
+1380 2771 mt 1383 2777 L
+1383 2777 mt 1398 2804 L
+1398 2804 mt 1415 2831 L
+1415 2831 mt 1415 2832 L
+1415 2832 mt 1431 2859 L
+1431 2859 mt 1442 2887 L
+1442 2887 mt 1418 2914 L
+1418 2914 mt 1415 2915 L
+1415 2915 mt 1392 2914 L
+1392 2914 mt 1380 2913 L
+1380 2913 mt 1345 2904 L
+1345 2904 mt 1310 2892 L
+1310 2892 mt 1298 2887 L
+1298 2887 mt 1275 2877 L
+1275 2877 mt 1240 2860 L
+1240 2860 mt 1239 2859 L
+1239 2859 mt 1205 2844 L
+1205 2844 mt 1177 2832 L
+1177 2832 mt 1170 2829 L
+1170 2829 mt 1136 2819 L
+1136 2819 mt 1101 2811 L
+1101 2811 mt 1068 2804 L
+1068 2804 mt 1066 2804 L
+1066 2804 mt 1031 2799 L
+1031 2799 mt  996 2795 L
+ 996 2795 mt  961 2788 L
+ 961 2788 mt  926 2777 L
+ 926 2777 mt  925 2777 L
+ 925 2777 mt  892 2750 L
+ 892 2750 mt  891 2749 L
+ 891 2749 mt  867 2722 L
+ 867 2722 mt  857 2707 L
+ 857 2707 mt  849 2694 L
+ 849 2694 mt  836 2667 L
+ 836 2667 mt  826 2639 L
+ 826 2639 mt  822 2622 L
+ 822 2622 mt  819 2612 L
+ 819 2612 mt  816 2584 L
+ 816 2584 mt  815 2557 L
+ 815 2557 mt  815 2529 L
+ 815 2529 mt  816 2502 L
+ 816 2502 mt  818 2474 L
+ 818 2474 mt  820 2446 L
+ 820 2446 mt  822 2438 L
+1066  783 mt 1080  768 L
+1080  768 mt 1100  741 L
+1100  741 mt 1101  740 L
+1101  740 mt 1127  713 L
+1127  713 mt 1136  700 L
+1136  700 mt 1148  686 L
+1148  686 mt 1160  658 L
+1160  658 mt 1168  631 L
+1168  631 mt 1170  624 L
+1170  624 mt 1186  603 L
+1186  603 mt 1205  576 L
+1205  576 mt 1205  575 L
+1205  575 mt 1240  563 L
+1240  563 mt 1257  576 L
+1257  576 mt 1261  603 L
+1261  603 mt 1258  631 L
+1258  631 mt 1250  658 L
+1250  658 mt 1240  685 L
+1240  685 mt 1240  686 L
+1240  686 mt 1219  713 L
+1219  713 mt 1205  730 L
+1205  730 mt 1193  741 L
+1193  741 mt 1170  768 L
+1170  768 mt 1170  768 L
+1170  768 mt 1146  796 L
+1146  796 mt 1136  807 L
+1136  807 mt 1118  823 L
+1118  823 mt 1101  844 L
+1101  844 mt 1093  851 L
+1093  851 mt 1066  875 L
+1066  875 mt 1033  851 L
+1033  851 mt 1043  823 L
+1043  823 mt 1058  796 L
+1058  796 mt 1066  783 L
+6471 1711 mt 6476 1731 L
+6476 1731 mt 6481 1759 L
+6481 1759 mt 6486 1786 L
+6486 1786 mt 6489 1814 L
+6489 1814 mt 6492 1841 L
+6492 1841 mt 6494 1869 L
+6494 1869 mt 6496 1896 L
+6496 1896 mt 6496 1924 L
+6496 1924 mt 6496 1951 L
+6496 1951 mt 6495 1979 L
+6495 1979 mt 6493 2006 L
+6493 2006 mt 6491 2034 L
+6491 2034 mt 6488 2061 L
+6488 2061 mt 6484 2089 L
+6484 2089 mt 6480 2116 L
+6480 2116 mt 6475 2144 L
+6475 2144 mt 6471 2168 L
+6471 2168 mt 6470 2171 L
+6470 2171 mt 6464 2199 L
+6464 2199 mt 6457 2226 L
+6457 2226 mt 6450 2254 L
+6450 2254 mt 6443 2281 L
+6443 2281 mt 6436 2303 L
+6436 2303 mt 6434 2309 L
+6434 2309 mt 6425 2336 L
+6425 2336 mt 6415 2364 L
+6415 2364 mt 6404 2391 L
+6404 2391 mt 6401 2398 L
+6401 2398 mt 6391 2419 L
+6391 2419 mt 6376 2446 L
+6376 2446 mt 6366 2462 L
+6366 2462 mt 6358 2474 L
+6358 2474 mt 6337 2502 L
+6337 2502 mt 6331 2508 L
+6331 2508 mt 6310 2529 L
+6310 2529 mt 6296 2541 L
+6296 2541 mt 6275 2557 L
+6275 2557 mt 6261 2566 L
+6261 2566 mt 6227 2579 L
+6227 2579 mt 6192 2581 L
+6192 2581 mt 6157 2580 L
+6157 2580 mt 6122 2577 L
+6122 2577 mt 6087 2574 L
+6087 2574 mt 6052 2570 L
+6052 2570 mt 6017 2566 L
+6017 2566 mt 5983 2559 L
+5983 2559 mt 5973 2557 L
+5973 2557 mt 5948 2548 L
+5948 2548 mt 5913 2534 L
+5913 2534 mt 5900 2529 L
+5900 2529 mt 5878 2517 L
+5878 2517 mt 5858 2502 L
+5858 2502 mt 5843 2486 L
+5843 2486 mt 5835 2474 L
+5835 2474 mt 5821 2446 L
+5821 2446 mt 5813 2419 L
+5813 2419 mt 5813 2391 L
+5813 2391 mt 5818 2364 L
+5818 2364 mt 5827 2336 L
+5827 2336 mt 5840 2309 L
+5840 2309 mt 5843 2303 L
+5843 2303 mt 5854 2281 L
+5854 2281 mt 5866 2254 L
+5866 2254 mt 5877 2226 L
+5877 2226 mt 5878 2223 L
+5878 2223 mt 5887 2199 L
+5887 2199 mt 5896 2171 L
+5896 2171 mt 5901 2144 L
+5901 2144 mt 5900 2116 L
+5900 2116 mt 5896 2089 L
+5896 2089 mt 5891 2061 L
+5891 2061 mt 5884 2034 L
+5884 2034 mt 5878 2011 L
+5878 2011 mt 5876 2006 L
+5876 2006 mt 5870 1979 L
+5870 1979 mt 5865 1951 L
+5865 1951 mt 5858 1924 L
+5858 1924 mt 5848 1896 L
+5848 1896 mt 5843 1886 L
+5843 1886 mt 5835 1869 L
+5835 1869 mt 5820 1841 L
+5820 1841 mt 5808 1823 L
+5808 1823 mt 5803 1814 L
+5803 1814 mt 5787 1786 L
+5787 1786 mt 5773 1763 L
+5773 1763 mt 5770 1759 L
+5770 1759 mt 5750 1731 L
+5750 1731 mt 5738 1720 L
+5738 1720 mt 5711 1704 L
+5711 1704 mt 5704 1700 L
+5704 1700 mt 5669 1689 L
+5669 1689 mt 5634 1682 L
+5634 1682 mt 5606 1676 L
+5606 1676 mt 5599 1675 L
+5599 1675 mt 5564 1668 L
+5564 1668 mt 5529 1659 L
+5529 1659 mt 5503 1649 L
+5503 1649 mt 5494 1645 L
+5494 1645 mt 5459 1629 L
+5459 1629 mt 5442 1621 L
+5442 1621 mt 5425 1615 L
+5425 1615 mt 5390 1603 L
+5390 1603 mt 5359 1594 L
+5359 1594 mt 5355 1592 L
+5355 1592 mt 5320 1584 L
+5320 1584 mt 5285 1577 L
+5285 1577 mt 5250 1570 L
+5250 1570 mt 5239 1566 L
+5239 1566 mt 5215 1555 L
+5215 1555 mt 5193 1539 L
+5193 1539 mt 5181 1521 L
+5181 1521 mt 5174 1511 L
+5174 1511 mt 5159 1484 L
+5159 1484 mt 5146 1462 L
+5146 1462 mt 5142 1456 L
+5142 1456 mt 5122 1428 L
+5122 1428 mt 5111 1415 L
+5111 1415 mt 5097 1401 L
+5097 1401 mt 5076 1382 L
+5076 1382 mt 5064 1373 L
+5064 1373 mt 5041 1356 L
+5041 1356 mt 5024 1346 L
+5024 1346 mt 5006 1335 L
+5006 1335 mt 4977 1318 L
+4977 1318 mt 4971 1315 L
+4971 1315 mt 4936 1296 L
+4936 1296 mt 4926 1291 L
+4926 1291 mt 4902 1275 L
+4902 1275 mt 4884 1263 L
+4884 1263 mt 4867 1246 L
+4867 1246 mt 4858 1236 L
+4858 1236 mt 4845 1208 L
+4845 1208 mt 4840 1181 L
+4840 1181 mt 4839 1153 L
+4839 1153 mt 4841 1126 L
+4841 1126 mt 4843 1098 L
+4843 1098 mt 4843 1071 L
+4843 1071 mt 4841 1043 L
+4841 1043 mt 4834 1016 L
+4834 1016 mt 4832 1008 L
+4832 1008 mt 4824  988 L
+4824  988 mt 4810  961 L
+4810  961 mt 4797  939 L
+4797  939 mt 4793  933 L
+4793  933 mt 4771  906 L
+4771  906 mt 4762  896 L
+4762  896 mt 4745  878 L
+4745  878 mt 4727  863 L
+4727  863 mt 4713  851 L
+4713  851 mt 4692  834 L
+4692  834 mt 4680  823 L
+4680  823 mt 4657  806 L
+4657  806 mt 4647  796 L
+4647  796 mt 4623  776 L
+4623  776 mt 4614  768 L
+4614  768 mt 4588  747 L
+4588  747 mt 4580  741 L
+4580  741 mt 4553  717 L
+4553  717 mt 4549  713 L
+4549  713 mt 4523  686 L
+4523  686 mt 4518  680 L
+4518  680 mt 4496  658 L
+4496  658 mt 4483  643 L
+4483  643 mt 4470  631 L
+4470  631 mt 4448  609 L
+4448  609 mt 4442  603 L
+4442  603 mt 4413  580 L
+4413  580 mt 4408  576 L
+4408  576 mt 4379  554 L
+4379  554 mt 4370  548 L
+4370  548 mt 4344  532 L
+4344  532 mt 4325  521 L
+4325  521 mt 4309  512 L
+4309  512 mt 4274  496 L
+4274  496 mt 4266  493 L
+4266  493 mt 4239  483 L
+4239  483 mt 4204  470 L
+4204  470 mt 4191  466 L
+4191  466 mt 4169  456 L
+4169  456 mt 4134  439 L
+4134  439 mt 4131  438 L
+4131  438 mt 4111  411 L
+4111  411 mt 4133  383 L
+4133  383 mt 4134  382 L
+4134  382 mt 4169  359 L
+4169  359 mt 4177  355 L
+4177  355 mt 4204  345 L
+4204  345 mt 4239  333 L
+4239  333 mt 4251  328 L
+4251  328 mt 4274  320 L
+4274  320 mt 4309  307 L
+4309  307 mt 4328  300 L
+4328  300 mt 4344  295 L
+4344  295 mt 4379  285 L
+4379  285 mt 4413  275 L
+4413  275 mt 4421  273 L
+4421  273 mt 4448  267 L
+4448  267 mt 4483  259 L
+4483  259 mt 4518  252 L
+4518  252 mt 4553  246 L
+4553  246 mt 4560  245 L
+4560  245 mt 4588  241 L
+4588  241 mt 4623  237 L
+4623  237 mt 4657  233 L
+4657  233 mt 4692  229 L
+4692  229 mt 4727  225 L
+4727  225 mt 4762  223 L
+4762  223 mt 4797  220 L
+4797  220 mt 4832  218 L
+4832  218 mt 4845  218 L
+4845  218 mt 4867  217 L
+4867  217 mt 4902  217 L
+4902  217 mt 4936  218 L
+4936  218 mt 4938  218 L
+4938  218 mt 4971  220 L
+4971  220 mt 5006  223 L
+5006  223 mt 5041  227 L
+5041  227 mt 5076  234 L
+5076  234 mt 5111  242 L
+5111  242 mt 5124  245 L
+5124  245 mt 5146  251 L
+5146  251 mt 5181  264 L
+5181  264 mt 5203  273 L
+5203  273 mt 5215  278 L
+5215  278 mt 5250  296 L
+5250  296 mt 5259  300 L
+5259  300 mt 5285  316 L
+5285  316 mt 5304  328 L
+5304  328 mt 5320  339 L
+5320  339 mt 5342  355 L
+5342  355 mt 5355  365 L
+5355  365 mt 5376  383 L
+5376  383 mt 5390  395 L
+5390  395 mt 5408  411 L
+5408  411 mt 5425  426 L
+5425  426 mt 5437  438 L
+5437  438 mt 5459  459 L
+5459  459 mt 5466  466 L
+5466  466 mt 5494  493 L
+5494  493 mt 5494  493 L
+5494  493 mt 5522  521 L
+5522  521 mt 5529  528 L
+5529  528 mt 5549  548 L
+5549  548 mt 5564  564 L
+5564  564 mt 5575  576 L
+5575  576 mt 5599  601 L
+5599  601 mt 5601  603 L
+5601  603 mt 5625  631 L
+5625  631 mt 5634  641 L
+5634  641 mt 5648  658 L
+5648  658 mt 5669  683 L
+5669  683 mt 5671  686 L
+5671  686 mt 5694  713 L
+5694  713 mt 5704  726 L
+5704  726 mt 5716  741 L
+5716  741 mt 5738  768 L
+5738  768 mt 5738  768 L
+5738  768 mt 5761  796 L
+5761  796 mt 5773  811 L
+5773  811 mt 5784  823 L
+5784  823 mt 5807  851 L
+5807  851 mt 5808  852 L
+5808  852 mt 5831  878 L
+5831  878 mt 5843  892 L
+5843  892 mt 5855  906 L
+5855  906 mt 5878  932 L
+5878  932 mt 5879  933 L
+5879  933 mt 5904  961 L
+5904  961 mt 5913  971 L
+5913  971 mt 5928  988 L
+5928  988 mt 5948 1010 L
+5948 1010 mt 5952 1016 L
+5952 1016 mt 5977 1043 L
+5977 1043 mt 5983 1050 L
+5983 1050 mt 6001 1071 L
+6001 1071 mt 6017 1090 L
+6017 1090 mt 6025 1098 L
+6025 1098 mt 6049 1126 L
+6049 1126 mt 6052 1130 L
+6052 1130 mt 6073 1153 L
+6073 1153 mt 6087 1170 L
+6087 1170 mt 6097 1181 L
+6097 1181 mt 6121 1208 L
+6121 1208 mt 6122 1209 L
+6122 1209 mt 6146 1236 L
+6146 1236 mt 6157 1248 L
+6157 1248 mt 6171 1263 L
+6171 1263 mt 6192 1286 L
+6192 1286 mt 6197 1291 L
+6197 1291 mt 6222 1318 L
+6222 1318 mt 6227 1323 L
+6227 1323 mt 6247 1346 L
+6247 1346 mt 6261 1362 L
+6261 1362 mt 6272 1373 L
+6272 1373 mt 6296 1401 L
+6296 1401 mt 6296 1401 L
+6296 1401 mt 6319 1428 L
+6319 1428 mt 6331 1443 L
+6331 1443 mt 6341 1456 L
+6341 1456 mt 6362 1484 L
+6362 1484 mt 6366 1489 L
+6366 1489 mt 6381 1511 L
+6381 1511 mt 6398 1539 L
+6398 1539 mt 6401 1543 L
+6401 1543 mt 6414 1566 L
+6414 1566 mt 6428 1594 L
+6428 1594 mt 6436 1610 L
+6436 1610 mt 6441 1621 L
+6441 1621 mt 6452 1649 L
+6452 1649 mt 6461 1676 L
+6461 1676 mt 6469 1704 L
+6469 1704 mt 6471 1711 L
+ 892 2386 mt  907 2364 L
+ 907 2364 mt  926 2347 L
+ 926 2347 mt  961 2349 L
+ 961 2349 mt  996 2364 L
+ 996 2364 mt  996 2364 L
+ 996 2364 mt 1031 2386 L
+1031 2386 mt 1038 2391 L
+1038 2391 mt 1066 2419 L
+1066 2419 mt 1066 2419 L
+1066 2419 mt 1078 2446 L
+1078 2446 mt 1082 2474 L
+1082 2474 mt 1084 2502 L
+1084 2502 mt 1090 2529 L
+1090 2529 mt 1101 2556 L
+1101 2556 mt 1101 2557 L
+1101 2557 mt 1117 2584 L
+1117 2584 mt 1136 2608 L
+1136 2608 mt 1139 2612 L
+1139 2612 mt 1166 2639 L
+1166 2639 mt 1170 2644 L
+1170 2644 mt 1196 2667 L
+1196 2667 mt 1205 2677 L
+1205 2677 mt 1224 2694 L
+1224 2694 mt 1240 2714 L
+1240 2714 mt 1247 2722 L
+1247 2722 mt 1262 2749 L
+1262 2749 mt 1263 2777 L
+1263 2777 mt 1240 2783 L
+1240 2783 mt 1205 2781 L
+1205 2781 mt 1170 2777 L
+1170 2777 mt 1167 2777 L
+1167 2777 mt 1136 2771 L
+1136 2771 mt 1101 2765 L
+1101 2765 mt 1066 2759 L
+1066 2759 mt 1031 2754 L
+1031 2754 mt  996 2750 L
+ 996 2750 mt  994 2749 L
+ 994 2749 mt  961 2741 L
+ 961 2741 mt  926 2726 L
+ 926 2726 mt  920 2722 L
+ 920 2722 mt  892 2694 L
+ 892 2694 mt  892 2694 L
+ 892 2694 mt  879 2667 L
+ 879 2667 mt  867 2639 L
+ 867 2639 mt  861 2612 L
+ 861 2612 mt  861 2584 L
+ 861 2584 mt  864 2557 L
+ 864 2557 mt  867 2529 L
+ 867 2529 mt  869 2502 L
+ 869 2502 mt  871 2474 L
+ 871 2474 mt  874 2446 L
+ 874 2446 mt  879 2419 L
+ 879 2419 mt  889 2391 L
+ 889 2391 mt  892 2386 L
+6436 1736 mt 6440 1759 L
+6440 1759 mt 6444 1786 L
+6444 1786 mt 6447 1814 L
+6447 1814 mt 6449 1841 L
+6449 1841 mt 6451 1869 L
+6451 1869 mt 6452 1896 L
+6452 1896 mt 6452 1924 L
+6452 1924 mt 6451 1951 L
+6451 1951 mt 6450 1979 L
+6450 1979 mt 6447 2006 L
+6447 2006 mt 6444 2034 L
+6444 2034 mt 6441 2061 L
+6441 2061 mt 6437 2089 L
+6437 2089 mt 6436 2095 L
+6436 2095 mt 6432 2116 L
+6432 2116 mt 6427 2144 L
+6427 2144 mt 6421 2171 L
+6421 2171 mt 6415 2199 L
+6415 2199 mt 6408 2226 L
+6408 2226 mt 6401 2253 L
+6401 2253 mt 6401 2254 L
+6401 2254 mt 6393 2281 L
+6393 2281 mt 6384 2309 L
+6384 2309 mt 6376 2336 L
+6376 2336 mt 6366 2363 L
+6366 2363 mt 6366 2364 L
+6366 2364 mt 6355 2391 L
+6355 2391 mt 6341 2419 L
+6341 2419 mt 6331 2436 L
+6331 2436 mt 6325 2446 L
+6325 2446 mt 6304 2474 L
+6304 2474 mt 6296 2482 L
+6296 2482 mt 6276 2502 L
+6276 2502 mt 6261 2514 L
+6261 2514 mt 6233 2529 L
+6233 2529 mt 6227 2532 L
+6227 2532 mt 6192 2535 L
+6192 2535 mt 6157 2530 L
+6157 2530 mt 6150 2529 L
+6150 2529 mt 6122 2521 L
+6122 2521 mt 6087 2508 L
+6087 2508 mt 6072 2502 L
+6072 2502 mt 6052 2490 L
+6052 2490 mt 6027 2474 L
+6027 2474 mt 6017 2468 L
+6017 2468 mt 5983 2446 L
+5983 2446 mt 5983 2446 L
+5983 2446 mt 5948 2430 L
+5948 2430 mt 5929 2419 L
+5929 2419 mt 5913 2407 L
+5913 2407 mt 5899 2391 L
+5899 2391 mt 5890 2364 L
+5890 2364 mt 5893 2336 L
+5893 2336 mt 5904 2309 L
+5904 2309 mt 5913 2289 L
+5913 2289 mt 5917 2281 L
+5917 2281 mt 5930 2254 L
+5930 2254 mt 5944 2226 L
+5944 2226 mt 5948 2219 L
+5948 2219 mt 5958 2199 L
+5958 2199 mt 5968 2171 L
+5968 2171 mt 5972 2144 L
+5972 2144 mt 5970 2116 L
+5970 2116 mt 5966 2089 L
+5966 2089 mt 5965 2061 L
+5965 2061 mt 5963 2034 L
+5963 2034 mt 5964 2006 L
+5964 2006 mt 5970 1979 L
+5970 1979 mt 5978 1951 L
+5978 1951 mt 5983 1939 L
+5983 1939 mt 5988 1924 L
+5988 1924 mt 5998 1896 L
+5998 1896 mt 6007 1869 L
+6007 1869 mt 6013 1841 L
+6013 1841 mt 6016 1814 L
+6016 1814 mt 6016 1786 L
+6016 1786 mt 6013 1759 L
+6013 1759 mt 6009 1731 L
+6009 1731 mt 6002 1704 L
+6002 1704 mt 5993 1676 L
+5993 1676 mt 5983 1652 L
+5983 1652 mt 5980 1649 L
+5980 1649 mt 5958 1621 L
+5958 1621 mt 5948 1611 L
+5948 1611 mt 5929 1594 L
+5929 1594 mt 5913 1581 L
+5913 1581 mt 5890 1566 L
+5890 1566 mt 5878 1559 L
+5878 1559 mt 5843 1542 L
+5843 1542 mt 5834 1539 L
+5834 1539 mt 5808 1530 L
+5808 1530 mt 5773 1522 L
+5773 1522 mt 5738 1519 L
+5738 1519 mt 5704 1521 L
+5704 1521 mt 5669 1526 L
+5669 1526 mt 5634 1535 L
+5634 1535 mt 5618 1539 L
+5618 1539 mt 5599 1543 L
+5599 1543 mt 5564 1548 L
+5564 1548 mt 5529 1551 L
+5529 1551 mt 5494 1550 L
+5494 1550 mt 5459 1549 L
+5459 1549 mt 5425 1547 L
+5425 1547 mt 5390 1544 L
+5390 1544 mt 5355 1539 L
+5355 1539 mt 5351 1539 L
+5351 1539 mt 5320 1531 L
+5320 1531 mt 5285 1516 L
+5285 1516 mt 5276 1511 L
+5276 1511 mt 5250 1485 L
+5250 1485 mt 5249 1484 L
+5249 1484 mt 5232 1456 L
+5232 1456 mt 5216 1428 L
+5216 1428 mt 5215 1427 L
+5215 1427 mt 5199 1401 L
+5199 1401 mt 5181 1375 L
+5181 1375 mt 5179 1373 L
+5179 1373 mt 5154 1346 L
+5154 1346 mt 5146 1337 L
+5146 1337 mt 5125 1318 L
+5125 1318 mt 5111 1306 L
+5111 1306 mt 5091 1291 L
+5091 1291 mt 5076 1279 L
+5076 1279 mt 5054 1263 L
+5054 1263 mt 5041 1253 L
+5041 1253 mt 5020 1236 L
+5020 1236 mt 5006 1224 L
+5006 1224 mt 4989 1208 L
+4989 1208 mt 4971 1188 L
+4971 1188 mt 4966 1181 L
+4966 1181 mt 4949 1153 L
+4949 1153 mt 4937 1126 L
+4937 1126 mt 4936 1125 L
+4936 1125 mt 4927 1098 L
+4927 1098 mt 4918 1071 L
+4918 1071 mt 4909 1043 L
+4909 1043 mt 4902 1022 L
+4902 1022 mt 4900 1016 L
+4900 1016 mt 4890  988 L
+4890  988 mt 4880  961 L
+4880  961 mt 4868  933 L
+4868  933 mt 4867  930 L
+4867  930 mt 4853  906 L
+4853  906 mt 4834  878 L
+4834  878 mt 4832  876 L
+4832  876 mt 4810  851 L
+4810  851 mt 4797  838 L
+4797  838 mt 4779  823 L
+4779  823 mt 4762  812 L
+4762  812 mt 4737  796 L
+4737  796 mt 4727  791 L
+4727  791 mt 4692  772 L
+4692  772 mt 4687  768 L
+4687  768 mt 4657  752 L
+4657  752 mt 4642  741 L
+4642  741 mt 4623  728 L
+4623  728 mt 4604  713 L
+4604  713 mt 4588  699 L
+4588  699 mt 4575  686 L
+4575  686 mt 4555  658 L
+4555  658 mt 4553  652 L
+4553  652 mt 4540  631 L
+4540  631 mt 4527  603 L
+4527  603 mt 4518  587 L
+4518  587 mt 4509  576 L
+4509  576 mt 4483  551 L
+4483  551 mt 4480  548 L
+4480  548 mt 4448  528 L
+4448  528 mt 4436  521 L
+4436  521 mt 4413  508 L
+4413  508 mt 4386  493 L
+4386  493 mt 4379  489 L
+4379  489 mt 4344  469 L
+4344  469 mt 4337  466 L
+4337  466 mt 4309  444 L
+4309  444 mt 4298  438 L
+4298  438 mt 4283  411 L
+4283  411 mt 4298  383 L
+4298  383 mt 4309  376 L
+4309  376 mt 4332  355 L
+4332  355 mt 4344  350 L
+4344  350 mt 4379  334 L
+4379  334 mt 4393  328 L
+4393  328 mt 4413  321 L
+4413  321 mt 4448  310 L
+4448  310 mt 4483  301 L
+4483  301 mt 4484  300 L
+4484  300 mt 4518  293 L
+4518  293 mt 4553  286 L
+4553  286 mt 4588  279 L
+4588  279 mt 4623  273 L
+4623  273 mt 4625  273 L
+4625  273 mt 4657  268 L
+4657  268 mt 4692  263 L
+4692  263 mt 4727  259 L
+4727  259 mt 4762  254 L
+4762  254 mt 4797  251 L
+4797  251 mt 4832  247 L
+4832  247 mt 4860  245 L
+4860  245 mt 4867  245 L
+4867  245 mt 4902  243 L
+4902  243 mt 4936  243 L
+4936  243 mt 4971  244 L
+4971  244 mt 4993  245 L
+4993  245 mt 5006  246 L
+5006  246 mt 5041  250 L
+5041  250 mt 5076  256 L
+5076  256 mt 5111  264 L
+5111  264 mt 5142  273 L
+5142  273 mt 5146  274 L
+5146  274 mt 5181  287 L
+5181  287 mt 5212  300 L
+5212  300 mt 5215  302 L
+5215  302 mt 5250  321 L
+5250  321 mt 5262  328 L
+5262  328 mt 5285  343 L
+5285  343 mt 5303  355 L
+5303  355 mt 5320  369 L
+5320  369 mt 5338  383 L
+5338  383 mt 5355  398 L
+5355  398 mt 5369  411 L
+5369  411 mt 5390  430 L
+5390  430 mt 5399  438 L
+5399  438 mt 5425  463 L
+5425  463 mt 5427  466 L
+5427  466 mt 5454  493 L
+5454  493 mt 5459  499 L
+5459  499 mt 5481  521 L
+5481  521 mt 5494  534 L
+5494  534 mt 5508  548 L
+5508  548 mt 5529  570 L
+5529  570 mt 5534  576 L
+5534  576 mt 5560  603 L
+5560  603 mt 5564  608 L
+5564  608 mt 5584  631 L
+5584  631 mt 5599  648 L
+5599  648 mt 5608  658 L
+5608  658 mt 5630  686 L
+5630  686 mt 5634  691 L
+5634  691 mt 5651  713 L
+5651  713 mt 5669  736 L
+5669  736 mt 5672  741 L
+5672  741 mt 5693  768 L
+5693  768 mt 5704  781 L
+5704  781 mt 5715  796 L
+5715  796 mt 5737  823 L
+5737  823 mt 5738  825 L
+5738  825 mt 5760  851 L
+5760  851 mt 5773  867 L
+5773  867 mt 5783  878 L
+5783  878 mt 5806  906 L
+5806  906 mt 5808  908 L
+5808  908 mt 5831  933 L
+5831  933 mt 5843  947 L
+5843  947 mt 5855  961 L
+5855  961 mt 5878  986 L
+5878  986 mt 5880  988 L
+5880  988 mt 5904 1016 L
+5904 1016 mt 5913 1025 L
+5913 1025 mt 5929 1043 L
+5929 1043 mt 5948 1065 L
+5948 1065 mt 5953 1071 L
+5953 1071 mt 5976 1098 L
+5976 1098 mt 5983 1106 L
+5983 1106 mt 6000 1126 L
+6000 1126 mt 6017 1146 L
+6017 1146 mt 6024 1153 L
+6024 1153 mt 6047 1181 L
+6047 1181 mt 6052 1187 L
+6052 1187 mt 6071 1208 L
+6071 1208 mt 6087 1226 L
+6087 1226 mt 6096 1236 L
+6096 1236 mt 6121 1263 L
+6121 1263 mt 6122 1265 L
+6122 1265 mt 6146 1291 L
+6146 1291 mt 6157 1302 L
+6157 1302 mt 6172 1318 L
+6172 1318 mt 6192 1339 L
+6192 1339 mt 6198 1346 L
+6198 1346 mt 6224 1373 L
+6224 1373 mt 6227 1377 L
+6227 1377 mt 6248 1401 L
+6248 1401 mt 6261 1416 L
+6261 1416 mt 6273 1428 L
+6273 1428 mt 6296 1456 L
+6296 1456 mt 6296 1457 L
+6296 1457 mt 6317 1484 L
+6317 1484 mt 6331 1502 L
+6331 1502 mt 6338 1511 L
+6338 1511 mt 6356 1539 L
+6356 1539 mt 6366 1555 L
+6366 1555 mt 6373 1566 L
+6373 1566 mt 6388 1594 L
+6388 1594 mt 6400 1621 L
+6400 1621 mt 6401 1622 L
+6401 1622 mt 6411 1649 L
+6411 1649 mt 6421 1676 L
+6421 1676 mt 6429 1704 L
+6429 1704 mt 6435 1731 L
+6435 1731 mt 6436 1736 L
+ 926 2568 mt  933 2557 L
+ 933 2557 mt  938 2529 L
+ 938 2529 mt  939 2502 L
+ 939 2502 mt  939 2474 L
+ 939 2474 mt  941 2446 L
+ 941 2446 mt  950 2419 L
+ 950 2419 mt  961 2412 L
+ 961 2412 mt  980 2419 L
+ 980 2419 mt  996 2427 L
+ 996 2427 mt 1012 2446 L
+1012 2446 mt 1020 2474 L
+1020 2474 mt 1022 2502 L
+1022 2502 mt 1026 2529 L
+1026 2529 mt 1031 2540 L
+1031 2540 mt 1035 2557 L
+1035 2557 mt 1046 2584 L
+1046 2584 mt 1063 2612 L
+1063 2612 mt 1066 2618 L
+1066 2618 mt 1075 2639 L
+1075 2639 mt 1084 2667 L
+1084 2667 mt 1066 2691 L
+1066 2691 mt 1054 2694 L
+1054 2694 mt 1031 2695 L
+1031 2695 mt  998 2694 L
+ 998 2694 mt  996 2694 L
+ 996 2694 mt  961 2681 L
+ 961 2681 mt  942 2667 L
+ 942 2667 mt  926 2653 L
+ 926 2653 mt  918 2639 L
+ 918 2639 mt  909 2612 L
+ 909 2612 mt  921 2584 L
+ 921 2584 mt  926 2568 L
+6401 1781 mt 6402 1786 L
+6402 1786 mt 6404 1814 L
+6404 1814 mt 6405 1841 L
+6405 1841 mt 6406 1869 L
+6406 1869 mt 6407 1896 L
+6407 1896 mt 6406 1924 L
+6406 1924 mt 6405 1951 L
+6405 1951 mt 6403 1979 L
+6403 1979 mt 6401 1997 L
+6401 1997 mt 6400 2006 L
+6400 2006 mt 6396 2034 L
+6396 2034 mt 6392 2061 L
+6392 2061 mt 6387 2089 L
+6387 2089 mt 6382 2116 L
+6382 2116 mt 6376 2144 L
+6376 2144 mt 6371 2171 L
+6371 2171 mt 6366 2190 L
+6366 2190 mt 6364 2199 L
+6364 2199 mt 6356 2226 L
+6356 2226 mt 6348 2254 L
+6348 2254 mt 6340 2281 L
+6340 2281 mt 6333 2309 L
+6333 2309 mt 6331 2313 L
+6331 2313 mt 6324 2336 L
+6324 2336 mt 6315 2364 L
+6315 2364 mt 6304 2391 L
+6304 2391 mt 6296 2407 L
+6296 2407 mt 6290 2419 L
+6290 2419 mt 6271 2446 L
+6271 2446 mt 6261 2456 L
+6261 2456 mt 6233 2474 L
+6233 2474 mt 6227 2478 L
+6227 2478 mt 6192 2479 L
+6192 2479 mt 6174 2474 L
+6174 2474 mt 6157 2469 L
+6157 2469 mt 6122 2450 L
+6122 2450 mt 6116 2446 L
+6116 2446 mt 6087 2428 L
+6087 2428 mt 6075 2419 L
+6075 2419 mt 6052 2404 L
+6052 2404 mt 6032 2391 L
+6032 2391 mt 6017 2381 L
+6017 2381 mt 5996 2364 L
+5996 2364 mt 5983 2341 L
+5983 2341 mt 5980 2336 L
+5980 2336 mt 5979 2309 L
+5979 2309 mt 5983 2296 L
+5983 2296 mt 5986 2281 L
+5986 2281 mt 5998 2254 L
+5998 2254 mt 6013 2226 L
+6013 2226 mt 6017 2218 L
+6017 2218 mt 6027 2199 L
+6027 2199 mt 6036 2171 L
+6036 2171 mt 6042 2144 L
+6042 2144 mt 6043 2116 L
+6043 2116 mt 6044 2089 L
+6044 2089 mt 6045 2061 L
+6045 2061 mt 6048 2034 L
+6048 2034 mt 6052 2012 L
+6052 2012 mt 6053 2006 L
+6053 2006 mt 6059 1979 L
+6059 1979 mt 6066 1951 L
+6066 1951 mt 6074 1924 L
+6074 1924 mt 6081 1896 L
+6081 1896 mt 6086 1869 L
+6086 1869 mt 6087 1862 L
+6087 1862 mt 6089 1841 L
+6089 1841 mt 6090 1814 L
+6090 1814 mt 6090 1786 L
+6090 1786 mt 6089 1759 L
+6089 1759 mt 6087 1745 L
+6087 1745 mt 6085 1731 L
+6085 1731 mt 6080 1704 L
+6080 1704 mt 6072 1676 L
+6072 1676 mt 6062 1649 L
+6062 1649 mt 6052 1629 L
+6052 1629 mt 6048 1621 L
+6048 1621 mt 6029 1594 L
+6029 1594 mt 6017 1581 L
+6017 1581 mt 6002 1566 L
+6002 1566 mt 5983 1550 L
+5983 1550 mt 5967 1539 L
+5967 1539 mt 5948 1525 L
+5948 1525 mt 5924 1511 L
+5924 1511 mt 5913 1504 L
+5913 1504 mt 5878 1485 L
+5878 1485 mt 5874 1484 L
+5874 1484 mt 5843 1469 L
+5843 1469 mt 5812 1456 L
+5812 1456 mt 5808 1455 L
+5808 1455 mt 5773 1445 L
+5773 1445 mt 5738 1438 L
+5738 1438 mt 5704 1434 L
+5704 1434 mt 5669 1433 L
+5669 1433 mt 5634 1435 L
+5634 1435 mt 5599 1439 L
+5599 1439 mt 5564 1445 L
+5564 1445 mt 5529 1453 L
+5529 1453 mt 5519 1456 L
+5519 1456 mt 5494 1466 L
+5494 1466 mt 5459 1477 L
+5459 1477 mt 5425 1482 L
+5425 1482 mt 5390 1482 L
+5390 1482 mt 5355 1471 L
+5355 1471 mt 5334 1456 L
+5334 1456 mt 5320 1435 L
+5320 1435 mt 5317 1428 L
+5317 1428 mt 5309 1401 L
+5309 1401 mt 5300 1373 L
+5300 1373 mt 5285 1346 L
+5285 1346 mt 5285 1346 L
+5285 1346 mt 5266 1318 L
+5266 1318 mt 5250 1295 L
+5250 1295 mt 5247 1291 L
+5247 1291 mt 5223 1263 L
+5223 1263 mt 5215 1254 L
+5215 1254 mt 5197 1236 L
+5197 1236 mt 5181 1220 L
+5181 1220 mt 5166 1208 L
+5166 1208 mt 5146 1192 L
+5146 1192 mt 5132 1181 L
+5132 1181 mt 5111 1164 L
+5111 1164 mt 5098 1153 L
+5098 1153 mt 5076 1135 L
+5076 1135 mt 5067 1126 L
+5067 1126 mt 5041 1101 L
+5041 1101 mt 5038 1098 L
+5038 1098 mt 5014 1071 L
+5014 1071 mt 5006 1064 L
+5006 1064 mt 4990 1043 L
+4990 1043 mt 4971 1021 L
+4971 1021 mt 4968 1016 L
+4968 1016 mt 4950  988 L
+4950  988 mt 4936  963 L
+4936  963 mt 4935  961 L
+4935  961 mt 4923  933 L
+4923  933 mt 4910  906 L
+4910  906 mt 4902  888 L
+4902  888 mt 4896  878 L
+4896  878 mt 4878  851 L
+4878  851 mt 4867  835 L
+4867  835 mt 4856  823 L
+4856  823 mt 4832  800 L
+4832  800 mt 4827  796 L
+4827  796 mt 4797  776 L
+4797  776 mt 4784  768 L
+4784  768 mt 4762  759 L
+4762  759 mt 4727  746 L
+4727  746 mt 4716  741 L
+4716  741 mt 4692  733 L
+4692  733 mt 4657  717 L
+4657  717 mt 4651  713 L
+4651  713 mt 4623  694 L
+4623  694 mt 4614  686 L
+4614  686 mt 4593  658 L
+4593  658 mt 4588  643 L
+4588  643 mt 4583  631 L
+4583  631 mt 4578  603 L
+4578  603 mt 4573  576 L
+4573  576 mt 4560  548 L
+4560  548 mt 4553  539 L
+4553  539 mt 4534  521 L
+4534  521 mt 4518  509 L
+4518  509 mt 4491  493 L
+4491  493 mt 4483  488 L
+4483  488 mt 4448  469 L
+4448  469 mt 4442  466 L
+4442  466 mt 4413  446 L
+4413  446 mt 4404  438 L
+4404  438 mt 4380  411 L
+4380  411 mt 4403  383 L
+4403  383 mt 4413  379 L
+4413  379 mt 4448  361 L
+4448  361 mt 4458  355 L
+4458  355 mt 4483  346 L
+4483  346 mt 4518  336 L
+4518  336 mt 4551  328 L
+4551  328 mt 4553  328 L
+4553  328 mt 4588  320 L
+4588  320 mt 4623  313 L
+4623  313 mt 4657  306 L
+4657  306 mt 4685  300 L
+4685  300 mt 4692  299 L
+4692  299 mt 4727  293 L
+4727  293 mt 4762  287 L
+4762  287 mt 4797  282 L
+4797  282 mt 4832  277 L
+4832  277 mt 4866  273 L
+4866  273 mt 4867  273 L
+4867  273 mt 4902  270 L
+4902  270 mt 4936  268 L
+4936  268 mt 4971  268 L
+4971  268 mt 5006  269 L
+5006  269 mt 5041  272 L
+5041  272 mt 5045  273 L
+5045  273 mt 5076  277 L
+5076  277 mt 5111  285 L
+5111  285 mt 5146  296 L
+5146  296 mt 5158  300 L
+5158  300 mt 5181  309 L
+5181  309 mt 5215  326 L
+5215  326 mt 5219  328 L
+5219  328 mt 5250  347 L
+5250  347 mt 5263  355 L
+5263  355 mt 5285  371 L
+5285  371 mt 5300  383 L
+5300  383 mt 5320  400 L
+5320  400 mt 5332  411 L
+5332  411 mt 5355  433 L
+5355  433 mt 5361  438 L
+5361  438 mt 5388  466 L
+5388  466 mt 5390  468 L
+5390  468 mt 5414  493 L
+5414  493 mt 5425  504 L
+5425  504 mt 5440  521 L
+5440  521 mt 5459  541 L
+5459  541 mt 5467  548 L
+5467  548 mt 5493  576 L
+5493  576 mt 5494  577 L
+5494  577 mt 5519  603 L
+5519  603 mt 5529  614 L
+5529  614 mt 5544  631 L
+5544  631 mt 5564  655 L
+5564  655 mt 5567  658 L
+5567  658 mt 5589  686 L
+5589  686 mt 5599  700 L
+5599  700 mt 5609  713 L
+5609  713 mt 5629  741 L
+5629  741 mt 5634  748 L
+5634  748 mt 5649  768 L
+5649  768 mt 5669  796 L
+5669  796 mt 5669  796 L
+5669  796 mt 5689  823 L
+5689  823 mt 5704  841 L
+5704  841 mt 5711  851 L
+5711  851 mt 5733  878 L
+5733  878 mt 5738  884 L
+5738  884 mt 5756  906 L
+5756  906 mt 5773  925 L
+5773  925 mt 5780  933 L
+5780  933 mt 5805  961 L
+5805  961 mt 5808  964 L
+5808  964 mt 5830  988 L
+5830  988 mt 5843 1003 L
+5843 1003 mt 5854 1016 L
+5854 1016 mt 5878 1042 L
+5878 1042 mt 5879 1043 L
+5879 1043 mt 5903 1071 L
+5903 1071 mt 5913 1082 L
+5913 1082 mt 5927 1098 L
+5927 1098 mt 5948 1123 L
+5948 1123 mt 5950 1126 L
+5950 1126 mt 5973 1153 L
+5973 1153 mt 5983 1165 L
+5983 1165 mt 5996 1181 L
+5996 1181 mt 6017 1206 L
+6017 1206 mt 6019 1208 L
+6019 1208 mt 6043 1236 L
+6043 1236 mt 6052 1246 L
+6052 1246 mt 6068 1263 L
+6068 1263 mt 6087 1284 L
+6087 1284 mt 6094 1291 L
+6094 1291 mt 6120 1318 L
+6120 1318 mt 6122 1321 L
+6122 1321 mt 6146 1346 L
+6146 1346 mt 6157 1357 L
+6157 1357 mt 6172 1373 L
+6172 1373 mt 6192 1394 L
+6192 1394 mt 6198 1401 L
+6198 1401 mt 6224 1428 L
+6224 1428 mt 6227 1432 L
+6227 1432 mt 6248 1456 L
+6248 1456 mt 6261 1472 L
+6261 1472 mt 6271 1484 L
+6271 1484 mt 6293 1511 L
+6293 1511 mt 6296 1516 L
+6296 1516 mt 6313 1539 L
+6313 1539 mt 6331 1566 L
+6331 1566 mt 6331 1567 L
+6331 1567 mt 6346 1594 L
+6346 1594 mt 6360 1621 L
+6360 1621 mt 6366 1636 L
+6366 1636 mt 6371 1649 L
+6371 1649 mt 6381 1676 L
+6381 1676 mt 6388 1704 L
+6388 1704 mt 6394 1731 L
+6394 1731 mt 6398 1759 L
+6398 1759 mt 6401 1781 L
+6331 1653 mt 6339 1676 L
+6339 1676 mt 6346 1704 L
+6346 1704 mt 6351 1731 L
+6351 1731 mt 6354 1759 L
+6354 1759 mt 6356 1786 L
+6356 1786 mt 6357 1814 L
+6357 1814 mt 6358 1841 L
+6358 1841 mt 6358 1869 L
+6358 1869 mt 6358 1896 L
+6358 1896 mt 6357 1924 L
+6357 1924 mt 6356 1951 L
+6356 1951 mt 6353 1979 L
+6353 1979 mt 6349 2006 L
+6349 2006 mt 6344 2034 L
+6344 2034 mt 6339 2061 L
+6339 2061 mt 6333 2089 L
+6333 2089 mt 6331 2100 L
+6331 2100 mt 6328 2116 L
+6328 2116 mt 6322 2144 L
+6322 2144 mt 6315 2171 L
+6315 2171 mt 6308 2199 L
+6308 2199 mt 6300 2226 L
+6300 2226 mt 6296 2237 L
+6296 2237 mt 6290 2254 L
+6290 2254 mt 6281 2281 L
+6281 2281 mt 6273 2309 L
+6273 2309 mt 6267 2336 L
+6267 2336 mt 6262 2364 L
+6262 2364 mt 6261 2365 L
+6261 2365 mt 6246 2391 L
+6246 2391 mt 6227 2414 L
+6227 2414 mt 6192 2416 L
+6192 2416 mt 6157 2403 L
+6157 2403 mt 6137 2391 L
+6137 2391 mt 6122 2382 L
+6122 2382 mt 6097 2364 L
+6097 2364 mt 6087 2355 L
+6087 2355 mt 6068 2336 L
+6068 2336 mt 6053 2309 L
+6053 2309 mt 6052 2304 L
+6052 2304 mt 6050 2281 L
+6050 2281 mt 6052 2273 L
+6052 2273 mt 6058 2254 L
+6058 2254 mt 6072 2226 L
+6072 2226 mt 6084 2199 L
+6084 2199 mt 6087 2191 L
+6087 2191 mt 6094 2171 L
+6094 2171 mt 6101 2144 L
+6101 2144 mt 6103 2116 L
+6103 2116 mt 6106 2089 L
+6106 2089 mt 6109 2061 L
+6109 2061 mt 6113 2034 L
+6113 2034 mt 6118 2006 L
+6118 2006 mt 6122 1985 L
+6122 1985 mt 6123 1979 L
+6123 1979 mt 6128 1951 L
+6128 1951 mt 6131 1924 L
+6131 1924 mt 6133 1896 L
+6133 1896 mt 6136 1869 L
+6136 1869 mt 6138 1841 L
+6138 1841 mt 6139 1814 L
+6139 1814 mt 6139 1786 L
+6139 1786 mt 6138 1759 L
+6138 1759 mt 6136 1731 L
+6136 1731 mt 6131 1704 L
+6131 1704 mt 6124 1676 L
+6124 1676 mt 6122 1670 L
+6122 1670 mt 6114 1649 L
+6114 1649 mt 6102 1621 L
+6102 1621 mt 6087 1594 L
+6087 1594 mt 6087 1593 L
+6087 1593 mt 6066 1566 L
+6066 1566 mt 6052 1550 L
+6052 1550 mt 6040 1539 L
+6040 1539 mt 6017 1520 L
+6017 1520 mt 6004 1511 L
+6004 1511 mt 5983 1498 L
+5983 1498 mt 5959 1484 L
+5959 1484 mt 5948 1477 L
+5948 1477 mt 5913 1457 L
+5913 1457 mt 5910 1456 L
+5910 1456 mt 5878 1440 L
+5878 1440 mt 5855 1428 L
+5855 1428 mt 5843 1423 L
+5843 1423 mt 5808 1410 L
+5808 1410 mt 5778 1401 L
+5778 1401 mt 5773 1400 L
+5773 1400 mt 5738 1394 L
+5738 1394 mt 5704 1390 L
+5704 1390 mt 5669 1389 L
+5669 1389 mt 5634 1390 L
+5634 1390 mt 5599 1392 L
+5599 1392 mt 5564 1396 L
+5564 1396 mt 5529 1400 L
+5529 1400 mt 5523 1401 L
+5523 1401 mt 5494 1405 L
+5494 1405 mt 5459 1409 L
+5459 1409 mt 5425 1405 L
+5425 1405 mt 5416 1401 L
+5416 1401 mt 5390 1374 L
+5390 1374 mt 5390 1373 L
+5390 1373 mt 5383 1346 L
+5383 1346 mt 5377 1318 L
+5377 1318 mt 5372 1291 L
+5372 1291 mt 5367 1263 L
+5367 1263 mt 5361 1236 L
+5361 1236 mt 5355 1219 L
+5355 1219 mt 5350 1208 L
+5350 1208 mt 5332 1181 L
+5332 1181 mt 5320 1167 L
+5320 1167 mt 5306 1153 L
+5306 1153 mt 5285 1136 L
+5285 1136 mt 5270 1126 L
+5270 1126 mt 5250 1114 L
+5250 1114 mt 5222 1098 L
+5222 1098 mt 5215 1095 L
+5215 1095 mt 5181 1079 L
+5181 1079 mt 5163 1071 L
+5163 1071 mt 5146 1064 L
+5146 1064 mt 5111 1047 L
+5111 1047 mt 5105 1043 L
+5105 1043 mt 5076 1030 L
+5076 1030 mt 5054 1016 L
+5054 1016 mt 5041 1008 L
+5041 1008 mt 5017  988 L
+5017  988 mt 5006  979 L
+5006  979 mt 4992  961 L
+4992  961 mt 4973  933 L
+4973  933 mt 4971  931 L
+4971  931 mt 4956  906 L
+4956  906 mt 4940  878 L
+4940  878 mt 4936  871 L
+4936  871 mt 4924  851 L
+4924  851 mt 4910  823 L
+4910  823 mt 4902  809 L
+4902  809 mt 4892  796 L
+4892  796 mt 4867  769 L
+4867  769 mt 4866  768 L
+4866  768 mt 4832  746 L
+4832  746 mt 4821  741 L
+4821  741 mt 4797  731 L
+4797  731 mt 4762  720 L
+4762  720 mt 4737  713 L
+4737  713 mt 4727  711 L
+4727  711 mt 4692  700 L
+4692  700 mt 4661  686 L
+4661  686 mt 4657  683 L
+4657  683 mt 4631  658 L
+4631  658 mt 4623  642 L
+4623  642 mt 4618  631 L
+4618  631 mt 4617  603 L
+4617  603 mt 4621  576 L
+4621  576 mt 4621  548 L
+4621  548 mt 4611  521 L
+4611  521 mt 4593  493 L
+4593  493 mt 4588  487 L
+4588  487 mt 4563  466 L
+4563  466 mt 4553  457 L
+4553  457 mt 4528  438 L
+4528  438 mt 4518  426 L
+4518  426 mt 4505  411 L
+4505  411 mt 4518  395 L
+4518  395 mt 4547  383 L
+4547  383 mt 4553  382 L
+4553  382 mt 4588  369 L
+4588  369 mt 4623  357 L
+4623  357 mt 4628  355 L
+4628  355 mt 4657  348 L
+4657  348 mt 4692  340 L
+4692  340 mt 4727  331 L
+4727  331 mt 4738  328 L
+4738  328 mt 4762  323 L
+4762  323 mt 4797  315 L
+4797  315 mt 4832  308 L
+4832  308 mt 4867  302 L
+4867  302 mt 4874  300 L
+4874  300 mt 4902  297 L
+4902  297 mt 4936  293 L
+4936  293 mt 4971  291 L
+4971  291 mt 5006  291 L
+5006  291 mt 5041  293 L
+5041  293 mt 5076  298 L
+5076  298 mt 5086  300 L
+5086  300 mt 5111  306 L
+5111  306 mt 5146  317 L
+5146  317 mt 5172  328 L
+5172  328 mt 5181  332 L
+5181  332 mt 5215  350 L
+5215  350 mt 5224  355 L
+5224  355 mt 5250  374 L
+5250  374 mt 5263  383 L
+5263  383 mt 5285  402 L
+5285  402 mt 5295  411 L
+5295  411 mt 5320  434 L
+5320  434 mt 5324  438 L
+5324  438 mt 5350  466 L
+5350  466 mt 5355  471 L
+5355  471 mt 5375  493 L
+5375  493 mt 5390  510 L
+5390  510 mt 5400  521 L
+5400  521 mt 5425  548 L
+5425  548 mt 5425  548 L
+5425  548 mt 5450  576 L
+5450  576 mt 5459  585 L
+5459  585 mt 5477  603 L
+5477  603 mt 5494  621 L
+5494  621 mt 5504  631 L
+5504  631 mt 5527  658 L
+5527  658 mt 5529  661 L
+5529  661 mt 5548  686 L
+5548  686 mt 5564  709 L
+5564  709 mt 5567  713 L
+5567  713 mt 5585  741 L
+5585  741 mt 5599  762 L
+5599  762 mt 5603  768 L
+5603  768 mt 5622  796 L
+5622  796 mt 5634  813 L
+5634  813 mt 5641  823 L
+5641  823 mt 5661  851 L
+5661  851 mt 5669  861 L
+5669  861 mt 5682  878 L
+5682  878 mt 5704  905 L
+5704  905 mt 5704  906 L
+5704  906 mt 5728  933 L
+5728  933 mt 5738  945 L
+5738  945 mt 5752  961 L
+5752  961 mt 5773  984 L
+5773  984 mt 5777  988 L
+5777  988 mt 5802 1016 L
+5802 1016 mt 5808 1022 L
+5808 1022 mt 5827 1043 L
+5827 1043 mt 5843 1061 L
+5843 1061 mt 5852 1071 L
+5852 1071 mt 5876 1098 L
+5876 1098 mt 5878 1101 L
+5878 1101 mt 5898 1126 L
+5898 1126 mt 5913 1144 L
+5913 1144 mt 5921 1153 L
+5921 1153 mt 5942 1181 L
+5942 1181 mt 5948 1188 L
+5948 1188 mt 5964 1208 L
+5964 1208 mt 5983 1230 L
+5983 1230 mt 5987 1236 L
+5987 1236 mt 6011 1263 L
+6011 1263 mt 6017 1270 L
+6017 1270 mt 6036 1291 L
+6036 1291 mt 6052 1308 L
+6052 1308 mt 6063 1318 L
+6063 1318 mt 6087 1343 L
+6087 1343 mt 6090 1346 L
+6090 1346 mt 6116 1373 L
+6116 1373 mt 6122 1379 L
+6122 1379 mt 6143 1401 L
+6143 1401 mt 6157 1415 L
+6157 1415 mt 6170 1428 L
+6170 1428 mt 6192 1451 L
+6192 1451 mt 6196 1456 L
+6196 1456 mt 6221 1484 L
+6221 1484 mt 6227 1490 L
+6227 1490 mt 6244 1511 L
+6244 1511 mt 6261 1532 L
+6261 1532 mt 6266 1539 L
+6266 1539 mt 6286 1566 L
+6286 1566 mt 6296 1583 L
+6296 1583 mt 6303 1594 L
+6303 1594 mt 6317 1621 L
+6317 1621 mt 6329 1649 L
+6329 1649 mt 6331 1653 L
+6296 1682 mt 6302 1704 L
+6302 1704 mt 6305 1731 L
+6305 1731 mt 6306 1759 L
+6306 1759 mt 6305 1786 L
+6305 1786 mt 6304 1814 L
+6304 1814 mt 6303 1841 L
+6303 1841 mt 6302 1869 L
+6302 1869 mt 6302 1896 L
+6302 1896 mt 6302 1924 L
+6302 1924 mt 6300 1951 L
+6300 1951 mt 6296 1974 L
+6296 1974 mt 6296 1979 L
+6296 1979 mt 6289 2006 L
+6289 2006 mt 6281 2034 L
+6281 2034 mt 6273 2061 L
+6273 2061 mt 6267 2089 L
+6267 2089 mt 6262 2116 L
+6262 2116 mt 6261 2120 L
+6261 2120 mt 6257 2144 L
+6257 2144 mt 6250 2171 L
+6250 2171 mt 6241 2199 L
+6241 2199 mt 6228 2226 L
+6228 2226 mt 6227 2230 L
+6227 2230 mt 6208 2254 L
+6208 2254 mt 6192 2275 L
+6192 2275 mt 6167 2281 L
+6167 2281 mt 6157 2285 L
+6157 2285 mt 6154 2281 L
+6154 2281 mt 6135 2254 L
+6135 2254 mt 6136 2226 L
+6136 2226 mt 6145 2199 L
+6145 2199 mt 6153 2171 L
+6153 2171 mt 6157 2154 L
+6157 2154 mt 6159 2144 L
+6159 2144 mt 6163 2116 L
+6163 2116 mt 6166 2089 L
+6166 2089 mt 6169 2061 L
+6169 2061 mt 6173 2034 L
+6173 2034 mt 6177 2006 L
+6177 2006 mt 6181 1979 L
+6181 1979 mt 6183 1951 L
+6183 1951 mt 6184 1924 L
+6184 1924 mt 6183 1896 L
+6183 1896 mt 6184 1869 L
+6184 1869 mt 6185 1841 L
+6185 1841 mt 6186 1814 L
+6186 1814 mt 6186 1786 L
+6186 1786 mt 6186 1759 L
+6186 1759 mt 6184 1731 L
+6184 1731 mt 6180 1704 L
+6180 1704 mt 6173 1676 L
+6173 1676 mt 6163 1649 L
+6163 1649 mt 6157 1636 L
+6157 1636 mt 6151 1621 L
+6151 1621 mt 6137 1594 L
+6137 1594 mt 6122 1572 L
+6122 1572 mt 6118 1566 L
+6118 1566 mt 6096 1539 L
+6096 1539 mt 6087 1530 L
+6087 1530 mt 6068 1511 L
+6068 1511 mt 6052 1498 L
+6052 1498 mt 6032 1484 L
+6032 1484 mt 6017 1474 L
+6017 1474 mt 5985 1456 L
+5985 1456 mt 5983 1454 L
+5983 1454 mt 5948 1435 L
+5948 1435 mt 5936 1428 L
+5936 1428 mt 5913 1415 L
+5913 1415 mt 5882 1401 L
+5882 1401 mt 5878 1399 L
+5878 1399 mt 5843 1383 L
+5843 1383 mt 5812 1373 L
+5812 1373 mt 5808 1372 L
+5808 1372 mt 5773 1363 L
+5773 1363 mt 5738 1357 L
+5738 1357 mt 5704 1354 L
+5704 1354 mt 5669 1352 L
+5669 1352 mt 5634 1352 L
+5634 1352 mt 5599 1353 L
+5599 1353 mt 5564 1354 L
+5564 1354 mt 5529 1355 L
+5529 1355 mt 5494 1352 L
+5494 1352 mt 5477 1346 L
+5477 1346 mt 5459 1334 L
+5459 1334 mt 5450 1318 L
+5450 1318 mt 5442 1291 L
+5442 1291 mt 5437 1263 L
+5437 1263 mt 5433 1236 L
+5433 1236 mt 5430 1208 L
+5430 1208 mt 5425 1181 L
+5425 1181 mt 5425 1179 L
+5425 1179 mt 5415 1153 L
+5415 1153 mt 5398 1126 L
+5398 1126 mt 5390 1116 L
+5390 1116 mt 5371 1098 L
+5371 1098 mt 5355 1086 L
+5355 1086 mt 5331 1071 L
+5331 1071 mt 5320 1065 L
+5320 1065 mt 5285 1047 L
+5285 1047 mt 5275 1043 L
+5275 1043 mt 5250 1034 L
+5250 1034 mt 5215 1022 L
+5215 1022 mt 5196 1016 L
+5196 1016 mt 5181 1011 L
+5181 1011 mt 5146 1000 L
+5146 1000 mt 5113  988 L
+5113  988 mt 5111  988 L
+5111  988 mt 5076  972 L
+5076  972 mt 5059  961 L
+5059  961 mt 5041  949 L
+5041  949 mt 5025  933 L
+5025  933 mt 5006  912 L
+5006  912 mt 5002  906 L
+5002  906 mt 4981  878 L
+4981  878 mt 4971  865 L
+4971  865 mt 4963  851 L
+4963  851 mt 4950  823 L
+4950  823 mt 4938  796 L
+4938  796 mt 4936  792 L
+4936  792 mt 4923  768 L
+4923  768 mt 4902  742 L
+4902  742 mt 4900  741 L
+4900  741 mt 4867  718 L
+4867  718 mt 4856  713 L
+4856  713 mt 4832  704 L
+4832  704 mt 4797  693 L
+4797  693 mt 4770  686 L
+4770  686 mt 4762  683 L
+4762  683 mt 4727  674 L
+4727  674 mt 4692  661 L
+4692  661 mt 4688  658 L
+4688  658 mt 4665  631 L
+4665  631 mt 4664  603 L
+4664  603 mt 4674  576 L
+4674  576 mt 4684  548 L
+4684  548 mt 4687  521 L
+4687  521 mt 4683  493 L
+4683  493 mt 4672  466 L
+4672  466 mt 4659  438 L
+4659  438 mt 4659  411 L
+4659  411 mt 4692  397 L
+4692  397 mt 4710  383 L
+4710  383 mt 4727  376 L
+4727  376 mt 4762  363 L
+4762  363 mt 4784  355 L
+4784  355 mt 4797  352 L
+4797  352 mt 4832  341 L
+4832  341 mt 4867  332 L
+4867  332 mt 4883  328 L
+4883  328 mt 4902  324 L
+4902  324 mt 4936  318 L
+4936  318 mt 4971  314 L
+4971  314 mt 5006  312 L
+5006  312 mt 5041  314 L
+5041  314 mt 5076  318 L
+5076  318 mt 5111  326 L
+5111  326 mt 5117  328 L
+5117  328 mt 5146  338 L
+5146  338 mt 5181  354 L
+5181  354 mt 5183  355 L
+5183  355 mt 5215  375 L
+5215  375 mt 5226  383 L
+5226  383 mt 5250  402 L
+5250  402 mt 5260  411 L
+5260  411 mt 5285  435 L
+5285  435 mt 5288  438 L
+5288  438 mt 5313  466 L
+5313  466 mt 5320  474 L
+5320  474 mt 5336  493 L
+5336  493 mt 5355  516 L
+5355  516 mt 5359  521 L
+5359  521 mt 5382  548 L
+5382  548 mt 5390  558 L
+5390  558 mt 5406  576 L
+5406  576 mt 5425  595 L
+5425  595 mt 5432  603 L
+5432  603 mt 5459  629 L
+5459  629 mt 5461  631 L
+5461  631 mt 5487  658 L
+5487  658 mt 5494  667 L
+5494  667 mt 5508  686 L
+5508  686 mt 5525  713 L
+5525  713 mt 5529  720 L
+5529  720 mt 5541  741 L
+5541  741 mt 5557  768 L
+5557  768 mt 5564  780 L
+5564  780 mt 5573  796 L
+5573  796 mt 5590  823 L
+5590  823 mt 5599  837 L
+5599  837 mt 5608  851 L
+5608  851 mt 5627  878 L
+5627  878 mt 5634  887 L
+5634  887 mt 5648  906 L
+5648  906 mt 5669  931 L
+5669  931 mt 5671  933 L
+5671  933 mt 5695  961 L
+5695  961 mt 5704  970 L
+5704  970 mt 5720  988 L
+5720  988 mt 5738 1008 L
+5738 1008 mt 5746 1016 L
+5746 1016 mt 5772 1043 L
+5772 1043 mt 5773 1045 L
+5773 1045 mt 5797 1071 L
+5797 1071 mt 5808 1083 L
+5808 1083 mt 5822 1098 L
+5822 1098 mt 5843 1123 L
+5843 1123 mt 5845 1126 L
+5845 1126 mt 5867 1153 L
+5867 1153 mt 5878 1169 L
+5878 1169 mt 5887 1181 L
+5887 1181 mt 5907 1208 L
+5907 1208 mt 5913 1217 L
+5913 1217 mt 5926 1236 L
+5926 1236 mt 5948 1263 L
+5948 1263 mt 5948 1263 L
+5948 1263 mt 5971 1291 L
+5971 1291 mt 5983 1304 L
+5983 1304 mt 5996 1318 L
+5996 1318 mt 6017 1340 L
+6017 1340 mt 6023 1346 L
+6023 1346 mt 6051 1373 L
+6051 1373 mt 6052 1375 L
+6052 1375 mt 6077 1401 L
+6077 1401 mt 6087 1410 L
+6087 1410 mt 6105 1428 L
+6105 1428 mt 6122 1444 L
+6122 1444 mt 6134 1456 L
+6134 1456 mt 6157 1478 L
+6157 1478 mt 6162 1484 L
+6162 1484 mt 6187 1511 L
+6187 1511 mt 6192 1516 L
+6192 1516 mt 6211 1539 L
+6211 1539 mt 6227 1556 L
+6227 1556 mt 6234 1566 L
+6234 1566 mt 6254 1594 L
+6254 1594 mt 6261 1606 L
+6261 1606 mt 6270 1621 L
+6270 1621 mt 6283 1649 L
+6283 1649 mt 6295 1676 L
+6295 1676 mt 6296 1682 L
+5913 1345 mt 5913 1346 L
+5913 1346 mt 5913 1346 L
+5913 1346 mt 5909 1346 L
+5909 1346 mt 5878 1342 L
+5878 1342 mt 5843 1335 L
+5843 1335 mt 5808 1329 L
+5808 1329 mt 5773 1325 L
+5773 1325 mt 5738 1322 L
+5738 1322 mt 5704 1319 L
+5704 1319 mt 5692 1318 L
+5692 1318 mt 5669 1317 L
+5669 1317 mt 5634 1315 L
+5634 1315 mt 5599 1315 L
+5599 1315 mt 5564 1312 L
+5564 1312 mt 5529 1305 L
+5529 1305 mt 5508 1291 L
+5508 1291 mt 5494 1269 L
+5494 1269 mt 5492 1263 L
+5492 1263 mt 5487 1236 L
+5487 1236 mt 5485 1208 L
+5485 1208 mt 5481 1181 L
+5481 1181 mt 5475 1153 L
+5475 1153 mt 5464 1126 L
+5464 1126 mt 5459 1117 L
+5459 1117 mt 5447 1098 L
+5447 1098 mt 5425 1073 L
+5425 1073 mt 5422 1071 L
+5422 1071 mt 5390 1044 L
+5390 1044 mt 5389 1043 L
+5389 1043 mt 5355 1022 L
+5355 1022 mt 5343 1016 L
+5343 1016 mt 5320 1006 L
+5320 1006 mt 5285  993 L
+5285  993 mt 5272  988 L
+5272  988 mt 5250  982 L
+5250  982 mt 5215  973 L
+5215  973 mt 5181  965 L
+5181  965 mt 5166  961 L
+5166  961 mt 5146  956 L
+5146  956 mt 5111  943 L
+5111  943 mt 5093  933 L
+5093  933 mt 5076  923 L
+5076  923 mt 5054  906 L
+5054  906 mt 5041  894 L
+5041  894 mt 5027  878 L
+5027  878 mt 5006  852 L
+5006  852 mt 5005  851 L
+5005  851 mt 4991  823 L
+4991  823 mt 4982  796 L
+4982  796 mt 4971  771 L
+4971  771 mt 4970  768 L
+4970  768 mt 4952  741 L
+4952  741 mt 4936  721 L
+4936  721 mt 4929  713 L
+4929  713 mt 4902  690 L
+4902  690 mt 4892  686 L
+4892  686 mt 4867  675 L
+4867  675 mt 4832  663 L
+4832  663 mt 4818  658 L
+4818  658 mt 4797  648 L
+4797  648 mt 4762  633 L
+4762  633 mt 4757  631 L
+4757  631 mt 4738  603 L
+4738  603 mt 4744  576 L
+4744  576 mt 4755  548 L
+4755  548 mt 4762  531 L
+4762  531 mt 4766  521 L
+4766  521 mt 4772  493 L
+4772  493 mt 4773  466 L
+4773  466 mt 4774  438 L
+4774  438 mt 4785  411 L
+4785  411 mt 4797  403 L
+4797  403 mt 4824  383 L
+4824  383 mt 4832  379 L
+4832  379 mt 4867  365 L
+4867  365 mt 4894  355 L
+4894  355 mt 4902  353 L
+4902  353 mt 4936  344 L
+4936  344 mt 4971  337 L
+4971  337 mt 5006  333 L
+5006  333 mt 5041  333 L
+5041  333 mt 5076  337 L
+5076  337 mt 5111  345 L
+5111  345 mt 5138  355 L
+5138  355 mt 5146  359 L
+5146  359 mt 5181  377 L
+5181  377 mt 5190  383 L
+5190  383 mt 5215  402 L
+5215  402 mt 5226  411 L
+5226  411 mt 5250  435 L
+5250  435 mt 5254  438 L
+5254  438 mt 5278  466 L
+5278  466 mt 5285  476 L
+5285  476 mt 5299  493 L
+5299  493 mt 5319  521 L
+5319  521 mt 5320  523 L
+5320  523 mt 5338  548 L
+5338  548 mt 5355  570 L
+5355  570 mt 5359  576 L
+5359  576 mt 5383  603 L
+5383  603 mt 5390  611 L
+5390  611 mt 5410  631 L
+5410  631 mt 5425  642 L
+5425  642 mt 5443  658 L
+5443  658 mt 5459  673 L
+5459  673 mt 5469  686 L
+5469  686 mt 5483  713 L
+5483  713 mt 5494  736 L
+5494  736 mt 5497  741 L
+5497  741 mt 5510  768 L
+5510  768 mt 5523  796 L
+5523  796 mt 5529  809 L
+5529  809 mt 5536  823 L
+5536  823 mt 5551  851 L
+5551  851 mt 5564  873 L
+5564  873 mt 5568  878 L
+5568  878 mt 5586  906 L
+5586  906 mt 5599  923 L
+5599  923 mt 5607  933 L
+5607  933 mt 5630  961 L
+5630  961 mt 5634  965 L
+5634  965 mt 5655  988 L
+5655  988 mt 5669 1002 L
+5669 1002 mt 5681 1016 L
+5681 1016 mt 5704 1038 L
+5704 1038 mt 5709 1043 L
+5709 1043 mt 5737 1071 L
+5737 1071 mt 5738 1072 L
+5738 1072 mt 5763 1098 L
+5763 1098 mt 5773 1109 L
+5773 1109 mt 5788 1126 L
+5788 1126 mt 5808 1150 L
+5808 1150 mt 5811 1153 L
+5811 1153 mt 5830 1181 L
+5830 1181 mt 5843 1203 L
+5843 1203 mt 5847 1208 L
+5847 1208 mt 5860 1236 L
+5860 1236 mt 5872 1263 L
+5872 1263 mt 5878 1278 L
+5878 1278 mt 5884 1291 L
+5884 1291 mt 5899 1318 L
+5899 1318 mt 5913 1345 L
+5773 1188 mt 5785 1208 L
+5785 1208 mt 5794 1236 L
+5794 1236 mt 5786 1263 L
+5786 1263 mt 5773 1272 L
+5773 1272 mt 5738 1279 L
+5738 1279 mt 5704 1278 L
+5704 1278 mt 5669 1276 L
+5669 1276 mt 5634 1273 L
+5634 1273 mt 5599 1269 L
+5599 1269 mt 5583 1263 L
+5583 1263 mt 5564 1254 L
+5564 1254 mt 5548 1236 L
+5548 1236 mt 5539 1208 L
+5539 1208 mt 5534 1181 L
+5534 1181 mt 5529 1158 L
+5529 1158 mt 5528 1153 L
+5528 1153 mt 5520 1126 L
+5520 1126 mt 5509 1098 L
+5509 1098 mt 5494 1075 L
+5494 1075 mt 5492 1071 L
+5492 1071 mt 5469 1043 L
+5469 1043 mt 5459 1034 L
+5459 1034 mt 5437 1016 L
+5437 1016 mt 5425 1006 L
+5425 1006 mt 5394  988 L
+5394  988 mt 5390  986 L
+5390  986 mt 5355  970 L
+5355  970 mt 5325  961 L
+5325  961 mt 5320  959 L
+5320  959 mt 5285  948 L
+5285  948 mt 5250  940 L
+5250  940 mt 5215  933 L
+5215  933 mt 5215  933 L
+5215  933 mt 5181  924 L
+5181  924 mt 5146  912 L
+5146  912 mt 5131  906 L
+5131  906 mt 5111  895 L
+5111  895 mt 5085  878 L
+5085  878 mt 5076  870 L
+5076  870 mt 5061  851 L
+5061  851 mt 5043  823 L
+5043  823 mt 5041  819 L
+5041  819 mt 5033  796 L
+5033  796 mt 5023  768 L
+5023  768 mt 5006  742 L
+5006  742 mt 5006  741 L
+5006  741 mt 4985  713 L
+4985  713 mt 4971  699 L
+4971  699 mt 4960  686 L
+4960  686 mt 4936  666 L
+4936  666 mt 4925  658 L
+4925  658 mt 4902  644 L
+4902  644 mt 4873  631 L
+4873  631 mt 4867  626 L
+4867  626 mt 4837  603 L
+4837  603 mt 4832  595 L
+4832  595 mt 4821  576 L
+4821  576 mt 4820  548 L
+4820  548 mt 4824  521 L
+4824  521 mt 4831  493 L
+4831  493 mt 4832  489 L
+4832  489 mt 4836  466 L
+4836  466 mt 4843  438 L
+4843  438 mt 4862  411 L
+4862  411 mt 4867  408 L
+4867  408 mt 4902  387 L
+4902  387 mt 4908  383 L
+4908  383 mt 4936  371 L
+4936  371 mt 4971  360 L
+4971  360 mt 4997  355 L
+4997  355 mt 5006  354 L
+5006  354 mt 5041  352 L
+5041  352 mt 5075  355 L
+5075  355 mt 5076  356 L
+5076  356 mt 5111  365 L
+5111  365 mt 5146  379 L
+5146  379 mt 5152  383 L
+5152  383 mt 5181  402 L
+5181  402 mt 5192  411 L
+5192  411 mt 5215  433 L
+5215  433 mt 5221  438 L
+5221  438 mt 5243  466 L
+5243  466 mt 5250  476 L
+5250  476 mt 5263  493 L
+5263  493 mt 5279  521 L
+5279  521 mt 5285  531 L
+5285  531 mt 5295  548 L
+5295  548 mt 5311  576 L
+5311  576 mt 5320  591 L
+5320  591 mt 5328  603 L
+5328  603 mt 5349  631 L
+5349  631 mt 5355  637 L
+5355  637 mt 5376  658 L
+5376  658 mt 5390  669 L
+5390  669 mt 5415  686 L
+5415  686 mt 5425  694 L
+5425  694 mt 5436  713 L
+5436  713 mt 5447  741 L
+5447  741 mt 5458  768 L
+5458  768 mt 5459  772 L
+5459  772 mt 5467  796 L
+5467  796 mt 5476  823 L
+5476  823 mt 5486  851 L
+5486  851 mt 5494  871 L
+5494  871 mt 5497  878 L
+5497  878 mt 5510  906 L
+5510  906 mt 5527  933 L
+5527  933 mt 5529  936 L
+5529  936 mt 5547  961 L
+5547  961 mt 5564  980 L
+5564  980 mt 5571  988 L
+5571  988 mt 5599 1015 L
+5599 1015 mt 5600 1016 L
+5600 1016 mt 5629 1043 L
+5629 1043 mt 5634 1047 L
+5634 1047 mt 5660 1071 L
+5660 1071 mt 5669 1077 L
+5669 1077 mt 5692 1098 L
+5692 1098 mt 5704 1108 L
+5704 1108 mt 5723 1126 L
+5723 1126 mt 5738 1143 L
+5738 1143 mt 5748 1153 L
+5748 1153 mt 5769 1181 L
+5769 1181 mt 5773 1188 L
+5111  460 mt 5115  466 L
+5115  466 mt 5122  493 L
+5122  493 mt 5123  521 L
+5123  521 mt 5116  548 L
+5116  548 mt 5111  555 L
+5111  555 mt 5076  559 L
+5076  559 mt 5044  548 L
+5044  548 mt 5041  546 L
+5041  546 mt 5019  521 L
+5019  521 mt 5007  493 L
+5007  493 mt 5013  466 L
+5013  466 mt 5029  438 L
+5029  438 mt 5041  430 L
+5041  430 mt 5076  433 L
+5076  433 mt 5086  438 L
+5086  438 mt 5111  460 L
+gr
+
+0 sg
+24 W
+4390 4604 PD
+24 W
+4388 4604 PD
+24 W
+4375 4586 PD
+24 W
+4365 4567 PD
+24 W
+4358 4546 PD
+24 W
+4350 4528 PD
+24 W
+4342 4509 PD
+24 W
+4336 4492 PD
+24 W
+4332 4473 PD
+24 W
+4336 4454 PD
+24 W
+4351 4436 PD
+24 W
+4358 4417 PD
+24 W
+4364 4399 PD
+24 W
+4365 4380 PD
+24 W
+4360 4362 PD
+24 W
+4362 4344 PD
+24 W
+4370 4326 PD
+24 W
+4367 4307 PD
+24 W
+4359 4289 PD
+24 W
+4356 4270 PD
+24 W
+4382 4254 PD
+24 W
+4398 4236 PD
+24 W
+4404 4217 PD
+24 W
+4412 4200 PD
+24 W
+4415 4180 PD
+24 W
+4423 4162 PD
+24 W
+4451 4158 PD
+24 W
+4478 4173 PD
+24 W
+4488 4191 PD
+24 W
+4499 4209 PD
+24 W
+4528 4223 PD
+24 W
+4549 4241 PD
+24 W
+4552 4259 PD
+24 W
+4559 4277 PD
+24 W
+4581 4296 PD
+24 W
+4600 4314 PD
+24 W
+4620 4331 PD
+24 W
+4625 4349 PD
+24 W
+4632 4367 PD
+24 W
+4660 4384 PD
+24 W
+4665 4402 PD
+24 W
+4673 4421 PD
+24 W
+4688 4439 PD
+24 W
+4689 4458 PD
+24 W
+4690 4477 PD
+24 W
+4696 4496 PD
+24 W
+4697 4514 PD
+24 W
+4727 4515 PD
+24 W
+4754 4512 PD
+24 W
+4782 4507 PD
+24 W
+4810 4513 PD
+24 W
+4809 4531 PD
+24 W
+4818 4550 PD
+24 W
+4842 4568 PD
+24 W
+4838 4586 PD
+24 W
+4866 4592 PD
+24 W
+4893 4591 PD
+24 W
+4921 4593 PD
+24 W
+4948 4590 PD
+24 W
+4975 4601 PD
+24 W
+4293 4609 PD
+24 W
+4300 4591 PD
+24 W
+4305 4572 PD
+24 W
+4300 4553 PD
+24 W
+4297 4534 PD
+24 W
+4293 4516 PD
+24 W
+4284 4498 PD
+24 W
+4273 4480 PD
+24 W
+4263 4461 PD
+24 W
+4251 4441 PD
+24 W
+4239 4423 PD
+24 W
+4233 4405 PD
+24 W
+4225 4386 PD
+24 W
+4219 4367 PD
+24 W
+4215 4348 PD
+24 W
+4215 4329 PD
+24 W
+4220 4309 PD
+24 W
+4222 4291 PD
+24 W
+4221 4270 PD
+24 W
+4217 4251 PD
+24 W
+4215 4233 PD
+24 W
+4212 4212 PD
+24 W
+4207 4195 PD
+24 W
+4194 4176 PD
+24 W
+4186 4156 PD
+24 W
+4182 4136 PD
+24 W
+4179 4118 PD
+24 W
+4189 4100 PD
+24 W
+4209 4082 PD
+24 W
+4219 4063 PD
+24 W
+4222 4046 PD
+24 W
+4217 4027 PD
+24 W
+4204 4009 PD
+24 W
+4201 3991 PD
+24 W
+4207 3973 PD
+24 W
+4204 3955 PD
+24 W
+4192 3937 PD
+24 W
+4189 3919 PD
+24 W
+4197 3901 PD
+24 W
+4204 3884 PD
+24 W
+4214 3864 PD
+24 W
+4221 3846 PD
+24 W
+4225 3827 PD
+24 W
+4235 3807 PD
+24 W
+4250 3788 PD
+24 W
+4247 3770 PD
+24 W
+4229 3753 PD
+24 W
+4233 3734 PD
+24 W
+4262 3716 PD
+24 W
+4290 3708 PD
+24 W
+4319 3698 PD
+24 W
+4346 3689 PD
+24 W
+4375 3685 PD
+24 W
+4404 3688 PD
+24 W
+4432 3685 PD
+24 W
+4459 3676 PD
+24 W
+4487 3689 PD
+24 W
+4517 3698 PD
+24 W
+4544 3698 PD
+24 W
+4571 3710 PD
+24 W
+4580 3728 PD
+24 W
+4588 3747 PD
+24 W
+4596 3765 PD
+24 W
+4607 3783 PD
+24 W
+4626 3802 PD
+24 W
+4648 3820 PD
+24 W
+4656 3839 PD
+24 W
+4655 3858 PD
+24 W
+4656 3875 PD
+24 W
+4668 3894 PD
+24 W
+4678 3912 PD
+24 W
+4693 3931 PD
+24 W
+4705 3949 PD
+24 W
+4714 3968 PD
+24 W
+4720 3987 PD
+24 W
+4724 4006 PD
+24 W
+4733 4024 PD
+24 W
+4751 4042 PD
+24 W
+4761 4060 PD
+24 W
+4768 4079 PD
+24 W
+4771 4097 PD
+24 W
+4779 4117 PD
+24 W
+4807 4133 PD
+24 W
+4834 4137 PD
+24 W
+4844 4157 PD
+24 W
+4839 4176 PD
+24 W
+4830 4194 PD
+24 W
+4821 4212 PD
+24 W
+4815 4231 PD
+24 W
+4807 4250 PD
+24 W
+4835 4261 PD
+24 W
+4848 4279 PD
+24 W
+4853 4297 PD
+24 W
+4856 4316 PD
+24 W
+4856 4336 PD
+24 W
+4871 4354 PD
+24 W
+4899 4350 PD
+24 W
+4926 4338 PD
+24 W
+4953 4334 PD
+24 W
+4973 4353 PD
+24 W
+4953 4372 PD
+24 W
+4959 4390 PD
+24 W
+4977 4408 PD
+24 W
+5000 4426 PD
+24 W
+5011 4444 PD
+24 W
+5018 4463 PD
+24 W
+5029 4481 PD
+24 W
+5056 4472 PD
+24 W
+5084 4486 PD
+24 W
+5111 4492 PD
+24 W
+5141 4495 PD
+24 W
+5119 4513 PD
+24 W
+5116 4531 PD
+24 W
+5131 4550 PD
+24 W
+5133 4568 PD
+24 W
+5160 4582 PD
+24 W
+5162 4600 PD
+24 W
+4209 4607 PD
+24 W
+4208 4607 PD
+24 W
+4207 4588 PD
+24 W
+4209 4570 PD
+24 W
+4207 4551 PD
+24 W
+4199 4532 PD
+24 W
+4195 4513 PD
+24 W
+4193 4493 PD
+24 W
+4186 4473 PD
+24 W
+4176 4455 PD
+24 W
+4160 4437 PD
+24 W
+4149 4418 PD
+24 W
+4145 4400 PD
+24 W
+4143 4380 PD
+24 W
+4144 4361 PD
+24 W
+4121 4344 PD
+24 W
+4116 4325 PD
+24 W
+4136 4307 PD
+24 W
+4143 4289 PD
+24 W
+4143 4272 PD
+24 W
+4140 4252 PD
+24 W
+4136 4234 PD
+24 W
+4130 4215 PD
+24 W
+4125 4197 PD
+24 W
+4124 4178 PD
+24 W
+4120 4159 PD
+24 W
+4116 4139 PD
+24 W
+4114 4121 PD
+24 W
+4111 4102 PD
+24 W
+4109 4084 PD
+24 W
+4104 4064 PD
+24 W
+4101 4046 PD
+24 W
+4096 4029 PD
+24 W
+4083 4010 PD
+24 W
+4070 3991 PD
+24 W
+4061 3972 PD
+24 W
+4046 3954 PD
+24 W
+4038 3935 PD
+24 W
+4034 3915 PD
+24 W
+4035 3898 PD
+24 W
+4040 3879 PD
+24 W
+4043 3861 PD
+24 W
+4049 3842 PD
+24 W
+4052 3823 PD
+24 W
+4047 3805 PD
+24 W
+4050 3787 PD
+24 W
+4050 3768 PD
+24 W
+4053 3750 PD
+24 W
+4048 3732 PD
+24 W
+4046 3715 PD
+24 W
+4041 3696 PD
+24 W
+4041 3678 PD
+24 W
+4042 3659 PD
+24 W
+4049 3641 PD
+24 W
+4050 3637 PD
+24 W
+4077 3630 PD
+24 W
+4105 3624 PD
+24 W
+4133 3617 PD
+24 W
+4160 3610 PD
+24 W
+4186 3601 PD
+24 W
+4213 3591 PD
+24 W
+4241 3576 PD
+24 W
+4268 3562 PD
+24 W
+4296 3553 PD
+24 W
+4325 3544 PD
+24 W
+4352 3530 PD
+24 W
+4368 3511 PD
+24 W
+4387 3494 PD
+24 W
+4401 3476 PD
+24 W
+4429 3478 PD
+24 W
+4456 3479 PD
+24 W
+4483 3477 PD
+24 W
+4511 3476 PD
+24 W
+4510 3475 PD
+24 W
+4536 3494 PD
+24 W
+4549 3512 PD
+24 W
+4563 3529 PD
+24 W
+4578 3548 PD
+24 W
+4600 3567 PD
+24 W
+4628 3576 PD
+24 W
+4652 3595 PD
+24 W
+4663 3614 PD
+24 W
+4679 3633 PD
+24 W
+4697 3651 PD
+24 W
+4711 3669 PD
+24 W
+4729 3689 PD
+24 W
+4746 3708 PD
+24 W
+4756 3727 PD
+24 W
+4764 3745 PD
+24 W
+4780 3764 PD
+24 W
+4793 3782 PD
+24 W
+4803 3801 PD
+24 W
+4813 3819 PD
+24 W
+4823 3836 PD
+24 W
+4833 3854 PD
+24 W
+4850 3872 PD
+24 W
+4869 3891 PD
+24 W
+4883 3910 PD
+24 W
+4897 3928 PD
+24 W
+4910 3946 PD
+24 W
+4920 3965 PD
+24 W
+4929 3985 PD
+24 W
+4936 4002 PD
+24 W
+4938 4020 PD
+24 W
+4944 4039 PD
+24 W
+4950 4057 PD
+24 W
+4957 4076 PD
+24 W
+4965 4095 PD
+24 W
+4972 4114 PD
+24 W
+4982 4134 PD
+24 W
+4988 4152 PD
+24 W
+4997 4170 PD
+24 W
+5007 4188 PD
+24 W
+5031 4206 PD
+24 W
+5041 4226 PD
+24 W
+5044 4244 PD
+24 W
+5045 4263 PD
+24 W
+5051 4282 PD
+24 W
+5070 4300 PD
+24 W
+5087 4319 PD
+24 W
+5098 4338 PD
+24 W
+5103 4357 PD
+24 W
+5108 4375 PD
+24 W
+5113 4393 PD
+24 W
+5120 4411 PD
+24 W
+5147 4416 PD
+24 W
+5159 4397 PD
+24 W
+5149 4379 PD
+24 W
+5138 4359 PD
+24 W
+5131 4341 PD
+24 W
+5128 4323 PD
+24 W
+5139 4305 PD
+24 W
+5167 4296 PD
+24 W
+5173 4314 PD
+24 W
+5177 4333 PD
+24 W
+5202 4351 PD
+24 W
+5219 4369 PD
+24 W
+5227 4387 PD
+24 W
+5232 4407 PD
+24 W
+5239 4425 PD
+24 W
+5242 4443 PD
+24 W
+5249 4461 PD
+24 W
+5243 4480 PD
+24 W
+5237 4499 PD
+24 W
+5234 4518 PD
+24 W
+5233 4535 PD
+24 W
+5239 4553 PD
+24 W
+5249 4571 PD
+24 W
+5246 4590 PD
+24 W
+5244 4608 PD
+24 W
+4118 4607 PD
+24 W
+4117 4607 PD
+24 W
+4117 4588 PD
+24 W
+4125 4571 PD
+24 W
+4125 4553 PD
+24 W
+4122 4535 PD
+24 W
+4114 4516 PD
+24 W
+4104 4499 PD
+24 W
+4095 4479 PD
+24 W
+4081 4460 PD
+24 W
+4071 4442 PD
+24 W
+4063 4424 PD
+24 W
+4053 4406 PD
+24 W
+4046 4388 PD
+24 W
+4036 4369 PD
+24 W
+4028 4352 PD
+24 W
+4019 4334 PD
+24 W
+4016 4316 PD
+24 W
+4043 4317 PD
+24 W
+4063 4298 PD
+24 W
+4061 4280 PD
+24 W
+4049 4260 PD
+24 W
+4041 4240 PD
+24 W
+4035 4222 PD
+24 W
+4034 4203 PD
+24 W
+4039 4184 PD
+24 W
+4041 4166 PD
+24 W
+4033 4147 PD
+24 W
+4025 4129 PD
+24 W
+4022 4110 PD
+24 W
+4021 4091 PD
+24 W
+4019 4072 PD
+24 W
+4016 4053 PD
+24 W
+4010 4035 PD
+24 W
+4008 4017 PD
+24 W
+4003 3998 PD
+24 W
+3994 3980 PD
+24 W
+3981 3962 PD
+24 W
+3979 3945 PD
+24 W
+3971 3926 PD
+24 W
+3951 3909 PD
+24 W
+3952 3890 PD
+24 W
+3955 3869 PD
+24 W
+3951 3850 PD
+24 W
+3951 3832 PD
+24 W
+3953 3814 PD
+24 W
+3957 3796 PD
+24 W
+3959 3779 PD
+24 W
+3963 3760 PD
+24 W
+3961 3741 PD
+24 W
+3958 3723 PD
+24 W
+3955 3705 PD
+24 W
+3952 3687 PD
+24 W
+3949 3669 PD
+24 W
+3945 3650 PD
+24 W
+3941 3632 PD
+24 W
+3941 3614 PD
+24 W
+3942 3595 PD
+24 W
+3944 3577 PD
+24 W
+3938 3559 PD
+24 W
+3933 3541 PD
+24 W
+3934 3529 PD
+24 W
+3951 3523 PD
+24 W
+3978 3510 PD
+24 W
+4006 3499 PD
+24 W
+4034 3490 PD
+24 W
+4062 3478 PD
+24 W
+4088 3469 PD
+24 W
+4115 3461 PD
+24 W
+4142 3449 PD
+24 W
+4170 3433 PD
+24 W
+4197 3417 PD
+24 W
+4225 3400 PD
+24 W
+4250 3382 PD
+24 W
+4262 3364 PD
+24 W
+4275 3346 PD
+24 W
+4291 3327 PD
+24 W
+4306 3308 PD
+24 W
+4329 3290 PD
+24 W
+4353 3272 PD
+24 W
+4380 3262 PD
+24 W
+4407 3249 PD
+24 W
+4408 3278 PD
+24 W
+4427 3296 PD
+24 W
+4445 3314 PD
+24 W
+4461 3332 PD
+24 W
+4488 3348 PD
+24 W
+4515 3348 PD
+24 W
+4542 3363 PD
+24 W
+4569 3381 PD
+24 W
+4588 3400 PD
+24 W
+4610 3418 PD
+24 W
+4628 3435 PD
+24 W
+4649 3453 PD
+24 W
+4657 3471 PD
+24 W
+4664 3489 PD
+24 W
+4685 3508 PD
+24 W
+4703 3526 PD
+24 W
+4714 3546 PD
+24 W
+4728 3564 PD
+24 W
+4753 3583 PD
+24 W
+4775 3601 PD
+24 W
+4795 3620 PD
+24 W
+4812 3638 PD
+24 W
+4825 3658 PD
+24 W
+4836 3676 PD
+24 W
+4846 3695 PD
+24 W
+4854 3713 PD
+24 W
+4867 3731 PD
+24 W
+4880 3749 PD
+24 W
+4894 3767 PD
+24 W
+4908 3786 PD
+24 W
+4920 3805 PD
+24 W
+4932 3824 PD
+24 W
+4947 3843 PD
+24 W
+4961 3861 PD
+24 W
+4972 3881 PD
+24 W
+4981 3899 PD
+24 W
+4994 3918 PD
+24 W
+5014 3936 PD
+24 W
+5023 3953 PD
+24 W
+5029 3972 PD
+24 W
+5038 3993 PD
+24 W
+5044 4011 PD
+24 W
+5049 4029 PD
+24 W
+5055 4048 PD
+24 W
+5063 4066 PD
+24 W
+5074 4085 PD
+24 W
+5084 4103 PD
+24 W
+5095 4122 PD
+24 W
+5114 4140 PD
+24 W
+5139 4157 PD
+24 W
+5165 4165 PD
+24 W
+5194 4169 PD
+24 W
+5219 4187 PD
+24 W
+5241 4205 PD
+24 W
+5251 4224 PD
+24 W
+5248 4243 PD
+24 W
+5246 4261 PD
+24 W
+5244 4279 PD
+24 W
+5248 4297 PD
+24 W
+5256 4315 PD
+24 W
+5280 4333 PD
+24 W
+5291 4352 PD
+24 W
+5294 4369 PD
+24 W
+5312 4388 PD
+24 W
+5328 4406 PD
+24 W
+5345 4425 PD
+24 W
+5361 4444 PD
+24 W
+5372 4462 PD
+24 W
+5385 4482 PD
+24 W
+5395 4501 PD
+24 W
+5401 4519 PD
+24 W
+5403 4539 PD
+24 W
+5402 4558 PD
+24 W
+5400 4576 PD
+24 W
+5407 4594 PD
+24 W
+4022 4609 PD
+24 W
+4021 4609 PD
+24 W
+4023 4591 PD
+24 W
+4024 4572 PD
+24 W
+4021 4553 PD
+24 W
+4020 4535 PD
+24 W
+4020 4516 PD
+24 W
+4010 4496 PD
+24 W
+4001 4477 PD
+24 W
+3992 4458 PD
+24 W
+3986 4440 PD
+24 W
+3980 4422 PD
+24 W
+3973 4403 PD
+24 W
+3967 4384 PD
+24 W
+3963 4366 PD
+24 W
+3964 4348 PD
+24 W
+3935 4340 PD
+24 W
+3908 4340 PD
+24 W
+3920 4322 PD
+24 W
+3939 4302 PD
+24 W
+3945 4282 PD
+24 W
+3946 4262 PD
+24 W
+3945 4243 PD
+24 W
+3944 4223 PD
+24 W
+3943 4204 PD
+24 W
+3942 4183 PD
+24 W
+3941 4163 PD
+24 W
+3938 4144 PD
+24 W
+3933 4126 PD
+24 W
+3929 4107 PD
+24 W
+3927 4089 PD
+24 W
+3924 4069 PD
+24 W
+3917 4051 PD
+24 W
+3909 4032 PD
+24 W
+3902 4015 PD
+24 W
+3874 3997 PD
+24 W
+3866 3978 PD
+24 W
+3879 3960 PD
+24 W
+3880 3942 PD
+24 W
+3871 3923 PD
+24 W
+3858 3906 PD
+24 W
+3866 3888 PD
+24 W
+3876 3868 PD
+24 W
+3879 3850 PD
+24 W
+3882 3832 PD
+24 W
+3878 3812 PD
+24 W
+3869 3793 PD
+24 W
+3873 3774 PD
+24 W
+3877 3756 PD
+24 W
+3872 3738 PD
+24 W
+3864 3721 PD
+24 W
+3858 3701 PD
+24 W
+3851 3682 PD
+24 W
+3845 3663 PD
+24 W
+3841 3645 PD
+24 W
+3837 3625 PD
+24 W
+3833 3605 PD
+24 W
+3829 3588 PD
+24 W
+3821 3570 PD
+24 W
+3813 3551 PD
+24 W
+3802 3532 PD
+24 W
+3781 3513 PD
+24 W
+3760 3495 PD
+24 W
+3750 3478 PD
+24 W
+4280 3086 PD
+24 W
+4280 3084 PD
+24 W
+4308 3101 PD
+24 W
+4337 3118 PD
+24 W
+4363 3137 PD
+24 W
+4384 3156 PD
+24 W
+4405 3175 PD
+24 W
+4427 3193 PD
+24 W
+4452 3212 PD
+24 W
+4481 3227 PD
+24 W
+4509 3243 PD
+24 W
+4533 3261 PD
+24 W
+4556 3280 PD
+24 W
+4578 3300 PD
+24 W
+4603 3320 PD
+24 W
+4628 3338 PD
+24 W
+4652 3357 PD
+24 W
+4673 3376 PD
+24 W
+4692 3393 PD
+24 W
+4711 3412 PD
+24 W
+4727 3431 PD
+24 W
+4741 3449 PD
+24 W
+4756 3467 PD
+24 W
+4770 3485 PD
+24 W
+4784 3504 PD
+24 W
+4797 3522 PD
+24 W
+4809 3542 PD
+24 W
+4824 3562 PD
+24 W
+4836 3579 PD
+24 W
+4854 3598 PD
+24 W
+4860 3616 PD
+24 W
+4869 3635 PD
+24 W
+4890 3654 PD
+24 W
+4908 3672 PD
+24 W
+4922 3690 PD
+24 W
+4922 3709 PD
+24 W
+4928 3726 PD
+24 W
+4955 3740 PD
+24 W
+4969 3757 PD
+24 W
+4973 3776 PD
+24 W
+4976 3795 PD
+24 W
+4989 3814 PD
+24 W
+5007 3833 PD
+24 W
+5034 3851 PD
+24 W
+5058 3869 PD
+24 W
+5077 3888 PD
+24 W
+5093 3905 PD
+24 W
+5099 3923 PD
+24 W
+5104 3942 PD
+24 W
+5113 3961 PD
+24 W
+5127 3979 PD
+24 W
+5140 3997 PD
+24 W
+5159 4015 PD
+24 W
+5188 4031 PD
+24 W
+5213 4050 PD
+24 W
+5241 4052 PD
+24 W
+5268 4057 PD
+24 W
+5293 4076 PD
+24 W
+5303 4095 PD
+24 W
+5312 4113 PD
+24 W
+5315 4132 PD
+24 W
+5313 4150 PD
+24 W
+5317 4168 PD
+24 W
+5345 4173 PD
+24 W
+5356 4192 PD
+24 W
+5365 4210 PD
+24 W
+5373 4229 PD
+24 W
+5380 4247 PD
+24 W
+5390 4267 PD
+24 W
+5402 4286 PD
+24 W
+5420 4305 PD
+24 W
+5439 4324 PD
+24 W
+5458 4343 PD
+24 W
+5480 4362 PD
+24 W
+5505 4380 PD
+24 W
+5523 4398 PD
+24 W
+5528 4417 PD
+24 W
+5530 4436 PD
+24 W
+5539 4455 PD
+24 W
+5550 4473 PD
+24 W
+5555 4491 PD
+24 W
+5551 4512 PD
+24 W
+5553 4530 PD
+24 W
+5563 4548 PD
+24 W
+5569 4567 PD
+24 W
+5579 4586 PD
+24 W
+5590 4605 PD
+24 W
+3745 3465 PD
+24 W
+3756 3446 PD
+24 W
+3768 3428 PD
+24 W
+3789 3410 PD
+24 W
+3817 3393 PD
+24 W
+3845 3380 PD
+24 W
+3872 3366 PD
+24 W
+3899 3353 PD
+24 W
+3927 3340 PD
+24 W
+3957 3325 PD
+24 W
+3985 3309 PD
+24 W
+4014 3293 PD
+24 W
+4043 3277 PD
+24 W
+4070 3260 PD
+24 W
+4098 3243 PD
+24 W
+4122 3225 PD
+24 W
+4148 3207 PD
+24 W
+4167 3189 PD
+24 W
+4176 3171 PD
+24 W
+4185 3153 PD
+24 W
+4197 3135 PD
+24 W
+4211 3117 PD
+24 W
+4227 3100 PD
+24 W
+4253 3090 PD
+24 W
+3949 4611 PD
+24 W
+3948 4610 PD
+24 W
+3952 4591 PD
+24 W
+3943 4572 PD
+24 W
+3938 4553 PD
+24 W
+3935 4534 PD
+24 W
+3933 4516 PD
+24 W
+3929 4497 PD
+24 W
+3927 4479 PD
+24 W
+3912 4460 PD
+24 W
+3902 4441 PD
+24 W
+3900 4423 PD
+24 W
+3908 4404 PD
+24 W
+3896 4385 PD
+24 W
+3876 4367 PD
+24 W
+3849 4352 PD
+24 W
+3822 4341 PD
+24 W
+3795 4328 PD
+24 W
+3824 4315 PD
+24 W
+3851 4302 PD
+24 W
+3874 4282 PD
+24 W
+3876 4263 PD
+24 W
+3875 4246 PD
+24 W
+3872 4227 PD
+24 W
+3868 4209 PD
+24 W
+3864 4189 PD
+24 W
+3858 4170 PD
+24 W
+3854 4151 PD
+24 W
+3852 4133 PD
+24 W
+3848 4114 PD
+24 W
+3843 4096 PD
+24 W
+3841 4076 PD
+24 W
+3833 4058 PD
+24 W
+3815 4040 PD
+24 W
+3798 4021 PD
+24 W
+3775 4003 PD
+24 W
+3756 3985 PD
+24 W
+3781 3967 PD
+24 W
+3792 3949 PD
+24 W
+3785 3931 PD
+24 W
+3780 3913 PD
+24 W
+3775 3895 PD
+24 W
+3784 3877 PD
+24 W
+3795 3857 PD
+24 W
+3800 3839 PD
+24 W
+3804 3821 PD
+24 W
+3802 3803 PD
+24 W
+3799 3784 PD
+24 W
+3798 3766 PD
+24 W
+3791 3747 PD
+24 W
+3788 3729 PD
+24 W
+3784 3710 PD
+24 W
+3782 3692 PD
+24 W
+3776 3673 PD
+24 W
+3765 3653 PD
+24 W
+3758 3635 PD
+24 W
+3753 3616 PD
+24 W
+3745 3597 PD
+24 W
+3735 3579 PD
+24 W
+3719 3559 PD
+24 W
+3707 3542 PD
+24 W
+3693 3523 PD
+24 W
+3677 3505 PD
+24 W
+3662 3486 PD
+24 W
+3647 3468 PD
+24 W
+3636 3448 PD
+24 W
+3628 3430 PD
+24 W
+3619 3410 PD
+24 W
+3608 3392 PD
+24 W
+3598 3374 PD
+24 W
+3597 3352 PD
+24 W
+3596 3352 PD
+24 W
+3587 3333 PD
+24 W
+3599 3315 PD
+24 W
+3614 3296 PD
+24 W
+3640 3279 PD
+24 W
+3668 3259 PD
+24 W
+3693 3242 PD
+24 W
+3720 3228 PD
+24 W
+3748 3213 PD
+24 W
+3775 3199 PD
+24 W
+3804 3184 PD
+24 W
+3833 3168 PD
+24 W
+3852 3149 PD
+24 W
+3868 3132 PD
+24 W
+3884 3112 PD
+24 W
+3900 3094 PD
+24 W
+3927 3076 PD
+24 W
+3956 3064 PD
+24 W
+3984 3054 PD
+24 W
+4014 3047 PD
+24 W
+4042 3036 PD
+24 W
+4070 3025 PD
+24 W
+4093 3006 PD
+24 W
+4110 2987 PD
+24 W
+4125 2969 PD
+24 W
+4136 2951 PD
+24 W
+4163 2944 PD
+24 W
+4170 2926 PD
+24 W
+4175 2922 PD
+24 W
+4198 2927 PD
+24 W
+4227 2940 PD
+24 W
+4254 2957 PD
+24 W
+4277 2974 PD
+24 W
+4303 2993 PD
+24 W
+4330 3010 PD
+24 W
+4358 3029 PD
+24 W
+4380 3046 PD
+24 W
+4400 3064 PD
+24 W
+4423 3082 PD
+24 W
+4452 3097 PD
+24 W
+4479 3114 PD
+24 W
+4480 3132 PD
+24 W
+4506 3139 PD
+24 W
+4533 3150 PD
+24 W
+4542 3169 PD
+24 W
+4556 3186 PD
+24 W
+4555 3205 PD
+24 W
+4574 3224 PD
+24 W
+4596 3242 PD
+24 W
+4616 3260 PD
+24 W
+4638 3279 PD
+24 W
+4659 3298 PD
+24 W
+4685 3317 PD
+24 W
+4713 3329 PD
+24 W
+4740 3345 PD
+24 W
+4757 3364 PD
+24 W
+4770 3383 PD
+24 W
+4779 3403 PD
+24 W
+4792 3421 PD
+24 W
+4803 3440 PD
+24 W
+4814 3458 PD
+24 W
+4828 3476 PD
+24 W
+4845 3494 PD
+24 W
+4865 3512 PD
+24 W
+4882 3530 PD
+24 W
+4904 3548 PD
+24 W
+4930 3559 PD
+24 W
+4948 3578 PD
+24 W
+4955 3597 PD
+24 W
+4973 3615 PD
+24 W
+4990 3634 PD
+24 W
+5006 3652 PD
+24 W
+5025 3670 PD
+24 W
+5043 3689 PD
+24 W
+5061 3706 PD
+24 W
+5069 3724 PD
+24 W
+5059 3742 PD
+24 W
+5076 3761 PD
+24 W
+5098 3779 PD
+24 W
+5127 3798 PD
+24 W
+5156 3812 PD
+24 W
+5185 3823 PD
+24 W
+5213 3836 PD
+24 W
+5241 3850 PD
+24 W
+5269 3865 PD
+24 W
+5291 3883 PD
+24 W
+5309 3901 PD
+24 W
+5337 3911 PD
+24 W
+5358 3931 PD
+24 W
+5368 3951 PD
+24 W
+5378 3971 PD
+24 W
+5392 3989 PD
+24 W
+5403 4007 PD
+24 W
+5416 4027 PD
+24 W
+5431 4046 PD
+24 W
+5443 4063 PD
+24 W
+5454 4081 PD
+24 W
+5466 4101 PD
+24 W
+5478 4120 PD
+24 W
+5492 4138 PD
+24 W
+5504 4156 PD
+24 W
+5516 4176 PD
+24 W
+5528 4196 PD
+24 W
+5537 4214 PD
+24 W
+5547 4235 PD
+24 W
+5555 4253 PD
+24 W
+5564 4272 PD
+24 W
+5573 4291 PD
+24 W
+5587 4309 PD
+24 W
+5604 4328 PD
+24 W
+5620 4346 PD
+24 W
+5633 4363 PD
+24 W
+5649 4383 PD
+24 W
+5664 4401 PD
+24 W
+5671 4419 PD
+24 W
+5673 4440 PD
+24 W
+5675 4457 PD
+24 W
+5672 4477 PD
+24 W
+5672 4495 PD
+24 W
+5673 4514 PD
+24 W
+5688 4533 PD
+24 W
+5708 4552 PD
+24 W
+5727 4571 PD
+24 W
+5735 4590 PD
+24 W
+3870 4600 PD
+24 W
+3860 4581 PD
+24 W
+3858 4562 PD
+24 W
+3856 4544 PD
+24 W
+3852 4525 PD
+24 W
+3851 4507 PD
+24 W
+3848 4488 PD
+24 W
+3833 4469 PD
+24 W
+3823 4450 PD
+24 W
+3826 4432 PD
+24 W
+3826 4414 PD
+24 W
+3811 4395 PD
+24 W
+3782 4381 PD
+24 W
+3754 4370 PD
+24 W
+3727 4357 PD
+24 W
+3700 4347 PD
+24 W
+3676 4329 PD
+24 W
+3703 4324 PD
+24 W
+3730 4310 PD
+24 W
+3758 4296 PD
+24 W
+3787 4281 PD
+24 W
+3807 4263 PD
+24 W
+3809 4244 PD
+24 W
+3801 4226 PD
+24 W
+3790 4206 PD
+24 W
+3787 4188 PD
+24 W
+3781 4169 PD
+24 W
+3774 4148 PD
+24 W
+3771 4130 PD
+24 W
+3769 4110 PD
+24 W
+3761 4092 PD
+24 W
+3751 4073 PD
+24 W
+3744 4055 PD
+24 W
+3730 4037 PD
+24 W
+3702 4019 PD
+24 W
+3675 4002 PD
+24 W
+3653 3984 PD
+24 W
+3661 3966 PD
+24 W
+3688 3961 PD
+24 W
+3716 3954 PD
+24 W
+3727 3936 PD
+24 W
+3708 3917 PD
+24 W
+3694 3899 PD
+24 W
+3691 3881 PD
+24 W
+3697 3862 PD
+24 W
+3704 3844 PD
+24 W
+3712 3826 PD
+24 W
+3720 3807 PD
+24 W
+3723 3788 PD
+24 W
+3722 3770 PD
+24 W
+3723 3751 PD
+24 W
+3720 3733 PD
+24 W
+3715 3715 PD
+24 W
+3708 3697 PD
+24 W
+3700 3678 PD
+24 W
+3690 3661 PD
+24 W
+3676 3642 PD
+24 W
+3661 3623 PD
+24 W
+3650 3605 PD
+24 W
+3636 3588 PD
+24 W
+3625 3569 PD
+24 W
+3616 3551 PD
+24 W
+3608 3533 PD
+24 W
+3596 3515 PD
+24 W
+3581 3496 PD
+24 W
+3564 3477 PD
+24 W
+3548 3458 PD
+24 W
+3535 3439 PD
+24 W
+3521 3422 PD
+24 W
+3508 3403 PD
+24 W
+3498 3385 PD
+24 W
+3489 3367 PD
+24 W
+3478 3348 PD
+24 W
+3469 3329 PD
+24 W
+3465 3312 PD
+24 W
+3450 3293 PD
+24 W
+3425 3275 PD
+24 W
+3398 3261 PD
+24 W
+3377 3242 PD
+24 W
+3370 3220 PD
+24 W
+3366 3222 PD
+24 W
+3349 3204 PD
+24 W
+3355 3186 PD
+24 W
+3374 3168 PD
+24 W
+3399 3149 PD
+24 W
+3427 3130 PD
+24 W
+3450 3112 PD
+24 W
+3475 3093 PD
+24 W
+3498 3073 PD
+24 W
+3522 3054 PD
+24 W
+3543 3035 PD
+24 W
+3566 3017 PD
+24 W
+3590 2997 PD
+24 W
+3619 2978 PD
+24 W
+3646 2964 PD
+24 W
+3673 2953 PD
+24 W
+3703 2943 PD
+24 W
+3733 2932 PD
+24 W
+3761 2924 PD
+24 W
+3790 2914 PD
+24 W
+3819 2906 PD
+24 W
+3846 2900 PD
+24 W
+3873 2892 PD
+24 W
+3902 2880 PD
+24 W
+3931 2867 PD
+24 W
+3959 2847 PD
+24 W
+3973 2828 PD
+24 W
+3986 2810 PD
+24 W
+3990 2791 PD
+24 W
+3995 2773 PD
+24 W
+4005 2755 PD
+24 W
+4022 2737 PD
+24 W
+4042 2722 PD
+24 W
+4050 2727 PD
+24 W
+4066 2747 PD
+24 W
+4090 2764 PD
+24 W
+4117 2778 PD
+24 W
+4146 2792 PD
+24 W
+4172 2808 PD
+24 W
+4197 2826 PD
+24 W
+4220 2845 PD
+24 W
+4236 2863 PD
+24 W
+4255 2881 PD
+24 W
+4283 2896 PD
+24 W
+4310 2908 PD
+24 W
+4339 2925 PD
+24 W
+4362 2944 PD
+24 W
+4379 2962 PD
+24 W
+4394 2980 PD
+24 W
+4413 2999 PD
+24 W
+4435 3017 PD
+24 W
+4463 3025 PD
+24 W
+4490 3034 PD
+24 W
+4514 3053 PD
+24 W
+4537 3071 PD
+24 W
+4564 3088 PD
+24 W
+4586 3106 PD
+24 W
+4607 3125 PD
+24 W
+4624 3142 PD
+24 W
+4631 3161 PD
+24 W
+4635 3180 PD
+24 W
+4648 3198 PD
+24 W
+4675 3215 PD
+24 W
+4702 3231 PD
+24 W
+4731 3251 PD
+24 W
+4750 3270 PD
+24 W
+4767 3288 PD
+24 W
+4785 3308 PD
+24 W
+4804 3327 PD
+24 W
+4821 3346 PD
+24 W
+4838 3365 PD
+24 W
+4859 3383 PD
+24 W
+4882 3401 PD
+24 W
+4907 3420 PD
+24 W
+4936 3433 PD
+24 W
+4962 3451 PD
+24 W
+4968 3469 PD
+24 W
+4974 3487 PD
+24 W
+4990 3506 PD
+24 W
+5005 3524 PD
+24 W
+5020 3543 PD
+24 W
+5036 3564 PD
+24 W
+5058 3583 PD
+24 W
+5085 3601 PD
+24 W
+5113 3617 PD
+24 W
+5136 3635 PD
+24 W
+5153 3653 PD
+24 W
+5172 3672 PD
+24 W
+5201 3672 PD
+24 W
+5223 3690 PD
+24 W
+5237 3708 PD
+24 W
+5250 3727 PD
+24 W
+5270 3746 PD
+24 W
+5296 3765 PD
+24 W
+5324 3779 PD
+24 W
+5352 3795 PD
+24 W
+5375 3813 PD
+24 W
+5394 3831 PD
+24 W
+5410 3849 PD
+24 W
+5431 3869 PD
+24 W
+5454 3888 PD
+24 W
+5473 3907 PD
+24 W
+5485 3926 PD
+24 W
+5497 3944 PD
+24 W
+5511 3961 PD
+24 W
+5526 3979 PD
+24 W
+5541 3998 PD
+24 W
+5558 4017 PD
+24 W
+5570 4034 PD
+24 W
+5582 4053 PD
+24 W
+5593 4071 PD
+24 W
+5607 4091 PD
+24 W
+5618 4110 PD
+24 W
+5624 4128 PD
+24 W
+5633 4147 PD
+24 W
+5642 4168 PD
+24 W
+5650 4186 PD
+24 W
+5659 4204 PD
+24 W
+5669 4223 PD
+24 W
+5677 4241 PD
+24 W
+5687 4261 PD
+24 W
+5699 4279 PD
+24 W
+5716 4298 PD
+24 W
+5728 4315 PD
+24 W
+5742 4333 PD
+24 W
+5760 4351 PD
+24 W
+5781 4371 PD
+24 W
+5797 4389 PD
+24 W
+5797 4408 PD
+24 W
+5799 4426 PD
+24 W
+5795 4444 PD
+24 W
+5795 4463 PD
+24 W
+5809 4481 PD
+24 W
+5826 4501 PD
+24 W
+5848 4520 PD
+24 W
+5860 4538 PD
+24 W
+5868 4558 PD
+24 W
+5873 4577 PD
+24 W
+5880 4595 PD
+24 W
+3788 4603 PD
+24 W
+3787 4603 PD
+24 W
+3772 4584 PD
+24 W
+3772 4566 PD
+24 W
+3779 4547 PD
+24 W
+3782 4527 PD
+24 W
+3780 4509 PD
+24 W
+3776 4491 PD
+24 W
+3758 4473 PD
+24 W
+3754 4454 PD
+24 W
+3747 4435 PD
+24 W
+3730 4416 PD
+24 W
+3706 4397 PD
+24 W
+3678 4381 PD
+24 W
+3651 4367 PD
+24 W
+3623 4361 PD
+24 W
+3597 4351 PD
+24 W
+3592 4333 PD
+24 W
+3587 4315 PD
+24 W
+3614 4307 PD
+24 W
+3641 4298 PD
+24 W
+3668 4285 PD
+24 W
+3695 4272 PD
+24 W
+3723 4257 PD
+24 W
+3733 4239 PD
+24 W
+3734 4221 PD
+24 W
+3730 4201 PD
+24 W
+3723 4181 PD
+24 W
+3718 4162 PD
+24 W
+3712 4143 PD
+24 W
+3706 4124 PD
+24 W
+3699 4105 PD
+24 W
+3691 4085 PD
+24 W
+3679 4067 PD
+24 W
+3659 4048 PD
+24 W
+3632 4034 PD
+24 W
+3605 4024 PD
+24 W
+3577 4008 PD
+24 W
+3559 3990 PD
+24 W
+3556 3970 PD
+24 W
+3574 3952 PD
+24 W
+3585 3934 PD
+24 W
+3575 3916 PD
+24 W
+3582 3898 PD
+24 W
+3604 3879 PD
+24 W
+3617 3860 PD
+24 W
+3600 3842 PD
+24 W
+3597 3823 PD
+24 W
+3617 3805 PD
+24 W
+3636 3787 PD
+24 W
+3647 3769 PD
+24 W
+3647 3751 PD
+24 W
+3647 3733 PD
+24 W
+3655 3715 PD
+24 W
+3666 3695 PD
+24 W
+3662 3677 PD
+24 W
+3635 3659 PD
+24 W
+3619 3640 PD
+24 W
+3606 3622 PD
+24 W
+3593 3604 PD
+24 W
+3579 3587 PD
+24 W
+3567 3567 PD
+24 W
+3553 3549 PD
+24 W
+3543 3531 PD
+24 W
+3530 3511 PD
+24 W
+3517 3493 PD
+24 W
+3502 3475 PD
+24 W
+3485 3456 PD
+24 W
+3467 3437 PD
+24 W
+3449 3418 PD
+24 W
+3432 3400 PD
+24 W
+3413 3381 PD
+24 W
+3395 3362 PD
+24 W
+3378 3343 PD
+24 W
+3363 3323 PD
+24 W
+3348 3306 PD
+24 W
+3331 3286 PD
+24 W
+3313 3268 PD
+24 W
+3293 3250 PD
+24 W
+3267 3232 PD
+24 W
+3245 3214 PD
+24 W
+3220 3195 PD
+24 W
+3198 3178 PD
+24 W
+3177 3159 PD
+24 W
+3156 3140 PD
+24 W
+3130 3122 PD
+24 W
+3119 3104 PD
+24 W
+3111 3098 PD
+24 W
+3113 3084 PD
+24 W
+3116 3066 PD
+24 W
+3124 3048 PD
+24 W
+3130 3030 PD
+24 W
+3133 3011 PD
+24 W
+3145 2991 PD
+24 W
+3165 2973 PD
+24 W
+3192 2956 PD
+24 W
+3206 2938 PD
+24 W
+3216 2920 PD
+24 W
+3233 2902 PD
+24 W
+3260 2891 PD
+24 W
+3290 2878 PD
+24 W
+3315 2860 PD
+24 W
+3343 2841 PD
+24 W
+3370 2826 PD
+24 W
+3397 2811 PD
+24 W
+3425 2794 PD
+24 W
+3454 2777 PD
+24 W
+3481 2764 PD
+24 W
+3510 2757 PD
+24 W
+3538 2750 PD
+24 W
+3566 2742 PD
+24 W
+3596 2734 PD
+24 W
+3626 2725 PD
+24 W
+3653 2717 PD
+24 W
+3680 2708 PD
+24 W
+3710 2702 PD
+24 W
+3737 2695 PD
+24 W
+3765 2687 PD
+24 W
+3795 2673 PD
+24 W
+3812 2656 PD
+24 W
+3827 2637 PD
+24 W
+3840 2617 PD
+24 W
+3847 2598 PD
+24 W
+3851 2580 PD
+24 W
+3858 2560 PD
+24 W
+3859 2543 PD
+24 W
+3864 2524 PD
+24 W
+3870 2506 PD
+24 W
+3873 2500 PD
+24 W
+3900 2506 PD
+24 W
+3927 2517 PD
+24 W
+3957 2525 PD
+24 W
+3984 2543 PD
+24 W
+4000 2561 PD
+24 W
+4010 2580 PD
+24 W
+4031 2598 PD
+24 W
+4053 2616 PD
+24 W
+4079 2635 PD
+24 W
+4101 2654 PD
+24 W
+4117 2673 PD
+24 W
+4145 2687 PD
+24 W
+4160 2706 PD
+24 W
+4181 2724 PD
+24 W
+4205 2743 PD
+24 W
+4228 2760 PD
+24 W
+4257 2776 PD
+24 W
+4283 2790 PD
+24 W
+4311 2808 PD
+24 W
+4339 2826 PD
+24 W
+4367 2845 PD
+24 W
+4385 2864 PD
+24 W
+4402 2882 PD
+24 W
+4422 2901 PD
+24 W
+4448 2921 PD
+24 W
+4474 2940 PD
+24 W
+4501 2958 PD
+24 W
+4528 2975 PD
+24 W
+4556 2994 PD
+24 W
+4580 3013 PD
+24 W
+4605 3031 PD
+24 W
+4632 3050 PD
+24 W
+4660 3068 PD
+24 W
+4681 3086 PD
+24 W
+4680 3104 PD
+24 W
+4688 3124 PD
+24 W
+4702 3144 PD
+24 W
+4721 3164 PD
+24 W
+4741 3181 PD
+24 W
+4770 3197 PD
+24 W
+4800 3214 PD
+24 W
+4826 3233 PD
+24 W
+4853 3251 PD
+24 W
+4880 3270 PD
+24 W
+4901 3289 PD
+24 W
+4921 3308 PD
+24 W
+4950 3326 PD
+24 W
+4979 3334 PD
+24 W
+5006 3347 PD
+24 W
+5035 3356 PD
+24 W
+5062 3375 PD
+24 W
+5075 3393 PD
+24 W
+5088 3411 PD
+24 W
+5110 3430 PD
+24 W
+5135 3448 PD
+24 W
+5158 3467 PD
+24 W
+5177 3486 PD
+24 W
+5195 3506 PD
+24 W
+5210 3524 PD
+24 W
+5230 3544 PD
+24 W
+5246 3562 PD
+24 W
+5263 3580 PD
+24 W
+5281 3598 PD
+24 W
+5300 3617 PD
+24 W
+5315 3635 PD
+24 W
+5332 3653 PD
+24 W
+5351 3673 PD
+24 W
+5369 3692 PD
+24 W
+5389 3712 PD
+24 W
+5409 3732 PD
+24 W
+5430 3750 PD
+24 W
+5453 3769 PD
+24 W
+5477 3788 PD
+24 W
+5501 3807 PD
+24 W
+5523 3827 PD
+24 W
+5543 3845 PD
+24 W
+5567 3865 PD
+24 W
+5582 3883 PD
+24 W
+5598 3902 PD
+24 W
+5614 3921 PD
+24 W
+5629 3940 PD
+24 W
+5645 3958 PD
+24 W
+5664 3978 PD
+24 W
+5681 3998 PD
+24 W
+5701 4016 PD
+24 W
+5717 4034 PD
+24 W
+5733 4053 PD
+24 W
+5746 4071 PD
+24 W
+5762 4092 PD
+24 W
+5773 4110 PD
+24 W
+5785 4129 PD
+24 W
+5794 4147 PD
+24 W
+5803 4166 PD
+24 W
+5812 4185 PD
+24 W
+5823 4203 PD
+24 W
+5831 4223 PD
+24 W
+5834 4243 PD
+24 W
+5839 4262 PD
+24 W
+5847 4281 PD
+24 W
+5861 4300 PD
+24 W
+5877 4318 PD
+24 W
+5897 4338 PD
+24 W
+5914 4355 PD
+24 W
+5930 4375 PD
+24 W
+5933 4393 PD
+24 W
+5930 4411 PD
+24 W
+5927 4429 PD
+24 W
+5927 4449 PD
+24 W
+5932 4468 PD
+24 W
+5944 4486 PD
+24 W
+5962 4507 PD
+24 W
+5975 4525 PD
+24 W
+5993 4545 PD
+24 W
+6005 4564 PD
+24 W
+6012 4583 PD
+24 W
+6024 4600 PD
+24 W
+3730 4603 PD
+24 W
+3718 4585 PD
+24 W
+3714 4567 PD
+24 W
+3713 4548 PD
+24 W
+3715 4529 PD
+24 W
+3711 4510 PD
+24 W
+3695 4492 PD
+24 W
+3686 4472 PD
+24 W
+3688 4454 PD
+24 W
+3682 4434 PD
+24 W
+3662 4416 PD
+24 W
+3634 4411 PD
+24 W
+3607 4408 PD
+24 W
+3579 4392 PD
+24 W
+3567 4373 PD
+24 W
+3538 4369 PD
+24 W
+3510 4352 PD
+24 W
+3525 4334 PD
+24 W
+3534 4316 PD
+24 W
+3529 4298 PD
+24 W
+3542 4279 PD
+24 W
+3571 4274 PD
+24 W
+3600 4266 PD
+24 W
+3629 4253 PD
+24 W
+3657 4244 PD
+24 W
+3666 4225 PD
+24 W
+3666 4207 PD
+24 W
+3665 4189 PD
+24 W
+3660 4169 PD
+24 W
+3655 4150 PD
+24 W
+3653 4131 PD
+24 W
+3646 4113 PD
+24 W
+3630 4095 PD
+24 W
+3602 4083 PD
+24 W
+3574 4067 PD
+24 W
+3547 4055 PD
+24 W
+3518 4043 PD
+24 W
+3490 4025 PD
+24 W
+3471 4007 PD
+24 W
+3457 3988 PD
+24 W
+3467 3970 PD
+24 W
+3488 3952 PD
+24 W
+3493 3934 PD
+24 W
+3492 3916 PD
+24 W
+3492 3898 PD
+24 W
+3520 3881 PD
+24 W
+3529 3862 PD
+24 W
+3525 3845 PD
+24 W
+3517 3826 PD
+24 W
+3526 3808 PD
+24 W
+3545 3789 PD
+24 W
+3557 3771 PD
+24 W
+3566 3753 PD
+24 W
+3571 3735 PD
+24 W
+3578 3716 PD
+24 W
+3579 3696 PD
+24 W
+3571 3678 PD
+24 W
+3562 3659 PD
+24 W
+3547 3641 PD
+24 W
+3522 3622 PD
+24 W
+3510 3604 PD
+24 W
+3508 3586 PD
+24 W
+3510 3567 PD
+24 W
+3499 3547 PD
+24 W
+3482 3529 PD
+24 W
+3461 3510 PD
+24 W
+3436 3491 PD
+24 W
+3420 3472 PD
+24 W
+3405 3455 PD
+24 W
+3386 3436 PD
+24 W
+3366 3416 PD
+24 W
+3348 3398 PD
+24 W
+3336 3380 PD
+24 W
+3318 3362 PD
+24 W
+3290 3343 PD
+24 W
+3268 3325 PD
+24 W
+3247 3307 PD
+24 W
+3222 3288 PD
+24 W
+3198 3270 PD
+24 W
+3172 3253 PD
+24 W
+3144 3237 PD
+24 W
+3116 3219 PD
+24 W
+3097 3199 PD
+24 W
+3078 3181 PD
+24 W
+3056 3163 PD
+24 W
+3030 3145 PD
+24 W
+3002 3129 PD
+24 W
+2993 3110 PD
+24 W
+2986 3090 PD
+24 W
+2970 3072 PD
+24 W
+2945 3053 PD
+24 W
+2929 3035 PD
+24 W
+2924 3017 PD
+24 W
+2918 2999 PD
+24 W
+2911 2980 PD
+24 W
+2910 2966 PD
+24 W
+2909 2962 PD
+24 W
+2908 2944 PD
+24 W
+2907 2926 PD
+24 W
+2890 2907 PD
+24 W
+2883 2889 PD
+24 W
+2879 2872 PD
+24 W
+2878 2854 PD
+24 W
+2885 2836 PD
+24 W
+2899 2817 PD
+24 W
+2916 2798 PD
+24 W
+2939 2781 PD
+24 W
+2961 2763 PD
+24 W
+2976 2745 PD
+24 W
+2987 2727 PD
+24 W
+3010 2710 PD
+24 W
+3040 2698 PD
+24 W
+3068 2686 PD
+24 W
+3096 2672 PD
+24 W
+3126 2655 PD
+24 W
+3151 2636 PD
+24 W
+3181 2616 PD
+24 W
+3207 2598 PD
+24 W
+3237 2579 PD
+24 W
+3266 2563 PD
+24 W
+3294 2549 PD
+24 W
+3321 2535 PD
+24 W
+3349 2521 PD
+24 W
+3377 2504 PD
+24 W
+3405 2489 PD
+24 W
+3432 2480 PD
+24 W
+3460 2473 PD
+24 W
+3490 2470 PD
+24 W
+3520 2464 PD
+24 W
+3547 2459 PD
+24 W
+3575 2456 PD
+24 W
+3604 2449 PD
+24 W
+3627 2431 PD
+24 W
+3642 2413 PD
+24 W
+3650 2395 PD
+24 W
+3659 2377 PD
+24 W
+3665 2360 PD
+24 W
+3669 2341 PD
+24 W
+3676 2324 PD
+24 W
+3704 2315 PD
+24 W
+3732 2320 PD
+24 W
+3745 2325 PD
+24 W
+3744 2338 PD
+24 W
+3767 2356 PD
+24 W
+3791 2374 PD
+24 W
+3819 2391 PD
+24 W
+3849 2407 PD
+24 W
+3878 2422 PD
+24 W
+3908 2436 PD
+24 W
+3937 2449 PD
+24 W
+3967 2464 PD
+24 W
+3996 2480 PD
+24 W
+4025 2494 PD
+24 W
+4053 2505 PD
+24 W
+4081 2522 PD
+24 W
+4109 2539 PD
+24 W
+4126 2557 PD
+24 W
+4145 2576 PD
+24 W
+4172 2593 PD
+24 W
+4190 2611 PD
+24 W
+4208 2629 PD
+24 W
+4214 2648 PD
+24 W
+4230 2666 PD
+24 W
+4257 2678 PD
+24 W
+4283 2694 PD
+24 W
+4310 2711 PD
+24 W
+4328 2729 PD
+24 W
+4333 2747 PD
+24 W
+4350 2764 PD
+24 W
+4377 2782 PD
+24 W
+4407 2795 PD
+24 W
+4434 2810 PD
+24 W
+4462 2826 PD
+24 W
+4490 2845 PD
+24 W
+4508 2864 PD
+24 W
+4519 2882 PD
+24 W
+4538 2901 PD
+24 W
+4557 2919 PD
+24 W
+4586 2936 PD
+24 W
+4614 2946 PD
+24 W
+4642 2956 PD
+24 W
+4670 2968 PD
+24 W
+4696 2986 PD
+24 W
+4719 3004 PD
+24 W
+4744 3022 PD
+24 W
+4767 3040 PD
+24 W
+4787 3058 PD
+24 W
+4784 3076 PD
+24 W
+4804 3095 PD
+24 W
+4831 3114 PD
+24 W
+4859 3125 PD
+24 W
+4886 3114 PD
+24 W
+4913 3125 PD
+24 W
+4936 3144 PD
+24 W
+4960 3163 PD
+24 W
+4988 3177 PD
+24 W
+5015 3194 PD
+24 W
+5037 3212 PD
+24 W
+5066 3230 PD
+24 W
+5087 3248 PD
+24 W
+5109 3267 PD
+24 W
+5134 3287 PD
+24 W
+5151 3305 PD
+24 W
+5166 3323 PD
+24 W
+5181 3342 PD
+24 W
+5195 3361 PD
+24 W
+5205 3380 PD
+24 W
+5217 3398 PD
+24 W
+5233 3416 PD
+24 W
+5253 3435 PD
+24 W
+5266 3453 PD
+24 W
+5285 3473 PD
+24 W
+5302 3492 PD
+24 W
+5318 3511 PD
+24 W
+5336 3529 PD
+24 W
+5354 3548 PD
+24 W
+5370 3567 PD
+24 W
+5382 3585 PD
+24 W
+5383 3602 PD
+24 W
+5407 3620 PD
+24 W
+5429 3640 PD
+24 W
+5451 3658 PD
+24 W
+5476 3676 PD
+24 W
+5500 3694 PD
+24 W
+5519 3712 PD
+24 W
+5542 3731 PD
+24 W
+5561 3749 PD
+24 W
+5579 3767 PD
+24 W
+5599 3786 PD
+24 W
+5623 3803 PD
+24 W
+5646 3822 PD
+24 W
+5664 3840 PD
+24 W
+5679 3859 PD
+24 W
+5694 3878 PD
+24 W
+5707 3896 PD
+24 W
+5724 3914 PD
+24 W
+5742 3933 PD
+24 W
+5763 3952 PD
+24 W
+5788 3970 PD
+24 W
+5815 3986 PD
+24 W
+5832 4006 PD
+24 W
+5832 4024 PD
+24 W
+5841 4043 PD
+24 W
+5863 4061 PD
+24 W
+5885 4081 PD
+24 W
+5894 4098 PD
+24 W
+5903 4118 PD
+24 W
+5912 4138 PD
+24 W
+5922 4157 PD
+24 W
+5932 4177 PD
+24 W
+5939 4195 PD
+24 W
+5946 4212 PD
+24 W
+5950 4231 PD
+24 W
+5957 4249 PD
+24 W
+5965 4269 PD
+24 W
+5972 4288 PD
+24 W
+5982 4305 PD
+24 W
+5995 4324 PD
+24 W
+6010 4341 PD
+24 W
+6028 4360 PD
+24 W
+6041 4378 PD
+24 W
+6041 4396 PD
+24 W
+6045 4414 PD
+24 W
+6051 4432 PD
+24 W
+6057 4452 PD
+24 W
+6064 4471 PD
+24 W
+6074 4491 PD
+24 W
+6089 4509 PD
+24 W
+6100 4528 PD
+24 W
+6108 4546 PD
+24 W
+6122 4564 PD
+24 W
+3658 4601 PD
+24 W
+3657 4601 PD
+24 W
+3639 4583 PD
+24 W
+3633 4564 PD
+24 W
+3629 4545 PD
+24 W
+3625 4527 PD
+24 W
+3622 4508 PD
+24 W
+3620 4489 PD
+24 W
+3614 4470 PD
+24 W
+3596 4453 PD
+24 W
+3569 4442 PD
+24 W
+3540 4432 PD
+24 W
+3524 4414 PD
+24 W
+3515 4397 PD
+24 W
+3488 4380 PD
+24 W
+3460 4366 PD
+24 W
+3432 4354 PD
+24 W
+3430 4336 PD
+24 W
+3456 4321 PD
+24 W
+3470 4303 PD
+24 W
+3467 4285 PD
+24 W
+3481 4268 PD
+24 W
+3480 4249 PD
+24 W
+3490 4230 PD
+24 W
+3518 4225 PD
+24 W
+3545 4234 PD
+24 W
+3572 4218 PD
+24 W
+3575 4199 PD
+24 W
+3575 4180 PD
+24 W
+3576 4160 PD
+24 W
+3574 4143 PD
+24 W
+3562 4125 PD
+24 W
+3546 4107 PD
+24 W
+3517 4090 PD
+24 W
+3489 4086 PD
+24 W
+3461 4074 PD
+24 W
+3437 4056 PD
+24 W
+3410 4042 PD
+24 W
+3382 4029 PD
+24 W
+3364 4010 PD
+24 W
+3349 3991 PD
+24 W
+3363 3973 PD
+24 W
+3381 3954 PD
+24 W
+3409 3935 PD
+24 W
+3429 3918 PD
+24 W
+3427 3900 PD
+24 W
+3416 3882 PD
+24 W
+3413 3864 PD
+24 W
+3427 3845 PD
+24 W
+3413 3828 PD
+24 W
+3396 3810 PD
+24 W
+3409 3792 PD
+24 W
+3424 3774 PD
+24 W
+3420 3756 PD
+24 W
+3413 3736 PD
+24 W
+3409 3718 PD
+24 W
+3408 3699 PD
+24 W
+3405 3681 PD
+24 W
+3400 3661 PD
+24 W
+3393 3643 PD
+24 W
+3386 3625 PD
+24 W
+3381 3607 PD
+24 W
+3376 3588 PD
+24 W
+3375 3571 PD
+24 W
+3378 3552 PD
+24 W
+3385 3532 PD
+24 W
+3387 3512 PD
+24 W
+3382 3494 PD
+24 W
+3371 3475 PD
+24 W
+3355 3456 PD
+24 W
+3328 3439 PD
+24 W
+3301 3423 PD
+24 W
+3286 3404 PD
+24 W
+3268 3387 PD
+24 W
+3242 3369 PD
+24 W
+3215 3358 PD
+24 W
+3190 3339 PD
+24 W
+3169 3321 PD
+24 W
+3145 3302 PD
+24 W
+3124 3285 PD
+24 W
+3103 3266 PD
+24 W
+3088 3248 PD
+24 W
+3071 3230 PD
+24 W
+3048 3211 PD
+24 W
+3019 3201 PD
+24 W
+2991 3189 PD
+24 W
+2968 3171 PD
+24 W
+2944 3153 PD
+24 W
+2916 3136 PD
+24 W
+2888 3127 PD
+24 W
+2862 3113 PD
+24 W
+2844 3095 PD
+24 W
+2830 3076 PD
+24 W
+2828 3058 PD
+24 W
+2827 3039 PD
+24 W
+2824 3018 PD
+24 W
+2820 2999 PD
+24 W
+2811 2981 PD
+24 W
+2802 2963 PD
+24 W
+2795 2945 PD
+24 W
+2779 2925 PD
+24 W
+2764 2906 PD
+24 W
+2754 2888 PD
+24 W
+2743 2869 PD
+24 W
+2731 2850 PD
+24 W
+2725 2831 PD
+24 W
+2720 2813 PD
+24 W
+2709 2794 PD
+24 W
+2697 2776 PD
+24 W
+2688 2759 PD
+24 W
+2683 2740 PD
+24 W
+2678 2724 PD
+24 W
+2676 2722 PD
+24 W
+2667 2703 PD
+24 W
+2668 2685 PD
+24 W
+2671 2667 PD
+24 W
+2678 2649 PD
+24 W
+2683 2629 PD
+24 W
+2692 2610 PD
+24 W
+2697 2592 PD
+24 W
+2705 2575 PD
+24 W
+2709 2555 PD
+24 W
+2716 2536 PD
+24 W
+2723 2518 PD
+24 W
+2734 2499 PD
+24 W
+2761 2496 PD
+24 W
+2777 2478 PD
+24 W
+2780 2459 PD
+24 W
+2788 2441 PD
+24 W
+2818 2427 PD
+24 W
+2845 2418 PD
+24 W
+2872 2402 PD
+24 W
+2899 2383 PD
+24 W
+2926 2367 PD
+24 W
+2954 2348 PD
+24 W
+2982 2334 PD
+24 W
+3011 2317 PD
+24 W
+3039 2301 PD
+24 W
+3069 2282 PD
+24 W
+3097 2269 PD
+24 W
+3124 2260 PD
+24 W
+3152 2254 PD
+24 W
+3180 2251 PD
+24 W
+3207 2248 PD
+24 W
+3237 2244 PD
+24 W
+3264 2243 PD
+24 W
+3294 2241 PD
+24 W
+3323 2238 PD
+24 W
+3352 2232 PD
+24 W
+3381 2228 PD
+24 W
+3409 2223 PD
+24 W
+3435 2217 PD
+24 W
+3464 2211 PD
+24 W
+3492 2197 PD
+24 W
+3520 2182 PD
+24 W
+3540 2162 PD
+24 W
+3560 2144 PD
+24 W
+3582 2127 PD
+24 W
+3599 2144 PD
+24 W
+3610 2150 PD
+24 W
+3629 2161 PD
+24 W
+3658 2172 PD
+24 W
+3688 2184 PD
+24 W
+3714 2199 PD
+24 W
+3737 2219 PD
+24 W
+3754 2237 PD
+24 W
+3772 2256 PD
+24 W
+3798 2258 PD
+24 W
+3818 2276 PD
+24 W
+3835 2293 PD
+24 W
+3862 2308 PD
+24 W
+3889 2318 PD
+24 W
+3918 2332 PD
+24 W
+3944 2349 PD
+24 W
+3971 2367 PD
+24 W
+3998 2382 PD
+24 W
+4026 2399 PD
+24 W
+4056 2412 PD
+24 W
+4084 2426 PD
+24 W
+4113 2442 PD
+24 W
+4140 2460 PD
+24 W
+4162 2478 PD
+24 W
+4178 2496 PD
+24 W
+4198 2516 PD
+24 W
+4217 2533 PD
+24 W
+4244 2546 PD
+24 W
+4264 2564 PD
+24 W
+4275 2583 PD
+24 W
+4292 2601 PD
+24 W
+4318 2619 PD
+24 W
+4345 2633 PD
+24 W
+4373 2650 PD
+24 W
+4402 2659 PD
+24 W
+4425 2678 PD
+24 W
+4448 2695 PD
+24 W
+4476 2711 PD
+24 W
+4504 2727 PD
+24 W
+4532 2746 PD
+24 W
+4551 2764 PD
+24 W
+4577 2783 PD
+24 W
+4602 2802 PD
+24 W
+4624 2820 PD
+24 W
+4638 2838 PD
+24 W
+4652 2857 PD
+24 W
+4670 2876 PD
+24 W
+4693 2894 PD
+24 W
+4722 2912 PD
+24 W
+4749 2927 PD
+24 W
+4777 2945 PD
+24 W
+4793 2962 PD
+24 W
+4820 2972 PD
+24 W
+4837 2990 PD
+24 W
+4844 3008 PD
+24 W
+4873 3027 PD
+24 W
+4901 3041 PD
+24 W
+4929 3048 PD
+24 W
+4958 3055 PD
+24 W
+4986 3058 PD
+24 W
+5015 3071 PD
+24 W
+5033 3089 PD
+24 W
+5053 3107 PD
+24 W
+5082 3123 PD
+24 W
+5109 3142 PD
+24 W
+5137 3160 PD
+24 W
+5164 3173 PD
+24 W
+5185 3192 PD
+24 W
+5203 3210 PD
+24 W
+5219 3229 PD
+24 W
+5235 3248 PD
+24 W
+5251 3265 PD
+24 W
+5267 3285 PD
+24 W
+5278 3303 PD
+24 W
+5288 3321 PD
+24 W
+5303 3341 PD
+24 W
+5318 3362 PD
+24 W
+5334 3383 PD
+24 W
+5347 3404 PD
+24 W
+5359 3424 PD
+24 W
+5369 3445 PD
+24 W
+5379 3466 PD
+24 W
+5392 3486 PD
+24 W
+5407 3505 PD
+24 W
+5431 3526 PD
+24 W
+5447 3546 PD
+24 W
+5462 3565 PD
+24 W
+5479 3584 PD
+24 W
+5498 3602 PD
+24 W
+5522 3620 PD
+24 W
+5549 3638 PD
+24 W
+5575 3657 PD
+24 W
+5595 3676 PD
+24 W
+5616 3694 PD
+24 W
+5638 3712 PD
+24 W
+5660 3730 PD
+24 W
+5684 3751 PD
+24 W
+5707 3770 PD
+24 W
+5731 3788 PD
+24 W
+5758 3808 PD
+24 W
+5783 3826 PD
+24 W
+5805 3845 PD
+24 W
+5824 3864 PD
+24 W
+5839 3884 PD
+24 W
+5853 3902 PD
+24 W
+5863 3920 PD
+24 W
+5877 3938 PD
+24 W
+5898 3957 PD
+24 W
+5916 3976 PD
+24 W
+5934 3996 PD
+24 W
+5953 4015 PD
+24 W
+5967 4034 PD
+24 W
+5985 4054 PD
+24 W
+6001 4073 PD
+24 W
+6016 4092 PD
+24 W
+6033 4114 PD
+24 W
+6046 4131 PD
+24 W
+6060 4151 PD
+24 W
+6069 4169 PD
+24 W
+6067 4188 PD
+24 W
+6069 4206 PD
+24 W
+6074 4225 PD
+24 W
+6076 4246 PD
+24 W
+6084 4265 PD
+24 W
+6094 4283 PD
+24 W
+6106 4302 PD
+24 W
+6111 4320 PD
+24 W
+6114 4339 PD
+24 W
+6116 4358 PD
+24 W
+6121 4379 PD
+24 W
+6126 4399 PD
+24 W
+6129 4418 PD
+24 W
+6136 4437 PD
+24 W
+6145 4455 PD
+24 W
+6158 4474 PD
+24 W
+6174 4492 PD
+24 W
+6191 4510 PD
+24 W
+6208 4529 PD
+24 W
+6222 4548 PD
+24 W
+3578 4605 PD
+24 W
+3577 4605 PD
+24 W
+3568 4586 PD
+24 W
+3565 4567 PD
+24 W
+3559 4549 PD
+24 W
+3550 4531 PD
+24 W
+3536 4512 PD
+24 W
+3516 4492 PD
+24 W
+3493 4474 PD
+24 W
+3471 4456 PD
+24 W
+3443 4437 PD
+24 W
+3416 4418 PD
+24 W
+3390 4398 PD
+24 W
+3370 4379 PD
+24 W
+3359 4360 PD
+24 W
+3359 4341 PD
+24 W
+3361 4323 PD
+24 W
+3371 4303 PD
+24 W
+3368 4286 PD
+24 W
+3376 4267 PD
+24 W
+3403 4256 PD
+24 W
+3397 4237 PD
+24 W
+3380 4219 PD
+24 W
+3376 4202 PD
+24 W
+3403 4191 PD
+24 W
+3431 4183 PD
+24 W
+3460 4172 PD
+24 W
+3473 4155 PD
+24 W
+3461 4136 PD
+24 W
+3433 4119 PD
+24 W
+3407 4107 PD
+24 W
+3378 4089 PD
+24 W
+3356 4071 PD
+24 W
+3327 4067 PD
+24 W
+3315 4049 PD
+24 W
+3288 4034 PD
+24 W
+3288 4017 PD
+24 W
+3260 4001 PD
+24 W
+3257 3983 PD
+24 W
+3283 3969 PD
+24 W
+3298 3951 PD
+24 W
+3325 3944 PD
+24 W
+3342 3926 PD
+24 W
+3338 3909 PD
+24 W
+3310 3892 PD
+24 W
+3301 3874 PD
+24 W
+3284 3855 PD
+24 W
+3276 3838 PD
+24 W
+3270 3820 PD
+24 W
+3259 3802 PD
+24 W
+3234 3784 PD
+24 W
+3240 3765 PD
+24 W
+3220 3746 PD
+24 W
+3209 3728 PD
+24 W
+3205 3710 PD
+24 W
+3204 3692 PD
+24 W
+3205 3673 PD
+24 W
+3212 3653 PD
+24 W
+3219 3635 PD
+24 W
+3214 3617 PD
+24 W
+3206 3599 PD
+24 W
+3213 3581 PD
+24 W
+3226 3563 PD
+24 W
+3221 3544 PD
+24 W
+3209 3525 PD
+24 W
+3196 3507 PD
+24 W
+3182 3489 PD
+24 W
+3180 3471 PD
+24 W
+3169 3453 PD
+24 W
+3153 3434 PD
+24 W
+3148 3417 PD
+24 W
+3144 3399 PD
+24 W
+3131 3380 PD
+24 W
+3113 3361 PD
+24 W
+3101 3342 PD
+24 W
+3089 3324 PD
+24 W
+3069 3305 PD
+24 W
+3041 3286 PD
+24 W
+3028 3267 PD
+24 W
+3010 3249 PD
+24 W
+2983 3235 PD
+24 W
+2954 3226 PD
+24 W
+2926 3218 PD
+24 W
+2906 3200 PD
+24 W
+2885 3182 PD
+24 W
+2856 3169 PD
+24 W
+2829 3160 PD
+24 W
+2799 3152 PD
+24 W
+2769 3144 PD
+24 W
+2742 3131 PD
+24 W
+2720 3113 PD
+24 W
+2723 3095 PD
+24 W
+2731 3077 PD
+24 W
+2735 3058 PD
+24 W
+2733 3039 PD
+24 W
+2727 3020 PD
+24 W
+2716 3001 PD
+24 W
+2701 2983 PD
+24 W
+2688 2963 PD
+24 W
+2680 2944 PD
+24 W
+2670 2926 PD
+24 W
+2660 2907 PD
+24 W
+2650 2888 PD
+24 W
+2642 2868 PD
+24 W
+2632 2849 PD
+24 W
+2624 2831 PD
+24 W
+2611 2813 PD
+24 W
+2595 2796 PD
+24 W
+2576 2778 PD
+24 W
+2561 2759 PD
+24 W
+2548 2740 PD
+24 W
+2533 2721 PD
+24 W
+2520 2702 PD
+24 W
+2509 2683 PD
+24 W
+2498 2665 PD
+24 W
+2486 2646 PD
+24 W
+2476 2627 PD
+24 W
+2468 2609 PD
+24 W
+2459 2591 PD
+24 W
+2450 2577 PD
+24 W
+2440 2572 PD
+24 W
+2430 2553 PD
+24 W
+2423 2534 PD
+24 W
+2419 2516 PD
+24 W
+2417 2498 PD
+24 W
+2422 2480 PD
+24 W
+2429 2461 PD
+24 W
+2434 2442 PD
+24 W
+2439 2424 PD
+24 W
+2444 2406 PD
+24 W
+2450 2388 PD
+24 W
+2458 2369 PD
+24 W
+2469 2351 PD
+24 W
+2481 2332 PD
+24 W
+2494 2313 PD
+24 W
+2504 2295 PD
+24 W
+2515 2277 PD
+24 W
+2529 2259 PD
+24 W
+2550 2241 PD
+24 W
+2578 2225 PD
+24 W
+2605 2214 PD
+24 W
+2633 2204 PD
+24 W
+2662 2190 PD
+24 W
+2690 2176 PD
+24 W
+2720 2159 PD
+24 W
+2748 2143 PD
+24 W
+2775 2128 PD
+24 W
+2803 2114 PD
+24 W
+2831 2101 PD
+24 W
+2858 2089 PD
+24 W
+2886 2076 PD
+24 W
+2915 2062 PD
+24 W
+2946 2050 PD
+24 W
+2975 2039 PD
+24 W
+3001 2030 PD
+24 W
+3028 2024 PD
+24 W
+3057 2018 PD
+24 W
+3086 2016 PD
+24 W
+3114 2013 PD
+24 W
+3142 2009 PD
+24 W
+3170 2007 PD
+24 W
+3198 2006 PD
+24 W
+3229 2003 PD
+24 W
+3256 1999 PD
+24 W
+3285 1996 PD
+24 W
+3314 1990 PD
+24 W
+3342 1984 PD
+24 W
+3371 1975 PD
+24 W
+3399 1968 PD
+24 W
+3426 1958 PD
+24 W
+3453 1949 PD
+24 W
+3479 1935 PD
+24 W
+3503 1917 PD
+24 W
+3507 1914 PD
+24 W
+3531 1920 PD
+24 W
+3557 1939 PD
+24 W
+3568 1957 PD
+24 W
+3583 1975 PD
+24 W
+3602 1994 PD
+24 W
+3625 2011 PD
+24 W
+3648 2029 PD
+24 W
+3675 2043 PD
+24 W
+3702 2052 PD
+24 W
+3714 2072 PD
+24 W
+3721 2090 PD
+24 W
+3733 2108 PD
+24 W
+3751 2128 PD
+24 W
+3774 2147 PD
+24 W
+3801 2157 PD
+24 W
+3814 2175 PD
+24 W
+3834 2193 PD
+24 W
+3862 2194 PD
+24 W
+3890 2194 PD
+24 W
+3901 2212 PD
+24 W
+3918 2230 PD
+24 W
+3944 2248 PD
+24 W
+3954 2267 PD
+24 W
+3963 2286 PD
+24 W
+3988 2304 PD
+24 W
+4012 2322 PD
+24 W
+4039 2337 PD
+24 W
+4066 2353 PD
+24 W
+4095 2371 PD
+24 W
+4124 2383 PD
+24 W
+4153 2389 PD
+24 W
+4180 2393 PD
+24 W
+4208 2407 PD
+24 W
+4227 2425 PD
+24 W
+4253 2444 PD
+24 W
+4281 2458 PD
+24 W
+4308 2471 PD
+24 W
+4320 2489 PD
+24 W
+4336 2507 PD
+24 W
+4364 2523 PD
+24 W
+4387 2541 PD
+24 W
+4402 2559 PD
+24 W
+4417 2578 PD
+24 W
+4444 2593 PD
+24 W
+4472 2595 PD
+24 W
+4476 2614 PD
+24 W
+4493 2631 PD
+24 W
+4524 2637 PD
+24 W
+4552 2647 PD
+24 W
+4574 2665 PD
+24 W
+4584 2682 PD
+24 W
+4600 2702 PD
+24 W
+4618 2721 PD
+24 W
+4638 2740 PD
+24 W
+4663 2760 PD
+24 W
+4689 2780 PD
+24 W
+4710 2798 PD
+24 W
+4726 2816 PD
+24 W
+4742 2834 PD
+24 W
+4762 2854 PD
+24 W
+4779 2873 PD
+24 W
+4799 2891 PD
+24 W
+4822 2909 PD
+24 W
+4850 2927 PD
+24 W
+4878 2943 PD
+24 W
+4908 2958 PD
+24 W
+4937 2970 PD
+24 W
+4966 2984 PD
+24 W
+4993 2996 PD
+24 W
+5021 3003 PD
+24 W
+5049 3012 PD
+24 W
+5075 3023 PD
+24 W
+5103 3036 PD
+24 W
+5130 3053 PD
+24 W
+5155 3070 PD
+24 W
+5183 3088 PD
+24 W
+5210 3105 PD
+24 W
+5237 3123 PD
+24 W
+5261 3141 PD
+24 W
+5284 3159 PD
+24 W
+5306 3177 PD
+24 W
+5324 3196 PD
+24 W
+5334 3214 PD
+24 W
+5337 3233 PD
+24 W
+5337 3250 PD
+24 W
+5345 3269 PD
+24 W
+5354 3289 PD
+24 W
+5367 3309 PD
+24 W
+5381 3329 PD
+24 W
+5397 3348 PD
+24 W
+5408 3367 PD
+24 W
+5417 3385 PD
+24 W
+5429 3404 PD
+24 W
+5439 3422 PD
+24 W
+5451 3442 PD
+24 W
+5466 3463 PD
+24 W
+5480 3483 PD
+24 W
+5499 3502 PD
+24 W
+5517 3520 PD
+24 W
+5534 3538 PD
+24 W
+5547 3556 PD
+24 W
+5568 3576 PD
+24 W
+5586 3594 PD
+24 W
+5607 3612 PD
+24 W
+5634 3631 PD
+24 W
+5661 3648 PD
+24 W
+5688 3664 PD
+24 W
+5718 3683 PD
+24 W
+5745 3699 PD
+24 W
+5774 3714 PD
+24 W
+5802 3731 PD
+24 W
+5823 3749 PD
+24 W
+5838 3767 PD
+24 W
+5861 3786 PD
+24 W
+5883 3804 PD
+24 W
+5896 3823 PD
+24 W
+5908 3841 PD
+24 W
+5923 3859 PD
+24 W
+5939 3878 PD
+24 W
+5958 3897 PD
+24 W
+5981 3916 PD
+24 W
+6000 3933 PD
+24 W
+6017 3951 PD
+24 W
+6032 3970 PD
+24 W
+6041 3987 PD
+24 W
+6049 4006 PD
+24 W
+6057 4024 PD
+24 W
+6074 4043 PD
+24 W
+6093 4062 PD
+24 W
+6116 4080 PD
+24 W
+6111 4099 PD
+24 W
+6112 4119 PD
+24 W
+6115 4139 PD
+24 W
+6121 4157 PD
+24 W
+6132 4175 PD
+24 W
+6140 4192 PD
+24 W
+6147 4210 PD
+24 W
+6151 4229 PD
+24 W
+6160 4247 PD
+24 W
+6168 4265 PD
+24 W
+6170 4283 PD
+24 W
+6171 4301 PD
+24 W
+6172 4319 PD
+24 W
+6180 4337 PD
+24 W
+6188 4357 PD
+24 W
+6198 4375 PD
+24 W
+6208 4393 PD
+24 W
+6216 4411 PD
+24 W
+6219 4431 PD
+24 W
+6221 4449 PD
+24 W
+6229 4468 PD
+24 W
+3507 4607 PD
+24 W
+3499 4589 PD
+24 W
+3499 4571 PD
+24 W
+3490 4551 PD
+24 W
+3477 4532 PD
+24 W
+3449 4513 PD
+24 W
+3420 4501 PD
+24 W
+3392 4485 PD
+24 W
+3365 4470 PD
+24 W
+3339 4451 PD
+24 W
+3320 4432 PD
+24 W
+3304 4413 PD
+24 W
+3292 4395 PD
+24 W
+3288 4378 PD
+24 W
+3287 4359 PD
+24 W
+3270 4341 PD
+24 W
+3249 4324 PD
+24 W
+3237 4305 PD
+24 W
+3245 4287 PD
+24 W
+3252 4267 PD
+24 W
+3253 4249 PD
+24 W
+3244 4230 PD
+24 W
+3230 4211 PD
+24 W
+3207 4193 PD
+24 W
+3183 4174 PD
+24 W
+3181 4156 PD
+24 W
+3184 4138 PD
+24 W
+3212 4142 PD
+24 W
+3242 4147 PD
+24 W
+3270 4147 PD
+24 W
+3281 4128 PD
+24 W
+3272 4110 PD
+24 W
+3251 4091 PD
+24 W
+3231 4072 PD
+24 W
+3206 4054 PD
+24 W
+3198 4036 PD
+24 W
+3200 4019 PD
+24 W
+3172 4015 PD
+24 W
+3156 3996 PD
+24 W
+3163 3978 PD
+24 W
+3168 3959 PD
+24 W
+3192 3940 PD
+24 W
+3192 3922 PD
+24 W
+3182 3904 PD
+24 W
+3163 3885 PD
+24 W
+3145 3867 PD
+24 W
+3129 3848 PD
+24 W
+3109 3829 PD
+24 W
+3094 3810 PD
+24 W
+3078 3792 PD
+24 W
+3069 3774 PD
+24 W
+3068 3755 PD
+24 W
+3073 3737 PD
+24 W
+3082 3718 PD
+24 W
+3090 3698 PD
+24 W
+3094 3679 PD
+24 W
+3096 3660 PD
+24 W
+3096 3642 PD
+24 W
+3095 3623 PD
+24 W
+3094 3603 PD
+24 W
+3090 3583 PD
+24 W
+3087 3565 PD
+24 W
+3087 3545 PD
+24 W
+3084 3526 PD
+24 W
+3082 3508 PD
+24 W
+3076 3488 PD
+24 W
+3069 3468 PD
+24 W
+3064 3449 PD
+24 W
+3058 3430 PD
+24 W
+3050 3410 PD
+24 W
+3041 3392 PD
+24 W
+3031 3374 PD
+24 W
+3019 3354 PD
+24 W
+3005 3334 PD
+24 W
+2990 3315 PD
+24 W
+2969 3296 PD
+24 W
+2948 3276 PD
+24 W
+2928 3258 PD
+24 W
+2905 3239 PD
+24 W
+2878 3229 PD
+24 W
+2850 3222 PD
+24 W
+2822 3207 PD
+24 W
+2793 3193 PD
+24 W
+2763 3188 PD
+24 W
+2734 3190 PD
+24 W
+2705 3184 PD
+24 W
+2676 3170 PD
+24 W
+2647 3162 PD
+24 W
+2620 3159 PD
+24 W
+2606 3140 PD
+24 W
+2603 3122 PD
+24 W
+2598 3104 PD
+24 W
+2622 3086 PD
+24 W
+2650 3072 PD
+24 W
+2673 3054 PD
+24 W
+2665 3036 PD
+24 W
+2637 3018 PD
+24 W
+2618 2999 PD
+24 W
+2619 2980 PD
+24 W
+2625 2962 PD
+24 W
+2621 2944 PD
+24 W
+2612 2925 PD
+24 W
+2598 2906 PD
+24 W
+2588 2887 PD
+24 W
+2577 2869 PD
+24 W
+2564 2850 PD
+24 W
+2546 2831 PD
+24 W
+2527 2812 PD
+24 W
+2505 2794 PD
+24 W
+2488 2775 PD
+24 W
+2469 2756 PD
+24 W
+2457 2737 PD
+24 W
+2448 2719 PD
+24 W
+2434 2700 PD
+24 W
+2422 2682 PD
+24 W
+2410 2664 PD
+24 W
+2393 2645 PD
+24 W
+2376 2626 PD
+24 W
+2359 2607 PD
+24 W
+2339 2589 PD
+24 W
+2322 2570 PD
+24 W
+2307 2551 PD
+24 W
+2294 2533 PD
+24 W
+2288 2515 PD
+24 W
+2283 2494 PD
+24 W
+2279 2475 PD
+24 W
+2271 2458 PD
+24 W
+2260 2449 PD
+24 W
+2253 2439 PD
+24 W
+2243 2419 PD
+24 W
+2229 2400 PD
+24 W
+2214 2381 PD
+24 W
+2200 2362 PD
+24 W
+2190 2343 PD
+24 W
+2185 2326 PD
+24 W
+2185 2308 PD
+24 W
+2195 2290 PD
+24 W
+2216 2272 PD
+24 W
+2229 2253 PD
+24 W
+2238 2235 PD
+24 W
+2242 2216 PD
+24 W
+2244 2197 PD
+24 W
+2247 2179 PD
+24 W
+2249 2161 PD
+24 W
+2253 2142 PD
+24 W
+2257 2124 PD
+24 W
+2262 2106 PD
+24 W
+2270 2088 PD
+24 W
+2279 2070 PD
+24 W
+2292 2051 PD
+24 W
+2309 2032 PD
+24 W
+2326 2013 PD
+24 W
+2352 1995 PD
+24 W
+2380 1979 PD
+24 W
+2407 1967 PD
+24 W
+2437 1959 PD
+24 W
+2465 1949 PD
+24 W
+2491 1934 PD
+24 W
+2512 1914 PD
+24 W
+2534 1894 PD
+24 W
+2552 1876 PD
+24 W
+2577 1855 PD
+24 W
+2605 1838 PD
+24 W
+2634 1819 PD
+24 W
+2662 1802 PD
+24 W
+2689 1784 PD
+24 W
+2718 1766 PD
+24 W
+2748 1751 PD
+24 W
+2776 1739 PD
+24 W
+2804 1728 PD
+24 W
+2831 1720 PD
+24 W
+2860 1713 PD
+24 W
+2890 1706 PD
+24 W
+2917 1701 PD
+24 W
+2946 1696 PD
+24 W
+2977 1696 PD
+24 W
+3004 1697 PD
+24 W
+3032 1702 PD
+24 W
+3060 1707 PD
+24 W
+3087 1714 PD
+24 W
+3114 1722 PD
+24 W
+3143 1732 PD
+24 W
+3173 1736 PD
+24 W
+3202 1737 PD
+24 W
+3229 1735 PD
+24 W
+3256 1734 PD
+24 W
+3284 1732 PD
+24 W
+3312 1736 PD
+24 W
+3339 1739 PD
+24 W
+3365 1739 PD
+24 W
+3392 1725 PD
+24 W
+3419 1708 PD
+24 W
+3447 1694 PD
+24 W
+3474 1687 PD
+24 W
+3476 1688 PD
+24 W
+3490 1708 PD
+24 W
+3507 1726 PD
+24 W
+3530 1744 PD
+24 W
+3545 1763 PD
+24 W
+3564 1782 PD
+24 W
+3583 1800 PD
+24 W
+3610 1819 PD
+24 W
+3614 1839 PD
+24 W
+3615 1856 PD
+24 W
+3631 1875 PD
+24 W
+3655 1894 PD
+24 W
+3668 1912 PD
+24 W
+3678 1930 PD
+24 W
+3693 1951 PD
+24 W
+3715 1971 PD
+24 W
+3741 1988 PD
+24 W
+3768 1985 PD
+24 W
+3795 1985 PD
+24 W
+3825 2004 PD
+24 W
+3845 2022 PD
+24 W
+3847 2040 PD
+24 W
+3850 2058 PD
+24 W
+3865 2076 PD
+24 W
+3883 2095 PD
+24 W
+3900 2114 PD
+24 W
+3917 2131 PD
+24 W
+3933 2150 PD
+24 W
+3951 2169 PD
+24 W
+3980 2171 PD
+24 W
+3991 2192 PD
+24 W
+4000 2213 PD
+24 W
+4014 2232 PD
+24 W
+4032 2250 PD
+24 W
+4059 2267 PD
+24 W
+4088 2279 PD
+24 W
+4116 2286 PD
+24 W
+4147 2296 PD
+24 W
+4175 2307 PD
+24 W
+4205 2323 PD
+24 W
+4233 2337 PD
+24 W
+4263 2352 PD
+24 W
+4290 2370 PD
+24 W
+4316 2380 PD
+24 W
+4331 2399 PD
+24 W
+4351 2416 PD
+24 W
+4379 2429 PD
+24 W
+4406 2428 PD
+24 W
+4415 2446 PD
+24 W
+4442 2455 PD
+24 W
+4470 2458 PD
+24 W
+4499 2460 PD
+24 W
+4523 2478 PD
+24 W
+4536 2496 PD
+24 W
+4564 2505 PD
+24 W
+4581 2524 PD
+24 W
+4577 2543 PD
+24 W
+4574 2560 PD
+24 W
+4601 2573 PD
+24 W
+4616 2591 PD
+24 W
+4628 2610 PD
+24 W
+4635 2628 PD
+24 W
+4646 2647 PD
+24 W
+4664 2665 PD
+24 W
+4682 2682 PD
+24 W
+4699 2701 PD
+24 W
+4718 2720 PD
+24 W
+4741 2740 PD
+24 W
+4760 2758 PD
+24 W
+4781 2776 PD
+24 W
+4802 2794 PD
+24 W
+4818 2814 PD
+24 W
+4832 2833 PD
+24 W
+4848 2851 PD
+24 W
+4872 2871 PD
+24 W
+4900 2887 PD
+24 W
+4927 2905 PD
+24 W
+4955 2912 PD
+24 W
+4982 2919 PD
+24 W
+5009 2933 PD
+24 W
+5023 2951 PD
+24 W
+5051 2959 PD
+24 W
+5079 2964 PD
+24 W
+5108 2966 PD
+24 W
+5136 2970 PD
+24 W
+5164 2982 PD
+24 W
+5191 2996 PD
+24 W
+5212 3015 PD
+24 W
+5219 3033 PD
+24 W
+5234 3052 PD
+24 W
+5261 3070 PD
+24 W
+5291 3086 PD
+24 W
+5320 3103 PD
+24 W
+5347 3122 PD
+24 W
+5374 3135 PD
+24 W
+5377 3153 PD
+24 W
+5394 3171 PD
+24 W
+5415 3190 PD
+24 W
+5422 3208 PD
+24 W
+5435 3226 PD
+24 W
+5444 3245 PD
+24 W
+5454 3265 PD
+24 W
+5461 3284 PD
+24 W
+5466 3304 PD
+24 W
+5470 3323 PD
+24 W
+5478 3342 PD
+24 W
+5490 3361 PD
+24 W
+5502 3379 PD
+24 W
+5512 3398 PD
+24 W
+5522 3418 PD
+24 W
+5540 3435 PD
+24 W
+5557 3453 PD
+24 W
+5567 3472 PD
+24 W
+5580 3491 PD
+24 W
+5595 3510 PD
+24 W
+5611 3530 PD
+24 W
+5629 3549 PD
+24 W
+5652 3569 PD
+24 W
+5679 3587 PD
+24 W
+5706 3601 PD
+24 W
+5734 3614 PD
+24 W
+5763 3631 PD
+24 W
+5790 3648 PD
+24 W
+5820 3665 PD
+24 W
+5849 3680 PD
+24 W
+5877 3698 PD
+24 W
+5902 3717 PD
+24 W
+5926 3735 PD
+24 W
+5950 3755 PD
+24 W
+5975 3773 PD
+24 W
+5993 3791 PD
+24 W
+6006 3809 PD
+24 W
+6015 3827 PD
+24 W
+6024 3846 PD
+24 W
+6032 3866 PD
+24 W
+6042 3885 PD
+24 W
+6055 3903 PD
+24 W
+6067 3921 PD
+24 W
+6094 3934 PD
+24 W
+6112 3953 PD
+24 W
+6118 3972 PD
+24 W
+6118 3991 PD
+24 W
+6125 4009 PD
+24 W
+6148 4026 PD
+24 W
+6177 4037 PD
+24 W
+6187 4056 PD
+24 W
+6185 4075 PD
+24 W
+6186 4095 PD
+24 W
+6187 4112 PD
+24 W
+6187 4130 PD
+24 W
+6193 4150 PD
+24 W
+6221 4162 PD
+24 W
+6229 4182 PD
+24 W
+6229 4199 PD
+24 W
+6240 4217 PD
+24 W
+3439 4606 PD
+24 W
+3438 4606 PD
+24 W
+3418 4588 PD
+24 W
+3399 4570 PD
+24 W
+3373 4552 PD
+24 W
+3343 4541 PD
+24 W
+3316 4534 PD
+24 W
+3289 4526 PD
+24 W
+3262 4518 PD
+24 W
+3233 4507 PD
+24 W
+3205 4494 PD
+24 W
+3177 4480 PD
+24 W
+3149 4468 PD
+24 W
+3122 4454 PD
+24 W
+3096 4435 PD
+24 W
+3073 4416 PD
+24 W
+3044 4404 PD
+24 W
+3015 4397 PD
+24 W
+2993 4378 PD
+24 W
+2977 4359 PD
+24 W
+2963 4340 PD
+24 W
+2940 4322 PD
+24 W
+2911 4305 PD
+24 W
+2883 4292 PD
+24 W
+2855 4287 PD
+24 W
+2827 4281 PD
+24 W
+2799 4270 PD
+24 W
+2771 4258 PD
+24 W
+2743 4243 PD
+24 W
+2731 4224 PD
+24 W
+2725 4207 PD
+24 W
+2720 4188 PD
+24 W
+2692 4176 PD
+24 W
+2664 4169 PD
+24 W
+2648 4149 PD
+24 W
+2644 4131 PD
+24 W
+2648 4113 PD
+24 W
+2662 4095 PD
+24 W
+2690 4084 PD
+24 W
+2718 4077 PD
+24 W
+2747 4071 PD
+24 W
+2776 4063 PD
+24 W
+2806 4055 PD
+24 W
+2836 4046 PD
+24 W
+2863 4037 PD
+24 W
+2892 4029 PD
+24 W
+2922 4019 PD
+24 W
+2950 4008 PD
+24 W
+2978 3999 PD
+24 W
+3008 3990 PD
+24 W
+3035 3982 PD
+24 W
+3061 3964 PD
+24 W
+3062 3946 PD
+24 W
+3055 3928 PD
+24 W
+3056 3910 PD
+24 W
+3028 3913 PD
+24 W
+3010 3894 PD
+24 W
+2983 3890 PD
+24 W
+2989 3872 PD
+24 W
+2965 3854 PD
+24 W
+2955 3833 PD
+24 W
+2950 3815 PD
+24 W
+2947 3797 PD
+24 W
+2945 3779 PD
+24 W
+2949 3761 PD
+24 W
+2960 3742 PD
+24 W
+2976 3725 PD
+24 W
+2998 3707 PD
+24 W
+3016 3689 PD
+24 W
+3025 3671 PD
+24 W
+3027 3652 PD
+24 W
+3023 3634 PD
+24 W
+3014 3615 PD
+24 W
+3000 3596 PD
+24 W
+2985 3578 PD
+24 W
+2974 3560 PD
+24 W
+2964 3541 PD
+24 W
+2953 3522 PD
+24 W
+2946 3503 PD
+24 W
+2938 3484 PD
+24 W
+2929 3466 PD
+24 W
+2922 3447 PD
+24 W
+2914 3428 PD
+24 W
+2903 3408 PD
+24 W
+2889 3391 PD
+24 W
+2863 3371 PD
+24 W
+2839 3353 PD
+24 W
+2819 3336 PD
+24 W
+2806 3316 PD
+24 W
+2805 3298 PD
+24 W
+2795 3280 PD
+24 W
+2773 3262 PD
+24 W
+2751 3244 PD
+24 W
+2724 3232 PD
+24 W
+2696 3226 PD
+24 W
+2670 3215 PD
+24 W
+2642 3199 PD
+24 W
+2614 3201 PD
+24 W
+2584 3197 PD
+24 W
+2556 3192 PD
+24 W
+2529 3187 PD
+24 W
+2513 3168 PD
+24 W
+2511 3149 PD
+24 W
+2510 3131 PD
+24 W
+2523 3112 PD
+24 W
+2550 3095 PD
+24 W
+2569 3077 PD
+24 W
+2578 3059 PD
+24 W
+2549 3045 PD
+24 W
+2526 3027 PD
+24 W
+2537 3010 PD
+24 W
+2549 2992 PD
+24 W
+2551 2972 PD
+24 W
+2547 2954 PD
+24 W
+2537 2936 PD
+24 W
+2526 2918 PD
+24 W
+2513 2900 PD
+24 W
+2499 2881 PD
+24 W
+2483 2862 PD
+24 W
+2462 2843 PD
+24 W
+2444 2824 PD
+24 W
+2424 2806 PD
+24 W
+2405 2788 PD
+24 W
+2384 2770 PD
+24 W
+2362 2751 PD
+24 W
+2343 2732 PD
+24 W
+2326 2713 PD
+24 W
+2308 2694 PD
+24 W
+2293 2676 PD
+24 W
+2279 2657 PD
+24 W
+2264 2639 PD
+24 W
+2251 2620 PD
+24 W
+2242 2602 PD
+24 W
+2229 2584 PD
+24 W
+2212 2567 PD
+24 W
+2195 2549 PD
+24 W
+2177 2531 PD
+24 W
+2159 2513 PD
+24 W
+2141 2494 PD
+24 W
+2126 2476 PD
+24 W
+2115 2458 PD
+24 W
+2102 2440 PD
+24 W
+2086 2422 PD
+24 W
+2071 2405 PD
+24 W
+2058 2387 PD
+24 W
+2044 2369 PD
+24 W
+2034 2351 PD
+24 W
+2024 2331 PD
+24 W
+2016 2312 PD
+24 W
+2012 2293 PD
+24 W
+2012 2275 PD
+24 W
+2013 2272 PD
+24 W
+2010 2257 PD
+24 W
+2007 2239 PD
+24 W
+2008 2221 PD
+24 W
+2011 2203 PD
+24 W
+2017 2184 PD
+24 W
+2021 2166 PD
+24 W
+2036 2147 PD
+24 W
+2055 2128 PD
+24 W
+2059 2110 PD
+24 W
+2052 2092 PD
+24 W
+2041 2074 PD
+24 W
+2030 2055 PD
+24 W
+2019 2035 PD
+24 W
+2013 2017 PD
+24 W
+2017 1999 PD
+24 W
+2024 1980 PD
+24 W
+2033 1961 PD
+24 W
+2043 1942 PD
+24 W
+2052 1925 PD
+24 W
+2059 1907 PD
+24 W
+2063 1889 PD
+24 W
+2066 1871 PD
+24 W
+2067 1853 PD
+24 W
+2070 1834 PD
+24 W
+2074 1815 PD
+24 W
+2080 1796 PD
+24 W
+2086 1777 PD
+24 W
+2094 1758 PD
+24 W
+2102 1739 PD
+24 W
+2114 1721 PD
+24 W
+2141 1705 PD
+24 W
+2168 1693 PD
+24 W
+2195 1684 PD
+24 W
+2224 1674 PD
+24 W
+2253 1662 PD
+24 W
+2283 1649 PD
+24 W
+2310 1636 PD
+24 W
+2339 1622 PD
+24 W
+2369 1607 PD
+24 W
+2396 1593 PD
+24 W
+2425 1580 PD
+24 W
+2453 1569 PD
+24 W
+2484 1558 PD
+24 W
+2513 1548 PD
+24 W
+2544 1539 PD
+24 W
+2575 1530 PD
+24 W
+2602 1520 PD
+24 W
+2632 1512 PD
+24 W
+2658 1505 PD
+24 W
+2686 1499 PD
+24 W
+2717 1494 PD
+24 W
+2747 1488 PD
+24 W
+2773 1483 PD
+24 W
+2800 1477 PD
+24 W
+2830 1470 PD
+24 W
+2856 1467 PD
+24 W
+2885 1463 PD
+24 W
+2914 1461 PD
+24 W
+2944 1461 PD
+24 W
+2973 1459 PD
+24 W
+3000 1459 PD
+24 W
+3030 1459 PD
+24 W
+3057 1461 PD
+24 W
+3086 1466 PD
+24 W
+3113 1470 PD
+24 W
+3140 1476 PD
+24 W
+3169 1482 PD
+24 W
+3197 1488 PD
+24 W
+3224 1492 PD
+24 W
+3252 1496 PD
+24 W
+3283 1501 PD
+24 W
+3312 1504 PD
+24 W
+3342 1504 PD
+24 W
+3371 1508 PD
+24 W
+3399 1510 PD
+24 W
+3430 1511 PD
+24 W
+3439 1513 PD
+24 W
+3457 1525 PD
+24 W
+3484 1536 PD
+24 W
+3504 1554 PD
+24 W
+3520 1572 PD
+24 W
+3536 1591 PD
+24 W
+3550 1609 PD
+24 W
+3566 1627 PD
+24 W
+3580 1644 PD
+24 W
+3592 1663 PD
+24 W
+3601 1681 PD
+24 W
+3628 1691 PD
+24 W
+3643 1711 PD
+24 W
+3659 1730 PD
+24 W
+3686 1742 PD
+24 W
+3712 1760 PD
+24 W
+3727 1778 PD
+24 W
+3750 1797 PD
+24 W
+3779 1806 PD
+24 W
+3806 1821 PD
+24 W
+3831 1839 PD
+24 W
+3848 1857 PD
+24 W
+3868 1875 PD
+24 W
+3883 1895 PD
+24 W
+3911 1908 PD
+24 W
+3928 1926 PD
+24 W
+3933 1945 PD
+24 W
+3946 1964 PD
+24 W
+3958 1983 PD
+24 W
+3970 2001 PD
+24 W
+3978 2018 PD
+24 W
+3987 2038 PD
+24 W
+3993 2058 PD
+24 W
+4002 2076 PD
+24 W
+4012 2095 PD
+24 W
+4023 2113 PD
+24 W
+4036 2131 PD
+24 W
+4063 2143 PD
+24 W
+4080 2162 PD
+24 W
+4089 2181 PD
+24 W
+4111 2198 PD
+24 W
+4134 2216 PD
+24 W
+4161 2214 PD
+24 W
+4175 2232 PD
+24 W
+4196 2251 PD
+24 W
+4224 2264 PD
+24 W
+4253 2279 PD
+24 W
+4282 2288 PD
+24 W
+4312 2299 PD
+24 W
+4339 2308 PD
+24 W
+4366 2317 PD
+24 W
+4394 2328 PD
+24 W
+4422 2345 PD
+24 W
+4451 2359 PD
+24 W
+4478 2369 PD
+24 W
+4495 2387 PD
+24 W
+4506 2405 PD
+24 W
+4533 2420 PD
+24 W
+4561 2424 PD
+24 W
+4587 2435 PD
+24 W
+4616 2426 PD
+24 W
+4642 2423 PD
+24 W
+4669 2441 PD
+24 W
+4670 2459 PD
+24 W
+4670 2478 PD
+24 W
+4668 2496 PD
+24 W
+4663 2513 PD
+24 W
+4690 2528 PD
+24 W
+4691 2546 PD
+24 W
+4718 2563 PD
+24 W
+4715 2582 PD
+24 W
+4720 2599 PD
+24 W
+4738 2617 PD
+24 W
+4756 2635 PD
+24 W
+4756 2652 PD
+24 W
+4769 2671 PD
+24 W
+4785 2688 PD
+24 W
+4806 2706 PD
+24 W
+4822 2724 PD
+24 W
+4839 2743 PD
+24 W
+4854 2762 PD
+24 W
+4869 2780 PD
+24 W
+4891 2798 PD
+24 W
+4894 2817 PD
+24 W
+4916 2835 PD
+24 W
+4938 2854 PD
+24 W
+4966 2862 PD
+24 W
+4994 2865 PD
+24 W
+5023 2874 PD
+24 W
+5046 2892 PD
+24 W
+5056 2912 PD
+24 W
+5084 2922 PD
+24 W
+5112 2927 PD
+24 W
+5139 2928 PD
+24 W
+5165 2922 PD
+24 W
+5192 2925 PD
+24 W
+5220 2942 PD
+24 W
+5243 2960 PD
+24 W
+5272 2979 PD
+24 W
+5292 2999 PD
+24 W
+5305 3018 PD
+24 W
+5323 3035 PD
+24 W
+5343 3053 PD
+24 W
+5370 3070 PD
+24 W
+5398 3079 PD
+24 W
+5424 3084 PD
+24 W
+5438 3102 PD
+24 W
+5453 3121 PD
+24 W
+5473 3139 PD
+24 W
+5483 3157 PD
+24 W
+5487 3176 PD
+24 W
+5493 3194 PD
+24 W
+5506 3214 PD
+24 W
+5519 3233 PD
+24 W
+5526 3250 PD
+24 W
+5530 3269 PD
+24 W
+5532 3288 PD
+24 W
+5535 3306 PD
+24 W
+5539 3325 PD
+24 W
+5550 3345 PD
+24 W
+5562 3363 PD
+24 W
+5571 3382 PD
+24 W
+5579 3400 PD
+24 W
+5587 3420 PD
+24 W
+5598 3439 PD
+24 W
+5614 3459 PD
+24 W
+5632 3479 PD
+24 W
+5649 3497 PD
+24 W
+5675 3516 PD
+24 W
+5697 3535 PD
+24 W
+5716 3553 PD
+24 W
+5736 3572 PD
+24 W
+5766 3588 PD
+24 W
+5794 3601 PD
+24 W
+5823 3614 PD
+24 W
+5850 3631 PD
+24 W
+5879 3643 PD
+24 W
+5908 3652 PD
+24 W
+5938 3667 PD
+24 W
+5968 3686 PD
+24 W
+5996 3705 PD
+24 W
+6017 3722 PD
+24 W
+6037 3741 PD
+24 W
+6051 3759 PD
+24 W
+6068 3778 PD
+24 W
+6082 3796 PD
+24 W
+6106 3815 PD
+24 W
+6112 3833 PD
+24 W
+6112 3852 PD
+24 W
+6115 3869 PD
+24 W
+6132 3888 PD
+24 W
+6161 3904 PD
+24 W
+6182 3922 PD
+24 W
+6181 3941 PD
+24 W
+6184 3960 PD
+24 W
+6193 3978 PD
+24 W
+6220 3996 PD
+24 W
+6246 4011 PD
+24 W
+3348 4608 PD
+24 W
+3348 4607 PD
+24 W
+3320 4600 PD
+24 W
+3291 4591 PD
+24 W
+3264 4582 PD
+24 W
+3236 4572 PD
+24 W
+3208 4562 PD
+24 W
+3180 4552 PD
+24 W
+3152 4541 PD
+24 W
+3125 4526 PD
+24 W
+3097 4512 PD
+24 W
+3069 4499 PD
+24 W
+3042 4484 PD
+24 W
+3016 4466 PD
+24 W
+2994 4447 PD
+24 W
+2972 4429 PD
+24 W
+2945 4411 PD
+24 W
+2918 4398 PD
+24 W
+2890 4388 PD
+24 W
+2863 4380 PD
+24 W
+2836 4373 PD
+24 W
+2807 4366 PD
+24 W
+2779 4357 PD
+24 W
+2750 4348 PD
+24 W
+2724 4338 PD
+24 W
+2696 4330 PD
+24 W
+2668 4318 PD
+24 W
+2641 4306 PD
+24 W
+2614 4292 PD
+24 W
+2587 4275 PD
+24 W
+2564 4257 PD
+24 W
+2543 4239 PD
+24 W
+2524 4220 PD
+24 W
+2508 4203 PD
+24 W
+2498 4184 PD
+24 W
+2492 4166 PD
+24 W
+2486 4147 PD
+24 W
+2482 4128 PD
+24 W
+2483 4110 PD
+24 W
+2483 4092 PD
+24 W
+2484 4074 PD
+24 W
+2487 4056 PD
+24 W
+2492 4038 PD
+24 W
+2511 4020 PD
+24 W
+2538 4005 PD
+24 W
+2565 3999 PD
+24 W
+2592 3993 PD
+24 W
+2619 3988 PD
+24 W
+2648 3982 PD
+24 W
+2641 3964 PD
+24 W
+2653 3945 PD
+24 W
+2680 3933 PD
+24 W
+2708 3920 PD
+24 W
+2735 3911 PD
+24 W
+2763 3899 PD
+24 W
+2789 3881 PD
+24 W
+2799 3863 PD
+24 W
+2805 3846 PD
+24 W
+2815 3828 PD
+24 W
+2825 3810 PD
+24 W
+2832 3791 PD
+24 W
+2840 3772 PD
+24 W
+2849 3754 PD
+24 W
+2864 3735 PD
+24 W
+2883 3716 PD
+24 W
+2900 3698 PD
+24 W
+2910 3680 PD
+24 W
+2917 3663 PD
+24 W
+2917 3645 PD
+24 W
+2911 3627 PD
+24 W
+2892 3608 PD
+24 W
+2875 3590 PD
+24 W
+2863 3572 PD
+24 W
+2854 3554 PD
+24 W
+2831 3536 PD
+24 W
+2821 3517 PD
+24 W
+2821 3498 PD
+24 W
+2807 3479 PD
+24 W
+2785 3462 PD
+24 W
+2767 3443 PD
+24 W
+2741 3425 PD
+24 W
+2717 3407 PD
+24 W
+2694 3388 PD
+24 W
+2675 3369 PD
+24 W
+2665 3350 PD
+24 W
+2661 3332 PD
+24 W
+2649 3314 PD
+24 W
+2624 3295 PD
+24 W
+2597 3282 PD
+24 W
+2570 3272 PD
+24 W
+2541 3260 PD
+24 W
+2512 3246 PD
+24 W
+2483 3232 PD
+24 W
+2457 3214 PD
+24 W
+2452 3196 PD
+24 W
+2454 3177 PD
+24 W
+2455 3159 PD
+24 W
+2451 3141 PD
+24 W
+2446 3122 PD
+24 W
+2452 3104 PD
+24 W
+2469 3086 PD
+24 W
+2482 3068 PD
+24 W
+2454 3052 PD
+24 W
+2434 3034 PD
+24 W
+2449 3016 PD
+24 W
+2473 2997 PD
+24 W
+2490 2979 PD
+24 W
+2491 2959 PD
+24 W
+2484 2941 PD
+24 W
+2473 2921 PD
+24 W
+2458 2904 PD
+24 W
+2441 2885 PD
+24 W
+2422 2867 PD
+24 W
+2397 2849 PD
+24 W
+2377 2829 PD
+24 W
+2361 2811 PD
+24 W
+2343 2792 PD
+24 W
+2317 2773 PD
+24 W
+2290 2758 PD
+24 W
+2264 2739 PD
+24 W
+2246 2720 PD
+24 W
+2227 2702 PD
+24 W
+2206 2682 PD
+24 W
+2193 2665 PD
+24 W
+2187 2647 PD
+24 W
+2178 2629 PD
+24 W
+2166 2610 PD
+24 W
+2151 2593 PD
+24 W
+2130 2574 PD
+24 W
+2107 2556 PD
+24 W
+2085 2537 PD
+24 W
+2069 2518 PD
+24 W
+2060 2501 PD
+24 W
+2046 2482 PD
+24 W
+2033 2464 PD
+24 W
+2020 2446 PD
+24 W
+2007 2428 PD
+24 W
+1989 2410 PD
+24 W
+1971 2392 PD
+24 W
+1957 2374 PD
+24 W
+1948 2355 PD
+24 W
+1938 2336 PD
+24 W
+1927 2318 PD
+24 W
+1912 2300 PD
+24 W
+1897 2282 PD
+24 W
+1883 2264 PD
+24 W
+1865 2246 PD
+24 W
+1865 2247 PD
+24 W
+1852 2227 PD
+24 W
+1847 2209 PD
+24 W
+1856 2192 PD
+24 W
+1867 2174 PD
+24 W
+1877 2156 PD
+24 W
+1891 2147 PD
+24 W
+1899 2136 PD
+24 W
+1915 2118 PD
+24 W
+1926 2101 PD
+24 W
+1924 2082 PD
+24 W
+1913 2064 PD
+24 W
+1903 2045 PD
+24 W
+1889 2027 PD
+24 W
+1875 2009 PD
+24 W
+1854 1990 PD
+24 W
+1839 1980 PD
+24 W
+1836 1972 PD
+24 W
+1822 1954 PD
+24 W
+1815 1937 PD
+24 W
+1812 1919 PD
+24 W
+1814 1900 PD
+24 W
+1822 1882 PD
+24 W
+1834 1863 PD
+24 W
+1839 1855 PD
+24 W
+1840 1845 PD
+24 W
+1855 1827 PD
+24 W
+1862 1809 PD
+24 W
+1851 1791 PD
+24 W
+1850 1775 PD
+24 W
+1849 1773 PD
+24 W
+1843 1754 PD
+24 W
+1838 1736 PD
+24 W
+1839 1719 PD
+24 W
+1840 1701 PD
+24 W
+1845 1682 PD
+24 W
+1853 1664 PD
+24 W
+1861 1647 PD
+24 W
+1867 1629 PD
+24 W
+1880 1611 PD
+24 W
+1901 1591 PD
+24 W
+1919 1572 PD
+24 W
+1923 1553 PD
+24 W
+1928 1535 PD
+24 W
+1930 1516 PD
+24 W
+1937 1498 PD
+24 W
+1948 1480 PD
+24 W
+1966 1461 PD
+24 W
+1991 1442 PD
+24 W
+2016 1424 PD
+24 W
+2040 1406 PD
+24 W
+2068 1386 PD
+24 W
+2095 1372 PD
+24 W
+2125 1356 PD
+24 W
+2153 1346 PD
+24 W
+2188 1337 PD
+24 W
+2216 1330 PD
+24 W
+2244 1323 PD
+24 W
+2271 1317 PD
+24 W
+2300 1317 PD
+24 W
+2328 1321 PD
+24 W
+2356 1327 PD
+24 W
+2386 1329 PD
+24 W
+2415 1326 PD
+24 W
+2443 1322 PD
+24 W
+2472 1321 PD
+24 W
+2502 1318 PD
+24 W
+2534 1314 PD
+24 W
+2562 1312 PD
+24 W
+2589 1308 PD
+24 W
+2619 1304 PD
+24 W
+2646 1300 PD
+24 W
+2677 1298 PD
+24 W
+2708 1297 PD
+24 W
+2738 1299 PD
+24 W
+2766 1300 PD
+24 W
+2794 1303 PD
+24 W
+2822 1305 PD
+24 W
+2852 1308 PD
+24 W
+2879 1306 PD
+24 W
+2908 1302 PD
+24 W
+2934 1298 PD
+24 W
+2961 1296 PD
+24 W
+2989 1296 PD
+24 W
+3018 1301 PD
+24 W
+3046 1307 PD
+24 W
+3073 1317 PD
+24 W
+3103 1325 PD
+24 W
+3132 1331 PD
+24 W
+3159 1338 PD
+24 W
+3188 1343 PD
+24 W
+3215 1345 PD
+24 W
+3242 1350 PD
+24 W
+3269 1352 PD
+24 W
+3298 1352 PD
+24 W
+3325 1345 PD
+24 W
+3353 1345 PD
+24 W
+3382 1349 PD
+24 W
+3410 1354 PD
+24 W
+3440 1360 PD
+24 W
+3468 1366 PD
+24 W
+3497 1370 PD
+24 W
+3525 1378 PD
+24 W
+3528 1381 PD
+24 W
+3532 1397 PD
+24 W
+3538 1415 PD
+24 W
+3541 1434 PD
+24 W
+3563 1452 PD
+24 W
+3563 1470 PD
+24 W
+3567 1487 PD
+24 W
+3594 1479 PD
+24 W
+3605 1497 PD
+24 W
+3617 1515 PD
+24 W
+3635 1534 PD
+24 W
+3662 1549 PD
+24 W
+3689 1563 PD
+24 W
+3716 1577 PD
+24 W
+3744 1586 PD
+24 W
+3771 1603 PD
+24 W
+3787 1622 PD
+24 W
+3782 1640 PD
+24 W
+3788 1659 PD
+24 W
+3815 1673 PD
+24 W
+3836 1692 PD
+24 W
+3859 1709 PD
+24 W
+3887 1722 PD
+24 W
+3916 1733 PD
+24 W
+3944 1739 PD
+24 W
+3967 1758 PD
+24 W
+3972 1777 PD
+24 W
+3977 1796 PD
+24 W
+4006 1812 PD
+24 W
+4034 1828 PD
+24 W
+4046 1846 PD
+24 W
+4071 1864 PD
+24 W
+4078 1882 PD
+24 W
+4078 1902 PD
+24 W
+4098 1919 PD
+24 W
+4118 1937 PD
+24 W
+4118 1955 PD
+24 W
+4109 1973 PD
+24 W
+4099 1992 PD
+24 W
+4090 2009 PD
+24 W
+4085 2027 PD
+24 W
+4084 2046 PD
+24 W
+4088 2065 PD
+24 W
+4100 2083 PD
+24 W
+4127 2098 PD
+24 W
+4154 2103 PD
+24 W
+4182 2090 PD
+24 W
+4207 2072 PD
+24 W
+4235 2053 PD
+24 W
+4262 2051 PD
+24 W
+4290 2057 PD
+24 W
+4318 2065 PD
+24 W
+4345 2070 PD
+24 W
+4372 2079 PD
+24 W
+4383 2097 PD
+24 W
+4377 2117 PD
+24 W
+4366 2136 PD
+24 W
+4341 2154 PD
+24 W
+4318 2173 PD
+24 W
+4312 2191 PD
+24 W
+4335 2208 PD
+24 W
+4365 2216 PD
+24 W
+4394 2220 PD
+24 W
+4421 2225 PD
+24 W
+4449 2228 PD
+24 W
+4476 2238 PD
+24 W
+4496 2255 PD
+24 W
+4526 2262 PD
+24 W
+4553 2261 PD
+24 W
+4580 2262 PD
+24 W
+4607 2280 PD
+24 W
+4613 2298 PD
+24 W
+4618 2317 PD
+24 W
+4617 2336 PD
+24 W
+4624 2354 PD
+24 W
+4652 2365 PD
+24 W
+4680 2361 PD
+24 W
+4708 2379 PD
+24 W
+4736 2385 PD
+24 W
+4747 2404 PD
+24 W
+4775 2408 PD
+24 W
+4778 2427 PD
+24 W
+4771 2445 PD
+24 W
+4761 2463 PD
+24 W
+4755 2482 PD
+24 W
+4782 2497 PD
+24 W
+4785 2515 PD
+24 W
+4786 2533 PD
+24 W
+4785 2552 PD
+24 W
+4807 2571 PD
+24 W
+4812 2590 PD
+24 W
+4822 2609 PD
+24 W
+4830 2628 PD
+24 W
+4847 2646 PD
+24 W
+4857 2664 PD
+24 W
+4870 2683 PD
+24 W
+4883 2701 PD
+24 W
+4897 2720 PD
+24 W
+4907 2738 PD
+24 W
+4931 2756 PD
+24 W
+4957 2775 PD
+24 W
+4972 2792 PD
+24 W
+4999 2803 PD
+24 W
+5026 2811 PD
+24 W
+5054 2816 PD
+24 W
+5082 2822 PD
+24 W
+5095 2841 PD
+24 W
+5112 2859 PD
+24 W
+5140 2866 PD
+24 W
+5170 2873 PD
+24 W
+5198 2876 PD
+24 W
+5227 2874 PD
+24 W
+5255 2881 PD
+24 W
+5275 2899 PD
+24 W
+5295 2917 PD
+24 W
+5305 2935 PD
+24 W
+5324 2952 PD
+24 W
+5352 2961 PD
+24 W
+5368 2980 PD
+24 W
+5382 2998 PD
+24 W
+5403 3017 PD
+24 W
+5432 3035 PD
+24 W
+5460 3050 PD
+24 W
+5487 3062 PD
+24 W
+5508 3081 PD
+24 W
+5526 3099 PD
+24 W
+5540 3117 PD
+24 W
+5551 3136 PD
+24 W
+5560 3156 PD
+24 W
+5569 3174 PD
+24 W
+5576 3194 PD
+24 W
+5582 3213 PD
+24 W
+5586 3233 PD
+24 W
+5591 3250 PD
+24 W
+5597 3270 PD
+24 W
+5603 3288 PD
+24 W
+5607 3307 PD
+24 W
+5612 3326 PD
+24 W
+5620 3345 PD
+24 W
+5629 3364 PD
+24 W
+5639 3383 PD
+24 W
+5647 3401 PD
+24 W
+5656 3420 PD
+24 W
+5667 3439 PD
+24 W
+5681 3458 PD
+24 W
+5699 3477 PD
+24 W
+5726 3496 PD
+24 W
+5756 3514 PD
+24 W
+5783 3528 PD
+24 W
+5814 3543 PD
+24 W
+5842 3554 PD
+24 W
+5870 3568 PD
+24 W
+5898 3583 PD
+24 W
+5926 3600 PD
+24 W
+5954 3610 PD
+24 W
+5982 3618 PD
+24 W
+6010 3629 PD
+24 W
+6029 3647 PD
+24 W
+6039 3666 PD
+24 W
+6067 3683 PD
+24 W
+6077 3701 PD
+24 W
+6105 3716 PD
+24 W
+6119 3734 PD
+24 W
+6119 3753 PD
+24 W
+6130 3771 PD
+24 W
+6158 3784 PD
+24 W
+6171 3802 PD
+24 W
+6169 3820 PD
+24 W
+6176 3839 PD
+24 W
+6187 3857 PD
+24 W
+6215 3866 PD
+24 W
+6235 3884 PD
+24 W
+6239 3902 PD
+24 W
+6246 3921 PD
+24 W
+6251 3939 PD
+24 W
+3172 4605 PD
+24 W
+3151 4587 PD
+24 W
+3122 4569 PD
+24 W
+3096 4555 PD
+24 W
+3069 4541 PD
+24 W
+3041 4528 PD
+24 W
+3014 4514 PD
+24 W
+2987 4501 PD
+24 W
+2960 4484 PD
+24 W
+2957 4482 PD
+24 W
+2933 4470 PD
+24 W
+2906 4457 PD
+24 W
+2878 4456 PD
+24 W
+2850 4459 PD
+24 W
+2822 4463 PD
+24 W
+2795 4464 PD
+24 W
+2768 4466 PD
+24 W
+2739 4463 PD
+24 W
+2712 4454 PD
+24 W
+2685 4441 PD
+24 W
+2657 4423 PD
+24 W
+2628 4407 PD
+24 W
+2601 4390 PD
+24 W
+2575 4372 PD
+24 W
+2549 4354 PD
+24 W
+2521 4335 PD
+24 W
+2494 4316 PD
+24 W
+2471 4298 PD
+24 W
+2454 4280 PD
+24 W
+2437 4261 PD
+24 W
+2419 4243 PD
+24 W
+2404 4225 PD
+24 W
+2386 4207 PD
+24 W
+2369 4188 PD
+24 W
+2355 4170 PD
+24 W
+2346 4152 PD
+24 W
+2339 4133 PD
+24 W
+2332 4116 PD
+24 W
+2329 4096 PD
+24 W
+2340 4077 PD
+24 W
+2349 4070 PD
+24 W
+2352 4059 PD
+24 W
+2362 4039 PD
+24 W
+2376 4021 PD
+24 W
+2387 4003 PD
+24 W
+2395 3985 PD
+24 W
+2397 3965 PD
+24 W
+2412 3947 PD
+24 W
+2439 3930 PD
+24 W
+2456 3911 PD
+24 W
+2476 3893 PD
+24 W
+2500 3873 PD
+24 W
+2524 3855 PD
+24 W
+2553 3836 PD
+24 W
+2582 3822 PD
+24 W
+2612 3811 PD
+24 W
+2641 3800 PD
+24 W
+2671 3790 PD
+24 W
+2697 3779 PD
+24 W
+2724 3768 PD
+24 W
+2753 3754 PD
+24 W
+2780 3741 PD
+24 W
+2807 3721 PD
+24 W
+2820 3702 PD
+24 W
+2824 3684 PD
+24 W
+2818 3665 PD
+24 W
+2802 3647 PD
+24 W
+2778 3628 PD
+24 W
+2763 3611 PD
+24 W
+2757 3592 PD
+24 W
+2759 3574 PD
+24 W
+2751 3555 PD
+24 W
+2728 3537 PD
+24 W
+2715 3518 PD
+24 W
+2702 3499 PD
+24 W
+2685 3481 PD
+24 W
+2665 3464 PD
+24 W
+2644 3445 PD
+24 W
+2620 3426 PD
+24 W
+2597 3407 PD
+24 W
+2569 3388 PD
+24 W
+2542 3374 PD
+24 W
+2515 3355 PD
+24 W
+2493 3337 PD
+24 W
+2473 3318 PD
+24 W
+2455 3298 PD
+24 W
+2437 3279 PD
+24 W
+2415 3261 PD
+24 W
+2387 3246 PD
+24 W
+2371 3228 PD
+24 W
+2360 3208 PD
+24 W
+2343 3190 PD
+24 W
+2331 3171 PD
+24 W
+2326 3152 PD
+24 W
+2324 3134 PD
+24 W
+2328 3115 PD
+24 W
+2350 3097 PD
+24 W
+2346 3079 PD
+24 W
+2362 3060 PD
+24 W
+2362 3042 PD
+24 W
+2348 3024 PD
+24 W
+2354 3006 PD
+24 W
+2377 2987 PD
+24 W
+2393 2970 PD
+24 W
+2420 2959 PD
+24 W
+2427 2941 PD
+24 W
+2413 2924 PD
+24 W
+2384 2918 PD
+24 W
+2355 2914 PD
+24 W
+2344 2896 PD
+24 W
+2337 2878 PD
+24 W
+2314 2860 PD
+24 W
+2305 2843 PD
+24 W
+2293 2824 PD
+24 W
+2275 2806 PD
+24 W
+2247 2787 PD
+24 W
+2223 2769 PD
+24 W
+2202 2751 PD
+24 W
+2180 2733 PD
+24 W
+2160 2715 PD
+24 W
+2134 2697 PD
+24 W
+2113 2678 PD
+24 W
+2108 2660 PD
+24 W
+2105 2642 PD
+24 W
+2096 2624 PD
+24 W
+2069 2608 PD
+24 W
+2042 2595 PD
+24 W
+2013 2584 PD
+24 W
+1990 2567 PD
+24 W
+1981 2548 PD
+24 W
+1978 2529 PD
+24 W
+1973 2511 PD
+24 W
+1963 2494 PD
+24 W
+1946 2476 PD
+24 W
+1931 2458 PD
+24 W
+1921 2439 PD
+24 W
+1910 2421 PD
+24 W
+1900 2403 PD
+24 W
+1888 2385 PD
+24 W
+1873 2368 PD
+24 W
+1855 2350 PD
+24 W
+1834 2332 PD
+24 W
+1816 2313 PD
+24 W
+1798 2295 PD
+24 W
+1776 2277 PD
+24 W
+1755 2259 PD
+24 W
+1741 2241 PD
+24 W
+1731 2223 PD
+24 W
+1730 2205 PD
+24 W
+1735 2187 PD
+24 W
+1741 2169 PD
+24 W
+1750 2152 PD
+24 W
+1761 2134 PD
+24 W
+1776 2116 PD
+24 W
+1788 2098 PD
+24 W
+1797 2081 PD
+24 W
+1801 2063 PD
+24 W
+1800 2044 PD
+24 W
+1783 2026 PD
+24 W
+1755 2012 PD
+24 W
+1732 1999 PD
+24 W
+1726 1998 PD
+24 W
+1700 1982 PD
+24 W
+1689 1964 PD
+24 W
+1680 1945 PD
+24 W
+1676 1927 PD
+24 W
+1676 1909 PD
+24 W
+1675 1906 PD
+24 W
+1678 1891 PD
+24 W
+1685 1873 PD
+24 W
+1690 1855 PD
+24 W
+1693 1837 PD
+24 W
+1692 1819 PD
+24 W
+1697 1801 PD
+24 W
+1714 1783 PD
+24 W
+1714 1765 PD
+24 W
+1694 1747 PD
+24 W
+1688 1742 PD
+24 W
+1686 1729 PD
+24 W
+1680 1711 PD
+24 W
+1673 1693 PD
+24 W
+1663 1675 PD
+24 W
+1659 1656 PD
+24 W
+1658 1637 PD
+24 W
+1658 1619 PD
+24 W
+1664 1600 PD
+24 W
+1681 1582 PD
+24 W
+1701 1563 PD
+24 W
+1714 1546 PD
+24 W
+1728 1527 PD
+24 W
+1739 1509 PD
+24 W
+1750 1490 PD
+24 W
+1748 1482 PD
+24 W
+1755 1472 PD
+24 W
+1755 1454 PD
+24 W
+1759 1435 PD
+24 W
+1769 1417 PD
+24 W
+1781 1399 PD
+24 W
+1794 1381 PD
+24 W
+1797 1378 PD
+24 W
+1803 1360 PD
+24 W
+1804 1341 PD
+24 W
+1823 1324 PD
+24 W
+1847 1306 PD
+24 W
+1862 1288 PD
+24 W
+1881 1270 PD
+24 W
+1902 1251 PD
+24 W
+1928 1232 PD
+24 W
+1955 1213 PD
+24 W
+1978 1195 PD
+24 W
+2003 1177 PD
+24 W
+2030 1164 PD
+24 W
+2057 1155 PD
+24 W
+2084 1145 PD
+24 W
+2111 1137 PD
+24 W
+2142 1129 PD
+24 W
+2173 1124 PD
+24 W
+2202 1119 PD
+24 W
+2231 1116 PD
+24 W
+2261 1111 PD
+24 W
+2288 1106 PD
+24 W
+2317 1101 PD
+24 W
+2346 1098 PD
+24 W
+2375 1094 PD
+24 W
+2402 1091 PD
+24 W
+2429 1092 PD
+24 W
+2456 1107 PD
+24 W
+2477 1125 PD
+24 W
+2504 1131 PD
+24 W
+2530 1130 PD
+24 W
+2560 1128 PD
+24 W
+2588 1128 PD
+24 W
+2616 1135 PD
+24 W
+2643 1143 PD
+24 W
+2670 1147 PD
+24 W
+2698 1145 PD
+24 W
+2726 1144 PD
+24 W
+2754 1142 PD
+24 W
+2784 1140 PD
+24 W
+2811 1138 PD
+24 W
+2838 1137 PD
+24 W
+2868 1139 PD
+24 W
+2896 1143 PD
+24 W
+2925 1151 PD
+24 W
+2954 1155 PD
+24 W
+2983 1152 PD
+24 W
+3012 1145 PD
+24 W
+3038 1145 PD
+24 W
+3065 1151 PD
+24 W
+3094 1158 PD
+24 W
+3121 1166 PD
+24 W
+3149 1173 PD
+24 W
+3176 1181 PD
+24 W
+3204 1190 PD
+24 W
+3231 1197 PD
+24 W
+3259 1203 PD
+24 W
+3287 1208 PD
+24 W
+3316 1214 PD
+24 W
+3344 1221 PD
+24 W
+3373 1224 PD
+24 W
+3401 1228 PD
+24 W
+3429 1234 PD
+24 W
+3456 1238 PD
+24 W
+3484 1243 PD
+24 W
+3511 1249 PD
+24 W
+3539 1254 PD
+24 W
+3568 1260 PD
+24 W
+3596 1266 PD
+24 W
+3619 1281 PD
+24 W
+3607 1288 PD
+24 W
+3628 1306 PD
+24 W
+3634 1326 PD
+24 W
+3640 1344 PD
+24 W
+3667 1362 PD
+24 W
+3680 1381 PD
+24 W
+3704 1399 PD
+24 W
+3724 1418 PD
+24 W
+3745 1436 PD
+24 W
+3767 1454 PD
+24 W
+3791 1472 PD
+24 W
+3815 1489 PD
+24 W
+3843 1496 PD
+24 W
+3871 1504 PD
+24 W
+3894 1523 PD
+24 W
+3921 1535 PD
+24 W
+3948 1540 PD
+24 W
+3975 1552 PD
+24 W
+3999 1571 PD
+24 W
+4014 1589 PD
+24 W
+4033 1607 PD
+24 W
+4057 1625 PD
+24 W
+4071 1643 PD
+24 W
+4089 1661 PD
+24 W
+4106 1680 PD
+24 W
+4122 1699 PD
+24 W
+4139 1718 PD
+24 W
+4155 1735 PD
+24 W
+4168 1754 PD
+24 W
+4181 1772 PD
+24 W
+4194 1791 PD
+24 W
+4202 1810 PD
+24 W
+4205 1828 PD
+24 W
+4208 1846 PD
+24 W
+4214 1866 PD
+24 W
+4220 1885 PD
+24 W
+4232 1904 PD
+24 W
+4260 1917 PD
+24 W
+4287 1926 PD
+24 W
+4314 1940 PD
+24 W
+4333 1959 PD
+24 W
+4362 1977 PD
+24 W
+4389 1982 PD
+24 W
+4417 1985 PD
+24 W
+4445 1988 PD
+24 W
+4475 1993 PD
+24 W
+4503 2007 PD
+24 W
+4512 2025 PD
+24 W
+4518 2044 PD
+24 W
+4517 2064 PD
+24 W
+4513 2083 PD
+24 W
+4519 2101 PD
+24 W
+4535 2119 PD
+24 W
+4555 2138 PD
+24 W
+4581 2150 PD
+24 W
+4610 2155 PD
+24 W
+4634 2173 PD
+24 W
+4643 2191 PD
+24 W
+4657 2208 PD
+24 W
+4684 2221 PD
+24 W
+4713 2234 PD
+24 W
+4733 2253 PD
+24 W
+4737 2271 PD
+24 W
+4764 2280 PD
+24 W
+4779 2299 PD
+24 W
+4801 2317 PD
+24 W
+4812 2336 PD
+24 W
+4839 2348 PD
+24 W
+4866 2352 PD
+24 W
+4892 2354 PD
+24 W
+4919 2371 PD
+24 W
+4918 2391 PD
+24 W
+4927 2409 PD
+24 W
+4947 2427 PD
+24 W
+4976 2437 PD
+24 W
+5004 2447 PD
+24 W
+5027 2465 PD
+24 W
+5039 2484 PD
+24 W
+5049 2502 PD
+24 W
+5046 2520 PD
+24 W
+5032 2538 PD
+24 W
+5011 2558 PD
+24 W
+4987 2576 PD
+24 W
+4968 2595 PD
+24 W
+4953 2613 PD
+24 W
+4981 2626 PD
+24 W
+5008 2620 PD
+24 W
+5037 2606 PD
+24 W
+5065 2591 PD
+24 W
+5093 2584 PD
+24 W
+5120 2577 PD
+24 W
+5148 2574 PD
+24 W
+5159 2573 PD
+24 W
+5175 2575 PD
+24 W
+5202 2591 PD
+24 W
+5219 2610 PD
+24 W
+5232 2628 PD
+24 W
+5240 2646 PD
+24 W
+5242 2650 PD
+24 W
+5232 2666 PD
+24 W
+5223 2685 PD
+24 W
+5212 2705 PD
+24 W
+5203 2723 PD
+24 W
+5198 2741 PD
+24 W
+5193 2759 PD
+24 W
+5189 2777 PD
+24 W
+5193 2795 PD
+24 W
+5219 2807 PD
+24 W
+5247 2814 PD
+24 W
+5274 2819 PD
+24 W
+5302 2828 PD
+24 W
+5318 2847 PD
+24 W
+5335 2866 PD
+24 W
+5353 2885 PD
+24 W
+5375 2903 PD
+24 W
+5399 2921 PD
+24 W
+5427 2938 PD
+24 W
+5446 2958 PD
+24 W
+5465 2977 PD
+24 W
+5483 2996 PD
+24 W
+5507 3015 PD
+24 W
+5536 3032 PD
+24 W
+5565 3050 PD
+24 W
+5588 3069 PD
+24 W
+5604 3088 PD
+24 W
+5616 3106 PD
+24 W
+5620 3124 PD
+24 W
+5623 3142 PD
+24 W
+5629 3159 PD
+24 W
+5636 3178 PD
+24 W
+5643 3197 PD
+24 W
+5654 3216 PD
+24 W
+5665 3235 PD
+24 W
+5675 3254 PD
+24 W
+5683 3272 PD
+24 W
+5688 3291 PD
+24 W
+5694 3309 PD
+24 W
+5702 3327 PD
+24 W
+5710 3346 PD
+24 W
+5717 3363 PD
+24 W
+5724 3383 PD
+24 W
+5736 3403 PD
+24 W
+5748 3421 PD
+24 W
+5763 3439 PD
+24 W
+5786 3458 PD
+24 W
+5813 3471 PD
+24 W
+5841 3482 PD
+24 W
+5868 3501 PD
+24 W
+5893 3520 PD
+24 W
+5922 3531 PD
+24 W
+5949 3541 PD
+24 W
+5977 3550 PD
+24 W
+6005 3558 PD
+24 W
+6032 3570 PD
+24 W
+6061 3586 PD
+24 W
+6082 3604 PD
+24 W
+6094 3622 PD
+24 W
+6106 3641 PD
+24 W
+6133 3658 PD
+24 W
+6148 3676 PD
+24 W
+6176 3685 PD
+24 W
+6191 3703 PD
+24 W
+6190 3722 PD
+24 W
+6192 3741 PD
+24 W
+6220 3756 PD
+24 W
+3017 4609 PD
+24 W
+3016 4609 PD
+24 W
+2990 4596 PD
+24 W
+2962 4583 PD
+24 W
+2935 4574 PD
+24 W
+2908 4571 PD
+24 W
+2879 4566 PD
+24 W
+2852 4561 PD
+24 W
+2825 4556 PD
+24 W
+2799 4551 PD
+24 W
+2770 4546 PD
+24 W
+2743 4539 PD
+24 W
+2714 4532 PD
+24 W
+2685 4519 PD
+24 W
+2656 4503 PD
+24 W
+2628 4486 PD
+24 W
+2601 4470 PD
+24 W
+2574 4453 PD
+24 W
+2547 4437 PD
+24 W
+2522 4421 PD
+24 W
+2519 4421 PD
+24 W
+2491 4405 PD
+24 W
+2464 4390 PD
+24 W
+2435 4379 PD
+24 W
+2408 4361 PD
+24 W
+2389 4343 PD
+24 W
+2369 4324 PD
+24 W
+2345 4306 PD
+24 W
+2322 4287 PD
+24 W
+2305 4268 PD
+24 W
+2291 4250 PD
+24 W
+2279 4232 PD
+24 W
+2267 4215 PD
+24 W
+2248 4196 PD
+24 W
+2228 4177 PD
+24 W
+2204 4158 PD
+24 W
+2190 4139 PD
+24 W
+2179 4121 PD
+24 W
+2169 4103 PD
+24 W
+2159 4085 PD
+24 W
+2150 4067 PD
+24 W
+2145 4049 PD
+24 W
+2143 4031 PD
+24 W
+2146 4017 PD
+24 W
+2145 4013 PD
+24 W
+2143 3994 PD
+24 W
+2153 3975 PD
+24 W
+2172 3957 PD
+24 W
+2199 3941 PD
+24 W
+2226 3926 PD
+24 W
+2256 3908 PD
+24 W
+2285 3889 PD
+24 W
+2314 3873 PD
+24 W
+2344 3860 PD
+24 W
+2373 3847 PD
+24 W
+2400 3836 PD
+24 W
+2430 3823 PD
+24 W
+2458 3813 PD
+24 W
+2489 3796 PD
+24 W
+2516 3781 PD
+24 W
+2546 3768 PD
+24 W
+2575 3755 PD
+24 W
+2602 3744 PD
+24 W
+2629 3734 PD
+24 W
+2656 3724 PD
+24 W
+2684 3713 PD
+24 W
+2711 3701 PD
+24 W
+2714 3683 PD
+24 W
+2699 3664 PD
+24 W
+2670 3648 PD
+24 W
+2641 3629 PD
+24 W
+2624 3611 PD
+24 W
+2611 3591 PD
+24 W
+2601 3570 PD
+24 W
+2598 3550 PD
+24 W
+2599 3532 PD
+24 W
+2601 3511 PD
+24 W
+2595 3491 PD
+24 W
+2583 3472 PD
+24 W
+2563 3453 PD
+24 W
+2537 3435 PD
+24 W
+2510 3420 PD
+24 W
+2481 3407 PD
+24 W
+2452 3390 PD
+24 W
+2430 3371 PD
+24 W
+2409 3353 PD
+24 W
+2389 3336 PD
+24 W
+2369 3317 PD
+24 W
+2349 3297 PD
+24 W
+2329 3277 PD
+24 W
+2306 3258 PD
+24 W
+2285 3239 PD
+24 W
+2269 3220 PD
+24 W
+2253 3201 PD
+24 W
+2238 3183 PD
+24 W
+2224 3164 PD
+24 W
+2210 3144 PD
+24 W
+2196 3126 PD
+24 W
+2201 3105 PD
+24 W
+2210 3087 PD
+24 W
+2229 3069 PD
+24 W
+2249 3051 PD
+24 W
+2239 3033 PD
+24 W
+2225 3015 PD
+24 W
+2221 2996 PD
+24 W
+2225 2978 PD
+24 W
+2240 2959 PD
+24 W
+2262 2942 PD
+24 W
+2273 2922 PD
+24 W
+2262 2905 PD
+24 W
+2247 2885 PD
+24 W
+2235 2867 PD
+24 W
+2222 2848 PD
+24 W
+2206 2830 PD
+24 W
+2178 2812 PD
+24 W
+2151 2794 PD
+24 W
+2132 2776 PD
+24 W
+2111 2758 PD
+24 W
+2082 2742 PD
+24 W
+2064 2723 PD
+24 W
+2054 2704 PD
+24 W
+2047 2686 PD
+24 W
+2033 2668 PD
+24 W
+2006 2654 PD
+24 W
+1978 2640 PD
+24 W
+1950 2631 PD
+24 W
+1934 2627 PD
+24 W
+1922 2614 PD
+24 W
+1895 2603 PD
+24 W
+1876 2586 PD
+24 W
+1872 2567 PD
+24 W
+1872 2557 PD
+24 W
+1872 2550 PD
+24 W
+1865 2532 PD
+24 W
+1851 2514 PD
+24 W
+1847 2496 PD
+24 W
+1854 2478 PD
+24 W
+1858 2459 PD
+24 W
+1855 2442 PD
+24 W
+1845 2423 PD
+24 W
+1830 2405 PD
+24 W
+1815 2387 PD
+24 W
+1794 2369 PD
+24 W
+1768 2351 PD
+24 W
+1740 2332 PD
+24 W
+1717 2314 PD
+24 W
+1695 2296 PD
+24 W
+1676 2278 PD
+24 W
+1657 2260 PD
+24 W
+1640 2247 PD
+24 W
+1634 2241 PD
+24 W
+1614 2223 PD
+24 W
+1611 2204 PD
+24 W
+1613 2186 PD
+24 W
+1612 2168 PD
+24 W
+1607 2150 PD
+24 W
+1604 2133 PD
+24 W
+1601 2114 PD
+24 W
+1603 2095 PD
+24 W
+1608 2076 PD
+24 W
+1611 2061 PD
+24 W
+1611 2059 PD
+24 W
+1602 2041 PD
+24 W
+1589 2023 PD
+24 W
+1578 2005 PD
+24 W
+1577 2003 PD
+24 W
+1568 1988 PD
+24 W
+1558 1969 PD
+24 W
+1549 1950 PD
+24 W
+1540 1931 PD
+24 W
+1538 1913 PD
+24 W
+1538 1895 PD
+24 W
+1541 1876 PD
+24 W
+1543 1858 PD
+24 W
+1543 1839 PD
+24 W
+1541 1821 PD
+24 W
+1530 1803 PD
+24 W
+1513 1784 PD
+24 W
+1502 1765 PD
+24 W
+1493 1746 PD
+24 W
+1495 1727 PD
+24 W
+1500 1709 PD
+24 W
+1503 1691 PD
+24 W
+1504 1674 PD
+24 W
+1497 1655 PD
+24 W
+1492 1635 PD
+24 W
+1487 1617 PD
+24 W
+1485 1599 PD
+24 W
+1491 1580 PD
+24 W
+1506 1563 PD
+24 W
+1534 1547 PD
+24 W
+1562 1533 PD
+24 W
+1586 1515 PD
+24 W
+1603 1497 PD
+24 W
+1624 1479 PD
+24 W
+1635 1461 PD
+24 W
+1634 1461 PD
+24 W
+1647 1443 PD
+24 W
+1668 1425 PD
+24 W
+1665 1407 PD
+24 W
+1661 1389 PD
+24 W
+1662 1371 PD
+24 W
+1664 1352 PD
+24 W
+1664 1334 PD
+24 W
+1663 1316 PD
+24 W
+1667 1299 PD
+24 W
+1676 1281 PD
+24 W
+1681 1275 PD
+24 W
+1688 1262 PD
+24 W
+1701 1245 PD
+24 W
+1722 1226 PD
+24 W
+1740 1208 PD
+24 W
+1758 1189 PD
+24 W
+1773 1171 PD
+24 W
+1792 1153 PD
+24 W
+1809 1136 PD
+24 W
+1828 1117 PD
+24 W
+1852 1100 PD
+24 W
+1879 1088 PD
+24 W
+1906 1080 PD
+24 W
+1933 1070 PD
+24 W
+1960 1061 PD
+24 W
+1989 1049 PD
+24 W
+2018 1037 PD
+24 W
+2048 1022 PD
+24 W
+2074 1008 PD
+24 W
+2103 995 PD
+24 W
+2130 987 PD
+24 W
+2158 982 PD
+24 W
+2185 977 PD
+24 W
+2214 970 PD
+24 W
+2242 962 PD
+24 W
+2272 954 PD
+24 W
+2302 945 PD
+24 W
+2330 942 PD
+24 W
+2358 937 PD
+24 W
+2386 934 PD
+24 W
+2414 932 PD
+24 W
+2442 935 PD
+24 W
+2470 938 PD
+24 W
+2499 938 PD
+24 W
+2526 939 PD
+24 W
+2554 939 PD
+24 W
+2582 943 PD
+24 W
+2610 950 PD
+24 W
+2638 955 PD
+24 W
+2666 959 PD
+24 W
+2695 960 PD
+24 W
+2723 959 PD
+24 W
+2753 959 PD
+24 W
+2782 959 PD
+24 W
+2811 960 PD
+24 W
+2839 962 PD
+24 W
+2867 962 PD
+24 W
+2894 963 PD
+24 W
+2921 964 PD
+24 W
+2951 966 PD
+24 W
+2978 972 PD
+24 W
+3007 980 PD
+24 W
+3035 983 PD
+24 W
+3064 988 PD
+24 W
+3093 995 PD
+24 W
+3122 1003 PD
+24 W
+3152 1011 PD
+24 W
+3183 1020 PD
+24 W
+3210 1030 PD
+24 W
+3239 1038 PD
+24 W
+3269 1048 PD
+24 W
+3297 1056 PD
+24 W
+3325 1063 PD
+24 W
+3352 1070 PD
+24 W
+3380 1077 PD
+24 W
+3409 1086 PD
+24 W
+3438 1102 PD
+24 W
+3466 1115 PD
+24 W
+3496 1126 PD
+24 W
+3526 1137 PD
+24 W
+3556 1144 PD
+24 W
+3583 1149 PD
+24 W
+3611 1157 PD
+24 W
+3638 1163 PD
+24 W
+3665 1169 PD
+24 W
+3693 1176 PD
+24 W
+3720 1182 PD
+24 W
+3748 1188 PD
+24 W
+3759 1198 PD
+24 W
+3776 1206 PD
+24 W
+3804 1222 PD
+24 W
+3816 1240 PD
+24 W
+3831 1259 PD
+24 W
+3848 1277 PD
+24 W
+3866 1295 PD
+24 W
+3895 1312 PD
+24 W
+3924 1330 PD
+24 W
+3951 1344 PD
+24 W
+3963 1362 PD
+24 W
+3989 1372 PD
+24 W
+4018 1389 PD
+24 W
+4047 1392 PD
+24 W
+4075 1391 PD
+24 W
+4102 1394 PD
+24 W
+4131 1397 PD
+24 W
+4158 1405 PD
+24 W
+4177 1423 PD
+24 W
+4191 1442 PD
+24 W
+4205 1461 PD
+24 W
+4207 1481 PD
+24 W
+4201 1499 PD
+24 W
+4198 1517 PD
+24 W
+4207 1535 PD
+24 W
+4223 1553 PD
+24 W
+4233 1572 PD
+24 W
+4247 1590 PD
+24 W
+4258 1609 PD
+24 W
+4258 1628 PD
+24 W
+4258 1645 PD
+24 W
+4261 1664 PD
+24 W
+4270 1683 PD
+24 W
+4278 1701 PD
+24 W
+4282 1720 PD
+24 W
+4284 1738 PD
+24 W
+4292 1755 PD
+24 W
+4301 1775 PD
+24 W
+4301 1793 PD
+24 W
+4304 1811 PD
+24 W
+4307 1829 PD
+24 W
+4330 1846 PD
+24 W
+4357 1858 PD
+24 W
+4380 1876 PD
+24 W
+4391 1894 PD
+24 W
+4413 1912 PD
+24 W
+4440 1915 PD
+24 W
+4467 1909 PD
+24 W
+4494 1909 PD
+24 W
+4522 1910 PD
+24 W
+4549 1922 PD
+24 W
+4577 1940 PD
+24 W
+4591 1958 PD
+24 W
+4600 1977 PD
+24 W
+4608 1995 PD
+24 W
+4616 2014 PD
+24 W
+4621 2033 PD
+24 W
+4623 2051 PD
+24 W
+4627 2070 PD
+24 W
+4635 2089 PD
+24 W
+4648 2107 PD
+24 W
+4662 2125 PD
+24 W
+4674 2143 PD
+24 W
+4689 2161 PD
+24 W
+4717 2173 PD
+24 W
+4745 2180 PD
+24 W
+4772 2183 PD
+24 W
+4800 2187 PD
+24 W
+4827 2204 PD
+24 W
+4851 2222 PD
+24 W
+4877 2228 PD
+24 W
+4905 2239 PD
+24 W
+4932 2255 PD
+24 W
+4961 2265 PD
+24 W
+4990 2278 PD
+24 W
+5014 2296 PD
+24 W
+5027 2314 PD
+24 W
+5040 2332 PD
+24 W
+5056 2350 PD
+24 W
+5075 2369 PD
+24 W
+5099 2386 PD
+24 W
+5125 2404 PD
+24 W
+5146 2422 PD
+24 W
+5174 2430 PD
+24 W
+5202 2433 PD
+24 W
+5229 2439 PD
+24 W
+5256 2456 PD
+24 W
+5242 2470 PD
+24 W
+5248 2474 PD
+24 W
+5271 2493 PD
+24 W
+5283 2513 PD
+24 W
+5299 2531 PD
+24 W
+5316 2550 PD
+24 W
+5326 2558 PD
+24 W
+5329 2568 PD
+24 W
+5329 2586 PD
+24 W
+5320 2605 PD
+24 W
+5316 2624 PD
+24 W
+5312 2643 PD
+24 W
+5303 2662 PD
+24 W
+5301 2680 PD
+24 W
+5300 2699 PD
+24 W
+5302 2717 PD
+24 W
+5307 2735 PD
+24 W
+5315 2754 PD
+24 W
+5325 2774 PD
+24 W
+5341 2794 PD
+24 W
+5363 2812 PD
+24 W
+5386 2831 PD
+24 W
+5413 2848 PD
+24 W
+5436 2866 PD
+24 W
+5456 2885 PD
+24 W
+5469 2903 PD
+24 W
+5481 2920 PD
+24 W
+5493 2938 PD
+24 W
+5514 2956 PD
+24 W
+5543 2965 PD
+24 W
+5570 2977 PD
+24 W
+5593 2995 PD
+24 W
+5615 3014 PD
+24 W
+5633 3034 PD
+24 W
+5645 3053 PD
+24 W
+5655 3071 PD
+24 W
+5663 3090 PD
+24 W
+5679 3109 PD
+24 W
+5691 3127 PD
+24 W
+5695 3147 PD
+24 W
+5697 3165 PD
+24 W
+5706 3185 PD
+24 W
+5716 3205 PD
+24 W
+5724 3223 PD
+24 W
+5731 3241 PD
+24 W
+5738 3259 PD
+24 W
+5755 3277 PD
+24 W
+5771 3295 PD
+24 W
+5774 3314 PD
+24 W
+5780 3334 PD
+24 W
+5790 3352 PD
+24 W
+5797 3369 PD
+24 W
+5807 3387 PD
+24 W
+5822 3407 PD
+24 W
+5848 3425 PD
+24 W
+5876 3441 PD
+24 W
+5905 3459 PD
+24 W
+5927 3478 PD
+24 W
+5955 3491 PD
+24 W
+5984 3494 PD
+24 W
+6014 3501 PD
+24 W
+6042 3511 PD
+24 W
+6069 3524 PD
+24 W
+6090 3542 PD
+24 W
+6113 3561 PD
+24 W
+6129 3579 PD
+24 W
+6157 3597 PD
+24 W
+6182 3615 PD
+24 W
+6187 3633 PD
+24 W
+6207 3650 PD
+24 W
+6236 3659 PD
+24 W
+2842 4615 PD
+24 W
+2841 4615 PD
+24 W
+2815 4606 PD
+24 W
+2786 4600 PD
+24 W
+2757 4598 PD
+24 W
+2730 4590 PD
+24 W
+2702 4581 PD
+24 W
+2674 4572 PD
+24 W
+2647 4562 PD
+24 W
+2620 4551 PD
+24 W
+2591 4535 PD
+24 W
+2565 4516 PD
+24 W
+2542 4497 PD
+24 W
+2515 4480 PD
+24 W
+2488 4466 PD
+24 W
+2459 4454 PD
+24 W
+2432 4442 PD
+24 W
+2405 4428 PD
+24 W
+2378 4412 PD
+24 W
+2354 4394 PD
+24 W
+2329 4376 PD
+24 W
+2301 4359 PD
+24 W
+2298 4357 PD
+24 W
+2272 4347 PD
+24 W
+2245 4328 PD
+24 W
+2221 4310 PD
+24 W
+2198 4292 PD
+24 W
+2174 4273 PD
+24 W
+2157 4255 PD
+24 W
+2141 4236 PD
+24 W
+2122 4218 PD
+24 W
+2105 4198 PD
+24 W
+2093 4180 PD
+24 W
+2078 4161 PD
+24 W
+2065 4142 PD
+24 W
+2056 4123 PD
+24 W
+2048 4105 PD
+24 W
+2042 4087 PD
+24 W
+2039 4069 PD
+24 W
+2037 4051 PD
+24 W
+2037 4033 PD
+24 W
+2037 4015 PD
+24 W
+2053 3997 PD
+24 W
+2081 3978 PD
+24 W
+2102 3959 PD
+24 W
+2120 3940 PD
+24 W
+2145 3921 PD
+24 W
+2172 3902 PD
+24 W
+2199 3888 PD
+24 W
+2226 3873 PD
+24 W
+2254 3859 PD
+24 W
+2282 3841 PD
+24 W
+2309 3824 PD
+24 W
+2339 3807 PD
+24 W
+2367 3793 PD
+24 W
+2394 3781 PD
+24 W
+2425 3767 PD
+24 W
+2454 3751 PD
+24 W
+2481 3736 PD
+24 W
+2508 3721 PD
+24 W
+2537 3706 PD
+24 W
+2565 3694 PD
+24 W
+2586 3676 PD
+24 W
+2580 3658 PD
+24 W
+2563 3640 PD
+24 W
+2544 3621 PD
+24 W
+2530 3602 PD
+24 W
+2526 3583 PD
+24 W
+2519 3565 PD
+24 W
+2508 3546 PD
+24 W
+2496 3526 PD
+24 W
+2479 3507 PD
+24 W
+2462 3490 PD
+24 W
+2445 3472 PD
+24 W
+2427 3452 PD
+24 W
+2405 3433 PD
+24 W
+2379 3416 PD
+24 W
+2354 3397 PD
+24 W
+2332 3378 PD
+24 W
+2314 3360 PD
+24 W
+2293 3341 PD
+24 W
+2278 3324 PD
+24 W
+2249 3305 PD
+24 W
+2224 3286 PD
+24 W
+2216 3268 PD
+24 W
+2210 3248 PD
+24 W
+2199 3230 PD
+24 W
+2178 3211 PD
+24 W
+2152 3192 PD
+24 W
+2131 3173 PD
+24 W
+2116 3154 PD
+24 W
+2103 3136 PD
+24 W
+2096 3117 PD
+24 W
+2092 3097 PD
+24 W
+2087 3080 PD
+24 W
+2084 3061 PD
+24 W
+2081 3041 PD
+24 W
+2079 3023 PD
+24 W
+2077 3004 PD
+24 W
+2074 2984 PD
+24 W
+2071 2965 PD
+24 W
+2066 2947 PD
+24 W
+2062 2928 PD
+24 W
+2066 2908 PD
+24 W
+2073 2890 PD
+24 W
+2092 2871 PD
+24 W
+2120 2854 PD
+24 W
+2143 2836 PD
+24 W
+2115 2820 PD
+24 W
+2094 2807 PD
+24 W
+2088 2807 PD
+24 W
+2060 2788 PD
+24 W
+2038 2770 PD
+24 W
+2013 2751 PD
+24 W
+1991 2734 PD
+24 W
+1964 2717 PD
+24 W
+1936 2712 PD
+24 W
+1908 2699 PD
+24 W
+1881 2691 PD
+24 W
+1854 2681 PD
+24 W
+1826 2670 PD
+24 W
+1798 2656 PD
+24 W
+1774 2638 PD
+24 W
+1761 2620 PD
+24 W
+1752 2602 PD
+24 W
+1751 2584 PD
+24 W
+1757 2567 PD
+24 W
+1761 2557 PD
+24 W
+1766 2548 PD
+24 W
+1769 2530 PD
+24 W
+1758 2512 PD
+24 W
+1776 2495 PD
+24 W
+1790 2477 PD
+24 W
+1788 2459 PD
+24 W
+1773 2440 PD
+24 W
+1761 2421 PD
+24 W
+1741 2403 PD
+24 W
+1714 2390 PD
+24 W
+1699 2372 PD
+24 W
+1688 2354 PD
+24 W
+1669 2337 PD
+24 W
+1642 2324 PD
+24 W
+1616 2306 PD
+24 W
+1589 2289 PD
+24 W
+1562 2274 PD
+24 W
+1545 2256 PD
+24 W
+1536 2238 PD
+24 W
+1535 2219 PD
+24 W
+1538 2200 PD
+24 W
+1538 2182 PD
+24 W
+1535 2163 PD
+24 W
+1524 2144 PD
+24 W
+1510 2127 PD
+24 W
+1508 2123 PD
+24 W
+1496 2108 PD
+24 W
+1486 2090 PD
+24 W
+1477 2072 PD
+24 W
+1470 2055 PD
+24 W
+1465 2036 PD
+24 W
+1460 2017 PD
+24 W
+1455 1999 PD
+24 W
+1445 1979 PD
+24 W
+1435 1961 PD
+24 W
+1425 1943 PD
+24 W
+1414 1925 PD
+24 W
+1403 1907 PD
+24 W
+1393 1888 PD
+24 W
+1382 1870 PD
+24 W
+1369 1850 PD
+24 W
+1356 1832 PD
+24 W
+1343 1812 PD
+24 W
+1337 1793 PD
+24 W
+1333 1775 PD
+24 W
+1329 1756 PD
+24 W
+1326 1737 PD
+24 W
+1322 1719 PD
+24 W
+1318 1699 PD
+24 W
+1316 1680 PD
+24 W
+1314 1662 PD
+24 W
+1311 1644 PD
+24 W
+1311 1623 PD
+24 W
+1311 1603 PD
+24 W
+1312 1584 PD
+24 W
+1311 1566 PD
+24 W
+1312 1548 PD
+24 W
+1319 1531 PD
+24 W
+1345 1518 PD
+24 W
+1373 1510 PD
+24 W
+1401 1508 PD
+24 W
+1428 1507 PD
+24 W
+1456 1505 PD
+24 W
+1470 1501 PD
+24 W
+1484 1494 PD
+24 W
+1512 1483 PD
+24 W
+1538 1464 PD
+24 W
+1553 1446 PD
+24 W
+1547 1428 PD
+24 W
+1531 1410 PD
+24 W
+1527 1392 PD
+24 W
+1526 1392 PD
+24 W
+1513 1373 PD
+24 W
+1503 1355 PD
+24 W
+1496 1337 PD
+24 W
+1493 1317 PD
+24 W
+1493 1299 PD
+24 W
+1498 1280 PD
+24 W
+1511 1261 PD
+24 W
+1531 1242 PD
+24 W
+1552 1223 PD
+24 W
+1571 1204 PD
+24 W
+1582 1186 PD
+24 W
+1585 1168 PD
+24 W
+1596 1150 PD
+24 W
+1624 1132 PD
+24 W
+1631 1114 PD
+24 W
+1639 1096 PD
+24 W
+1649 1078 PD
+24 W
+1660 1059 PD
+24 W
+1671 1039 PD
+24 W
+1680 1021 PD
+24 W
+1698 1003 PD
+24 W
+1722 985 PD
+24 W
+1750 971 PD
+24 W
+1776 959 PD
+24 W
+1804 947 PD
+24 W
+1830 934 PD
+24 W
+1857 923 PD
+24 W
+1884 911 PD
+24 W
+1912 900 PD
+24 W
+1938 891 PD
+24 W
+1966 885 PD
+24 W
+1994 879 PD
+24 W
+2024 872 PD
+24 W
+2052 866 PD
+24 W
+2080 861 PD
+24 W
+2107 856 PD
+24 W
+2134 850 PD
+24 W
+2162 845 PD
+24 W
+2189 841 PD
+24 W
+2216 832 PD
+24 W
+2247 820 PD
+24 W
+2276 809 PD
+24 W
+2305 796 PD
+24 W
+2333 782 PD
+24 W
+2360 768 PD
+24 W
+2389 755 PD
+24 W
+2417 747 PD
+24 W
+2446 744 PD
+24 W
+2474 744 PD
+24 W
+2502 747 PD
+24 W
+2530 752 PD
+24 W
+2559 753 PD
+24 W
+2588 752 PD
+24 W
+2617 749 PD
+24 W
+2644 747 PD
+24 W
+2674 749 PD
+24 W
+2703 754 PD
+24 W
+2731 759 PD
+24 W
+2759 765 PD
+24 W
+2788 768 PD
+24 W
+2818 772 PD
+24 W
+2849 774 PD
+24 W
+2879 774 PD
+24 W
+2907 773 PD
+24 W
+2936 774 PD
+24 W
+2964 778 PD
+24 W
+2993 784 PD
+24 W
+3022 793 PD
+24 W
+3050 806 PD
+24 W
+3079 817 PD
+24 W
+3107 827 PD
+24 W
+3135 837 PD
+24 W
+3164 848 PD
+24 W
+3191 856 PD
+24 W
+3219 862 PD
+24 W
+3245 865 PD
+24 W
+3273 867 PD
+24 W
+3301 871 PD
+24 W
+3327 878 PD
+24 W
+3355 896 PD
+24 W
+3381 909 PD
+24 W
+3410 922 PD
+24 W
+3438 937 PD
+24 W
+3467 951 PD
+24 W
+3497 963 PD
+24 W
+3525 975 PD
+24 W
+3554 987 PD
+24 W
+3583 1000 PD
+24 W
+3610 1013 PD
+24 W
+3639 1028 PD
+24 W
+3668 1042 PD
+24 W
+3698 1052 PD
+24 W
+3727 1057 PD
+24 W
+3756 1059 PD
+24 W
+3783 1064 PD
+24 W
+3810 1071 PD
+24 W
+3837 1078 PD
+24 W
+3864 1086 PD
+24 W
+3890 1096 PD
+24 W
+3891 1097 PD
+24 W
+3918 1107 PD
+24 W
+3946 1123 PD
+24 W
+3961 1142 PD
+24 W
+3976 1160 PD
+24 W
+3988 1178 PD
+24 W
+3999 1197 PD
+24 W
+4006 1215 PD
+24 W
+4013 1234 PD
+24 W
+4022 1251 PD
+24 W
+4041 1271 PD
+24 W
+4070 1279 PD
+24 W
+4096 1292 PD
+24 W
+4126 1303 PD
+24 W
+4156 1317 PD
+24 W
+4185 1330 PD
+24 W
+4212 1347 PD
+24 W
+4240 1364 PD
+24 W
+4267 1382 PD
+24 W
+4293 1399 PD
+24 W
+4311 1419 PD
+24 W
+4313 1438 PD
+24 W
+4312 1457 PD
+24 W
+4313 1475 PD
+24 W
+4313 1494 PD
+24 W
+4331 1512 PD
+24 W
+4351 1530 PD
+24 W
+4356 1548 PD
+24 W
+4358 1568 PD
+24 W
+4363 1588 PD
+24 W
+4366 1607 PD
+24 W
+4366 1625 PD
+24 W
+4365 1645 PD
+24 W
+4365 1663 PD
+24 W
+4366 1681 PD
+24 W
+4373 1699 PD
+24 W
+4401 1713 PD
+24 W
+4429 1714 PD
+24 W
+4458 1726 PD
+24 W
+4485 1744 PD
+24 W
+4510 1763 PD
+24 W
+4530 1781 PD
+24 W
+4548 1800 PD
+24 W
+4569 1817 PD
+24 W
+4596 1825 PD
+24 W
+4624 1832 PD
+24 W
+4652 1849 PD
+24 W
+4664 1866 PD
+24 W
+4668 1885 PD
+24 W
+4674 1904 PD
+24 W
+4678 1923 PD
+24 W
+4678 1940 PD
+24 W
+4680 1960 PD
+24 W
+4686 1978 PD
+24 W
+4692 1996 PD
+24 W
+4698 2016 PD
+24 W
+4702 2035 PD
+24 W
+4708 2054 PD
+24 W
+4716 2073 PD
+24 W
+4726 2090 PD
+24 W
+4736 2109 PD
+24 W
+4754 2127 PD
+24 W
+4782 2141 PD
+24 W
+4809 2144 PD
+24 W
+4838 2140 PD
+24 W
+4865 2138 PD
+24 W
+4892 2156 PD
+24 W
+4920 2157 PD
+24 W
+4947 2165 PD
+24 W
+4967 2183 PD
+24 W
+4994 2198 PD
+24 W
+5023 2212 PD
+24 W
+5050 2223 PD
+24 W
+5077 2231 PD
+24 W
+5105 2240 PD
+24 W
+5133 2250 PD
+24 W
+5154 2268 PD
+24 W
+5165 2286 PD
+24 W
+5181 2304 PD
+24 W
+5209 2314 PD
+24 W
+5237 2315 PD
+24 W
+5266 2320 PD
+24 W
+5292 2338 PD
+24 W
+5303 2356 PD
+24 W
+5317 2373 PD
+24 W
+5341 2392 PD
+24 W
+5368 2406 PD
+24 W
+5370 2411 PD
+24 W
+5381 2425 PD
+24 W
+5390 2445 PD
+24 W
+5398 2463 PD
+24 W
+5406 2482 PD
+24 W
+5401 2494 PD
+24 W
+5405 2502 PD
+24 W
+5407 2520 PD
+24 W
+5408 2538 PD
+24 W
+5406 2557 PD
+24 W
+5403 2575 PD
+24 W
+5398 2593 PD
+24 W
+5390 2610 PD
+24 W
+5384 2628 PD
+24 W
+5378 2647 PD
+24 W
+5377 2666 PD
+24 W
+5378 2685 PD
+24 W
+5379 2705 PD
+24 W
+5382 2723 PD
+24 W
+5386 2743 PD
+24 W
+5395 2761 PD
+24 W
+5408 2779 PD
+24 W
+5430 2797 PD
+24 W
+5453 2815 PD
+24 W
+5478 2833 PD
+24 W
+5505 2851 PD
+24 W
+5526 2869 PD
+24 W
+5536 2888 PD
+24 W
+5541 2906 PD
+24 W
+5558 2924 PD
+24 W
+5587 2937 PD
+24 W
+5614 2951 PD
+24 W
+5642 2966 PD
+24 W
+5668 2984 PD
+24 W
+5686 3002 PD
+24 W
+5697 3021 PD
+24 W
+5705 3040 PD
+24 W
+5716 3060 PD
+24 W
+5730 3079 PD
+24 W
+5753 3097 PD
+24 W
+5770 3115 PD
+24 W
+5777 3134 PD
+24 W
+5778 3153 PD
+24 W
+5782 3171 PD
+24 W
+5792 3190 PD
+24 W
+5809 3209 PD
+24 W
+5828 3228 PD
+24 W
+5838 3245 PD
+24 W
+5842 3264 PD
+24 W
+5849 3283 PD
+24 W
+5860 3301 PD
+24 W
+5878 3319 PD
+24 W
+5907 3335 PD
+24 W
+5936 3349 PD
+24 W
+5959 3367 PD
+24 W
+5961 3385 PD
+24 W
+5970 3404 PD
+24 W
+5990 3423 PD
+24 W
+6017 3430 PD
+24 W
+6047 3435 PD
+24 W
+6074 3452 PD
+24 W
+6103 3459 PD
+24 W
+6112 3477 PD
+24 W
+6131 3496 PD
+24 W
+6158 3509 PD
+24 W
+6183 3528 PD
+24 W
+6193 3548 PD
+24 W
+6205 3567 PD
+24 W
+6221 3586 PD
+24 W
+6240 3603 PD
+24 W
+2613 4611 PD
+24 W
+2612 4611 PD
+24 W
+2589 4593 PD
+24 W
+2561 4574 PD
+24 W
+2535 4556 PD
+24 W
+2505 4539 PD
+24 W
+2481 4519 PD
+24 W
+2454 4500 PD
+24 W
+2426 4485 PD
+24 W
+2398 4475 PD
+24 W
+2371 4467 PD
+24 W
+2344 4457 PD
+24 W
+2315 4443 PD
+24 W
+2287 4430 PD
+24 W
+2260 4416 PD
+24 W
+2231 4404 PD
+24 W
+2204 4391 PD
+24 W
+2177 4372 PD
+24 W
+2149 4353 PD
+24 W
+2127 4335 PD
+24 W
+2102 4317 PD
+24 W
+2080 4298 PD
+24 W
+2058 4280 PD
+24 W
+2039 4261 PD
+24 W
+2021 4242 PD
+24 W
+2004 4222 PD
+24 W
+1991 4203 PD
+24 W
+1978 4184 PD
+24 W
+1967 4166 PD
+24 W
+1960 4147 PD
+24 W
+1956 4129 PD
+24 W
+1954 4110 PD
+24 W
+1952 4091 PD
+24 W
+1953 4072 PD
+24 W
+1958 4053 PD
+24 W
+1963 4034 PD
+24 W
+1967 4015 PD
+24 W
+1970 3997 PD
+24 W
+1974 3980 PD
+24 W
+1978 3961 PD
+24 W
+1979 3942 PD
+24 W
+1952 3937 PD
+24 W
+1923 3940 PD
+24 W
+1895 3951 PD
+24 W
+1868 3965 PD
+24 W
+1845 3984 PD
+24 W
+1819 4002 PD
+24 W
+1790 4016 PD
+24 W
+1762 4031 PD
+24 W
+1735 4043 PD
+24 W
+1711 4062 PD
+24 W
+1695 4080 PD
+24 W
+1684 4100 PD
+24 W
+1679 4118 PD
+24 W
+1673 4138 PD
+24 W
+1669 4156 PD
+24 W
+1672 4175 PD
+24 W
+1680 4193 PD
+24 W
+1689 4211 PD
+24 W
+1705 4230 PD
+24 W
+1726 4248 PD
+24 W
+1747 4267 PD
+24 W
+1766 4286 PD
+24 W
+1784 4305 PD
+24 W
+1794 4324 PD
+24 W
+1796 4343 PD
+24 W
+1790 4361 PD
+24 W
+1778 4380 PD
+24 W
+1764 4398 PD
+24 W
+1746 4417 PD
+24 W
+1731 4435 PD
+24 W
+1720 4454 PD
+24 W
+1708 4472 PD
+24 W
+1700 4491 PD
+24 W
+1694 4509 PD
+24 W
+2497 4602 PD
+24 W
+2496 4602 PD
+24 W
+2477 4584 PD
+24 W
+2459 4565 PD
+24 W
+2430 4547 PD
+24 W
+2400 4532 PD
+24 W
+2369 4520 PD
+24 W
+2339 4506 PD
+24 W
+2311 4495 PD
+24 W
+2285 4485 PD
+24 W
+2258 4473 PD
+24 W
+2231 4461 PD
+24 W
+2203 4450 PD
+24 W
+2174 4436 PD
+24 W
+2147 4421 PD
+24 W
+2122 4403 PD
+24 W
+2095 4385 PD
+24 W
+2073 4367 PD
+24 W
+2052 4348 PD
+24 W
+2034 4330 PD
+24 W
+2012 4311 PD
+24 W
+1991 4293 PD
+24 W
+1969 4274 PD
+24 W
+1951 4256 PD
+24 W
+1935 4238 PD
+24 W
+1920 4220 PD
+24 W
+1910 4202 PD
+24 W
+1904 4183 PD
+24 W
+1895 4164 PD
+24 W
+1893 4146 PD
+24 W
+1892 4128 PD
+24 W
+1889 4109 PD
+24 W
+1886 4090 PD
+24 W
+1884 4072 PD
+24 W
+1883 4053 PD
+24 W
+1885 4034 PD
+24 W
+1884 4015 PD
+24 W
+1857 4021 PD
+24 W
+1829 4039 PD
+24 W
+1808 4058 PD
+24 W
+1791 4076 PD
+24 W
+1773 4095 PD
+24 W
+1761 4112 PD
+24 W
+1752 4131 PD
+24 W
+1746 4151 PD
+24 W
+1746 4170 PD
+24 W
+1751 4188 PD
+24 W
+1765 4206 PD
+24 W
+1788 4225 PD
+24 W
+1808 4243 PD
+24 W
+1825 4262 PD
+24 W
+1840 4281 PD
+24 W
+1853 4299 PD
+24 W
+1862 4319 PD
+24 W
+1868 4338 PD
+24 W
+1873 4356 PD
+24 W
+1875 4375 PD
+24 W
+1872 4394 PD
+24 W
+1859 4414 PD
+24 W
+1845 4432 PD
+24 W
+1828 4451 PD
+24 W
+1803 4470 PD
+24 W
+1787 4488 PD
+24 W
+1775 4507 PD
+24 W
+1768 4525 PD
+24 W
+1761 4545 PD
+24 W
+1755 4564 PD
+24 W
+1752 4582 PD
+24 W
+1751 4601 PD
+24 W
+2379 4599 PD
+24 W
+2378 4580 PD
+24 W
+2365 4562 PD
+24 W
+2337 4553 PD
+24 W
+2309 4544 PD
+24 W
+2281 4533 PD
+24 W
+2254 4524 PD
+24 W
+2226 4515 PD
+24 W
+2199 4503 PD
+24 W
+2171 4487 PD
+24 W
+2145 4469 PD
+24 W
+2117 4455 PD
+24 W
+2092 4436 PD
+24 W
+2075 4418 PD
+24 W
+2057 4399 PD
+24 W
+2035 4382 PD
+24 W
+2008 4367 PD
+24 W
+1981 4358 PD
+24 W
+1954 4371 PD
+24 W
+1941 4389 PD
+24 W
+1934 4407 PD
+24 W
+1927 4427 PD
+24 W
+1919 4447 PD
+24 W
+1905 4465 PD
+24 W
+1888 4483 PD
+24 W
+1872 4505 PD
+24 W
+1859 4524 PD
+24 W
+1849 4542 PD
+24 W
+1842 4561 PD
+24 W
+1833 4580 PD
+24 W
+1826 4599 PD
+24 W
+2259 4595 PD
+24 W
+2258 4595 PD
+24 W
+2234 4577 PD
+24 W
+2206 4563 PD
+24 W
+2179 4555 PD
+24 W
+2150 4544 PD
+24 W
+2123 4531 PD
+24 W
+2097 4512 PD
+24 W
+2074 4494 PD
+24 W
+2051 4476 PD
+24 W
+2027 4458 PD
+24 W
+2001 4462 PD
+24 W
+1976 4482 PD
+24 W
+1958 4500 PD
+24 W
+1940 4518 PD
+24 W
+1921 4537 PD
+24 W
+1912 4556 PD
+24 W
+1898 4575 PD
+24 W
+1894 4593 PD
+24 W
+2157 4601 PD
+24 W
+2128 4592 PD
+24 W
+2102 4578 PD
+24 W
+2076 4559 PD
+24 W
+2056 4541 PD
+24 W
+2028 4528 PD
+24 W
+2005 4546 PD
+24 W
+1982 4566 PD
+24 W
+1974 4585 PD
+24 W
+1614 4423 PD
+24 W
+1613 4423 PD
+24 W
+1622 4404 PD
+24 W
+1636 4386 PD
+24 W
+1647 4367 PD
+24 W
+1651 4347 PD
+24 W
+1651 4328 PD
+24 W
+1650 4309 PD
+24 W
+1640 4291 PD
+24 W
+1617 4273 PD
+24 W
+1592 4255 PD
+24 W
+1572 4237 PD
+24 W
+1566 4218 PD
+24 W
+1571 4199 PD
+24 W
+1566 4181 PD
+24 W
+1556 4160 PD
+24 W
+1557 4140 PD
+24 W
+1564 4121 PD
+24 W
+1575 4101 PD
+24 W
+1587 4082 PD
+24 W
+1602 4062 PD
+24 W
+1622 4044 PD
+24 W
+1649 4026 PD
+24 W
+1678 4010 PD
+24 W
+1705 3994 PD
+24 W
+1732 3982 PD
+24 W
+1760 3969 PD
+24 W
+1790 3951 PD
+24 W
+1820 3933 PD
+24 W
+1847 3920 PD
+24 W
+1876 3906 PD
+24 W
+1905 3894 PD
+24 W
+1934 3884 PD
+24 W
+1961 3875 PD
+24 W
+1989 3865 PD
+24 W
+2018 3852 PD
+24 W
+2014 3834 PD
+24 W
+1995 3816 PD
+24 W
+1967 3801 PD
+24 W
+1940 3782 PD
+24 W
+1929 3764 PD
+24 W
+1922 3744 PD
+24 W
+1913 3726 PD
+24 W
+1906 3708 PD
+24 W
+1897 3689 PD
+24 W
+1890 3671 PD
+24 W
+1881 3651 PD
+24 W
+1875 3631 PD
+24 W
+1869 3611 PD
+24 W
+1866 3592 PD
+24 W
+1861 3574 PD
+24 W
+1854 3556 PD
+24 W
+1846 3538 PD
+24 W
+1839 3520 PD
+24 W
+1831 3499 PD
+24 W
+1826 3481 PD
+24 W
+1820 3463 PD
+24 W
+1813 3445 PD
+24 W
+1798 3425 PD
+24 W
+1786 3407 PD
+24 W
+1770 3388 PD
+24 W
+1754 3369 PD
+24 W
+1735 3350 PD
+24 W
+1712 3331 PD
+24 W
+1686 3313 PD
+24 W
+1660 3294 PD
+24 W
+1632 3277 PD
+24 W
+1603 3265 PD
+24 W
+1574 3254 PD
+24 W
+1545 3245 PD
+24 W
+1518 3237 PD
+24 W
+1491 3231 PD
+24 W
+1463 3226 PD
+24 W
+1436 3221 PD
+24 W
+1721 3939 PD
+24 W
+1632 3954 PD
+24 W
+1660 3939 PD
+24 W
+1688 3933 PD
+24 W
+1716 3926 PD
+24 W
+1743 3915 PD
+24 W
+1771 3900 PD
+24 W
+1794 3882 PD
+24 W
+1807 3862 PD
+24 W
+1818 3845 PD
+24 W
+1830 3827 PD
+24 W
+1841 3808 PD
+24 W
+1846 3790 PD
+24 W
+1859 3771 PD
+24 W
+1861 3753 PD
+24 W
+1851 3734 PD
+24 W
+1836 3715 PD
+24 W
+1826 3696 PD
+24 W
+1814 3678 PD
+24 W
+1807 3660 PD
+24 W
+1807 3640 PD
+24 W
+1805 3622 PD
+24 W
+1801 3605 PD
+24 W
+1797 3585 PD
+24 W
+1792 3568 PD
+24 W
+1785 3550 PD
+24 W
+1778 3532 PD
+24 W
+1770 3514 PD
+24 W
+1761 3496 PD
+24 W
+1751 3478 PD
+24 W
+1737 3460 PD
+24 W
+1724 3443 PD
+24 W
+1707 3424 PD
+24 W
+1694 3405 PD
+24 W
+1675 3387 PD
+24 W
+1651 3369 PD
+24 W
+1622 3350 PD
+24 W
+1595 3340 PD
+24 W
+1313 3145 PD
+24 W
+1341 3156 PD
+24 W
+1368 3165 PD
+24 W
+1396 3168 PD
+24 W
+1422 3174 PD
+24 W
+1450 3181 PD
+24 W
+1478 3184 PD
+24 W
+1509 3189 PD
+24 W
+1539 3196 PD
+24 W
+1566 3203 PD
+24 W
+1595 3211 PD
+24 W
+1624 3219 PD
+24 W
+1652 3226 PD
+24 W
+1680 3236 PD
+24 W
+1708 3254 PD
+24 W
+1732 3272 PD
+24 W
+1758 3290 PD
+24 W
+1778 3310 PD
+24 W
+1794 3329 PD
+24 W
+1811 3347 PD
+24 W
+1827 3366 PD
+24 W
+1845 3384 PD
+24 W
+1861 3403 PD
+24 W
+1877 3421 PD
+24 W
+1890 3439 PD
+24 W
+1903 3457 PD
+24 W
+1916 3476 PD
+24 W
+1927 3495 PD
+24 W
+1936 3515 PD
+24 W
+1944 3536 PD
+24 W
+1952 3553 PD
+24 W
+1961 3572 PD
+24 W
+1969 3590 PD
+24 W
+1973 3608 PD
+24 W
+1976 3626 PD
+24 W
+1978 3645 PD
+24 W
+1979 3664 PD
+24 W
+1983 3684 PD
+24 W
+1989 3704 PD
+24 W
+1992 3722 PD
+24 W
+2007 3740 PD
+24 W
+2035 3755 PD
+24 W
+2060 3773 PD
+24 W
+2074 3793 PD
+24 W
+2088 3812 PD
+24 W
+2101 3829 PD
+24 W
+2112 3847 PD
+24 W
+2140 3849 PD
+24 W
+2170 3843 PD
+24 W
+2200 3833 PD
+24 W
+2229 3821 PD
+24 W
+2259 3808 PD
+24 W
+2286 3793 PD
+24 W
+2311 3774 PD
+24 W
+2339 3755 PD
+24 W
+2367 3737 PD
+24 W
+2395 3718 PD
+24 W
+2423 3702 PD
+24 W
+2451 3692 PD
+24 W
+2479 3678 PD
+24 W
+2480 3659 PD
+24 W
+2463 3640 PD
+24 W
+2454 3623 PD
+24 W
+2451 3605 PD
+24 W
+2451 3586 PD
+24 W
+2446 3568 PD
+24 W
+2439 3548 PD
+24 W
+2430 3531 PD
+24 W
+2413 3513 PD
+24 W
+2394 3494 PD
+24 W
+2371 3474 PD
+24 W
+2347 3456 PD
+24 W
+2318 3437 PD
+24 W
+2297 3419 PD
+24 W
+2278 3400 PD
+24 W
+2260 3381 PD
+24 W
+2244 3363 PD
+24 W
+2224 3344 PD
+24 W
+2195 3326 PD
+24 W
+2167 3307 PD
+24 W
+2145 3289 PD
+24 W
+2128 3269 PD
+24 W
+2112 3251 PD
+24 W
+2097 3231 PD
+24 W
+2085 3213 PD
+24 W
+2067 3195 PD
+24 W
+2051 3175 PD
+24 W
+2038 3156 PD
+24 W
+2027 3138 PD
+24 W
+2013 3118 PD
+24 W
+2001 3100 PD
+24 W
+1992 3081 PD
+24 W
+1982 3062 PD
+24 W
+1974 3044 PD
+24 W
+1967 3025 PD
+24 W
+1961 3006 PD
+24 W
+1960 2986 PD
+24 W
+1959 2968 PD
+24 W
+1960 2948 PD
+24 W
+1961 2930 PD
+24 W
+1962 2912 PD
+24 W
+1960 2899 PD
+24 W
+1959 2894 PD
+24 W
+1948 2875 PD
+24 W
+1933 2857 PD
+24 W
+1905 2840 PD
+24 W
+1878 2822 PD
+24 W
+1854 2803 PD
+24 W
+1836 2785 PD
+24 W
+1812 2768 PD
+24 W
+1785 2756 PD
+24 W
+1758 2744 PD
+24 W
+1730 2730 PD
+24 W
+1705 2711 PD
+24 W
+1704 2712 PD
+24 W
+1678 2695 PD
+24 W
+1664 2677 PD
+24 W
+1653 2658 PD
+24 W
+1650 2640 PD
+24 W
+1657 2620 PD
+24 W
+1667 2602 PD
+24 W
+1676 2584 PD
+24 W
+1674 2567 PD
+24 W
+1671 2549 PD
+24 W
+1672 2531 PD
+24 W
+1678 2513 PD
+24 W
+1691 2495 PD
+24 W
+1699 2477 PD
+24 W
+1701 2459 PD
+24 W
+1697 2441 PD
+24 W
+1675 2423 PD
+24 W
+1647 2413 PD
+24 W
+1627 2394 PD
+24 W
+1626 2376 PD
+24 W
+1599 2364 PD
+24 W
+1576 2346 PD
+24 W
+1549 2331 PD
+24 W
+1522 2318 PD
+24 W
+1495 2302 PD
+24 W
+1473 2289 PD
+24 W
+1466 2286 PD
+24 W
+1443 2269 PD
+24 W
+1439 2251 PD
+24 W
+1442 2233 PD
+24 W
+1449 2214 PD
+24 W
+1452 2206 PD
+24 W
+1454 2197 PD
+24 W
+1459 2178 PD
+24 W
+1460 2160 PD
+24 W
+1452 2142 PD
+24 W
+1449 2140 PD
+24 W
+1425 2129 PD
+24 W
+1406 2110 PD
+24 W
+1389 2092 PD
+24 W
+1377 2074 PD
+24 W
+1367 2056 PD
+24 W
+1357 2037 PD
+24 W
+1345 2019 PD
+24 W
+1333 2001 PD
+24 W
+1320 1983 PD
+24 W
+1301 1964 PD
+24 W
+1281 1946 PD
+24 W
+1262 1927 PD
+24 W
+1245 1909 PD
+24 W
+1232 1891 PD
+24 W
+1222 1874 PD
+24 W
+1214 1856 PD
+24 W
+1208 1836 PD
+24 W
+1201 1817 PD
+24 W
+1192 1798 PD
+24 W
+1187 1779 PD
+24 W
+1183 1761 PD
+24 W
+1178 1743 PD
+24 W
+1173 1724 PD
+24 W
+1166 1706 PD
+24 W
+1159 1688 PD
+24 W
+1152 1669 PD
+24 W
+1150 1649 PD
+24 W
+1148 1631 PD
+24 W
+1150 1611 PD
+24 W
+1150 1593 PD
+24 W
+1154 1574 PD
+24 W
+1161 1556 PD
+24 W
+1172 1537 PD
+24 W
+1188 1519 PD
+24 W
+1208 1501 PD
+24 W
+1229 1483 PD
+24 W
+1255 1465 PD
+24 W
+1283 1449 PD
+24 W
+1298 1442 PD
+24 W
+1310 1435 PD
+24 W
+1336 1431 PD
+24 W
+1367 1436 PD
+24 W
+1394 1440 PD
+24 W
+1421 1438 PD
+24 W
+1427 1421 PD
+24 W
+1424 1403 PD
+24 W
+1419 1384 PD
+24 W
+1410 1366 PD
+24 W
+1404 1347 PD
+24 W
+1399 1329 PD
+24 W
+1396 1312 PD
+24 W
+1393 1300 PD
+24 W
+1386 1294 PD
+24 W
+1374 1276 PD
+24 W
+1377 1257 PD
+24 W
+1388 1237 PD
+24 W
+1398 1218 PD
+24 W
+1404 1199 PD
+24 W
+1413 1180 PD
+24 W
+1421 1162 PD
+24 W
+1430 1144 PD
+24 W
+1439 1126 PD
+24 W
+1448 1108 PD
+24 W
+1456 1091 PD
+24 W
+1462 1072 PD
+24 W
+1467 1054 PD
+24 W
+1473 1034 PD
+24 W
+1480 1016 PD
+24 W
+1490 996 PD
+24 W
+1499 978 PD
+24 W
+1513 958 PD
+24 W
+1524 940 PD
+24 W
+1532 921 PD
+24 W
+1542 902 PD
+24 W
+1553 884 PD
+24 W
+1567 864 PD
+24 W
+1583 845 PD
+24 W
+1597 827 PD
+24 W
+1621 808 PD
+24 W
+1649 794 PD
+24 W
+1678 786 PD
+24 W
+1706 782 PD
+24 W
+1733 777 PD
+24 W
+1762 768 PD
+24 W
+1789 759 PD
+24 W
+1816 747 PD
+24 W
+1844 742 PD
+24 W
+1872 741 PD
+24 W
+1903 744 PD
+24 W
+1933 746 PD
+24 W
+1961 746 PD
+24 W
+1990 744 PD
+24 W
+2018 743 PD
+24 W
+2049 740 PD
+24 W
+2078 735 PD
+24 W
+2105 731 PD
+24 W
+2133 728 PD
+24 W
+2161 719 PD
+24 W
+2188 709 PD
+24 W
+2217 702 PD
+24 W
+2246 693 PD
+24 W
+2273 685 PD
+24 W
+2301 675 PD
+24 W
+2329 664 PD
+24 W
+2357 656 PD
+24 W
+2385 647 PD
+24 W
+2412 641 PD
+24 W
+2441 636 PD
+24 W
+2468 630 PD
+24 W
+2495 626 PD
+24 W
+2522 631 PD
+24 W
+2549 638 PD
+24 W
+2576 649 PD
+24 W
+2603 657 PD
+24 W
+2629 659 PD
+24 W
+2657 660 PD
+24 W
+2684 651 PD
+24 W
+2709 634 PD
+24 W
+2737 626 PD
+24 W
+2767 622 PD
+24 W
+2796 619 PD
+24 W
+2825 617 PD
+24 W
+2854 616 PD
+24 W
+2883 617 PD
+24 W
+2911 618 PD
+24 W
+2940 618 PD
+24 W
+2971 620 PD
+24 W
+2999 622 PD
+24 W
+3027 624 PD
+24 W
+3055 628 PD
+24 W
+3083 634 PD
+24 W
+3111 640 PD
+24 W
+3140 651 PD
+24 W
+3169 661 PD
+24 W
+3197 669 PD
+24 W
+3226 676 PD
+24 W
+3255 684 PD
+24 W
+3283 693 PD
+24 W
+3312 704 PD
+24 W
+3341 717 PD
+24 W
+3371 729 PD
+24 W
+3400 740 PD
+24 W
+3429 756 PD
+24 W
+3460 769 PD
+24 W
+3486 780 PD
+24 W
+3504 798 PD
+24 W
+3532 816 PD
+24 W
+3562 828 PD
+24 W
+3591 842 PD
+24 W
+3618 855 PD
+24 W
+3646 868 PD
+24 W
+3676 879 PD
+24 W
+3704 893 PD
+24 W
+3732 906 PD
+24 W
+3759 920 PD
+24 W
+3787 934 PD
+24 W
+3813 944 PD
+24 W
+3841 955 PD
+24 W
+3869 965 PD
+24 W
+3898 974 PD
+24 W
+3925 981 PD
+24 W
+3952 987 PD
+24 W
+3980 994 PD
+24 W
+4007 1001 PD
+24 W
+4034 1017 PD
+24 W
+4058 1035 PD
+24 W
+4077 1054 PD
+24 W
+4096 1071 PD
+24 W
+4122 1090 PD
+24 W
+4145 1108 PD
+24 W
+4164 1128 PD
+24 W
+4182 1147 PD
+24 W
+4200 1166 PD
+24 W
+4215 1184 PD
+24 W
+4219 1202 PD
+24 W
+4208 1228 PD
+24 W
+4207 1228 PD
+24 W
+4204 1247 PD
+24 W
+4215 1265 PD
+24 W
+4224 1284 PD
+24 W
+4250 1303 PD
+24 W
+4277 1313 PD
+24 W
+4304 1324 PD
+24 W
+4334 1338 PD
+24 W
+4362 1356 PD
+24 W
+4389 1373 PD
+24 W
+4407 1392 PD
+24 W
+4412 1410 PD
+24 W
+4415 1430 PD
+24 W
+4422 1449 PD
+24 W
+4427 1467 PD
+24 W
+4433 1486 PD
+24 W
+4440 1504 PD
+24 W
+4447 1522 PD
+24 W
+4448 1541 PD
+24 W
+4449 1559 PD
+24 W
+4455 1578 PD
+24 W
+4460 1596 PD
+24 W
+4489 1612 PD
+24 W
+4517 1614 PD
+24 W
+4544 1612 PD
+24 W
+4574 1614 PD
+24 W
+4602 1620 PD
+24 W
+4628 1629 PD
+24 W
+4648 1641 PD
+24 W
+4656 1639 PD
+24 W
+4685 1655 PD
+24 W
+4706 1674 PD
+24 W
+4726 1692 PD
+24 W
+4735 1707 PD
+24 W
+4736 1711 PD
+24 W
+4742 1728 PD
+24 W
+4746 1746 PD
+24 W
+4745 1765 PD
+24 W
+4742 1786 PD
+24 W
+4739 1804 PD
+24 W
+4735 1823 PD
+24 W
+4732 1840 PD
+24 W
+4731 1858 PD
+24 W
+4732 1876 PD
+24 W
+4733 1896 PD
+24 W
+4734 1914 PD
+24 W
+4736 1933 PD
+24 W
+4740 1951 PD
+24 W
+4754 1969 PD
+24 W
+4780 1972 PD
+24 W
+4808 1970 PD
+24 W
+4837 1966 PD
+24 W
+4865 1963 PD
+24 W
+4896 1961 PD
+24 W
+4925 1957 PD
+24 W
+4952 1958 PD
+24 W
+4981 1962 PD
+24 W
+5007 1968 PD
+24 W
+5019 1987 PD
+24 W
+5009 2006 PD
+24 W
+4982 2023 PD
+24 W
+4958 2041 PD
+24 W
+4941 2060 PD
+24 W
+4929 2080 PD
+24 W
+4957 2093 PD
+24 W
+4984 2108 PD
+24 W
+5012 2096 PD
+24 W
+5039 2083 PD
+24 W
+5067 2081 PD
+24 W
+5091 2099 PD
+24 W
+5086 2117 PD
+24 W
+5075 2135 PD
+24 W
+5083 2153 PD
+24 W
+5114 2159 PD
+24 W
+5144 2166 PD
+24 W
+5170 2185 PD
+24 W
+5174 2204 PD
+24 W
+5182 2222 PD
+24 W
+5209 2229 PD
+24 W
+5236 2214 PD
+24 W
+5263 2197 PD
+24 W
+5269 2194 PD
+24 W
+5289 2189 PD
+24 W
+5317 2192 PD
+24 W
+5345 2204 PD
+24 W
+5374 2222 PD
+24 W
+5397 2240 PD
+24 W
+5414 2258 PD
+24 W
+5427 2276 PD
+24 W
+5442 2296 PD
+24 W
+5451 2313 PD
+24 W
+5458 2331 PD
+24 W
+5467 2349 PD
+24 W
+5473 2368 PD
+24 W
+5476 2386 PD
+24 W
+5482 2404 PD
+24 W
+5487 2422 PD
+24 W
+5487 2427 PD
+24 W
+5488 2440 PD
+24 W
+5492 2461 PD
+24 W
+5500 2479 PD
+24 W
+5502 2497 PD
+24 W
+5497 2517 PD
+24 W
+5490 2537 PD
+24 W
+5483 2557 PD
+24 W
+5475 2576 PD
+24 W
+5465 2597 PD
+24 W
+5459 2615 PD
+24 W
+5456 2634 PD
+24 W
+5454 2652 PD
+24 W
+5454 2671 PD
+24 W
+5457 2690 PD
+24 W
+5462 2709 PD
+24 W
+5469 2727 PD
+24 W
+5476 2746 PD
+24 W
+5486 2764 PD
+24 W
+5500 2784 PD
+24 W
+5516 2802 PD
+24 W
+5541 2820 PD
+24 W
+5568 2837 PD
+24 W
+5584 2855 PD
+24 W
+5595 2873 PD
+24 W
+5608 2892 PD
+24 W
+5629 2911 PD
+24 W
+5657 2923 PD
+24 W
+5687 2938 PD
+24 W
+5716 2953 PD
+24 W
+5737 2972 PD
+24 W
+5753 2991 PD
+24 W
+5769 3009 PD
+24 W
+5778 3027 PD
+24 W
+5787 3045 PD
+24 W
+5817 3048 PD
+24 W
+5838 3067 PD
+24 W
+5841 3086 PD
+24 W
+5870 3097 PD
+24 W
+5899 3094 PD
+24 W
+5925 3086 PD
+24 W
+5946 3068 PD
+24 W
+5963 3048 PD
+24 W
+5975 3029 PD
+24 W
+5982 3011 PD
+24 W
+5992 2992 PD
+24 W
+6003 2973 PD
+24 W
+6013 2966 PD
+24 W
+6032 2959 PD
+24 W
+6061 2954 PD
+24 W
+6090 2956 PD
+24 W
+6117 2963 PD
+24 W
+6144 2973 PD
+24 W
+6169 2992 PD
+24 W
+6178 3010 PD
+24 W
+6187 3028 PD
+24 W
+6198 3046 PD
+24 W
+6211 3064 PD
+24 W
+6225 3082 PD
+24 W
+6232 3101 PD
+24 W
+6236 3119 PD
+24 W
+6235 3137 PD
+24 W
+6235 3156 PD
+24 W
+6237 3174 PD
+24 W
+6237 3192 PD
+24 W
+6239 3210 PD
+24 W
+6239 3229 PD
+24 W
+6241 3246 PD
+24 W
+6243 3264 PD
+24 W
+6244 3283 PD
+24 W
+6245 3301 PD
+24 W
+6246 3320 PD
+24 W
+6244 3338 PD
+24 W
+6243 3357 PD
+24 W
+6240 3376 PD
+24 W
+6240 3394 PD
+24 W
+6238 3413 PD
+24 W
+6237 3431 PD
+24 W
+6238 3449 PD
+24 W
+6239 3466 PD
+24 W
+6244 3484 PD
+24 W
+6251 3503 PD
+24 W
+1209 3084 PD
+24 W
+1236 3088 PD
+24 W
+1266 3087 PD
+24 W
+1294 3090 PD
+24 W
+1323 3096 PD
+24 W
+1351 3103 PD
+24 W
+1378 3117 PD
+24 W
+1406 3120 PD
+24 W
+1434 3119 PD
+24 W
+1462 3123 PD
+24 W
+1492 3138 PD
+24 W
+1522 3147 PD
+24 W
+1550 3156 PD
+24 W
+1578 3159 PD
+24 W
+1607 3158 PD
+24 W
+1636 3161 PD
+24 W
+1664 3170 PD
+24 W
+1691 3184 PD
+24 W
+1715 3203 PD
+24 W
+1740 3222 PD
+24 W
+1769 3234 PD
+24 W
+1797 3242 PD
+24 W
+1824 3250 PD
+24 W
+1851 3265 PD
+24 W
+1857 3284 PD
+24 W
+1855 3302 PD
+24 W
+1864 3321 PD
+24 W
+1880 3338 PD
+24 W
+1900 3357 PD
+24 W
+1921 3375 PD
+24 W
+1937 3394 PD
+24 W
+1944 3413 PD
+24 W
+1946 3431 PD
+24 W
+1955 3449 PD
+24 W
+1977 3467 PD
+24 W
+1994 3485 PD
+24 W
+2007 3505 PD
+24 W
+2019 3525 PD
+24 W
+2028 3545 PD
+24 W
+2032 3564 PD
+24 W
+2035 3583 PD
+24 W
+2038 3602 PD
+24 W
+2043 3620 PD
+24 W
+2049 3638 PD
+24 W
+2054 3657 PD
+24 W
+2060 3676 PD
+24 W
+2072 3695 PD
+24 W
+2084 3713 PD
+24 W
+2096 3732 PD
+24 W
+2118 3750 PD
+24 W
+2145 3764 PD
+24 W
+2173 3762 PD
+24 W
+2200 3750 PD
+24 W
+2227 3738 PD
+24 W
+2256 3728 PD
+24 W
+2283 3713 PD
+24 W
+2311 3702 PD
+24 W
+2340 3690 PD
+24 W
+2368 3682 PD
+24 W
+2386 3664 PD
+24 W
+2393 3645 PD
+24 W
+2383 3626 PD
+24 W
+2371 3607 PD
+24 W
+2365 3588 PD
+24 W
+2358 3571 PD
+24 W
+2351 3551 PD
+24 W
+2341 3532 PD
+24 W
+2329 3514 PD
+24 W
+2313 3496 PD
+24 W
+2290 3477 PD
+24 W
+2268 3459 PD
+24 W
+2246 3440 PD
+24 W
+2226 3423 PD
+24 W
+2213 3404 PD
+24 W
+2194 3385 PD
+24 W
+2166 3374 PD
+24 W
+2138 3365 PD
+24 W
+2109 3352 PD
+24 W
+2091 3334 PD
+24 W
+2073 3314 PD
+24 W
+2059 3295 PD
+24 W
+2042 3275 PD
+24 W
+2026 3256 PD
+24 W
+2009 3238 PD
+24 W
+1991 3219 PD
+24 W
+1976 3199 PD
+24 W
+1963 3180 PD
+24 W
+1954 3162 PD
+24 W
+1945 3144 PD
+24 W
+1936 3126 PD
+24 W
+1929 3108 PD
+24 W
+1925 3090 PD
+24 W
+1922 3071 PD
+24 W
+1922 3053 PD
+24 W
+1923 3034 PD
+24 W
+1922 3015 PD
+24 W
+1913 2996 PD
+24 W
+1895 2978 PD
+24 W
+1879 2959 PD
+24 W
+1865 2941 PD
+24 W
+1849 2924 PD
+24 W
+1829 2903 PD
+24 W
+1817 2884 PD
+24 W
+1805 2864 PD
+24 W
+1786 2845 PD
+24 W
+1764 2826 PD
+24 W
+1739 2808 PD
+24 W
+1713 2792 PD
+24 W
+1683 2777 PD
+24 W
+1655 2762 PD
+24 W
+1638 2744 PD
+24 W
+1624 2724 PD
+24 W
+1609 2705 PD
+24 W
+1593 2687 PD
+24 W
+1586 2669 PD
+24 W
+1587 2652 PD
+24 W
+1592 2633 PD
+24 W
+1589 2615 PD
+24 W
+1588 2608 PD
+24 W
+1578 2597 PD
+24 W
+1555 2579 PD
+24 W
+1541 2561 PD
+24 W
+1540 2543 PD
+24 W
+1541 2525 PD
+24 W
+1540 2505 PD
+24 W
+1539 2487 PD
+24 W
+1534 2469 PD
+24 W
+1517 2451 PD
+24 W
+1500 2433 PD
+24 W
+1489 2415 PD
+24 W
+1488 2397 PD
+24 W
+1489 2390 PD
+24 W
+1491 2379 PD
+24 W
+1474 2361 PD
+24 W
+1457 2343 PD
+24 W
+1430 2330 PD
+24 W
+1409 2312 PD
+24 W
+1410 2313 PD
+24 W
+1395 2293 PD
+24 W
+1380 2275 PD
+24 W
+1365 2256 PD
+24 W
+1355 2237 PD
+24 W
+1342 2220 PD
+24 W
+1329 2202 PD
+24 W
+1317 2184 PD
+24 W
+1304 2165 PD
+24 W
+1293 2146 PD
+24 W
+1283 2128 PD
+24 W
+1269 2110 PD
+24 W
+1258 2091 PD
+24 W
+1248 2072 PD
+24 W
+1243 2055 PD
+24 W
+1230 2035 PD
+24 W
+1216 2017 PD
+24 W
+1201 1999 PD
+24 W
+1186 1981 PD
+24 W
+1167 1960 PD
+24 W
+1153 1942 PD
+24 W
+1139 1925 PD
+24 W
+1125 1905 PD
+24 W
+1111 1887 PD
+24 W
+1095 1869 PD
+24 W
+1080 1850 PD
+24 W
+1064 1831 PD
+24 W
+1052 1813 PD
+24 W
+1041 1794 PD
+24 W
+1032 1775 PD
+24 W
+1025 1757 PD
+24 W
+1022 1737 PD
+24 W
+1018 1718 PD
+24 W
+1017 1699 PD
+24 W
+1015 1680 PD
+24 W
+1015 1661 PD
+24 W
+1017 1642 PD
+24 W
+1022 1624 PD
+24 W
+1027 1604 PD
+24 W
+1027 1586 PD
+24 W
+1029 1568 PD
+24 W
+1031 1549 PD
+24 W
+1032 1530 PD
+24 W
+1040 1513 PD
+24 W
+1053 1494 PD
+24 W
+1067 1476 PD
+24 W
+1087 1457 PD
+24 W
+1112 1438 PD
+24 W
+1140 1423 PD
+24 W
+1167 1409 PD
+24 W
+1196 1397 PD
+24 W
+1223 1385 PD
+24 W
+1251 1374 PD
+24 W
+1277 1356 PD
+24 W
+1284 1353 PD
+24 W
+1297 1336 PD
+24 W
+1307 1318 PD
+24 W
+1310 1299 PD
+24 W
+1306 1281 PD
+24 W
+1306 1263 PD
+24 W
+1306 1245 PD
+24 W
+1305 1227 PD
+24 W
+1306 1209 PD
+24 W
+1305 1191 PD
+24 W
+1306 1173 PD
+24 W
+1309 1155 PD
+24 W
+1310 1137 PD
+24 W
+1311 1134 PD
+24 W
+1305 1119 PD
+24 W
+1301 1102 PD
+24 W
+1305 1084 PD
+24 W
+1314 1066 PD
+24 W
+1323 1047 PD
+24 W
+1335 1029 PD
+24 W
+1346 1010 PD
+24 W
+1357 992 PD
+24 W
+1372 973 PD
+24 W
+1387 954 PD
+24 W
+1401 935 PD
+24 W
+1412 916 PD
+24 W
+1419 897 PD
+24 W
+1427 878 PD
+24 W
+1437 860 PD
+24 W
+1444 841 PD
+24 W
+1457 821 PD
+24 W
+1470 803 PD
+24 W
+1486 782 PD
+24 W
+1505 763 PD
+24 W
+1525 746 PD
+24 W
+1548 728 PD
+24 W
+1571 709 PD
+24 W
+1598 695 PD
+24 W
+1625 683 PD
+24 W
+1653 680 PD
+24 W
+1682 685 PD
+24 W
+1710 690 PD
+24 W
+1739 691 PD
+24 W
+1769 690 PD
+24 W
+1798 685 PD
+24 W
+1827 675 PD
+24 W
+1854 659 PD
+24 W
+1881 643 PD
+24 W
+1910 632 PD
+24 W
+1938 626 PD
+24 W
+1967 621 PD
+24 W
+1995 614 PD
+24 W
+2024 610 PD
+24 W
+2054 608 PD
+24 W
+2082 605 PD
+24 W
+2110 603 PD
+24 W
+2138 599 PD
+24 W
+2168 592 PD
+24 W
+2195 588 PD
+24 W
+2223 587 PD
+24 W
+2250 586 PD
+24 W
+2278 584 PD
+24 W
+2306 578 PD
+24 W
+2335 572 PD
+24 W
+2363 563 PD
+24 W
+2390 557 PD
+24 W
+2419 548 PD
+24 W
+2447 540 PD
+24 W
+2475 530 PD
+24 W
+2503 525 PD
+24 W
+2529 522 PD
+24 W
+2556 520 PD
+24 W
+2583 517 PD
+24 W
+2610 514 PD
+24 W
+2637 510 PD
+24 W
+2668 506 PD
+24 W
+2697 505 PD
+24 W
+2728 506 PD
+24 W
+2755 504 PD
+24 W
+2784 502 PD
+24 W
+2814 502 PD
+24 W
+2842 502 PD
+24 W
+2870 502 PD
+24 W
+2896 502 PD
+24 W
+2925 504 PD
+24 W
+2954 506 PD
+24 W
+2981 508 PD
+24 W
+3008 514 PD
+24 W
+3036 518 PD
+24 W
+3066 522 PD
+24 W
+3094 527 PD
+24 W
+3123 532 PD
+24 W
+3151 537 PD
+24 W
+3183 542 PD
+24 W
+3213 548 PD
+24 W
+3240 553 PD
+24 W
+3267 558 PD
+24 W
+3296 562 PD
+24 W
+3325 568 PD
+24 W
+3352 576 PD
+24 W
+3381 586 PD
+24 W
+3408 596 PD
+24 W
+3437 613 PD
+24 W
+3464 627 PD
+24 W
+3493 643 PD
+24 W
+3521 659 PD
+24 W
+3549 672 PD
+24 W
+3580 678 PD
+24 W
+3607 681 PD
+24 W
+3639 689 PD
+24 W
+3666 697 PD
+24 W
+3693 709 PD
+24 W
+3719 727 PD
+24 W
+3742 745 PD
+24 W
+3770 762 PD
+24 W
+3799 775 PD
+24 W
+3827 788 PD
+24 W
+3854 799 PD
+24 W
+3881 812 PD
+24 W
+3910 828 PD
+24 W
+3939 844 PD
+24 W
+3966 856 PD
+24 W
+3993 866 PD
+24 W
+4022 875 PD
+24 W
+4048 884 PD
+24 W
+4077 898 PD
+24 W
+4107 916 PD
+24 W
+4135 933 PD
+24 W
+4160 951 PD
+24 W
+4184 969 PD
+24 W
+4212 989 PD
+24 W
+4240 1006 PD
+24 W
+4257 1025 PD
+24 W
+4271 1044 PD
+24 W
+4290 1062 PD
+24 W
+4304 1081 PD
+24 W
+4319 1100 PD
+24 W
+4334 1119 PD
+24 W
+4342 1137 PD
+24 W
+4346 1156 PD
+24 W
+4346 1174 PD
+24 W
+4337 1192 PD
+24 W
+4330 1200 PD
+24 W
+4327 1210 PD
+24 W
+4329 1228 PD
+24 W
+4336 1246 PD
+24 W
+4350 1265 PD
+24 W
+4379 1280 PD
+24 W
+4406 1289 PD
+24 W
+4430 1307 PD
+24 W
+4448 1327 PD
+24 W
+4466 1346 PD
+24 W
+4480 1364 PD
+24 W
+4487 1383 PD
+24 W
+4496 1402 PD
+24 W
+4502 1421 PD
+24 W
+4512 1440 PD
+24 W
+4516 1459 PD
+24 W
+4524 1478 PD
+24 W
+4536 1497 PD
+24 W
+4550 1515 PD
+24 W
+4578 1534 PD
+24 W
+4607 1544 PD
+24 W
+4634 1548 PD
+24 W
+4663 1553 PD
+24 W
+4692 1556 PD
+24 W
+4721 1561 PD
+24 W
+4749 1567 PD
+24 W
+4777 1575 PD
+24 W
+4783 1570 PD
+24 W
+4804 1584 PD
+24 W
+4815 1602 PD
+24 W
+4828 1620 PD
+24 W
+4832 1639 PD
+24 W
+4837 1657 PD
+24 W
+4838 1676 PD
+24 W
+4833 1695 PD
+24 W
+4829 1712 PD
+24 W
+4821 1732 PD
+24 W
+4815 1750 PD
+24 W
+4813 1768 PD
+24 W
+4813 1786 PD
+24 W
+4810 1806 PD
+24 W
+4804 1824 PD
+24 W
+4801 1843 PD
+24 W
+4800 1862 PD
+24 W
+4806 1880 PD
+24 W
+4833 1894 PD
+24 W
+4860 1899 PD
+24 W
+4888 1896 PD
+24 W
+4914 1887 PD
+24 W
+4941 1875 PD
+24 W
+4969 1863 PD
+24 W
+4996 1855 PD
+24 W
+5025 1851 PD
+24 W
+5055 1852 PD
+24 W
+5083 1852 PD
+24 W
+5111 1862 PD
+24 W
+5131 1881 PD
+24 W
+5155 1899 PD
+24 W
+5182 1910 PD
+24 W
+5210 1916 PD
+24 W
+5238 1919 PD
+24 W
+5265 1923 PD
+24 W
+5292 1933 PD
+24 W
+5307 1925 PD
+24 W
+5322 1938 PD
+24 W
+5350 1958 PD
+24 W
+5377 1974 PD
+24 W
+5400 1992 PD
+24 W
+5421 2010 PD
+24 W
+5433 2029 PD
+24 W
+5446 2050 PD
+24 W
+5458 2068 PD
+24 W
+5471 2088 PD
+24 W
+5478 2105 PD
+24 W
+5486 2125 PD
+24 W
+5496 2143 PD
+24 W
+5505 2162 PD
+24 W
+5520 2182 PD
+24 W
+5536 2201 PD
+24 W
+5548 2220 PD
+24 W
+5554 2238 PD
+24 W
+5561 2256 PD
+24 W
+5568 2274 PD
+24 W
+5576 2291 PD
+24 W
+5576 2292 PD
+24 W
+5576 2310 PD
+24 W
+5577 2329 PD
+24 W
+5578 2348 PD
+24 W
+5573 2367 PD
+24 W
+5569 2387 PD
+24 W
+5568 2405 PD
+24 W
+5567 2423 PD
+24 W
+5567 2441 PD
+24 W
+5569 2460 PD
+24 W
+5564 2478 PD
+24 W
+5561 2497 PD
+24 W
+5559 2517 PD
+24 W
+5553 2534 PD
+24 W
+5542 2553 PD
+24 W
+5535 2571 PD
+24 W
+5529 2590 PD
+24 W
+5523 2609 PD
+24 W
+5524 2628 PD
+24 W
+5528 2647 PD
+24 W
+5534 2665 PD
+24 W
+5540 2684 PD
+24 W
+5540 2702 PD
+24 W
+5541 2720 PD
+24 W
+5545 2739 PD
+24 W
+5558 2758 PD
+24 W
+5581 2776 PD
+24 W
+5605 2794 PD
+24 W
+5627 2813 PD
+24 W
+5645 2833 PD
+24 W
+5657 2852 PD
+24 W
+5671 2869 PD
+24 W
+5699 2882 PD
+24 W
+5726 2886 PD
+24 W
+5756 2888 PD
+24 W
+5785 2890 PD
+24 W
+5812 2892 PD
+24 W
+5839 2893 PD
+24 W
+5868 2894 PD
+24 W
+5891 2914 PD
+24 W
+5892 2933 PD
+24 W
+5920 2924 PD
+24 W
+5936 2906 PD
+24 W
+5945 2886 PD
+24 W
+5959 2869 PD
+24 W
+5975 2851 PD
+24 W
+5997 2833 PD
+24 W
+6016 2815 PD
+24 W
+6020 2813 PD
+24 W
+6045 2805 PD
+24 W
+6073 2804 PD
+24 W
+6101 2809 PD
+24 W
+6128 2815 PD
+24 W
+6157 2824 PD
+24 W
+6185 2838 PD
+24 W
+6207 2856 PD
+24 W
+6236 2871 PD
+24 W
+1967 3289 PD
+24 W
+1968 3289 PD
+24 W
+1978 3307 PD
+24 W
+1988 3326 PD
+24 W
+1997 3345 PD
+24 W
+2007 3363 PD
+24 W
+2017 3381 PD
+24 W
+2027 3400 PD
+24 W
+2037 3419 PD
+24 W
+2044 3437 PD
+24 W
+2051 3455 PD
+24 W
+2060 3473 PD
+24 W
+2069 3491 PD
+24 W
+2074 3510 PD
+24 W
+2080 3530 PD
+24 W
+2088 3548 PD
+24 W
+2096 3568 PD
+24 W
+2104 3587 PD
+24 W
+2109 3605 PD
+24 W
+2113 3625 PD
+24 W
+2124 3645 PD
+24 W
+2140 3663 PD
+24 W
+2166 3675 PD
+24 W
+2193 3679 PD
+24 W
+2220 3675 PD
+24 W
+2249 3666 PD
+24 W
+2278 3660 PD
+24 W
+2307 3657 PD
+24 W
+2325 3639 PD
+24 W
+2305 3620 PD
+24 W
+2290 3602 PD
+24 W
+2279 3583 PD
+24 W
+2276 3564 PD
+24 W
+2272 3546 PD
+24 W
+2257 3527 PD
+24 W
+2228 3508 PD
+24 W
+2201 3491 PD
+24 W
+2174 3472 PD
+24 W
+2150 3454 PD
+24 W
+2124 3437 PD
+24 W
+2096 3419 PD
+24 W
+2073 3400 PD
+24 W
+2051 3381 PD
+24 W
+2032 3364 PD
+24 W
+2013 3345 PD
+24 W
+1998 3327 PD
+24 W
+1983 3308 PD
+24 W
+1967 3289 PD
+24 W
+1103 2993 PD
+24 W
+1131 3006 PD
+24 W
+1158 3020 PD
+24 W
+1186 3035 PD
+24 W
+1216 3043 PD
+24 W
+1243 3046 PD
+24 W
+1272 3044 PD
+24 W
+1299 3041 PD
+24 W
+1326 3043 PD
+24 W
+1355 3056 PD
+24 W
+1383 3066 PD
+24 W
+1412 3068 PD
+24 W
+1441 3073 PD
+24 W
+1470 3084 PD
+24 W
+1499 3092 PD
+24 W
+1527 3096 PD
+24 W
+1556 3097 PD
+24 W
+1584 3097 PD
+24 W
+1614 3105 PD
+24 W
+1642 3123 PD
+24 W
+1669 3133 PD
+24 W
+1696 3137 PD
+24 W
+1725 3142 PD
+24 W
+1753 3147 PD
+24 W
+1780 3159 PD
+24 W
+1807 3171 PD
+24 W
+1836 3186 PD
+24 W
+1863 3196 PD
+24 W
+1890 3200 PD
+24 W
+1886 3181 PD
+24 W
+1877 3164 PD
+24 W
+1866 3145 PD
+24 W
+1859 3127 PD
+24 W
+1854 3109 PD
+24 W
+1854 3091 PD
+24 W
+1856 3073 PD
+24 W
+1859 3055 PD
+24 W
+1859 3037 PD
+24 W
+1842 3018 PD
+24 W
+1816 3000 PD
+24 W
+1791 2983 PD
+24 W
+1764 2964 PD
+24 W
+1746 2946 PD
+24 W
+1735 2928 PD
+24 W
+1726 2910 PD
+24 W
+1720 2892 PD
+24 W
+1710 2874 PD
+24 W
+1694 2854 PD
+24 W
+1675 2836 PD
+24 W
+1649 2817 PD
+24 W
+1622 2798 PD
+24 W
+1597 2780 PD
+24 W
+1574 2763 PD
+24 W
+1556 2745 PD
+24 W
+1535 2725 PD
+24 W
+1520 2706 PD
+24 W
+1511 2687 PD
+24 W
+1507 2669 PD
+24 W
+1501 2650 PD
+24 W
+1493 2633 PD
+24 W
+1481 2614 PD
+24 W
+1460 2596 PD
+24 W
+1443 2577 PD
+24 W
+1428 2558 PD
+24 W
+1425 2543 PD
+24 W
+1413 2539 PD
+24 W
+1391 2521 PD
+24 W
+1377 2503 PD
+24 W
+1361 2485 PD
+24 W
+1353 2466 PD
+24 W
+1347 2447 PD
+24 W
+1344 2430 PD
+24 W
+1344 2421 PD
+24 W
+1345 2412 PD
+24 W
+1361 2395 PD
+24 W
+1376 2375 PD
+24 W
+1375 2358 PD
+24 W
+1348 2343 PD
+24 W
+1319 2336 PD
+24 W
+1291 2329 PD
+24 W
+1280 2319 PD
+24 W
+1268 2310 PD
+24 W
+1255 2291 PD
+24 W
+1237 2272 PD
+24 W
+1220 2253 PD
+24 W
+1200 2235 PD
+24 W
+1185 2217 PD
+24 W
+1173 2199 PD
+24 W
+1159 2180 PD
+24 W
+1147 2161 PD
+24 W
+1138 2143 PD
+24 W
+1128 2123 PD
+24 W
+1116 2105 PD
+24 W
+1100 2086 PD
+24 W
+1082 2069 PD
+24 W
+1064 2050 PD
+24 W
+1051 2033 PD
+24 W
+1035 2012 PD
+24 W
+1023 1994 PD
+24 W
+1010 1974 PD
+24 W
+999 1956 PD
+24 W
+986 1936 PD
+24 W
+977 1917 PD
+24 W
+966 1899 PD
+24 W
+956 1881 PD
+24 W
+946 1862 PD
+24 W
+934 1844 PD
+24 W
+921 1827 PD
+24 W
+913 1809 PD
+24 W
+910 1789 PD
+24 W
+909 1771 PD
+24 W
+907 1753 PD
+24 W
+908 1735 PD
+24 W
+906 1717 PD
+24 W
+902 1699 PD
+24 W
+899 1681 PD
+24 W
+917 1662 PD
+24 W
+932 1644 PD
+24 W
+937 1626 PD
+24 W
+942 1608 PD
+24 W
+949 1588 PD
+24 W
+956 1570 PD
+24 W
+960 1551 PD
+24 W
+964 1533 PD
+24 W
+966 1515 PD
+24 W
+970 1497 PD
+24 W
+963 1479 PD
+24 W
+963 1461 PD
+24 W
+966 1443 PD
+24 W
+982 1425 PD
+24 W
+1009 1407 PD
+24 W
+1037 1390 PD
+24 W
+1064 1375 PD
+24 W
+1091 1361 PD
+24 W
+1120 1348 PD
+24 W
+1147 1334 PD
+24 W
+1175 1317 PD
+24 W
+1193 1299 PD
+24 W
+1207 1281 PD
+24 W
+1218 1263 PD
+24 W
+1222 1244 PD
+24 W
+1225 1226 PD
+24 W
+1222 1207 PD
+24 W
+1219 1189 PD
+24 W
+1216 1171 PD
+24 W
+1211 1153 PD
+24 W
+1207 1135 PD
+24 W
+1206 1117 PD
+24 W
+1206 1099 PD
+24 W
+1205 1080 PD
+24 W
+1204 1062 PD
+24 W
+1205 1043 PD
+24 W
+1209 1026 PD
+24 W
+1213 1008 PD
+24 W
+1219 990 PD
+24 W
+1227 971 PD
+24 W
+1240 953 PD
+24 W
+1251 935 PD
+24 W
+1262 916 PD
+24 W
+1274 897 PD
+24 W
+1288 879 PD
+24 W
+1305 860 PD
+24 W
+1322 843 PD
+24 W
+1338 823 PD
+24 W
+1355 804 PD
+24 W
+1368 785 PD
+24 W
+1380 768 PD
+24 W
+1396 749 PD
+24 W
+1413 730 PD
+24 W
+1441 712 PD
+24 W
+1468 694 PD
+24 W
+1486 676 PD
+24 W
+1506 658 PD
+24 W
+1533 643 PD
+24 W
+1560 638 PD
+24 W
+1587 634 PD
+24 W
+1614 631 PD
+24 W
+1640 627 PD
+24 W
+1670 640 PD
+24 W
+1699 651 PD
+24 W
+1727 652 PD
+24 W
+1755 652 PD
+24 W
+1783 642 PD
+24 W
+1811 630 PD
+24 W
+1839 614 PD
+24 W
+1863 595 PD
+24 W
+1887 577 PD
+24 W
+1908 560 PD
+24 W
+1929 542 PD
+24 W
+1958 527 PD
+24 W
+1988 516 PD
+24 W
+2019 515 PD
+24 W
+2050 510 PD
+24 W
+2080 507 PD
+24 W
+2109 504 PD
+24 W
+2139 501 PD
+24 W
+2167 496 PD
+24 W
+2195 494 PD
+24 W
+2222 492 PD
+24 W
+2250 489 PD
+24 W
+2280 485 PD
+24 W
+2309 479 PD
+24 W
+2337 471 PD
+24 W
+2364 463 PD
+24 W
+2393 449 PD
+24 W
+2422 436 PD
+24 W
+2451 423 PD
+24 W
+2477 412 PD
+24 W
+2504 398 PD
+24 W
+2763 395 PD
+24 W
+2763 394 PD
+24 W
+2792 397 PD
+24 W
+2820 402 PD
+24 W
+2847 405 PD
+24 W
+2874 410 PD
+24 W
+2902 415 PD
+24 W
+2929 417 PD
+24 W
+2960 420 PD
+24 W
+2993 425 PD
+24 W
+3021 428 PD
+24 W
+3052 430 PD
+24 W
+3078 430 PD
+24 W
+3105 431 PD
+24 W
+3133 433 PD
+24 W
+3163 435 PD
+24 W
+3191 436 PD
+24 W
+3220 437 PD
+24 W
+3249 439 PD
+24 W
+3280 446 PD
+24 W
+3308 454 PD
+24 W
+3336 462 PD
+24 W
+3364 470 PD
+24 W
+3395 480 PD
+24 W
+3426 489 PD
+24 W
+3455 500 PD
+24 W
+3483 511 PD
+24 W
+3513 526 PD
+24 W
+3543 538 PD
+24 W
+3572 548 PD
+24 W
+3601 559 PD
+24 W
+3631 570 PD
+24 W
+3660 579 PD
+24 W
+3688 588 PD
+24 W
+3716 598 PD
+24 W
+3747 610 PD
+24 W
+3777 622 PD
+24 W
+3808 634 PD
+24 W
+3838 647 PD
+24 W
+3870 659 PD
+24 W
+3897 670 PD
+24 W
+3924 681 PD
+24 W
+3951 692 PD
+24 W
+3980 702 PD
+24 W
+4007 714 PD
+24 W
+4035 728 PD
+24 W
+4066 742 PD
+24 W
+4096 756 PD
+24 W
+4123 773 PD
+24 W
+4149 791 PD
+24 W
+4174 810 PD
+24 W
+4193 828 PD
+24 W
+4214 846 PD
+24 W
+4236 864 PD
+24 W
+4261 883 PD
+24 W
+4282 901 PD
+24 W
+4303 921 PD
+24 W
+4324 940 PD
+24 W
+4342 959 PD
+24 W
+4356 977 PD
+24 W
+4372 996 PD
+24 W
+4387 1015 PD
+24 W
+4398 1033 PD
+24 W
+4408 1051 PD
+24 W
+4419 1069 PD
+24 W
+4430 1088 PD
+24 W
+4440 1107 PD
+24 W
+4448 1127 PD
+24 W
+4454 1145 PD
+24 W
+4457 1163 PD
+24 W
+4457 1183 PD
+24 W
+4464 1202 PD
+24 W
+4467 1220 PD
+24 W
+4466 1238 PD
+24 W
+4427 1276 PD
+24 W
+4459 1263 PD
+24 W
+4477 1281 PD
+24 W
+4496 1299 PD
+24 W
+4510 1319 PD
+24 W
+4526 1338 PD
+24 W
+4540 1356 PD
+24 W
+4553 1374 PD
+24 W
+4564 1392 PD
+24 W
+4567 1411 PD
+24 W
+4571 1429 PD
+24 W
+4599 1438 PD
+24 W
+4598 1455 PD
+24 W
+4595 1473 PD
+24 W
+4623 1491 PD
+24 W
+4652 1493 PD
+24 W
+4681 1496 PD
+24 W
+4709 1497 PD
+24 W
+4737 1500 PD
+24 W
+4765 1504 PD
+24 W
+4792 1505 PD
+24 W
+4819 1508 PD
+24 W
+4846 1512 PD
+24 W
+4847 1520 PD
+24 W
+4873 1522 PD
+24 W
+4896 1541 PD
+24 W
+4912 1560 PD
+24 W
+4929 1579 PD
+24 W
+4927 1596 PD
+24 W
+4926 1597 PD
+24 W
+4930 1615 PD
+24 W
+4936 1633 PD
+24 W
+4929 1651 PD
+24 W
+4918 1669 PD
+24 W
+4905 1688 PD
+24 W
+4907 1706 PD
+24 W
+4901 1725 PD
+24 W
+4886 1744 PD
+24 W
+4873 1762 PD
+24 W
+4860 1781 PD
+24 W
+4851 1799 PD
+24 W
+4866 1817 PD
+24 W
+4893 1816 PD
+24 W
+4921 1812 PD
+24 W
+4952 1806 PD
+24 W
+4979 1800 PD
+24 W
+5007 1794 PD
+24 W
+5034 1791 PD
+24 W
+5063 1787 PD
+24 W
+5091 1786 PD
+24 W
+5122 1786 PD
+24 W
+5151 1784 PD
+24 W
+5181 1784 PD
+24 W
+5211 1786 PD
+24 W
+5239 1796 PD
+24 W
+5261 1815 PD
+24 W
+5284 1833 PD
+24 W
+5311 1845 PD
+24 W
+5338 1851 PD
+24 W
+5368 1857 PD
+24 W
+5395 1866 PD
+24 W
+5402 1868 PD
+24 W
+5414 1885 PD
+24 W
+5430 1905 PD
+24 W
+5446 1924 PD
+24 W
+5465 1942 PD
+24 W
+5483 1962 PD
+24 W
+5504 1980 PD
+24 W
+5526 1998 PD
+24 W
+5543 2018 PD
+24 W
+5554 2038 PD
+24 W
+5565 2058 PD
+24 W
+5576 2077 PD
+24 W
+5589 2095 PD
+24 W
+5602 2113 PD
+24 W
+5610 2131 PD
+24 W
+5620 2149 PD
+24 W
+5626 2168 PD
+24 W
+5630 2186 PD
+24 W
+5636 2204 PD
+24 W
+5640 2223 PD
+24 W
+5644 2241 PD
+24 W
+5651 2257 PD
+24 W
+5651 2260 PD
+24 W
+5652 2278 PD
+24 W
+5653 2297 PD
+24 W
+5651 2315 PD
+24 W
+5647 2334 PD
+24 W
+5640 2352 PD
+24 W
+5625 2370 PD
+24 W
+5615 2389 PD
+24 W
+5625 2408 PD
+24 W
+5626 2426 PD
+24 W
+5615 2445 PD
+24 W
+5609 2462 PD
+24 W
+5620 2481 PD
+24 W
+5627 2500 PD
+24 W
+5622 2518 PD
+24 W
+5613 2536 PD
+24 W
+5605 2556 PD
+24 W
+5600 2574 PD
+24 W
+5591 2593 PD
+24 W
+5583 2612 PD
+24 W
+5583 2630 PD
+24 W
+5597 2648 PD
+24 W
+5611 2667 PD
+24 W
+5618 2686 PD
+24 W
+5616 2704 PD
+24 W
+5622 2722 PD
+24 W
+5635 2741 PD
+24 W
+5654 2760 PD
+24 W
+5668 2777 PD
+24 W
+5684 2796 PD
+24 W
+5712 2814 PD
+24 W
+5741 2817 PD
+24 W
+5769 2813 PD
+24 W
+5796 2806 PD
+24 W
+5823 2798 PD
+24 W
+5851 2791 PD
+24 W
+5881 2786 PD
+24 W
+5909 2778 PD
+24 W
+5936 2770 PD
+24 W
+5963 2759 PD
+24 W
+5985 2742 PD
+24 W
+5990 2739 PD
+24 W
+6016 2732 PD
+24 W
+6045 2721 PD
+24 W
+6072 2719 PD
+24 W
+6101 2720 PD
+24 W
+6129 2726 PD
+24 W
+6157 2730 PD
+24 W
+6184 2734 PD
+24 W
+6211 2742 PD
+24 W
+6238 2751 PD
+24 W
+1014 2912 PD
+24 W
+1014 2913 PD
+24 W
+1042 2922 PD
+24 W
+1071 2931 PD
+24 W
+1098 2935 PD
+24 W
+1125 2942 PD
+24 W
+1154 2952 PD
+24 W
+1166 2971 PD
+24 W
+1192 2989 PD
+24 W
+1219 2995 PD
+24 W
+1248 2999 PD
+24 W
+1277 3003 PD
+24 W
+1307 3006 PD
+24 W
+1337 3005 PD
+24 W
+1367 3006 PD
+24 W
+1394 3007 PD
+24 W
+1424 3011 PD
+24 W
+1454 3019 PD
+24 W
+1484 3028 PD
+24 W
+1511 3036 PD
+24 W
+1540 3047 PD
+24 W
+1568 3055 PD
+24 W
+1595 3062 PD
+24 W
+1622 3065 PD
+24 W
+1652 3071 PD
+24 W
+1678 3075 PD
+24 W
+1709 3082 PD
+24 W
+1736 3088 PD
+24 W
+1764 3095 PD
+24 W
+1772 3076 PD
+24 W
+1756 3056 PD
+24 W
+1735 3037 PD
+24 W
+1712 3017 PD
+24 W
+1689 2998 PD
+24 W
+1668 2980 PD
+24 W
+1645 2960 PD
+24 W
+1631 2941 PD
+24 W
+1622 2921 PD
+24 W
+1611 2904 PD
+24 W
+1602 2886 PD
+24 W
+1589 2867 PD
+24 W
+1570 2848 PD
+24 W
+1549 2829 PD
+24 W
+1523 2810 PD
+24 W
+1502 2792 PD
+24 W
+1482 2772 PD
+24 W
+1464 2753 PD
+24 W
+1454 2735 PD
+24 W
+1448 2716 PD
+24 W
+1442 2698 PD
+24 W
+1437 2678 PD
+24 W
+1427 2658 PD
+24 W
+1419 2640 PD
+24 W
+1406 2620 PD
+24 W
+1390 2602 PD
+24 W
+1365 2584 PD
+24 W
+1334 2569 PD
+24 W
+1304 2558 PD
+24 W
+1276 2543 PD
+24 W
+1259 2525 PD
+24 W
+1255 2505 PD
+24 W
+1255 2487 PD
+24 W
+1258 2467 PD
+24 W
+1262 2449 PD
+24 W
+1266 2430 PD
+24 W
+1272 2411 PD
+24 W
+1275 2392 PD
+24 W
+1279 2374 PD
+24 W
+1252 2371 PD
+24 W
+1222 2365 PD
+24 W
+1194 2357 PD
+24 W
+1167 2348 PD
+24 W
+1151 2340 PD
+24 W
+1139 2329 PD
+24 W
+1111 2310 PD
+24 W
+1090 2293 PD
+24 W
+1067 2274 PD
+24 W
+1049 2255 PD
+24 W
+1030 2236 PD
+24 W
+1012 2219 PD
+24 W
+994 2199 PD
+24 W
+981 2181 PD
+24 W
+966 2162 PD
+24 W
+950 2144 PD
+24 W
+938 2127 PD
+24 W
+928 2108 PD
+24 W
+920 2090 PD
+24 W
+913 2073 PD
+24 W
+906 1382 PD
+24 W
+906 1381 PD
+24 W
+924 1362 PD
+24 W
+939 1344 PD
+24 W
+961 1325 PD
+24 W
+978 1306 PD
+24 W
+991 1288 PD
+24 W
+1001 1271 PD
+24 W
+1009 1253 PD
+24 W
+1017 1235 PD
+24 W
+1025 1217 PD
+24 W
+1035 1199 PD
+24 W
+1046 1181 PD
+24 W
+1059 1162 PD
+24 W
+1074 1144 PD
+24 W
+1096 1126 PD
+24 W
+1109 1109 PD
+24 W
+1114 1091 PD
+24 W
+1114 1073 PD
+24 W
+1112 1054 PD
+24 W
+1110 1034 PD
+24 W
+1110 1014 PD
+24 W
+1116 994 PD
+24 W
+1125 975 PD
+24 W
+1132 956 PD
+24 W
+1144 936 PD
+24 W
+1159 917 PD
+24 W
+1172 899 PD
+24 W
+1188 882 PD
+24 W
+1203 864 PD
+24 W
+1215 845 PD
+24 W
+1227 827 PD
+24 W
+1243 808 PD
+24 W
+1260 789 PD
+24 W
+1276 772 PD
+24 W
+1291 753 PD
+24 W
+1303 735 PD
+24 W
+1317 718 PD
+24 W
+1328 700 PD
+24 W
+1338 681 PD
+24 W
+1348 662 PD
+24 W
+1356 644 PD
+24 W
+1364 626 PD
+24 W
+1366 608 PD
+24 W
+1371 588 PD
+24 W
+1374 570 PD
+24 W
+1384 552 PD
+24 W
+1411 539 PD
+24 W
+1439 532 PD
+24 W
+1467 530 PD
+24 W
+1496 530 PD
+24 W
+1524 532 PD
+24 W
+1552 535 PD
+24 W
+1582 544 PD
+24 W
+1609 554 PD
+24 W
+1633 572 PD
+24 W
+1656 590 PD
+24 W
+1676 608 PD
+24 W
+1702 625 PD
+24 W
+1729 631 PD
+24 W
+1739 613 PD
+24 W
+1766 610 PD
+24 W
+1781 592 PD
+24 W
+1807 574 PD
+24 W
+1835 563 PD
+24 W
+1853 544 PD
+24 W
+1856 527 PD
+24 W
+1861 509 PD
+24 W
+1858 490 PD
+24 W
+1870 471 PD
+24 W
+1891 454 PD
+24 W
+1905 436 PD
+24 W
+1913 417 PD
+24 W
+1926 398 PD
+24 W
+3442 396 PD
+24 W
+3442 394 PD
+24 W
+3471 394 PD
+24 W
+3500 405 PD
+24 W
+3529 420 PD
+24 W
+3551 438 PD
+24 W
+3577 452 PD
+24 W
+3605 469 PD
+24 W
+3633 481 PD
+24 W
+3662 489 PD
+24 W
+3690 494 PD
+24 W
+3719 501 PD
+24 W
+3749 511 PD
+24 W
+3776 522 PD
+24 W
+3806 532 PD
+24 W
+3836 542 PD
+24 W
+3864 549 PD
+24 W
+3891 556 PD
+24 W
+3919 564 PD
+24 W
+3947 577 PD
+24 W
+3976 592 PD
+24 W
+4006 607 PD
+24 W
+4033 620 PD
+24 W
+4063 633 PD
+24 W
+4091 646 PD
+24 W
+4118 660 PD
+24 W
+4148 673 PD
+24 W
+4176 688 PD
+24 W
+4200 706 PD
+24 W
+4228 723 PD
+24 W
+4254 737 PD
+24 W
+4282 752 PD
+24 W
+4308 770 PD
+24 W
+4328 787 PD
+24 W
+4352 805 PD
+24 W
+4375 824 PD
+24 W
+4395 843 PD
+24 W
+4414 861 PD
+24 W
+4433 880 PD
+24 W
+4445 898 PD
+24 W
+4455 918 PD
+24 W
+4467 937 PD
+24 W
+4485 957 PD
+24 W
+4498 976 PD
+24 W
+4512 995 PD
+24 W
+4526 1013 PD
+24 W
+4540 1030 PD
+24 W
+4551 1049 PD
+24 W
+4561 1068 PD
+24 W
+4567 1086 PD
+24 W
+4575 1104 PD
+24 W
+4585 1123 PD
+24 W
+4587 1142 PD
+24 W
+4583 1159 PD
+24 W
+4574 1177 PD
+24 W
+4565 1195 PD
+24 W
+4551 1214 PD
+24 W
+4574 1191 PD
+24 W
+4573 1190 PD
+24 W
+4551 1208 PD
+24 W
+4544 1226 PD
+24 W
+4544 1245 PD
+24 W
+4550 1262 PD
+24 W
+4557 1280 PD
+24 W
+4569 1299 PD
+24 W
+4580 1316 PD
+24 W
+4592 1335 PD
+24 W
+4604 1353 PD
+24 W
+4616 1371 PD
+24 W
+4624 1390 PD
+24 W
+4632 1409 PD
+24 W
+4639 1426 PD
+24 W
+4657 1444 PD
+24 W
+4684 1443 PD
+24 W
+4713 1443 PD
+24 W
+4741 1456 PD
+24 W
+4769 1470 PD
+24 W
+4796 1477 PD
+24 W
+4823 1475 PD
+24 W
+4850 1463 PD
+24 W
+4877 1465 PD
+24 W
+4879 1465 PD
+24 W
+4905 1470 PD
+24 W
+4932 1489 PD
+24 W
+4953 1508 PD
+24 W
+4974 1526 PD
+24 W
+4987 1544 PD
+24 W
+4997 1561 PD
+24 W
+5001 1579 PD
+24 W
+5004 1593 PD
+24 W
+5002 1598 PD
+24 W
+5000 1616 PD
+24 W
+4998 1635 PD
+24 W
+4991 1653 PD
+24 W
+4982 1671 PD
+24 W
+4969 1689 PD
+24 W
+4952 1707 PD
+24 W
+4937 1725 PD
+24 W
+4922 1743 PD
+24 W
+4914 1761 PD
+24 W
+4941 1761 PD
+24 W
+4970 1749 PD
+24 W
+4997 1742 PD
+24 W
+5028 1736 PD
+24 W
+5059 1732 PD
+24 W
+5089 1729 PD
+24 W
+5116 1724 PD
+24 W
+5144 1722 PD
+24 W
+5172 1720 PD
+24 W
+5200 1718 PD
+24 W
+5227 1716 PD
+24 W
+5255 1721 PD
+24 W
+5282 1729 PD
+24 W
+5309 1742 PD
+24 W
+5336 1761 PD
+24 W
+5359 1779 PD
+24 W
+5384 1797 PD
+24 W
+5413 1810 PD
+24 W
+5440 1824 PD
+24 W
+5468 1837 PD
+24 W
+5494 1853 PD
+24 W
+5497 1854 PD
+24 W
+5526 1852 PD
+24 W
+5553 1862 PD
+24 W
+5576 1881 PD
+24 W
+5595 1898 PD
+24 W
+5613 1918 PD
+24 W
+5625 1935 PD
+24 W
+5636 1954 PD
+24 W
+5646 1973 PD
+24 W
+5655 1992 PD
+24 W
+5663 2010 PD
+24 W
+5668 2029 PD
+24 W
+5675 2047 PD
+24 W
+5683 2065 PD
+24 W
+5690 2084 PD
+24 W
+5697 2102 PD
+24 W
+5705 2121 PD
+24 W
+5716 2139 PD
+24 W
+5722 2157 PD
+24 W
+5726 2175 PD
+24 W
+5727 2194 PD
+24 W
+5727 2212 PD
+24 W
+5728 2230 PD
+24 W
+5727 2248 PD
+24 W
+5726 2251 PD
+24 W
+5710 2267 PD
+24 W
+5696 2285 PD
+24 W
+5689 2304 PD
+24 W
+5681 2322 PD
+24 W
+5673 2341 PD
+24 W
+5662 2360 PD
+24 W
+5653 2378 PD
+24 W
+5668 2395 PD
+24 W
+5671 2413 PD
+24 W
+5665 2431 PD
+24 W
+5659 2448 PD
+24 W
+5668 2466 PD
+24 W
+5677 2485 PD
+24 W
+5681 2505 PD
+24 W
+5681 2523 PD
+24 W
+5680 2541 PD
+24 W
+5675 2560 PD
+24 W
+5670 2580 PD
+24 W
+5664 2598 PD
+24 W
+5658 2616 PD
+24 W
+5654 2635 PD
+24 W
+5681 2649 PD
+24 W
+5710 2646 PD
+24 W
+5737 2656 PD
+24 W
+5763 2675 PD
+24 W
+5790 2689 PD
+24 W
+5818 2699 PD
+24 W
+5845 2702 PD
+24 W
+5873 2710 PD
+24 W
+5901 2706 PD
+24 W
+5931 2700 PD
+24 W
+5961 2693 PD
+24 W
+5990 2682 PD
+24 W
+6018 2676 PD
+24 W
+6047 2674 PD
+24 W
+6076 2667 PD
+24 W
+6103 2666 PD
+24 W
+6133 2663 PD
+24 W
+6160 2657 PD
+24 W
+6189 2655 PD
+24 W
+6218 2656 PD
+24 W
+6245 2661 PD
+24 W
+918 2829 PD
+24 W
+946 2846 PD
+24 W
+975 2857 PD
+24 W
+1002 2861 PD
+24 W
+1031 2859 PD
+24 W
+1058 2864 PD
+24 W
+1080 2882 PD
+24 W
+1110 2891 PD
+24 W
+1141 2891 PD
+24 W
+1168 2891 PD
+24 W
+1196 2898 PD
+24 W
+1208 2915 PD
+24 W
+1215 2933 PD
+24 W
+1232 2952 PD
+24 W
+1259 2954 PD
+24 W
+1287 2949 PD
+24 W
+1315 2954 PD
+24 W
+1342 2961 PD
+24 W
+1372 2963 PD
+24 W
+1399 2966 PD
+24 W
+1427 2967 PD
+24 W
+1454 2968 PD
+24 W
+1481 2973 PD
+24 W
+1510 2975 PD
+24 W
+1538 2978 PD
+24 W
+1566 2978 PD
+24 W
+1567 2959 PD
+24 W
+1556 2941 PD
+24 W
+1543 2922 PD
+24 W
+1532 2903 PD
+24 W
+1522 2885 PD
+24 W
+1509 2867 PD
+24 W
+1489 2848 PD
+24 W
+1469 2829 PD
+24 W
+1450 2810 PD
+24 W
+1434 2791 PD
+24 W
+1421 2773 PD
+24 W
+1410 2756 PD
+24 W
+1398 2737 PD
+24 W
+1389 2718 PD
+24 W
+1379 2700 PD
+24 W
+1369 2679 PD
+24 W
+1359 2660 PD
+24 W
+1348 2641 PD
+24 W
+1319 2621 PD
+24 W
+1292 2609 PD
+24 W
+1263 2590 PD
+24 W
+1243 2572 PD
+24 W
+1230 2554 PD
+24 W
+1216 2536 PD
+24 W
+1206 2516 PD
+24 W
+1198 2498 PD
+24 W
+1191 2479 PD
+24 W
+1188 2461 PD
+24 W
+1188 2442 PD
+24 W
+1190 2424 PD
+24 W
+1194 2405 PD
+24 W
+1188 2386 PD
+24 W
+1161 2380 PD
+24 W
+1133 2364 PD
+24 W
+1104 2355 PD
+24 W
+1076 2343 PD
+24 W
+1049 2325 PD
+24 W
+1028 2307 PD
+24 W
+1012 2290 PD
+24 W
+994 2270 PD
+24 W
+978 2252 PD
+24 W
+960 2233 PD
+24 W
+945 2215 PD
+24 W
+927 2197 PD
+24 W
+903 2780 PD
+24 W
+903 2781 PD
+24 W
+931 2785 PD
+24 W
+958 2794 PD
+24 W
+985 2808 PD
+24 W
+1014 2814 PD
+24 W
+1040 2812 PD
+24 W
+1068 2819 PD
+24 W
+1096 2830 PD
+24 W
+1125 2834 PD
+24 W
+1153 2834 PD
+24 W
+1182 2841 PD
+24 W
+1209 2854 PD
+24 W
+1236 2873 PD
+24 W
+1266 2880 PD
+24 W
+1292 2888 PD
+24 W
+1319 2902 PD
+24 W
+1347 2909 PD
+24 W
+1374 2913 PD
+24 W
+1404 2917 PD
+24 W
+1434 2915 PD
+24 W
+1438 2896 PD
+24 W
+1414 2878 PD
+24 W
+1397 2859 PD
+24 W
+1384 2841 PD
+24 W
+1373 2822 PD
+24 W
+1369 2802 PD
+24 W
+1366 2782 PD
+24 W
+1349 2764 PD
+24 W
+1330 2747 PD
+24 W
+1312 2729 PD
+24 W
+1296 2711 PD
+24 W
+1283 2692 PD
+24 W
+1269 2674 PD
+24 W
+1247 2656 PD
+24 W
+1226 2636 PD
+24 W
+1211 2618 PD
+24 W
+1193 2601 PD
+24 W
+1173 2583 PD
+24 W
+1160 2565 PD
+24 W
+1145 2546 PD
+24 W
+1130 2527 PD
+24 W
+1123 2508 PD
+24 W
+1119 2488 PD
+24 W
+1117 2470 PD
+24 W
+1118 2451 PD
+24 W
+1120 2433 PD
+24 W
+1123 2415 PD
+24 W
+1123 2397 PD
+24 W
+1095 2385 PD
+24 W
+1067 2373 PD
+24 W
+1039 2361 PD
+24 W
+1014 2343 PD
+24 W
+1001 2325 PD
+24 W
+973 2316 PD
+24 W
+961 2298 PD
+24 W
+946 2279 PD
+24 W
+925 2262 PD
+24 W
+902 2702 PD
+24 W
+929 2719 PD
+24 W
+957 2732 PD
+24 W
+985 2744 PD
+24 W
+1012 2756 PD
+24 W
+1042 2761 PD
+24 W
+1072 2765 PD
+24 W
+1101 2774 PD
+24 W
+1128 2784 PD
+24 W
+1159 2787 PD
+24 W
+1186 2789 PD
+24 W
+1214 2796 PD
+24 W
+1243 2808 PD
+24 W
+1272 2819 PD
+24 W
+1286 2801 PD
+24 W
+1276 2782 PD
+24 W
+1264 2762 PD
+24 W
+1251 2743 PD
+24 W
+1233 2723 PD
+24 W
+1214 2704 PD
+24 W
+1196 2685 PD
+24 W
+1180 2666 PD
+24 W
+1162 2648 PD
+24 W
+1143 2629 PD
+24 W
+1124 2611 PD
+24 W
+1104 2591 PD
+24 W
+1086 2572 PD
+24 W
+1070 2554 PD
+24 W
+1057 2536 PD
+24 W
+1050 2518 PD
+24 W
+1051 2500 PD
+24 W
+1054 2483 PD
+24 W
+1053 2465 PD
+24 W
+1057 2446 PD
+24 W
+1067 2428 PD
+24 W
+1044 2410 PD
+24 W
+1017 2397 PD
+24 W
+990 2389 PD
+24 W
+965 2371 PD
+24 W
+936 2355 PD
+24 W
+909 2338 PD
+24 W
+905 2612 PD
+24 W
+925 2631 PD
+24 W
+947 2652 PD
+24 W
+961 2670 PD
+24 W
+988 2686 PD
+24 W
+1017 2702 PD
+24 W
+1044 2705 PD
+24 W
+1071 2711 PD
+24 W
+1098 2722 PD
+24 W
+1125 2729 PD
+24 W
+1153 2734 PD
+24 W
+1182 2742 PD
+24 W
+1176 2723 PD
+24 W
+1161 2704 PD
+24 W
+1144 2684 PD
+24 W
+1124 2666 PD
+24 W
+1106 2648 PD
+24 W
+1086 2629 PD
+24 W
+1065 2610 PD
+24 W
+1054 2591 PD
+24 W
+1038 2573 PD
+24 W
+1019 2554 PD
+24 W
+1004 2536 PD
+24 W
+994 2517 PD
+24 W
+991 2498 PD
+24 W
+989 2480 PD
+24 W
+989 2462 PD
+24 W
+984 2442 PD
+24 W
+964 2425 PD
+24 W
+938 2412 PD
+24 W
+911 1183 PD
+24 W
+920 1183 PD
+24 W
+939 1162 PD
+24 W
+959 1142 PD
+24 W
+981 1124 PD
+24 W
+1000 1106 PD
+24 W
+1018 1087 PD
+24 W
+1033 1068 PD
+24 W
+1038 1049 PD
+24 W
+1039 1031 PD
+24 W
+1037 1011 PD
+24 W
+1041 993 PD
+24 W
+1047 975 PD
+24 W
+1050 957 PD
+24 W
+1060 939 PD
+24 W
+1078 921 PD
+24 W
+1102 902 PD
+24 W
+1125 883 PD
+24 W
+1125 865 PD
+24 W
+1140 846 PD
+24 W
+1168 833 PD
+24 W
+1190 815 PD
+24 W
+1196 796 PD
+24 W
+1197 778 PD
+24 W
+1212 759 PD
+24 W
+1240 749 PD
+24 W
+1241 731 PD
+24 W
+1251 713 PD
+24 W
+1279 702 PD
+24 W
+1290 683 PD
+24 W
+1299 664 PD
+24 W
+1316 646 PD
+24 W
+1330 627 PD
+24 W
+1333 608 PD
+24 W
+1329 591 PD
+24 W
+1325 572 PD
+24 W
+1316 554 PD
+24 W
+1308 536 PD
+24 W
+1308 517 PD
+24 W
+1304 500 PD
+24 W
+1277 487 PD
+24 W
+1267 504 PD
+24 W
+1239 510 PD
+24 W
+1212 527 PD
+24 W
+1185 538 PD
+24 W
+1159 549 PD
+24 W
+1155 567 PD
+24 W
+1128 581 PD
+24 W
+1114 599 PD
+24 W
+1116 617 PD
+24 W
+1098 636 PD
+24 W
+1107 655 PD
+24 W
+1113 673 PD
+24 W
+1099 691 PD
+24 W
+1072 706 PD
+24 W
+1044 720 PD
+24 W
+1046 737 PD
+24 W
+1039 755 PD
+24 W
+1011 769 PD
+24 W
+1021 788 PD
+24 W
+1022 806 PD
+24 W
+1006 824 PD
+24 W
+998 842 PD
+24 W
+995 859 PD
+24 W
+989 877 PD
+24 W
+973 896 PD
+24 W
+956 913 PD
+24 W
+927 929 PD
+24 W
+1043 883 PD
+24 W
+1042 883 PD
+24 W
+1070 877 PD
+24 W
+1079 858 PD
+24 W
+1082 840 PD
+24 W
+1082 823 PD
+24 W
+1112 810 PD
+24 W
+1131 792 PD
+24 W
+1134 773 PD
+24 W
+1147 755 PD
+24 W
+1169 736 PD
+24 W
+1189 719 PD
+24 W
+1216 712 PD
+24 W
+1226 693 PD
+24 W
+1238 674 PD
+24 W
+1259 656 PD
+24 W
+1265 638 PD
+24 W
+1266 619 PD
+24 W
+1264 601 PD
+24 W
+1263 584 PD
+24 W
+1268 565 PD
+24 W
+1241 548 PD
+24 W
+1213 560 PD
+24 W
+1201 578 PD
+24 W
+1173 595 PD
+24 W
+1150 613 PD
+24 W
+1148 630 PD
+24 W
+1144 649 PD
+24 W
+1148 667 PD
+24 W
+1161 685 PD
+24 W
+1159 703 PD
+24 W
+1131 710 PD
+24 W
+1109 727 PD
+24 W
+1101 745 PD
+24 W
+1086 765 PD
+24 W
+1058 783 PD
+24 W
+1048 802 PD
+24 W
+1048 821 PD
+24 W
+1044 839 PD
+24 W
+1034 857 PD
+24 W
+905 866 PD
+24 W
+904 866 PD
+24 W
+927 848 PD
+24 W
+947 830 PD
+24 W
+952 812 PD
+24 W
+960 793 PD
+24 W
+952 774 PD
+24 W
+946 757 PD
+24 W
+975 742 PD
+24 W
+992 724 PD
+24 W
+993 706 PD
+24 W
+1021 694 PD
+24 W
+1048 687 PD
+24 W
+1076 669 PD
+24 W
+1086 650 PD
+24 W
+1078 633 PD
+24 W
+1063 615 PD
+24 W
+1065 597 PD
+24 W
+1060 580 PD
+24 W
+1089 570 PD
+24 W
+1116 561 PD
+24 W
+1108 542 PD
+24 W
+1108 524 PD
+24 W
+1137 515 PD
+24 W
+1166 510 PD
+24 W
+1194 502 PD
+24 W
+1212 484 PD
+24 W
+1214 466 PD
+24 W
+1241 458 PD
+24 W
+1269 452 PD
+24 W
+1297 441 PD
+24 W
+1322 424 PD
+24 W
+1340 405 PD
+24 W
+3741 395 PD
+24 W
+3741 394 PD
+24 W
+3762 412 PD
+24 W
+3790 424 PD
+24 W
+3819 428 PD
+24 W
+3848 432 PD
+24 W
+3877 440 PD
+24 W
+3905 452 PD
+24 W
+3930 470 PD
+24 W
+3955 488 PD
+24 W
+3975 505 PD
+24 W
+4002 519 PD
+24 W
+4031 528 PD
+24 W
+4058 534 PD
+24 W
+4086 540 PD
+24 W
+4113 548 PD
+24 W
+4140 559 PD
+24 W
+4170 574 PD
+24 W
+4198 591 PD
+24 W
+4225 607 PD
+24 W
+4253 624 PD
+24 W
+4281 639 PD
+24 W
+4307 653 PD
+24 W
+4336 669 PD
+24 W
+4363 681 PD
+24 W
+4391 696 PD
+24 W
+4419 711 PD
+24 W
+4448 724 PD
+24 W
+4476 742 PD
+24 W
+4497 762 PD
+24 W
+4509 780 PD
+24 W
+4517 798 PD
+24 W
+4529 818 PD
+24 W
+4541 835 PD
+24 W
+4554 853 PD
+24 W
+4563 872 PD
+24 W
+4570 891 PD
+24 W
+4578 910 PD
+24 W
+4589 929 PD
+24 W
+4601 947 PD
+24 W
+4612 966 PD
+24 W
+4624 983 PD
+24 W
+4635 1001 PD
+24 W
+4646 1020 PD
+24 W
+4659 1039 PD
+24 W
+4668 1057 PD
+24 W
+4672 1075 PD
+24 W
+4679 1093 PD
+24 W
+4680 1111 PD
+24 W
+4682 1129 PD
+24 W
+4678 1147 PD
+24 W
+4669 1164 PD
+24 W
+4670 1166 PD
+24 W
+4654 1183 PD
+24 W
+4638 1201 PD
+24 W
+4627 1220 PD
+24 W
+4623 1237 PD
+24 W
+4623 1255 PD
+24 W
+4632 1274 PD
+24 W
+4645 1292 PD
+24 W
+4660 1310 PD
+24 W
+4669 1329 PD
+24 W
+4670 1346 PD
+24 W
+4696 1364 PD
+24 W
+4708 1382 PD
+24 W
+4735 1397 PD
+24 W
+4762 1408 PD
+24 W
+4789 1406 PD
+24 W
+4816 1404 PD
+24 W
+4843 1408 PD
+24 W
+4847 1407 PD
+24 W
+4872 1409 PD
+24 W
+4899 1415 PD
+24 W
+4927 1431 PD
+24 W
+4956 1445 PD
+24 W
+4983 1456 PD
+24 W
+5008 1475 PD
+24 W
+5030 1494 PD
+24 W
+5043 1511 PD
+24 W
+5055 1530 PD
+24 W
+5060 1547 PD
+24 W
+5062 1565 PD
+24 W
+5063 1583 PD
+24 W
+5061 1602 PD
+24 W
+5059 1618 PD
+24 W
+5056 1619 PD
+24 W
+5049 1637 PD
+24 W
+5037 1655 PD
+24 W
+5018 1673 PD
+24 W
+4995 1690 PD
+24 W
+4979 1709 PD
+24 W
+5008 1714 PD
+24 W
+5036 1704 PD
+24 W
+5064 1697 PD
+24 W
+5094 1692 PD
+24 W
+5127 1687 PD
+24 W
+5155 1681 PD
+24 W
+5184 1673 PD
+24 W
+5210 1664 PD
+24 W
+5238 1660 PD
+24 W
+5266 1657 PD
+24 W
+5293 1661 PD
+24 W
+5321 1670 PD
+24 W
+5348 1683 PD
+24 W
+5376 1699 PD
+24 W
+5403 1715 PD
+24 W
+5431 1730 PD
+24 W
+5457 1748 PD
+24 W
+5470 1766 PD
+24 W
+5498 1777 PD
+24 W
+5525 1770 PD
+24 W
+5537 1765 PD
+24 W
+5555 1765 PD
+24 W
+5583 1768 PD
+24 W
+5611 1780 PD
+24 W
+5640 1794 PD
+24 W
+5663 1813 PD
+24 W
+5682 1831 PD
+24 W
+5698 1850 PD
+24 W
+5709 1869 PD
+24 W
+5723 1887 PD
+24 W
+5734 1906 PD
+24 W
+5744 1924 PD
+24 W
+5754 1943 PD
+24 W
+5763 1961 PD
+24 W
+5774 1980 PD
+24 W
+5784 1998 PD
+24 W
+5792 2017 PD
+24 W
+5800 2035 PD
+24 W
+5806 2053 PD
+24 W
+5812 2072 PD
+24 W
+5815 2091 PD
+24 W
+5816 2110 PD
+24 W
+5822 2128 PD
+24 W
+5822 2147 PD
+24 W
+5819 2166 PD
+24 W
+5809 2183 PD
+24 W
+5800 2199 PD
+24 W
+5798 2201 PD
+24 W
+5798 2220 PD
+24 W
+5795 2238 PD
+24 W
+5780 2256 PD
+24 W
+5772 2274 PD
+24 W
+5762 2294 PD
+24 W
+5755 2311 PD
+24 W
+5748 2330 PD
+24 W
+5740 2348 PD
+24 W
+5731 2366 PD
+24 W
+5735 2384 PD
+24 W
+5744 2404 PD
+24 W
+5732 2422 PD
+24 W
+5728 2441 PD
+24 W
+5747 2459 PD
+24 W
+5755 2478 PD
+24 W
+5754 2497 PD
+24 W
+5751 2517 PD
+24 W
+5746 2536 PD
+24 W
+5748 2554 PD
+24 W
+5767 2571 PD
+24 W
+5796 2584 PD
+24 W
+5823 2591 PD
+24 W
+5851 2605 PD
+24 W
+5874 2623 PD
+24 W
+5902 2637 PD
+24 W
+5930 2648 PD
+24 W
+5961 2646 PD
+24 W
+5992 2641 PD
+24 W
+6020 2635 PD
+24 W
+6051 2628 PD
+24 W
+6082 2621 PD
+24 W
+6111 2616 PD
+24 W
+6138 2614 PD
+24 W
+6166 2610 PD
+24 W
+6196 2611 PD
+24 W
+6225 2613 PD
+24 W
+6251 2614 PD
+24 W
+4022 394 PD
+24 W
+4018 397 PD
+24 W
+4048 410 PD
+24 W
+4076 423 PD
+24 W
+4103 435 PD
+24 W
+4131 443 PD
+24 W
+4158 454 PD
+24 W
+4186 464 PD
+24 W
+4214 475 PD
+24 W
+4242 485 PD
+24 W
+4269 496 PD
+24 W
+4296 507 PD
+24 W
+4319 525 PD
+24 W
+4336 546 PD
+24 W
+4349 563 PD
+24 W
+4365 581 PD
+24 W
+4380 599 PD
+24 W
+4399 617 PD
+24 W
+4427 636 PD
+24 W
+4455 653 PD
+24 W
+4483 665 PD
+24 W
+4510 677 PD
+24 W
+4537 685 PD
+24 W
+4564 694 PD
+24 W
+4589 713 PD
+24 W
+4601 732 PD
+24 W
+4609 750 PD
+24 W
+4617 768 PD
+24 W
+4626 786 PD
+24 W
+4635 805 PD
+24 W
+4642 823 PD
+24 W
+4648 841 PD
+24 W
+4660 860 PD
+24 W
+4669 879 PD
+24 W
+4682 898 PD
+24 W
+4697 916 PD
+24 W
+4715 934 PD
+24 W
+4725 953 PD
+24 W
+4740 970 PD
+24 W
+4751 988 PD
+24 W
+4775 1008 PD
+24 W
+4792 1026 PD
+24 W
+4802 1044 PD
+24 W
+4800 1063 PD
+24 W
+4801 1081 PD
+24 W
+4793 1097 PD
+24 W
+4790 1101 PD
+24 W
+4785 1119 PD
+24 W
+4778 1138 PD
+24 W
+4768 1157 PD
+24 W
+4756 1175 PD
+24 W
+4733 1194 PD
+24 W
+4711 1213 PD
+24 W
+4718 1230 PD
+24 W
+4708 1249 PD
+24 W
+4707 1268 PD
+24 W
+4704 1287 PD
+24 W
+4717 1305 PD
+24 W
+4745 1316 PD
+24 W
+4772 1310 PD
+24 W
+4799 1301 PD
+24 W
+4825 1294 PD
+24 W
+4831 1292 PD
+24 W
+4853 1293 PD
+24 W
+4873 1311 PD
+24 W
+4894 1329 PD
+24 W
+4923 1343 PD
+24 W
+4951 1353 PD
+24 W
+4979 1369 PD
+24 W
+5006 1386 PD
+24 W
+5026 1404 PD
+24 W
+5040 1423 PD
+24 W
+5062 1440 PD
+24 W
+5087 1458 PD
+24 W
+5104 1478 PD
+24 W
+5109 1496 PD
+24 W
+5116 1513 PD
+24 W
+5119 1532 PD
+24 W
+5112 1549 PD
+24 W
+5104 1567 PD
+24 W
+5099 1586 PD
+24 W
+5095 1603 PD
+24 W
+5092 1605 PD
+24 W
+5088 1622 PD
+24 W
+5115 1636 PD
+24 W
+5142 1632 PD
+24 W
+5169 1627 PD
+24 W
+5198 1621 PD
+24 W
+5225 1616 PD
+24 W
+5252 1612 PD
+24 W
+5280 1610 PD
+24 W
+5309 1609 PD
+24 W
+5337 1615 PD
+24 W
+5365 1623 PD
+24 W
+5392 1635 PD
+24 W
+5420 1651 PD
+24 W
+5448 1665 PD
+24 W
+5476 1675 PD
+24 W
+5497 1681 PD
+24 W
+5503 1679 PD
+24 W
+5530 1671 PD
+24 W
+5557 1667 PD
+24 W
+5586 1667 PD
+24 W
+5615 1669 PD
+24 W
+5643 1672 PD
+24 W
+5672 1678 PD
+24 W
+5702 1682 PD
+24 W
+5729 1689 PD
+24 W
+5756 1707 PD
+24 W
+5772 1726 PD
+24 W
+5783 1745 PD
+24 W
+5791 1764 PD
+24 W
+5800 1784 PD
+24 W
+5813 1802 PD
+24 W
+5826 1822 PD
+24 W
+5837 1841 PD
+24 W
+5845 1858 PD
+24 W
+5855 1877 PD
+24 W
+5861 1895 PD
+24 W
+5868 1914 PD
+24 W
+5871 1933 PD
+24 W
+5874 1951 PD
+24 W
+5873 1969 PD
+24 W
+5871 1977 PD
+24 W
+5869 1986 PD
+24 W
+5870 2004 PD
+24 W
+5872 2023 PD
+24 W
+5877 2041 PD
+24 W
+5877 2060 PD
+24 W
+5874 2079 PD
+24 W
+5870 2097 PD
+24 W
+5869 2116 PD
+24 W
+5874 2135 PD
+24 W
+5870 2154 PD
+24 W
+5856 2172 PD
+24 W
+5846 2191 PD
+24 W
+5846 2209 PD
+24 W
+5845 2228 PD
+24 W
+5845 2248 PD
+24 W
+5841 2267 PD
+24 W
+5834 2285 PD
+24 W
+5828 2304 PD
+24 W
+5818 2323 PD
+24 W
+5809 2342 PD
+24 W
+5810 2360 PD
+24 W
+5816 2379 PD
+24 W
+5810 2397 PD
+24 W
+5795 2415 PD
+24 W
+5796 2434 PD
+24 W
+5812 2454 PD
+24 W
+5826 2474 PD
+24 W
+5827 2492 PD
+24 W
+5837 2511 PD
+24 W
+5865 2527 PD
+24 W
+5893 2535 PD
+24 W
+5919 2541 PD
+24 W
+5947 2549 PD
+24 W
+5964 2567 PD
+24 W
+5993 2581 PD
+24 W
+6020 2581 PD
+24 W
+6047 2578 PD
+24 W
+6075 2577 PD
+24 W
+6104 2575 PD
+24 W
+6132 2571 PD
+24 W
+6160 2569 PD
+24 W
+6187 2569 PD
+24 W
+6215 2569 PD
+24 W
+6242 2570 PD
+24 W
+4188 394 PD
+24 W
+4217 410 PD
+24 W
+4240 428 PD
+24 W
+4261 446 PD
+24 W
+4288 460 PD
+24 W
+4315 468 PD
+24 W
+4343 477 PD
+24 W
+4365 496 PD
+24 W
+4393 498 PD
+24 W
+4420 509 PD
+24 W
+4448 527 PD
+24 W
+4469 545 PD
+24 W
+4496 560 PD
+24 W
+4524 579 PD
+24 W
+4544 597 PD
+24 W
+4562 614 PD
+24 W
+4570 633 PD
+24 W
+4569 651 PD
+24 W
+4573 669 PD
+24 W
+4585 687 PD
+24 W
+4603 705 PD
+24 W
+4627 723 PD
+24 W
+4654 741 PD
+24 W
+4677 760 PD
+24 W
+4690 779 PD
+24 W
+4710 798 PD
+24 W
+4735 815 PD
+24 W
+4750 833 PD
+24 W
+4770 851 PD
+24 W
+4785 869 PD
+24 W
+4797 887 PD
+24 W
+4806 905 PD
+24 W
+4831 923 PD
+24 W
+4843 942 PD
+24 W
+4858 960 PD
+24 W
+4860 978 PD
+24 W
+4865 997 PD
+24 W
+4866 1016 PD
+24 W
+4863 1033 PD
+24 W
+4862 1051 PD
+24 W
+4861 1070 PD
+24 W
+4862 1088 PD
+24 W
+4861 1107 PD
+24 W
+4858 1125 PD
+24 W
+4866 1143 PD
+24 W
+4873 1160 PD
+24 W
+4888 1178 PD
+24 W
+4903 1197 PD
+24 W
+4919 1215 PD
+24 W
+4939 1233 PD
+24 W
+4963 1251 PD
+24 W
+4986 1269 PD
+24 W
+5012 1287 PD
+24 W
+5039 1306 PD
+24 W
+5066 1322 PD
+24 W
+5094 1340 PD
+24 W
+5117 1358 PD
+24 W
+5136 1376 PD
+24 W
+5149 1394 PD
+24 W
+5163 1412 PD
+24 W
+5173 1430 PD
+24 W
+5188 1448 PD
+24 W
+5210 1465 PD
+24 W
+5222 1483 PD
+24 W
+5227 1501 PD
+24 W
+5233 1520 PD
+24 W
+5233 1537 PD
+24 W
+5232 1538 PD
+24 W
+5261 1544 PD
+24 W
+5288 1546 PD
+24 W
+5316 1550 PD
+24 W
+5345 1553 PD
+24 W
+5374 1555 PD
+24 W
+5401 1556 PD
+24 W
+5415 1557 PD
+24 W
+5428 1556 PD
+24 W
+5456 1552 PD
+24 W
+5485 1556 PD
+24 W
+5512 1566 PD
+24 W
+5539 1571 PD
+24 W
+5566 1573 PD
+24 W
+5598 1571 PD
+24 W
+5628 1569 PD
+24 W
+5657 1569 PD
+24 W
+5686 1570 PD
+24 W
+5713 1567 PD
+24 W
+5741 1566 PD
+24 W
+5770 1566 PD
+24 W
+5798 1568 PD
+24 W
+5826 1578 PD
+24 W
+5855 1595 PD
+24 W
+5872 1614 PD
+24 W
+5884 1634 PD
+24 W
+5892 1654 PD
+24 W
+5902 1671 PD
+24 W
+5911 1689 PD
+24 W
+5919 1710 PD
+24 W
+5927 1730 PD
+24 W
+5938 1749 PD
+24 W
+5946 1767 PD
+24 W
+5956 1786 PD
+24 W
+5967 1803 PD
+24 W
+5968 1821 PD
+24 W
+5970 1840 PD
+24 W
+5968 1859 PD
+24 W
+5964 1879 PD
+24 W
+5962 1896 PD
+24 W
+5955 1915 PD
+24 W
+5950 1934 PD
+24 W
+5949 1952 PD
+24 W
+5942 1970 PD
+24 W
+5927 2004 PD
+24 W
+5926 2004 PD
+24 W
+5920 2022 PD
+24 W
+5936 2040 PD
+24 W
+5938 2057 PD
+24 W
+5928 2076 PD
+24 W
+5923 2093 PD
+24 W
+5921 2112 PD
+24 W
+5925 2130 PD
+24 W
+5927 2148 PD
+24 W
+5919 2166 PD
+24 W
+5909 2185 PD
+24 W
+5900 2204 PD
+24 W
+5897 2223 PD
+24 W
+5894 2241 PD
+24 W
+5887 2259 PD
+24 W
+5891 2277 PD
+24 W
+5884 2296 PD
+24 W
+5880 2315 PD
+24 W
+5873 2333 PD
+24 W
+5860 2353 PD
+24 W
+5857 2371 PD
+24 W
+5860 2389 PD
+24 W
+5857 2407 PD
+24 W
+5886 2423 PD
+24 W
+5914 2431 PD
+24 W
+5944 2440 PD
+24 W
+5972 2445 PD
+24 W
+6000 2460 PD
+24 W
+6025 2479 PD
+24 W
+6045 2497 PD
+24 W
+6072 2510 PD
+24 W
+6101 2517 PD
+24 W
+6129 2520 PD
+24 W
+6157 2523 PD
+24 W
+6186 2524 PD
+24 W
+6215 2526 PD
+24 W
+6242 2531 PD
+24 W
+4372 392 PD
+24 W
+4371 392 PD
+24 W
+4387 410 PD
+24 W
+4404 428 PD
+24 W
+4421 446 PD
+24 W
+4434 464 PD
+24 W
+4455 482 PD
+24 W
+4483 496 PD
+24 W
+4512 507 PD
+24 W
+4541 518 PD
+24 W
+4568 532 PD
+24 W
+4587 550 PD
+24 W
+4597 568 PD
+24 W
+4599 586 PD
+24 W
+4596 605 PD
+24 W
+4593 623 PD
+24 W
+4592 641 PD
+24 W
+4595 659 PD
+24 W
+4603 678 PD
+24 W
+4618 695 PD
+24 W
+4645 709 PD
+24 W
+4671 718 PD
+24 W
+4699 726 PD
+24 W
+4728 733 PD
+24 W
+4753 751 PD
+24 W
+4772 769 PD
+24 W
+4787 787 PD
+24 W
+4806 806 PD
+24 W
+4825 824 PD
+24 W
+4848 842 PD
+24 W
+4869 860 PD
+24 W
+4889 878 PD
+24 W
+4898 896 PD
+24 W
+4898 905 PD
+24 W
+4904 917 PD
+24 W
+4909 935 PD
+24 W
+4912 954 PD
+24 W
+4918 971 PD
+24 W
+4924 989 PD
+24 W
+4936 1007 PD
+24 W
+4963 1022 PD
+24 W
+4966 1022 PD
+24 W
+4980 1040 PD
+24 W
+4998 1059 PD
+24 W
+5007 1079 PD
+24 W
+5020 1097 PD
+24 W
+5037 1116 PD
+24 W
+5055 1136 PD
+24 W
+5071 1155 PD
+24 W
+5088 1175 PD
+24 W
+5105 1195 PD
+24 W
+5125 1213 PD
+24 W
+5144 1233 PD
+24 W
+5163 1250 PD
+24 W
+5185 1268 PD
+24 W
+5203 1286 PD
+24 W
+5221 1305 PD
+24 W
+5237 1324 PD
+24 W
+5254 1343 PD
+24 W
+5282 1352 PD
+24 W
+5310 1359 PD
+24 W
+5327 1378 PD
+24 W
+5329 1385 PD
+24 W
+5332 1395 PD
+24 W
+5330 1414 PD
+24 W
+5322 1433 PD
+24 W
+5312 1450 PD
+24 W
+5302 1469 PD
+24 W
+5300 1487 PD
+24 W
+5328 1503 PD
+24 W
+5355 1505 PD
+24 W
+5383 1502 PD
+24 W
+5409 1495 PD
+24 W
+5437 1486 PD
+24 W
+5464 1478 PD
+24 W
+5493 1472 PD
+24 W
+5521 1468 PD
+24 W
+5521 1440 PD
+24 W
+5521 1439 PD
+24 W
+5549 1440 PD
+24 W
+5579 1444 PD
+24 W
+5606 1447 PD
+24 W
+5635 1447 PD
+24 W
+5663 1451 PD
+24 W
+5691 1454 PD
+24 W
+5719 1454 PD
+24 W
+5749 1456 PD
+24 W
+5777 1463 PD
+24 W
+5804 1470 PD
+24 W
+5835 1480 PD
+24 W
+5863 1493 PD
+24 W
+5892 1511 PD
+24 W
+5920 1527 PD
+24 W
+5942 1545 PD
+24 W
+5967 1564 PD
+24 W
+5985 1583 PD
+24 W
+6002 1602 PD
+24 W
+6013 1621 PD
+24 W
+6018 1640 PD
+24 W
+6021 1658 PD
+24 W
+6028 1677 PD
+24 W
+6038 1696 PD
+24 W
+6039 1716 PD
+24 W
+6044 1735 PD
+24 W
+6047 1755 PD
+24 W
+6051 1773 PD
+24 W
+6053 1793 PD
+24 W
+6053 1811 PD
+24 W
+6053 1828 PD
+24 W
+6053 1847 PD
+24 W
+6053 1865 PD
+24 W
+6049 1883 PD
+24 W
+6043 1903 PD
+24 W
+6037 1921 PD
+24 W
+6025 1940 PD
+24 W
+6017 1959 PD
+24 W
+6018 1977 PD
+24 W
+6007 1995 PD
+24 W
+6001 2013 PD
+24 W
+5996 2032 PD
+24 W
+5992 2051 PD
+24 W
+5994 2069 PD
+24 W
+5993 2069 PD
+24 W
+5980 2087 PD
+24 W
+5977 2104 PD
+24 W
+5993 2124 PD
+24 W
+5998 2142 PD
+24 W
+5995 2161 PD
+24 W
+5988 2180 PD
+24 W
+5990 2198 PD
+24 W
+5983 2217 PD
+24 W
+5973 2236 PD
+24 W
+5946 2245 PD
+24 W
+5947 2263 PD
+24 W
+5963 2280 PD
+24 W
+5958 2298 PD
+24 W
+5930 2311 PD
+24 W
+5918 2329 PD
+24 W
+5916 2348 PD
+24 W
+5926 2367 PD
+24 W
+5950 2385 PD
+24 W
+5978 2392 PD
+24 W
+6007 2404 PD
+24 W
+6037 2405 PD
+24 W
+6067 2410 PD
+24 W
+6096 2420 PD
+24 W
+6124 2436 PD
+24 W
+6153 2444 PD
+24 W
+6181 2456 PD
+24 W
+6209 2472 PD
+24 W
+6236 2482 PD
+24 W
+4494 391 PD
+24 W
+4495 389 PD
+24 W
+4519 406 PD
+24 W
+4535 425 PD
+24 W
+4561 444 PD
+24 W
+4584 462 PD
+24 W
+4601 480 PD
+24 W
+4604 497 PD
+24 W
+4605 515 PD
+24 W
+4602 522 PD
+24 W
+4602 534 PD
+24 W
+4630 550 PD
+24 W
+4639 568 PD
+24 W
+4617 586 PD
+24 W
+4612 604 PD
+24 W
+4612 622 PD
+24 W
+4619 640 PD
+24 W
+4625 658 PD
+24 W
+4641 676 PD
+24 W
+4668 693 PD
+24 W
+4695 702 PD
+24 W
+4722 708 PD
+24 W
+4750 713 PD
+24 W
+4777 721 PD
+24 W
+4802 739 PD
+24 W
+4824 757 PD
+24 W
+4848 775 PD
+24 W
+4874 793 PD
+24 W
+4894 812 PD
+24 W
+4911 831 PD
+24 W
+4924 849 PD
+24 W
+4937 867 PD
+24 W
+4943 885 PD
+24 W
+4954 904 PD
+24 W
+4971 922 PD
+24 W
+4987 940 PD
+24 W
+4993 959 PD
+24 W
+4995 977 PD
+24 W
+5015 994 PD
+24 W
+5043 992 PD
+24 W
+5055 1020 PD
+24 W
+5059 1013 PD
+24 W
+5087 1020 PD
+24 W
+5113 1031 PD
+24 W
+5141 1048 PD
+24 W
+5169 1067 PD
+24 W
+5196 1085 PD
+24 W
+5224 1102 PD
+24 W
+5251 1120 PD
+24 W
+5273 1138 PD
+24 W
+5296 1156 PD
+24 W
+5319 1174 PD
+24 W
+5338 1193 PD
+24 W
+5356 1212 PD
+24 W
+5370 1229 PD
+24 W
+5382 1247 PD
+24 W
+5393 1265 PD
+24 W
+5404 1284 PD
+24 W
+5410 1303 PD
+24 W
+5411 1320 PD
+24 W
+5410 1338 PD
+24 W
+5401 1357 PD
+24 W
+5401 1358 PD
+24 W
+5386 1376 PD
+24 W
+5375 1394 PD
+24 W
+5367 1414 PD
+24 W
+5376 1432 PD
+24 W
+5402 1433 PD
+24 W
+5431 1421 PD
+24 W
+5460 1413 PD
+24 W
+5489 1407 PD
+24 W
+5521 1404 PD
+24 W
+5548 1400 PD
+24 W
+5576 1399 PD
+24 W
+5606 1400 PD
+24 W
+5636 1400 PD
+24 W
+5665 1398 PD
+24 W
+5692 1399 PD
+24 W
+5719 1399 PD
+24 W
+5748 1401 PD
+24 W
+5777 1404 PD
+24 W
+5803 1409 PD
+24 W
+5831 1420 PD
+24 W
+5860 1434 PD
+24 W
+5888 1447 PD
+24 W
+5916 1459 PD
+24 W
+5945 1468 PD
+24 W
+5972 1477 PD
+24 W
+6000 1489 PD
+24 W
+6028 1508 PD
+24 W
+6038 1527 PD
+24 W
+6037 1527 PD
+24 W
+6060 1546 PD
+24 W
+6072 1564 PD
+24 W
+6077 1582 PD
+24 W
+6081 1600 PD
+24 W
+6086 1618 PD
+24 W
+6094 1637 PD
+24 W
+6100 1657 PD
+24 W
+6105 1675 PD
+24 W
+6108 1695 PD
+24 W
+6111 1713 PD
+24 W
+6114 1731 PD
+24 W
+6115 1748 PD
+24 W
+6115 1767 PD
+24 W
+6117 1785 PD
+24 W
+6119 1805 PD
+24 W
+6122 1823 PD
+24 W
+6120 1841 PD
+24 W
+6115 1859 PD
+24 W
+6112 1878 PD
+24 W
+6107 1898 PD
+24 W
+6105 1916 PD
+24 W
+6105 1935 PD
+24 W
+6101 1953 PD
+24 W
+6096 1972 PD
+24 W
+6091 1992 PD
+24 W
+6086 2013 PD
+24 W
+6081 2033 PD
+24 W
+6076 2051 PD
+24 W
+6071 2069 PD
+24 W
+6064 2086 PD
+24 W
+6065 2085 PD
+24 W
+6053 2104 PD
+24 W
+6060 2122 PD
+24 W
+6071 2140 PD
+24 W
+6070 2158 PD
+24 W
+6064 2176 PD
+24 W
+6050 2194 PD
+24 W
+6054 2211 PD
+24 W
+6048 2229 PD
+24 W
+6035 2248 PD
+24 W
+6024 2267 PD
+24 W
+6013 2286 PD
+24 W
+6006 2304 PD
+24 W
+6003 2322 PD
+24 W
+6031 2338 PD
+24 W
+6060 2354 PD
+24 W
+6085 2372 PD
+24 W
+6113 2387 PD
+24 W
+6142 2392 PD
+24 W
+6170 2396 PD
+24 W
+6197 2404 PD
+24 W
+6225 2418 PD
+24 W
+6244 2436 PD
+24 W
+4628 398 PD
+24 W
+4630 396 PD
+24 W
+4639 414 PD
+24 W
+4654 432 PD
+24 W
+4670 450 PD
+24 W
+4673 468 PD
+24 W
+4671 487 PD
+24 W
+4668 495 PD
+24 W
+4665 504 PD
+24 W
+4692 517 PD
+24 W
+4690 535 PD
+24 W
+4697 552 PD
+24 W
+4707 570 PD
+24 W
+4680 585 PD
+24 W
+4658 603 PD
+24 W
+4657 620 PD
+24 W
+4667 638 PD
+24 W
+4684 657 PD
+24 W
+4711 669 PD
+24 W
+4738 670 PD
+24 W
+4766 673 PD
+24 W
+4786 690 PD
+24 W
+4813 702 PD
+24 W
+4833 719 PD
+24 W
+4861 730 PD
+24 W
+4889 739 PD
+24 W
+4907 756 PD
+24 W
+4915 774 PD
+24 W
+4923 793 PD
+24 W
+4935 811 PD
+24 W
+4940 828 PD
+24 W
+4957 846 PD
+24 W
+4976 864 PD
+24 W
+5000 882 PD
+24 W
+5015 899 PD
+24 W
+5025 917 PD
+24 W
+5033 935 PD
+24 W
+5061 950 PD
+24 W
+5088 956 PD
+24 W
+5116 975 PD
+24 W
+5144 979 PD
+24 W
+5172 978 PD
+24 W
+5201 982 PD
+24 W
+5228 990 PD
+24 W
+5255 1000 PD
+24 W
+5283 1012 PD
+24 W
+5309 1024 PD
+24 W
+5336 1039 PD
+24 W
+5361 1058 PD
+24 W
+5382 1076 PD
+24 W
+5399 1095 PD
+24 W
+5411 1112 PD
+24 W
+5422 1130 PD
+24 W
+5439 1148 PD
+24 W
+5444 1165 PD
+24 W
+5447 1183 PD
+24 W
+5449 1201 PD
+24 W
+5448 1219 PD
+24 W
+5446 1236 PD
+24 W
+5444 1255 PD
+24 W
+5451 1273 PD
+24 W
+5457 1291 PD
+24 W
+5454 1309 PD
+24 W
+5447 1327 PD
+24 W
+5451 1345 PD
+24 W
+5478 1356 PD
+24 W
+5505 1353 PD
+24 W
+5533 1348 PD
+24 W
+5562 1346 PD
+24 W
+5592 1342 PD
+24 W
+5621 1343 PD
+24 W
+5650 1344 PD
+24 W
+5679 1346 PD
+24 W
+5709 1351 PD
+24 W
+5737 1352 PD
+24 W
+5767 1353 PD
+24 W
+5794 1362 PD
+24 W
+5822 1373 PD
+24 W
+5849 1383 PD
+24 W
+5878 1395 PD
+24 W
+5906 1404 PD
+24 W
+5933 1415 PD
+24 W
+5961 1431 PD
+24 W
+5985 1449 PD
+24 W
+6011 1466 PD
+24 W
+6038 1477 PD
+24 W
+6065 1492 PD
+24 W
+6078 1510 PD
+24 W
+6092 1527 PD
+24 W
+6111 1545 PD
+24 W
+6134 1564 PD
+24 W
+6145 1581 PD
+24 W
+6144 1582 PD
+24 W
+6149 1600 PD
+24 W
+6154 1618 PD
+24 W
+6161 1638 PD
+24 W
+6169 1656 PD
+24 W
+6179 1675 PD
+24 W
+6180 1694 PD
+24 W
+6183 1713 PD
+24 W
+6189 1731 PD
+24 W
+6184 1748 PD
+24 W
+6177 1767 PD
+24 W
+6172 1785 PD
+24 W
+6169 1804 PD
+24 W
+6171 1822 PD
+24 W
+6169 1839 PD
+24 W
+6158 1859 PD
+24 W
+6154 1877 PD
+24 W
+6164 1895 PD
+24 W
+6169 1915 PD
+24 W
+6169 1933 PD
+24 W
+6167 1952 PD
+24 W
+6164 1971 PD
+24 W
+6158 1990 PD
+24 W
+6154 2008 PD
+24 W
+6146 2027 PD
+24 W
+6140 2045 PD
+24 W
+6139 2064 PD
+24 W
+6146 2082 PD
+24 W
+6147 2100 PD
+24 W
+6136 2118 PD
+24 W
+6129 2136 PD
+24 W
+6136 2154 PD
+24 W
+6133 2173 PD
+24 W
+6127 2191 PD
+24 W
+6120 2209 PD
+24 W
+6110 2230 PD
+24 W
+6110 2229 PD
+24 W
+6083 2232 PD
+24 W
+6065 2253 PD
+24 W
+6063 2271 PD
+24 W
+6072 2289 PD
+24 W
+6096 2308 PD
+24 W
+6123 2322 PD
+24 W
+6151 2334 PD
+24 W
+6178 2345 PD
+24 W
+6206 2360 PD
+24 W
+6234 2374 PD
+24 W
+4743 398 PD
+24 W
+4761 416 PD
+24 W
+4761 433 PD
+24 W
+4762 452 PD
+24 W
+4768 470 PD
+24 W
+4763 488 PD
+24 W
+4753 505 PD
+24 W
+4755 516 PD
+24 W
+4749 523 PD
+24 W
+4758 541 PD
+24 W
+4741 561 PD
+24 W
+4745 580 PD
+24 W
+4724 598 PD
+24 W
+4720 616 PD
+24 W
+4749 629 PD
+24 W
+4776 636 PD
+24 W
+4797 654 PD
+24 W
+4824 670 PD
+24 W
+4851 686 PD
+24 W
+4878 689 PD
+24 W
+4907 696 PD
+24 W
+4920 714 PD
+24 W
+4927 732 PD
+24 W
+4949 749 PD
+24 W
+4965 768 PD
+24 W
+4980 785 PD
+24 W
+4978 804 PD
+24 W
+4972 821 PD
+24 W
+4973 840 PD
+24 W
+4994 858 PD
+24 W
+5021 863 PD
+24 W
+5049 871 PD
+24 W
+5073 890 PD
+24 W
+5089 908 PD
+24 W
+5113 925 PD
+24 W
+5140 937 PD
+24 W
+5167 943 PD
+24 W
+5195 949 PD
+24 W
+5223 959 PD
+24 W
+5251 971 PD
+24 W
+5278 983 PD
+24 W
+5307 992 PD
+24 W
+5334 1003 PD
+24 W
+5363 1016 PD
+24 W
+5375 1033 PD
+24 W
+5391 1051 PD
+24 W
+5418 1067 PD
+24 W
+5446 1079 PD
+24 W
+5462 1097 PD
+24 W
+5470 1115 PD
+24 W
+5480 1132 PD
+24 W
+5488 1151 PD
+24 W
+5493 1171 PD
+24 W
+5497 1190 PD
+24 W
+5500 1209 PD
+24 W
+5504 1228 PD
+24 W
+5505 1247 PD
+24 W
+5501 1265 PD
+24 W
+5504 1285 PD
+24 W
+5517 1302 PD
+24 W
+5544 1306 PD
+24 W
+5573 1306 PD
+24 W
+5601 1304 PD
+24 W
+5629 1303 PD
+24 W
+5656 1304 PD
+24 W
+5684 1305 PD
+24 W
+5712 1308 PD
+24 W
+5742 1312 PD
+24 W
+5771 1316 PD
+24 W
+5798 1319 PD
+24 W
+5828 1323 PD
+24 W
+5856 1328 PD
+24 W
+5885 1336 PD
+24 W
+5913 1346 PD
+24 W
+5940 1365 PD
+24 W
+5961 1383 PD
+24 W
+5984 1402 PD
+24 W
+6007 1421 PD
+24 W
+6033 1439 PD
+24 W
+6061 1457 PD
+24 W
+6086 1475 PD
+24 W
+6109 1494 PD
+24 W
+6128 1512 PD
+24 W
+6144 1531 PD
+24 W
+6160 1549 PD
+24 W
+6176 1567 PD
+24 W
+6194 1585 PD
+24 W
+6208 1604 PD
+24 W
+6219 1622 PD
+24 W
+6227 1640 PD
+24 W
+6235 1657 PD
+24 W
+6255 1697 PD
+24 W
+6252 1698 PD
+24 W
+6251 1717 PD
+24 W
+6249 1735 PD
+24 W
+6246 1753 PD
+24 W
+6241 1772 PD
+24 W
+6237 1791 PD
+24 W
+6234 1809 PD
+24 W
+6232 1827 PD
+24 W
+6230 1845 PD
+24 W
+6228 1863 PD
+24 W
+6229 1882 PD
+24 W
+6236 1900 PD
+24 W
+6242 1918 PD
+24 W
+6246 1937 PD
+24 W
+6244 1955 PD
+24 W
+6241 1972 PD
+24 W
+6236 1990 PD
+24 W
+6228 2011 PD
+24 W
+6219 2030 PD
+24 W
+6212 2048 PD
+24 W
+6204 2066 PD
+24 W
+6200 2084 PD
+24 W
+6202 2102 PD
+24 W
+6205 2120 PD
+24 W
+6205 2138 PD
+24 W
+6205 2157 PD
+24 W
+6200 2178 PD
+24 W
+6194 2196 PD
+24 W
+6183 2214 PD
+24 W
+6168 2232 PD
+24 W
+6151 2250 PD
+24 W
+4838 405 PD
+24 W
+4838 404 PD
+24 W
+4839 423 PD
+24 W
+4838 441 PD
+24 W
+4833 458 PD
+24 W
+4821 482 PD
+24 W
+4821 481 PD
+24 W
+4818 499 PD
+24 W
+4805 516 PD
+24 W
+4799 535 PD
+24 W
+4793 553 PD
+24 W
+4791 571 PD
+24 W
+4809 589 PD
+24 W
+4830 607 PD
+24 W
+4828 624 PD
+24 W
+4839 643 PD
+24 W
+4866 653 PD
+24 W
+4893 646 PD
+24 W
+4921 652 PD
+24 W
+4947 671 PD
+24 W
+4947 690 PD
+24 W
+4947 708 PD
+24 W
+4946 726 PD
+24 W
+4973 744 PD
+24 W
+5000 749 PD
+24 W
+5027 758 PD
+24 W
+5051 776 PD
+24 W
+5028 794 PD
+24 W
+5025 812 PD
+24 W
+5052 820 PD
+24 W
+5066 838 PD
+24 W
+5070 857 PD
+24 W
+5080 876 PD
+24 W
+5109 884 PD
+24 W
+5136 886 PD
+24 W
+5153 904 PD
+24 W
+5181 920 PD
+24 W
+5208 926 PD
+24 W
+5235 927 PD
+24 W
+5262 931 PD
+24 W
+5281 949 PD
+24 W
+5309 956 PD
+24 W
+5337 959 PD
+24 W
+5364 970 PD
+24 W
+5392 987 PD
+24 W
+5419 1000 PD
+24 W
+5446 1013 PD
+24 W
+5474 1030 PD
+24 W
+5500 1049 PD
+24 W
+5521 1067 PD
+24 W
+5533 1086 PD
+24 W
+5544 1104 PD
+24 W
+5554 1122 PD
+24 W
+5560 1140 PD
+24 W
+5561 1159 PD
+24 W
+5565 1179 PD
+24 W
+5566 1198 PD
+24 W
+5567 1216 PD
+24 W
+5568 1234 PD
+24 W
+5573 1252 PD
+24 W
+5600 1244 PD
+24 W
+5629 1239 PD
+24 W
+5658 1240 PD
+24 W
+5687 1244 PD
+24 W
+5714 1250 PD
+24 W
+5742 1254 PD
+24 W
+5770 1256 PD
+24 W
+5771 1238 PD
+24 W
+5744 1220 PD
+24 W
+5722 1202 PD
+24 W
+5705 1183 PD
+24 W
+5694 1164 PD
+24 W
+5681 1146 PD
+24 W
+5651 1129 PD
+24 W
+5624 1119 PD
+24 W
+5600 1100 PD
+24 W
+5587 1082 PD
+24 W
+5575 1064 PD
+24 W
+5562 1046 PD
+24 W
+5546 1028 PD
+24 W
+5529 1009 PD
+24 W
+5514 991 PD
+24 W
+5500 973 PD
+24 W
+5486 954 PD
+24 W
+5476 936 PD
+24 W
+5465 916 PD
+24 W
+5459 898 PD
+24 W
+5457 880 PD
+24 W
+5455 863 PD
+24 W
+5453 844 PD
+24 W
+5448 826 PD
+24 W
+5442 808 PD
+24 W
+5437 789 PD
+24 W
+5433 771 PD
+24 W
+5428 752 PD
+24 W
+5422 733 PD
+24 W
+5420 715 PD
+24 W
+5422 697 PD
+24 W
+5449 680 PD
+24 W
+5058 414 PD
+24 W
+5056 414 PD
+24 W
+5029 425 PD
+24 W
+5023 444 PD
+24 W
+5026 463 PD
+24 W
+5026 482 PD
+24 W
+5004 500 PD
+24 W
+4997 518 PD
+24 W
+5024 532 PD
+24 W
+5029 550 PD
+24 W
+5056 558 PD
+24 W
+5082 573 PD
+24 W
+5110 585 PD
+24 W
+5123 567 PD
+24 W
+5115 549 PD
+24 W
+5112 530 PD
+24 W
+5114 513 PD
+24 W
+5115 495 PD
+24 W
+5119 476 PD
+24 W
+5119 458 PD
+24 W
+5104 440 PD
+24 W
+5076 426 PD
+24 W
+5049 418 PD
+gs 899 389 5357 4227 MR c np
+gr
+
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/glacier2.pdf b/doc/tutorial/images/glacier2.pdf
new file mode 100644
index 0000000..eca23a0
Binary files /dev/null and b/doc/tutorial/images/glacier2.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_0.eps b/doc/tutorial/images/interpolation_1d_0.eps
new file mode 100755
index 0000000..b83485c
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_0.eps
@@ -0,0 +1,359 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_0.eps
+%%CreationDate: 09/01/2004  09:49:24
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    59   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    59   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  498   340  5989  4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4262 mt  952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt 
+(0) s
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt 
+(0.2) s
+ 899 2854 mt  952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt 
+(0.4) s
+ 899 2149 mt  952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt 
+(0.6) s
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt 
+(0.8) s
+ 899  741 mt  952  741 L
+6255  741 mt 6201  741 L
+ 718  839 mt 
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+  60   60  998 4262 FO
+  60   60 1642 4262 FO
+  60   60 2136 4262 FO
+  60   60 3071 4262 FO
+  60   60 3501 4262 FO
+  60   60 4149 2634 FO
+  60   60 4498 2196 FO
+  60   60 4980 1713 FO
+  60   60 5431 1332 FO
+  60   60 5987  921 FO
+gs 899 388 5357 4228 MR c np
+17 273 17 277 16 275 17 266 17 251 17 229 16 202 17 170 
+17 132 17 92 16 50 17 5 17 -40 17 -82 16 -123 17 -160 
+17 -193 17 -220 16 -241 17 -255 17 -262 16 -262 17 -255 17 -240 
+17 -219 16 -192 17 -161 17 -124 17 -86 16 -46 17 -4 17 35 
+17 74 16 109 17 141 17 167 17 188 16 203 17 212 17 214 
+16 211 17 201 17 185 17 166 16 142 17 116 17 86 17 57 
+16 27 17 -2 17 -28 17 -53 16 -72 17 -89 17 -101 17 -108 
+16 -110 17 -107 17 -100 16 -89 17 -75 17 -58 17 -40 16 -19 
+17 1 17 20 17 38 16 54 17 67 17 76 17 82 16 84 
+17 81 17 76 17 65 16 52 17 36 17 17 16 -2 17 -22 
+17 -44 17 -62 16 -81 17 -95 17 -109 17 -117 16 -122 17 -124 
+17 -119 17 -113 16 -100 17 -86 17 -66 17 -46 16 -23 17 1 
+17 26 17 50 16 72 4581 2797 100 MP stroke
+17 94 17 111 16 127 17 137 17 144 17 147 16 144 17 138 
+17 127 17 113 16 93 17 73 17 49 17 23 16 -3 17 -29 
+17 -55 17 -81 16 -103 17 -124 17 -142 16 -156 17 -167 17 -174 
+17 -179 16 -178 17 -175 17 -169 17 -160 16 -149 17 -136 17 -122 
+17 -107 16 -91 17 -77 17 -62 17 -49 16 -38 17 -27 17 -18 
+16 -13 17 -7 17 -4 17 -3 16 -3 17 -4 17 -5 17 -9 
+16 -11 17 -14 17 -17 17 -19 16 -21 17 -21 17 -21 17 -19 
+16 -18 17 -14 17 -11 16 -7 17 -2 17 2 17 8 16 12 
+17 15 17 19 17 22 16 23 17 23 17 23 17 22 16 19 
+17 16 17 13 17 8 16 3 17 -2 17 -6 17 -10 16 -14 
+17 -17 17 -20 16 -21 17 -21 17 -21 17 -19 16 -17 17 -14 
+17 -10 17 -7 16 -2 17 2 17 6 17 9 16 13 17 14 
+17 16 17 16 16 15 2924 4173 100 MP stroke
+17 13 17 11 16 8 17 4 17 -1 17 -6 16 -11 17 -15 
+17 -20 17 -23 16 -26 17 -28 17 -28 17 -29 16 -26 17 -24 
+17 -20 17 -15 16 -9 17 -3 17 4 16 11 17 17 17 23 
+17 29 16 34 17 37 17 39 17 40 16 39 17 37 17 33 
+17 29 16 23 17 16 17 9 17 1 16 -7 17 -13 17 -20 
+16 -26 17 -30 17 -33 17 -35 16 -35 17 -33 17 -29 17 -25 
+16 -19 17 -12 17 -3 17 5 16 13 17 21 17 29 17 36 
+16 41 17 45 17 47 17 47 16 45 17 42 17 36 16 29 
+17 21 17 11 17 0 16 -10 17 -21 17 -31 17 -40 16 -48 
+17 -53 17 -58 17 -59 16 -59 17 -56 17 -50 17 -43 16 -33 
+17 -22 17 -10 16 3 17 17 17 29 17 42 16 53 17 62 
+17 68 17 73 16 74 17 73 17 68 17 60 16 51 17 38 
+17 24 17 9 16 -8 1267 3709 100 MP stroke
+17 -23 17 -40 16 -53 17 -65 17 -75 17 -80 16 -82 17 -81 
+17 -73 17 -63 16 -47 17 -28 17 -5 17 22 16 51 17 81 
+17 112 17 144 16 174 17 201 17 226 16 247 899 3166 23 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11 
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12 
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11 
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13 
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13 
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13 
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14 
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15 
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14 
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16 
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16 
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18 
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20 
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21 
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23 
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26 
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31 
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39 
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66 
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_0.pdf b/doc/tutorial/images/interpolation_1d_0.pdf
new file mode 100644
index 0000000..8a331f9
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_0.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_1.eps b/doc/tutorial/images/interpolation_1d_1.eps
new file mode 100755
index 0000000..f05b9b2
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_1.eps
@@ -0,0 +1,359 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_1.eps
+%%CreationDate: 09/01/2004  09:49:24
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    59   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    59   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  498   340  5989  4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4262 mt  952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt 
+(0) s
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt 
+(0.2) s
+ 899 2854 mt  952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt 
+(0.4) s
+ 899 2149 mt  952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt 
+(0.6) s
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt 
+(0.8) s
+ 899  741 mt  952  741 L
+6255  741 mt 6201  741 L
+ 718  839 mt 
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+  60   60  998 4262 FO
+  60   60 1642 4262 FO
+  60   60 2136 4262 FO
+  60   60 3071 4262 FO
+  60   60 3501 4262 FO
+  60   60 4149 2634 FO
+  60   60 4498 2196 FO
+  60   60 4980 1713 FO
+  60   60 5431 1332 FO
+  60   60 5987  921 FO
+gs 899 388 5357 4228 MR c np
+0 2 17 59 17 77 16 94 17 112 17 129 17 145 16 160 
+17 173 17 185 16 194 899 3286 12 MP stroke
+17 206 17 208 16 207 17 203 17 196 17 187 16 176 17 162 
+17 146 17 128 16 109 17 90 17 69 17 48 16 29 17 9 
+17 -10 17 -26 16 -41 17 -55 17 -66 16 -74 17 -81 17 -84 
+17 -86 16 -84 17 -81 17 -75 17 -68 16 -60 17 -49 17 -38 
+17 -26 16 -15 17 -3 17 9 17 20 16 29 17 38 17 46 
+16 51 17 56 17 59 17 60 16 60 17 58 17 55 17 50 
+16 46 17 39 17 33 17 25 16 18 17 11 17 4 17 -3 
+16 -9 17 -15 17 -20 16 -25 17 -28 17 -30 17 -33 16 -34 
+17 -35 17 -35 17 -34 16 -34 17 -33 17 -32 17 -30 16 -30 
+17 -28 17 -28 17 -27 16 -27 17 -26 17 -27 16 -26 17 -27 
+17 -28 17 -28 16 -28 17 -29 17 -29 17 -29 16 -28 17 -28 
+17 -27 17 -26 16 -23 17 -22 17 -18 17 -16 16 -13 17 -10 
+17 -6 17 -3 16 0 4581 2233 100 MP stroke
+17 3 17 6 16 8 17 10 17 11 17 12 16 12 17 11 
+17 9 17 8 16 5 17 1 17 -2 17 -8 16 -12 17 -17 
+17 -23 17 -29 16 -34 17 -41 17 -45 16 -51 17 -56 17 -60 
+17 -65 16 -68 17 -70 17 -74 17 -75 16 -76 17 -76 17 -77 
+17 -76 16 -75 17 -74 17 -72 17 -69 16 -67 17 -65 17 -61 
+16 -58 17 -55 17 -52 17 -48 16 -46 17 -42 17 -38 17 -36 
+16 -32 17 -30 17 -27 17 -24 16 -21 17 -19 17 -16 17 -15 
+16 -12 17 -10 17 -8 16 -6 17 -5 17 -4 17 -2 16 -1 
+17 0 17 0 17 1 16 2 17 2 17 2 17 2 16 2 
+17 2 17 1 17 1 16 1 17 0 17 0 17 0 16 -1 
+17 -1 17 -2 16 -1 17 -2 17 -2 17 -1 16 -2 17 -2 
+17 -1 17 -1 16 -1 17 -1 17 0 17 0 16 0 17 1 
+17 1 17 0 16 1 2924 4261 100 MP stroke
+17 1 17 2 16 1 17 1 17 0 17 1 16 1 17 0 
+17 1 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 1 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 -1 17 0 17 -1 16 -1 17 -1 17 -2 
+17 -1 16 -2 17 -2 17 -1 17 -2 16 -1 17 -2 17 -1 
+16 0 17 0 17 0 17 1 16 2 17 2 17 3 17 3 
+16 3 17 4 17 4 17 4 16 3 17 4 17 3 17 2 
+16 2 17 0 17 0 17 -1 16 -3 17 -3 17 -4 16 -5 
+17 -5 17 -6 17 -5 16 -6 17 -5 17 -4 17 -2 16 -2 
+17 1 17 2 17 5 16 6 17 9 17 10 17 13 16 14 
+17 15 17 15 16 16 17 15 17 13 17 12 16 8 17 5 
+17 1 17 -3 16 -9 17 -15 17 -20 17 -25 16 -32 17 -36 
+17 -41 17 -45 16 -47 1267 4394 100 MP stroke
+17 -49 17 -49 16 -47 17 -44 14 -33 1186 4616 6 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11 
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12 
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11 
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13 
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13 
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13 
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14 
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15 
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14 
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16 
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16 
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18 
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20 
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21 
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23 
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26 
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31 
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39 
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66 
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_1.pdf b/doc/tutorial/images/interpolation_1d_1.pdf
new file mode 100644
index 0000000..37007c3
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_1.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_2.eps b/doc/tutorial/images/interpolation_1d_2.eps
new file mode 100755
index 0000000..e39b28e
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_2.eps
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_2.eps
+%%CreationDate: 09/01/2004  09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    59   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    59   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  498   340  5989  4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4262 mt  952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt 
+(0) s
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt 
+(0.2) s
+ 899 2854 mt  952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt 
+(0.4) s
+ 899 2149 mt  952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt 
+(0.6) s
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt 
+(0.8) s
+ 899  741 mt  952  741 L
+6255  741 mt 6201  741 L
+ 718  839 mt 
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+  60   60  998 4262 FO
+  60   60 1642 4262 FO
+  60   60 2136 4262 FO
+  60   60 3071 4262 FO
+  60   60 3501 4262 FO
+  60   60 4149 2634 FO
+  60   60 4498 2196 FO
+  60   60 4980 1713 FO
+  60   60 5431 1332 FO
+  60   60 5987  921 FO
+gs 899 388 5357 4228 MR c np
+17 105 16 114 17 124 17 134 17 142 16 150 17 157 17 163 
+16 167 899 3360 10 MP stroke
+17 174 17 176 16 177 17 175 17 174 17 170 16 166 17 160 
+17 155 17 146 16 139 17 130 17 120 17 110 16 99 17 88 
+17 78 17 66 16 56 17 44 17 34 16 24 17 14 17 5 
+17 -4 16 -11 17 -19 17 -25 17 -30 16 -35 17 -39 17 -42 
+17 -45 16 -46 17 -46 17 -48 17 -46 16 -46 17 -44 17 -43 
+16 -40 17 -38 17 -36 17 -33 16 -30 17 -27 17 -25 17 -22 
+16 -19 17 -17 17 -16 17 -13 16 -12 17 -10 17 -10 17 -9 
+16 -8 17 -9 17 -8 16 -9 17 -9 17 -10 17 -11 16 -11 
+17 -13 17 -14 17 -15 16 -16 17 -17 17 -19 17 -19 16 -21 
+17 -21 17 -23 17 -23 16 -23 17 -24 17 -24 16 -24 17 -25 
+17 -24 17 -23 16 -24 17 -22 17 -23 17 -21 16 -20 17 -20 
+17 -19 17 -17 16 -17 17 -15 17 -15 17 -13 16 -13 17 -11 
+17 -11 17 -10 16 -9 4581 2157 100 MP stroke
+17 -8 17 -8 16 -8 17 -8 17 -8 17 -7 16 -9 17 -8 
+17 -10 17 -10 16 -11 17 -13 17 -14 17 -15 16 -18 17 -19 
+17 -21 17 -23 16 -25 17 -28 17 -30 16 -32 17 -35 17 -37 
+17 -39 16 -41 17 -44 17 -46 17 -48 16 -49 17 -52 17 -52 
+17 -54 16 -55 17 -56 17 -57 17 -57 16 -57 17 -57 17 -57 
+16 -56 17 -56 17 -55 17 -53 16 -52 17 -51 17 -49 17 -47 
+16 -45 17 -43 17 -41 17 -39 16 -36 17 -34 17 -32 17 -29 
+16 -27 17 -25 17 -23 16 -20 17 -18 17 -16 17 -15 16 -12 
+17 -11 17 -9 17 -7 16 -6 17 -5 17 -3 17 -2 16 -2 
+17 0 17 0 17 1 16 1 17 2 17 2 17 3 16 2 
+17 3 17 3 16 3 17 3 17 3 17 3 16 3 17 3 
+17 2 17 2 16 2 17 2 17 2 17 2 16 1 17 1 
+17 1 17 1 16 0 2924 4251 100 MP stroke
+17 1 17 0 16 0 17 0 17 0 17 -1 16 0 17 0 
+17 -1 17 -1 16 0 17 -1 17 -1 17 -1 16 -1 17 -1 
+17 -1 17 -1 16 -1 17 -1 17 -2 16 -1 17 -1 17 -1 
+17 -1 16 -1 17 -1 17 0 17 -1 16 -1 17 0 17 -1 
+17 0 16 0 17 0 17 0 17 0 16 1 17 0 17 1 
+16 1 17 0 17 2 17 1 16 1 17 2 17 2 17 2 
+16 2 17 2 17 2 17 3 16 3 17 3 17 3 17 4 
+16 3 17 4 17 3 17 4 16 3 17 4 17 3 16 3 
+17 3 17 1 17 2 16 0 17 -1 17 -2 17 -3 16 -5 
+17 -6 17 -9 17 -10 16 -13 17 -15 17 -18 17 -21 16 -23 
+17 -26 17 -29 16 -31 17 -34 17 -37 17 -39 16 -41 17 -42 
+2 -6 1449 4616 90 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11 
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12 
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11 
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13 
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13 
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13 
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14 
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15 
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14 
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16 
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16 
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18 
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20 
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21 
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23 
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26 
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31 
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39 
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66 
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_2.pdf b/doc/tutorial/images/interpolation_1d_2.pdf
new file mode 100644
index 0000000..4dae8c5
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_2.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_3.eps b/doc/tutorial/images/interpolation_1d_3.eps
new file mode 100755
index 0000000..64fffd9
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_3.eps
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_3.eps
+%%CreationDate: 09/01/2004  09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    59   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    59   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  498   340  5989  4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4262 mt  952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt 
+(0) s
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt 
+(0.2) s
+ 899 2854 mt  952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt 
+(0.4) s
+ 899 2149 mt  952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt 
+(0.6) s
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt 
+(0.8) s
+ 899  741 mt  952  741 L
+6255  741 mt 6201  741 L
+ 718  839 mt 
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+  60   60  998 4262 FO
+  60   60 1642 4262 FO
+  60   60 2136 4262 FO
+  60   60 3071 4262 FO
+  60   60 3501 4262 FO
+  60   60 4149 2634 FO
+  60   60 4498 2196 FO
+  60   60 4980 1713 FO
+  60   60 5431 1332 FO
+  60   60 5987  921 FO
+gs 899 388 5357 4228 MR c np
+15 97 16 119 17 127 17 136 17 142 16 149 17 155 17 160 
+16 164 899 3367 10 MP stroke
+6 -6 16 -27 17 -32 17 -39 17 -43 16 -47 17 -50 17 -53 
+17 -55 16 -56 17 -58 17 -57 16 -57 17 -57 17 -55 17 -53 
+16 -51 17 -49 17 -47 17 -43 16 -41 17 -37 17 -35 17 -31 
+16 -29 17 -25 17 -22 17 -20 16 -17 17 -15 17 -13 16 -11 
+17 -9 17 -8 17 -6 16 -6 17 -5 17 -4 17 -5 16 -4 
+17 -5 17 -5 17 -5 16 -6 17 -8 17 -7 17 -9 16 -10 
+17 -11 17 -12 16 -13 17 -15 17 -15 17 -16 16 -16 17 -18 
+17 -18 17 -18 16 -19 17 -20 17 -19 17 -20 16 -20 17 -19 
+17 -20 17 -19 16 -18 17 -19 17 -18 17 -17 16 -17 17 -17 
+17 -16 16 -16 17 -15 17 -15 17 -15 16 -15 17 -15 17 -15 
+17 -15 16 -15 17 -16 17 -16 17 -17 16 -18 17 -19 17 -21 
+17 -21 16 -23 17 -24 17 -25 16 -28 17 -29 17 -30 17 -33 
+16 -34 17 -36 17 -38 4112 2715 100 MP stroke
+17 -40 16 -41 17 -43 17 -44 17 -46 16 -48 17 -48 17 -50 
+17 -50 16 -52 17 -52 17 -52 16 -53 17 -53 17 -53 17 -52 
+16 -52 17 -52 17 -50 17 -50 16 -48 17 -47 17 -46 17 -44 
+16 -42 17 -41 17 -39 17 -36 16 -35 17 -32 17 -30 16 -28 
+17 -26 17 -23 17 -22 16 -19 17 -17 17 -15 17 -13 16 -11 
+17 -9 17 -7 17 -6 16 -4 17 -2 17 -1 17 0 16 1 
+17 2 17 3 17 4 16 5 17 5 17 6 16 6 17 6 
+17 6 17 7 16 6 17 6 17 7 17 6 16 5 17 6 
+17 5 17 4 16 5 17 3 17 3 17 3 16 2 17 2 
+17 1 16 1 17 0 17 0 17 -1 16 -1 17 -2 17 -2 
+17 -2 16 -3 17 -3 17 -4 17 -3 16 -4 17 -4 17 -5 
+17 -4 16 -5 17 -4 17 -5 16 -4 17 -5 17 -4 17 -5 
+16 -4 17 -3 17 -4 2455 4304 100 MP stroke
+17 -3 16 -3 17 -2 17 -2 17 -2 16 0 17 -1 17 1 
+17 1 16 2 17 2 17 4 16 4 17 5 17 5 17 7 
+16 7 17 8 17 8 17 10 16 9 17 11 17 11 17 11 
+16 11 17 12 17 11 17 12 16 11 17 10 17 10 17 9 
+16 8 17 7 17 6 16 3 17 2 17 0 17 -2 16 -4 
+17 -8 17 -10 17 -12 16 -16 17 -19 17 -22 17 -25 16 -28 
+17 -32 17 -34 17 -38 16 -40 17 -43 17 -46 16 -47 17 -49 
+14 -42 1504 4616 58 MP stroke
+17 170 17 171 16 172 17 171 17 170 17 167 16 165 17 160 
+17 155 17 149 16 142 17 136 17 127 17 119 16 109 17 101 
+17 91 17 80 16 71 17 61 17 50 16 41 17 30 4 4 
+5849 388 25 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11 
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12 
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11 
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13 
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13 
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13 
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14 
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15 
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14 
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16 
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16 
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18 
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20 
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21 
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23 
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26 
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31 
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39 
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66 
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_3.pdf b/doc/tutorial/images/interpolation_1d_3.pdf
new file mode 100644
index 0000000..d545f81
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_3.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_4.eps b/doc/tutorial/images/interpolation_1d_4.eps
new file mode 100755
index 0000000..d038dc2
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_4.eps
@@ -0,0 +1,356 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_4.eps
+%%CreationDate: 09/01/2004  09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    59   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    59   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  498   340  5989  4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4262 mt  952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt 
+(0) s
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt 
+(0.2) s
+ 899 2854 mt  952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt 
+(0.4) s
+ 899 2149 mt  952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt 
+(0.6) s
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt 
+(0.8) s
+ 899  741 mt  952  741 L
+6255  741 mt 6201  741 L
+ 718  839 mt 
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+  60   60  998 4262 FO
+  60   60 1642 4262 FO
+  60   60 2136 4262 FO
+  60   60 3071 4262 FO
+  60   60 3501 4262 FO
+  60   60 4149 2634 FO
+  60   60 4498 2196 FO
+  60   60 4980 1713 FO
+  60   60 5431 1332 FO
+  60   60 5987  921 FO
+gs 899 388 5357 4228 MR c np
+4 23 17 98 16 107 17 116 17 125 17 134 16 142 17 149 
+17 155 16 161 899 3406 11 MP stroke
+17 169 17 172 16 174 17 173 17 174 17 171 16 169 17 164 
+17 159 17 153 16 147 17 138 17 129 17 121 16 110 17 101 
+17 90 17 79 16 68 17 57 17 46 16 37 17 25 17 17 
+17 7 16 -2 17 -10 17 -17 17 -24 16 -31 17 -35 17 -40 
+17 -44 16 -47 17 -49 17 -51 17 -53 16 -53 17 -54 17 -53 
+16 -52 17 -51 17 -50 17 -47 16 -46 17 -44 17 -42 17 -39 
+16 -37 17 -34 17 -31 17 -30 16 -26 17 -25 17 -22 17 -20 
+16 -17 17 -16 17 -14 16 -13 17 -11 17 -9 17 -9 16 -7 
+17 -7 17 -6 17 -6 16 -5 17 -5 17 -5 17 -6 16 -6 
+17 -6 17 -7 17 -8 16 -8 17 -9 17 -11 16 -11 17 -13 
+17 -13 17 -14 16 -16 17 -16 17 -17 17 -18 16 -19 17 -19 
+17 -19 17 -20 16 -20 17 -21 17 -20 17 -20 16 -20 17 -19 
+17 -20 17 -19 16 -18 4581 2112 100 MP stroke
+17 -18 17 -17 16 -17 17 -17 17 -16 17 -16 16 -16 17 -16 
+17 -15 17 -16 16 -16 17 -17 17 -16 17 -18 16 -18 17 -19 
+17 -20 17 -22 16 -22 17 -24 17 -25 16 -26 17 -28 17 -30 
+17 -31 16 -33 17 -34 17 -36 17 -37 16 -39 17 -41 17 -42 
+17 -43 16 -45 17 -45 17 -47 17 -48 16 -49 17 -49 17 -50 
+16 -51 17 -50 17 -51 17 -52 16 -50 17 -51 17 -50 17 -50 
+16 -49 17 -48 17 -47 17 -46 16 -44 17 -43 17 -42 17 -39 
+16 -38 17 -36 17 -34 16 -31 17 -30 17 -27 17 -25 16 -22 
+17 -20 17 -18 17 -16 16 -14 17 -11 17 -9 17 -8 16 -5 
+17 -3 17 -2 17 0 16 1 17 3 17 3 17 5 16 6 
+17 6 17 7 16 8 17 8 17 8 17 8 16 8 17 8 
+17 8 17 7 16 7 17 7 17 6 17 5 16 5 17 4 
+17 3 17 3 16 2 2924 4222 100 MP stroke
+17 1 17 1 16 1 17 -1 17 0 17 -2 16 -1 17 -2 
+17 -2 17 -3 16 -2 17 -3 17 -3 17 -3 16 -3 17 -2 
+17 -3 17 -3 16 -3 17 -3 17 -3 16 -3 17 -2 17 -3 
+17 -3 16 -2 17 -3 17 -3 17 -2 16 -3 17 -2 17 -2 
+17 -2 16 -1 17 -2 17 -1 17 0 16 0 17 1 17 1 
+16 2 17 3 17 3 17 4 16 6 17 6 17 6 17 8 
+16 8 17 10 17 9 17 10 16 11 17 11 17 10 17 11 
+16 10 17 10 17 9 17 9 16 7 17 6 17 5 16 3 
+17 1 17 -1 17 -2 16 -5 17 -7 17 -10 17 -12 16 -14 
+17 -17 17 -19 17 -22 16 -24 17 -26 17 -29 17 -31 16 -32 
+17 -35 17 -36 16 -37 17 -39 17 -40 17 -40 9 -23 1475 4616 88 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11 
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12 
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11 
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13 
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13 
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13 
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14 
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15 
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14 
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16 
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16 
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18 
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20 
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21 
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23 
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26 
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31 
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39 
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66 
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_4.pdf b/doc/tutorial/images/interpolation_1d_4.pdf
new file mode 100644
index 0000000..8efa36f
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_4.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_5.eps b/doc/tutorial/images/interpolation_1d_5.eps
new file mode 100755
index 0000000..19b514c
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_5.eps
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_5.eps
+%%CreationDate: 09/01/2004  09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    59   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    59   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  498   340  5989  4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4262 mt  952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt 
+(0) s
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt 
+(0.2) s
+ 899 2854 mt  952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt 
+(0.4) s
+ 899 2149 mt  952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt 
+(0.6) s
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt 
+(0.8) s
+ 899  741 mt  952  741 L
+6255  741 mt 6201  741 L
+ 718  839 mt 
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+  60   60  998 4262 FO
+  60   60 1642 4262 FO
+  60   60 2136 4262 FO
+  60   60 3071 4262 FO
+  60   60 3501 4262 FO
+  60   60 4149 2634 FO
+  60   60 4498 2196 FO
+  60   60 4980 1713 FO
+  60   60 5431 1332 FO
+  60   60 5987  921 FO
+gs 899 388 5357 4228 MR c np
+6 29 17 96 16 105 17 114 17 124 17 133 16 140 17 149 
+17 155 16 160 899 3411 11 MP stroke
+17 170 17 172 16 174 17 175 17 174 17 172 16 169 17 165 
+17 160 17 153 16 147 17 138 17 130 17 120 16 109 17 100 
+17 89 17 77 16 67 17 56 17 45 16 34 17 25 17 14 
+17 5 16 -3 17 -11 17 -19 17 -25 16 -31 17 -36 17 -40 
+17 -44 16 -46 17 -49 17 -51 17 -52 16 -52 17 -52 17 -51 
+16 -51 17 -49 17 -48 17 -46 16 -44 17 -42 17 -40 17 -37 
+16 -35 17 -33 17 -31 17 -28 16 -25 17 -24 17 -21 17 -20 
+16 -18 17 -15 17 -14 16 -13 17 -11 17 -10 17 -9 16 -8 
+17 -7 17 -7 17 -6 16 -6 17 -6 17 -6 17 -6 16 -6 
+17 -7 17 -7 17 -9 16 -8 17 -10 17 -11 16 -11 17 -13 
+17 -13 17 -15 16 -15 17 -17 17 -17 17 -18 16 -18 17 -19 
+17 -20 17 -20 16 -20 17 -20 17 -20 17 -20 16 -20 17 -20 
+17 -19 17 -18 16 -19 4581 2113 100 MP stroke
+17 -17 17 -18 16 -17 17 -16 17 -16 17 -16 16 -16 17 -15 
+17 -16 17 -16 16 -16 17 -16 17 -17 17 -17 16 -19 17 -19 
+17 -20 17 -21 16 -23 17 -23 17 -25 16 -27 17 -28 17 -30 
+17 -31 16 -33 17 -34 17 -36 17 -37 16 -39 17 -41 17 -42 
+17 -43 16 -44 17 -46 17 -47 17 -47 16 -49 17 -49 17 -50 
+16 -51 17 -50 17 -51 17 -52 16 -51 17 -50 17 -51 17 -49 
+16 -50 17 -48 17 -47 17 -46 16 -44 17 -43 17 -42 17 -40 
+16 -37 17 -36 17 -34 16 -32 17 -29 17 -27 17 -25 16 -22 
+17 -20 17 -18 17 -16 16 -13 17 -11 17 -9 17 -7 16 -6 
+17 -3 17 -2 17 0 16 2 17 2 17 4 17 5 16 6 
+17 6 17 7 16 8 17 7 17 8 17 8 16 8 17 8 
+17 7 17 7 16 7 17 6 17 6 17 5 16 4 17 4 
+17 3 17 3 16 2 2924 4224 100 MP stroke
+17 1 17 1 16 0 17 0 17 -1 17 -1 16 -1 17 -2 
+17 -2 17 -2 16 -2 17 -3 17 -2 17 -3 16 -2 17 -3 
+17 -2 17 -3 16 -2 17 -2 17 -3 16 -2 17 -2 17 -2 
+17 -2 16 -3 17 -2 17 -2 17 -2 16 -3 17 -2 17 -2 
+17 -2 16 -1 17 -2 17 -1 17 -1 16 0 17 0 17 1 
+16 1 17 2 17 3 17 4 16 4 17 5 17 6 17 7 
+16 8 17 8 17 9 17 9 16 10 17 10 17 10 17 10 
+16 9 17 9 17 9 17 8 16 7 17 5 17 5 16 3 
+17 1 17 -1 17 -2 16 -5 17 -6 17 -9 17 -11 16 -13 
+17 -16 17 -18 17 -20 16 -22 17 -24 17 -27 17 -28 16 -30 
+17 -32 17 -34 16 -35 17 -36 17 -37 17 -38 16 -39 3 -7 
+1465 4616 89 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11 
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12 
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11 
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13 
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13 
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13 
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14 
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15 
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14 
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16 
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16 
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18 
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20 
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21 
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23 
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26 
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31 
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39 
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66 
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0 
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0 
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_5.pdf b/doc/tutorial/images/interpolation_1d_5.pdf
new file mode 100644
index 0000000..ef85ff8
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_5.pdf differ
diff --git a/doc/tutorial/images/linogram_grid.eps b/doc/tutorial/images/linogram_grid.eps
new file mode 100644
index 0000000..cf8ddd8
--- /dev/null
+++ b/doc/tutorial/images/linogram_grid.eps
@@ -0,0 +1,87 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (paper.dvi)
%%Version: 1 3
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 20/10/06 15:23
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 363 364 478 463
%%HiResBoundingBox: 362.994 364.042 477.994 462.625
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+

%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put     
ct_CffDict begin                    
/F0Subr     
{
    systemdict /internaldict known 
   {
      1183615869 systemdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } 
   {
      userdict /internaldict known not 
        { 
          userdict /internaldict 
          {
               count 0 eq 
             {/internaldict errordict /invalidaccess get exec} if 
             dup type /integertype ne 
             {/internaldict errordict /invalidaccess get exec} if 
             dup 1183615869 eq
             {pop 0} 
             {/internaldict errordict /invalidaccess get exec} 
             ifelse 
          } 
          dup 14 get 1 25 dict put 
          bind executeonly put 
       } if 
       1183615869 userdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } ifelse
    [ 
       systemdict /internaldict known not 
       { 100 dict /begin cvx /mtx matrix /def cvx } if 
       systemdict /currentpacking known {currentpacking true setpacking} if 
       { 
          systemdict /internaldict known { 
          1183615869 systemdict /internaldict get exec 
          dup /$FlxDict known not { 
          dup dup length exch maxlength eq 
          { pop userdict dup /$FlxDict known not
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } if } 
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } 
          ifelse 
          } if /$FlxDict get begin } if 
          grestore 
          /exdef {exch def} def 
          /dmin exch abs 100 div def 
          /epX exdef /epY exdef 
          /c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef 
          /c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef 
          /c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def 
          /yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def 
          /PickCoords {  
          {c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2} 
          {c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2} 
          ifelse 
          /y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef 
          /y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef 
          } def 
          mtx currentmatrix pop  
          mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or 
          {/flipXY -1 def} 
          {mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or 
          {/flipXY 1 def} 
          {/flipXY 0 def} 
          ifelse } 
          ifelse 
          /erosion 1 def 
          systemdict /internaldict known { 
           1183615869 systemdict /internaldict get exec dup  
          /erosion known 
          {/erosion get /erosion exch def} 
          {pop} 
          ifelse 
          } if 
          yflag 
          {
              flipXY 0 eq c3y2 c4y2 eq or 
             {false PickCoords}
             {
                  /shrink c3y2 c4y2 eq 
                {0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def 
                /yshrink {c4y2 sub shrink mul c4y2 add} def 
                /c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def 
                /c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def 
                /c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def 
                /dY 0 c3y2 c1y2 sub round 
                dtransform flipXY 1 eq {exch} if pop abs def 
                dY dmin lt PickCoords 
                y2 c1y2 sub abs 0.001 gt {
                   c1x2 c1y2 transform flipXY 1 eq {exch} if  
                   /cx exch def /cy exch def 
                   /dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch} 
                   if pop def 
                   dY round dup 0 ne 
                   {/dY exdef } 
                   {pop dY 0 lt {-1}{1} ifelse /dY exdef} 
                   ifelse 
                   /erode PaintType 2 ne erosion 0.5 ge and def  
                   erode {/cy cy 0.5 sub def} if 
                   /ey cy dY add def   
                   /ey ey ceiling ey sub ey floor add def   
                   erode {/ey ey 0.5 add def} if   
                   ey cx flipXY 1 eq {exch} if itransform exch pop  
                   y2 sub /eShift exch def  
                   /y1 y1 eShift add def /y2 y2 eShift add def /y3 y3  
                   eShift add def  
                } if  
             } ifelse  
          } 
          {
              flipXY 0 eq c3x2 c4x2 eq or  
             {false PickCoords }  
             { /shrink c3x2 c4x2 eq  
                {0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def  
                /xshrink {c4x2 sub shrink mul c4x2 add} def  
                /c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def  
                /c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def  
                /c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def  
                /dX c3x2 c1x2 sub round 0 dtransform  
                flipXY -1 eq {exch} if pop abs def 
                dX dmin lt PickCoords  
                x2 c1x2 sub abs 0.001 gt {  
                   c1x2 c1y2 transform flipXY -1 eq {exch} if  
                   /cy exch def /cx exch def   
                   /dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def  
                   dX round dup 0 ne  
                   {/dX exdef}  
                   {pop dX 0 lt {-1}{1} ifelse /dX exdef}  
                   ifelse  
                   /erode PaintType 2 ne erosion .5 ge and def 
                   erode {/cx cx .5 sub def} if  
                   /ex cx dX add def  
                   /ex ex ceiling ex sub ex floor add def  
                   erode {/ex ex .5 add def} if  
                   ex cy flipXY -1 eq {exch} if itransform pop  
                   x2 sub /eShift exch def  
                   /x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def  
                } if  
             } ifelse  
          } ifelse 
          x2 x5 eq y2 y5 eq or  
          {x5 y5 lineto }  
          {x0 y0 x1 y1 x2 y2 curveto  
          x3 y3 x4 y4 x5 y5 curveto}  
          ifelse  
          epY epX   
       }  
       systemdict /currentpacking known {exch setpacking} if   
       /exec cvx /end cvx 
    ] cvx  
    executeonly 
    exch  
    {pop true exch restore}   
    {   
       systemdict /internaldict known not  
       {1183615869 userdict /internaldict get exec  
       exch /FlxProc exch put true}  
       {1183615869 systemdict /internaldict get exec  
       dup length exch maxlength eq  
       {false}   
       {1183615869 systemdict /internaldict get exec 
       exch /FlxProc exch put true}  
       ifelse}  
       ifelse
    } ifelse  
    {
       systemdict /internaldict known  
       {1183615869 systemdict /internaldict get exec /FlxProc get exec}  
       {1183615869 userdict /internaldict get exec /FlxProc get exec}  
       ifelse   
    } if  
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def 
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind  def
/HSSubr 
{
   systemdict /internaldict known not
   {pop 3}
   {1183615869 systemdict /internaldict get exec
    dup /startlock known
    {/startlock get exec}
    {dup /strtlck known
    {/strtlck get exec}
    {pop 3}
    ifelse}
    ifelse}
    ifelse
} bind def
end                                 
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave 
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec

[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3537 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xap="http://ns.adobe.com/xap/1.0/">
+         <xap:CreateDate>2006-10-20T15:23:02+02:00</xap:CreateDate>
+         <xap:ModifyDate>2006-10-20T15:23:02+02:00</xap:ModifyDate>
+         <xap:MetadataDate>2006-10-20T15:23:02+02:00</xap:MetadataDate>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+         <xapMM:DocumentID>uuid:34DD0B9161E111DBB7AD8EFAF1591643</xapMM:DocumentID>
+         <xapMM:InstanceID>uuid:34DD0B9161E111DBB7AD8EFAF1591643</xapMM:InstanceID>
+         <xapMM:DerivedFrom rdf:parseType="Resource">
+            <stRef:instanceID>uuid:091de08b-603e-11db-9b35-000a95cd9010</stRef:instanceID>
+            <stRef:documentID>uuid:47ed4c00-603c-11db-9960-000a95cd9010</stRef:documentID>
+         </xapMM:DerivedFrom>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:title>
+            <rdf:Alt>
+               <rdf:li xml:lang="x-default">paper.dvi</rdf:li>
+            </rdf:Alt>
+         </dc:title>
+         <dc:format>application/eps</dc:format>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end="w"?>

% &end XMP packet& %

[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5

PDFVars/TermAll get exec end end
 PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
362.994 364.042 115.0 98.583 rectclip
q
362.994 364.042 m
477.994 364.042 l
477.994 462.625 l
362.994 462.625 l
h
W
n
q
0.1 0.0 0.0 0.1 0.0 0.0 cm
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
1195.62 4688.31 m
2327.9 4688.31 l
2327.9 3620.38 l
1195.62 3620.38 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
1321.07 4649.21 m
2217.12 4649.21 l
2217.12 3703.47 l
1321.07 3703.47 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 243.734 4059.78 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
2449.61 4685.86 m
3581.89 4685.86 l
3581.89 3620.37 l
2449.61 3620.37 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
2575.06 4646.76 m
3520.8 4646.76 l
3520.8 3701.02 l
2575.06 3701.02 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 1497.72 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: QZEBAA+CMR10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /QZEBAA+CMR10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-40 -250 1009 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 448 666 677] def
/OtherBlues [-206 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [69] def
/StemSnapH [22 31] def
/StemSnapV [69 89] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /ff/fi/fl/ffi
 32 /space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/circumflex/underscore/quoteleft/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/endash/bar/braceright/tilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N41 (QZEBAA+CMR10) -1 TZ
347.615 364.327 m
%ADOBeginSubsetFont: QZEBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/QZEBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
A> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/QZEBAA+CMR10 findfont /Encoding get
dup 53 /five put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(5) show
Q
q
n
3703.6 4688.29 m
4835.88 4688.29 l
4835.88 3620.36 l
3703.6 3620.36 l
h
W
n
n
[/DeviceGray] cs 1.0 sc
3703.600098 3620.360107 1132.279785 1046.750244 rectfill
+
n
3888.520020 3761.290039 828.437988 828.437988 rectfill
+
4.88755 w
1 j
n
3888.52 3761.29 828.438 828.438 re
S
[4.88755 39.1004 ] 0.0 d
3.25837 w
n
3888.52 3761.29 m
3888.52 4589.73 l
0.0 sc
S
n
3888.52 4589.73 m
3888.52 4589.73 l
S
n
3991.97 3761.29 m
3991.97 4589.73 l
S
n
3991.97 4589.73 m
3991.97 4589.73 l
S
n
4096.23 3761.29 m
4096.23 4589.73 l
S
n
4096.23 4589.73 m
4096.23 4589.73 l
S
n
4199.69 3761.29 m
4199.69 4589.73 l
S
n
4199.69 4589.73 m
4199.69 4589.73 l
S
n
4303.14 3761.29 m
4303.14 4589.73 l
S
n
4303.14 4589.73 m
4303.14 4589.73 l
S
n
4406.59 3761.29 m
4406.59 4589.73 l
S
n
4406.59 4589.73 m
4406.59 4589.73 l
S
n
4510.05 3761.29 m
4510.05 4589.73 l
S
n
4510.05 4589.73 m
4510.05 4589.73 l
S
n
4613.5 3761.29 m
4613.5 4589.73 l
S
n
4613.5 4589.73 m
4613.5 4589.73 l
S
n
4716.95 3761.29 m
4716.95 4589.73 l
S
n
4716.95 4589.73 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
4716.95 3761.29 m
4716.95 3761.29 l
S
n
3888.52 3864.74 m
4716.95 3864.74 l
S
n
4716.95 3864.74 m
4716.95 3864.74 l
S
n
3888.52 3968.2 m
4716.95 3968.2 l
S
n
4716.95 3968.2 m
4716.95 3968.2 l
S
n
3888.52 4072.46 m
4716.95 4072.46 l
S
n
4716.95 4072.46 m
4716.95 4072.46 l
S
n
3888.52 4175.91 m
4716.95 4175.91 l
S
n
4716.95 4175.91 m
4716.95 4175.91 l
S
n
3888.52 4279.37 m
4716.95 4279.37 l
S
n
4716.95 4279.37 m
4716.95 4279.37 l
S
n
3888.52 4382.82 m
4716.95 4382.82 l
S
n
4716.95 4382.82 m
4716.95 4382.82 l
S
n
3888.52 4486.27 m
4716.95 4486.27 l
S
n
4716.95 4486.27 m
4716.95 4486.27 l
S
n
3888.52 4589.73 m
4716.95 4589.73 l
S
n
4716.95 4589.73 m
4716.95 4589.73 l
S
[] 0.0 d
4.88755 w
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
3888.52 4589.73 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
3888.52 4589.73 l
S
n
4716.95 3761.29 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
3888.52 3761.29 m
3888.52 4589.73 l
S
n
3888.52 3761.29 m
3888.52 3770.25 l
S
n
3888.52 4589.73 m
3888.52 4580.77 l
S
n
3991.97 3761.29 m
3991.97 3770.25 l
S
n
3991.97 4589.73 m
3991.97 4580.77 l
S
n
4096.23 3761.29 m
4096.23 3770.25 l
S
n
4096.23 4589.73 m
4096.23 4580.77 l
S
n
4199.69 3761.29 m
4199.69 3770.25 l
S
n
4199.69 4589.73 m
4199.69 4580.77 l
S
n
4303.14 3761.29 m
4303.14 3770.25 l
S
n
4303.14 4589.73 m
4303.14 4580.77 l
S
n
4406.59 3761.29 m
4406.59 3770.25 l
S
n
4406.59 4589.73 m
4406.59 4580.77 l
S
n
4510.05 3761.29 m
4510.05 3770.25 l
S
n
4510.05 4589.73 m
4510.05 4580.77 l
S
n
4613.5 3761.29 m
4613.5 3770.25 l
S
n
4613.5 4589.73 m
4613.5 4580.77 l
S
n
4716.95 3761.29 m
4716.95 3770.25 l
S
n
4716.95 4589.73 m
4716.95 4580.77 l
S
n
3888.52 3761.29 m
3897.48 3761.29 l
S
n
4716.95 3761.29 m
4707.99 3761.29 l
S
n
3888.52 3864.74 m
3897.48 3864.74 l
S
n
4716.95 3864.74 m
4707.99 3864.74 l
S
n
3888.52 3968.2 m
3897.48 3968.2 l
S
n
4716.95 3968.2 m
4707.99 3968.2 l
S
n
3888.52 4072.46 m
3897.48 4072.46 l
S
n
4716.95 4072.46 m
4707.99 4072.46 l
S
n
3888.52 4175.91 m
3897.48 4175.91 l
S
n
4716.95 4175.91 m
4707.99 4175.91 l
S
n
3888.52 4279.37 m
3897.48 4279.37 l
S
n
4716.95 4279.37 m
4707.99 4279.37 l
S
n
3888.52 4382.82 m
3897.48 4382.82 l
S
n
4716.95 4382.82 m
4707.99 4382.82 l
S
n
3888.52 4486.27 m
3897.48 4486.27 l
S
n
4716.95 4486.27 m
4707.99 4486.27 l
S
n
3888.52 4589.73 m
3897.48 4589.73 l
S
n
4716.95 4589.73 m
4707.99 4589.73 l
S
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
3888.52 4589.73 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
3888.52 4589.73 l
S
n
4716.95 3761.29 m
4716.95 4589.73 l
S
Q
q
n
3829.05 4649.19 m
4725.1 4649.19 l
4725.1 3701.01 l
3829.05 3701.01 l
h
W
n
n
3898.29 4589.73 m
3898.29 4584.33 3893.91 4579.95 3888.52 4579.95 c
3883.12 4579.95 3878.74 4584.33 3878.74 4589.73 c
3878.74 4595.12 3883.12 4599.5 3888.52 4599.5 c
3893.91 4599.5 3898.29 4595.12 3898.29 4589.73 c
[/DeviceRGB] cs 0.0 0.0 1.0 sc
f
n
3950.42 4537.59 m
3950.42 4532.2 3946.05 4527.82 3940.65 4527.82 c
3935.25 4527.82 3930.88 4532.2 3930.88 4537.59 c
3930.88 4542.99 3935.25 4547.37 3940.65 4547.37 c
3946.05 4547.37 3950.42 4542.99 3950.42 4537.59 c
f
n
4001.74 4486.27 m
4001.74 4480.88 3997.37 4476.5 3991.97 4476.5 c
3986.57 4476.5 3982.19 4480.88 3982.19 4486.27 c
3982.19 4491.67 3986.57 4496.05 3991.97 4496.05 c
3997.37 4496.05 4001.74 4491.67 4001.74 4486.27 c
f
n
4053.88 4434.14 m
4053.88 4428.74 4049.5 4424.36 4044.1 4424.36 c
4038.7 4424.36 4034.33 4428.74 4034.33 4434.14 c
4034.33 4439.54 4038.7 4443.91 4044.1 4443.91 c
4049.5 4443.91 4053.88 4439.54 4053.88 4434.14 c
f
n
4106.01 4382.82 m
4106.01 4377.42 4101.63 4373.05 4096.23 4373.05 c
4090.84 4373.05 4086.46 4377.42 4086.46 4382.82 c
4086.46 4388.22 4090.84 4392.6 4096.23 4392.6 c
4101.63 4392.6 4106.01 4388.22 4106.01 4382.82 c
f
n
4157.33 4330.69 m
4157.33 4325.29 4152.95 4320.91 4147.55 4320.91 c
4142.16 4320.91 4137.78 4325.29 4137.78 4330.69 c
4137.78 4336.09 4142.16 4340.46 4147.55 4340.46 c
4152.95 4340.46 4157.33 4336.09 4157.33 4330.69 c
f
n
4209.46 4279.37 m
4209.46 4273.97 4205.09 4269.59 4199.69 4269.59 c
4194.29 4269.59 4189.91 4273.97 4189.91 4279.37 c
4189.91 4284.77 4194.29 4289.14 4199.69 4289.14 c
4205.09 4289.14 4209.46 4284.77 4209.46 4279.37 c
f
n
4260.78 4227.23 m
4260.78 4221.84 4256.41 4217.46 4251.01 4217.46 c
4245.61 4217.46 4241.23 4221.84 4241.23 4227.23 c
4241.23 4232.63 4245.61 4237.01 4251.01 4237.01 c
4256.41 4237.01 4260.78 4232.63 4260.78 4227.23 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4123.78 m
4364.23 4118.38 4359.86 4114.0 4354.46 4114.0 c
4349.06 4114.0 4344.69 4118.38 4344.69 4123.78 c
4344.69 4129.18 4349.06 4133.55 4354.46 4133.55 c
4359.86 4133.55 4364.23 4129.18 4364.23 4123.78 c
f
n
4416.37 4072.46 m
4416.37 4067.06 4411.99 4062.69 4406.59 4062.69 c
4401.2 4062.69 4396.82 4067.06 4396.82 4072.46 c
4396.82 4077.86 4401.2 4082.24 4406.59 4082.24 c
4411.99 4082.24 4416.37 4077.86 4416.37 4072.46 c
f
n
4467.69 4020.33 m
4467.69 4014.93 4463.31 4010.55 4457.91 4010.55 c
4452.52 4010.55 4448.14 4014.93 4448.14 4020.33 c
4448.14 4025.73 4452.52 4030.1 4457.91 4030.1 c
4463.31 4030.1 4467.69 4025.73 4467.69 4020.33 c
f
n
4519.82 3968.2 m
4519.82 3962.8 4515.45 3958.42 4510.05 3958.42 c
4504.65 3958.42 4500.27 3962.8 4500.27 3968.2 c
4500.27 3973.59 4504.65 3977.97 4510.05 3977.97 c
4515.45 3977.97 4519.82 3973.59 4519.82 3968.2 c
f
n
4571.14 3916.88 m
4571.14 3911.48 4566.77 3907.1 4561.37 3907.1 c
4555.97 3907.1 4551.59 3911.48 4551.59 3916.88 c
4551.59 3922.27 4555.97 3926.65 4561.37 3926.65 c
4566.77 3926.65 4571.14 3922.27 4571.14 3916.88 c
f
n
4623.28 3864.74 m
4623.28 3859.34 4618.9 3854.96 4613.5 3854.96 c
4608.1 3854.96 4603.73 3859.34 4603.73 3864.74 c
4603.73 3870.14 4608.1 3874.52 4613.5 3874.52 c
4618.9 3874.52 4623.28 3870.14 4623.28 3864.74 c
f
n
4674.59 3813.42 m
4674.59 3808.02 4670.22 3803.64 4664.82 3803.64 c
4659.42 3803.64 4655.05 3808.02 4655.05 3813.42 c
4655.05 3818.82 4659.42 3823.2 4664.82 3823.2 c
4670.22 3823.2 4674.59 3818.82 4674.59 3813.42 c
f
n
3898.29 4537.59 m
3898.29 4532.2 3893.91 4527.82 3888.52 4527.82 c
3883.12 4527.82 3878.74 4532.2 3878.74 4537.59 c
3878.74 4542.99 3883.12 4547.37 3888.52 4547.37 c
3893.91 4547.37 3898.29 4542.99 3898.29 4537.59 c
f
n
3950.42 4491.98 m
3950.42 4486.58 3946.05 4482.2 3940.65 4482.2 c
3935.25 4482.2 3930.88 4486.58 3930.88 4491.98 c
3930.88 4497.38 3935.25 4501.75 3940.65 4501.75 c
3946.05 4501.75 3950.42 4497.38 3950.42 4491.98 c
f
n
4001.74 4447.17 m
4001.74 4441.77 3997.37 4437.4 3991.97 4437.4 c
3986.57 4437.4 3982.19 4441.77 3982.19 4447.17 c
3982.19 4452.57 3986.57 4456.95 3991.97 4456.95 c
3997.37 4456.95 4001.74 4452.57 4001.74 4447.17 c
f
n
4053.88 4401.55 m
4053.88 4396.16 4049.5 4391.78 4044.1 4391.78 c
4038.7 4391.78 4034.33 4396.16 4034.33 4401.55 c
4034.33 4406.95 4038.7 4411.33 4044.1 4411.33 c
4049.5 4411.33 4053.88 4406.95 4053.88 4401.55 c
f
n
4106.01 4356.75 m
4106.01 4351.36 4101.63 4346.98 4096.23 4346.98 c
4090.84 4346.98 4086.46 4351.36 4086.46 4356.75 c
4086.46 4362.15 4090.84 4366.53 4096.23 4366.53 c
4101.63 4366.53 4106.01 4362.15 4106.01 4356.75 c
f
n
4157.33 4311.14 m
4157.33 4305.74 4152.95 4301.36 4147.55 4301.36 c
4142.16 4301.36 4137.78 4305.74 4137.78 4311.14 c
4137.78 4316.54 4142.16 4320.91 4147.55 4320.91 c
4152.95 4320.91 4157.33 4316.54 4157.33 4311.14 c
f
n
4209.46 4266.34 m
4209.46 4260.94 4205.09 4256.56 4199.69 4256.56 c
4194.29 4256.56 4189.91 4260.94 4189.91 4266.34 c
4189.91 4271.73 4194.29 4276.11 4199.69 4276.11 c
4205.09 4276.11 4209.46 4271.73 4209.46 4266.34 c
f
n
4260.78 4220.72 m
4260.78 4215.32 4256.41 4210.94 4251.01 4210.94 c
4245.61 4210.94 4241.23 4215.32 4241.23 4220.72 c
4241.23 4226.12 4245.61 4230.49 4251.01 4230.49 c
4256.41 4230.49 4260.78 4226.12 4260.78 4220.72 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4130.3 m
4364.23 4124.9 4359.86 4120.52 4354.46 4120.52 c
4349.06 4120.52 4344.69 4124.9 4344.69 4130.3 c
4344.69 4135.7 4349.06 4140.07 4354.46 4140.07 c
4359.86 4140.07 4364.23 4135.7 4364.23 4130.3 c
f
n
4416.37 4084.68 m
4416.37 4079.28 4411.99 4074.91 4406.59 4074.91 c
4401.2 4074.91 4396.82 4079.28 4396.82 4084.68 c
4396.82 4090.08 4401.2 4094.46 4406.59 4094.46 c
4411.99 4094.46 4416.37 4090.08 4416.37 4084.68 c
f
n
4467.69 4039.88 m
4467.69 4034.48 4463.31 4030.1 4457.91 4030.1 c
4452.52 4030.1 4448.14 4034.48 4448.14 4039.88 c
4448.14 4045.28 4452.52 4049.65 4457.91 4049.65 c
4463.31 4049.65 4467.69 4045.28 4467.69 4039.88 c
f
n
4519.82 3994.26 m
4519.82 3988.86 4515.45 3984.48 4510.05 3984.48 c
4504.65 3984.48 4500.27 3988.86 4500.27 3994.26 c
4500.27 3999.66 4504.65 4004.04 4510.05 4004.04 c
4515.45 4004.04 4519.82 3999.66 4519.82 3994.26 c
f
n
4571.14 3949.46 m
4571.14 3944.06 4566.77 3939.68 4561.37 3939.68 c
4555.97 3939.68 4551.59 3944.06 4551.59 3949.46 c
4551.59 3954.86 4555.97 3959.23 4561.37 3959.23 c
4566.77 3959.23 4571.14 3954.86 4571.14 3949.46 c
f
n
4623.28 3903.84 m
4623.28 3898.44 4618.9 3894.07 4613.5 3894.07 c
4608.1 3894.07 4603.73 3898.44 4603.73 3903.84 c
4603.73 3909.24 4608.1 3913.62 4613.5 3913.62 c
4618.9 3913.62 4623.28 3909.24 4623.28 3903.84 c
f
n
4674.59 3859.04 m
4674.59 3853.64 4670.22 3849.26 4664.82 3849.26 c
4659.42 3849.26 4655.05 3853.64 4655.05 3859.04 c
4655.05 3864.44 4659.42 3868.81 4664.82 3868.81 c
4670.22 3868.81 4674.59 3864.44 4674.59 3859.04 c
f
n
3898.29 4486.27 m
3898.29 4480.88 3893.91 4476.5 3888.52 4476.5 c
3883.12 4476.5 3878.74 4480.88 3878.74 4486.27 c
3878.74 4491.67 3883.12 4496.05 3888.52 4496.05 c
3893.91 4496.05 3898.29 4491.67 3898.29 4486.27 c
f
n
3950.42 4447.17 m
3950.42 4441.77 3946.05 4437.4 3940.65 4437.4 c
3935.25 4437.4 3930.88 4441.77 3930.88 4447.17 c
3930.88 4452.57 3935.25 4456.95 3940.65 4456.95 c
3946.05 4456.95 3950.42 4452.57 3950.42 4447.17 c
f
n
4001.74 4408.07 m
4001.74 4402.68 3997.37 4398.3 3991.97 4398.3 c
3986.57 4398.3 3982.19 4402.68 3982.19 4408.07 c
3982.19 4413.47 3986.57 4417.85 3991.97 4417.85 c
3997.37 4417.85 4001.74 4413.47 4001.74 4408.07 c
f
n
4053.88 4369.79 m
4053.88 4364.39 4049.5 4360.01 4044.1 4360.01 c
4038.7 4360.01 4034.33 4364.39 4034.33 4369.79 c
4034.33 4375.19 4038.7 4379.56 4044.1 4379.56 c
4049.5 4379.56 4053.88 4375.19 4053.88 4369.79 c
f
n
4106.01 4330.69 m
4106.01 4325.29 4101.63 4320.91 4096.23 4320.91 c
4090.84 4320.91 4086.46 4325.29 4086.46 4330.69 c
4086.46 4336.09 4090.84 4340.46 4096.23 4340.46 c
4101.63 4340.46 4106.01 4336.09 4106.01 4330.69 c
f
n
4157.33 4291.59 m
4157.33 4286.19 4152.95 4281.81 4147.55 4281.81 c
4142.16 4281.81 4137.78 4286.19 4137.78 4291.59 c
4137.78 4296.98 4142.16 4301.36 4147.55 4301.36 c
4152.95 4301.36 4157.33 4296.98 4157.33 4291.59 c
f
n
4209.46 4253.3 m
4209.46 4247.9 4205.09 4243.53 4199.69 4243.53 c
4194.29 4243.53 4189.91 4247.9 4189.91 4253.3 c
4189.91 4258.7 4194.29 4263.07 4199.69 4263.07 c
4205.09 4263.07 4209.46 4258.7 4209.46 4253.3 c
f
n
4260.78 4214.2 m
4260.78 4208.8 4256.41 4204.43 4251.01 4204.43 c
4245.61 4204.43 4241.23 4208.8 4241.23 4214.2 c
4241.23 4219.6 4245.61 4223.98 4251.01 4223.98 c
4256.41 4223.98 4260.78 4219.6 4260.78 4214.2 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4136.81 m
4364.23 4131.41 4359.86 4127.04 4354.46 4127.04 c
4349.06 4127.04 4344.69 4131.41 4344.69 4136.81 c
4344.69 4142.21 4349.06 4146.59 4354.46 4146.59 c
4359.86 4146.59 4364.23 4142.21 4364.23 4136.81 c
f
n
4416.37 4097.71 m
4416.37 4092.32 4411.99 4087.94 4406.59 4087.94 c
4401.2 4087.94 4396.82 4092.32 4396.82 4097.71 c
4396.82 4103.11 4401.2 4107.49 4406.59 4107.49 c
4411.99 4107.49 4416.37 4103.11 4416.37 4097.71 c
f
n
4467.69 4059.43 m
4467.69 4054.03 4463.31 4049.65 4457.91 4049.65 c
4452.52 4049.65 4448.14 4054.03 4448.14 4059.43 c
4448.14 4064.83 4452.52 4069.2 4457.91 4069.2 c
4463.31 4069.2 4467.69 4064.83 4467.69 4059.43 c
f
n
4519.82 4020.33 m
4519.82 4014.93 4515.45 4010.55 4510.05 4010.55 c
4504.65 4010.55 4500.27 4014.93 4500.27 4020.33 c
4500.27 4025.73 4504.65 4030.1 4510.05 4030.1 c
4515.45 4030.1 4519.82 4025.73 4519.82 4020.33 c
f
n
4571.14 3981.23 m
4571.14 3975.83 4566.77 3971.45 4561.37 3971.45 c
4555.97 3971.45 4551.59 3975.83 4551.59 3981.23 c
4551.59 3986.62 4555.97 3991.0 4561.37 3991.0 c
4566.77 3991.0 4571.14 3986.62 4571.14 3981.23 c
f
n
4623.28 3942.94 m
4623.28 3937.54 4618.9 3933.17 4613.5 3933.17 c
4608.1 3933.17 4603.73 3937.54 4603.73 3942.94 c
4603.73 3948.34 4608.1 3952.71 4613.5 3952.71 c
4618.9 3952.71 4623.28 3948.34 4623.28 3942.94 c
f
n
4674.59 3903.84 m
4674.59 3898.44 4670.22 3894.07 4664.82 3894.07 c
4659.42 3894.07 4655.05 3898.44 4655.05 3903.84 c
4655.05 3909.24 4659.42 3913.62 4664.82 3913.62 c
4670.22 3913.62 4674.59 3909.24 4674.59 3903.84 c
f
n
3898.29 4434.14 m
3898.29 4428.74 3893.91 4424.36 3888.52 4424.36 c
3883.12 4424.36 3878.74 4428.74 3878.74 4434.14 c
3878.74 4439.54 3883.12 4443.91 3888.52 4443.91 c
3893.91 4443.91 3898.29 4439.54 3898.29 4434.14 c
f
n
3950.42 4401.55 m
3950.42 4396.16 3946.05 4391.78 3940.65 4391.78 c
3935.25 4391.78 3930.88 4396.16 3930.88 4401.55 c
3930.88 4406.95 3935.25 4411.33 3940.65 4411.33 c
3946.05 4411.33 3950.42 4406.95 3950.42 4401.55 c
f
n
4001.74 4369.79 m
4001.74 4364.39 3997.37 4360.01 3991.97 4360.01 c
3986.57 4360.01 3982.19 4364.39 3982.19 4369.79 c
3982.19 4375.19 3986.57 4379.56 3991.97 4379.56 c
3997.37 4379.56 4001.74 4375.19 4001.74 4369.79 c
f
n
4053.88 4337.2 m
4053.88 4331.8 4049.5 4327.43 4044.1 4327.43 c
4038.7 4327.43 4034.33 4331.8 4034.33 4337.2 c
4034.33 4342.6 4038.7 4346.98 4044.1 4346.98 c
4049.5 4346.98 4053.88 4342.6 4053.88 4337.2 c
f
n
4106.01 4304.62 m
4106.01 4299.22 4101.63 4294.84 4096.23 4294.84 c
4090.84 4294.84 4086.46 4299.22 4086.46 4304.62 c
4086.46 4310.02 4090.84 4314.39 4096.23 4314.39 c
4101.63 4314.39 4106.01 4310.02 4106.01 4304.62 c
f
n
4157.33 4272.85 m
4157.33 4267.45 4152.95 4263.07 4147.55 4263.07 c
4142.16 4263.07 4137.78 4267.45 4137.78 4272.85 c
4137.78 4278.25 4142.16 4282.62 4147.55 4282.62 c
4152.95 4282.62 4157.33 4278.25 4157.33 4272.85 c
f
n
4209.46 4240.27 m
4209.46 4234.87 4205.09 4230.49 4199.69 4230.49 c
4194.29 4230.49 4189.91 4234.87 4189.91 4240.27 c
4189.91 4245.66 4194.29 4250.04 4199.69 4250.04 c
4205.09 4250.04 4209.46 4245.66 4209.46 4240.27 c
f
n
4260.78 4207.68 m
4260.78 4202.29 4256.41 4197.91 4251.01 4197.91 c
4245.61 4197.91 4241.23 4202.29 4241.23 4207.68 c
4241.23 4213.08 4245.61 4217.46 4251.01 4217.46 c
4256.41 4217.46 4260.78 4213.08 4260.78 4207.68 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4143.33 m
4364.23 4137.93 4359.86 4133.55 4354.46 4133.55 c
4349.06 4133.55 4344.69 4137.93 4344.69 4143.33 c
4344.69 4148.73 4349.06 4153.11 4354.46 4153.11 c
4359.86 4153.11 4364.23 4148.73 4364.23 4143.33 c
f
n
4416.37 4110.75 m
4416.37 4105.35 4411.99 4100.97 4406.59 4100.97 c
4401.2 4100.97 4396.82 4105.35 4396.82 4110.75 c
4396.82 4116.14 4401.2 4120.52 4406.59 4120.52 c
4411.99 4120.52 4416.37 4116.14 4416.37 4110.75 c
f
n
4467.69 4078.16 m
4467.69 4072.77 4463.31 4068.39 4457.91 4068.39 c
4452.52 4068.39 4448.14 4072.77 4448.14 4078.16 c
4448.14 4083.56 4452.52 4087.94 4457.91 4087.94 c
4463.31 4087.94 4467.69 4083.56 4467.69 4078.16 c
f
n
4519.82 4046.39 m
4519.82 4041.0 4515.45 4036.62 4510.05 4036.62 c
4504.65 4036.62 4500.27 4041.0 4500.27 4046.39 c
4500.27 4051.79 4504.65 4056.17 4510.05 4056.17 c
4515.45 4056.17 4519.82 4051.79 4519.82 4046.39 c
f
n
4571.14 4013.81 m
4571.14 4008.41 4566.77 4004.04 4561.37 4004.04 c
4555.97 4004.04 4551.59 4008.41 4551.59 4013.81 c
4551.59 4019.21 4555.97 4023.59 4561.37 4023.59 c
4566.77 4023.59 4571.14 4019.21 4571.14 4013.81 c
f
n
4623.28 3981.23 m
4623.28 3975.83 4618.9 3971.45 4613.5 3971.45 c
4608.1 3971.45 4603.73 3975.83 4603.73 3981.23 c
4603.73 3986.62 4608.1 3991.0 4613.5 3991.0 c
4618.9 3991.0 4623.28 3986.62 4623.28 3981.23 c
f
n
4674.59 3949.46 m
4674.59 3944.06 4670.22 3939.68 4664.82 3939.68 c
4659.42 3939.68 4655.05 3944.06 4655.05 3949.46 c
4655.05 3954.86 4659.42 3959.23 4664.82 3959.23 c
4670.22 3959.23 4674.59 3954.86 4674.59 3949.46 c
f
n
3898.29 4382.82 m
3898.29 4377.42 3893.91 4373.05 3888.52 4373.05 c
3883.12 4373.05 3878.74 4377.42 3878.74 4382.82 c
3878.74 4388.22 3883.12 4392.6 3888.52 4392.6 c
3893.91 4392.6 3898.29 4388.22 3898.29 4382.82 c
f
n
3950.42 4356.75 m
3950.42 4351.36 3946.05 4346.98 3940.65 4346.98 c
3935.25 4346.98 3930.88 4351.36 3930.88 4356.75 c
3930.88 4362.15 3935.25 4366.53 3940.65 4366.53 c
3946.05 4366.53 3950.42 4362.15 3950.42 4356.75 c
f
n
4001.74 4330.69 m
4001.74 4325.29 3997.37 4320.91 3991.97 4320.91 c
3986.57 4320.91 3982.19 4325.29 3982.19 4330.69 c
3982.19 4336.09 3986.57 4340.46 3991.97 4340.46 c
3997.37 4340.46 4001.74 4336.09 4001.74 4330.69 c
f
n
4053.88 4304.62 m
4053.88 4299.22 4049.5 4294.84 4044.1 4294.84 c
4038.7 4294.84 4034.33 4299.22 4034.33 4304.62 c
4034.33 4310.02 4038.7 4314.39 4044.1 4314.39 c
4049.5 4314.39 4053.88 4310.02 4053.88 4304.62 c
f
n
4106.01 4279.37 m
4106.01 4273.97 4101.63 4269.59 4096.23 4269.59 c
4090.84 4269.59 4086.46 4273.97 4086.46 4279.37 c
4086.46 4284.77 4090.84 4289.14 4096.23 4289.14 c
4101.63 4289.14 4106.01 4284.77 4106.01 4279.37 c
f
n
4157.33 4253.3 m
4157.33 4247.9 4152.95 4243.53 4147.55 4243.53 c
4142.16 4243.53 4137.78 4247.9 4137.78 4253.3 c
4137.78 4258.7 4142.16 4263.07 4147.55 4263.07 c
4152.95 4263.07 4157.33 4258.7 4157.33 4253.3 c
f
n
4209.46 4227.23 m
4209.46 4221.84 4205.09 4217.46 4199.69 4217.46 c
4194.29 4217.46 4189.91 4221.84 4189.91 4227.23 c
4189.91 4232.63 4194.29 4237.01 4199.69 4237.01 c
4205.09 4237.01 4209.46 4232.63 4209.46 4227.23 c
f
n
4260.78 4201.17 m
4260.78 4195.77 4256.41 4191.39 4251.01 4191.39 c
4245.61 4191.39 4241.23 4195.77 4241.23 4201.17 c
4241.23 4206.57 4245.61 4210.94 4251.01 4210.94 c
4256.41 4210.94 4260.78 4206.57 4260.78 4201.17 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4149.85 m
4364.23 4144.45 4359.86 4140.07 4354.46 4140.07 c
4349.06 4140.07 4344.69 4144.45 4344.69 4149.85 c
4344.69 4155.25 4349.06 4159.62 4354.46 4159.62 c
4359.86 4159.62 4364.23 4155.25 4364.23 4149.85 c
f
n
4416.37 4123.78 m
4416.37 4118.38 4411.99 4114.0 4406.59 4114.0 c
4401.2 4114.0 4396.82 4118.38 4396.82 4123.78 c
4396.82 4129.18 4401.2 4133.55 4406.59 4133.55 c
4411.99 4133.55 4416.37 4129.18 4416.37 4123.78 c
f
n
4467.69 4097.71 m
4467.69 4092.32 4463.31 4087.94 4457.91 4087.94 c
4452.52 4087.94 4448.14 4092.32 4448.14 4097.71 c
4448.14 4103.11 4452.52 4107.49 4457.91 4107.49 c
4463.31 4107.49 4467.69 4103.11 4467.69 4097.71 c
f
n
4519.82 4072.46 m
4519.82 4067.06 4515.45 4062.69 4510.05 4062.69 c
4504.65 4062.69 4500.27 4067.06 4500.27 4072.46 c
4500.27 4077.86 4504.65 4082.24 4510.05 4082.24 c
4515.45 4082.24 4519.82 4077.86 4519.82 4072.46 c
f
n
4571.14 4046.39 m
4571.14 4041.0 4566.77 4036.62 4561.37 4036.62 c
4555.97 4036.62 4551.59 4041.0 4551.59 4046.39 c
4551.59 4051.79 4555.97 4056.17 4561.37 4056.17 c
4566.77 4056.17 4571.14 4051.79 4571.14 4046.39 c
f
n
4623.28 4020.33 m
4623.28 4014.93 4618.9 4010.55 4613.5 4010.55 c
4608.1 4010.55 4603.73 4014.93 4603.73 4020.33 c
4603.73 4025.73 4608.1 4030.1 4613.5 4030.1 c
4618.9 4030.1 4623.28 4025.73 4623.28 4020.33 c
f
n
4674.59 3994.26 m
4674.59 3988.86 4670.22 3984.48 4664.82 3984.48 c
4659.42 3984.48 4655.05 3988.86 4655.05 3994.26 c
4655.05 3999.66 4659.42 4004.04 4664.82 4004.04 c
4670.22 4004.04 4674.59 3999.66 4674.59 3994.26 c
f
n
3898.29 4330.69 m
3898.29 4325.29 3893.91 4320.91 3888.52 4320.91 c
3883.12 4320.91 3878.74 4325.29 3878.74 4330.69 c
3878.74 4336.09 3883.12 4340.46 3888.52 4340.46 c
3893.91 4340.46 3898.29 4336.09 3898.29 4330.69 c
f
n
3950.42 4311.14 m
3950.42 4305.74 3946.05 4301.36 3940.65 4301.36 c
3935.25 4301.36 3930.88 4305.74 3930.88 4311.14 c
3930.88 4316.54 3935.25 4320.91 3940.65 4320.91 c
3946.05 4320.91 3950.42 4316.54 3950.42 4311.14 c
f
n
4001.74 4291.59 m
4001.74 4286.19 3997.37 4281.81 3991.97 4281.81 c
3986.57 4281.81 3982.19 4286.19 3982.19 4291.59 c
3982.19 4296.98 3986.57 4301.36 3991.97 4301.36 c
3997.37 4301.36 4001.74 4296.98 4001.74 4291.59 c
f
n
4053.88 4272.85 m
4053.88 4267.45 4049.5 4263.07 4044.1 4263.07 c
4038.7 4263.07 4034.33 4267.45 4034.33 4272.85 c
4034.33 4278.25 4038.7 4282.62 4044.1 4282.62 c
4049.5 4282.62 4053.88 4278.25 4053.88 4272.85 c
f
n
4106.01 4253.3 m
4106.01 4247.9 4101.63 4243.53 4096.23 4243.53 c
4090.84 4243.53 4086.46 4247.9 4086.46 4253.3 c
4086.46 4258.7 4090.84 4263.07 4096.23 4263.07 c
4101.63 4263.07 4106.01 4258.7 4106.01 4253.3 c
f
n
4157.33 4233.75 m
4157.33 4228.35 4152.95 4223.98 4147.55 4223.98 c
4142.16 4223.98 4137.78 4228.35 4137.78 4233.75 c
4137.78 4239.15 4142.16 4243.53 4147.55 4243.53 c
4152.95 4243.53 4157.33 4239.15 4157.33 4233.75 c
f
n
4209.46 4214.2 m
4209.46 4208.8 4205.09 4204.43 4199.69 4204.43 c
4194.29 4204.43 4189.91 4208.8 4189.91 4214.2 c
4189.91 4219.6 4194.29 4223.98 4199.69 4223.98 c
4205.09 4223.98 4209.46 4219.6 4209.46 4214.2 c
f
n
4260.78 4194.65 m
4260.78 4189.25 4256.41 4184.88 4251.01 4184.88 c
4245.61 4184.88 4241.23 4189.25 4241.23 4194.65 c
4241.23 4200.05 4245.61 4204.43 4251.01 4204.43 c
4256.41 4204.43 4260.78 4200.05 4260.78 4194.65 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4156.36 m
4364.23 4150.96 4359.86 4146.59 4354.46 4146.59 c
4349.06 4146.59 4344.69 4150.96 4344.69 4156.36 c
4344.69 4161.76 4349.06 4166.14 4354.46 4166.14 c
4359.86 4166.14 4364.23 4161.76 4364.23 4156.36 c
f
n
4416.37 4136.81 m
4416.37 4131.41 4411.99 4127.04 4406.59 4127.04 c
4401.2 4127.04 4396.82 4131.41 4396.82 4136.81 c
4396.82 4142.21 4401.2 4146.59 4406.59 4146.59 c
4411.99 4146.59 4416.37 4142.21 4416.37 4136.81 c
f
n
4467.69 4117.27 m
4467.69 4111.87 4463.31 4107.49 4457.91 4107.49 c
4452.52 4107.49 4448.14 4111.87 4448.14 4117.27 c
4448.14 4122.66 4452.52 4127.04 4457.91 4127.04 c
4463.31 4127.04 4467.69 4122.66 4467.69 4117.27 c
f
n
4519.82 4097.71 m
4519.82 4092.32 4515.45 4087.94 4510.05 4087.94 c
4504.65 4087.94 4500.27 4092.32 4500.27 4097.71 c
4500.27 4103.11 4504.65 4107.49 4510.05 4107.49 c
4515.45 4107.49 4519.82 4103.11 4519.82 4097.71 c
f
n
4571.14 4078.16 m
4571.14 4072.77 4566.77 4068.39 4561.37 4068.39 c
4555.97 4068.39 4551.59 4072.77 4551.59 4078.16 c
4551.59 4083.56 4555.97 4087.94 4561.37 4087.94 c
4566.77 4087.94 4571.14 4083.56 4571.14 4078.16 c
f
n
4623.28 4059.43 m
4623.28 4054.03 4618.9 4049.65 4613.5 4049.65 c
4608.1 4049.65 4603.73 4054.03 4603.73 4059.43 c
4603.73 4064.83 4608.1 4069.2 4613.5 4069.2 c
4618.9 4069.2 4623.28 4064.83 4623.28 4059.43 c
f
n
4674.59 4039.88 m
4674.59 4034.48 4670.22 4030.1 4664.82 4030.1 c
4659.42 4030.1 4655.05 4034.48 4655.05 4039.88 c
4655.05 4045.28 4659.42 4049.65 4664.82 4049.65 c
4670.22 4049.65 4674.59 4045.28 4674.59 4039.88 c
f
n
3898.29 4279.37 m
3898.29 4273.97 3893.91 4269.59 3888.52 4269.59 c
3883.12 4269.59 3878.74 4273.97 3878.74 4279.37 c
3878.74 4284.77 3883.12 4289.14 3888.52 4289.14 c
3893.91 4289.14 3898.29 4284.77 3898.29 4279.37 c
f
n
3950.42 4266.34 m
3950.42 4260.94 3946.05 4256.56 3940.65 4256.56 c
3935.25 4256.56 3930.88 4260.94 3930.88 4266.34 c
3930.88 4271.73 3935.25 4276.11 3940.65 4276.11 c
3946.05 4276.11 3950.42 4271.73 3950.42 4266.34 c
f
n
4001.74 4253.3 m
4001.74 4247.9 3997.37 4243.53 3991.97 4243.53 c
3986.57 4243.53 3982.19 4247.9 3982.19 4253.3 c
3982.19 4258.7 3986.57 4263.07 3991.97 4263.07 c
3997.37 4263.07 4001.74 4258.7 4001.74 4253.3 c
f
n
4053.88 4240.27 m
4053.88 4234.87 4049.5 4230.49 4044.1 4230.49 c
4038.7 4230.49 4034.33 4234.87 4034.33 4240.27 c
4034.33 4245.66 4038.7 4250.04 4044.1 4250.04 c
4049.5 4250.04 4053.88 4245.66 4053.88 4240.27 c
f
n
4106.01 4227.23 m
4106.01 4221.84 4101.63 4217.46 4096.23 4217.46 c
4090.84 4217.46 4086.46 4221.84 4086.46 4227.23 c
4086.46 4232.63 4090.84 4237.01 4096.23 4237.01 c
4101.63 4237.01 4106.01 4232.63 4106.01 4227.23 c
f
n
4157.33 4214.2 m
4157.33 4208.8 4152.95 4204.43 4147.55 4204.43 c
4142.16 4204.43 4137.78 4208.8 4137.78 4214.2 c
4137.78 4219.6 4142.16 4223.98 4147.55 4223.98 c
4152.95 4223.98 4157.33 4219.6 4157.33 4214.2 c
f
n
4209.46 4201.17 m
4209.46 4195.77 4205.09 4191.39 4199.69 4191.39 c
4194.29 4191.39 4189.91 4195.77 4189.91 4201.17 c
4189.91 4206.57 4194.29 4210.94 4199.69 4210.94 c
4205.09 4210.94 4209.46 4206.57 4209.46 4201.17 c
f
n
4260.78 4188.13 m
4260.78 4182.73 4256.41 4178.36 4251.01 4178.36 c
4245.61 4178.36 4241.23 4182.73 4241.23 4188.13 c
4241.23 4193.53 4245.61 4197.91 4251.01 4197.91 c
4256.41 4197.91 4260.78 4193.53 4260.78 4188.13 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4162.88 m
4364.23 4157.48 4359.86 4153.11 4354.46 4153.11 c
4349.06 4153.11 4344.69 4157.48 4344.69 4162.88 c
4344.69 4168.28 4349.06 4172.66 4354.46 4172.66 c
4359.86 4172.66 4364.23 4168.28 4364.23 4162.88 c
f
n
4416.37 4149.85 m
4416.37 4144.45 4411.99 4140.07 4406.59 4140.07 c
4401.2 4140.07 4396.82 4144.45 4396.82 4149.85 c
4396.82 4155.25 4401.2 4159.62 4406.59 4159.62 c
4411.99 4159.62 4416.37 4155.25 4416.37 4149.85 c
f
n
4467.69 4136.81 m
4467.69 4131.41 4463.31 4127.04 4457.91 4127.04 c
4452.52 4127.04 4448.14 4131.41 4448.14 4136.81 c
4448.14 4142.21 4452.52 4146.59 4457.91 4146.59 c
4463.31 4146.59 4467.69 4142.21 4467.69 4136.81 c
f
n
4519.82 4123.78 m
4519.82 4118.38 4515.45 4114.0 4510.05 4114.0 c
4504.65 4114.0 4500.27 4118.38 4500.27 4123.78 c
4500.27 4129.18 4504.65 4133.55 4510.05 4133.55 c
4515.45 4133.55 4519.82 4129.18 4519.82 4123.78 c
f
n
4571.14 4110.75 m
4571.14 4105.35 4566.77 4100.97 4561.37 4100.97 c
4555.97 4100.97 4551.59 4105.35 4551.59 4110.75 c
4551.59 4116.14 4555.97 4120.52 4561.37 4120.52 c
4566.77 4120.52 4571.14 4116.14 4571.14 4110.75 c
f
n
4623.28 4097.71 m
4623.28 4092.32 4618.9 4087.94 4613.5 4087.94 c
4608.1 4087.94 4603.73 4092.32 4603.73 4097.71 c
4603.73 4103.11 4608.1 4107.49 4613.5 4107.49 c
4618.9 4107.49 4623.28 4103.11 4623.28 4097.71 c
f
n
4674.59 4084.68 m
4674.59 4079.28 4670.22 4074.91 4664.82 4074.91 c
4659.42 4074.91 4655.05 4079.28 4655.05 4084.68 c
4655.05 4090.08 4659.42 4094.46 4664.82 4094.46 c
4670.22 4094.46 4674.59 4090.08 4674.59 4084.68 c
f
n
3898.29 4227.23 m
3898.29 4221.84 3893.91 4217.46 3888.52 4217.46 c
3883.12 4217.46 3878.74 4221.84 3878.74 4227.23 c
3878.74 4232.63 3883.12 4237.01 3888.52 4237.01 c
3893.91 4237.01 3898.29 4232.63 3898.29 4227.23 c
f
n
3950.42 4220.72 m
3950.42 4215.32 3946.05 4210.94 3940.65 4210.94 c
3935.25 4210.94 3930.88 4215.32 3930.88 4220.72 c
3930.88 4226.12 3935.25 4230.49 3940.65 4230.49 c
3946.05 4230.49 3950.42 4226.12 3950.42 4220.72 c
f
n
4001.74 4214.2 m
4001.74 4208.8 3997.37 4204.43 3991.97 4204.43 c
3986.57 4204.43 3982.19 4208.8 3982.19 4214.2 c
3982.19 4219.6 3986.57 4223.98 3991.97 4223.98 c
3997.37 4223.98 4001.74 4219.6 4001.74 4214.2 c
f
n
4053.88 4207.68 m
4053.88 4202.29 4049.5 4197.91 4044.1 4197.91 c
4038.7 4197.91 4034.33 4202.29 4034.33 4207.68 c
4034.33 4213.08 4038.7 4217.46 4044.1 4217.46 c
4049.5 4217.46 4053.88 4213.08 4053.88 4207.68 c
f
n
4106.01 4201.17 m
4106.01 4195.77 4101.63 4191.39 4096.23 4191.39 c
4090.84 4191.39 4086.46 4195.77 4086.46 4201.17 c
4086.46 4206.57 4090.84 4210.94 4096.23 4210.94 c
4101.63 4210.94 4106.01 4206.57 4106.01 4201.17 c
f
n
4157.33 4194.65 m
4157.33 4189.25 4152.95 4184.88 4147.55 4184.88 c
4142.16 4184.88 4137.78 4189.25 4137.78 4194.65 c
4137.78 4200.05 4142.16 4204.43 4147.55 4204.43 c
4152.95 4204.43 4157.33 4200.05 4157.33 4194.65 c
f
n
4209.46 4188.13 m
4209.46 4182.73 4205.09 4178.36 4199.69 4178.36 c
4194.29 4178.36 4189.91 4182.73 4189.91 4188.13 c
4189.91 4193.53 4194.29 4197.91 4199.69 4197.91 c
4205.09 4197.91 4209.46 4193.53 4209.46 4188.13 c
f
n
4260.78 4181.62 m
4260.78 4176.22 4256.41 4171.84 4251.01 4171.84 c
4245.61 4171.84 4241.23 4176.22 4241.23 4181.62 c
4241.23 4187.02 4245.61 4191.39 4251.01 4191.39 c
4256.41 4191.39 4260.78 4187.02 4260.78 4181.62 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4169.4 m
4364.23 4164.0 4359.86 4159.62 4354.46 4159.62 c
4349.06 4159.62 4344.69 4164.0 4344.69 4169.4 c
4344.69 4174.8 4349.06 4179.17 4354.46 4179.17 c
4359.86 4179.17 4364.23 4174.8 4364.23 4169.4 c
f
n
4416.37 4162.88 m
4416.37 4157.48 4411.99 4153.11 4406.59 4153.11 c
4401.2 4153.11 4396.82 4157.48 4396.82 4162.88 c
4396.82 4168.28 4401.2 4172.66 4406.59 4172.66 c
4411.99 4172.66 4416.37 4168.28 4416.37 4162.88 c
f
n
4467.69 4156.36 m
4467.69 4150.96 4463.31 4146.59 4457.91 4146.59 c
4452.52 4146.59 4448.14 4150.96 4448.14 4156.36 c
4448.14 4161.76 4452.52 4166.14 4457.91 4166.14 c
4463.31 4166.14 4467.69 4161.76 4467.69 4156.36 c
f
n
4519.82 4149.85 m
4519.82 4144.45 4515.45 4140.07 4510.05 4140.07 c
4504.65 4140.07 4500.27 4144.45 4500.27 4149.85 c
4500.27 4155.25 4504.65 4159.62 4510.05 4159.62 c
4515.45 4159.62 4519.82 4155.25 4519.82 4149.85 c
f
n
4571.14 4143.33 m
4571.14 4137.93 4566.77 4133.55 4561.37 4133.55 c
4555.97 4133.55 4551.59 4137.93 4551.59 4143.33 c
4551.59 4148.73 4555.97 4153.11 4561.37 4153.11 c
4566.77 4153.11 4571.14 4148.73 4571.14 4143.33 c
f
n
4623.28 4136.81 m
4623.28 4131.41 4618.9 4127.04 4613.5 4127.04 c
4608.1 4127.04 4603.73 4131.41 4603.73 4136.81 c
4603.73 4142.21 4608.1 4146.59 4613.5 4146.59 c
4618.9 4146.59 4623.28 4142.21 4623.28 4136.81 c
f
n
4674.59 4130.3 m
4674.59 4124.9 4670.22 4120.52 4664.82 4120.52 c
4659.42 4120.52 4655.05 4124.9 4655.05 4130.3 c
4655.05 4135.7 4659.42 4140.07 4664.82 4140.07 c
4670.22 4140.07 4674.59 4135.7 4674.59 4130.3 c
f
n
3898.29 4175.91 m
3898.29 4170.52 3893.91 4166.14 3888.52 4166.14 c
3883.12 4166.14 3878.74 4170.52 3878.74 4175.91 c
3878.74 4181.31 3883.12 4185.69 3888.52 4185.69 c
3893.91 4185.69 3898.29 4181.31 3898.29 4175.91 c
f
n
3950.42 4175.91 m
3950.42 4170.52 3946.05 4166.14 3940.65 4166.14 c
3935.25 4166.14 3930.88 4170.52 3930.88 4175.91 c
3930.88 4181.31 3935.25 4185.69 3940.65 4185.69 c
3946.05 4185.69 3950.42 4181.31 3950.42 4175.91 c
f
n
4001.74 4175.91 m
4001.74 4170.52 3997.37 4166.14 3991.97 4166.14 c
3986.57 4166.14 3982.19 4170.52 3982.19 4175.91 c
3982.19 4181.31 3986.57 4185.69 3991.97 4185.69 c
3997.37 4185.69 4001.74 4181.31 4001.74 4175.91 c
f
n
4053.88 4175.91 m
4053.88 4170.52 4049.5 4166.14 4044.1 4166.14 c
4038.7 4166.14 4034.33 4170.52 4034.33 4175.91 c
4034.33 4181.31 4038.7 4185.69 4044.1 4185.69 c
4049.5 4185.69 4053.88 4181.31 4053.88 4175.91 c
f
n
4106.01 4175.91 m
4106.01 4170.52 4101.63 4166.14 4096.23 4166.14 c
4090.84 4166.14 4086.46 4170.52 4086.46 4175.91 c
4086.46 4181.31 4090.84 4185.69 4096.23 4185.69 c
4101.63 4185.69 4106.01 4181.31 4106.01 4175.91 c
f
n
4157.33 4175.91 m
4157.33 4170.52 4152.95 4166.14 4147.55 4166.14 c
4142.16 4166.14 4137.78 4170.52 4137.78 4175.91 c
4137.78 4181.31 4142.16 4185.69 4147.55 4185.69 c
4152.95 4185.69 4157.33 4181.31 4157.33 4175.91 c
f
n
4209.46 4175.91 m
4209.46 4170.52 4205.09 4166.14 4199.69 4166.14 c
4194.29 4166.14 4189.91 4170.52 4189.91 4175.91 c
4189.91 4181.31 4194.29 4185.69 4199.69 4185.69 c
4205.09 4185.69 4209.46 4181.31 4209.46 4175.91 c
f
n
4260.78 4175.91 m
4260.78 4170.52 4256.41 4166.14 4251.01 4166.14 c
4245.61 4166.14 4241.23 4170.52 4241.23 4175.91 c
4241.23 4181.31 4245.61 4185.69 4251.01 4185.69 c
4256.41 4185.69 4260.78 4181.31 4260.78 4175.91 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4175.91 m
4364.23 4170.52 4359.86 4166.14 4354.46 4166.14 c
4349.06 4166.14 4344.69 4170.52 4344.69 4175.91 c
4344.69 4181.31 4349.06 4185.69 4354.46 4185.69 c
4359.86 4185.69 4364.23 4181.31 4364.23 4175.91 c
f
n
4416.37 4175.91 m
4416.37 4170.52 4411.99 4166.14 4406.59 4166.14 c
4401.2 4166.14 4396.82 4170.52 4396.82 4175.91 c
4396.82 4181.31 4401.2 4185.69 4406.59 4185.69 c
4411.99 4185.69 4416.37 4181.31 4416.37 4175.91 c
f
n
4467.69 4175.91 m
4467.69 4170.52 4463.31 4166.14 4457.91 4166.14 c
4452.52 4166.14 4448.14 4170.52 4448.14 4175.91 c
4448.14 4181.31 4452.52 4185.69 4457.91 4185.69 c
4463.31 4185.69 4467.69 4181.31 4467.69 4175.91 c
f
n
4519.82 4175.91 m
4519.82 4170.52 4515.45 4166.14 4510.05 4166.14 c
4504.65 4166.14 4500.27 4170.52 4500.27 4175.91 c
4500.27 4181.31 4504.65 4185.69 4510.05 4185.69 c
4515.45 4185.69 4519.82 4181.31 4519.82 4175.91 c
f
n
4571.14 4175.91 m
4571.14 4170.52 4566.77 4166.14 4561.37 4166.14 c
4555.97 4166.14 4551.59 4170.52 4551.59 4175.91 c
4551.59 4181.31 4555.97 4185.69 4561.37 4185.69 c
4566.77 4185.69 4571.14 4181.31 4571.14 4175.91 c
f
n
4623.28 4175.91 m
4623.28 4170.52 4618.9 4166.14 4613.5 4166.14 c
4608.1 4166.14 4603.73 4170.52 4603.73 4175.91 c
4603.73 4181.31 4608.1 4185.69 4613.5 4185.69 c
4618.9 4185.69 4623.28 4181.31 4623.28 4175.91 c
f
n
4674.59 4175.91 m
4674.59 4170.52 4670.22 4166.14 4664.82 4166.14 c
4659.42 4166.14 4655.05 4170.52 4655.05 4175.91 c
4655.05 4181.31 4659.42 4185.69 4664.82 4185.69 c
4670.22 4185.69 4674.59 4181.31 4674.59 4175.91 c
f
n
3898.29 4123.78 m
3898.29 4118.38 3893.91 4114.0 3888.52 4114.0 c
3883.12 4114.0 3878.74 4118.38 3878.74 4123.78 c
3878.74 4129.18 3883.12 4133.55 3888.52 4133.55 c
3893.91 4133.55 3898.29 4129.18 3898.29 4123.78 c
f
n
3950.42 4130.3 m
3950.42 4124.9 3946.05 4120.52 3940.65 4120.52 c
3935.25 4120.52 3930.88 4124.9 3930.88 4130.3 c
3930.88 4135.7 3935.25 4140.07 3940.65 4140.07 c
3946.05 4140.07 3950.42 4135.7 3950.42 4130.3 c
f
n
4001.74 4136.81 m
4001.74 4131.41 3997.37 4127.04 3991.97 4127.04 c
3986.57 4127.04 3982.19 4131.41 3982.19 4136.81 c
3982.19 4142.21 3986.57 4146.59 3991.97 4146.59 c
3997.37 4146.59 4001.74 4142.21 4001.74 4136.81 c
f
n
4053.88 4143.33 m
4053.88 4137.93 4049.5 4133.55 4044.1 4133.55 c
4038.7 4133.55 4034.33 4137.93 4034.33 4143.33 c
4034.33 4148.73 4038.7 4153.11 4044.1 4153.11 c
4049.5 4153.11 4053.88 4148.73 4053.88 4143.33 c
f
n
4106.01 4149.85 m
4106.01 4144.45 4101.63 4140.07 4096.23 4140.07 c
4090.84 4140.07 4086.46 4144.45 4086.46 4149.85 c
4086.46 4155.25 4090.84 4159.62 4096.23 4159.62 c
4101.63 4159.62 4106.01 4155.25 4106.01 4149.85 c
f
n
4157.33 4156.36 m
4157.33 4150.96 4152.95 4146.59 4147.55 4146.59 c
4142.16 4146.59 4137.78 4150.96 4137.78 4156.36 c
4137.78 4161.76 4142.16 4166.14 4147.55 4166.14 c
4152.95 4166.14 4157.33 4161.76 4157.33 4156.36 c
f
n
4209.46 4162.88 m
4209.46 4157.48 4205.09 4153.11 4199.69 4153.11 c
4194.29 4153.11 4189.91 4157.48 4189.91 4162.88 c
4189.91 4168.28 4194.29 4172.66 4199.69 4172.66 c
4205.09 4172.66 4209.46 4168.28 4209.46 4162.88 c
f
n
4260.78 4169.4 m
4260.78 4164.0 4256.41 4159.62 4251.01 4159.62 c
4245.61 4159.62 4241.23 4164.0 4241.23 4169.4 c
4241.23 4174.8 4245.61 4179.17 4251.01 4179.17 c
4256.41 4179.17 4260.78 4174.8 4260.78 4169.4 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4181.62 m
4364.23 4176.22 4359.86 4171.84 4354.46 4171.84 c
4349.06 4171.84 4344.69 4176.22 4344.69 4181.62 c
4344.69 4187.02 4349.06 4191.39 4354.46 4191.39 c
4359.86 4191.39 4364.23 4187.02 4364.23 4181.62 c
f
n
4416.37 4188.13 m
4416.37 4182.73 4411.99 4178.36 4406.59 4178.36 c
4401.2 4178.36 4396.82 4182.73 4396.82 4188.13 c
4396.82 4193.53 4401.2 4197.91 4406.59 4197.91 c
4411.99 4197.91 4416.37 4193.53 4416.37 4188.13 c
f
n
4467.69 4194.65 m
4467.69 4189.25 4463.31 4184.88 4457.91 4184.88 c
4452.52 4184.88 4448.14 4189.25 4448.14 4194.65 c
4448.14 4200.05 4452.52 4204.43 4457.91 4204.43 c
4463.31 4204.43 4467.69 4200.05 4467.69 4194.65 c
f
n
4519.82 4201.17 m
4519.82 4195.77 4515.45 4191.39 4510.05 4191.39 c
4504.65 4191.39 4500.27 4195.77 4500.27 4201.17 c
4500.27 4206.57 4504.65 4210.94 4510.05 4210.94 c
4515.45 4210.94 4519.82 4206.57 4519.82 4201.17 c
f
n
4571.14 4207.68 m
4571.14 4202.29 4566.77 4197.91 4561.37 4197.91 c
4555.97 4197.91 4551.59 4202.29 4551.59 4207.68 c
4551.59 4213.08 4555.97 4217.46 4561.37 4217.46 c
4566.77 4217.46 4571.14 4213.08 4571.14 4207.68 c
f
n
4623.28 4214.2 m
4623.28 4208.8 4618.9 4204.43 4613.5 4204.43 c
4608.1 4204.43 4603.73 4208.8 4603.73 4214.2 c
4603.73 4219.6 4608.1 4223.98 4613.5 4223.98 c
4618.9 4223.98 4623.28 4219.6 4623.28 4214.2 c
f
n
4674.59 4220.72 m
4674.59 4215.32 4670.22 4210.94 4664.82 4210.94 c
4659.42 4210.94 4655.05 4215.32 4655.05 4220.72 c
4655.05 4226.12 4659.42 4230.49 4664.82 4230.49 c
4670.22 4230.49 4674.59 4226.12 4674.59 4220.72 c
f
n
3898.29 4072.46 m
3898.29 4067.06 3893.91 4062.69 3888.52 4062.69 c
3883.12 4062.69 3878.74 4067.06 3878.74 4072.46 c
3878.74 4077.86 3883.12 4082.24 3888.52 4082.24 c
3893.91 4082.24 3898.29 4077.86 3898.29 4072.46 c
f
n
3950.42 4084.68 m
3950.42 4079.28 3946.05 4074.91 3940.65 4074.91 c
3935.25 4074.91 3930.88 4079.28 3930.88 4084.68 c
3930.88 4090.08 3935.25 4094.46 3940.65 4094.46 c
3946.05 4094.46 3950.42 4090.08 3950.42 4084.68 c
f
n
4001.74 4097.71 m
4001.74 4092.32 3997.37 4087.94 3991.97 4087.94 c
3986.57 4087.94 3982.19 4092.32 3982.19 4097.71 c
3982.19 4103.11 3986.57 4107.49 3991.97 4107.49 c
3997.37 4107.49 4001.74 4103.11 4001.74 4097.71 c
f
n
4053.88 4110.75 m
4053.88 4105.35 4049.5 4100.97 4044.1 4100.97 c
4038.7 4100.97 4034.33 4105.35 4034.33 4110.75 c
4034.33 4116.14 4038.7 4120.52 4044.1 4120.52 c
4049.5 4120.52 4053.88 4116.14 4053.88 4110.75 c
f
n
4106.01 4123.78 m
4106.01 4118.38 4101.63 4114.0 4096.23 4114.0 c
4090.84 4114.0 4086.46 4118.38 4086.46 4123.78 c
4086.46 4129.18 4090.84 4133.55 4096.23 4133.55 c
4101.63 4133.55 4106.01 4129.18 4106.01 4123.78 c
f
n
4157.33 4136.81 m
4157.33 4131.41 4152.95 4127.04 4147.55 4127.04 c
4142.16 4127.04 4137.78 4131.41 4137.78 4136.81 c
4137.78 4142.21 4142.16 4146.59 4147.55 4146.59 c
4152.95 4146.59 4157.33 4142.21 4157.33 4136.81 c
f
n
4209.46 4149.85 m
4209.46 4144.45 4205.09 4140.07 4199.69 4140.07 c
4194.29 4140.07 4189.91 4144.45 4189.91 4149.85 c
4189.91 4155.25 4194.29 4159.62 4199.69 4159.62 c
4205.09 4159.62 4209.46 4155.25 4209.46 4149.85 c
f
n
4260.78 4162.88 m
4260.78 4157.48 4256.41 4153.11 4251.01 4153.11 c
4245.61 4153.11 4241.23 4157.48 4241.23 4162.88 c
4241.23 4168.28 4245.61 4172.66 4251.01 4172.66 c
4256.41 4172.66 4260.78 4168.28 4260.78 4162.88 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4188.13 m
4364.23 4182.73 4359.86 4178.36 4354.46 4178.36 c
4349.06 4178.36 4344.69 4182.73 4344.69 4188.13 c
4344.69 4193.53 4349.06 4197.91 4354.46 4197.91 c
4359.86 4197.91 4364.23 4193.53 4364.23 4188.13 c
f
n
4416.37 4201.17 m
4416.37 4195.77 4411.99 4191.39 4406.59 4191.39 c
4401.2 4191.39 4396.82 4195.77 4396.82 4201.17 c
4396.82 4206.57 4401.2 4210.94 4406.59 4210.94 c
4411.99 4210.94 4416.37 4206.57 4416.37 4201.17 c
f
n
4467.69 4214.2 m
4467.69 4208.8 4463.31 4204.43 4457.91 4204.43 c
4452.52 4204.43 4448.14 4208.8 4448.14 4214.2 c
4448.14 4219.6 4452.52 4223.98 4457.91 4223.98 c
4463.31 4223.98 4467.69 4219.6 4467.69 4214.2 c
f
n
4519.82 4227.23 m
4519.82 4221.84 4515.45 4217.46 4510.05 4217.46 c
4504.65 4217.46 4500.27 4221.84 4500.27 4227.23 c
4500.27 4232.63 4504.65 4237.01 4510.05 4237.01 c
4515.45 4237.01 4519.82 4232.63 4519.82 4227.23 c
f
n
4571.14 4240.27 m
4571.14 4234.87 4566.77 4230.49 4561.37 4230.49 c
4555.97 4230.49 4551.59 4234.87 4551.59 4240.27 c
4551.59 4245.66 4555.97 4250.04 4561.37 4250.04 c
4566.77 4250.04 4571.14 4245.66 4571.14 4240.27 c
f
n
4623.28 4253.3 m
4623.28 4247.9 4618.9 4243.53 4613.5 4243.53 c
4608.1 4243.53 4603.73 4247.9 4603.73 4253.3 c
4603.73 4258.7 4608.1 4263.07 4613.5 4263.07 c
4618.9 4263.07 4623.28 4258.7 4623.28 4253.3 c
f
n
4674.59 4266.34 m
4674.59 4260.94 4670.22 4256.56 4664.82 4256.56 c
4659.42 4256.56 4655.05 4260.94 4655.05 4266.34 c
4655.05 4271.73 4659.42 4276.11 4664.82 4276.11 c
4670.22 4276.11 4674.59 4271.73 4674.59 4266.34 c
f
n
3898.29 4020.33 m
3898.29 4014.93 3893.91 4010.55 3888.52 4010.55 c
3883.12 4010.55 3878.74 4014.93 3878.74 4020.33 c
3878.74 4025.73 3883.12 4030.1 3888.52 4030.1 c
3893.91 4030.1 3898.29 4025.73 3898.29 4020.33 c
f
n
3950.42 4039.88 m
3950.42 4034.48 3946.05 4030.1 3940.65 4030.1 c
3935.25 4030.1 3930.88 4034.48 3930.88 4039.88 c
3930.88 4045.28 3935.25 4049.65 3940.65 4049.65 c
3946.05 4049.65 3950.42 4045.28 3950.42 4039.88 c
f
n
4001.74 4059.43 m
4001.74 4054.03 3997.37 4049.65 3991.97 4049.65 c
3986.57 4049.65 3982.19 4054.03 3982.19 4059.43 c
3982.19 4064.83 3986.57 4069.2 3991.97 4069.2 c
3997.37 4069.2 4001.74 4064.83 4001.74 4059.43 c
f
n
4053.88 4078.16 m
4053.88 4072.77 4049.5 4068.39 4044.1 4068.39 c
4038.7 4068.39 4034.33 4072.77 4034.33 4078.16 c
4034.33 4083.56 4038.7 4087.94 4044.1 4087.94 c
4049.5 4087.94 4053.88 4083.56 4053.88 4078.16 c
f
n
4106.01 4097.71 m
4106.01 4092.32 4101.63 4087.94 4096.23 4087.94 c
4090.84 4087.94 4086.46 4092.32 4086.46 4097.71 c
4086.46 4103.11 4090.84 4107.49 4096.23 4107.49 c
4101.63 4107.49 4106.01 4103.11 4106.01 4097.71 c
f
n
4157.33 4117.27 m
4157.33 4111.87 4152.95 4107.49 4147.55 4107.49 c
4142.16 4107.49 4137.78 4111.87 4137.78 4117.27 c
4137.78 4122.66 4142.16 4127.04 4147.55 4127.04 c
4152.95 4127.04 4157.33 4122.66 4157.33 4117.27 c
f
n
4209.46 4136.81 m
4209.46 4131.41 4205.09 4127.04 4199.69 4127.04 c
4194.29 4127.04 4189.91 4131.41 4189.91 4136.81 c
4189.91 4142.21 4194.29 4146.59 4199.69 4146.59 c
4205.09 4146.59 4209.46 4142.21 4209.46 4136.81 c
f
n
4260.78 4156.36 m
4260.78 4150.96 4256.41 4146.59 4251.01 4146.59 c
4245.61 4146.59 4241.23 4150.96 4241.23 4156.36 c
4241.23 4161.76 4245.61 4166.14 4251.01 4166.14 c
4256.41 4166.14 4260.78 4161.76 4260.78 4156.36 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4194.65 m
4364.23 4189.25 4359.86 4184.88 4354.46 4184.88 c
4349.06 4184.88 4344.69 4189.25 4344.69 4194.65 c
4344.69 4200.05 4349.06 4204.43 4354.46 4204.43 c
4359.86 4204.43 4364.23 4200.05 4364.23 4194.65 c
f
n
4416.37 4214.2 m
4416.37 4208.8 4411.99 4204.43 4406.59 4204.43 c
4401.2 4204.43 4396.82 4208.8 4396.82 4214.2 c
4396.82 4219.6 4401.2 4223.98 4406.59 4223.98 c
4411.99 4223.98 4416.37 4219.6 4416.37 4214.2 c
f
n
4467.69 4233.75 m
4467.69 4228.35 4463.31 4223.98 4457.91 4223.98 c
4452.52 4223.98 4448.14 4228.35 4448.14 4233.75 c
4448.14 4239.15 4452.52 4243.53 4457.91 4243.53 c
4463.31 4243.53 4467.69 4239.15 4467.69 4233.75 c
f
n
4519.82 4253.3 m
4519.82 4247.9 4515.45 4243.53 4510.05 4243.53 c
4504.65 4243.53 4500.27 4247.9 4500.27 4253.3 c
4500.27 4258.7 4504.65 4263.07 4510.05 4263.07 c
4515.45 4263.07 4519.82 4258.7 4519.82 4253.3 c
f
n
4571.14 4272.85 m
4571.14 4267.45 4566.77 4263.07 4561.37 4263.07 c
4555.97 4263.07 4551.59 4267.45 4551.59 4272.85 c
4551.59 4278.25 4555.97 4282.62 4561.37 4282.62 c
4566.77 4282.62 4571.14 4278.25 4571.14 4272.85 c
f
n
4623.28 4291.59 m
4623.28 4286.19 4618.9 4281.81 4613.5 4281.81 c
4608.1 4281.81 4603.73 4286.19 4603.73 4291.59 c
4603.73 4296.98 4608.1 4301.36 4613.5 4301.36 c
4618.9 4301.36 4623.28 4296.98 4623.28 4291.59 c
f
n
4674.59 4311.14 m
4674.59 4305.74 4670.22 4301.36 4664.82 4301.36 c
4659.42 4301.36 4655.05 4305.74 4655.05 4311.14 c
4655.05 4316.54 4659.42 4320.91 4664.82 4320.91 c
4670.22 4320.91 4674.59 4316.54 4674.59 4311.14 c
f
n
3898.29 3968.2 m
3898.29 3962.8 3893.91 3958.42 3888.52 3958.42 c
3883.12 3958.42 3878.74 3962.8 3878.74 3968.2 c
3878.74 3973.59 3883.12 3977.97 3888.52 3977.97 c
3893.91 3977.97 3898.29 3973.59 3898.29 3968.2 c
f
n
3950.42 3994.26 m
3950.42 3988.86 3946.05 3984.48 3940.65 3984.48 c
3935.25 3984.48 3930.88 3988.86 3930.88 3994.26 c
3930.88 3999.66 3935.25 4004.04 3940.65 4004.04 c
3946.05 4004.04 3950.42 3999.66 3950.42 3994.26 c
f
n
4001.74 4020.33 m
4001.74 4014.93 3997.37 4010.55 3991.97 4010.55 c
3986.57 4010.55 3982.19 4014.93 3982.19 4020.33 c
3982.19 4025.73 3986.57 4030.1 3991.97 4030.1 c
3997.37 4030.1 4001.74 4025.73 4001.74 4020.33 c
f
n
4053.88 4046.39 m
4053.88 4041.0 4049.5 4036.62 4044.1 4036.62 c
4038.7 4036.62 4034.33 4041.0 4034.33 4046.39 c
4034.33 4051.79 4038.7 4056.17 4044.1 4056.17 c
4049.5 4056.17 4053.88 4051.79 4053.88 4046.39 c
f
n
4106.01 4072.46 m
4106.01 4067.06 4101.63 4062.69 4096.23 4062.69 c
4090.84 4062.69 4086.46 4067.06 4086.46 4072.46 c
4086.46 4077.86 4090.84 4082.24 4096.23 4082.24 c
4101.63 4082.24 4106.01 4077.86 4106.01 4072.46 c
f
n
4157.33 4097.71 m
4157.33 4092.32 4152.95 4087.94 4147.55 4087.94 c
4142.16 4087.94 4137.78 4092.32 4137.78 4097.71 c
4137.78 4103.11 4142.16 4107.49 4147.55 4107.49 c
4152.95 4107.49 4157.33 4103.11 4157.33 4097.71 c
f
n
4209.46 4123.78 m
4209.46 4118.38 4205.09 4114.0 4199.69 4114.0 c
4194.29 4114.0 4189.91 4118.38 4189.91 4123.78 c
4189.91 4129.18 4194.29 4133.55 4199.69 4133.55 c
4205.09 4133.55 4209.46 4129.18 4209.46 4123.78 c
f
n
4260.78 4149.85 m
4260.78 4144.45 4256.41 4140.07 4251.01 4140.07 c
4245.61 4140.07 4241.23 4144.45 4241.23 4149.85 c
4241.23 4155.25 4245.61 4159.62 4251.01 4159.62 c
4256.41 4159.62 4260.78 4155.25 4260.78 4149.85 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4201.17 m
4364.23 4195.77 4359.86 4191.39 4354.46 4191.39 c
4349.06 4191.39 4344.69 4195.77 4344.69 4201.17 c
4344.69 4206.57 4349.06 4210.94 4354.46 4210.94 c
4359.86 4210.94 4364.23 4206.57 4364.23 4201.17 c
f
n
4416.37 4227.23 m
4416.37 4221.84 4411.99 4217.46 4406.59 4217.46 c
4401.2 4217.46 4396.82 4221.84 4396.82 4227.23 c
4396.82 4232.63 4401.2 4237.01 4406.59 4237.01 c
4411.99 4237.01 4416.37 4232.63 4416.37 4227.23 c
f
n
4467.69 4253.3 m
4467.69 4247.9 4463.31 4243.53 4457.91 4243.53 c
4452.52 4243.53 4448.14 4247.9 4448.14 4253.3 c
4448.14 4258.7 4452.52 4263.07 4457.91 4263.07 c
4463.31 4263.07 4467.69 4258.7 4467.69 4253.3 c
f
n
4519.82 4279.37 m
4519.82 4273.97 4515.45 4269.59 4510.05 4269.59 c
4504.65 4269.59 4500.27 4273.97 4500.27 4279.37 c
4500.27 4284.77 4504.65 4289.14 4510.05 4289.14 c
4515.45 4289.14 4519.82 4284.77 4519.82 4279.37 c
f
n
4571.14 4304.62 m
4571.14 4299.22 4566.77 4294.84 4561.37 4294.84 c
4555.97 4294.84 4551.59 4299.22 4551.59 4304.62 c
4551.59 4310.02 4555.97 4314.39 4561.37 4314.39 c
4566.77 4314.39 4571.14 4310.02 4571.14 4304.62 c
f
n
4623.28 4330.69 m
4623.28 4325.29 4618.9 4320.91 4613.5 4320.91 c
4608.1 4320.91 4603.73 4325.29 4603.73 4330.69 c
4603.73 4336.09 4608.1 4340.46 4613.5 4340.46 c
4618.9 4340.46 4623.28 4336.09 4623.28 4330.69 c
f
n
4674.59 4356.75 m
4674.59 4351.36 4670.22 4346.98 4664.82 4346.98 c
4659.42 4346.98 4655.05 4351.36 4655.05 4356.75 c
4655.05 4362.15 4659.42 4366.53 4664.82 4366.53 c
4670.22 4366.53 4674.59 4362.15 4674.59 4356.75 c
f
n
3898.29 3916.88 m
3898.29 3911.48 3893.91 3907.1 3888.52 3907.1 c
3883.12 3907.1 3878.74 3911.48 3878.74 3916.88 c
3878.74 3922.27 3883.12 3926.65 3888.52 3926.65 c
3893.91 3926.65 3898.29 3922.27 3898.29 3916.88 c
f
n
3950.42 3949.46 m
3950.42 3944.06 3946.05 3939.68 3940.65 3939.68 c
3935.25 3939.68 3930.88 3944.06 3930.88 3949.46 c
3930.88 3954.86 3935.25 3959.23 3940.65 3959.23 c
3946.05 3959.23 3950.42 3954.86 3950.42 3949.46 c
f
n
4001.74 3981.23 m
4001.74 3975.83 3997.37 3971.45 3991.97 3971.45 c
3986.57 3971.45 3982.19 3975.83 3982.19 3981.23 c
3982.19 3986.62 3986.57 3991.0 3991.97 3991.0 c
3997.37 3991.0 4001.74 3986.62 4001.74 3981.23 c
f
n
4053.88 4013.81 m
4053.88 4008.41 4049.5 4004.04 4044.1 4004.04 c
4038.7 4004.04 4034.33 4008.41 4034.33 4013.81 c
4034.33 4019.21 4038.7 4023.59 4044.1 4023.59 c
4049.5 4023.59 4053.88 4019.21 4053.88 4013.81 c
f
n
4106.01 4046.39 m
4106.01 4041.0 4101.63 4036.62 4096.23 4036.62 c
4090.84 4036.62 4086.46 4041.0 4086.46 4046.39 c
4086.46 4051.79 4090.84 4056.17 4096.23 4056.17 c
4101.63 4056.17 4106.01 4051.79 4106.01 4046.39 c
f
n
4157.33 4078.16 m
4157.33 4072.77 4152.95 4068.39 4147.55 4068.39 c
4142.16 4068.39 4137.78 4072.77 4137.78 4078.16 c
4137.78 4083.56 4142.16 4087.94 4147.55 4087.94 c
4152.95 4087.94 4157.33 4083.56 4157.33 4078.16 c
f
n
4209.46 4110.75 m
4209.46 4105.35 4205.09 4100.97 4199.69 4100.97 c
4194.29 4100.97 4189.91 4105.35 4189.91 4110.75 c
4189.91 4116.14 4194.29 4120.52 4199.69 4120.52 c
4205.09 4120.52 4209.46 4116.14 4209.46 4110.75 c
f
n
4260.78 4143.33 m
4260.78 4137.93 4256.41 4133.55 4251.01 4133.55 c
4245.61 4133.55 4241.23 4137.93 4241.23 4143.33 c
4241.23 4148.73 4245.61 4153.11 4251.01 4153.11 c
4256.41 4153.11 4260.78 4148.73 4260.78 4143.33 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4207.68 m
4364.23 4202.29 4359.86 4197.91 4354.46 4197.91 c
4349.06 4197.91 4344.69 4202.29 4344.69 4207.68 c
4344.69 4213.08 4349.06 4217.46 4354.46 4217.46 c
4359.86 4217.46 4364.23 4213.08 4364.23 4207.68 c
f
n
4416.37 4240.27 m
4416.37 4234.87 4411.99 4230.49 4406.59 4230.49 c
4401.2 4230.49 4396.82 4234.87 4396.82 4240.27 c
4396.82 4245.66 4401.2 4250.04 4406.59 4250.04 c
4411.99 4250.04 4416.37 4245.66 4416.37 4240.27 c
f
n
4467.69 4272.85 m
4467.69 4267.45 4463.31 4263.07 4457.91 4263.07 c
4452.52 4263.07 4448.14 4267.45 4448.14 4272.85 c
4448.14 4278.25 4452.52 4282.62 4457.91 4282.62 c
4463.31 4282.62 4467.69 4278.25 4467.69 4272.85 c
f
n
4519.82 4304.62 m
4519.82 4299.22 4515.45 4294.84 4510.05 4294.84 c
4504.65 4294.84 4500.27 4299.22 4500.27 4304.62 c
4500.27 4310.02 4504.65 4314.39 4510.05 4314.39 c
4515.45 4314.39 4519.82 4310.02 4519.82 4304.62 c
f
n
4571.14 4337.2 m
4571.14 4331.8 4566.77 4327.43 4561.37 4327.43 c
4555.97 4327.43 4551.59 4331.8 4551.59 4337.2 c
4551.59 4342.6 4555.97 4346.98 4561.37 4346.98 c
4566.77 4346.98 4571.14 4342.6 4571.14 4337.2 c
f
n
4623.28 4369.79 m
4623.28 4364.39 4618.9 4360.01 4613.5 4360.01 c
4608.1 4360.01 4603.73 4364.39 4603.73 4369.79 c
4603.73 4375.19 4608.1 4379.56 4613.5 4379.56 c
4618.9 4379.56 4623.28 4375.19 4623.28 4369.79 c
f
n
4674.59 4401.55 m
4674.59 4396.16 4670.22 4391.78 4664.82 4391.78 c
4659.42 4391.78 4655.05 4396.16 4655.05 4401.55 c
4655.05 4406.95 4659.42 4411.33 4664.82 4411.33 c
4670.22 4411.33 4674.59 4406.95 4674.59 4401.55 c
f
n
3898.29 3864.74 m
3898.29 3859.34 3893.91 3854.96 3888.52 3854.96 c
3883.12 3854.96 3878.74 3859.34 3878.74 3864.74 c
3878.74 3870.14 3883.12 3874.52 3888.52 3874.52 c
3893.91 3874.52 3898.29 3870.14 3898.29 3864.74 c
f
n
3950.42 3903.84 m
3950.42 3898.44 3946.05 3894.07 3940.65 3894.07 c
3935.25 3894.07 3930.88 3898.44 3930.88 3903.84 c
3930.88 3909.24 3935.25 3913.62 3940.65 3913.62 c
3946.05 3913.62 3950.42 3909.24 3950.42 3903.84 c
f
n
4001.74 3942.94 m
4001.74 3937.54 3997.37 3933.17 3991.97 3933.17 c
3986.57 3933.17 3982.19 3937.54 3982.19 3942.94 c
3982.19 3948.34 3986.57 3952.71 3991.97 3952.71 c
3997.37 3952.71 4001.74 3948.34 4001.74 3942.94 c
f
n
4053.88 3981.23 m
4053.88 3975.83 4049.5 3971.45 4044.1 3971.45 c
4038.7 3971.45 4034.33 3975.83 4034.33 3981.23 c
4034.33 3986.62 4038.7 3991.0 4044.1 3991.0 c
4049.5 3991.0 4053.88 3986.62 4053.88 3981.23 c
f
n
4106.01 4020.33 m
4106.01 4014.93 4101.63 4010.55 4096.23 4010.55 c
4090.84 4010.55 4086.46 4014.93 4086.46 4020.33 c
4086.46 4025.73 4090.84 4030.1 4096.23 4030.1 c
4101.63 4030.1 4106.01 4025.73 4106.01 4020.33 c
f
n
4157.33 4059.43 m
4157.33 4054.03 4152.95 4049.65 4147.55 4049.65 c
4142.16 4049.65 4137.78 4054.03 4137.78 4059.43 c
4137.78 4064.83 4142.16 4069.2 4147.55 4069.2 c
4152.95 4069.2 4157.33 4064.83 4157.33 4059.43 c
f
n
4209.46 4097.71 m
4209.46 4092.32 4205.09 4087.94 4199.69 4087.94 c
4194.29 4087.94 4189.91 4092.32 4189.91 4097.71 c
4189.91 4103.11 4194.29 4107.49 4199.69 4107.49 c
4205.09 4107.49 4209.46 4103.11 4209.46 4097.71 c
f
n
4260.78 4136.81 m
4260.78 4131.41 4256.41 4127.04 4251.01 4127.04 c
4245.61 4127.04 4241.23 4131.41 4241.23 4136.81 c
4241.23 4142.21 4245.61 4146.59 4251.01 4146.59 c
4256.41 4146.59 4260.78 4142.21 4260.78 4136.81 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4214.2 m
4364.23 4208.8 4359.86 4204.43 4354.46 4204.43 c
4349.06 4204.43 4344.69 4208.8 4344.69 4214.2 c
4344.69 4219.6 4349.06 4223.98 4354.46 4223.98 c
4359.86 4223.98 4364.23 4219.6 4364.23 4214.2 c
f
n
4416.37 4253.3 m
4416.37 4247.9 4411.99 4243.53 4406.59 4243.53 c
4401.2 4243.53 4396.82 4247.9 4396.82 4253.3 c
4396.82 4258.7 4401.2 4263.07 4406.59 4263.07 c
4411.99 4263.07 4416.37 4258.7 4416.37 4253.3 c
f
n
4467.69 4291.59 m
4467.69 4286.19 4463.31 4281.81 4457.91 4281.81 c
4452.52 4281.81 4448.14 4286.19 4448.14 4291.59 c
4448.14 4296.98 4452.52 4301.36 4457.91 4301.36 c
4463.31 4301.36 4467.69 4296.98 4467.69 4291.59 c
f
n
4519.82 4330.69 m
4519.82 4325.29 4515.45 4320.91 4510.05 4320.91 c
4504.65 4320.91 4500.27 4325.29 4500.27 4330.69 c
4500.27 4336.09 4504.65 4340.46 4510.05 4340.46 c
4515.45 4340.46 4519.82 4336.09 4519.82 4330.69 c
f
n
4571.14 4369.79 m
4571.14 4364.39 4566.77 4360.01 4561.37 4360.01 c
4555.97 4360.01 4551.59 4364.39 4551.59 4369.79 c
4551.59 4375.19 4555.97 4379.56 4561.37 4379.56 c
4566.77 4379.56 4571.14 4375.19 4571.14 4369.79 c
f
n
4623.28 4408.07 m
4623.28 4402.68 4618.9 4398.3 4613.5 4398.3 c
4608.1 4398.3 4603.73 4402.68 4603.73 4408.07 c
4603.73 4413.47 4608.1 4417.85 4613.5 4417.85 c
4618.9 4417.85 4623.28 4413.47 4623.28 4408.07 c
f
n
4674.59 4447.17 m
4674.59 4441.77 4670.22 4437.4 4664.82 4437.4 c
4659.42 4437.4 4655.05 4441.77 4655.05 4447.17 c
4655.05 4452.57 4659.42 4456.95 4664.82 4456.95 c
4670.22 4456.95 4674.59 4452.57 4674.59 4447.17 c
f
n
3898.29 3813.42 m
3898.29 3808.02 3893.91 3803.64 3888.52 3803.64 c
3883.12 3803.64 3878.74 3808.02 3878.74 3813.42 c
3878.74 3818.82 3883.12 3823.2 3888.52 3823.2 c
3893.91 3823.2 3898.29 3818.82 3898.29 3813.42 c
f
n
3950.42 3859.04 m
3950.42 3853.64 3946.05 3849.26 3940.65 3849.26 c
3935.25 3849.26 3930.88 3853.64 3930.88 3859.04 c
3930.88 3864.44 3935.25 3868.81 3940.65 3868.81 c
3946.05 3868.81 3950.42 3864.44 3950.42 3859.04 c
f
n
4001.74 3903.84 m
4001.74 3898.44 3997.37 3894.07 3991.97 3894.07 c
3986.57 3894.07 3982.19 3898.44 3982.19 3903.84 c
3982.19 3909.24 3986.57 3913.62 3991.97 3913.62 c
3997.37 3913.62 4001.74 3909.24 4001.74 3903.84 c
f
n
4053.88 3949.46 m
4053.88 3944.06 4049.5 3939.68 4044.1 3939.68 c
4038.7 3939.68 4034.33 3944.06 4034.33 3949.46 c
4034.33 3954.86 4038.7 3959.23 4044.1 3959.23 c
4049.5 3959.23 4053.88 3954.86 4053.88 3949.46 c
f
n
4106.01 3994.26 m
4106.01 3988.86 4101.63 3984.48 4096.23 3984.48 c
4090.84 3984.48 4086.46 3988.86 4086.46 3994.26 c
4086.46 3999.66 4090.84 4004.04 4096.23 4004.04 c
4101.63 4004.04 4106.01 3999.66 4106.01 3994.26 c
f
n
4157.33 4039.88 m
4157.33 4034.48 4152.95 4030.1 4147.55 4030.1 c
4142.16 4030.1 4137.78 4034.48 4137.78 4039.88 c
4137.78 4045.28 4142.16 4049.65 4147.55 4049.65 c
4152.95 4049.65 4157.33 4045.28 4157.33 4039.88 c
f
n
4209.46 4084.68 m
4209.46 4079.28 4205.09 4074.91 4199.69 4074.91 c
4194.29 4074.91 4189.91 4079.28 4189.91 4084.68 c
4189.91 4090.08 4194.29 4094.46 4199.69 4094.46 c
4205.09 4094.46 4209.46 4090.08 4209.46 4084.68 c
f
n
4260.78 4130.3 m
4260.78 4124.9 4256.41 4120.52 4251.01 4120.52 c
4245.61 4120.52 4241.23 4124.9 4241.23 4130.3 c
4241.23 4135.7 4245.61 4140.07 4251.01 4140.07 c
4256.41 4140.07 4260.78 4135.7 4260.78 4130.3 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4220.72 m
4364.23 4215.32 4359.86 4210.94 4354.46 4210.94 c
4349.06 4210.94 4344.69 4215.32 4344.69 4220.72 c
4344.69 4226.12 4349.06 4230.49 4354.46 4230.49 c
4359.86 4230.49 4364.23 4226.12 4364.23 4220.72 c
f
n
4416.37 4266.34 m
4416.37 4260.94 4411.99 4256.56 4406.59 4256.56 c
4401.2 4256.56 4396.82 4260.94 4396.82 4266.34 c
4396.82 4271.73 4401.2 4276.11 4406.59 4276.11 c
4411.99 4276.11 4416.37 4271.73 4416.37 4266.34 c
f
n
4467.69 4311.14 m
4467.69 4305.74 4463.31 4301.36 4457.91 4301.36 c
4452.52 4301.36 4448.14 4305.74 4448.14 4311.14 c
4448.14 4316.54 4452.52 4320.91 4457.91 4320.91 c
4463.31 4320.91 4467.69 4316.54 4467.69 4311.14 c
f
n
4519.82 4356.75 m
4519.82 4351.36 4515.45 4346.98 4510.05 4346.98 c
4504.65 4346.98 4500.27 4351.36 4500.27 4356.75 c
4500.27 4362.15 4504.65 4366.53 4510.05 4366.53 c
4515.45 4366.53 4519.82 4362.15 4519.82 4356.75 c
f
n
4571.14 4401.55 m
4571.14 4396.16 4566.77 4391.78 4561.37 4391.78 c
4555.97 4391.78 4551.59 4396.16 4551.59 4401.55 c
4551.59 4406.95 4555.97 4411.33 4561.37 4411.33 c
4566.77 4411.33 4571.14 4406.95 4571.14 4401.55 c
f
n
4623.28 4447.17 m
4623.28 4441.77 4618.9 4437.4 4613.5 4437.4 c
4608.1 4437.4 4603.73 4441.77 4603.73 4447.17 c
4603.73 4452.57 4608.1 4456.95 4613.5 4456.95 c
4618.9 4456.95 4623.28 4452.57 4623.28 4447.17 c
f
n
4674.59 4491.98 m
4674.59 4486.58 4670.22 4482.2 4664.82 4482.2 c
4659.42 4482.2 4655.05 4486.58 4655.05 4491.98 c
4655.05 4497.38 4659.42 4501.75 4664.82 4501.75 c
4670.22 4501.75 4674.59 4497.38 4674.59 4491.98 c
f
n
3898.29 3761.29 m
3898.29 3755.89 3893.91 3751.51 3888.52 3751.51 c
3883.12 3751.51 3878.74 3755.89 3878.74 3761.29 c
3878.74 3766.69 3883.12 3771.06 3888.52 3771.06 c
3893.91 3771.06 3898.29 3766.69 3898.29 3761.29 c
f
n
3950.42 3813.42 m
3950.42 3808.02 3946.05 3803.64 3940.65 3803.64 c
3935.25 3803.64 3930.88 3808.02 3930.88 3813.42 c
3930.88 3818.82 3935.25 3823.2 3940.65 3823.2 c
3946.05 3823.2 3950.42 3818.82 3950.42 3813.42 c
f
n
4001.74 3864.74 m
4001.74 3859.34 3997.37 3854.96 3991.97 3854.96 c
3986.57 3854.96 3982.19 3859.34 3982.19 3864.74 c
3982.19 3870.14 3986.57 3874.52 3991.97 3874.52 c
3997.37 3874.52 4001.74 3870.14 4001.74 3864.74 c
f
n
4053.88 3916.88 m
4053.88 3911.48 4049.5 3907.1 4044.1 3907.1 c
4038.7 3907.1 4034.33 3911.48 4034.33 3916.88 c
4034.33 3922.27 4038.7 3926.65 4044.1 3926.65 c
4049.5 3926.65 4053.88 3922.27 4053.88 3916.88 c
f
n
4106.01 3968.2 m
4106.01 3962.8 4101.63 3958.42 4096.23 3958.42 c
4090.84 3958.42 4086.46 3962.8 4086.46 3968.2 c
4086.46 3973.59 4090.84 3977.97 4096.23 3977.97 c
4101.63 3977.97 4106.01 3973.59 4106.01 3968.2 c
f
n
4157.33 4020.33 m
4157.33 4014.93 4152.95 4010.55 4147.55 4010.55 c
4142.16 4010.55 4137.78 4014.93 4137.78 4020.33 c
4137.78 4025.73 4142.16 4030.1 4147.55 4030.1 c
4152.95 4030.1 4157.33 4025.73 4157.33 4020.33 c
f
n
4209.46 4072.46 m
4209.46 4067.06 4205.09 4062.69 4199.69 4062.69 c
4194.29 4062.69 4189.91 4067.06 4189.91 4072.46 c
4189.91 4077.86 4194.29 4082.24 4199.69 4082.24 c
4205.09 4082.24 4209.46 4077.86 4209.46 4072.46 c
f
n
4260.78 4123.78 m
4260.78 4118.38 4256.41 4114.0 4251.01 4114.0 c
4245.61 4114.0 4241.23 4118.38 4241.23 4123.78 c
4241.23 4129.18 4245.61 4133.55 4251.01 4133.55 c
4256.41 4133.55 4260.78 4129.18 4260.78 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4227.23 m
4364.23 4221.84 4359.86 4217.46 4354.46 4217.46 c
4349.06 4217.46 4344.69 4221.84 4344.69 4227.23 c
4344.69 4232.63 4349.06 4237.01 4354.46 4237.01 c
4359.86 4237.01 4364.23 4232.63 4364.23 4227.23 c
f
n
4416.37 4279.37 m
4416.37 4273.97 4411.99 4269.59 4406.59 4269.59 c
4401.2 4269.59 4396.82 4273.97 4396.82 4279.37 c
4396.82 4284.77 4401.2 4289.14 4406.59 4289.14 c
4411.99 4289.14 4416.37 4284.77 4416.37 4279.37 c
f
n
4467.69 4330.69 m
4467.69 4325.29 4463.31 4320.91 4457.91 4320.91 c
4452.52 4320.91 4448.14 4325.29 4448.14 4330.69 c
4448.14 4336.09 4452.52 4340.46 4457.91 4340.46 c
4463.31 4340.46 4467.69 4336.09 4467.69 4330.69 c
f
n
4519.82 4382.82 m
4519.82 4377.42 4515.45 4373.05 4510.05 4373.05 c
4504.65 4373.05 4500.27 4377.42 4500.27 4382.82 c
4500.27 4388.22 4504.65 4392.6 4510.05 4392.6 c
4515.45 4392.6 4519.82 4388.22 4519.82 4382.82 c
f
n
4571.14 4434.14 m
4571.14 4428.74 4566.77 4424.36 4561.37 4424.36 c
4555.97 4424.36 4551.59 4428.74 4551.59 4434.14 c
4551.59 4439.54 4555.97 4443.91 4561.37 4443.91 c
4566.77 4443.91 4571.14 4439.54 4571.14 4434.14 c
f
n
4623.28 4486.27 m
4623.28 4480.88 4618.9 4476.5 4613.5 4476.5 c
4608.1 4476.5 4603.73 4480.88 4603.73 4486.27 c
4603.73 4491.67 4608.1 4496.05 4613.5 4496.05 c
4618.9 4496.05 4623.28 4491.67 4623.28 4486.27 c
f
n
4674.59 4537.59 m
4674.59 4532.2 4670.22 4527.82 4664.82 4527.82 c
4659.42 4527.82 4655.05 4532.2 4655.05 4537.59 c
4655.05 4542.99 4659.42 4547.37 4664.82 4547.37 c
4670.22 4547.37 4674.59 4542.99 4674.59 4537.59 c
f
n
3950.42 3761.29 m
3950.42 3755.89 3946.05 3751.51 3940.65 3751.51 c
3935.25 3751.51 3930.88 3755.89 3930.88 3761.29 c
3930.88 3766.69 3935.25 3771.06 3940.65 3771.06 c
3946.05 3771.06 3950.42 3766.69 3950.42 3761.29 c
f
n
3996.04 3813.42 m
3996.04 3808.02 3991.66 3803.64 3986.27 3803.64 c
3980.87 3803.64 3976.49 3808.02 3976.49 3813.42 c
3976.49 3818.82 3980.87 3823.2 3986.27 3823.2 c
3991.66 3823.2 3996.04 3818.82 3996.04 3813.42 c
f
n
4040.84 3864.74 m
4040.84 3859.34 4036.46 3854.96 4031.07 3854.96 c
4025.67 3854.96 4021.29 3859.34 4021.29 3864.74 c
4021.29 3870.14 4025.67 3874.52 4031.07 3874.52 c
4036.46 3874.52 4040.84 3870.14 4040.84 3864.74 c
f
n
4086.46 3916.88 m
4086.46 3911.48 4082.08 3907.1 4076.68 3907.1 c
4071.29 3907.1 4066.91 3911.48 4066.91 3916.88 c
4066.91 3922.27 4071.29 3926.65 4076.68 3926.65 c
4082.08 3926.65 4086.46 3922.27 4086.46 3916.88 c
f
n
4131.26 3968.2 m
4131.26 3962.8 4126.89 3958.42 4121.49 3958.42 c
4116.09 3958.42 4111.71 3962.8 4111.71 3968.2 c
4111.71 3973.59 4116.09 3977.97 4121.49 3977.97 c
4126.89 3977.97 4131.26 3973.59 4131.26 3968.2 c
f
n
4176.88 4020.33 m
4176.88 4014.93 4172.5 4010.55 4167.11 4010.55 c
4161.71 4010.55 4157.33 4014.93 4157.33 4020.33 c
4157.33 4025.73 4161.71 4030.1 4167.11 4030.1 c
4172.5 4030.1 4176.88 4025.73 4176.88 4020.33 c
f
n
4221.68 4072.46 m
4221.68 4067.06 4217.3 4062.69 4211.91 4062.69 c
4206.51 4062.69 4202.13 4067.06 4202.13 4072.46 c
4202.13 4077.86 4206.51 4082.24 4211.91 4082.24 c
4217.3 4082.24 4221.68 4077.86 4221.68 4072.46 c
f
n
4267.3 4123.78 m
4267.3 4118.38 4262.92 4114.0 4257.52 4114.0 c
4252.12 4114.0 4247.75 4118.38 4247.75 4123.78 c
4247.75 4129.18 4252.12 4133.55 4257.52 4133.55 c
4262.92 4133.55 4267.3 4129.18 4267.3 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4357.72 4227.23 m
4357.72 4221.84 4353.34 4217.46 4347.95 4217.46 c
4342.55 4217.46 4338.17 4221.84 4338.17 4227.23 c
4338.17 4232.63 4342.55 4237.01 4347.95 4237.01 c
4353.34 4237.01 4357.72 4232.63 4357.72 4227.23 c
f
n
4403.34 4279.37 m
4403.34 4273.97 4398.96 4269.59 4393.56 4269.59 c
4388.16 4269.59 4383.79 4273.97 4383.79 4279.37 c
4383.79 4284.77 4388.16 4289.14 4393.56 4289.14 c
4398.96 4289.14 4403.34 4284.77 4403.34 4279.37 c
f
n
4448.14 4330.69 m
4448.14 4325.29 4443.76 4320.91 4438.36 4320.91 c
4432.96 4320.91 4428.59 4325.29 4428.59 4330.69 c
4428.59 4336.09 4432.96 4340.46 4438.36 4340.46 c
4443.76 4340.46 4448.14 4336.09 4448.14 4330.69 c
f
n
4493.76 4382.82 m
4493.76 4377.42 4489.38 4373.05 4483.98 4373.05 c
4478.58 4373.05 4474.21 4377.42 4474.21 4382.82 c
4474.21 4388.22 4478.58 4392.6 4483.98 4392.6 c
4489.38 4392.6 4493.76 4388.22 4493.76 4382.82 c
f
n
4538.56 4434.14 m
4538.56 4428.74 4534.18 4424.36 4528.79 4424.36 c
4523.39 4424.36 4519.01 4428.74 4519.01 4434.14 c
4519.01 4439.54 4523.39 4443.91 4528.79 4443.91 c
4534.18 4443.91 4538.56 4439.54 4538.56 4434.14 c
f
n
4584.18 4486.27 m
4584.18 4480.88 4579.8 4476.5 4574.4 4476.5 c
4569.0 4476.5 4564.62 4480.88 4564.62 4486.27 c
4564.62 4491.67 4569.0 4496.05 4574.4 4496.05 c
4579.8 4496.05 4584.18 4491.67 4584.18 4486.27 c
f
n
4628.98 4537.59 m
4628.98 4532.2 4624.6 4527.82 4619.2 4527.82 c
4613.8 4527.82 4609.43 4532.2 4609.43 4537.59 c
4609.43 4542.99 4613.8 4547.37 4619.2 4547.37 c
4624.6 4547.37 4628.98 4542.99 4628.98 4537.59 c
f
n
4001.74 3761.29 m
4001.74 3755.89 3997.37 3751.51 3991.97 3751.51 c
3986.57 3751.51 3982.19 3755.89 3982.19 3761.29 c
3982.19 3766.69 3986.57 3771.06 3991.97 3771.06 c
3997.37 3771.06 4001.74 3766.69 4001.74 3761.29 c
f
n
4040.84 3813.42 m
4040.84 3808.02 4036.46 3803.64 4031.07 3803.64 c
4025.67 3803.64 4021.29 3808.02 4021.29 3813.42 c
4021.29 3818.82 4025.67 3823.2 4031.07 3823.2 c
4036.46 3823.2 4040.84 3818.82 4040.84 3813.42 c
f
n
4079.95 3864.74 m
4079.95 3859.34 4075.57 3854.96 4070.17 3854.96 c
4064.77 3854.96 4060.39 3859.34 4060.39 3864.74 c
4060.39 3870.14 4064.77 3874.52 4070.17 3874.52 c
4075.57 3874.52 4079.95 3870.14 4079.95 3864.74 c
f
n
4118.23 3916.88 m
4118.23 3911.48 4113.85 3907.1 4108.45 3907.1 c
4103.05 3907.1 4098.68 3911.48 4098.68 3916.88 c
4098.68 3922.27 4103.05 3926.65 4108.45 3926.65 c
4113.85 3926.65 4118.23 3922.27 4118.23 3916.88 c
f
n
4157.33 3968.2 m
4157.33 3962.8 4152.95 3958.42 4147.55 3958.42 c
4142.16 3958.42 4137.78 3962.8 4137.78 3968.2 c
4137.78 3973.59 4142.16 3977.97 4147.55 3977.97 c
4152.95 3977.97 4157.33 3973.59 4157.33 3968.2 c
f
n
4196.43 4020.33 m
4196.43 4014.93 4192.05 4010.55 4186.66 4010.55 c
4181.26 4010.55 4176.88 4014.93 4176.88 4020.33 c
4176.88 4025.73 4181.26 4030.1 4186.66 4030.1 c
4192.05 4030.1 4196.43 4025.73 4196.43 4020.33 c
f
n
4234.71 4072.46 m
4234.71 4067.06 4230.34 4062.69 4224.94 4062.69 c
4219.54 4062.69 4215.16 4067.06 4215.16 4072.46 c
4215.16 4077.86 4219.54 4082.24 4224.94 4082.24 c
4230.34 4082.24 4234.71 4077.86 4234.71 4072.46 c
f
n
4273.82 4123.78 m
4273.82 4118.38 4269.44 4114.0 4264.04 4114.0 c
4258.64 4114.0 4254.27 4118.38 4254.27 4123.78 c
4254.27 4129.18 4258.64 4133.55 4264.04 4133.55 c
4269.44 4133.55 4273.82 4129.18 4273.82 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4351.2 4227.23 m
4351.2 4221.84 4346.82 4217.46 4341.43 4217.46 c
4336.03 4217.46 4331.65 4221.84 4331.65 4227.23 c
4331.65 4232.63 4336.03 4237.01 4341.43 4237.01 c
4346.82 4237.01 4351.2 4232.63 4351.2 4227.23 c
f
n
4390.3 4279.37 m
4390.3 4273.97 4385.93 4269.59 4380.53 4269.59 c
4375.13 4269.59 4370.75 4273.97 4370.75 4279.37 c
4370.75 4284.77 4375.13 4289.14 4380.53 4289.14 c
4385.93 4289.14 4390.3 4284.77 4390.3 4279.37 c
f
n
4428.59 4330.69 m
4428.59 4325.29 4424.21 4320.91 4418.81 4320.91 c
4413.41 4320.91 4409.04 4325.29 4409.04 4330.69 c
4409.04 4336.09 4413.41 4340.46 4418.81 4340.46 c
4424.21 4340.46 4428.59 4336.09 4428.59 4330.69 c
f
n
4467.69 4382.82 m
4467.69 4377.42 4463.31 4373.05 4457.91 4373.05 c
4452.52 4373.05 4448.14 4377.42 4448.14 4382.82 c
4448.14 4388.22 4452.52 4392.6 4457.91 4392.6 c
4463.31 4392.6 4467.69 4388.22 4467.69 4382.82 c
f
n
4506.79 4434.14 m
4506.79 4428.74 4502.41 4424.36 4497.02 4424.36 c
4491.62 4424.36 4487.24 4428.74 4487.24 4434.14 c
4487.24 4439.54 4491.62 4443.91 4497.02 4443.91 c
4502.41 4443.91 4506.79 4439.54 4506.79 4434.14 c
f
n
4545.07 4486.27 m
4545.07 4480.88 4540.7 4476.5 4535.3 4476.5 c
4529.9 4476.5 4525.52 4480.88 4525.52 4486.27 c
4525.52 4491.67 4529.9 4496.05 4535.3 4496.05 c
4540.7 4496.05 4545.07 4491.67 4545.07 4486.27 c
f
n
4584.18 4537.59 m
4584.18 4532.2 4579.8 4527.82 4574.4 4527.82 c
4569.0 4527.82 4564.62 4532.2 4564.62 4537.59 c
4564.62 4542.99 4569.0 4547.37 4574.4 4547.37 c
4579.8 4547.37 4584.18 4542.99 4584.18 4537.59 c
f
n
4053.88 3761.29 m
4053.88 3755.89 4049.5 3751.51 4044.1 3751.51 c
4038.7 3751.51 4034.33 3755.89 4034.33 3761.29 c
4034.33 3766.69 4038.7 3771.06 4044.1 3771.06 c
4049.5 3771.06 4053.88 3766.69 4053.88 3761.29 c
f
n
4086.46 3813.42 m
4086.46 3808.02 4082.08 3803.64 4076.68 3803.64 c
4071.29 3803.64 4066.91 3808.02 4066.91 3813.42 c
4066.91 3818.82 4071.29 3823.2 4076.68 3823.2 c
4082.08 3823.2 4086.46 3818.82 4086.46 3813.42 c
f
n
4118.23 3864.74 m
4118.23 3859.34 4113.85 3854.96 4108.45 3854.96 c
4103.05 3854.96 4098.68 3859.34 4098.68 3864.74 c
4098.68 3870.14 4103.05 3874.52 4108.45 3874.52 c
4113.85 3874.52 4118.23 3870.14 4118.23 3864.74 c
f
n
4150.81 3916.88 m
4150.81 3911.48 4146.44 3907.1 4141.04 3907.1 c
4135.64 3907.1 4131.26 3911.48 4131.26 3916.88 c
4131.26 3922.27 4135.64 3926.65 4141.04 3926.65 c
4146.44 3926.65 4150.81 3922.27 4150.81 3916.88 c
f
n
4183.4 3968.2 m
4183.4 3962.8 4179.02 3958.42 4173.62 3958.42 c
4168.22 3958.42 4163.85 3962.8 4163.85 3968.2 c
4163.85 3973.59 4168.22 3977.97 4173.62 3977.97 c
4179.02 3977.97 4183.4 3973.59 4183.4 3968.2 c
f
n
4215.16 4020.33 m
4215.16 4014.93 4210.79 4010.55 4205.39 4010.55 c
4199.99 4010.55 4195.62 4014.93 4195.62 4020.33 c
4195.62 4025.73 4199.99 4030.1 4205.39 4030.1 c
4210.79 4030.1 4215.16 4025.73 4215.16 4020.33 c
f
n
4247.75 4072.46 m
4247.75 4067.06 4243.37 4062.69 4237.97 4062.69 c
4232.57 4062.69 4228.2 4067.06 4228.2 4072.46 c
4228.2 4077.86 4232.57 4082.24 4237.97 4082.24 c
4243.37 4082.24 4247.75 4077.86 4247.75 4072.46 c
f
n
4280.33 4123.78 m
4280.33 4118.38 4275.96 4114.0 4270.56 4114.0 c
4265.16 4114.0 4260.78 4118.38 4260.78 4123.78 c
4260.78 4129.18 4265.16 4133.55 4270.56 4133.55 c
4275.96 4133.55 4280.33 4129.18 4280.33 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4344.69 4227.23 m
4344.69 4221.84 4340.31 4217.46 4334.91 4217.46 c
4329.51 4217.46 4325.14 4221.84 4325.14 4227.23 c
4325.14 4232.63 4329.51 4237.01 4334.91 4237.01 c
4340.31 4237.01 4344.69 4232.63 4344.69 4227.23 c
f
n
4377.27 4279.37 m
4377.27 4273.97 4372.89 4269.59 4367.5 4269.59 c
4362.1 4269.59 4357.72 4273.97 4357.72 4279.37 c
4357.72 4284.77 4362.1 4289.14 4367.5 4289.14 c
4372.89 4289.14 4377.27 4284.77 4377.27 4279.37 c
f
n
4409.85 4330.69 m
4409.85 4325.29 4405.48 4320.91 4400.08 4320.91 c
4394.68 4320.91 4390.3 4325.29 4390.3 4330.69 c
4390.3 4336.09 4394.68 4340.46 4400.08 4340.46 c
4405.48 4340.46 4409.85 4336.09 4409.85 4330.69 c
f
n
4441.62 4382.82 m
4441.62 4377.42 4437.25 4373.05 4431.85 4373.05 c
4426.45 4373.05 4422.07 4377.42 4422.07 4382.82 c
4422.07 4388.22 4426.45 4392.6 4431.85 4392.6 c
4437.25 4392.6 4441.62 4388.22 4441.62 4382.82 c
f
n
4474.21 4434.14 m
4474.21 4428.74 4469.83 4424.36 4464.43 4424.36 c
4459.03 4424.36 4454.66 4428.74 4454.66 4434.14 c
4454.66 4439.54 4459.03 4443.91 4464.43 4443.91 c
4469.83 4443.91 4474.21 4439.54 4474.21 4434.14 c
f
n
4506.79 4486.27 m
4506.79 4480.88 4502.41 4476.5 4497.02 4476.5 c
4491.62 4476.5 4487.24 4480.88 4487.24 4486.27 c
4487.24 4491.67 4491.62 4496.05 4497.02 4496.05 c
4502.41 4496.05 4506.79 4491.67 4506.79 4486.27 c
f
n
4538.56 4537.59 m
4538.56 4532.2 4534.18 4527.82 4528.79 4527.82 c
4523.39 4527.82 4519.01 4532.2 4519.01 4537.59 c
4519.01 4542.99 4523.39 4547.37 4528.79 4547.37 c
4534.18 4547.37 4538.56 4542.99 4538.56 4537.59 c
f
n
4106.01 3761.29 m
4106.01 3755.89 4101.63 3751.51 4096.23 3751.51 c
4090.84 3751.51 4086.46 3755.89 4086.46 3761.29 c
4086.46 3766.69 4090.84 3771.06 4096.23 3771.06 c
4101.63 3771.06 4106.01 3766.69 4106.01 3761.29 c
f
n
4131.26 3813.42 m
4131.26 3808.02 4126.89 3803.64 4121.49 3803.64 c
4116.09 3803.64 4111.71 3808.02 4111.71 3813.42 c
4111.71 3818.82 4116.09 3823.2 4121.49 3823.2 c
4126.89 3823.2 4131.26 3818.82 4131.26 3813.42 c
f
n
4157.33 3864.74 m
4157.33 3859.34 4152.95 3854.96 4147.55 3854.96 c
4142.16 3854.96 4137.78 3859.34 4137.78 3864.74 c
4137.78 3870.14 4142.16 3874.52 4147.55 3874.52 c
4152.95 3874.52 4157.33 3870.14 4157.33 3864.74 c
f
n
4183.4 3916.88 m
4183.4 3911.48 4179.02 3907.1 4173.62 3907.1 c
4168.22 3907.1 4163.85 3911.48 4163.85 3916.88 c
4163.85 3922.27 4168.22 3926.65 4173.62 3926.65 c
4179.02 3926.65 4183.4 3922.27 4183.4 3916.88 c
f
n
4209.46 3968.2 m
4209.46 3962.8 4205.09 3958.42 4199.69 3958.42 c
4194.29 3958.42 4189.91 3962.8 4189.91 3968.2 c
4189.91 3973.59 4194.29 3977.97 4199.69 3977.97 c
4205.09 3977.97 4209.46 3973.59 4209.46 3968.2 c
f
n
4234.71 4020.33 m
4234.71 4014.93 4230.34 4010.55 4224.94 4010.55 c
4219.54 4010.55 4215.16 4014.93 4215.16 4020.33 c
4215.16 4025.73 4219.54 4030.1 4224.94 4030.1 c
4230.34 4030.1 4234.71 4025.73 4234.71 4020.33 c
f
n
4260.78 4072.46 m
4260.78 4067.06 4256.41 4062.69 4251.01 4062.69 c
4245.61 4062.69 4241.23 4067.06 4241.23 4072.46 c
4241.23 4077.86 4245.61 4082.24 4251.01 4082.24 c
4256.41 4082.24 4260.78 4077.86 4260.78 4072.46 c
f
n
4286.85 4123.78 m
4286.85 4118.38 4282.47 4114.0 4277.07 4114.0 c
4271.68 4114.0 4267.3 4118.38 4267.3 4123.78 c
4267.3 4129.18 4271.68 4133.55 4277.07 4133.55 c
4282.47 4133.55 4286.85 4129.18 4286.85 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4338.17 4227.23 m
4338.17 4221.84 4333.79 4217.46 4328.39 4217.46 c
4323.0 4217.46 4318.62 4221.84 4318.62 4227.23 c
4318.62 4232.63 4323.0 4237.01 4328.39 4237.01 c
4333.79 4237.01 4338.17 4232.63 4338.17 4227.23 c
f
n
4364.23 4279.37 m
4364.23 4273.97 4359.86 4269.59 4354.46 4269.59 c
4349.06 4269.59 4344.69 4273.97 4344.69 4279.37 c
4344.69 4284.77 4349.06 4289.14 4354.46 4289.14 c
4359.86 4289.14 4364.23 4284.77 4364.23 4279.37 c
f
n
4390.3 4330.69 m
4390.3 4325.29 4385.93 4320.91 4380.53 4320.91 c
4375.13 4320.91 4370.75 4325.29 4370.75 4330.69 c
4370.75 4336.09 4375.13 4340.46 4380.53 4340.46 c
4385.93 4340.46 4390.3 4336.09 4390.3 4330.69 c
f
n
4416.37 4382.82 m
4416.37 4377.42 4411.99 4373.05 4406.59 4373.05 c
4401.2 4373.05 4396.82 4377.42 4396.82 4382.82 c
4396.82 4388.22 4401.2 4392.6 4406.59 4392.6 c
4411.99 4392.6 4416.37 4388.22 4416.37 4382.82 c
f
n
4441.62 4434.14 m
4441.62 4428.74 4437.25 4424.36 4431.85 4424.36 c
4426.45 4424.36 4422.07 4428.74 4422.07 4434.14 c
4422.07 4439.54 4426.45 4443.91 4431.85 4443.91 c
4437.25 4443.91 4441.62 4439.54 4441.62 4434.14 c
f
n
4467.69 4486.27 m
4467.69 4480.88 4463.31 4476.5 4457.91 4476.5 c
4452.52 4476.5 4448.14 4480.88 4448.14 4486.27 c
4448.14 4491.67 4452.52 4496.05 4457.91 4496.05 c
4463.31 4496.05 4467.69 4491.67 4467.69 4486.27 c
f
n
4493.76 4537.59 m
4493.76 4532.2 4489.38 4527.82 4483.98 4527.82 c
4478.58 4527.82 4474.21 4532.2 4474.21 4537.59 c
4474.21 4542.99 4478.58 4547.37 4483.98 4547.37 c
4489.38 4547.37 4493.76 4542.99 4493.76 4537.59 c
f
n
4157.33 3761.29 m
4157.33 3755.89 4152.95 3751.51 4147.55 3751.51 c
4142.16 3751.51 4137.78 3755.89 4137.78 3761.29 c
4137.78 3766.69 4142.16 3771.06 4147.55 3771.06 c
4152.95 3771.06 4157.33 3766.69 4157.33 3761.29 c
f
n
4176.88 3813.42 m
4176.88 3808.02 4172.5 3803.64 4167.11 3803.64 c
4161.71 3803.64 4157.33 3808.02 4157.33 3813.42 c
4157.33 3818.82 4161.71 3823.2 4167.11 3823.2 c
4172.5 3823.2 4176.88 3818.82 4176.88 3813.42 c
f
n
4196.43 3864.74 m
4196.43 3859.34 4192.05 3854.96 4186.66 3854.96 c
4181.26 3854.96 4176.88 3859.34 4176.88 3864.74 c
4176.88 3870.14 4181.26 3874.52 4186.66 3874.52 c
4192.05 3874.52 4196.43 3870.14 4196.43 3864.74 c
f
n
4215.16 3916.88 m
4215.16 3911.48 4210.79 3907.1 4205.39 3907.1 c
4199.99 3907.1 4195.62 3911.48 4195.62 3916.88 c
4195.62 3922.27 4199.99 3926.65 4205.39 3926.65 c
4210.79 3926.65 4215.16 3922.27 4215.16 3916.88 c
f
n
4234.71 3968.2 m
4234.71 3962.8 4230.34 3958.42 4224.94 3958.42 c
4219.54 3958.42 4215.16 3962.8 4215.16 3968.2 c
4215.16 3973.59 4219.54 3977.97 4224.94 3977.97 c
4230.34 3977.97 4234.71 3973.59 4234.71 3968.2 c
f
n
4254.27 4020.33 m
4254.27 4014.93 4249.89 4010.55 4244.49 4010.55 c
4239.09 4010.55 4234.71 4014.93 4234.71 4020.33 c
4234.71 4025.73 4239.09 4030.1 4244.49 4030.1 c
4249.89 4030.1 4254.27 4025.73 4254.27 4020.33 c
f
n
4273.82 4072.46 m
4273.82 4067.06 4269.44 4062.69 4264.04 4062.69 c
4258.64 4062.69 4254.27 4067.06 4254.27 4072.46 c
4254.27 4077.86 4258.64 4082.24 4264.04 4082.24 c
4269.44 4082.24 4273.82 4077.86 4273.82 4072.46 c
f
n
4293.37 4123.78 m
4293.37 4118.38 4288.99 4114.0 4283.59 4114.0 c
4278.19 4114.0 4273.82 4118.38 4273.82 4123.78 c
4273.82 4129.18 4278.19 4133.55 4283.59 4133.55 c
4288.99 4133.55 4293.37 4129.18 4293.37 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4331.65 4227.23 m
4331.65 4221.84 4327.28 4217.46 4321.88 4217.46 c
4316.48 4217.46 4312.1 4221.84 4312.1 4227.23 c
4312.1 4232.63 4316.48 4237.01 4321.88 4237.01 c
4327.28 4237.01 4331.65 4232.63 4331.65 4227.23 c
f
n
4351.2 4279.37 m
4351.2 4273.97 4346.82 4269.59 4341.43 4269.59 c
4336.03 4269.59 4331.65 4273.97 4331.65 4279.37 c
4331.65 4284.77 4336.03 4289.14 4341.43 4289.14 c
4346.82 4289.14 4351.2 4284.77 4351.2 4279.37 c
f
n
4370.75 4330.69 m
4370.75 4325.29 4366.38 4320.91 4360.98 4320.91 c
4355.58 4320.91 4351.2 4325.29 4351.2 4330.69 c
4351.2 4336.09 4355.58 4340.46 4360.98 4340.46 c
4366.38 4340.46 4370.75 4336.09 4370.75 4330.69 c
f
n
4390.3 4382.82 m
4390.3 4377.42 4385.93 4373.05 4380.53 4373.05 c
4375.13 4373.05 4370.75 4377.42 4370.75 4382.82 c
4370.75 4388.22 4375.13 4392.6 4380.53 4392.6 c
4385.93 4392.6 4390.3 4388.22 4390.3 4382.82 c
f
n
4409.85 4434.14 m
4409.85 4428.74 4405.48 4424.36 4400.08 4424.36 c
4394.68 4424.36 4390.3 4428.74 4390.3 4434.14 c
4390.3 4439.54 4394.68 4443.91 4400.08 4443.91 c
4405.48 4443.91 4409.85 4439.54 4409.85 4434.14 c
f
n
4428.59 4486.27 m
4428.59 4480.88 4424.21 4476.5 4418.81 4476.5 c
4413.41 4476.5 4409.04 4480.88 4409.04 4486.27 c
4409.04 4491.67 4413.41 4496.05 4418.81 4496.05 c
4424.21 4496.05 4428.59 4491.67 4428.59 4486.27 c
f
n
4448.14 4537.59 m
4448.14 4532.2 4443.76 4527.82 4438.36 4527.82 c
4432.96 4527.82 4428.59 4532.2 4428.59 4537.59 c
4428.59 4542.99 4432.96 4547.37 4438.36 4547.37 c
4443.76 4547.37 4448.14 4542.99 4448.14 4537.59 c
f
n
4209.46 3761.29 m
4209.46 3755.89 4205.09 3751.51 4199.69 3751.51 c
4194.29 3751.51 4189.91 3755.89 4189.91 3761.29 c
4189.91 3766.69 4194.29 3771.06 4199.69 3771.06 c
4205.09 3771.06 4209.46 3766.69 4209.46 3761.29 c
f
n
4221.68 3813.42 m
4221.68 3808.02 4217.3 3803.64 4211.91 3803.64 c
4206.51 3803.64 4202.13 3808.02 4202.13 3813.42 c
4202.13 3818.82 4206.51 3823.2 4211.91 3823.2 c
4217.3 3823.2 4221.68 3818.82 4221.68 3813.42 c
f
n
4234.71 3864.74 m
4234.71 3859.34 4230.34 3854.96 4224.94 3854.96 c
4219.54 3854.96 4215.16 3859.34 4215.16 3864.74 c
4215.16 3870.14 4219.54 3874.52 4224.94 3874.52 c
4230.34 3874.52 4234.71 3870.14 4234.71 3864.74 c
f
n
4247.75 3916.88 m
4247.75 3911.48 4243.37 3907.1 4237.97 3907.1 c
4232.57 3907.1 4228.2 3911.48 4228.2 3916.88 c
4228.2 3922.27 4232.57 3926.65 4237.97 3926.65 c
4243.37 3926.65 4247.75 3922.27 4247.75 3916.88 c
f
n
4260.78 3968.2 m
4260.78 3962.8 4256.41 3958.42 4251.01 3958.42 c
4245.61 3958.42 4241.23 3962.8 4241.23 3968.2 c
4241.23 3973.59 4245.61 3977.97 4251.01 3977.97 c
4256.41 3977.97 4260.78 3973.59 4260.78 3968.2 c
f
n
4273.82 4020.33 m
4273.82 4014.93 4269.44 4010.55 4264.04 4010.55 c
4258.64 4010.55 4254.27 4014.93 4254.27 4020.33 c
4254.27 4025.73 4258.64 4030.1 4264.04 4030.1 c
4269.44 4030.1 4273.82 4025.73 4273.82 4020.33 c
f
n
4286.85 4072.46 m
4286.85 4067.06 4282.47 4062.69 4277.07 4062.69 c
4271.68 4062.69 4267.3 4067.06 4267.3 4072.46 c
4267.3 4077.86 4271.68 4082.24 4277.07 4082.24 c
4282.47 4082.24 4286.85 4077.86 4286.85 4072.46 c
f
n
4299.88 4123.78 m
4299.88 4118.38 4295.51 4114.0 4290.11 4114.0 c
4284.71 4114.0 4280.33 4118.38 4280.33 4123.78 c
4280.33 4129.18 4284.71 4133.55 4290.11 4133.55 c
4295.51 4133.55 4299.88 4129.18 4299.88 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4325.14 4227.23 m
4325.14 4221.84 4320.76 4217.46 4315.36 4217.46 c
4309.96 4217.46 4305.59 4221.84 4305.59 4227.23 c
4305.59 4232.63 4309.96 4237.01 4315.36 4237.01 c
4320.76 4237.01 4325.14 4232.63 4325.14 4227.23 c
f
n
4338.17 4279.37 m
4338.17 4273.97 4333.79 4269.59 4328.39 4269.59 c
4323.0 4269.59 4318.62 4273.97 4318.62 4279.37 c
4318.62 4284.77 4323.0 4289.14 4328.39 4289.14 c
4333.79 4289.14 4338.17 4284.77 4338.17 4279.37 c
f
n
4351.2 4330.69 m
4351.2 4325.29 4346.82 4320.91 4341.43 4320.91 c
4336.03 4320.91 4331.65 4325.29 4331.65 4330.69 c
4331.65 4336.09 4336.03 4340.46 4341.43 4340.46 c
4346.82 4340.46 4351.2 4336.09 4351.2 4330.69 c
f
n
4364.23 4382.82 m
4364.23 4377.42 4359.86 4373.05 4354.46 4373.05 c
4349.06 4373.05 4344.69 4377.42 4344.69 4382.82 c
4344.69 4388.22 4349.06 4392.6 4354.46 4392.6 c
4359.86 4392.6 4364.23 4388.22 4364.23 4382.82 c
f
n
4377.27 4434.14 m
4377.27 4428.74 4372.89 4424.36 4367.5 4424.36 c
4362.1 4424.36 4357.72 4428.74 4357.72 4434.14 c
4357.72 4439.54 4362.1 4443.91 4367.5 4443.91 c
4372.89 4443.91 4377.27 4439.54 4377.27 4434.14 c
f
n
4390.3 4486.27 m
4390.3 4480.88 4385.93 4476.5 4380.53 4476.5 c
4375.13 4476.5 4370.75 4480.88 4370.75 4486.27 c
4370.75 4491.67 4375.13 4496.05 4380.53 4496.05 c
4385.93 4496.05 4390.3 4491.67 4390.3 4486.27 c
f
n
4403.34 4537.59 m
4403.34 4532.2 4398.96 4527.82 4393.56 4527.82 c
4388.16 4527.82 4383.79 4532.2 4383.79 4537.59 c
4383.79 4542.99 4388.16 4547.37 4393.56 4547.37 c
4398.96 4547.37 4403.34 4542.99 4403.34 4537.59 c
f
n
4260.78 3761.29 m
4260.78 3755.89 4256.41 3751.51 4251.01 3751.51 c
4245.61 3751.51 4241.23 3755.89 4241.23 3761.29 c
4241.23 3766.69 4245.61 3771.06 4251.01 3771.06 c
4256.41 3771.06 4260.78 3766.69 4260.78 3761.29 c
f
n
4267.3 3813.42 m
4267.3 3808.02 4262.92 3803.64 4257.52 3803.64 c
4252.12 3803.64 4247.75 3808.02 4247.75 3813.42 c
4247.75 3818.82 4252.12 3823.2 4257.52 3823.2 c
4262.92 3823.2 4267.3 3818.82 4267.3 3813.42 c
f
n
4273.82 3864.74 m
4273.82 3859.34 4269.44 3854.96 4264.04 3854.96 c
4258.64 3854.96 4254.27 3859.34 4254.27 3864.74 c
4254.27 3870.14 4258.64 3874.52 4264.04 3874.52 c
4269.44 3874.52 4273.82 3870.14 4273.82 3864.74 c
f
n
4280.33 3916.88 m
4280.33 3911.48 4275.96 3907.1 4270.56 3907.1 c
4265.16 3907.1 4260.78 3911.48 4260.78 3916.88 c
4260.78 3922.27 4265.16 3926.65 4270.56 3926.65 c
4275.96 3926.65 4280.33 3922.27 4280.33 3916.88 c
f
n
4286.85 3968.2 m
4286.85 3962.8 4282.47 3958.42 4277.07 3958.42 c
4271.68 3958.42 4267.3 3962.8 4267.3 3968.2 c
4267.3 3973.59 4271.68 3977.97 4277.07 3977.97 c
4282.47 3977.97 4286.85 3973.59 4286.85 3968.2 c
f
n
4293.37 4020.33 m
4293.37 4014.93 4288.99 4010.55 4283.59 4010.55 c
4278.19 4010.55 4273.82 4014.93 4273.82 4020.33 c
4273.82 4025.73 4278.19 4030.1 4283.59 4030.1 c
4288.99 4030.1 4293.37 4025.73 4293.37 4020.33 c
f
n
4299.88 4072.46 m
4299.88 4067.06 4295.51 4062.69 4290.11 4062.69 c
4284.71 4062.69 4280.33 4067.06 4280.33 4072.46 c
4280.33 4077.86 4284.71 4082.24 4290.11 4082.24 c
4295.51 4082.24 4299.88 4077.86 4299.88 4072.46 c
f
n
4306.4 4123.78 m
4306.4 4118.38 4302.02 4114.0 4296.62 4114.0 c
4291.23 4114.0 4286.85 4118.38 4286.85 4123.78 c
4286.85 4129.18 4291.23 4133.55 4296.62 4133.55 c
4302.02 4133.55 4306.4 4129.18 4306.4 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4318.62 4227.23 m
4318.62 4221.84 4314.24 4217.46 4308.84 4217.46 c
4303.45 4217.46 4299.07 4221.84 4299.07 4227.23 c
4299.07 4232.63 4303.45 4237.01 4308.84 4237.01 c
4314.24 4237.01 4318.62 4232.63 4318.62 4227.23 c
f
n
4325.14 4279.37 m
4325.14 4273.97 4320.76 4269.59 4315.36 4269.59 c
4309.96 4269.59 4305.59 4273.97 4305.59 4279.37 c
4305.59 4284.77 4309.96 4289.14 4315.36 4289.14 c
4320.76 4289.14 4325.14 4284.77 4325.14 4279.37 c
f
n
4331.65 4330.69 m
4331.65 4325.29 4327.28 4320.91 4321.88 4320.91 c
4316.48 4320.91 4312.1 4325.29 4312.1 4330.69 c
4312.1 4336.09 4316.48 4340.46 4321.88 4340.46 c
4327.28 4340.46 4331.65 4336.09 4331.65 4330.69 c
f
n
4338.17 4382.82 m
4338.17 4377.42 4333.79 4373.05 4328.39 4373.05 c
4323.0 4373.05 4318.62 4377.42 4318.62 4382.82 c
4318.62 4388.22 4323.0 4392.6 4328.39 4392.6 c
4333.79 4392.6 4338.17 4388.22 4338.17 4382.82 c
f
n
4344.69 4434.14 m
4344.69 4428.74 4340.31 4424.36 4334.91 4424.36 c
4329.51 4424.36 4325.14 4428.74 4325.14 4434.14 c
4325.14 4439.54 4329.51 4443.91 4334.91 4443.91 c
4340.31 4443.91 4344.69 4439.54 4344.69 4434.14 c
f
n
4351.2 4486.27 m
4351.2 4480.88 4346.82 4476.5 4341.43 4476.5 c
4336.03 4476.5 4331.65 4480.88 4331.65 4486.27 c
4331.65 4491.67 4336.03 4496.05 4341.43 4496.05 c
4346.82 4496.05 4351.2 4491.67 4351.2 4486.27 c
f
n
4357.72 4537.59 m
4357.72 4532.2 4353.34 4527.82 4347.95 4527.82 c
4342.55 4527.82 4338.17 4532.2 4338.17 4537.59 c
4338.17 4542.99 4342.55 4547.37 4347.95 4547.37 c
4353.34 4547.37 4357.72 4542.99 4357.72 4537.59 c
f
n
4312.92 3761.29 m
4312.92 3755.89 4308.54 3751.51 4303.14 3751.51 c
4297.74 3751.51 4293.37 3755.89 4293.37 3761.29 c
4293.37 3766.69 4297.74 3771.06 4303.14 3771.06 c
4308.54 3771.06 4312.92 3766.69 4312.92 3761.29 c
f
n
4312.92 3813.42 m
4312.92 3808.02 4308.54 3803.64 4303.14 3803.64 c
4297.74 3803.64 4293.37 3808.02 4293.37 3813.42 c
4293.37 3818.82 4297.74 3823.2 4303.14 3823.2 c
4308.54 3823.2 4312.92 3818.82 4312.92 3813.42 c
f
n
4312.92 3864.74 m
4312.92 3859.34 4308.54 3854.96 4303.14 3854.96 c
4297.74 3854.96 4293.37 3859.34 4293.37 3864.74 c
4293.37 3870.14 4297.74 3874.52 4303.14 3874.52 c
4308.54 3874.52 4312.92 3870.14 4312.92 3864.74 c
f
n
4312.92 3916.88 m
4312.92 3911.48 4308.54 3907.1 4303.14 3907.1 c
4297.74 3907.1 4293.37 3911.48 4293.37 3916.88 c
4293.37 3922.27 4297.74 3926.65 4303.14 3926.65 c
4308.54 3926.65 4312.92 3922.27 4312.92 3916.88 c
f
n
4312.92 3968.2 m
4312.92 3962.8 4308.54 3958.42 4303.14 3958.42 c
4297.74 3958.42 4293.37 3962.8 4293.37 3968.2 c
4293.37 3973.59 4297.74 3977.97 4303.14 3977.97 c
4308.54 3977.97 4312.92 3973.59 4312.92 3968.2 c
f
n
4312.92 4020.33 m
4312.92 4014.93 4308.54 4010.55 4303.14 4010.55 c
4297.74 4010.55 4293.37 4014.93 4293.37 4020.33 c
4293.37 4025.73 4297.74 4030.1 4303.14 4030.1 c
4308.54 4030.1 4312.92 4025.73 4312.92 4020.33 c
f
n
4312.92 4072.46 m
4312.92 4067.06 4308.54 4062.69 4303.14 4062.69 c
4297.74 4062.69 4293.37 4067.06 4293.37 4072.46 c
4293.37 4077.86 4297.74 4082.24 4303.14 4082.24 c
4308.54 4082.24 4312.92 4077.86 4312.92 4072.46 c
f
n
4312.92 4123.78 m
4312.92 4118.38 4308.54 4114.0 4303.14 4114.0 c
4297.74 4114.0 4293.37 4118.38 4293.37 4123.78 c
4293.37 4129.18 4297.74 4133.55 4303.14 4133.55 c
4308.54 4133.55 4312.92 4129.18 4312.92 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4312.92 4227.23 m
4312.92 4221.84 4308.54 4217.46 4303.14 4217.46 c
4297.74 4217.46 4293.37 4221.84 4293.37 4227.23 c
4293.37 4232.63 4297.74 4237.01 4303.14 4237.01 c
4308.54 4237.01 4312.92 4232.63 4312.92 4227.23 c
f
n
4312.92 4279.37 m
4312.92 4273.97 4308.54 4269.59 4303.14 4269.59 c
4297.74 4269.59 4293.37 4273.97 4293.37 4279.37 c
4293.37 4284.77 4297.74 4289.14 4303.14 4289.14 c
4308.54 4289.14 4312.92 4284.77 4312.92 4279.37 c
f
n
4312.92 4330.69 m
4312.92 4325.29 4308.54 4320.91 4303.14 4320.91 c
4297.74 4320.91 4293.37 4325.29 4293.37 4330.69 c
4293.37 4336.09 4297.74 4340.46 4303.14 4340.46 c
4308.54 4340.46 4312.92 4336.09 4312.92 4330.69 c
f
n
4312.92 4382.82 m
4312.92 4377.42 4308.54 4373.05 4303.14 4373.05 c
4297.74 4373.05 4293.37 4377.42 4293.37 4382.82 c
4293.37 4388.22 4297.74 4392.6 4303.14 4392.6 c
4308.54 4392.6 4312.92 4388.22 4312.92 4382.82 c
f
n
4312.92 4434.14 m
4312.92 4428.74 4308.54 4424.36 4303.14 4424.36 c
4297.74 4424.36 4293.37 4428.74 4293.37 4434.14 c
4293.37 4439.54 4297.74 4443.91 4303.14 4443.91 c
4308.54 4443.91 4312.92 4439.54 4312.92 4434.14 c
f
n
4312.92 4486.27 m
4312.92 4480.88 4308.54 4476.5 4303.14 4476.5 c
4297.74 4476.5 4293.37 4480.88 4293.37 4486.27 c
4293.37 4491.67 4297.74 4496.05 4303.14 4496.05 c
4308.54 4496.05 4312.92 4491.67 4312.92 4486.27 c
f
n
4312.92 4537.59 m
4312.92 4532.2 4308.54 4527.82 4303.14 4527.82 c
4297.74 4527.82 4293.37 4532.2 4293.37 4537.59 c
4293.37 4542.99 4297.74 4547.37 4303.14 4547.37 c
4308.54 4547.37 4312.92 4542.99 4312.92 4537.59 c
f
n
4364.23 3761.29 m
4364.23 3755.89 4359.86 3751.51 4354.46 3751.51 c
4349.06 3751.51 4344.69 3755.89 4344.69 3761.29 c
4344.69 3766.69 4349.06 3771.06 4354.46 3771.06 c
4359.86 3771.06 4364.23 3766.69 4364.23 3761.29 c
f
n
4357.72 3813.42 m
4357.72 3808.02 4353.34 3803.64 4347.95 3803.64 c
4342.55 3803.64 4338.17 3808.02 4338.17 3813.42 c
4338.17 3818.82 4342.55 3823.2 4347.95 3823.2 c
4353.34 3823.2 4357.72 3818.82 4357.72 3813.42 c
f
n
4351.2 3864.74 m
4351.2 3859.34 4346.82 3854.96 4341.43 3854.96 c
4336.03 3854.96 4331.65 3859.34 4331.65 3864.74 c
4331.65 3870.14 4336.03 3874.52 4341.43 3874.52 c
4346.82 3874.52 4351.2 3870.14 4351.2 3864.74 c
f
n
4344.69 3916.88 m
4344.69 3911.48 4340.31 3907.1 4334.91 3907.1 c
4329.51 3907.1 4325.14 3911.48 4325.14 3916.88 c
4325.14 3922.27 4329.51 3926.65 4334.91 3926.65 c
4340.31 3926.65 4344.69 3922.27 4344.69 3916.88 c
f
n
4338.17 3968.2 m
4338.17 3962.8 4333.79 3958.42 4328.39 3958.42 c
4323.0 3958.42 4318.62 3962.8 4318.62 3968.2 c
4318.62 3973.59 4323.0 3977.97 4328.39 3977.97 c
4333.79 3977.97 4338.17 3973.59 4338.17 3968.2 c
f
n
4331.65 4020.33 m
4331.65 4014.93 4327.28 4010.55 4321.88 4010.55 c
4316.48 4010.55 4312.1 4014.93 4312.1 4020.33 c
4312.1 4025.73 4316.48 4030.1 4321.88 4030.1 c
4327.28 4030.1 4331.65 4025.73 4331.65 4020.33 c
f
n
4325.14 4072.46 m
4325.14 4067.06 4320.76 4062.69 4315.36 4062.69 c
4309.96 4062.69 4305.59 4067.06 4305.59 4072.46 c
4305.59 4077.86 4309.96 4082.24 4315.36 4082.24 c
4320.76 4082.24 4325.14 4077.86 4325.14 4072.46 c
f
n
4318.62 4123.78 m
4318.62 4118.38 4314.24 4114.0 4308.84 4114.0 c
4303.45 4114.0 4299.07 4118.38 4299.07 4123.78 c
4299.07 4129.18 4303.45 4133.55 4308.84 4133.55 c
4314.24 4133.55 4318.62 4129.18 4318.62 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4306.4 4227.23 m
4306.4 4221.84 4302.02 4217.46 4296.62 4217.46 c
4291.23 4217.46 4286.85 4221.84 4286.85 4227.23 c
4286.85 4232.63 4291.23 4237.01 4296.62 4237.01 c
4302.02 4237.01 4306.4 4232.63 4306.4 4227.23 c
f
n
4299.88 4279.37 m
4299.88 4273.97 4295.51 4269.59 4290.11 4269.59 c
4284.71 4269.59 4280.33 4273.97 4280.33 4279.37 c
4280.33 4284.77 4284.71 4289.14 4290.11 4289.14 c
4295.51 4289.14 4299.88 4284.77 4299.88 4279.37 c
f
n
4293.37 4330.69 m
4293.37 4325.29 4288.99 4320.91 4283.59 4320.91 c
4278.19 4320.91 4273.82 4325.29 4273.82 4330.69 c
4273.82 4336.09 4278.19 4340.46 4283.59 4340.46 c
4288.99 4340.46 4293.37 4336.09 4293.37 4330.69 c
f
n
4286.85 4382.82 m
4286.85 4377.42 4282.47 4373.05 4277.07 4373.05 c
4271.68 4373.05 4267.3 4377.42 4267.3 4382.82 c
4267.3 4388.22 4271.68 4392.6 4277.07 4392.6 c
4282.47 4392.6 4286.85 4388.22 4286.85 4382.82 c
f
n
4280.33 4434.14 m
4280.33 4428.74 4275.96 4424.36 4270.56 4424.36 c
4265.16 4424.36 4260.78 4428.74 4260.78 4434.14 c
4260.78 4439.54 4265.16 4443.91 4270.56 4443.91 c
4275.96 4443.91 4280.33 4439.54 4280.33 4434.14 c
f
n
4273.82 4486.27 m
4273.82 4480.88 4269.44 4476.5 4264.04 4476.5 c
4258.64 4476.5 4254.27 4480.88 4254.27 4486.27 c
4254.27 4491.67 4258.64 4496.05 4264.04 4496.05 c
4269.44 4496.05 4273.82 4491.67 4273.82 4486.27 c
f
n
4267.3 4537.59 m
4267.3 4532.2 4262.92 4527.82 4257.52 4527.82 c
4252.12 4527.82 4247.75 4532.2 4247.75 4537.59 c
4247.75 4542.99 4252.12 4547.37 4257.52 4547.37 c
4262.92 4547.37 4267.3 4542.99 4267.3 4537.59 c
f
n
4416.37 3761.29 m
4416.37 3755.89 4411.99 3751.51 4406.59 3751.51 c
4401.2 3751.51 4396.82 3755.89 4396.82 3761.29 c
4396.82 3766.69 4401.2 3771.06 4406.59 3771.06 c
4411.99 3771.06 4416.37 3766.69 4416.37 3761.29 c
f
n
4403.34 3813.42 m
4403.34 3808.02 4398.96 3803.64 4393.56 3803.64 c
4388.16 3803.64 4383.79 3808.02 4383.79 3813.42 c
4383.79 3818.82 4388.16 3823.2 4393.56 3823.2 c
4398.96 3823.2 4403.34 3818.82 4403.34 3813.42 c
f
n
4390.3 3864.74 m
4390.3 3859.34 4385.93 3854.96 4380.53 3854.96 c
4375.13 3854.96 4370.75 3859.34 4370.75 3864.74 c
4370.75 3870.14 4375.13 3874.52 4380.53 3874.52 c
4385.93 3874.52 4390.3 3870.14 4390.3 3864.74 c
f
n
4377.27 3916.88 m
4377.27 3911.48 4372.89 3907.1 4367.5 3907.1 c
4362.1 3907.1 4357.72 3911.48 4357.72 3916.88 c
4357.72 3922.27 4362.1 3926.65 4367.5 3926.65 c
4372.89 3926.65 4377.27 3922.27 4377.27 3916.88 c
f
n
4364.23 3968.2 m
4364.23 3962.8 4359.86 3958.42 4354.46 3958.42 c
4349.06 3958.42 4344.69 3962.8 4344.69 3968.2 c
4344.69 3973.59 4349.06 3977.97 4354.46 3977.97 c
4359.86 3977.97 4364.23 3973.59 4364.23 3968.2 c
f
n
4351.2 4020.33 m
4351.2 4014.93 4346.82 4010.55 4341.43 4010.55 c
4336.03 4010.55 4331.65 4014.93 4331.65 4020.33 c
4331.65 4025.73 4336.03 4030.1 4341.43 4030.1 c
4346.82 4030.1 4351.2 4025.73 4351.2 4020.33 c
f
n
4338.17 4072.46 m
4338.17 4067.06 4333.79 4062.69 4328.39 4062.69 c
4323.0 4062.69 4318.62 4067.06 4318.62 4072.46 c
4318.62 4077.86 4323.0 4082.24 4328.39 4082.24 c
4333.79 4082.24 4338.17 4077.86 4338.17 4072.46 c
f
n
4325.14 4123.78 m
4325.14 4118.38 4320.76 4114.0 4315.36 4114.0 c
4309.96 4114.0 4305.59 4118.38 4305.59 4123.78 c
4305.59 4129.18 4309.96 4133.55 4315.36 4133.55 c
4320.76 4133.55 4325.14 4129.18 4325.14 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4299.88 4227.23 m
4299.88 4221.84 4295.51 4217.46 4290.11 4217.46 c
4284.71 4217.46 4280.33 4221.84 4280.33 4227.23 c
4280.33 4232.63 4284.71 4237.01 4290.11 4237.01 c
4295.51 4237.01 4299.88 4232.63 4299.88 4227.23 c
f
n
4286.85 4279.37 m
4286.85 4273.97 4282.47 4269.59 4277.07 4269.59 c
4271.68 4269.59 4267.3 4273.97 4267.3 4279.37 c
4267.3 4284.77 4271.68 4289.14 4277.07 4289.14 c
4282.47 4289.14 4286.85 4284.77 4286.85 4279.37 c
f
n
4273.82 4330.69 m
4273.82 4325.29 4269.44 4320.91 4264.04 4320.91 c
4258.64 4320.91 4254.27 4325.29 4254.27 4330.69 c
4254.27 4336.09 4258.64 4340.46 4264.04 4340.46 c
4269.44 4340.46 4273.82 4336.09 4273.82 4330.69 c
f
n
4260.78 4382.82 m
4260.78 4377.42 4256.41 4373.05 4251.01 4373.05 c
4245.61 4373.05 4241.23 4377.42 4241.23 4382.82 c
4241.23 4388.22 4245.61 4392.6 4251.01 4392.6 c
4256.41 4392.6 4260.78 4388.22 4260.78 4382.82 c
f
n
4247.75 4434.14 m
4247.75 4428.74 4243.37 4424.36 4237.97 4424.36 c
4232.57 4424.36 4228.2 4428.74 4228.2 4434.14 c
4228.2 4439.54 4232.57 4443.91 4237.97 4443.91 c
4243.37 4443.91 4247.75 4439.54 4247.75 4434.14 c
f
n
4234.71 4486.27 m
4234.71 4480.88 4230.34 4476.5 4224.94 4476.5 c
4219.54 4476.5 4215.16 4480.88 4215.16 4486.27 c
4215.16 4491.67 4219.54 4496.05 4224.94 4496.05 c
4230.34 4496.05 4234.71 4491.67 4234.71 4486.27 c
f
n
4221.68 4537.59 m
4221.68 4532.2 4217.3 4527.82 4211.91 4527.82 c
4206.51 4527.82 4202.13 4532.2 4202.13 4537.59 c
4202.13 4542.99 4206.51 4547.37 4211.91 4547.37 c
4217.3 4547.37 4221.68 4542.99 4221.68 4537.59 c
f
n
4467.69 3761.29 m
4467.69 3755.89 4463.31 3751.51 4457.91 3751.51 c
4452.52 3751.51 4448.14 3755.89 4448.14 3761.29 c
4448.14 3766.69 4452.52 3771.06 4457.91 3771.06 c
4463.31 3771.06 4467.69 3766.69 4467.69 3761.29 c
f
n
4448.14 3813.42 m
4448.14 3808.02 4443.76 3803.64 4438.36 3803.64 c
4432.96 3803.64 4428.59 3808.02 4428.59 3813.42 c
4428.59 3818.82 4432.96 3823.2 4438.36 3823.2 c
4443.76 3823.2 4448.14 3818.82 4448.14 3813.42 c
f
n
4428.59 3864.74 m
4428.59 3859.34 4424.21 3854.96 4418.81 3854.96 c
4413.41 3854.96 4409.04 3859.34 4409.04 3864.74 c
4409.04 3870.14 4413.41 3874.52 4418.81 3874.52 c
4424.21 3874.52 4428.59 3870.14 4428.59 3864.74 c
f
n
4409.85 3916.88 m
4409.85 3911.48 4405.48 3907.1 4400.08 3907.1 c
4394.68 3907.1 4390.3 3911.48 4390.3 3916.88 c
4390.3 3922.27 4394.68 3926.65 4400.08 3926.65 c
4405.48 3926.65 4409.85 3922.27 4409.85 3916.88 c
f
n
4390.3 3968.2 m
4390.3 3962.8 4385.93 3958.42 4380.53 3958.42 c
4375.13 3958.42 4370.75 3962.8 4370.75 3968.2 c
4370.75 3973.59 4375.13 3977.97 4380.53 3977.97 c
4385.93 3977.97 4390.3 3973.59 4390.3 3968.2 c
f
n
4370.75 4020.33 m
4370.75 4014.93 4366.38 4010.55 4360.98 4010.55 c
4355.58 4010.55 4351.2 4014.93 4351.2 4020.33 c
4351.2 4025.73 4355.58 4030.1 4360.98 4030.1 c
4366.38 4030.1 4370.75 4025.73 4370.75 4020.33 c
f
n
4351.2 4072.46 m
4351.2 4067.06 4346.82 4062.69 4341.43 4062.69 c
4336.03 4062.69 4331.65 4067.06 4331.65 4072.46 c
4331.65 4077.86 4336.03 4082.24 4341.43 4082.24 c
4346.82 4082.24 4351.2 4077.86 4351.2 4072.46 c
f
n
4331.65 4123.78 m
4331.65 4118.38 4327.28 4114.0 4321.88 4114.0 c
4316.48 4114.0 4312.1 4118.38 4312.1 4123.78 c
4312.1 4129.18 4316.48 4133.55 4321.88 4133.55 c
4327.28 4133.55 4331.65 4129.18 4331.65 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4293.37 4227.23 m
4293.37 4221.84 4288.99 4217.46 4283.59 4217.46 c
4278.19 4217.46 4273.82 4221.84 4273.82 4227.23 c
4273.82 4232.63 4278.19 4237.01 4283.59 4237.01 c
4288.99 4237.01 4293.37 4232.63 4293.37 4227.23 c
f
n
4273.82 4279.37 m
4273.82 4273.97 4269.44 4269.59 4264.04 4269.59 c
4258.64 4269.59 4254.27 4273.97 4254.27 4279.37 c
4254.27 4284.77 4258.64 4289.14 4264.04 4289.14 c
4269.44 4289.14 4273.82 4284.77 4273.82 4279.37 c
f
n
4254.27 4330.69 m
4254.27 4325.29 4249.89 4320.91 4244.49 4320.91 c
4239.09 4320.91 4234.71 4325.29 4234.71 4330.69 c
4234.71 4336.09 4239.09 4340.46 4244.49 4340.46 c
4249.89 4340.46 4254.27 4336.09 4254.27 4330.69 c
f
n
4234.71 4382.82 m
4234.71 4377.42 4230.34 4373.05 4224.94 4373.05 c
4219.54 4373.05 4215.16 4377.42 4215.16 4382.82 c
4215.16 4388.22 4219.54 4392.6 4224.94 4392.6 c
4230.34 4392.6 4234.71 4388.22 4234.71 4382.82 c
f
n
4215.16 4434.14 m
4215.16 4428.74 4210.79 4424.36 4205.39 4424.36 c
4199.99 4424.36 4195.62 4428.74 4195.62 4434.14 c
4195.62 4439.54 4199.99 4443.91 4205.39 4443.91 c
4210.79 4443.91 4215.16 4439.54 4215.16 4434.14 c
f
n
4196.43 4486.27 m
4196.43 4480.88 4192.05 4476.5 4186.66 4476.5 c
4181.26 4476.5 4176.88 4480.88 4176.88 4486.27 c
4176.88 4491.67 4181.26 4496.05 4186.66 4496.05 c
4192.05 4496.05 4196.43 4491.67 4196.43 4486.27 c
f
n
4176.88 4537.59 m
4176.88 4532.2 4172.5 4527.82 4167.11 4527.82 c
4161.71 4527.82 4157.33 4532.2 4157.33 4537.59 c
4157.33 4542.99 4161.71 4547.37 4167.11 4547.37 c
4172.5 4547.37 4176.88 4542.99 4176.88 4537.59 c
f
n
4519.82 3761.29 m
4519.82 3755.89 4515.45 3751.51 4510.05 3751.51 c
4504.65 3751.51 4500.27 3755.89 4500.27 3761.29 c
4500.27 3766.69 4504.65 3771.06 4510.05 3771.06 c
4515.45 3771.06 4519.82 3766.69 4519.82 3761.29 c
f
n
4493.76 3813.42 m
4493.76 3808.02 4489.38 3803.64 4483.98 3803.64 c
4478.58 3803.64 4474.21 3808.02 4474.21 3813.42 c
4474.21 3818.82 4478.58 3823.2 4483.98 3823.2 c
4489.38 3823.2 4493.76 3818.82 4493.76 3813.42 c
f
n
4467.69 3864.74 m
4467.69 3859.34 4463.31 3854.96 4457.91 3854.96 c
4452.52 3854.96 4448.14 3859.34 4448.14 3864.74 c
4448.14 3870.14 4452.52 3874.52 4457.91 3874.52 c
4463.31 3874.52 4467.69 3870.14 4467.69 3864.74 c
f
n
4441.62 3916.88 m
4441.62 3911.48 4437.25 3907.1 4431.85 3907.1 c
4426.45 3907.1 4422.07 3911.48 4422.07 3916.88 c
4422.07 3922.27 4426.45 3926.65 4431.85 3926.65 c
4437.25 3926.65 4441.62 3922.27 4441.62 3916.88 c
f
n
4416.37 3968.2 m
4416.37 3962.8 4411.99 3958.42 4406.59 3958.42 c
4401.2 3958.42 4396.82 3962.8 4396.82 3968.2 c
4396.82 3973.59 4401.2 3977.97 4406.59 3977.97 c
4411.99 3977.97 4416.37 3973.59 4416.37 3968.2 c
f
n
4390.3 4020.33 m
4390.3 4014.93 4385.93 4010.55 4380.53 4010.55 c
4375.13 4010.55 4370.75 4014.93 4370.75 4020.33 c
4370.75 4025.73 4375.13 4030.1 4380.53 4030.1 c
4385.93 4030.1 4390.3 4025.73 4390.3 4020.33 c
f
n
4364.23 4072.46 m
4364.23 4067.06 4359.86 4062.69 4354.46 4062.69 c
4349.06 4062.69 4344.69 4067.06 4344.69 4072.46 c
4344.69 4077.86 4349.06 4082.24 4354.46 4082.24 c
4359.86 4082.24 4364.23 4077.86 4364.23 4072.46 c
f
n
4338.17 4123.78 m
4338.17 4118.38 4333.79 4114.0 4328.39 4114.0 c
4323.0 4114.0 4318.62 4118.38 4318.62 4123.78 c
4318.62 4129.18 4323.0 4133.55 4328.39 4133.55 c
4333.79 4133.55 4338.17 4129.18 4338.17 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4286.85 4227.23 m
4286.85 4221.84 4282.47 4217.46 4277.07 4217.46 c
4271.68 4217.46 4267.3 4221.84 4267.3 4227.23 c
4267.3 4232.63 4271.68 4237.01 4277.07 4237.01 c
4282.47 4237.01 4286.85 4232.63 4286.85 4227.23 c
f
n
4260.78 4279.37 m
4260.78 4273.97 4256.41 4269.59 4251.01 4269.59 c
4245.61 4269.59 4241.23 4273.97 4241.23 4279.37 c
4241.23 4284.77 4245.61 4289.14 4251.01 4289.14 c
4256.41 4289.14 4260.78 4284.77 4260.78 4279.37 c
f
n
4234.71 4330.69 m
4234.71 4325.29 4230.34 4320.91 4224.94 4320.91 c
4219.54 4320.91 4215.16 4325.29 4215.16 4330.69 c
4215.16 4336.09 4219.54 4340.46 4224.94 4340.46 c
4230.34 4340.46 4234.71 4336.09 4234.71 4330.69 c
f
n
4209.46 4382.82 m
4209.46 4377.42 4205.09 4373.05 4199.69 4373.05 c
4194.29 4373.05 4189.91 4377.42 4189.91 4382.82 c
4189.91 4388.22 4194.29 4392.6 4199.69 4392.6 c
4205.09 4392.6 4209.46 4388.22 4209.46 4382.82 c
f
n
4183.4 4434.14 m
4183.4 4428.74 4179.02 4424.36 4173.62 4424.36 c
4168.22 4424.36 4163.85 4428.74 4163.85 4434.14 c
4163.85 4439.54 4168.22 4443.91 4173.62 4443.91 c
4179.02 4443.91 4183.4 4439.54 4183.4 4434.14 c
f
n
4157.33 4486.27 m
4157.33 4480.88 4152.95 4476.5 4147.55 4476.5 c
4142.16 4476.5 4137.78 4480.88 4137.78 4486.27 c
4137.78 4491.67 4142.16 4496.05 4147.55 4496.05 c
4152.95 4496.05 4157.33 4491.67 4157.33 4486.27 c
f
n
4131.26 4537.59 m
4131.26 4532.2 4126.89 4527.82 4121.49 4527.82 c
4116.09 4527.82 4111.71 4532.2 4111.71 4537.59 c
4111.71 4542.99 4116.09 4547.37 4121.49 4547.37 c
4126.89 4547.37 4131.26 4542.99 4131.26 4537.59 c
f
n
4571.14 3761.29 m
4571.14 3755.89 4566.77 3751.51 4561.37 3751.51 c
4555.97 3751.51 4551.59 3755.89 4551.59 3761.29 c
4551.59 3766.69 4555.97 3771.06 4561.37 3771.06 c
4566.77 3771.06 4571.14 3766.69 4571.14 3761.29 c
f
n
4538.56 3813.42 m
4538.56 3808.02 4534.18 3803.64 4528.79 3803.64 c
4523.39 3803.64 4519.01 3808.02 4519.01 3813.42 c
4519.01 3818.82 4523.39 3823.2 4528.79 3823.2 c
4534.18 3823.2 4538.56 3818.82 4538.56 3813.42 c
f
n
4506.79 3864.74 m
4506.79 3859.34 4502.41 3854.96 4497.02 3854.96 c
4491.62 3854.96 4487.24 3859.34 4487.24 3864.74 c
4487.24 3870.14 4491.62 3874.52 4497.02 3874.52 c
4502.41 3874.52 4506.79 3870.14 4506.79 3864.74 c
f
n
4474.21 3916.88 m
4474.21 3911.48 4469.83 3907.1 4464.43 3907.1 c
4459.03 3907.1 4454.66 3911.48 4454.66 3916.88 c
4454.66 3922.27 4459.03 3926.65 4464.43 3926.65 c
4469.83 3926.65 4474.21 3922.27 4474.21 3916.88 c
f
n
4441.62 3968.2 m
4441.62 3962.8 4437.25 3958.42 4431.85 3958.42 c
4426.45 3958.42 4422.07 3962.8 4422.07 3968.2 c
4422.07 3973.59 4426.45 3977.97 4431.85 3977.97 c
4437.25 3977.97 4441.62 3973.59 4441.62 3968.2 c
f
n
4409.85 4020.33 m
4409.85 4014.93 4405.48 4010.55 4400.08 4010.55 c
4394.68 4010.55 4390.3 4014.93 4390.3 4020.33 c
4390.3 4025.73 4394.68 4030.1 4400.08 4030.1 c
4405.48 4030.1 4409.85 4025.73 4409.85 4020.33 c
f
n
4377.27 4072.46 m
4377.27 4067.06 4372.89 4062.69 4367.5 4062.69 c
4362.1 4062.69 4357.72 4067.06 4357.72 4072.46 c
4357.72 4077.86 4362.1 4082.24 4367.5 4082.24 c
4372.89 4082.24 4377.27 4077.86 4377.27 4072.46 c
f
n
4344.69 4123.78 m
4344.69 4118.38 4340.31 4114.0 4334.91 4114.0 c
4329.51 4114.0 4325.14 4118.38 4325.14 4123.78 c
4325.14 4129.18 4329.51 4133.55 4334.91 4133.55 c
4340.31 4133.55 4344.69 4129.18 4344.69 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4280.33 4227.23 m
4280.33 4221.84 4275.96 4217.46 4270.56 4217.46 c
4265.16 4217.46 4260.78 4221.84 4260.78 4227.23 c
4260.78 4232.63 4265.16 4237.01 4270.56 4237.01 c
4275.96 4237.01 4280.33 4232.63 4280.33 4227.23 c
f
n
4247.75 4279.37 m
4247.75 4273.97 4243.37 4269.59 4237.97 4269.59 c
4232.57 4269.59 4228.2 4273.97 4228.2 4279.37 c
4228.2 4284.77 4232.57 4289.14 4237.97 4289.14 c
4243.37 4289.14 4247.75 4284.77 4247.75 4279.37 c
f
n
4215.16 4330.69 m
4215.16 4325.29 4210.79 4320.91 4205.39 4320.91 c
4199.99 4320.91 4195.62 4325.29 4195.62 4330.69 c
4195.62 4336.09 4199.99 4340.46 4205.39 4340.46 c
4210.79 4340.46 4215.16 4336.09 4215.16 4330.69 c
f
n
4183.4 4382.82 m
4183.4 4377.42 4179.02 4373.05 4173.62 4373.05 c
4168.22 4373.05 4163.85 4377.42 4163.85 4382.82 c
4163.85 4388.22 4168.22 4392.6 4173.62 4392.6 c
4179.02 4392.6 4183.4 4388.22 4183.4 4382.82 c
f
n
4150.81 4434.14 m
4150.81 4428.74 4146.44 4424.36 4141.04 4424.36 c
4135.64 4424.36 4131.26 4428.74 4131.26 4434.14 c
4131.26 4439.54 4135.64 4443.91 4141.04 4443.91 c
4146.44 4443.91 4150.81 4439.54 4150.81 4434.14 c
f
n
4118.23 4486.27 m
4118.23 4480.88 4113.85 4476.5 4108.45 4476.5 c
4103.05 4476.5 4098.68 4480.88 4098.68 4486.27 c
4098.68 4491.67 4103.05 4496.05 4108.45 4496.05 c
4113.85 4496.05 4118.23 4491.67 4118.23 4486.27 c
f
n
4086.46 4537.59 m
4086.46 4532.2 4082.08 4527.82 4076.68 4527.82 c
4071.29 4527.82 4066.91 4532.2 4066.91 4537.59 c
4066.91 4542.99 4071.29 4547.37 4076.68 4547.37 c
4082.08 4547.37 4086.46 4542.99 4086.46 4537.59 c
f
n
4623.28 3761.29 m
4623.28 3755.89 4618.9 3751.51 4613.5 3751.51 c
4608.1 3751.51 4603.73 3755.89 4603.73 3761.29 c
4603.73 3766.69 4608.1 3771.06 4613.5 3771.06 c
4618.9 3771.06 4623.28 3766.69 4623.28 3761.29 c
f
n
4584.18 3813.42 m
4584.18 3808.02 4579.8 3803.64 4574.4 3803.64 c
4569.0 3803.64 4564.62 3808.02 4564.62 3813.42 c
4564.62 3818.82 4569.0 3823.2 4574.4 3823.2 c
4579.8 3823.2 4584.18 3818.82 4584.18 3813.42 c
f
n
4545.07 3864.74 m
4545.07 3859.34 4540.7 3854.96 4535.3 3854.96 c
4529.9 3854.96 4525.52 3859.34 4525.52 3864.74 c
4525.52 3870.14 4529.9 3874.52 4535.3 3874.52 c
4540.7 3874.52 4545.07 3870.14 4545.07 3864.74 c
f
n
4506.79 3916.88 m
4506.79 3911.48 4502.41 3907.1 4497.02 3907.1 c
4491.62 3907.1 4487.24 3911.48 4487.24 3916.88 c
4487.24 3922.27 4491.62 3926.65 4497.02 3926.65 c
4502.41 3926.65 4506.79 3922.27 4506.79 3916.88 c
f
n
4467.69 3968.2 m
4467.69 3962.8 4463.31 3958.42 4457.91 3958.42 c
4452.52 3958.42 4448.14 3962.8 4448.14 3968.2 c
4448.14 3973.59 4452.52 3977.97 4457.91 3977.97 c
4463.31 3977.97 4467.69 3973.59 4467.69 3968.2 c
f
n
4428.59 4020.33 m
4428.59 4014.93 4424.21 4010.55 4418.81 4010.55 c
4413.41 4010.55 4409.04 4014.93 4409.04 4020.33 c
4409.04 4025.73 4413.41 4030.1 4418.81 4030.1 c
4424.21 4030.1 4428.59 4025.73 4428.59 4020.33 c
f
n
4390.3 4072.46 m
4390.3 4067.06 4385.93 4062.69 4380.53 4062.69 c
4375.13 4062.69 4370.75 4067.06 4370.75 4072.46 c
4370.75 4077.86 4375.13 4082.24 4380.53 4082.24 c
4385.93 4082.24 4390.3 4077.86 4390.3 4072.46 c
f
n
4351.2 4123.78 m
4351.2 4118.38 4346.82 4114.0 4341.43 4114.0 c
4336.03 4114.0 4331.65 4118.38 4331.65 4123.78 c
4331.65 4129.18 4336.03 4133.55 4341.43 4133.55 c
4346.82 4133.55 4351.2 4129.18 4351.2 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4273.82 4227.23 m
4273.82 4221.84 4269.44 4217.46 4264.04 4217.46 c
4258.64 4217.46 4254.27 4221.84 4254.27 4227.23 c
4254.27 4232.63 4258.64 4237.01 4264.04 4237.01 c
4269.44 4237.01 4273.82 4232.63 4273.82 4227.23 c
f
n
4234.71 4279.37 m
4234.71 4273.97 4230.34 4269.59 4224.94 4269.59 c
4219.54 4269.59 4215.16 4273.97 4215.16 4279.37 c
4215.16 4284.77 4219.54 4289.14 4224.94 4289.14 c
4230.34 4289.14 4234.71 4284.77 4234.71 4279.37 c
f
n
4196.43 4330.69 m
4196.43 4325.29 4192.05 4320.91 4186.66 4320.91 c
4181.26 4320.91 4176.88 4325.29 4176.88 4330.69 c
4176.88 4336.09 4181.26 4340.46 4186.66 4340.46 c
4192.05 4340.46 4196.43 4336.09 4196.43 4330.69 c
f
n
4157.33 4382.82 m
4157.33 4377.42 4152.95 4373.05 4147.55 4373.05 c
4142.16 4373.05 4137.78 4377.42 4137.78 4382.82 c
4137.78 4388.22 4142.16 4392.6 4147.55 4392.6 c
4152.95 4392.6 4157.33 4388.22 4157.33 4382.82 c
f
n
4118.23 4434.14 m
4118.23 4428.74 4113.85 4424.36 4108.45 4424.36 c
4103.05 4424.36 4098.68 4428.74 4098.68 4434.14 c
4098.68 4439.54 4103.05 4443.91 4108.45 4443.91 c
4113.85 4443.91 4118.23 4439.54 4118.23 4434.14 c
f
n
4079.95 4486.27 m
4079.95 4480.88 4075.57 4476.5 4070.17 4476.5 c
4064.77 4476.5 4060.39 4480.88 4060.39 4486.27 c
4060.39 4491.67 4064.77 4496.05 4070.17 4496.05 c
4075.57 4496.05 4079.95 4491.67 4079.95 4486.27 c
f
n
4040.84 4537.59 m
4040.84 4532.2 4036.46 4527.82 4031.07 4527.82 c
4025.67 4527.82 4021.29 4532.2 4021.29 4537.59 c
4021.29 4542.99 4025.67 4547.37 4031.07 4547.37 c
4036.46 4547.37 4040.84 4542.99 4040.84 4537.59 c
f
n
4674.59 3761.29 m
4674.59 3755.89 4670.22 3751.51 4664.82 3751.51 c
4659.42 3751.51 4655.05 3755.89 4655.05 3761.29 c
4655.05 3766.69 4659.42 3771.06 4664.82 3771.06 c
4670.22 3771.06 4674.59 3766.69 4674.59 3761.29 c
f
n
4628.98 3813.42 m
4628.98 3808.02 4624.6 3803.64 4619.2 3803.64 c
4613.8 3803.64 4609.43 3808.02 4609.43 3813.42 c
4609.43 3818.82 4613.8 3823.2 4619.2 3823.2 c
4624.6 3823.2 4628.98 3818.82 4628.98 3813.42 c
f
n
4584.18 3864.74 m
4584.18 3859.34 4579.8 3854.96 4574.4 3854.96 c
4569.0 3854.96 4564.62 3859.34 4564.62 3864.74 c
4564.62 3870.14 4569.0 3874.52 4574.4 3874.52 c
4579.8 3874.52 4584.18 3870.14 4584.18 3864.74 c
f
n
4538.56 3916.88 m
4538.56 3911.48 4534.18 3907.1 4528.79 3907.1 c
4523.39 3907.1 4519.01 3911.48 4519.01 3916.88 c
4519.01 3922.27 4523.39 3926.65 4528.79 3926.65 c
4534.18 3926.65 4538.56 3922.27 4538.56 3916.88 c
f
n
4493.76 3968.2 m
4493.76 3962.8 4489.38 3958.42 4483.98 3958.42 c
4478.58 3958.42 4474.21 3962.8 4474.21 3968.2 c
4474.21 3973.59 4478.58 3977.97 4483.98 3977.97 c
4489.38 3977.97 4493.76 3973.59 4493.76 3968.2 c
f
n
4448.14 4020.33 m
4448.14 4014.93 4443.76 4010.55 4438.36 4010.55 c
4432.96 4010.55 4428.59 4014.93 4428.59 4020.33 c
4428.59 4025.73 4432.96 4030.1 4438.36 4030.1 c
4443.76 4030.1 4448.14 4025.73 4448.14 4020.33 c
f
n
4403.34 4072.46 m
4403.34 4067.06 4398.96 4062.69 4393.56 4062.69 c
4388.16 4062.69 4383.79 4067.06 4383.79 4072.46 c
4383.79 4077.86 4388.16 4082.24 4393.56 4082.24 c
4398.96 4082.24 4403.34 4077.86 4403.34 4072.46 c
f
n
4357.72 4123.78 m
4357.72 4118.38 4353.34 4114.0 4347.95 4114.0 c
4342.55 4114.0 4338.17 4118.38 4338.17 4123.78 c
4338.17 4129.18 4342.55 4133.55 4347.95 4133.55 c
4353.34 4133.55 4357.72 4129.18 4357.72 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4267.3 4227.23 m
4267.3 4221.84 4262.92 4217.46 4257.52 4217.46 c
4252.12 4217.46 4247.75 4221.84 4247.75 4227.23 c
4247.75 4232.63 4252.12 4237.01 4257.52 4237.01 c
4262.92 4237.01 4267.3 4232.63 4267.3 4227.23 c
f
n
4221.68 4279.37 m
4221.68 4273.97 4217.3 4269.59 4211.91 4269.59 c
4206.51 4269.59 4202.13 4273.97 4202.13 4279.37 c
4202.13 4284.77 4206.51 4289.14 4211.91 4289.14 c
4217.3 4289.14 4221.68 4284.77 4221.68 4279.37 c
f
n
4176.88 4330.69 m
4176.88 4325.29 4172.5 4320.91 4167.11 4320.91 c
4161.71 4320.91 4157.33 4325.29 4157.33 4330.69 c
4157.33 4336.09 4161.71 4340.46 4167.11 4340.46 c
4172.5 4340.46 4176.88 4336.09 4176.88 4330.69 c
f
n
4131.26 4382.82 m
4131.26 4377.42 4126.89 4373.05 4121.49 4373.05 c
4116.09 4373.05 4111.71 4377.42 4111.71 4382.82 c
4111.71 4388.22 4116.09 4392.6 4121.49 4392.6 c
4126.89 4392.6 4131.26 4388.22 4131.26 4382.82 c
f
n
4086.46 4434.14 m
4086.46 4428.74 4082.08 4424.36 4076.68 4424.36 c
4071.29 4424.36 4066.91 4428.74 4066.91 4434.14 c
4066.91 4439.54 4071.29 4443.91 4076.68 4443.91 c
4082.08 4443.91 4086.46 4439.54 4086.46 4434.14 c
f
n
4040.84 4486.27 m
4040.84 4480.88 4036.46 4476.5 4031.07 4476.5 c
4025.67 4476.5 4021.29 4480.88 4021.29 4486.27 c
4021.29 4491.67 4025.67 4496.05 4031.07 4496.05 c
4036.46 4496.05 4040.84 4491.67 4040.84 4486.27 c
f
n
3996.04 4537.59 m
3996.04 4532.2 3991.66 4527.82 3986.27 4527.82 c
3980.87 4527.82 3976.49 4532.2 3976.49 4537.59 c
3976.49 4542.99 3980.87 4547.37 3986.27 4547.37 c
3991.66 4547.37 3996.04 4542.99 3996.04 4537.59 c
f
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 2750.54 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: UUPBAA+CMSY10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /UUPBAA+CMSY10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-0 -960 943 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705] def
/OtherBlues [-124 -119] def
/BlueScale 0.04379 def
/StdHW [40] def
/StdVW [85] def
/StemSnapH [40 55] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9C4A637> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 0 /minus/periodcentered/multiply/asteriskmath 12 /circledot 15 /bullet
 20 /lessequal/greaterequal 24 /similar/approxequal 28 /lessmuch 32 /space
/arrowright/quotedbl/numbersign/dollar/percent/ampersand
/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/element
/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D
/E/F/G/H/I/J
/K/L/M/N/O/P
/Q/R/S/T/U/V
/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/grave/a/b
/c/d/e/braceleft/braceright/angbracketleft
/angbracketright/bar/bardbl/l/m/backslash
/o/radical/q/r/s/t
/u/v/w/x/dagger/daggerdbl
/braceleft/bar/braceright/asciitilde/bullet/Euro
/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright
/quotedblleft/quotedblright/bullet/endash/emdash/tilde
/trademark/scaron/guilsinglright/oe/bullet/zcaron
/Ydieresis/space/exclamdown/cent/sterling/currency
/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex
/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave
/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex
/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute
/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn
/ydieresis
/N33 (UUPBAA+CMSY10) -1 TZ
377.062 364.327 m
%ADOBeginSubsetFont: UUPBAA+CMSY10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/UUPBAA+CMSY10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB432204C2EF
9CAB07AB654895DD8804EF7ED97DE3E2616CBB2FB21BE3D9> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/UUPBAA+CMSY10 findfont /Encoding get
dup 0 /minus put
pop
end
+%ADOEndSubsetFont
+/N33 10.6637 Tf
(\000) show
385.391 364.327 m
%ADOBeginSubsetFont: QZEBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/QZEBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/QZEBAA+CMR10 findfont /Encoding get
dup 48 /zero put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(0) show
%ADOBeginSubsetFont: ARHAAA+CMMI10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /ARHAAA+CMMI10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-13 -250 1044 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 442 453 466] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [72] def
/StemSnapH [25 31] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /alpha/beta 14 /delta 21 /lambda
/mu 24 /xi/pi 27 /sigma 30 /phi/chi
/psi/exclam/epsilon/theta1/dollar/percent
/ampersand/phi1/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/period/comma/less/slash
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/braceleft/bar/braceright/asciitilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N21 (ARHAAA+CMMI10) -1 TZ
390.669 364.327 m
%ADOBeginSubsetFont: ARHAAA+CMMI10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/ARHAAA+CMMI10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/period <1C60D8A8C9B08A9570810981675968F2C907C696DFE9BE69433F613
9DF6C45B8165ACC43B6E0B309859F778ABCF0> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/ARHAAA+CMMI10 findfont /Encoding get
dup 58 /period put
pop
end
+%ADOEndSubsetFont
+/N21 10.6637 Tf
(:) show
393.602 364.327 m
/N41 10.6637 Tf
(500)
[33.9455 37.2557 5.27853 ] pdfxs
470.082 364.327 m
/N21 10.6637 Tf
(:) show
473.014 364.327 m
/N41 10.6637 Tf
(5) show
362.138 372.965 m
/N33 10.6637 Tf
(\000) show
370.467 372.965 m
/N41 10.6637 Tf
(0) show
375.745 372.965 m
/N21 10.6637 Tf
(:) show
378.678 372.965 m
/N41 10.6637 Tf
(5) show
380.417 413.959 m
(0) show
371.933 455.34 m
(0) show
377.211 455.34 m
/N21 10.6637 Tf
(:) show
380.144 455.34 m
/N41 10.6637 Tf
(5) show
Q
Q
Q
/ARHAAA+CMMI10 /Font _pdfUndefineResource
/N21 /Font _pdfUndefineResource
/UUPBAA+CMSY10 /Font _pdfUndefineResource
/N33 /Font _pdfUndefineResource
/QZEBAA+CMR10 /Font _pdfUndefineResource
/N41 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/tutorial/images/linogram_grid.pdf b/doc/tutorial/images/linogram_grid.pdf
new file mode 100644
index 0000000..fa4ba3e
Binary files /dev/null and b/doc/tutorial/images/linogram_grid.pdf differ
diff --git a/doc/tutorial/images/modified_polar_grid.eps b/doc/tutorial/images/modified_polar_grid.eps
new file mode 100644
index 0000000..a28ea5f
--- /dev/null
+++ b/doc/tutorial/images/modified_polar_grid.eps
@@ -0,0 +1,87 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (paper.dvi)
%%Version: 1 3
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 20/10/06 15:23
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 237 364 352 463
%%HiResBoundingBox: 237.407 364.169 352.491 462.502
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+

%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put     
ct_CffDict begin                    
/F0Subr     
{
    systemdict /internaldict known 
   {
      1183615869 systemdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } 
   {
      userdict /internaldict known not 
        { 
          userdict /internaldict 
          {
               count 0 eq 
             {/internaldict errordict /invalidaccess get exec} if 
             dup type /integertype ne 
             {/internaldict errordict /invalidaccess get exec} if 
             dup 1183615869 eq
             {pop 0} 
             {/internaldict errordict /invalidaccess get exec} 
             ifelse 
          } 
          dup 14 get 1 25 dict put 
          bind executeonly put 
       } if 
       1183615869 userdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } ifelse
    [ 
       systemdict /internaldict known not 
       { 100 dict /begin cvx /mtx matrix /def cvx } if 
       systemdict /currentpacking known {currentpacking true setpacking} if 
       { 
          systemdict /internaldict known { 
          1183615869 systemdict /internaldict get exec 
          dup /$FlxDict known not { 
          dup dup length exch maxlength eq 
          { pop userdict dup /$FlxDict known not
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } if } 
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } 
          ifelse 
          } if /$FlxDict get begin } if 
          grestore 
          /exdef {exch def} def 
          /dmin exch abs 100 div def 
          /epX exdef /epY exdef 
          /c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef 
          /c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef 
          /c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def 
          /yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def 
          /PickCoords {  
          {c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2} 
          {c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2} 
          ifelse 
          /y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef 
          /y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef 
          } def 
          mtx currentmatrix pop  
          mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or 
          {/flipXY -1 def} 
          {mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or 
          {/flipXY 1 def} 
          {/flipXY 0 def} 
          ifelse } 
          ifelse 
          /erosion 1 def 
          systemdict /internaldict known { 
           1183615869 systemdict /internaldict get exec dup  
          /erosion known 
          {/erosion get /erosion exch def} 
          {pop} 
          ifelse 
          } if 
          yflag 
          {
              flipXY 0 eq c3y2 c4y2 eq or 
             {false PickCoords}
             {
                  /shrink c3y2 c4y2 eq 
                {0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def 
                /yshrink {c4y2 sub shrink mul c4y2 add} def 
                /c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def 
                /c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def 
                /c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def 
                /dY 0 c3y2 c1y2 sub round 
                dtransform flipXY 1 eq {exch} if pop abs def 
                dY dmin lt PickCoords 
                y2 c1y2 sub abs 0.001 gt {
                   c1x2 c1y2 transform flipXY 1 eq {exch} if  
                   /cx exch def /cy exch def 
                   /dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch} 
                   if pop def 
                   dY round dup 0 ne 
                   {/dY exdef } 
                   {pop dY 0 lt {-1}{1} ifelse /dY exdef} 
                   ifelse 
                   /erode PaintType 2 ne erosion 0.5 ge and def  
                   erode {/cy cy 0.5 sub def} if 
                   /ey cy dY add def   
                   /ey ey ceiling ey sub ey floor add def   
                   erode {/ey ey 0.5 add def} if   
                   ey cx flipXY 1 eq {exch} if itransform exch pop  
                   y2 sub /eShift exch def  
                   /y1 y1 eShift add def /y2 y2 eShift add def /y3 y3  
                   eShift add def  
                } if  
             } ifelse  
          } 
          {
              flipXY 0 eq c3x2 c4x2 eq or  
             {false PickCoords }  
             { /shrink c3x2 c4x2 eq  
                {0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def  
                /xshrink {c4x2 sub shrink mul c4x2 add} def  
                /c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def  
                /c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def  
                /c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def  
                /dX c3x2 c1x2 sub round 0 dtransform  
                flipXY -1 eq {exch} if pop abs def 
                dX dmin lt PickCoords  
                x2 c1x2 sub abs 0.001 gt {  
                   c1x2 c1y2 transform flipXY -1 eq {exch} if  
                   /cy exch def /cx exch def   
                   /dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def  
                   dX round dup 0 ne  
                   {/dX exdef}  
                   {pop dX 0 lt {-1}{1} ifelse /dX exdef}  
                   ifelse  
                   /erode PaintType 2 ne erosion .5 ge and def 
                   erode {/cx cx .5 sub def} if  
                   /ex cx dX add def  
                   /ex ex ceiling ex sub ex floor add def  
                   erode {/ex ex .5 add def} if  
                   ex cy flipXY -1 eq {exch} if itransform pop  
                   x2 sub /eShift exch def  
                   /x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def  
                } if  
             } ifelse  
          } ifelse 
          x2 x5 eq y2 y5 eq or  
          {x5 y5 lineto }  
          {x0 y0 x1 y1 x2 y2 curveto  
          x3 y3 x4 y4 x5 y5 curveto}  
          ifelse  
          epY epX   
       }  
       systemdict /currentpacking known {exch setpacking} if   
       /exec cvx /end cvx 
    ] cvx  
    executeonly 
    exch  
    {pop true exch restore}   
    {   
       systemdict /internaldict known not  
       {1183615869 userdict /internaldict get exec  
       exch /FlxProc exch put true}  
       {1183615869 systemdict /internaldict get exec  
       dup length exch maxlength eq  
       {false}   
       {1183615869 systemdict /internaldict get exec 
       exch /FlxProc exch put true}  
       ifelse}  
       ifelse
    } ifelse  
    {
       systemdict /internaldict known  
       {1183615869 systemdict /internaldict get exec /FlxProc get exec}  
       {1183615869 userdict /internaldict get exec /FlxProc get exec}  
       ifelse   
    } if  
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def 
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind  def
/HSSubr 
{
   systemdict /internaldict known not
   {pop 3}
   {1183615869 systemdict /internaldict get exec
    dup /startlock known
    {/startlock get exec}
    {dup /strtlck known
    {/strtlck get exec}
    {pop 3}
    ifelse}
    ifelse}
    ifelse
} bind def
end                                 
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave 
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec

[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3537 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xap="http://ns.adobe.com/xap/1.0/">
+         <xap:CreateDate>2006-10-20T15:23:31+02:00</xap:CreateDate>
+         <xap:ModifyDate>2006-10-20T15:23:31+02:00</xap:ModifyDate>
+         <xap:MetadataDate>2006-10-20T15:23:31+02:00</xap:MetadataDate>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+         <xapMM:DocumentID>uuid:34DD0B9361E111DBB7AD8EFAF1591643</xapMM:DocumentID>
+         <xapMM:InstanceID>uuid:34DD0B9361E111DBB7AD8EFAF1591643</xapMM:InstanceID>
+         <xapMM:DerivedFrom rdf:parseType="Resource">
+            <stRef:instanceID>uuid:f3014e74-603d-11db-9b35-000a95cd9010</stRef:instanceID>
+            <stRef:documentID>uuid:1ed1776c-603c-11db-9960-000a95cd9010</stRef:documentID>
+         </xapMM:DerivedFrom>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:title>
+            <rdf:Alt>
+               <rdf:li xml:lang="x-default">paper.dvi</rdf:li>
+            </rdf:Alt>
+         </dc:title>
+         <dc:format>application/eps</dc:format>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end="w"?>

% &end XMP packet& %

[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5

PDFVars/TermAll get exec end end
 PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
237.407 364.169 115.084 98.333 rectclip
q
237.407 364.169 m
352.491 364.169 l
352.491 462.502 l
237.407 462.502 l
h
W
n
q
0.1 0.0 0.0 0.1 0.0 0.0 cm
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
1195.62 4688.31 m
2327.9 4688.31 l
2327.9 3620.38 l
1195.62 3620.38 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
1321.07 4649.21 m
2217.12 4649.21 l
2217.12 3703.47 l
1321.07 3703.47 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 243.734 4059.78 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: UPIBAA+CMR10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /UPIBAA+CMR10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-40 -250 1009 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 448 666 677] def
/OtherBlues [-206 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [69] def
/StemSnapH [22 31] def
/StemSnapV [69 89] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /ff/fi/fl/ffi
 32 /space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/circumflex/underscore/quoteleft/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/endash/bar/braceright/tilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N41 (UPIBAA+CMR10) -1 TZ
222.215 364.328 m
%ADOBeginSubsetFont: UPIBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/UPIBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
A> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/UPIBAA+CMR10 findfont /Encoding get
dup 53 /five put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(5) show
Q
q
n
2449.61 4685.86 m
3581.89 4685.86 l
3581.89 3620.37 l
2449.61 3620.37 l
h
W
n
n
[/DeviceGray] cs 1.0 sc
2449.610107 3620.370117 1132.280029 1046.750000 rectfill
+
n
2634.520020 3761.300049 828.437988 828.438232 rectfill
+
4.88755 w
1 j
n
2634.52 3761.3 828.438 828.438 re
S
[4.88755 39.1004 ] 0.0 d
3.25837 w
n
2634.52 3761.3 m
2634.52 4589.73 l
0.0 sc
S
n
2634.52 4589.73 m
2634.52 4589.73 l
S
n
2737.98 3761.3 m
2737.98 4589.73 l
S
n
2737.98 4589.73 m
2737.98 4589.73 l
S
n
2842.24 3761.3 m
2842.24 4589.73 l
S
n
2842.24 4589.73 m
2842.24 4589.73 l
S
n
2945.7 3761.3 m
2945.7 4589.73 l
S
n
2945.7 4589.73 m
2945.7 4589.73 l
S
n
3049.15 3761.3 m
3049.15 4589.73 l
S
n
3049.15 4589.73 m
3049.15 4589.73 l
S
n
3152.6 3761.3 m
3152.6 4589.73 l
S
n
3152.6 4589.73 m
3152.6 4589.73 l
S
n
3256.05 3761.3 m
3256.05 4589.73 l
S
n
3256.05 4589.73 m
3256.05 4589.73 l
S
n
3359.51 3761.3 m
3359.51 4589.73 l
S
n
3359.51 4589.73 m
3359.51 4589.73 l
S
n
3462.96 3761.3 m
3462.96 4589.73 l
S
n
3462.96 4589.73 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
3462.96 3761.3 m
3462.96 3761.3 l
S
n
2634.52 3864.75 m
3462.96 3864.75 l
S
n
3462.96 3864.75 m
3462.96 3864.75 l
S
n
2634.52 3968.2 m
3462.96 3968.2 l
S
n
3462.96 3968.2 m
3462.96 3968.2 l
S
n
2634.52 4072.47 m
3462.96 4072.47 l
S
n
3462.96 4072.47 m
3462.96 4072.47 l
S
n
2634.52 4175.92 m
3462.96 4175.92 l
S
n
3462.96 4175.92 m
3462.96 4175.92 l
S
n
2634.52 4279.38 m
3462.96 4279.38 l
S
n
3462.96 4279.38 m
3462.96 4279.38 l
S
n
2634.52 4382.83 m
3462.96 4382.83 l
S
n
3462.96 4382.83 m
3462.96 4382.83 l
S
n
2634.52 4486.28 m
3462.96 4486.28 l
S
n
3462.96 4486.28 m
3462.96 4486.28 l
S
n
2634.52 4589.73 m
3462.96 4589.73 l
S
n
3462.96 4589.73 m
3462.96 4589.73 l
S
[] 0.0 d
4.88755 w
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
2634.52 4589.73 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
2634.52 4589.73 l
S
n
3462.96 3761.3 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
2634.52 3761.3 m
2634.52 4589.73 l
S
n
2634.52 3761.3 m
2634.52 3770.25 l
S
n
2634.52 4589.73 m
2634.52 4580.77 l
S
n
2737.98 3761.3 m
2737.98 3770.25 l
S
n
2737.98 4589.73 m
2737.98 4580.77 l
S
n
2842.24 3761.3 m
2842.24 3770.25 l
S
n
2842.24 4589.73 m
2842.24 4580.77 l
S
n
2945.7 3761.3 m
2945.7 3770.25 l
S
n
2945.7 4589.73 m
2945.7 4580.77 l
S
n
3049.15 3761.3 m
3049.15 3770.25 l
S
n
3049.15 4589.73 m
3049.15 4580.77 l
S
n
3152.6 3761.3 m
3152.6 3770.25 l
S
n
3152.6 4589.73 m
3152.6 4580.77 l
S
n
3256.05 3761.3 m
3256.05 3770.25 l
S
n
3256.05 4589.73 m
3256.05 4580.77 l
S
n
3359.51 3761.3 m
3359.51 3770.25 l
S
n
3359.51 4589.73 m
3359.51 4580.77 l
S
n
3462.96 3761.3 m
3462.96 3770.25 l
S
n
3462.96 4589.73 m
3462.96 4580.77 l
S
n
2634.52 3761.3 m
2643.48 3761.3 l
S
n
3462.96 3761.3 m
3454.0 3761.3 l
S
n
2634.52 3864.75 m
2643.48 3864.75 l
S
n
3462.96 3864.75 m
3454.0 3864.75 l
S
n
2634.52 3968.2 m
2643.48 3968.2 l
S
n
3462.96 3968.2 m
3454.0 3968.2 l
S
n
2634.52 4072.47 m
2643.48 4072.47 l
S
n
3462.96 4072.47 m
3454.0 4072.47 l
S
n
2634.52 4175.92 m
2643.48 4175.92 l
S
n
3462.96 4175.92 m
3454.0 4175.92 l
S
n
2634.52 4279.38 m
2643.48 4279.38 l
S
n
3462.96 4279.38 m
3454.0 4279.38 l
S
n
2634.52 4382.83 m
2643.48 4382.83 l
S
n
3462.96 4382.83 m
3454.0 4382.83 l
S
n
2634.52 4486.28 m
2643.48 4486.28 l
S
n
3462.96 4486.28 m
3454.0 4486.28 l
S
n
2634.52 4589.73 m
2643.48 4589.73 l
S
n
3462.96 4589.73 m
3454.0 4589.73 l
S
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
2634.52 4589.73 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
2634.52 4589.73 l
S
n
3462.96 3761.3 m
3462.96 4589.73 l
S
Q
q
n
2575.06 4646.76 m
3520.8 4646.76 l
3520.8 3701.02 l
2575.06 3701.02 l
h
W
n
n
3058.93 4537.6 m
3058.93 4532.2 3054.55 4527.82 3049.15 4527.82 c
3043.75 4527.82 3039.38 4532.2 3039.38 4537.6 c
3039.38 4543.0 3043.75 4547.38 3049.15 4547.38 c
3054.55 4547.38 3058.93 4543.0 3058.93 4537.6 c
[/DeviceRGB] cs 0.0 0.0 1.0 sc
f
n
3058.93 4486.28 m
3058.93 4480.88 3054.55 4476.51 3049.15 4476.51 c
3043.75 4476.51 3039.38 4480.88 3039.38 4486.28 c
3039.38 4491.68 3043.75 4496.06 3049.15 4496.06 c
3054.55 4496.06 3058.93 4491.68 3058.93 4486.28 c
f
n
3058.93 4434.15 m
3058.93 4428.75 3054.55 4424.37 3049.15 4424.37 c
3043.75 4424.37 3039.38 4428.75 3039.38 4434.15 c
3039.38 4439.55 3043.75 4443.92 3049.15 4443.92 c
3054.55 4443.92 3058.93 4439.55 3058.93 4434.15 c
f
n
3058.93 4382.83 m
3058.93 4377.43 3054.55 4373.05 3049.15 4373.05 c
3043.75 4373.05 3039.38 4377.43 3039.38 4382.83 c
3039.38 4388.23 3043.75 4392.61 3049.15 4392.61 c
3054.55 4392.61 3058.93 4388.23 3058.93 4382.83 c
f
n
3058.93 4330.7 m
3058.93 4325.3 3054.55 4320.92 3049.15 4320.92 c
3043.75 4320.92 3039.38 4325.3 3039.38 4330.7 c
3039.38 4336.09 3043.75 4340.47 3049.15 4340.47 c
3054.55 4340.47 3058.93 4336.09 3058.93 4330.7 c
f
n
3058.93 4279.38 m
3058.93 4273.98 3054.55 4269.6 3049.15 4269.6 c
3043.75 4269.6 3039.38 4273.98 3039.38 4279.38 c
3039.38 4284.77 3043.75 4289.15 3049.15 4289.15 c
3054.55 4289.15 3058.93 4284.77 3058.93 4279.38 c
f
n
3058.93 4227.24 m
3058.93 4221.84 3054.55 4217.46 3049.15 4217.46 c
3043.75 4217.46 3039.38 4221.84 3039.38 4227.24 c
3039.38 4232.64 3043.75 4237.02 3049.15 4237.02 c
3054.55 4237.02 3058.93 4232.64 3058.93 4227.24 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3058.93 4123.79 m
3058.93 4118.39 3054.55 4114.01 3049.15 4114.01 c
3043.75 4114.01 3039.38 4118.39 3039.38 4123.79 c
3039.38 4129.19 3043.75 4133.56 3049.15 4133.56 c
3054.55 4133.56 3058.93 4129.19 3058.93 4123.79 c
f
n
3058.93 4072.47 m
3058.93 4067.07 3054.55 4062.7 3049.15 4062.7 c
3043.75 4062.7 3039.38 4067.07 3039.38 4072.47 c
3039.38 4077.87 3043.75 4082.25 3049.15 4082.25 c
3054.55 4082.25 3058.93 4077.87 3058.93 4072.47 c
f
n
3058.93 4020.34 m
3058.93 4014.94 3054.55 4010.56 3049.15 4010.56 c
3043.75 4010.56 3039.38 4014.94 3039.38 4020.34 c
3039.38 4025.73 3043.75 4030.11 3049.15 4030.11 c
3054.55 4030.11 3058.93 4025.73 3058.93 4020.34 c
f
n
3058.93 3968.2 m
3058.93 3962.8 3054.55 3958.43 3049.15 3958.43 c
3043.75 3958.43 3039.38 3962.8 3039.38 3968.2 c
3039.38 3973.6 3043.75 3977.98 3049.15 3977.98 c
3054.55 3977.98 3058.93 3973.6 3058.93 3968.2 c
f
n
3058.93 3916.88 m
3058.93 3911.48 3054.55 3907.11 3049.15 3907.11 c
3043.75 3907.11 3039.38 3911.48 3039.38 3916.88 c
3039.38 3922.28 3043.75 3926.66 3049.15 3926.66 c
3054.55 3926.66 3058.93 3922.28 3058.93 3916.88 c
f
n
3058.93 3864.75 m
3058.93 3859.35 3054.55 3854.97 3049.15 3854.97 c
3043.75 3854.97 3039.38 3859.35 3039.38 3864.75 c
3039.38 3870.15 3043.75 3874.52 3049.15 3874.52 c
3054.55 3874.52 3058.93 3870.15 3058.93 3864.75 c
f
n
3058.93 3813.43 m
3058.93 3808.03 3054.55 3803.65 3049.15 3803.65 c
3043.75 3803.65 3039.38 3808.03 3039.38 3813.43 c
3039.38 3818.83 3043.75 3823.2 3049.15 3823.2 c
3054.55 3823.2 3058.93 3818.83 3058.93 3813.43 c
f
n
3058.93 3761.3 m
3058.93 3755.9 3054.55 3751.52 3049.15 3751.52 c
3043.75 3751.52 3039.38 3755.9 3039.38 3761.3 c
3039.38 3766.7 3043.75 3771.07 3049.15 3771.07 c
3054.55 3771.07 3058.93 3766.7 3058.93 3761.3 c
f
n
3018.2 4587.29 m
3018.2 4581.89 3013.82 4577.52 3008.42 4577.52 c
3003.02 4577.52 2998.64 4581.89 2998.64 4587.29 c
2998.64 4592.69 3003.02 4597.07 3008.42 4597.07 c
3013.82 4597.07 3018.2 4592.69 3018.2 4587.29 c
f
n
3023.08 4535.97 m
3023.08 4530.57 3018.71 4526.2 3013.31 4526.2 c
3007.91 4526.2 3003.53 4530.57 3003.53 4535.97 c
3003.53 4541.37 3007.91 4545.75 3013.31 4545.75 c
3018.71 4545.75 3023.08 4541.37 3023.08 4535.97 c
f
n
3027.97 4484.65 m
3027.97 4479.25 3023.59 4474.88 3018.2 4474.88 c
3012.8 4474.88 3008.42 4479.25 3008.42 4484.65 c
3008.42 4490.05 3012.8 4494.43 3018.2 4494.43 c
3023.59 4494.43 3027.97 4490.05 3027.97 4484.65 c
f
n
3032.86 4432.52 m
3032.86 4427.12 3028.48 4422.74 3023.08 4422.74 c
3017.68 4422.74 3013.31 4427.12 3013.31 4432.52 c
3013.31 4437.92 3017.68 4442.29 3023.08 4442.29 c
3028.48 4442.29 3032.86 4437.92 3032.86 4432.52 c
f
n
3038.56 4381.2 m
3038.56 4375.8 3034.18 4371.43 3028.79 4371.43 c
3023.39 4371.43 3019.01 4375.8 3019.01 4381.2 c
3019.01 4386.6 3023.39 4390.97 3028.79 4390.97 c
3034.18 4390.97 3038.56 4386.6 3038.56 4381.2 c
f
n
3043.45 4329.88 m
3043.45 4324.48 3039.07 4320.11 3033.67 4320.11 c
3028.27 4320.11 3023.9 4324.48 3023.9 4329.88 c
3023.9 4335.28 3028.27 4339.66 3033.67 4339.66 c
3039.07 4339.66 3043.45 4335.28 3043.45 4329.88 c
f
n
3048.34 4278.56 m
3048.34 4273.16 3043.96 4268.79 3038.56 4268.79 c
3033.16 4268.79 3028.79 4273.16 3028.79 4278.56 c
3028.79 4283.96 3033.16 4288.34 3038.56 4288.34 c
3043.96 4288.34 3048.34 4283.96 3048.34 4278.56 c
f
n
3053.22 4227.24 m
3053.22 4221.84 3048.85 4217.46 3043.45 4217.46 c
3038.05 4217.46 3033.67 4221.84 3033.67 4227.24 c
3033.67 4232.64 3038.05 4237.02 3043.45 4237.02 c
3048.85 4237.02 3053.22 4232.64 3053.22 4227.24 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3063.81 4123.79 m
3063.81 4118.39 3059.43 4114.01 3054.04 4114.01 c
3048.64 4114.01 3044.26 4118.39 3044.26 4123.79 c
3044.26 4129.19 3048.64 4133.56 3054.04 4133.56 c
3059.43 4133.56 3063.81 4129.19 3063.81 4123.79 c
f
n
3068.7 4072.47 m
3068.7 4067.07 3064.32 4062.7 3058.93 4062.7 c
3053.53 4062.7 3049.15 4067.07 3049.15 4072.47 c
3049.15 4077.87 3053.53 4082.25 3058.93 4082.25 c
3064.32 4082.25 3068.7 4077.87 3068.7 4072.47 c
f
n
3073.59 4021.15 m
3073.59 4015.75 3069.21 4011.38 3063.81 4011.38 c
3058.41 4011.38 3054.04 4015.75 3054.04 4021.15 c
3054.04 4026.55 3058.41 4030.93 3063.81 4030.93 c
3069.21 4030.93 3073.59 4026.55 3073.59 4021.15 c
f
n
3078.48 3969.83 m
3078.48 3964.43 3074.1 3960.05 3068.7 3960.05 c
3063.3 3960.05 3058.93 3964.43 3058.93 3969.83 c
3058.93 3975.23 3063.3 3979.61 3068.7 3979.61 c
3074.1 3979.61 3078.48 3975.23 3078.48 3969.83 c
f
n
3084.18 3918.51 m
3084.18 3913.11 3079.8 3908.73 3074.4 3908.73 c
3069.0 3908.73 3064.62 3913.11 3064.62 3918.51 c
3064.62 3923.91 3069.0 3928.29 3074.4 3928.29 c
3079.8 3928.29 3084.18 3923.91 3084.18 3918.51 c
f
n
3089.07 3866.38 m
3089.07 3860.98 3084.69 3856.6 3079.29 3856.6 c
3073.89 3856.6 3069.52 3860.98 3069.52 3866.38 c
3069.52 3871.78 3073.89 3876.15 3079.29 3876.15 c
3084.69 3876.15 3089.07 3871.78 3089.07 3866.38 c
f
n
3093.95 3815.06 m
3093.95 3809.66 3089.57 3805.28 3084.18 3805.28 c
3078.78 3805.28 3074.4 3809.66 3074.4 3815.06 c
3074.4 3820.46 3078.78 3824.83 3084.18 3824.83 c
3089.57 3824.83 3093.95 3820.46 3093.95 3815.06 c
f
n
3098.84 3763.74 m
3098.84 3758.34 3094.46 3753.96 3089.07 3753.96 c
3083.67 3753.96 3079.29 3758.34 3079.29 3763.74 c
3079.29 3769.14 3083.67 3773.52 3089.07 3773.52 c
3094.46 3773.52 3098.84 3769.14 3098.84 3763.74 c
f
n
2977.46 4581.59 m
2977.46 4576.19 2973.09 4571.81 2967.69 4571.81 c
2962.29 4571.81 2957.91 4576.19 2957.91 4581.59 c
2957.91 4586.99 2962.29 4591.36 2967.69 4591.36 c
2973.09 4591.36 2977.46 4586.99 2977.46 4581.59 c
f
n
2988.05 4530.27 m
2988.05 4524.87 2983.68 4520.5 2978.28 4520.5 c
2972.88 4520.5 2968.5 4524.87 2968.5 4530.27 c
2968.5 4535.67 2972.88 4540.04 2978.28 4540.04 c
2983.68 4540.04 2988.05 4535.67 2988.05 4530.27 c
f
n
2997.83 4479.77 m
2997.83 4474.37 2993.45 4469.99 2988.05 4469.99 c
2982.66 4469.99 2978.28 4474.37 2978.28 4479.77 c
2978.28 4485.16 2982.66 4489.54 2988.05 4489.54 c
2993.45 4489.54 2997.83 4485.16 2997.83 4479.77 c
f
n
3008.42 4429.26 m
3008.42 4423.86 3004.04 4419.48 2998.64 4419.48 c
2993.25 4419.48 2988.87 4423.86 2988.87 4429.26 c
2988.87 4434.66 2993.25 4439.04 2998.64 4439.04 c
3004.04 4439.04 3008.42 4434.66 3008.42 4429.26 c
f
n
3018.2 4378.75 m
3018.2 4373.36 3013.82 4368.98 3008.42 4368.98 c
3003.02 4368.98 2998.64 4373.36 2998.64 4378.75 c
2998.64 4384.15 3003.02 4388.53 3008.42 4388.53 c
3013.82 4388.53 3018.2 4384.15 3018.2 4378.75 c
f
n
3027.97 4327.44 m
3027.97 4322.04 3023.59 4317.66 3018.2 4317.66 c
3012.8 4317.66 3008.42 4322.04 3008.42 4327.44 c
3008.42 4332.84 3012.8 4337.21 3018.2 4337.21 c
3023.59 4337.21 3027.97 4332.84 3027.97 4327.44 c
f
n
3038.56 4276.93 m
3038.56 4271.54 3034.18 4267.16 3028.79 4267.16 c
3023.39 4267.16 3019.01 4271.54 3019.01 4276.93 c
3019.01 4282.33 3023.39 4286.71 3028.79 4286.71 c
3034.18 4286.71 3038.56 4282.33 3038.56 4276.93 c
f
n
3048.34 4226.43 m
3048.34 4221.03 3043.96 4216.65 3038.56 4216.65 c
3033.16 4216.65 3028.79 4221.03 3028.79 4226.43 c
3028.79 4231.82 3033.16 4236.2 3038.56 4236.2 c
3043.96 4236.2 3048.34 4231.82 3048.34 4226.43 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3068.7 4124.6 m
3068.7 4119.2 3064.32 4114.83 3058.93 4114.83 c
3053.53 4114.83 3049.15 4119.2 3049.15 4124.6 c
3049.15 4130.0 3053.53 4134.38 3058.93 4134.38 c
3064.32 4134.38 3068.7 4130.0 3068.7 4124.6 c
f
n
3078.48 4074.1 m
3078.48 4068.7 3074.1 4064.32 3068.7 4064.32 c
3063.3 4064.32 3058.93 4068.7 3058.93 4074.1 c
3058.93 4079.5 3063.3 4083.88 3068.7 4083.88 c
3074.1 4083.88 3078.48 4079.5 3078.48 4074.1 c
f
n
3089.07 4023.59 m
3089.07 4018.2 3084.69 4013.82 3079.29 4013.82 c
3073.89 4013.82 3069.52 4018.2 3069.52 4023.59 c
3069.52 4028.99 3073.89 4033.37 3079.29 4033.37 c
3084.69 4033.37 3089.07 4028.99 3089.07 4023.59 c
f
n
3098.84 3972.27 m
3098.84 3966.88 3094.46 3962.5 3089.07 3962.5 c
3083.67 3962.5 3079.29 3966.88 3079.29 3972.27 c
3079.29 3977.67 3083.67 3982.05 3089.07 3982.05 c
3094.46 3982.05 3098.84 3977.67 3098.84 3972.27 c
f
n
3108.61 3921.77 m
3108.61 3916.37 3104.24 3912.0 3098.84 3912.0 c
3093.44 3912.0 3089.07 3916.37 3089.07 3921.77 c
3089.07 3927.17 3093.44 3931.54 3098.84 3931.54 c
3104.24 3931.54 3108.61 3927.17 3108.61 3921.77 c
f
n
3119.2 3871.27 m
3119.2 3865.87 3114.83 3861.49 3109.43 3861.49 c
3104.03 3861.49 3099.65 3865.87 3099.65 3871.27 c
3099.65 3876.66 3104.03 3881.04 3109.43 3881.04 c
3114.83 3881.04 3119.2 3876.66 3119.2 3871.27 c
f
n
3128.98 3820.76 m
3128.98 3815.36 3124.6 3810.98 3119.2 3810.98 c
3113.8 3810.98 3109.43 3815.36 3109.43 3820.76 c
3109.43 3826.16 3113.8 3830.54 3119.2 3830.54 c
3124.6 3830.54 3128.98 3826.16 3128.98 3820.76 c
f
n
3139.57 3769.44 m
3139.57 3764.04 3135.19 3759.67 3129.79 3759.67 c
3124.39 3759.67 3120.02 3764.04 3120.02 3769.44 c
3120.02 3774.84 3124.39 3779.21 3129.79 3779.21 c
3135.19 3779.21 3139.57 3774.84 3139.57 3769.44 c
f
n
2938.36 4571.81 m
2938.36 4566.41 2933.99 4562.04 2928.59 4562.04 c
2923.19 4562.04 2918.82 4566.41 2918.82 4571.81 c
2918.82 4577.21 2923.19 4581.59 2928.59 4581.59 c
2933.99 4581.59 2938.36 4577.21 2938.36 4571.81 c
f
n
2953.03 4522.12 m
2953.03 4516.73 2948.65 4512.35 2943.25 4512.35 c
2937.86 4512.35 2933.48 4516.73 2933.48 4522.12 c
2933.48 4527.52 2937.86 4531.9 2943.25 4531.9 c
2948.65 4531.9 2953.03 4527.52 2953.03 4522.12 c
f
n
2968.5 4472.43 m
2968.5 4467.04 2964.13 4462.66 2958.73 4462.66 c
2953.33 4462.66 2948.95 4467.04 2948.95 4472.43 c
2948.95 4477.83 2953.33 4482.21 2958.73 4482.21 c
2964.13 4482.21 2968.5 4477.83 2968.5 4472.43 c
f
n
2983.17 4422.74 m
2983.17 4417.34 2978.79 4412.97 2973.39 4412.97 c
2967.99 4412.97 2963.62 4417.34 2963.62 4422.74 c
2963.62 4428.14 2967.99 4432.52 2973.39 4432.52 c
2978.79 4432.52 2983.17 4428.14 2983.17 4422.74 c
f
n
2998.64 4373.87 m
2998.64 4368.47 2994.27 4364.09 2988.87 4364.09 c
2983.47 4364.09 2979.09 4368.47 2979.09 4373.87 c
2979.09 4379.27 2983.47 4383.64 2988.87 4383.64 c
2994.27 4383.64 2998.64 4379.27 2998.64 4373.87 c
f
n
3013.31 4324.18 m
3013.31 4318.78 3008.93 4314.4 3003.53 4314.4 c
2998.13 4314.4 2993.76 4318.78 2993.76 4324.18 c
2993.76 4329.58 2998.13 4333.95 3003.53 4333.95 c
3008.93 4333.95 3013.31 4329.58 3013.31 4324.18 c
f
n
3028.79 4274.49 m
3028.79 4269.09 3024.41 4264.71 3019.01 4264.71 c
3013.61 4264.71 3009.23 4269.09 3009.23 4274.49 c
3009.23 4279.89 3013.61 4284.26 3019.01 4284.26 c
3024.41 4284.26 3028.79 4279.89 3028.79 4274.49 c
f
n
3043.45 4224.8 m
3043.45 4219.4 3039.07 4215.02 3033.67 4215.02 c
3028.27 4215.02 3023.9 4219.4 3023.9 4224.8 c
3023.9 4230.2 3028.27 4234.57 3033.67 4234.57 c
3039.07 4234.57 3043.45 4230.2 3043.45 4224.8 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3073.59 4126.23 m
3073.59 4120.83 3069.21 4116.46 3063.81 4116.46 c
3058.41 4116.46 3054.04 4120.83 3054.04 4126.23 c
3054.04 4131.63 3058.41 4136.01 3063.81 4136.01 c
3069.21 4136.01 3073.59 4131.63 3073.59 4126.23 c
f
n
3088.25 4076.54 m
3088.25 4071.14 3083.88 4066.77 3078.48 4066.77 c
3073.08 4066.77 3068.7 4071.14 3068.7 4076.54 c
3068.7 4081.94 3073.08 4086.32 3078.48 4086.32 c
3083.88 4086.32 3088.25 4081.94 3088.25 4076.54 c
f
n
3103.73 4026.85 m
3103.73 4021.45 3099.35 4017.08 3093.95 4017.08 c
3088.55 4017.08 3084.18 4021.45 3084.18 4026.85 c
3084.18 4032.25 3088.55 4036.63 3093.95 4036.63 c
3099.35 4036.63 3103.73 4032.25 3103.73 4026.85 c
f
n
3118.39 3977.16 m
3118.39 3971.76 3114.01 3967.39 3108.61 3967.39 c
3103.21 3967.39 3098.84 3971.76 3098.84 3977.16 c
3098.84 3982.56 3103.21 3986.94 3108.61 3986.94 c
3114.01 3986.94 3118.39 3982.56 3118.39 3977.16 c
f
n
3133.87 3928.29 m
3133.87 3922.89 3129.49 3918.51 3124.09 3918.51 c
3118.7 3918.51 3114.32 3922.89 3114.32 3928.29 c
3114.32 3933.68 3118.7 3938.06 3124.09 3938.06 c
3129.49 3938.06 3133.87 3933.68 3133.87 3928.29 c
f
n
3148.53 3878.6 m
3148.53 3873.2 3144.15 3868.82 3138.75 3868.82 c
3133.36 3868.82 3128.98 3873.2 3128.98 3878.6 c
3128.98 3884.0 3133.36 3888.37 3138.75 3888.37 c
3144.15 3888.37 3148.53 3884.0 3148.53 3878.6 c
f
n
3164.01 3828.91 m
3164.01 3823.51 3159.63 3819.13 3154.23 3819.13 c
3148.83 3819.13 3144.46 3823.51 3144.46 3828.91 c
3144.46 3834.3 3148.83 3838.68 3154.23 3838.68 c
3159.63 3838.68 3164.01 3834.3 3164.01 3828.91 c
f
n
3178.67 3779.21 m
3178.67 3773.82 3174.29 3769.44 3168.89 3769.44 c
3163.5 3769.44 3159.12 3773.82 3159.12 3779.21 c
3159.12 3784.61 3163.5 3788.99 3168.89 3788.99 c
3174.29 3788.99 3178.67 3784.61 3178.67 3779.21 c
f
n
2900.08 4557.96 m
2900.08 4552.57 2895.7 4548.19 2890.3 4548.19 c
2884.91 4548.19 2880.53 4552.57 2880.53 4557.96 c
2880.53 4563.36 2884.91 4567.74 2890.3 4567.74 c
2895.7 4567.74 2900.08 4563.36 2900.08 4557.96 c
f
n
2919.63 4509.91 m
2919.63 4504.51 2915.25 4500.13 2909.86 4500.13 c
2904.46 4500.13 2900.08 4504.51 2900.08 4509.91 c
2900.08 4515.3 2904.46 4519.68 2909.86 4519.68 c
2915.25 4519.68 2919.63 4515.3 2919.63 4509.91 c
f
n
2940.0 4461.84 m
2940.0 4456.45 2935.62 4452.07 2930.22 4452.07 c
2924.82 4452.07 2920.45 4456.45 2920.45 4461.84 c
2920.45 4467.24 2924.82 4471.62 2930.22 4471.62 c
2935.62 4471.62 2940.0 4467.24 2940.0 4461.84 c
f
n
2959.54 4414.6 m
2959.54 4409.2 2955.17 4404.82 2949.77 4404.82 c
2944.37 4404.82 2940.0 4409.2 2940.0 4414.6 c
2940.0 4420.0 2944.37 4424.37 2949.77 4424.37 c
2955.17 4424.37 2959.54 4420.0 2959.54 4414.6 c
f
n
2979.09 4366.54 m
2979.09 4361.14 2974.72 4356.76 2969.32 4356.76 c
2963.92 4356.76 2959.54 4361.14 2959.54 4366.54 c
2959.54 4371.93 2963.92 4376.31 2969.32 4376.31 c
2974.72 4376.31 2979.09 4371.93 2979.09 4366.54 c
f
n
2999.46 4318.48 m
2999.46 4313.08 2995.08 4308.7 2989.68 4308.7 c
2984.29 4308.7 2979.91 4313.08 2979.91 4318.48 c
2979.91 4323.88 2984.29 4328.25 2989.68 4328.25 c
2995.08 4328.25 2999.46 4323.88 2999.46 4318.48 c
f
n
3019.01 4271.23 m
3019.01 4265.83 3014.63 4261.45 3009.23 4261.45 c
3003.84 4261.45 2999.46 4265.83 2999.46 4271.23 c
2999.46 4276.63 3003.84 4281.0 3009.23 4281.0 c
3014.63 4281.0 3019.01 4276.63 3019.01 4271.23 c
f
n
3038.56 4223.17 m
3038.56 4217.77 3034.18 4213.39 3028.79 4213.39 c
3023.39 4213.39 3019.01 4217.77 3019.01 4223.17 c
3019.01 4228.57 3023.39 4232.95 3028.79 4232.95 c
3034.18 4232.95 3038.56 4228.57 3038.56 4223.17 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3078.48 4127.86 m
3078.48 4122.46 3074.1 4118.09 3068.7 4118.09 c
3063.3 4118.09 3058.93 4122.46 3058.93 4127.86 c
3058.93 4133.26 3063.3 4137.64 3068.7 4137.64 c
3074.1 4137.64 3078.48 4133.26 3078.48 4127.86 c
f
n
3098.02 4079.8 m
3098.02 4074.4 3093.65 4070.03 3088.25 4070.03 c
3082.85 4070.03 3078.48 4074.4 3078.48 4079.8 c
3078.48 4085.2 3082.85 4089.57 3088.25 4089.57 c
3093.65 4089.57 3098.02 4085.2 3098.02 4079.8 c
f
n
3117.57 4032.55 m
3117.57 4027.16 3113.2 4022.78 3107.8 4022.78 c
3102.4 4022.78 3098.02 4027.16 3098.02 4032.55 c
3098.02 4037.95 3102.4 4042.33 3107.8 4042.33 c
3113.2 4042.33 3117.57 4037.95 3117.57 4032.55 c
f
n
3137.94 3984.49 m
3137.94 3979.09 3133.56 3974.72 3128.16 3974.72 c
3122.77 3974.72 3118.39 3979.09 3118.39 3984.49 c
3118.39 3989.89 3122.77 3994.27 3128.16 3994.27 c
3133.56 3994.27 3137.94 3989.89 3137.94 3984.49 c
f
n
3157.49 3936.43 m
3157.49 3931.04 3153.11 3926.66 3147.71 3926.66 c
3142.32 3926.66 3137.94 3931.04 3137.94 3936.43 c
3137.94 3941.83 3142.32 3946.21 3147.71 3946.21 c
3153.11 3946.21 3157.49 3941.83 3157.49 3936.43 c
f
n
3177.04 3889.19 m
3177.04 3883.79 3172.66 3879.41 3167.27 3879.41 c
3161.87 3879.41 3157.49 3883.79 3157.49 3889.19 c
3157.49 3894.59 3161.87 3898.96 3167.27 3898.96 c
3172.66 3898.96 3177.04 3894.59 3177.04 3889.19 c
f
n
3197.41 3841.12 m
3197.41 3835.73 3193.03 3831.35 3187.63 3831.35 c
3182.23 3831.35 3177.86 3835.73 3177.86 3841.12 c
3177.86 3846.52 3182.23 3850.9 3187.63 3850.9 c
3193.03 3850.9 3197.41 3846.52 3197.41 3841.12 c
f
n
3216.96 3793.06 m
3216.96 3787.66 3212.58 3783.29 3207.18 3783.29 c
3201.78 3783.29 3197.41 3787.66 3197.41 3793.06 c
3197.41 3798.46 3201.78 3802.84 3207.18 3802.84 c
3212.58 3802.84 3216.96 3798.46 3216.96 3793.06 c
f
n
2838.98 4586.48 m
2838.98 4581.08 2834.61 4576.7 2829.21 4576.7 c
2823.81 4576.7 2819.43 4581.08 2819.43 4586.48 c
2819.43 4591.88 2823.81 4596.25 2829.21 4596.25 c
2834.61 4596.25 2838.98 4591.88 2838.98 4586.48 c
f
n
2863.42 4540.86 m
2863.42 4535.46 2859.05 4531.09 2853.65 4531.09 c
2848.25 4531.09 2843.87 4535.46 2843.87 4540.86 c
2843.87 4546.26 2848.25 4550.63 2853.65 4550.63 c
2859.05 4550.63 2863.42 4546.26 2863.42 4540.86 c
f
n
2887.86 4495.24 m
2887.86 4489.84 2883.48 4485.47 2878.09 4485.47 c
2872.69 4485.47 2868.31 4489.84 2868.31 4495.24 c
2868.31 4500.64 2872.69 4505.02 2878.09 4505.02 c
2883.48 4505.02 2887.86 4500.64 2887.86 4495.24 c
f
n
2912.3 4449.62 m
2912.3 4444.23 2907.92 4439.85 2902.52 4439.85 c
2897.12 4439.85 2892.75 4444.23 2892.75 4449.62 c
2892.75 4455.02 2897.12 4459.4 2902.52 4459.4 c
2907.92 4459.4 2912.3 4455.02 2912.3 4449.62 c
f
n
2936.73 4404.01 m
2936.73 4398.61 2932.36 4394.23 2926.96 4394.23 c
2921.56 4394.23 2917.19 4398.61 2917.19 4404.01 c
2917.19 4409.41 2921.56 4413.78 2926.96 4413.78 c
2932.36 4413.78 2936.73 4409.41 2936.73 4404.01 c
f
n
2961.17 4358.39 m
2961.17 4352.99 2956.8 4348.62 2951.4 4348.62 c
2946.0 4348.62 2941.62 4352.99 2941.62 4358.39 c
2941.62 4363.79 2946.0 4368.16 2951.4 4368.16 c
2956.8 4368.16 2961.17 4363.79 2961.17 4358.39 c
f
n
2985.61 4312.77 m
2985.61 4307.38 2981.23 4303.0 2975.84 4303.0 c
2970.44 4303.0 2966.06 4307.38 2966.06 4312.77 c
2966.06 4318.17 2970.44 4322.55 2975.84 4322.55 c
2981.23 4322.55 2985.61 4318.17 2985.61 4312.77 c
f
n
3010.05 4267.16 m
3010.05 4261.76 3005.67 4257.38 3000.27 4257.38 c
2994.88 4257.38 2990.5 4261.76 2990.5 4267.16 c
2990.5 4272.55 2994.88 4276.93 3000.27 4276.93 c
3005.67 4276.93 3010.05 4272.55 3010.05 4267.16 c
f
n
3034.49 4221.54 m
3034.49 4216.14 3030.11 4211.77 3024.71 4211.77 c
3019.31 4211.77 3014.94 4216.14 3014.94 4221.54 c
3014.94 4226.94 3019.31 4231.32 3024.71 4231.32 c
3030.11 4231.32 3034.49 4226.94 3034.49 4221.54 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3082.55 4129.49 m
3082.55 4124.09 3078.17 4119.71 3072.77 4119.71 c
3067.38 4119.71 3063.0 4124.09 3063.0 4129.49 c
3063.0 4134.89 3067.38 4139.27 3072.77 4139.27 c
3078.17 4139.27 3082.55 4134.89 3082.55 4129.49 c
f
n
3106.98 4083.88 m
3106.98 4078.48 3102.61 4074.1 3097.21 4074.1 c
3091.81 4074.1 3087.43 4078.48 3087.43 4083.88 c
3087.43 4089.27 3091.81 4093.65 3097.21 4093.65 c
3102.61 4093.65 3106.98 4089.27 3106.98 4083.88 c
f
n
3131.42 4038.26 m
3131.42 4032.86 3127.05 4028.48 3121.65 4028.48 c
3116.25 4028.48 3111.87 4032.86 3111.87 4038.26 c
3111.87 4043.66 3116.25 4048.03 3121.65 4048.03 c
3127.05 4048.03 3131.42 4043.66 3131.42 4038.26 c
f
n
3155.86 3992.64 m
3155.86 3987.24 3151.48 3982.86 3146.09 3982.86 c
3140.69 3982.86 3136.31 3987.24 3136.31 3992.64 c
3136.31 3998.04 3140.69 4002.41 3146.09 4002.41 c
3151.48 4002.41 3155.86 3998.04 3155.86 3992.64 c
f
n
3180.3 3947.02 m
3180.3 3941.62 3175.92 3937.25 3170.52 3937.25 c
3165.12 3937.25 3160.75 3941.62 3160.75 3947.02 c
3160.75 3952.42 3165.12 3956.8 3170.52 3956.8 c
3175.92 3956.8 3180.3 3952.42 3180.3 3947.02 c
f
n
3204.74 3901.41 m
3204.74 3896.01 3200.36 3891.63 3194.96 3891.63 c
3189.56 3891.63 3185.19 3896.01 3185.19 3901.41 c
3185.19 3906.8 3189.56 3911.18 3194.96 3911.18 c
3200.36 3911.18 3204.74 3906.8 3204.74 3901.41 c
f
n
3229.18 3855.79 m
3229.18 3850.39 3224.8 3846.01 3219.4 3846.01 c
3214.0 3846.01 3209.62 3850.39 3209.62 3855.79 c
3209.62 3861.19 3214.0 3865.56 3219.4 3865.56 c
3224.8 3865.56 3229.18 3861.19 3229.18 3855.79 c
f
n
3253.61 3810.17 m
3253.61 3804.77 3249.23 3800.39 3243.84 3800.39 c
3238.44 3800.39 3234.06 3804.77 3234.06 3810.17 c
3234.06 3815.57 3238.44 3819.95 3243.84 3819.95 c
3249.23 3819.95 3253.61 3815.57 3253.61 3810.17 c
f
n
3278.05 3764.55 m
3278.05 3759.16 3273.67 3754.78 3268.27 3754.78 c
3262.88 3754.78 3258.5 3759.16 3258.5 3764.55 c
3258.5 3769.95 3262.88 3774.33 3268.27 3774.33 c
3273.67 3774.33 3278.05 3769.95 3278.05 3764.55 c
f
n
2799.88 4562.85 m
2799.88 4557.45 2795.51 4553.08 2790.11 4553.08 c
2784.71 4553.08 2780.34 4557.45 2780.34 4562.85 c
2780.34 4568.25 2784.71 4572.63 2790.11 4572.63 c
2795.51 4572.63 2799.88 4568.25 2799.88 4562.85 c
f
n
2828.39 4519.68 m
2828.39 4514.28 2824.02 4509.91 2818.62 4509.91 c
2813.22 4509.91 2808.84 4514.28 2808.84 4519.68 c
2808.84 4525.08 2813.22 4529.46 2818.62 4529.46 c
2824.02 4529.46 2828.39 4525.08 2828.39 4519.68 c
f
n
2857.72 4476.51 m
2857.72 4471.11 2853.34 4466.73 2847.95 4466.73 c
2842.55 4466.73 2838.17 4471.11 2838.17 4476.51 c
2838.17 4481.91 2842.55 4486.28 2847.95 4486.28 c
2853.34 4486.28 2857.72 4481.91 2857.72 4476.51 c
f
n
2886.23 4433.33 m
2886.23 4427.93 2881.86 4423.56 2876.46 4423.56 c
2871.06 4423.56 2866.68 4427.93 2866.68 4433.33 c
2866.68 4438.73 2871.06 4443.11 2876.46 4443.11 c
2881.86 4443.11 2886.23 4438.73 2886.23 4433.33 c
f
n
2914.74 4390.16 m
2914.74 4384.76 2910.36 4380.39 2904.96 4380.39 c
2899.57 4380.39 2895.19 4384.76 2895.19 4390.16 c
2895.19 4395.56 2899.57 4399.93 2904.96 4399.93 c
2910.36 4399.93 2914.74 4395.56 2914.74 4390.16 c
f
n
2943.25 4347.8 m
2943.25 4342.4 2938.88 4338.03 2933.48 4338.03 c
2928.08 4338.03 2923.7 4342.4 2923.7 4347.8 c
2923.7 4353.2 2928.08 4357.58 2933.48 4357.58 c
2938.88 4357.58 2943.25 4353.2 2943.25 4347.8 c
f
n
2972.58 4304.63 m
2972.58 4299.23 2968.2 4294.85 2962.8 4294.85 c
2957.41 4294.85 2953.03 4299.23 2953.03 4304.63 c
2953.03 4310.03 2957.41 4314.4 2962.8 4314.4 c
2968.2 4314.4 2972.58 4310.03 2972.58 4304.63 c
f
n
3001.09 4261.45 m
3001.09 4256.05 2996.71 4251.68 2991.31 4251.68 c
2985.91 4251.68 2981.54 4256.05 2981.54 4261.45 c
2981.54 4266.85 2985.91 4271.23 2991.31 4271.23 c
2996.71 4271.23 3001.09 4266.85 3001.09 4261.45 c
f
n
3029.6 4218.28 m
3029.6 4212.88 3025.22 4208.51 3019.82 4208.51 c
3014.43 4208.51 3010.05 4212.88 3010.05 4218.28 c
3010.05 4223.68 3014.43 4228.05 3019.82 4228.05 c
3025.22 4228.05 3029.6 4223.68 3029.6 4218.28 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3087.43 4132.75 m
3087.43 4127.35 3083.06 4122.97 3077.66 4122.97 c
3072.26 4122.97 3067.89 4127.35 3067.89 4132.75 c
3067.89 4138.15 3072.26 4142.52 3077.66 4142.52 c
3083.06 4142.52 3087.43 4138.15 3087.43 4132.75 c
f
n
3115.95 4089.57 m
3115.95 4084.18 3111.57 4079.8 3106.17 4079.8 c
3100.77 4079.8 3096.39 4084.18 3096.39 4089.57 c
3096.39 4094.97 3100.77 4099.35 3106.17 4099.35 c
3111.57 4099.35 3115.95 4094.97 3115.95 4089.57 c
f
n
3144.46 4046.4 m
3144.46 4041.0 3140.08 4036.63 3134.68 4036.63 c
3129.28 4036.63 3124.91 4041.0 3124.91 4046.4 c
3124.91 4051.8 3129.28 4056.18 3134.68 4056.18 c
3140.08 4056.18 3144.46 4051.8 3144.46 4046.4 c
f
n
3173.78 4003.23 m
3173.78 3997.83 3169.41 3993.45 3164.01 3993.45 c
3158.61 3993.45 3154.23 3997.83 3154.23 4003.23 c
3154.23 4008.63 3158.61 4013.0 3164.01 4013.0 c
3169.41 4013.0 3173.78 4008.63 3173.78 4003.23 c
f
n
3202.29 3960.87 m
3202.29 3955.47 3197.92 3951.09 3192.52 3951.09 c
3187.12 3951.09 3182.74 3955.47 3182.74 3960.87 c
3182.74 3966.27 3187.12 3970.64 3192.52 3970.64 c
3197.92 3970.64 3202.29 3966.27 3202.29 3960.87 c
f
n
3230.8 3917.7 m
3230.8 3912.3 3226.43 3907.92 3221.03 3907.92 c
3215.63 3907.92 3211.25 3912.3 3211.25 3917.7 c
3211.25 3923.09 3215.63 3927.47 3221.03 3927.47 c
3226.43 3927.47 3230.8 3923.09 3230.8 3917.7 c
f
n
3259.31 3874.52 m
3259.31 3869.12 3254.94 3864.75 3249.54 3864.75 c
3244.14 3864.75 3239.77 3869.12 3239.77 3874.52 c
3239.77 3879.92 3244.14 3884.3 3249.54 3884.3 c
3254.94 3884.3 3259.31 3879.92 3259.31 3874.52 c
f
n
3288.64 3831.35 m
3288.64 3825.95 3284.26 3821.57 3278.86 3821.57 c
3273.46 3821.57 3269.09 3825.95 3269.09 3831.35 c
3269.09 3836.75 3273.46 3841.12 3278.86 3841.12 c
3284.26 3841.12 3288.64 3836.75 3288.64 3831.35 c
f
n
3317.15 3788.18 m
3317.15 3782.78 3312.77 3778.4 3307.38 3778.4 c
3301.98 3778.4 3297.6 3782.78 3297.6 3788.18 c
3297.6 3793.57 3301.98 3797.95 3307.38 3797.95 c
3312.77 3797.95 3317.15 3793.57 3317.15 3788.18 c
f
n
2730.64 4575.07 m
2730.64 4569.67 2726.27 4565.3 2720.87 4565.3 c
2715.47 4565.3 2711.09 4569.67 2711.09 4575.07 c
2711.09 4580.47 2715.47 4584.85 2720.87 4584.85 c
2726.27 4584.85 2730.64 4580.47 2730.64 4575.07 c
f
n
2763.23 4535.16 m
2763.23 4529.76 2758.85 4525.38 2753.45 4525.38 c
2748.05 4525.38 2743.68 4529.76 2743.68 4535.16 c
2743.68 4540.55 2748.05 4544.93 2753.45 4544.93 c
2758.85 4544.93 2763.23 4540.55 2763.23 4535.16 c
f
n
2795.81 4495.24 m
2795.81 4489.84 2791.43 4485.47 2786.04 4485.47 c
2780.64 4485.47 2776.26 4489.84 2776.26 4495.24 c
2776.26 4500.64 2780.64 4505.02 2786.04 4505.02 c
2791.43 4505.02 2795.81 4500.64 2795.81 4495.24 c
f
n
2829.21 4455.33 m
2829.21 4449.93 2824.83 4445.55 2819.43 4445.55 c
2814.04 4445.55 2809.66 4449.93 2809.66 4455.33 c
2809.66 4460.73 2814.04 4465.1 2819.43 4465.1 c
2824.83 4465.1 2829.21 4460.73 2829.21 4455.33 c
f
n
2861.79 4415.41 m
2861.79 4410.02 2857.42 4405.64 2852.02 4405.64 c
2846.62 4405.64 2842.24 4410.02 2842.24 4415.41 c
2842.24 4420.81 2846.62 4425.19 2852.02 4425.19 c
2857.42 4425.19 2861.79 4420.81 2861.79 4415.41 c
f
n
2894.38 4375.5 m
2894.38 4370.1 2890.0 4365.72 2884.6 4365.72 c
2879.2 4365.72 2874.83 4370.1 2874.83 4375.5 c
2874.83 4380.89 2879.2 4385.27 2884.6 4385.27 c
2890.0 4385.27 2894.38 4380.89 2894.38 4375.5 c
f
n
2926.96 4335.58 m
2926.96 4330.18 2922.59 4325.81 2917.19 4325.81 c
2911.79 4325.81 2907.41 4330.18 2907.41 4335.58 c
2907.41 4340.98 2911.79 4345.36 2917.19 4345.36 c
2922.59 4345.36 2926.96 4340.98 2926.96 4335.58 c
f
n
2960.36 4295.67 m
2960.36 4290.27 2955.98 4285.89 2950.58 4285.89 c
2945.18 4285.89 2940.81 4290.27 2940.81 4295.67 c
2940.81 4301.07 2945.18 4305.44 2950.58 4305.44 c
2955.98 4305.44 2960.36 4301.07 2960.36 4295.67 c
f
n
2992.94 4255.75 m
2992.94 4250.36 2988.57 4245.98 2983.17 4245.98 c
2977.77 4245.98 2973.39 4250.36 2973.39 4255.75 c
2973.39 4261.15 2977.77 4265.53 2983.17 4265.53 c
2988.57 4265.53 2992.94 4261.15 2992.94 4255.75 c
f
n
3025.53 4215.84 m
3025.53 4210.44 3021.15 4206.06 3015.75 4206.06 c
3010.35 4206.06 3005.98 4210.44 3005.98 4215.84 c
3005.98 4221.23 3010.35 4225.61 3015.75 4225.61 c
3021.15 4225.61 3025.53 4221.23 3025.53 4215.84 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3091.51 4135.19 m
3091.51 4129.79 3087.13 4125.42 3081.73 4125.42 c
3076.34 4125.42 3071.96 4129.79 3071.96 4135.19 c
3071.96 4140.59 3076.34 4144.97 3081.73 4144.97 c
3087.13 4144.97 3091.51 4140.59 3091.51 4135.19 c
f
n
3124.09 4095.28 m
3124.09 4089.88 3119.71 4085.5 3114.32 4085.5 c
3108.92 4085.5 3104.54 4089.88 3104.54 4095.28 c
3104.54 4100.68 3108.92 4105.05 3114.32 4105.05 c
3119.71 4105.05 3124.09 4100.68 3124.09 4095.28 c
f
n
3156.68 4055.36 m
3156.68 4049.96 3152.3 4045.59 3146.9 4045.59 c
3141.5 4045.59 3137.12 4049.96 3137.12 4055.36 c
3137.12 4060.76 3141.5 4065.14 3146.9 4065.14 c
3152.3 4065.14 3156.68 4060.76 3156.68 4055.36 c
f
n
3190.07 4015.45 m
3190.07 4010.05 3185.7 4005.67 3180.3 4005.67 c
3174.9 4005.67 3170.52 4010.05 3170.52 4015.45 c
3170.52 4020.85 3174.9 4025.22 3180.3 4025.22 c
3185.7 4025.22 3190.07 4020.85 3190.07 4015.45 c
f
n
3222.66 3975.53 m
3222.66 3970.13 3218.28 3965.76 3212.88 3965.76 c
3207.48 3965.76 3203.11 3970.13 3203.11 3975.53 c
3203.11 3980.93 3207.48 3985.31 3212.88 3985.31 c
3218.28 3985.31 3222.66 3980.93 3222.66 3975.53 c
f
n
3255.24 3935.62 m
3255.24 3930.22 3250.86 3925.84 3245.46 3925.84 c
3240.07 3925.84 3235.69 3930.22 3235.69 3935.62 c
3235.69 3941.02 3240.07 3945.39 3245.46 3945.39 c
3250.86 3945.39 3255.24 3941.02 3255.24 3935.62 c
f
n
3287.82 3895.7 m
3287.82 3890.3 3283.45 3885.93 3278.05 3885.93 c
3272.65 3885.93 3268.27 3890.3 3268.27 3895.7 c
3268.27 3901.1 3272.65 3905.48 3278.05 3905.48 c
3283.45 3905.48 3287.82 3901.1 3287.82 3895.7 c
f
n
3321.22 3855.79 m
3321.22 3850.39 3316.85 3846.01 3311.45 3846.01 c
3306.05 3846.01 3301.67 3850.39 3301.67 3855.79 c
3301.67 3861.19 3306.05 3865.56 3311.45 3865.56 c
3316.85 3865.56 3321.22 3861.19 3321.22 3855.79 c
f
n
3353.81 3815.87 m
3353.81 3810.47 3349.43 3806.1 3344.03 3806.1 c
3338.63 3806.1 3334.26 3810.47 3334.26 3815.87 c
3334.26 3821.27 3338.63 3825.65 3344.03 3825.65 c
3349.43 3825.65 3353.81 3821.27 3353.81 3815.87 c
f
n
3386.39 3775.96 m
3386.39 3770.56 3382.02 3766.18 3376.62 3766.18 c
3371.22 3766.18 3366.84 3770.56 3366.84 3775.96 c
3366.84 3781.36 3371.22 3785.73 3376.62 3785.73 c
3382.02 3785.73 3386.39 3781.36 3386.39 3775.96 c
f
n
2656.52 4577.52 m
2656.52 4572.12 2652.14 4567.74 2646.74 4567.74 c
2641.34 4567.74 2636.96 4572.12 2636.96 4577.52 c
2636.96 4582.91 2641.34 4587.29 2646.74 4587.29 c
2652.14 4587.29 2656.52 4582.91 2656.52 4577.52 c
f
n
2692.36 4541.68 m
2692.36 4536.28 2687.98 4531.9 2682.58 4531.9 c
2677.18 4531.9 2672.81 4536.28 2672.81 4541.68 c
2672.81 4547.07 2677.18 4551.45 2682.58 4551.45 c
2687.98 4551.45 2692.36 4547.07 2692.36 4541.68 c
f
n
2729.02 4505.02 m
2729.02 4499.62 2724.64 4495.24 2719.24 4495.24 c
2713.84 4495.24 2709.46 4499.62 2709.46 4505.02 c
2709.46 4510.41 2713.84 4514.79 2719.24 4514.79 c
2724.64 4514.79 2729.02 4510.41 2729.02 4505.02 c
f
n
2765.67 4468.36 m
2765.67 4462.96 2761.3 4458.59 2755.9 4458.59 c
2750.5 4458.59 2746.12 4462.96 2746.12 4468.36 c
2746.12 4473.76 2750.5 4478.14 2755.9 4478.14 c
2761.3 4478.14 2765.67 4473.76 2765.67 4468.36 c
f
n
2802.33 4431.7 m
2802.33 4426.3 2797.95 4421.93 2792.55 4421.93 c
2787.16 4421.93 2782.78 4426.3 2782.78 4431.7 c
2782.78 4437.1 2787.16 4441.48 2792.55 4441.48 c
2797.95 4441.48 2802.33 4437.1 2802.33 4431.7 c
f
n
2838.98 4395.05 m
2838.98 4389.65 2834.61 4385.27 2829.21 4385.27 c
2823.81 4385.27 2819.43 4389.65 2819.43 4395.05 c
2819.43 4400.45 2823.81 4404.82 2829.21 4404.82 c
2834.61 4404.82 2838.98 4400.45 2838.98 4395.05 c
f
n
2875.64 4358.39 m
2875.64 4352.99 2871.27 4348.62 2865.87 4348.62 c
2860.47 4348.62 2856.09 4352.99 2856.09 4358.39 c
2856.09 4363.79 2860.47 4368.16 2865.87 4368.16 c
2871.27 4368.16 2875.64 4363.79 2875.64 4358.39 c
f
n
2912.3 4321.73 m
2912.3 4316.34 2907.92 4311.96 2902.52 4311.96 c
2897.12 4311.96 2892.75 4316.34 2892.75 4321.73 c
2892.75 4327.13 2897.12 4331.51 2902.52 4331.51 c
2907.92 4331.51 2912.3 4327.13 2912.3 4321.73 c
f
n
2948.95 4285.08 m
2948.95 4279.68 2944.58 4275.3 2939.18 4275.3 c
2933.78 4275.3 2929.41 4279.68 2929.41 4285.08 c
2929.41 4290.48 2933.78 4294.85 2939.18 4294.85 c
2944.58 4294.85 2948.95 4290.48 2948.95 4285.08 c
f
n
2985.61 4248.42 m
2985.61 4243.02 2981.23 4238.64 2975.84 4238.64 c
2970.44 4238.64 2966.06 4243.02 2966.06 4248.42 c
2966.06 4253.82 2970.44 4258.2 2975.84 4258.2 c
2981.23 4258.2 2985.61 4253.82 2985.61 4248.42 c
f
n
3022.27 4211.77 m
3022.27 4206.37 3017.89 4201.99 3012.49 4201.99 c
3007.09 4201.99 3002.72 4206.37 3002.72 4211.77 c
3002.72 4217.16 3007.09 4221.54 3012.49 4221.54 c
3017.89 4221.54 3022.27 4217.16 3022.27 4211.77 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3094.77 4139.27 m
3094.77 4133.87 3090.39 4129.49 3084.99 4129.49 c
3079.59 4129.49 3075.21 4133.87 3075.21 4139.27 c
3075.21 4144.66 3079.59 4149.04 3084.99 4149.04 c
3090.39 4149.04 3094.77 4144.66 3094.77 4139.27 c
f
n
3131.42 4102.61 m
3131.42 4097.21 3127.05 4092.84 3121.65 4092.84 c
3116.25 4092.84 3111.87 4097.21 3111.87 4102.61 c
3111.87 4108.01 3116.25 4112.38 3121.65 4112.38 c
3127.05 4112.38 3131.42 4108.01 3131.42 4102.61 c
f
n
3168.08 4065.95 m
3168.08 4060.55 3163.7 4056.18 3158.3 4056.18 c
3152.91 4056.18 3148.53 4060.55 3148.53 4065.95 c
3148.53 4071.35 3152.91 4075.73 3158.3 4075.73 c
3163.7 4075.73 3168.08 4071.35 3168.08 4065.95 c
f
n
3204.74 4029.3 m
3204.74 4023.9 3200.36 4019.52 3194.96 4019.52 c
3189.56 4019.52 3185.19 4023.9 3185.19 4029.3 c
3185.19 4034.7 3189.56 4039.07 3194.96 4039.07 c
3200.36 4039.07 3204.74 4034.7 3204.74 4029.3 c
f
n
3241.39 3992.64 m
3241.39 3987.24 3237.02 3982.86 3231.62 3982.86 c
3226.22 3982.86 3221.84 3987.24 3221.84 3992.64 c
3221.84 3998.04 3226.22 4002.41 3231.62 4002.41 c
3237.02 4002.41 3241.39 3998.04 3241.39 3992.64 c
f
n
3278.05 3955.98 m
3278.05 3950.59 3273.67 3946.21 3268.27 3946.21 c
3262.88 3946.21 3258.5 3950.59 3258.5 3955.98 c
3258.5 3961.38 3262.88 3965.76 3268.27 3965.76 c
3273.67 3965.76 3278.05 3961.38 3278.05 3955.98 c
f
n
3314.71 3919.32 m
3314.71 3913.93 3310.33 3909.55 3304.93 3909.55 c
3299.53 3909.55 3295.16 3913.93 3295.16 3919.32 c
3295.16 3924.72 3299.53 3929.1 3304.93 3929.1 c
3310.33 3929.1 3314.71 3924.72 3314.71 3919.32 c
f
n
3351.36 3882.67 m
3351.36 3877.27 3346.98 3872.89 3341.59 3872.89 c
3336.19 3872.89 3331.81 3877.27 3331.81 3882.67 c
3331.81 3888.07 3336.19 3892.45 3341.59 3892.45 c
3346.98 3892.45 3351.36 3888.07 3351.36 3882.67 c
f
n
3388.02 3846.01 m
3388.02 3840.61 3383.64 3836.24 3378.25 3836.24 c
3372.85 3836.24 3368.47 3840.61 3368.47 3846.01 c
3368.47 3851.41 3372.85 3855.79 3378.25 3855.79 c
3383.64 3855.79 3388.02 3851.41 3388.02 3846.01 c
f
n
3424.68 3809.36 m
3424.68 3803.96 3420.3 3799.58 3414.9 3799.58 c
3409.5 3799.58 3405.12 3803.96 3405.12 3809.36 c
3405.12 3814.75 3409.5 3819.13 3414.9 3819.13 c
3420.3 3819.13 3424.68 3814.75 3424.68 3809.36 c
f
n
3460.52 3773.52 m
3460.52 3768.12 3456.14 3763.74 3450.74 3763.74 c
3445.34 3763.74 3440.97 3768.12 3440.97 3773.52 c
3440.97 3778.91 3445.34 3783.29 3450.74 3783.29 c
3456.14 3783.29 3460.52 3778.91 3460.52 3773.52 c
f
n
2658.96 4503.39 m
2658.96 4497.99 2654.58 4493.61 2649.18 4493.61 c
2643.79 4493.61 2639.41 4497.99 2639.41 4503.39 c
2639.41 4508.79 2643.79 4513.16 2649.18 4513.16 c
2654.58 4513.16 2658.96 4508.79 2658.96 4503.39 c
f
n
2698.88 4470.8 m
2698.88 4465.41 2694.5 4461.03 2689.1 4461.03 c
2683.7 4461.03 2679.32 4465.41 2679.32 4470.8 c
2679.32 4476.2 2683.7 4480.58 2689.1 4480.58 c
2694.5 4480.58 2698.88 4476.2 2698.88 4470.8 c
f
n
2738.79 4438.22 m
2738.79 4432.82 2734.41 4428.45 2729.02 4428.45 c
2723.62 4428.45 2719.24 4432.82 2719.24 4438.22 c
2719.24 4443.62 2723.62 4448.0 2729.02 4448.0 c
2734.41 4448.0 2738.79 4443.62 2738.79 4438.22 c
f
n
2778.7 4404.82 m
2778.7 4399.43 2774.33 4395.05 2768.93 4395.05 c
2763.53 4395.05 2759.16 4399.43 2759.16 4404.82 c
2759.16 4410.22 2763.53 4414.6 2768.93 4414.6 c
2774.33 4414.6 2778.7 4410.22 2778.7 4404.82 c
f
n
2818.62 4372.24 m
2818.62 4366.84 2814.24 4362.46 2808.84 4362.46 c
2803.45 4362.46 2799.07 4366.84 2799.07 4372.24 c
2799.07 4377.64 2803.45 4382.02 2808.84 4382.02 c
2814.24 4382.02 2818.62 4377.64 2818.62 4372.24 c
f
n
2858.54 4339.66 m
2858.54 4334.26 2854.16 4329.88 2848.76 4329.88 c
2843.36 4329.88 2838.98 4334.26 2838.98 4339.66 c
2838.98 4345.05 2843.36 4349.43 2848.76 4349.43 c
2854.16 4349.43 2858.54 4345.05 2858.54 4339.66 c
f
n
2898.45 4307.07 m
2898.45 4301.67 2894.07 4297.3 2888.68 4297.3 c
2883.28 4297.3 2878.9 4301.67 2878.9 4307.07 c
2878.9 4312.47 2883.28 4316.85 2888.68 4316.85 c
2894.07 4316.85 2898.45 4312.47 2898.45 4307.07 c
f
n
2938.36 4273.67 m
2938.36 4268.27 2933.99 4263.9 2928.59 4263.9 c
2923.19 4263.9 2918.82 4268.27 2918.82 4273.67 c
2918.82 4279.07 2923.19 4283.45 2928.59 4283.45 c
2933.99 4283.45 2938.36 4279.07 2938.36 4273.67 c
f
n
2978.28 4241.09 m
2978.28 4235.69 2973.9 4231.32 2968.5 4231.32 c
2963.11 4231.32 2958.73 4235.69 2958.73 4241.09 c
2958.73 4246.49 2963.11 4250.86 2968.5 4250.86 c
2973.9 4250.86 2978.28 4246.49 2978.28 4241.09 c
f
n
3018.2 4208.51 m
3018.2 4203.11 3013.82 4198.73 3008.42 4198.73 c
3003.02 4198.73 2998.64 4203.11 2998.64 4208.51 c
2998.64 4213.91 3003.02 4218.28 3008.42 4218.28 c
3013.82 4218.28 3018.2 4213.91 3018.2 4208.51 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3098.84 4142.52 m
3098.84 4137.12 3094.46 4132.75 3089.07 4132.75 c
3083.67 4132.75 3079.29 4137.12 3079.29 4142.52 c
3079.29 4147.92 3083.67 4152.3 3089.07 4152.3 c
3094.46 4152.3 3098.84 4147.92 3098.84 4142.52 c
f
n
3138.75 4109.94 m
3138.75 4104.54 3134.38 4100.16 3128.98 4100.16 c
3123.58 4100.16 3119.2 4104.54 3119.2 4109.94 c
3119.2 4115.34 3123.58 4119.71 3128.98 4119.71 c
3134.38 4119.71 3138.75 4115.34 3138.75 4109.94 c
f
n
3178.67 4077.36 m
3178.67 4071.96 3174.29 4067.58 3168.89 4067.58 c
3163.5 4067.58 3159.12 4071.96 3159.12 4077.36 c
3159.12 4082.75 3163.5 4087.13 3168.89 4087.13 c
3174.29 4087.13 3178.67 4082.75 3178.67 4077.36 c
f
n
3218.59 4043.96 m
3218.59 4038.56 3214.21 4034.18 3208.81 4034.18 c
3203.41 4034.18 3199.04 4038.56 3199.04 4043.96 c
3199.04 4049.36 3203.41 4053.73 3208.81 4053.73 c
3214.21 4053.73 3218.59 4049.36 3218.59 4043.96 c
f
n
3258.5 4011.38 m
3258.5 4005.98 3254.12 4001.6 3248.72 4001.6 c
3243.32 4001.6 3238.95 4005.98 3238.95 4011.38 c
3238.95 4016.77 3243.32 4021.15 3248.72 4021.15 c
3254.12 4021.15 3258.5 4016.77 3258.5 4011.38 c
f
n
3298.41 3978.79 m
3298.41 3973.39 3294.04 3969.02 3288.64 3969.02 c
3283.24 3969.02 3278.86 3973.39 3278.86 3978.79 c
3278.86 3984.19 3283.24 3988.57 3288.64 3988.57 c
3294.04 3988.57 3298.41 3984.19 3298.41 3978.79 c
f
n
3338.33 3946.21 m
3338.33 3940.81 3333.95 3936.43 3328.55 3936.43 c
3323.16 3936.43 3318.78 3940.81 3318.78 3946.21 c
3318.78 3951.61 3323.16 3955.98 3328.55 3955.98 c
3333.95 3955.98 3338.33 3951.61 3338.33 3946.21 c
f
n
3378.25 3912.81 m
3378.25 3907.41 3373.87 3903.04 3368.47 3903.04 c
3363.07 3903.04 3358.7 3907.41 3358.7 3912.81 c
3358.7 3918.21 3363.07 3922.59 3368.47 3922.59 c
3373.87 3922.59 3378.25 3918.21 3378.25 3912.81 c
f
n
3418.16 3880.23 m
3418.16 3874.83 3413.78 3870.45 3408.38 3870.45 c
3402.98 3870.45 3398.61 3874.83 3398.61 3880.23 c
3398.61 3885.62 3402.98 3890.0 3408.38 3890.0 c
3413.78 3890.0 3418.16 3885.62 3418.16 3880.23 c
f
n
3458.07 3847.64 m
3458.07 3842.24 3453.7 3837.87 3448.3 3837.87 c
3442.9 3837.87 3438.52 3842.24 3438.52 3847.64 c
3438.52 3853.04 3442.9 3857.42 3448.3 3857.42 c
3453.7 3857.42 3458.07 3853.04 3458.07 3847.64 c
f
n
2671.18 4434.15 m
2671.18 4428.75 2666.8 4424.37 2661.4 4424.37 c
2656.0 4424.37 2651.63 4428.75 2651.63 4434.15 c
2651.63 4439.55 2656.0 4443.92 2661.4 4443.92 c
2666.8 4443.92 2671.18 4439.55 2671.18 4434.15 c
f
n
2714.35 4405.64 m
2714.35 4400.24 2709.98 4395.86 2704.58 4395.86 c
2699.18 4395.86 2694.8 4400.24 2694.8 4405.64 c
2694.8 4411.04 2699.18 4415.41 2704.58 4415.41 c
2709.98 4415.41 2714.35 4411.04 2714.35 4405.64 c
f
n
2757.53 4376.31 m
2757.53 4370.91 2753.15 4366.54 2747.75 4366.54 c
2742.35 4366.54 2737.98 4370.91 2737.98 4376.31 c
2737.98 4381.71 2742.35 4386.09 2747.75 4386.09 c
2753.15 4386.09 2757.53 4381.71 2757.53 4376.31 c
f
n
2800.7 4347.8 m
2800.7 4342.4 2796.32 4338.03 2790.93 4338.03 c
2785.53 4338.03 2781.15 4342.4 2781.15 4347.8 c
2781.15 4353.2 2785.53 4357.58 2790.93 4357.58 c
2796.32 4357.58 2800.7 4353.2 2800.7 4347.8 c
f
n
2843.87 4319.29 m
2843.87 4313.89 2839.5 4309.52 2834.1 4309.52 c
2828.7 4309.52 2824.32 4313.89 2824.32 4319.29 c
2824.32 4324.69 2828.7 4329.07 2834.1 4329.07 c
2839.5 4329.07 2843.87 4324.69 2843.87 4319.29 c
f
n
2886.23 4290.78 m
2886.23 4285.38 2881.86 4281.0 2876.46 4281.0 c
2871.06 4281.0 2866.68 4285.38 2866.68 4290.78 c
2866.68 4296.18 2871.06 4300.55 2876.46 4300.55 c
2881.86 4300.55 2886.23 4296.18 2886.23 4290.78 c
f
n
2929.41 4261.45 m
2929.41 4256.05 2925.03 4251.68 2919.63 4251.68 c
2914.23 4251.68 2909.86 4256.05 2909.86 4261.45 c
2909.86 4266.85 2914.23 4271.23 2919.63 4271.23 c
2925.03 4271.23 2929.41 4266.85 2929.41 4261.45 c
f
n
2972.58 4232.95 m
2972.58 4227.55 2968.2 4223.17 2962.8 4223.17 c
2957.41 4223.17 2953.03 4227.55 2953.03 4232.95 c
2953.03 4238.34 2957.41 4242.72 2962.8 4242.72 c
2968.2 4242.72 2972.58 4238.34 2972.58 4232.95 c
f
n
3015.75 4204.43 m
3015.75 4199.04 3011.38 4194.66 3005.98 4194.66 c
3000.58 4194.66 2996.2 4199.04 2996.2 4204.43 c
2996.2 4209.83 3000.58 4214.21 3005.98 4214.21 c
3011.38 4214.21 3015.75 4209.83 3015.75 4204.43 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3101.29 4146.6 m
3101.29 4141.2 3096.91 4136.82 3091.51 4136.82 c
3086.11 4136.82 3081.73 4141.2 3081.73 4146.6 c
3081.73 4152.0 3086.11 4156.37 3091.51 4156.37 c
3096.91 4156.37 3101.29 4152.0 3101.29 4146.6 c
f
n
3144.46 4118.09 m
3144.46 4112.69 3140.08 4108.31 3134.68 4108.31 c
3129.28 4108.31 3124.91 4112.69 3124.91 4118.09 c
3124.91 4123.48 3129.28 4127.86 3134.68 4127.86 c
3140.08 4127.86 3144.46 4123.48 3144.46 4118.09 c
f
n
3187.63 4089.57 m
3187.63 4084.18 3183.25 4079.8 3177.86 4079.8 c
3172.46 4079.8 3168.08 4084.18 3168.08 4089.57 c
3168.08 4094.97 3172.46 4099.35 3177.86 4099.35 c
3183.25 4099.35 3187.63 4094.97 3187.63 4089.57 c
f
n
3230.8 4060.25 m
3230.8 4054.85 3226.43 4050.48 3221.03 4050.48 c
3215.63 4050.48 3211.25 4054.85 3211.25 4060.25 c
3211.25 4065.65 3215.63 4070.03 3221.03 4070.03 c
3226.43 4070.03 3230.8 4065.65 3230.8 4060.25 c
f
n
3273.16 4031.74 m
3273.16 4026.34 3268.79 4021.96 3263.39 4021.96 c
3257.99 4021.96 3253.61 4026.34 3253.61 4031.74 c
3253.61 4037.14 3257.99 4041.52 3263.39 4041.52 c
3268.79 4041.52 3273.16 4037.14 3273.16 4031.74 c
f
n
3316.34 4003.23 m
3316.34 3997.83 3311.96 3993.45 3306.56 3993.45 c
3301.16 3993.45 3296.79 3997.83 3296.79 4003.23 c
3296.79 4008.63 3301.16 4013.0 3306.56 4013.0 c
3311.96 4013.0 3316.34 4008.63 3316.34 4003.23 c
f
n
3359.51 3974.72 m
3359.51 3969.32 3355.13 3964.94 3349.73 3964.94 c
3344.34 3964.94 3339.96 3969.32 3339.96 3974.72 c
3339.96 3980.12 3344.34 3984.49 3349.73 3984.49 c
3355.13 3984.49 3359.51 3980.12 3359.51 3974.72 c
f
n
3402.68 3945.39 m
3402.68 3940.0 3398.3 3935.62 3392.91 3935.62 c
3387.51 3935.62 3383.13 3940.0 3383.13 3945.39 c
3383.13 3950.79 3387.51 3955.17 3392.91 3955.17 c
3398.3 3955.17 3402.68 3950.79 3402.68 3945.39 c
f
n
3445.86 3916.88 m
3445.86 3911.48 3441.48 3907.11 3436.08 3907.11 c
3430.68 3907.11 3426.3 3911.48 3426.3 3916.88 c
3426.3 3922.28 3430.68 3926.66 3436.08 3926.66 c
3441.48 3926.66 3445.86 3922.28 3445.86 3916.88 c
f
n
2647.55 4395.05 m
2647.55 4389.65 2643.18 4385.27 2637.78 4385.27 c
2632.38 4385.27 2628.0 4389.65 2628.0 4395.05 c
2628.0 4400.45 2632.38 4404.82 2637.78 4404.82 c
2643.18 4404.82 2647.55 4400.45 2647.55 4395.05 c
f
n
2693.17 4370.61 m
2693.17 4365.21 2688.8 4360.84 2683.4 4360.84 c
2678.0 4360.84 2673.62 4365.21 2673.62 4370.61 c
2673.62 4376.01 2678.0 4380.39 2683.4 4380.39 c
2688.8 4380.39 2693.17 4376.01 2693.17 4370.61 c
f
n
2738.79 4346.17 m
2738.79 4340.77 2734.41 4336.4 2729.02 4336.4 c
2723.62 4336.4 2719.24 4340.77 2719.24 4346.17 c
2719.24 4351.57 2723.62 4355.95 2729.02 4355.95 c
2734.41 4355.95 2738.79 4351.57 2738.79 4346.17 c
f
n
2784.41 4321.73 m
2784.41 4316.34 2780.03 4311.96 2774.63 4311.96 c
2769.23 4311.96 2764.86 4316.34 2764.86 4321.73 c
2764.86 4327.13 2769.23 4331.51 2774.63 4331.51 c
2780.03 4331.51 2784.41 4327.13 2784.41 4321.73 c
f
n
2830.02 4297.3 m
2830.02 4291.9 2825.65 4287.52 2820.25 4287.52 c
2814.85 4287.52 2810.47 4291.9 2810.47 4297.3 c
2810.47 4302.7 2814.85 4307.07 2820.25 4307.07 c
2825.65 4307.07 2830.02 4302.7 2830.02 4297.3 c
f
n
2875.64 4272.86 m
2875.64 4267.46 2871.27 4263.08 2865.87 4263.08 c
2860.47 4263.08 2856.09 4267.46 2856.09 4272.86 c
2856.09 4278.26 2860.47 4282.63 2865.87 4282.63 c
2871.27 4282.63 2875.64 4278.26 2875.64 4272.86 c
f
n
2921.26 4248.42 m
2921.26 4243.02 2916.88 4238.64 2911.48 4238.64 c
2906.09 4238.64 2901.71 4243.02 2901.71 4248.42 c
2901.71 4253.82 2906.09 4258.2 2911.48 4258.2 c
2916.88 4258.2 2921.26 4253.82 2921.26 4248.42 c
f
n
2966.88 4223.98 m
2966.88 4218.59 2962.5 4214.21 2957.1 4214.21 c
2951.7 4214.21 2947.32 4218.59 2947.32 4223.98 c
2947.32 4229.38 2951.7 4233.76 2957.1 4233.76 c
2962.5 4233.76 2966.88 4229.38 2966.88 4223.98 c
f
n
3012.49 4199.55 m
3012.49 4194.15 3008.12 4189.77 3002.72 4189.77 c
2997.32 4189.77 2992.94 4194.15 2992.94 4199.55 c
2992.94 4204.95 2997.32 4209.32 3002.72 4209.32 c
3008.12 4209.32 3012.49 4204.95 3012.49 4199.55 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3104.54 4151.48 m
3104.54 4146.09 3100.16 4141.71 3094.77 4141.71 c
3089.37 4141.71 3084.99 4146.09 3084.99 4151.48 c
3084.99 4156.88 3089.37 4161.26 3094.77 4161.26 c
3100.16 4161.26 3104.54 4156.88 3104.54 4151.48 c
f
n
3150.16 4127.05 m
3150.16 4121.65 3145.78 4117.27 3140.38 4117.27 c
3134.98 4117.27 3130.61 4121.65 3130.61 4127.05 c
3130.61 4132.45 3134.98 4136.82 3140.38 4136.82 c
3145.78 4136.82 3150.16 4132.45 3150.16 4127.05 c
f
n
3195.78 4102.61 m
3195.78 4097.21 3191.4 4092.84 3186.0 4092.84 c
3180.6 4092.84 3176.23 4097.21 3176.23 4102.61 c
3176.23 4108.01 3180.6 4112.38 3186.0 4112.38 c
3191.4 4112.38 3195.78 4108.01 3195.78 4102.61 c
f
n
3241.39 4078.17 m
3241.39 4072.77 3237.02 4068.39 3231.62 4068.39 c
3226.22 4068.39 3221.84 4072.77 3221.84 4078.17 c
3221.84 4083.57 3226.22 4087.95 3231.62 4087.95 c
3237.02 4087.95 3241.39 4083.57 3241.39 4078.17 c
f
n
3287.01 4053.73 m
3287.01 4048.34 3282.63 4043.96 3277.23 4043.96 c
3271.84 4043.96 3267.46 4048.34 3267.46 4053.73 c
3267.46 4059.13 3271.84 4063.51 3277.23 4063.51 c
3282.63 4063.51 3287.01 4059.13 3287.01 4053.73 c
f
n
3332.63 4029.3 m
3332.63 4023.9 3328.25 4019.52 3322.85 4019.52 c
3317.45 4019.52 3313.08 4023.9 3313.08 4029.3 c
3313.08 4034.7 3317.45 4039.07 3322.85 4039.07 c
3328.25 4039.07 3332.63 4034.7 3332.63 4029.3 c
f
n
3378.25 4004.86 m
3378.25 3999.46 3373.87 3995.08 3368.47 3995.08 c
3363.07 3995.08 3358.7 3999.46 3358.7 4004.86 c
3358.7 4010.26 3363.07 4014.63 3368.47 4014.63 c
3373.87 4014.63 3378.25 4010.26 3378.25 4004.86 c
f
n
3423.86 3980.42 m
3423.86 3975.02 3419.48 3970.64 3414.09 3970.64 c
3408.69 3970.64 3404.31 3975.02 3404.31 3980.42 c
3404.31 3985.82 3408.69 3990.2 3414.09 3990.2 c
3419.48 3990.2 3423.86 3985.82 3423.86 3980.42 c
f
n
3469.48 3955.98 m
3469.48 3950.59 3465.1 3946.21 3459.7 3946.21 c
3454.3 3946.21 3449.93 3950.59 3449.93 3955.98 c
3449.93 3961.38 3454.3 3965.76 3459.7 3965.76 c
3465.1 3965.76 3469.48 3961.38 3469.48 3955.98 c
f
n
2676.07 4333.95 m
2676.07 4328.55 2671.69 4324.18 2666.29 4324.18 c
2660.89 4324.18 2656.52 4328.55 2656.52 4333.95 c
2656.52 4339.35 2660.89 4343.73 2666.29 4343.73 c
2671.69 4343.73 2676.07 4339.35 2676.07 4333.95 c
f
n
2724.13 4314.4 m
2724.13 4309.0 2719.75 4304.63 2714.35 4304.63 c
2708.95 4304.63 2704.58 4309.0 2704.58 4314.4 c
2704.58 4319.8 2708.95 4324.18 2714.35 4324.18 c
2719.75 4324.18 2724.13 4319.8 2724.13 4314.4 c
f
n
2772.19 4294.04 m
2772.19 4288.64 2767.81 4284.26 2762.41 4284.26 c
2757.02 4284.26 2752.64 4288.64 2752.64 4294.04 c
2752.64 4299.44 2757.02 4303.81 2762.41 4303.81 c
2767.81 4303.81 2772.19 4299.44 2772.19 4294.04 c
f
n
2819.43 4274.49 m
2819.43 4269.09 2815.06 4264.71 2809.66 4264.71 c
2804.26 4264.71 2799.88 4269.09 2799.88 4274.49 c
2799.88 4279.89 2804.26 4284.26 2809.66 4284.26 c
2815.06 4284.26 2819.43 4279.89 2819.43 4274.49 c
f
n
2867.5 4254.94 m
2867.5 4249.54 2863.12 4245.16 2857.72 4245.16 c
2852.32 4245.16 2847.95 4249.54 2847.95 4254.94 c
2847.95 4260.34 2852.32 4264.71 2857.72 4264.71 c
2863.12 4264.71 2867.5 4260.34 2867.5 4254.94 c
f
n
2915.55 4234.57 m
2915.55 4229.18 2911.18 4224.8 2905.78 4224.8 c
2900.38 4224.8 2896.01 4229.18 2896.01 4234.57 c
2896.01 4239.97 2900.38 4244.35 2905.78 4244.35 c
2911.18 4244.35 2915.55 4239.97 2915.55 4234.57 c
f
n
2962.8 4215.02 m
2962.8 4209.62 2958.43 4205.25 2953.03 4205.25 c
2947.63 4205.25 2943.25 4209.62 2943.25 4215.02 c
2943.25 4220.42 2947.63 4224.8 2953.03 4224.8 c
2958.43 4224.8 2962.8 4220.42 2962.8 4215.02 c
f
n
3010.86 4195.47 m
3010.86 4190.07 3006.49 4185.7 3001.09 4185.7 c
2995.69 4185.7 2991.31 4190.07 2991.31 4195.47 c
2991.31 4200.87 2995.69 4205.25 3001.09 4205.25 c
3006.49 4205.25 3010.86 4200.87 3010.86 4195.47 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3106.17 4155.56 m
3106.17 4150.16 3101.79 4145.78 3096.39 4145.78 c
3091.0 4145.78 3086.62 4150.16 3086.62 4155.56 c
3086.62 4160.96 3091.0 4165.33 3096.39 4165.33 c
3101.79 4165.33 3106.17 4160.96 3106.17 4155.56 c
f
n
3154.23 4136.01 m
3154.23 4130.61 3149.86 4126.23 3144.46 4126.23 c
3139.06 4126.23 3134.68 4130.61 3134.68 4136.01 c
3134.68 4141.41 3139.06 4145.78 3144.46 4145.78 c
3149.86 4145.78 3154.23 4141.41 3154.23 4136.01 c
f
n
3201.48 4116.46 m
3201.48 4111.06 3197.1 4106.68 3191.7 4106.68 c
3186.3 4106.68 3181.93 4111.06 3181.93 4116.46 c
3181.93 4121.86 3186.3 4126.23 3191.7 4126.23 c
3197.1 4126.23 3201.48 4121.86 3201.48 4116.46 c
f
n
3249.54 4096.09 m
3249.54 4090.7 3245.16 4086.32 3239.77 4086.32 c
3234.37 4086.32 3229.99 4090.7 3229.99 4096.09 c
3229.99 4101.49 3234.37 4105.87 3239.77 4105.87 c
3245.16 4105.87 3249.54 4101.49 3249.54 4096.09 c
f
n
3297.6 4076.54 m
3297.6 4071.14 3293.22 4066.77 3287.82 4066.77 c
3282.43 4066.77 3278.05 4071.14 3278.05 4076.54 c
3278.05 4081.94 3282.43 4086.32 3287.82 4086.32 c
3293.22 4086.32 3297.6 4081.94 3297.6 4076.54 c
f
n
3344.85 4056.99 m
3344.85 4051.59 3340.47 4047.22 3335.07 4047.22 c
3329.67 4047.22 3325.3 4051.59 3325.3 4056.99 c
3325.3 4062.39 3329.67 4066.77 3335.07 4066.77 c
3340.47 4066.77 3344.85 4062.39 3344.85 4056.99 c
f
n
3392.91 4036.63 m
3392.91 4031.23 3388.53 4026.85 3383.13 4026.85 c
3377.73 4026.85 3373.36 4031.23 3373.36 4036.63 c
3373.36 4042.03 3377.73 4046.4 3383.13 4046.4 c
3388.53 4046.4 3392.91 4042.03 3392.91 4036.63 c
f
n
3440.97 4017.08 m
3440.97 4011.68 3436.59 4007.3 3431.19 4007.3 c
3425.79 4007.3 3421.42 4011.68 3421.42 4017.08 c
3421.42 4022.48 3425.79 4026.85 3431.19 4026.85 c
3436.59 4026.85 3440.97 4022.48 3440.97 4017.08 c
f
n
2662.22 4295.67 m
2662.22 4290.27 2657.84 4285.89 2652.45 4285.89 c
2647.05 4285.89 2642.67 4290.27 2642.67 4295.67 c
2642.67 4301.07 2647.05 4305.44 2652.45 4305.44 c
2657.84 4305.44 2662.22 4301.07 2662.22 4295.67 c
f
n
2711.91 4281.0 m
2711.91 4275.61 2707.53 4271.23 2702.13 4271.23 c
2696.73 4271.23 2692.36 4275.61 2692.36 4281.0 c
2692.36 4286.4 2696.73 4290.78 2702.13 4290.78 c
2707.53 4290.78 2711.91 4286.4 2711.91 4281.0 c
f
n
2761.6 4265.53 m
2761.6 4260.13 2757.22 4255.75 2751.82 4255.75 c
2746.43 4255.75 2742.05 4260.13 2742.05 4265.53 c
2742.05 4270.93 2746.43 4275.3 2751.82 4275.3 c
2757.22 4275.3 2761.6 4270.93 2761.6 4265.53 c
f
n
2811.29 4250.86 m
2811.29 4245.46 2806.91 4241.09 2801.51 4241.09 c
2796.11 4241.09 2791.74 4245.46 2791.74 4250.86 c
2791.74 4256.26 2796.11 4260.64 2801.51 4260.64 c
2806.91 4260.64 2811.29 4256.26 2811.29 4250.86 c
f
n
2860.16 4235.39 m
2860.16 4229.99 2855.79 4225.61 2850.39 4225.61 c
2844.99 4225.61 2840.61 4229.99 2840.61 4235.39 c
2840.61 4240.79 2844.99 4245.16 2850.39 4245.16 c
2855.79 4245.16 2860.16 4240.79 2860.16 4235.39 c
f
n
2909.86 4220.73 m
2909.86 4215.33 2905.48 4210.95 2900.08 4210.95 c
2894.68 4210.95 2890.3 4215.33 2890.3 4220.73 c
2890.3 4226.12 2894.68 4230.5 2900.08 4230.5 c
2905.48 4230.5 2909.86 4226.12 2909.86 4220.73 c
f
n
2959.54 4205.25 m
2959.54 4199.85 2955.17 4195.47 2949.77 4195.47 c
2944.37 4195.47 2940.0 4199.85 2940.0 4205.25 c
2940.0 4210.64 2944.37 4215.02 2949.77 4215.02 c
2955.17 4215.02 2959.54 4210.64 2959.54 4205.25 c
f
n
3009.23 4190.59 m
3009.23 4185.19 3004.86 4180.81 2999.46 4180.81 c
2994.06 4180.81 2989.68 4185.19 2989.68 4190.59 c
2989.68 4195.98 2994.06 4200.36 2999.46 4200.36 c
3004.86 4200.36 3009.23 4195.98 3009.23 4190.59 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3107.8 4160.45 m
3107.8 4155.05 3103.42 4150.67 3098.02 4150.67 c
3092.62 4150.67 3088.25 4155.05 3088.25 4160.45 c
3088.25 4165.84 3092.62 4170.22 3098.02 4170.22 c
3103.42 4170.22 3107.8 4165.84 3107.8 4160.45 c
f
n
3157.49 4145.78 m
3157.49 4140.38 3153.11 4136.01 3147.71 4136.01 c
3142.32 4136.01 3137.94 4140.38 3137.94 4145.78 c
3137.94 4151.18 3142.32 4155.56 3147.71 4155.56 c
3153.11 4155.56 3157.49 4151.18 3157.49 4145.78 c
f
n
3207.18 4130.3 m
3207.18 4124.91 3202.8 4120.53 3197.41 4120.53 c
3192.01 4120.53 3187.63 4124.91 3187.63 4130.3 c
3187.63 4135.7 3192.01 4140.08 3197.41 4140.08 c
3202.8 4140.08 3207.18 4135.7 3207.18 4130.3 c
f
n
3256.87 4115.64 m
3256.87 4110.25 3252.49 4105.87 3247.09 4105.87 c
3241.7 4105.87 3237.32 4110.25 3237.32 4115.64 c
3237.32 4121.04 3241.7 4125.42 3247.09 4125.42 c
3252.49 4125.42 3256.87 4121.04 3256.87 4115.64 c
f
n
3305.75 4100.16 m
3305.75 4094.77 3301.37 4090.39 3295.97 4090.39 c
3290.57 4090.39 3286.2 4094.77 3286.2 4100.16 c
3286.2 4105.56 3290.57 4109.94 3295.97 4109.94 c
3301.37 4109.94 3305.75 4105.56 3305.75 4100.16 c
f
n
3355.44 4085.5 m
3355.44 4080.11 3351.06 4075.73 3345.66 4075.73 c
3340.26 4075.73 3335.89 4080.11 3335.89 4085.5 c
3335.89 4090.9 3340.26 4095.28 3345.66 4095.28 c
3351.06 4095.28 3355.44 4090.9 3355.44 4085.5 c
f
n
3405.12 4070.03 m
3405.12 4064.63 3400.75 4060.25 3395.35 4060.25 c
3389.95 4060.25 3385.57 4064.63 3385.57 4070.03 c
3385.57 4075.43 3389.95 4079.8 3395.35 4079.8 c
3400.75 4079.8 3405.12 4075.43 3405.12 4070.03 c
f
n
3454.82 4055.36 m
3454.82 4049.96 3450.44 4045.59 3445.04 4045.59 c
3439.64 4045.59 3435.27 4049.96 3435.27 4055.36 c
3435.27 4060.76 3439.64 4065.14 3445.04 4065.14 c
3450.44 4065.14 3454.82 4060.76 3454.82 4055.36 c
f
n
2652.45 4256.57 m
2652.45 4251.17 2648.07 4246.79 2642.67 4246.79 c
2637.27 4246.79 2632.89 4251.17 2632.89 4256.57 c
2632.89 4261.96 2637.27 4266.34 2642.67 4266.34 c
2648.07 4266.34 2652.45 4261.96 2652.45 4256.57 c
f
n
2703.76 4245.98 m
2703.76 4240.58 2699.39 4236.2 2693.99 4236.2 c
2688.59 4236.2 2684.21 4240.58 2684.21 4245.98 c
2684.21 4251.38 2688.59 4255.75 2693.99 4255.75 c
2699.39 4255.75 2703.76 4251.38 2703.76 4245.98 c
f
n
2754.27 4236.2 m
2754.27 4230.8 2749.89 4226.43 2744.49 4226.43 c
2739.09 4226.43 2734.72 4230.8 2734.72 4236.2 c
2734.72 4241.6 2739.09 4245.98 2744.49 4245.98 c
2749.89 4245.98 2754.27 4241.6 2754.27 4236.2 c
f
n
2804.77 4225.61 m
2804.77 4220.21 2800.39 4215.84 2795.0 4215.84 c
2789.6 4215.84 2785.22 4220.21 2785.22 4225.61 c
2785.22 4231.01 2789.6 4235.39 2795.0 4235.39 c
2800.39 4235.39 2804.77 4231.01 2804.77 4225.61 c
f
n
2855.28 4215.84 m
2855.28 4210.44 2850.9 4206.06 2845.5 4206.06 c
2840.1 4206.06 2835.73 4210.44 2835.73 4215.84 c
2835.73 4221.23 2840.1 4225.61 2845.5 4225.61 c
2850.9 4225.61 2855.28 4221.23 2855.28 4215.84 c
f
n
2906.6 4206.06 m
2906.6 4200.66 2902.22 4196.29 2896.82 4196.29 c
2891.42 4196.29 2887.05 4200.66 2887.05 4206.06 c
2887.05 4211.46 2891.42 4215.84 2896.82 4215.84 c
2902.22 4215.84 2906.6 4211.46 2906.6 4206.06 c
f
n
2957.1 4195.47 m
2957.1 4190.07 2952.72 4185.7 2947.32 4185.7 c
2941.93 4185.7 2937.55 4190.07 2937.55 4195.47 c
2937.55 4200.87 2941.93 4205.25 2947.32 4205.25 c
2952.72 4205.25 2957.1 4200.87 2957.1 4195.47 c
f
n
3007.61 4185.7 m
3007.61 4180.3 3003.23 4175.92 2997.83 4175.92 c
2992.43 4175.92 2988.05 4180.3 2988.05 4185.7 c
2988.05 4191.1 2992.43 4195.47 2997.83 4195.47 c
3003.23 4195.47 3007.61 4191.1 3007.61 4185.7 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3109.43 4165.33 m
3109.43 4159.93 3105.05 4155.56 3099.65 4155.56 c
3094.25 4155.56 3089.88 4159.93 3089.88 4165.33 c
3089.88 4170.73 3094.25 4175.11 3099.65 4175.11 c
3105.05 4175.11 3109.43 4170.73 3109.43 4165.33 c
f
n
3159.93 4155.56 m
3159.93 4150.16 3155.56 4145.78 3150.16 4145.78 c
3144.76 4145.78 3140.38 4150.16 3140.38 4155.56 c
3140.38 4160.96 3144.76 4165.33 3150.16 4165.33 c
3155.56 4165.33 3159.93 4160.96 3159.93 4155.56 c
f
n
3210.44 4144.97 m
3210.44 4139.57 3206.06 4135.19 3200.66 4135.19 c
3195.27 4135.19 3190.89 4139.57 3190.89 4144.97 c
3190.89 4150.37 3195.27 4154.74 3200.66 4154.74 c
3206.06 4154.74 3210.44 4150.37 3210.44 4144.97 c
f
n
3261.76 4135.19 m
3261.76 4129.79 3257.38 4125.42 3251.98 4125.42 c
3246.59 4125.42 3242.21 4129.79 3242.21 4135.19 c
3242.21 4140.59 3246.59 4144.97 3251.98 4144.97 c
3257.38 4144.97 3261.76 4140.59 3261.76 4135.19 c
f
n
3312.26 4125.42 m
3312.26 4120.02 3307.89 4115.64 3302.49 4115.64 c
3297.09 4115.64 3292.71 4120.02 3292.71 4125.42 c
3292.71 4130.82 3297.09 4135.19 3302.49 4135.19 c
3307.89 4135.19 3312.26 4130.82 3312.26 4125.42 c
f
n
3362.77 4114.83 m
3362.77 4109.43 3358.39 4105.05 3352.99 4105.05 c
3347.59 4105.05 3343.22 4109.43 3343.22 4114.83 c
3343.22 4120.23 3347.59 4124.6 3352.99 4124.6 c
3358.39 4124.6 3362.77 4120.23 3362.77 4114.83 c
f
n
3413.27 4105.05 m
3413.27 4099.66 3408.89 4095.28 3403.5 4095.28 c
3398.1 4095.28 3393.72 4099.66 3393.72 4105.05 c
3393.72 4110.45 3398.1 4114.83 3403.5 4114.83 c
3408.89 4114.83 3413.27 4110.45 3413.27 4105.05 c
f
n
3464.59 4094.46 m
3464.59 4089.07 3460.21 4084.69 3454.82 4084.69 c
3449.42 4084.69 3445.04 4089.07 3445.04 4094.46 c
3445.04 4099.86 3449.42 4104.24 3454.82 4104.24 c
3460.21 4104.24 3464.59 4099.86 3464.59 4094.46 c
f
n
2646.74 4215.84 m
2646.74 4210.44 2642.36 4206.06 2636.96 4206.06 c
2631.57 4206.06 2627.19 4210.44 2627.19 4215.84 c
2627.19 4221.23 2631.57 4225.61 2636.96 4225.61 c
2642.36 4225.61 2646.74 4221.23 2646.74 4215.84 c
f
n
2698.06 4210.95 m
2698.06 4205.55 2693.68 4201.18 2688.29 4201.18 c
2682.89 4201.18 2678.51 4205.55 2678.51 4210.95 c
2678.51 4216.35 2682.89 4220.73 2688.29 4220.73 c
2693.68 4220.73 2698.06 4216.35 2698.06 4210.95 c
f
n
2749.38 4206.06 m
2749.38 4200.66 2745.0 4196.29 2739.61 4196.29 c
2734.21 4196.29 2729.83 4200.66 2729.83 4206.06 c
2729.83 4211.46 2734.21 4215.84 2739.61 4215.84 c
2745.0 4215.84 2749.38 4211.46 2749.38 4206.06 c
f
n
2801.51 4201.18 m
2801.51 4195.78 2797.14 4191.4 2791.74 4191.4 c
2786.34 4191.4 2781.96 4195.78 2781.96 4201.18 c
2781.96 4206.57 2786.34 4210.95 2791.74 4210.95 c
2797.14 4210.95 2801.51 4206.57 2801.51 4201.18 c
f
n
2852.83 4195.47 m
2852.83 4190.07 2848.46 4185.7 2843.06 4185.7 c
2837.66 4185.7 2833.28 4190.07 2833.28 4195.47 c
2833.28 4200.87 2837.66 4205.25 2843.06 4205.25 c
2848.46 4205.25 2852.83 4200.87 2852.83 4195.47 c
f
n
2904.15 4190.59 m
2904.15 4185.19 2899.78 4180.81 2894.38 4180.81 c
2888.98 4180.81 2884.6 4185.19 2884.6 4190.59 c
2884.6 4195.98 2888.98 4200.36 2894.38 4200.36 c
2899.78 4200.36 2904.15 4195.98 2904.15 4190.59 c
f
n
2955.47 4185.7 m
2955.47 4180.3 2951.09 4175.92 2945.7 4175.92 c
2940.3 4175.92 2935.92 4180.3 2935.92 4185.7 c
2935.92 4191.1 2940.3 4195.47 2945.7 4195.47 c
2951.09 4195.47 2955.47 4191.1 2955.47 4185.7 c
f
n
3006.79 4180.81 m
3006.79 4175.41 3002.41 4171.04 2997.02 4171.04 c
2991.62 4171.04 2987.24 4175.41 2987.24 4180.81 c
2987.24 4186.21 2991.62 4190.59 2997.02 4190.59 c
3002.41 4190.59 3006.79 4186.21 3006.79 4180.81 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3110.24 4170.22 m
3110.24 4164.82 3105.87 4160.45 3100.47 4160.45 c
3095.07 4160.45 3090.7 4164.82 3090.7 4170.22 c
3090.7 4175.62 3095.07 4180.0 3100.47 4180.0 c
3105.87 4180.0 3110.24 4175.62 3110.24 4170.22 c
f
n
3161.56 4165.33 m
3161.56 4159.93 3157.19 4155.56 3151.79 4155.56 c
3146.39 4155.56 3142.01 4159.93 3142.01 4165.33 c
3142.01 4170.73 3146.39 4175.11 3151.79 4175.11 c
3157.19 4175.11 3161.56 4170.73 3161.56 4165.33 c
f
n
3212.88 4160.45 m
3212.88 4155.05 3208.5 4150.67 3203.11 4150.67 c
3197.71 4150.67 3193.33 4155.05 3193.33 4160.45 c
3193.33 4165.84 3197.71 4170.22 3203.11 4170.22 c
3208.5 4170.22 3212.88 4165.84 3212.88 4160.45 c
f
n
3264.2 4155.56 m
3264.2 4150.16 3259.82 4145.78 3254.43 4145.78 c
3249.03 4145.78 3244.65 4150.16 3244.65 4155.56 c
3244.65 4160.96 3249.03 4165.33 3254.43 4165.33 c
3259.82 4165.33 3264.2 4160.96 3264.2 4155.56 c
f
n
3315.52 4149.86 m
3315.52 4144.46 3311.14 4140.08 3305.75 4140.08 c
3300.35 4140.08 3295.97 4144.46 3295.97 4149.86 c
3295.97 4155.25 3300.35 4159.63 3305.75 4159.63 c
3311.14 4159.63 3315.52 4155.25 3315.52 4149.86 c
f
n
3367.66 4144.97 m
3367.66 4139.57 3363.28 4135.19 3357.88 4135.19 c
3352.48 4135.19 3348.11 4139.57 3348.11 4144.97 c
3348.11 4150.37 3352.48 4154.74 3357.88 4154.74 c
3363.28 4154.74 3367.66 4150.37 3367.66 4144.97 c
f
n
3418.97 4140.08 m
3418.97 4134.68 3414.6 4130.3 3409.2 4130.3 c
3403.8 4130.3 3399.43 4134.68 3399.43 4140.08 c
3399.43 4145.48 3403.8 4149.86 3409.2 4149.86 c
3414.6 4149.86 3418.97 4145.48 3418.97 4140.08 c
f
n
3470.29 4135.19 m
3470.29 4129.79 3465.92 4125.42 3460.52 4125.42 c
3455.12 4125.42 3450.74 4129.79 3450.74 4135.19 c
3450.74 4140.59 3455.12 4144.97 3460.52 4144.97 c
3465.92 4144.97 3470.29 4140.59 3470.29 4135.19 c
f
n
2644.3 4175.92 m
2644.3 4170.52 2639.92 4166.15 2634.52 4166.15 c
2629.12 4166.15 2624.75 4170.52 2624.75 4175.92 c
2624.75 4181.32 2629.12 4185.7 2634.52 4185.7 c
2639.92 4185.7 2644.3 4181.32 2644.3 4175.92 c
f
n
2696.43 4175.92 m
2696.43 4170.52 2692.05 4166.15 2686.66 4166.15 c
2681.26 4166.15 2676.88 4170.52 2676.88 4175.92 c
2676.88 4181.32 2681.26 4185.7 2686.66 4185.7 c
2692.05 4185.7 2696.43 4181.32 2696.43 4175.92 c
f
n
2747.75 4175.92 m
2747.75 4170.52 2743.38 4166.15 2737.98 4166.15 c
2732.58 4166.15 2728.2 4170.52 2728.2 4175.92 c
2728.2 4181.32 2732.58 4185.7 2737.98 4185.7 c
2743.38 4185.7 2747.75 4181.32 2747.75 4175.92 c
f
n
2799.88 4175.92 m
2799.88 4170.52 2795.51 4166.15 2790.11 4166.15 c
2784.71 4166.15 2780.34 4170.52 2780.34 4175.92 c
2780.34 4181.32 2784.71 4185.7 2790.11 4185.7 c
2795.51 4185.7 2799.88 4181.32 2799.88 4175.92 c
f
n
2852.02 4175.92 m
2852.02 4170.52 2847.64 4166.15 2842.24 4166.15 c
2836.84 4166.15 2832.47 4170.52 2832.47 4175.92 c
2832.47 4181.32 2836.84 4185.7 2842.24 4185.7 c
2847.64 4185.7 2852.02 4181.32 2852.02 4175.92 c
f
n
2903.34 4175.92 m
2903.34 4170.52 2898.96 4166.15 2893.56 4166.15 c
2888.16 4166.15 2883.79 4170.52 2883.79 4175.92 c
2883.79 4181.32 2888.16 4185.7 2893.56 4185.7 c
2898.96 4185.7 2903.34 4181.32 2903.34 4175.92 c
f
n
2955.47 4175.92 m
2955.47 4170.52 2951.09 4166.15 2945.7 4166.15 c
2940.3 4166.15 2935.92 4170.52 2935.92 4175.92 c
2935.92 4181.32 2940.3 4185.7 2945.7 4185.7 c
2951.09 4185.7 2955.47 4181.32 2955.47 4175.92 c
f
n
3006.79 4175.92 m
3006.79 4170.52 3002.41 4166.15 2997.02 4166.15 c
2991.62 4166.15 2987.24 4170.52 2987.24 4175.92 c
2987.24 4181.32 2991.62 4185.7 2997.02 4185.7 c
3002.41 4185.7 3006.79 4181.32 3006.79 4175.92 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3110.24 4175.92 m
3110.24 4170.52 3105.87 4166.15 3100.47 4166.15 c
3095.07 4166.15 3090.7 4170.52 3090.7 4175.92 c
3090.7 4181.32 3095.07 4185.7 3100.47 4185.7 c
3105.87 4185.7 3110.24 4181.32 3110.24 4175.92 c
f
n
3162.38 4175.92 m
3162.38 4170.52 3158.0 4166.15 3152.6 4166.15 c
3147.2 4166.15 3142.83 4170.52 3142.83 4175.92 c
3142.83 4181.32 3147.2 4185.7 3152.6 4185.7 c
3158.0 4185.7 3162.38 4181.32 3162.38 4175.92 c
f
n
3213.7 4175.92 m
3213.7 4170.52 3209.32 4166.15 3203.92 4166.15 c
3198.52 4166.15 3194.15 4170.52 3194.15 4175.92 c
3194.15 4181.32 3198.52 4185.7 3203.92 4185.7 c
3209.32 4185.7 3213.7 4181.32 3213.7 4175.92 c
f
n
3265.83 4175.92 m
3265.83 4170.52 3261.45 4166.15 3256.05 4166.15 c
3250.66 4166.15 3246.28 4170.52 3246.28 4175.92 c
3246.28 4181.32 3250.66 4185.7 3256.05 4185.7 c
3261.45 4185.7 3265.83 4181.32 3265.83 4175.92 c
f
n
3317.15 4175.92 m
3317.15 4170.52 3312.77 4166.15 3307.38 4166.15 c
3301.98 4166.15 3297.6 4170.52 3297.6 4175.92 c
3297.6 4181.32 3301.98 4185.7 3307.38 4185.7 c
3312.77 4185.7 3317.15 4181.32 3317.15 4175.92 c
f
n
3369.29 4175.92 m
3369.29 4170.52 3364.91 4166.15 3359.51 4166.15 c
3354.11 4166.15 3349.73 4170.52 3349.73 4175.92 c
3349.73 4181.32 3354.11 4185.7 3359.51 4185.7 c
3364.91 4185.7 3369.29 4181.32 3369.29 4175.92 c
f
n
3420.6 4175.92 m
3420.6 4170.52 3416.23 4166.15 3410.83 4166.15 c
3405.43 4166.15 3401.05 4170.52 3401.05 4175.92 c
3401.05 4181.32 3405.43 4185.7 3410.83 4185.7 c
3416.23 4185.7 3420.6 4181.32 3420.6 4175.92 c
f
n
2646.74 4135.19 m
2646.74 4129.79 2642.36 4125.42 2636.96 4125.42 c
2631.57 4125.42 2627.19 4129.79 2627.19 4135.19 c
2627.19 4140.59 2631.57 4144.97 2636.96 4144.97 c
2642.36 4144.97 2646.74 4140.59 2646.74 4135.19 c
f
n
2698.06 4140.08 m
2698.06 4134.68 2693.68 4130.3 2688.29 4130.3 c
2682.89 4130.3 2678.51 4134.68 2678.51 4140.08 c
2678.51 4145.48 2682.89 4149.86 2688.29 4149.86 c
2693.68 4149.86 2698.06 4145.48 2698.06 4140.08 c
f
n
2749.38 4144.97 m
2749.38 4139.57 2745.0 4135.19 2739.61 4135.19 c
2734.21 4135.19 2729.83 4139.57 2729.83 4144.97 c
2729.83 4150.37 2734.21 4154.74 2739.61 4154.74 c
2745.0 4154.74 2749.38 4150.37 2749.38 4144.97 c
f
n
2801.51 4149.86 m
2801.51 4144.46 2797.14 4140.08 2791.74 4140.08 c
2786.34 4140.08 2781.96 4144.46 2781.96 4149.86 c
2781.96 4155.25 2786.34 4159.63 2791.74 4159.63 c
2797.14 4159.63 2801.51 4155.25 2801.51 4149.86 c
f
n
2852.83 4155.56 m
2852.83 4150.16 2848.46 4145.78 2843.06 4145.78 c
2837.66 4145.78 2833.28 4150.16 2833.28 4155.56 c
2833.28 4160.96 2837.66 4165.33 2843.06 4165.33 c
2848.46 4165.33 2852.83 4160.96 2852.83 4155.56 c
f
n
2904.15 4160.45 m
2904.15 4155.05 2899.78 4150.67 2894.38 4150.67 c
2888.98 4150.67 2884.6 4155.05 2884.6 4160.45 c
2884.6 4165.84 2888.98 4170.22 2894.38 4170.22 c
2899.78 4170.22 2904.15 4165.84 2904.15 4160.45 c
f
n
2955.47 4165.33 m
2955.47 4159.93 2951.09 4155.56 2945.7 4155.56 c
2940.3 4155.56 2935.92 4159.93 2935.92 4165.33 c
2935.92 4170.73 2940.3 4175.11 2945.7 4175.11 c
2951.09 4175.11 2955.47 4170.73 2955.47 4165.33 c
f
n
3006.79 4170.22 m
3006.79 4164.82 3002.41 4160.45 2997.02 4160.45 c
2991.62 4160.45 2987.24 4164.82 2987.24 4170.22 c
2987.24 4175.62 2991.62 4180.0 2997.02 4180.0 c
3002.41 4180.0 3006.79 4175.62 3006.79 4170.22 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3110.24 4180.81 m
3110.24 4175.41 3105.87 4171.04 3100.47 4171.04 c
3095.07 4171.04 3090.7 4175.41 3090.7 4180.81 c
3090.7 4186.21 3095.07 4190.59 3100.47 4190.59 c
3105.87 4190.59 3110.24 4186.21 3110.24 4180.81 c
f
n
3161.56 4185.7 m
3161.56 4180.3 3157.19 4175.92 3151.79 4175.92 c
3146.39 4175.92 3142.01 4180.3 3142.01 4185.7 c
3142.01 4191.1 3146.39 4195.47 3151.79 4195.47 c
3157.19 4195.47 3161.56 4191.1 3161.56 4185.7 c
f
n
3212.88 4190.59 m
3212.88 4185.19 3208.5 4180.81 3203.11 4180.81 c
3197.71 4180.81 3193.33 4185.19 3193.33 4190.59 c
3193.33 4195.98 3197.71 4200.36 3203.11 4200.36 c
3208.5 4200.36 3212.88 4195.98 3212.88 4190.59 c
f
n
3264.2 4195.47 m
3264.2 4190.07 3259.82 4185.7 3254.43 4185.7 c
3249.03 4185.7 3244.65 4190.07 3244.65 4195.47 c
3244.65 4200.87 3249.03 4205.25 3254.43 4205.25 c
3259.82 4205.25 3264.2 4200.87 3264.2 4195.47 c
f
n
3315.52 4201.18 m
3315.52 4195.78 3311.14 4191.4 3305.75 4191.4 c
3300.35 4191.4 3295.97 4195.78 3295.97 4201.18 c
3295.97 4206.57 3300.35 4210.95 3305.75 4210.95 c
3311.14 4210.95 3315.52 4206.57 3315.52 4201.18 c
f
n
3367.66 4206.06 m
3367.66 4200.66 3363.28 4196.29 3357.88 4196.29 c
3352.48 4196.29 3348.11 4200.66 3348.11 4206.06 c
3348.11 4211.46 3352.48 4215.84 3357.88 4215.84 c
3363.28 4215.84 3367.66 4211.46 3367.66 4206.06 c
f
n
3418.97 4210.95 m
3418.97 4205.55 3414.6 4201.18 3409.2 4201.18 c
3403.8 4201.18 3399.43 4205.55 3399.43 4210.95 c
3399.43 4216.35 3403.8 4220.73 3409.2 4220.73 c
3414.6 4220.73 3418.97 4216.35 3418.97 4210.95 c
f
n
3470.29 4215.84 m
3470.29 4210.44 3465.92 4206.06 3460.52 4206.06 c
3455.12 4206.06 3450.74 4210.44 3450.74 4215.84 c
3450.74 4221.23 3455.12 4225.61 3460.52 4225.61 c
3465.92 4225.61 3470.29 4221.23 3470.29 4215.84 c
f
n
2652.45 4094.46 m
2652.45 4089.07 2648.07 4084.69 2642.67 4084.69 c
2637.27 4084.69 2632.89 4089.07 2632.89 4094.46 c
2632.89 4099.86 2637.27 4104.24 2642.67 4104.24 c
2648.07 4104.24 2652.45 4099.86 2652.45 4094.46 c
f
n
2703.76 4105.05 m
2703.76 4099.66 2699.39 4095.28 2693.99 4095.28 c
2688.59 4095.28 2684.21 4099.66 2684.21 4105.05 c
2684.21 4110.45 2688.59 4114.83 2693.99 4114.83 c
2699.39 4114.83 2703.76 4110.45 2703.76 4105.05 c
f
n
2754.27 4114.83 m
2754.27 4109.43 2749.89 4105.05 2744.49 4105.05 c
2739.09 4105.05 2734.72 4109.43 2734.72 4114.83 c
2734.72 4120.23 2739.09 4124.6 2744.49 4124.6 c
2749.89 4124.6 2754.27 4120.23 2754.27 4114.83 c
f
n
2804.77 4125.42 m
2804.77 4120.02 2800.39 4115.64 2795.0 4115.64 c
2789.6 4115.64 2785.22 4120.02 2785.22 4125.42 c
2785.22 4130.82 2789.6 4135.19 2795.0 4135.19 c
2800.39 4135.19 2804.77 4130.82 2804.77 4125.42 c
f
n
2855.28 4135.19 m
2855.28 4129.79 2850.9 4125.42 2845.5 4125.42 c
2840.1 4125.42 2835.73 4129.79 2835.73 4135.19 c
2835.73 4140.59 2840.1 4144.97 2845.5 4144.97 c
2850.9 4144.97 2855.28 4140.59 2855.28 4135.19 c
f
n
2906.6 4144.97 m
2906.6 4139.57 2902.22 4135.19 2896.82 4135.19 c
2891.42 4135.19 2887.05 4139.57 2887.05 4144.97 c
2887.05 4150.37 2891.42 4154.74 2896.82 4154.74 c
2902.22 4154.74 2906.6 4150.37 2906.6 4144.97 c
f
n
2957.1 4155.56 m
2957.1 4150.16 2952.72 4145.78 2947.32 4145.78 c
2941.93 4145.78 2937.55 4150.16 2937.55 4155.56 c
2937.55 4160.96 2941.93 4165.33 2947.32 4165.33 c
2952.72 4165.33 2957.1 4160.96 2957.1 4155.56 c
f
n
3007.61 4165.33 m
3007.61 4159.93 3003.23 4155.56 2997.83 4155.56 c
2992.43 4155.56 2988.05 4159.93 2988.05 4165.33 c
2988.05 4170.73 2992.43 4175.11 2997.83 4175.11 c
3003.23 4175.11 3007.61 4170.73 3007.61 4165.33 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3109.43 4185.7 m
3109.43 4180.3 3105.05 4175.92 3099.65 4175.92 c
3094.25 4175.92 3089.88 4180.3 3089.88 4185.7 c
3089.88 4191.1 3094.25 4195.47 3099.65 4195.47 c
3105.05 4195.47 3109.43 4191.1 3109.43 4185.7 c
f
n
3159.93 4195.47 m
3159.93 4190.07 3155.56 4185.7 3150.16 4185.7 c
3144.76 4185.7 3140.38 4190.07 3140.38 4195.47 c
3140.38 4200.87 3144.76 4205.25 3150.16 4205.25 c
3155.56 4205.25 3159.93 4200.87 3159.93 4195.47 c
f
n
3210.44 4206.06 m
3210.44 4200.66 3206.06 4196.29 3200.66 4196.29 c
3195.27 4196.29 3190.89 4200.66 3190.89 4206.06 c
3190.89 4211.46 3195.27 4215.84 3200.66 4215.84 c
3206.06 4215.84 3210.44 4211.46 3210.44 4206.06 c
f
n
3261.76 4215.84 m
3261.76 4210.44 3257.38 4206.06 3251.98 4206.06 c
3246.59 4206.06 3242.21 4210.44 3242.21 4215.84 c
3242.21 4221.23 3246.59 4225.61 3251.98 4225.61 c
3257.38 4225.61 3261.76 4221.23 3261.76 4215.84 c
f
n
3312.26 4225.61 m
3312.26 4220.21 3307.89 4215.84 3302.49 4215.84 c
3297.09 4215.84 3292.71 4220.21 3292.71 4225.61 c
3292.71 4231.01 3297.09 4235.39 3302.49 4235.39 c
3307.89 4235.39 3312.26 4231.01 3312.26 4225.61 c
f
n
3362.77 4236.2 m
3362.77 4230.8 3358.39 4226.43 3352.99 4226.43 c
3347.59 4226.43 3343.22 4230.8 3343.22 4236.2 c
3343.22 4241.6 3347.59 4245.98 3352.99 4245.98 c
3358.39 4245.98 3362.77 4241.6 3362.77 4236.2 c
f
n
3413.27 4245.98 m
3413.27 4240.58 3408.89 4236.2 3403.5 4236.2 c
3398.1 4236.2 3393.72 4240.58 3393.72 4245.98 c
3393.72 4251.38 3398.1 4255.75 3403.5 4255.75 c
3408.89 4255.75 3413.27 4251.38 3413.27 4245.98 c
f
n
3464.59 4256.57 m
3464.59 4251.17 3460.21 4246.79 3454.82 4246.79 c
3449.42 4246.79 3445.04 4251.17 3445.04 4256.57 c
3445.04 4261.96 3449.42 4266.34 3454.82 4266.34 c
3460.21 4266.34 3464.59 4261.96 3464.59 4256.57 c
f
n
2662.22 4055.36 m
2662.22 4049.96 2657.84 4045.59 2652.45 4045.59 c
2647.05 4045.59 2642.67 4049.96 2642.67 4055.36 c
2642.67 4060.76 2647.05 4065.14 2652.45 4065.14 c
2657.84 4065.14 2662.22 4060.76 2662.22 4055.36 c
f
n
2711.91 4070.03 m
2711.91 4064.63 2707.53 4060.25 2702.13 4060.25 c
2696.73 4060.25 2692.36 4064.63 2692.36 4070.03 c
2692.36 4075.43 2696.73 4079.8 2702.13 4079.8 c
2707.53 4079.8 2711.91 4075.43 2711.91 4070.03 c
f
n
2761.6 4085.5 m
2761.6 4080.11 2757.22 4075.73 2751.82 4075.73 c
2746.43 4075.73 2742.05 4080.11 2742.05 4085.5 c
2742.05 4090.9 2746.43 4095.28 2751.82 4095.28 c
2757.22 4095.28 2761.6 4090.9 2761.6 4085.5 c
f
n
2811.29 4100.16 m
2811.29 4094.77 2806.91 4090.39 2801.51 4090.39 c
2796.11 4090.39 2791.74 4094.77 2791.74 4100.16 c
2791.74 4105.56 2796.11 4109.94 2801.51 4109.94 c
2806.91 4109.94 2811.29 4105.56 2811.29 4100.16 c
f
n
2860.16 4115.64 m
2860.16 4110.25 2855.79 4105.87 2850.39 4105.87 c
2844.99 4105.87 2840.61 4110.25 2840.61 4115.64 c
2840.61 4121.04 2844.99 4125.42 2850.39 4125.42 c
2855.79 4125.42 2860.16 4121.04 2860.16 4115.64 c
f
n
2909.86 4130.3 m
2909.86 4124.91 2905.48 4120.53 2900.08 4120.53 c
2894.68 4120.53 2890.3 4124.91 2890.3 4130.3 c
2890.3 4135.7 2894.68 4140.08 2900.08 4140.08 c
2905.48 4140.08 2909.86 4135.7 2909.86 4130.3 c
f
n
2959.54 4145.78 m
2959.54 4140.38 2955.17 4136.01 2949.77 4136.01 c
2944.37 4136.01 2940.0 4140.38 2940.0 4145.78 c
2940.0 4151.18 2944.37 4155.56 2949.77 4155.56 c
2955.17 4155.56 2959.54 4151.18 2959.54 4145.78 c
f
n
3009.23 4160.45 m
3009.23 4155.05 3004.86 4150.67 2999.46 4150.67 c
2994.06 4150.67 2989.68 4155.05 2989.68 4160.45 c
2989.68 4165.84 2994.06 4170.22 2999.46 4170.22 c
3004.86 4170.22 3009.23 4165.84 3009.23 4160.45 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3107.8 4190.59 m
3107.8 4185.19 3103.42 4180.81 3098.02 4180.81 c
3092.62 4180.81 3088.25 4185.19 3088.25 4190.59 c
3088.25 4195.98 3092.62 4200.36 3098.02 4200.36 c
3103.42 4200.36 3107.8 4195.98 3107.8 4190.59 c
f
n
3157.49 4205.25 m
3157.49 4199.85 3153.11 4195.47 3147.71 4195.47 c
3142.32 4195.47 3137.94 4199.85 3137.94 4205.25 c
3137.94 4210.64 3142.32 4215.02 3147.71 4215.02 c
3153.11 4215.02 3157.49 4210.64 3157.49 4205.25 c
f
n
3207.18 4220.73 m
3207.18 4215.33 3202.8 4210.95 3197.41 4210.95 c
3192.01 4210.95 3187.63 4215.33 3187.63 4220.73 c
3187.63 4226.12 3192.01 4230.5 3197.41 4230.5 c
3202.8 4230.5 3207.18 4226.12 3207.18 4220.73 c
f
n
3256.87 4235.39 m
3256.87 4229.99 3252.49 4225.61 3247.09 4225.61 c
3241.7 4225.61 3237.32 4229.99 3237.32 4235.39 c
3237.32 4240.79 3241.7 4245.16 3247.09 4245.16 c
3252.49 4245.16 3256.87 4240.79 3256.87 4235.39 c
f
n
3305.75 4250.86 m
3305.75 4245.46 3301.37 4241.09 3295.97 4241.09 c
3290.57 4241.09 3286.2 4245.46 3286.2 4250.86 c
3286.2 4256.26 3290.57 4260.64 3295.97 4260.64 c
3301.37 4260.64 3305.75 4256.26 3305.75 4250.86 c
f
n
3355.44 4265.53 m
3355.44 4260.13 3351.06 4255.75 3345.66 4255.75 c
3340.26 4255.75 3335.89 4260.13 3335.89 4265.53 c
3335.89 4270.93 3340.26 4275.3 3345.66 4275.3 c
3351.06 4275.3 3355.44 4270.93 3355.44 4265.53 c
f
n
3405.12 4281.0 m
3405.12 4275.61 3400.75 4271.23 3395.35 4271.23 c
3389.95 4271.23 3385.57 4275.61 3385.57 4281.0 c
3385.57 4286.4 3389.95 4290.78 3395.35 4290.78 c
3400.75 4290.78 3405.12 4286.4 3405.12 4281.0 c
f
n
3454.82 4295.67 m
3454.82 4290.27 3450.44 4285.89 3445.04 4285.89 c
3439.64 4285.89 3435.27 4290.27 3435.27 4295.67 c
3435.27 4301.07 3439.64 4305.44 3445.04 4305.44 c
3450.44 4305.44 3454.82 4301.07 3454.82 4295.67 c
f
n
2676.07 4017.08 m
2676.07 4011.68 2671.69 4007.3 2666.29 4007.3 c
2660.89 4007.3 2656.52 4011.68 2656.52 4017.08 c
2656.52 4022.48 2660.89 4026.85 2666.29 4026.85 c
2671.69 4026.85 2676.07 4022.48 2676.07 4017.08 c
f
n
2724.13 4036.63 m
2724.13 4031.23 2719.75 4026.85 2714.35 4026.85 c
2708.95 4026.85 2704.58 4031.23 2704.58 4036.63 c
2704.58 4042.03 2708.95 4046.4 2714.35 4046.4 c
2719.75 4046.4 2724.13 4042.03 2724.13 4036.63 c
f
n
2772.19 4056.99 m
2772.19 4051.59 2767.81 4047.22 2762.41 4047.22 c
2757.02 4047.22 2752.64 4051.59 2752.64 4056.99 c
2752.64 4062.39 2757.02 4066.77 2762.41 4066.77 c
2767.81 4066.77 2772.19 4062.39 2772.19 4056.99 c
f
n
2819.43 4076.54 m
2819.43 4071.14 2815.06 4066.77 2809.66 4066.77 c
2804.26 4066.77 2799.88 4071.14 2799.88 4076.54 c
2799.88 4081.94 2804.26 4086.32 2809.66 4086.32 c
2815.06 4086.32 2819.43 4081.94 2819.43 4076.54 c
f
n
2867.5 4096.09 m
2867.5 4090.7 2863.12 4086.32 2857.72 4086.32 c
2852.32 4086.32 2847.95 4090.7 2847.95 4096.09 c
2847.95 4101.49 2852.32 4105.87 2857.72 4105.87 c
2863.12 4105.87 2867.5 4101.49 2867.5 4096.09 c
f
n
2915.55 4116.46 m
2915.55 4111.06 2911.18 4106.68 2905.78 4106.68 c
2900.38 4106.68 2896.01 4111.06 2896.01 4116.46 c
2896.01 4121.86 2900.38 4126.23 2905.78 4126.23 c
2911.18 4126.23 2915.55 4121.86 2915.55 4116.46 c
f
n
2962.8 4136.01 m
2962.8 4130.61 2958.43 4126.23 2953.03 4126.23 c
2947.63 4126.23 2943.25 4130.61 2943.25 4136.01 c
2943.25 4141.41 2947.63 4145.78 2953.03 4145.78 c
2958.43 4145.78 2962.8 4141.41 2962.8 4136.01 c
f
n
3010.86 4155.56 m
3010.86 4150.16 3006.49 4145.78 3001.09 4145.78 c
2995.69 4145.78 2991.31 4150.16 2991.31 4155.56 c
2991.31 4160.96 2995.69 4165.33 3001.09 4165.33 c
3006.49 4165.33 3010.86 4160.96 3010.86 4155.56 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3106.17 4195.47 m
3106.17 4190.07 3101.79 4185.7 3096.39 4185.7 c
3091.0 4185.7 3086.62 4190.07 3086.62 4195.47 c
3086.62 4200.87 3091.0 4205.25 3096.39 4205.25 c
3101.79 4205.25 3106.17 4200.87 3106.17 4195.47 c
f
n
3154.23 4215.02 m
3154.23 4209.62 3149.86 4205.25 3144.46 4205.25 c
3139.06 4205.25 3134.68 4209.62 3134.68 4215.02 c
3134.68 4220.42 3139.06 4224.8 3144.46 4224.8 c
3149.86 4224.8 3154.23 4220.42 3154.23 4215.02 c
f
n
3201.48 4234.57 m
3201.48 4229.18 3197.1 4224.8 3191.7 4224.8 c
3186.3 4224.8 3181.93 4229.18 3181.93 4234.57 c
3181.93 4239.97 3186.3 4244.35 3191.7 4244.35 c
3197.1 4244.35 3201.48 4239.97 3201.48 4234.57 c
f
n
3249.54 4254.94 m
3249.54 4249.54 3245.16 4245.16 3239.77 4245.16 c
3234.37 4245.16 3229.99 4249.54 3229.99 4254.94 c
3229.99 4260.34 3234.37 4264.71 3239.77 4264.71 c
3245.16 4264.71 3249.54 4260.34 3249.54 4254.94 c
f
n
3297.6 4274.49 m
3297.6 4269.09 3293.22 4264.71 3287.82 4264.71 c
3282.43 4264.71 3278.05 4269.09 3278.05 4274.49 c
3278.05 4279.89 3282.43 4284.26 3287.82 4284.26 c
3293.22 4284.26 3297.6 4279.89 3297.6 4274.49 c
f
n
3344.85 4294.04 m
3344.85 4288.64 3340.47 4284.26 3335.07 4284.26 c
3329.67 4284.26 3325.3 4288.64 3325.3 4294.04 c
3325.3 4299.44 3329.67 4303.81 3335.07 4303.81 c
3340.47 4303.81 3344.85 4299.44 3344.85 4294.04 c
f
n
3392.91 4314.4 m
3392.91 4309.0 3388.53 4304.63 3383.13 4304.63 c
3377.73 4304.63 3373.36 4309.0 3373.36 4314.4 c
3373.36 4319.8 3377.73 4324.18 3383.13 4324.18 c
3388.53 4324.18 3392.91 4319.8 3392.91 4314.4 c
f
n
3440.97 4333.95 m
3440.97 4328.55 3436.59 4324.18 3431.19 4324.18 c
3425.79 4324.18 3421.42 4328.55 3421.42 4333.95 c
3421.42 4339.35 3425.79 4343.73 3431.19 4343.73 c
3436.59 4343.73 3440.97 4339.35 3440.97 4333.95 c
f
n
2647.55 3955.98 m
2647.55 3950.59 2643.18 3946.21 2637.78 3946.21 c
2632.38 3946.21 2628.0 3950.59 2628.0 3955.98 c
2628.0 3961.38 2632.38 3965.76 2637.78 3965.76 c
2643.18 3965.76 2647.55 3961.38 2647.55 3955.98 c
f
n
2693.17 3980.42 m
2693.17 3975.02 2688.8 3970.64 2683.4 3970.64 c
2678.0 3970.64 2673.62 3975.02 2673.62 3980.42 c
2673.62 3985.82 2678.0 3990.2 2683.4 3990.2 c
2688.8 3990.2 2693.17 3985.82 2693.17 3980.42 c
f
n
2738.79 4004.86 m
2738.79 3999.46 2734.41 3995.08 2729.02 3995.08 c
2723.62 3995.08 2719.24 3999.46 2719.24 4004.86 c
2719.24 4010.26 2723.62 4014.63 2729.02 4014.63 c
2734.41 4014.63 2738.79 4010.26 2738.79 4004.86 c
f
n
2784.41 4029.3 m
2784.41 4023.9 2780.03 4019.52 2774.63 4019.52 c
2769.23 4019.52 2764.86 4023.9 2764.86 4029.3 c
2764.86 4034.7 2769.23 4039.07 2774.63 4039.07 c
2780.03 4039.07 2784.41 4034.7 2784.41 4029.3 c
f
n
2830.02 4053.73 m
2830.02 4048.34 2825.65 4043.96 2820.25 4043.96 c
2814.85 4043.96 2810.47 4048.34 2810.47 4053.73 c
2810.47 4059.13 2814.85 4063.51 2820.25 4063.51 c
2825.65 4063.51 2830.02 4059.13 2830.02 4053.73 c
f
n
2875.64 4078.17 m
2875.64 4072.77 2871.27 4068.39 2865.87 4068.39 c
2860.47 4068.39 2856.09 4072.77 2856.09 4078.17 c
2856.09 4083.57 2860.47 4087.95 2865.87 4087.95 c
2871.27 4087.95 2875.64 4083.57 2875.64 4078.17 c
f
n
2921.26 4102.61 m
2921.26 4097.21 2916.88 4092.84 2911.48 4092.84 c
2906.09 4092.84 2901.71 4097.21 2901.71 4102.61 c
2901.71 4108.01 2906.09 4112.38 2911.48 4112.38 c
2916.88 4112.38 2921.26 4108.01 2921.26 4102.61 c
f
n
2966.88 4127.05 m
2966.88 4121.65 2962.5 4117.27 2957.1 4117.27 c
2951.7 4117.27 2947.32 4121.65 2947.32 4127.05 c
2947.32 4132.45 2951.7 4136.82 2957.1 4136.82 c
2962.5 4136.82 2966.88 4132.45 2966.88 4127.05 c
f
n
3012.49 4151.48 m
3012.49 4146.09 3008.12 4141.71 3002.72 4141.71 c
2997.32 4141.71 2992.94 4146.09 2992.94 4151.48 c
2992.94 4156.88 2997.32 4161.26 3002.72 4161.26 c
3008.12 4161.26 3012.49 4156.88 3012.49 4151.48 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3104.54 4199.55 m
3104.54 4194.15 3100.16 4189.77 3094.77 4189.77 c
3089.37 4189.77 3084.99 4194.15 3084.99 4199.55 c
3084.99 4204.95 3089.37 4209.32 3094.77 4209.32 c
3100.16 4209.32 3104.54 4204.95 3104.54 4199.55 c
f
n
3150.16 4223.98 m
3150.16 4218.59 3145.78 4214.21 3140.38 4214.21 c
3134.98 4214.21 3130.61 4218.59 3130.61 4223.98 c
3130.61 4229.38 3134.98 4233.76 3140.38 4233.76 c
3145.78 4233.76 3150.16 4229.38 3150.16 4223.98 c
f
n
3195.78 4248.42 m
3195.78 4243.02 3191.4 4238.64 3186.0 4238.64 c
3180.6 4238.64 3176.23 4243.02 3176.23 4248.42 c
3176.23 4253.82 3180.6 4258.2 3186.0 4258.2 c
3191.4 4258.2 3195.78 4253.82 3195.78 4248.42 c
f
n
3241.39 4272.86 m
3241.39 4267.46 3237.02 4263.08 3231.62 4263.08 c
3226.22 4263.08 3221.84 4267.46 3221.84 4272.86 c
3221.84 4278.26 3226.22 4282.63 3231.62 4282.63 c
3237.02 4282.63 3241.39 4278.26 3241.39 4272.86 c
f
n
3287.01 4297.3 m
3287.01 4291.9 3282.63 4287.52 3277.23 4287.52 c
3271.84 4287.52 3267.46 4291.9 3267.46 4297.3 c
3267.46 4302.7 3271.84 4307.07 3277.23 4307.07 c
3282.63 4307.07 3287.01 4302.7 3287.01 4297.3 c
f
n
3332.63 4321.73 m
3332.63 4316.34 3328.25 4311.96 3322.85 4311.96 c
3317.45 4311.96 3313.08 4316.34 3313.08 4321.73 c
3313.08 4327.13 3317.45 4331.51 3322.85 4331.51 c
3328.25 4331.51 3332.63 4327.13 3332.63 4321.73 c
f
n
3378.25 4346.17 m
3378.25 4340.77 3373.87 4336.4 3368.47 4336.4 c
3363.07 4336.4 3358.7 4340.77 3358.7 4346.17 c
3358.7 4351.57 3363.07 4355.95 3368.47 4355.95 c
3373.87 4355.95 3378.25 4351.57 3378.25 4346.17 c
f
n
3423.86 4370.61 m
3423.86 4365.21 3419.48 4360.84 3414.09 4360.84 c
3408.69 4360.84 3404.31 4365.21 3404.31 4370.61 c
3404.31 4376.01 3408.69 4380.39 3414.09 4380.39 c
3419.48 4380.39 3423.86 4376.01 3423.86 4370.61 c
f
n
3469.48 4395.05 m
3469.48 4389.65 3465.1 4385.27 3459.7 4385.27 c
3454.3 4385.27 3449.93 4389.65 3449.93 4395.05 c
3449.93 4400.45 3454.3 4404.82 3459.7 4404.82 c
3465.1 4404.82 3469.48 4400.45 3469.48 4395.05 c
f
n
2671.18 3916.88 m
2671.18 3911.48 2666.8 3907.11 2661.4 3907.11 c
2656.0 3907.11 2651.63 3911.48 2651.63 3916.88 c
2651.63 3922.28 2656.0 3926.66 2661.4 3926.66 c
2666.8 3926.66 2671.18 3922.28 2671.18 3916.88 c
f
n
2714.35 3945.39 m
2714.35 3940.0 2709.98 3935.62 2704.58 3935.62 c
2699.18 3935.62 2694.8 3940.0 2694.8 3945.39 c
2694.8 3950.79 2699.18 3955.17 2704.58 3955.17 c
2709.98 3955.17 2714.35 3950.79 2714.35 3945.39 c
f
n
2757.53 3974.72 m
2757.53 3969.32 2753.15 3964.94 2747.75 3964.94 c
2742.35 3964.94 2737.98 3969.32 2737.98 3974.72 c
2737.98 3980.12 2742.35 3984.49 2747.75 3984.49 c
2753.15 3984.49 2757.53 3980.12 2757.53 3974.72 c
f
n
2800.7 4003.23 m
2800.7 3997.83 2796.32 3993.45 2790.93 3993.45 c
2785.53 3993.45 2781.15 3997.83 2781.15 4003.23 c
2781.15 4008.63 2785.53 4013.0 2790.93 4013.0 c
2796.32 4013.0 2800.7 4008.63 2800.7 4003.23 c
f
n
2843.87 4031.74 m
2843.87 4026.34 2839.5 4021.96 2834.1 4021.96 c
2828.7 4021.96 2824.32 4026.34 2824.32 4031.74 c
2824.32 4037.14 2828.7 4041.52 2834.1 4041.52 c
2839.5 4041.52 2843.87 4037.14 2843.87 4031.74 c
f
n
2886.23 4060.25 m
2886.23 4054.85 2881.86 4050.48 2876.46 4050.48 c
2871.06 4050.48 2866.68 4054.85 2866.68 4060.25 c
2866.68 4065.65 2871.06 4070.03 2876.46 4070.03 c
2881.86 4070.03 2886.23 4065.65 2886.23 4060.25 c
f
n
2929.41 4089.57 m
2929.41 4084.18 2925.03 4079.8 2919.63 4079.8 c
2914.23 4079.8 2909.86 4084.18 2909.86 4089.57 c
2909.86 4094.97 2914.23 4099.35 2919.63 4099.35 c
2925.03 4099.35 2929.41 4094.97 2929.41 4089.57 c
f
n
2972.58 4118.09 m
2972.58 4112.69 2968.2 4108.31 2962.8 4108.31 c
2957.41 4108.31 2953.03 4112.69 2953.03 4118.09 c
2953.03 4123.48 2957.41 4127.86 2962.8 4127.86 c
2968.2 4127.86 2972.58 4123.48 2972.58 4118.09 c
f
n
3015.75 4146.6 m
3015.75 4141.2 3011.38 4136.82 3005.98 4136.82 c
3000.58 4136.82 2996.2 4141.2 2996.2 4146.6 c
2996.2 4152.0 3000.58 4156.37 3005.98 4156.37 c
3011.38 4156.37 3015.75 4152.0 3015.75 4146.6 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3101.29 4204.43 m
3101.29 4199.04 3096.91 4194.66 3091.51 4194.66 c
3086.11 4194.66 3081.73 4199.04 3081.73 4204.43 c
3081.73 4209.83 3086.11 4214.21 3091.51 4214.21 c
3096.91 4214.21 3101.29 4209.83 3101.29 4204.43 c
f
n
3144.46 4232.95 m
3144.46 4227.55 3140.08 4223.17 3134.68 4223.17 c
3129.28 4223.17 3124.91 4227.55 3124.91 4232.95 c
3124.91 4238.34 3129.28 4242.72 3134.68 4242.72 c
3140.08 4242.72 3144.46 4238.34 3144.46 4232.95 c
f
n
3187.63 4261.45 m
3187.63 4256.05 3183.25 4251.68 3177.86 4251.68 c
3172.46 4251.68 3168.08 4256.05 3168.08 4261.45 c
3168.08 4266.85 3172.46 4271.23 3177.86 4271.23 c
3183.25 4271.23 3187.63 4266.85 3187.63 4261.45 c
f
n
3230.8 4290.78 m
3230.8 4285.38 3226.43 4281.0 3221.03 4281.0 c
3215.63 4281.0 3211.25 4285.38 3211.25 4290.78 c
3211.25 4296.18 3215.63 4300.55 3221.03 4300.55 c
3226.43 4300.55 3230.8 4296.18 3230.8 4290.78 c
f
n
3273.16 4319.29 m
3273.16 4313.89 3268.79 4309.52 3263.39 4309.52 c
3257.99 4309.52 3253.61 4313.89 3253.61 4319.29 c
3253.61 4324.69 3257.99 4329.07 3263.39 4329.07 c
3268.79 4329.07 3273.16 4324.69 3273.16 4319.29 c
f
n
3316.34 4347.8 m
3316.34 4342.4 3311.96 4338.03 3306.56 4338.03 c
3301.16 4338.03 3296.79 4342.4 3296.79 4347.8 c
3296.79 4353.2 3301.16 4357.58 3306.56 4357.58 c
3311.96 4357.58 3316.34 4353.2 3316.34 4347.8 c
f
n
3359.51 4376.31 m
3359.51 4370.91 3355.13 4366.54 3349.73 4366.54 c
3344.34 4366.54 3339.96 4370.91 3339.96 4376.31 c
3339.96 4381.71 3344.34 4386.09 3349.73 4386.09 c
3355.13 4386.09 3359.51 4381.71 3359.51 4376.31 c
f
n
3402.68 4405.64 m
3402.68 4400.24 3398.3 4395.86 3392.91 4395.86 c
3387.51 4395.86 3383.13 4400.24 3383.13 4405.64 c
3383.13 4411.04 3387.51 4415.41 3392.91 4415.41 c
3398.3 4415.41 3402.68 4411.04 3402.68 4405.64 c
f
n
3445.86 4434.15 m
3445.86 4428.75 3441.48 4424.37 3436.08 4424.37 c
3430.68 4424.37 3426.3 4428.75 3426.3 4434.15 c
3426.3 4439.55 3430.68 4443.92 3436.08 4443.92 c
3441.48 4443.92 3445.86 4439.55 3445.86 4434.15 c
f
n
2658.96 3847.64 m
2658.96 3842.24 2654.58 3837.87 2649.18 3837.87 c
2643.79 3837.87 2639.41 3842.24 2639.41 3847.64 c
2639.41 3853.04 2643.79 3857.42 2649.18 3857.42 c
2654.58 3857.42 2658.96 3853.04 2658.96 3847.64 c
f
n
2698.88 3880.23 m
2698.88 3874.83 2694.5 3870.45 2689.1 3870.45 c
2683.7 3870.45 2679.32 3874.83 2679.32 3880.23 c
2679.32 3885.62 2683.7 3890.0 2689.1 3890.0 c
2694.5 3890.0 2698.88 3885.62 2698.88 3880.23 c
f
n
2738.79 3912.81 m
2738.79 3907.41 2734.41 3903.04 2729.02 3903.04 c
2723.62 3903.04 2719.24 3907.41 2719.24 3912.81 c
2719.24 3918.21 2723.62 3922.59 2729.02 3922.59 c
2734.41 3922.59 2738.79 3918.21 2738.79 3912.81 c
f
n
2778.7 3946.21 m
2778.7 3940.81 2774.33 3936.43 2768.93 3936.43 c
2763.53 3936.43 2759.16 3940.81 2759.16 3946.21 c
2759.16 3951.61 2763.53 3955.98 2768.93 3955.98 c
2774.33 3955.98 2778.7 3951.61 2778.7 3946.21 c
f
n
2818.62 3978.79 m
2818.62 3973.39 2814.24 3969.02 2808.84 3969.02 c
2803.45 3969.02 2799.07 3973.39 2799.07 3978.79 c
2799.07 3984.19 2803.45 3988.57 2808.84 3988.57 c
2814.24 3988.57 2818.62 3984.19 2818.62 3978.79 c
f
n
2858.54 4011.38 m
2858.54 4005.98 2854.16 4001.6 2848.76 4001.6 c
2843.36 4001.6 2838.98 4005.98 2838.98 4011.38 c
2838.98 4016.77 2843.36 4021.15 2848.76 4021.15 c
2854.16 4021.15 2858.54 4016.77 2858.54 4011.38 c
f
n
2898.45 4043.96 m
2898.45 4038.56 2894.07 4034.18 2888.68 4034.18 c
2883.28 4034.18 2878.9 4038.56 2878.9 4043.96 c
2878.9 4049.36 2883.28 4053.73 2888.68 4053.73 c
2894.07 4053.73 2898.45 4049.36 2898.45 4043.96 c
f
n
2938.36 4077.36 m
2938.36 4071.96 2933.99 4067.58 2928.59 4067.58 c
2923.19 4067.58 2918.82 4071.96 2918.82 4077.36 c
2918.82 4082.75 2923.19 4087.13 2928.59 4087.13 c
2933.99 4087.13 2938.36 4082.75 2938.36 4077.36 c
f
n
2978.28 4109.94 m
2978.28 4104.54 2973.9 4100.16 2968.5 4100.16 c
2963.11 4100.16 2958.73 4104.54 2958.73 4109.94 c
2958.73 4115.34 2963.11 4119.71 2968.5 4119.71 c
2973.9 4119.71 2978.28 4115.34 2978.28 4109.94 c
f
n
3018.2 4142.52 m
3018.2 4137.12 3013.82 4132.75 3008.42 4132.75 c
3003.02 4132.75 2998.64 4137.12 2998.64 4142.52 c
2998.64 4147.92 3003.02 4152.3 3008.42 4152.3 c
3013.82 4152.3 3018.2 4147.92 3018.2 4142.52 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3098.84 4208.51 m
3098.84 4203.11 3094.46 4198.73 3089.07 4198.73 c
3083.67 4198.73 3079.29 4203.11 3079.29 4208.51 c
3079.29 4213.91 3083.67 4218.28 3089.07 4218.28 c
3094.46 4218.28 3098.84 4213.91 3098.84 4208.51 c
f
n
3138.75 4241.09 m
3138.75 4235.69 3134.38 4231.32 3128.98 4231.32 c
3123.58 4231.32 3119.2 4235.69 3119.2 4241.09 c
3119.2 4246.49 3123.58 4250.86 3128.98 4250.86 c
3134.38 4250.86 3138.75 4246.49 3138.75 4241.09 c
f
n
3178.67 4273.67 m
3178.67 4268.27 3174.29 4263.9 3168.89 4263.9 c
3163.5 4263.9 3159.12 4268.27 3159.12 4273.67 c
3159.12 4279.07 3163.5 4283.45 3168.89 4283.45 c
3174.29 4283.45 3178.67 4279.07 3178.67 4273.67 c
f
n
3218.59 4307.07 m
3218.59 4301.67 3214.21 4297.3 3208.81 4297.3 c
3203.41 4297.3 3199.04 4301.67 3199.04 4307.07 c
3199.04 4312.47 3203.41 4316.85 3208.81 4316.85 c
3214.21 4316.85 3218.59 4312.47 3218.59 4307.07 c
f
n
3258.5 4339.66 m
3258.5 4334.26 3254.12 4329.88 3248.72 4329.88 c
3243.32 4329.88 3238.95 4334.26 3238.95 4339.66 c
3238.95 4345.05 3243.32 4349.43 3248.72 4349.43 c
3254.12 4349.43 3258.5 4345.05 3258.5 4339.66 c
f
n
3298.41 4372.24 m
3298.41 4366.84 3294.04 4362.46 3288.64 4362.46 c
3283.24 4362.46 3278.86 4366.84 3278.86 4372.24 c
3278.86 4377.64 3283.24 4382.02 3288.64 4382.02 c
3294.04 4382.02 3298.41 4377.64 3298.41 4372.24 c
f
n
3338.33 4404.82 m
3338.33 4399.43 3333.95 4395.05 3328.55 4395.05 c
3323.16 4395.05 3318.78 4399.43 3318.78 4404.82 c
3318.78 4410.22 3323.16 4414.6 3328.55 4414.6 c
3333.95 4414.6 3338.33 4410.22 3338.33 4404.82 c
f
n
3378.25 4438.22 m
3378.25 4432.82 3373.87 4428.45 3368.47 4428.45 c
3363.07 4428.45 3358.7 4432.82 3358.7 4438.22 c
3358.7 4443.62 3363.07 4448.0 3368.47 4448.0 c
3373.87 4448.0 3378.25 4443.62 3378.25 4438.22 c
f
n
3418.16 4470.8 m
3418.16 4465.41 3413.78 4461.03 3408.38 4461.03 c
3402.98 4461.03 3398.61 4465.41 3398.61 4470.8 c
3398.61 4476.2 3402.98 4480.58 3408.38 4480.58 c
3413.78 4480.58 3418.16 4476.2 3418.16 4470.8 c
f
n
3458.07 4503.39 m
3458.07 4497.99 3453.7 4493.61 3448.3 4493.61 c
3442.9 4493.61 3438.52 4497.99 3438.52 4503.39 c
3438.52 4508.79 3442.9 4513.16 3448.3 4513.16 c
3453.7 4513.16 3458.07 4508.79 3458.07 4503.39 c
f
n
2656.52 3773.52 m
2656.52 3768.12 2652.14 3763.74 2646.74 3763.74 c
2641.34 3763.74 2636.96 3768.12 2636.96 3773.52 c
2636.96 3778.91 2641.34 3783.29 2646.74 3783.29 c
2652.14 3783.29 2656.52 3778.91 2656.52 3773.52 c
f
n
2692.36 3809.36 m
2692.36 3803.96 2687.98 3799.58 2682.58 3799.58 c
2677.18 3799.58 2672.81 3803.96 2672.81 3809.36 c
2672.81 3814.75 2677.18 3819.13 2682.58 3819.13 c
2687.98 3819.13 2692.36 3814.75 2692.36 3809.36 c
f
n
2729.02 3846.01 m
2729.02 3840.61 2724.64 3836.24 2719.24 3836.24 c
2713.84 3836.24 2709.46 3840.61 2709.46 3846.01 c
2709.46 3851.41 2713.84 3855.79 2719.24 3855.79 c
2724.64 3855.79 2729.02 3851.41 2729.02 3846.01 c
f
n
2765.67 3882.67 m
2765.67 3877.27 2761.3 3872.89 2755.9 3872.89 c
2750.5 3872.89 2746.12 3877.27 2746.12 3882.67 c
2746.12 3888.07 2750.5 3892.45 2755.9 3892.45 c
2761.3 3892.45 2765.67 3888.07 2765.67 3882.67 c
f
n
2802.33 3919.32 m
2802.33 3913.93 2797.95 3909.55 2792.55 3909.55 c
2787.16 3909.55 2782.78 3913.93 2782.78 3919.32 c
2782.78 3924.72 2787.16 3929.1 2792.55 3929.1 c
2797.95 3929.1 2802.33 3924.72 2802.33 3919.32 c
f
n
2838.98 3955.98 m
2838.98 3950.59 2834.61 3946.21 2829.21 3946.21 c
2823.81 3946.21 2819.43 3950.59 2819.43 3955.98 c
2819.43 3961.38 2823.81 3965.76 2829.21 3965.76 c
2834.61 3965.76 2838.98 3961.38 2838.98 3955.98 c
f
n
2875.64 3992.64 m
2875.64 3987.24 2871.27 3982.86 2865.87 3982.86 c
2860.47 3982.86 2856.09 3987.24 2856.09 3992.64 c
2856.09 3998.04 2860.47 4002.41 2865.87 4002.41 c
2871.27 4002.41 2875.64 3998.04 2875.64 3992.64 c
f
n
2912.3 4029.3 m
2912.3 4023.9 2907.92 4019.52 2902.52 4019.52 c
2897.12 4019.52 2892.75 4023.9 2892.75 4029.3 c
2892.75 4034.7 2897.12 4039.07 2902.52 4039.07 c
2907.92 4039.07 2912.3 4034.7 2912.3 4029.3 c
f
n
2948.95 4065.95 m
2948.95 4060.55 2944.58 4056.18 2939.18 4056.18 c
2933.78 4056.18 2929.41 4060.55 2929.41 4065.95 c
2929.41 4071.35 2933.78 4075.73 2939.18 4075.73 c
2944.58 4075.73 2948.95 4071.35 2948.95 4065.95 c
f
n
2985.61 4102.61 m
2985.61 4097.21 2981.23 4092.84 2975.84 4092.84 c
2970.44 4092.84 2966.06 4097.21 2966.06 4102.61 c
2966.06 4108.01 2970.44 4112.38 2975.84 4112.38 c
2981.23 4112.38 2985.61 4108.01 2985.61 4102.61 c
f
n
3022.27 4139.27 m
3022.27 4133.87 3017.89 4129.49 3012.49 4129.49 c
3007.09 4129.49 3002.72 4133.87 3002.72 4139.27 c
3002.72 4144.66 3007.09 4149.04 3012.49 4149.04 c
3017.89 4149.04 3022.27 4144.66 3022.27 4139.27 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3094.77 4211.77 m
3094.77 4206.37 3090.39 4201.99 3084.99 4201.99 c
3079.59 4201.99 3075.21 4206.37 3075.21 4211.77 c
3075.21 4217.16 3079.59 4221.54 3084.99 4221.54 c
3090.39 4221.54 3094.77 4217.16 3094.77 4211.77 c
f
n
3131.42 4248.42 m
3131.42 4243.02 3127.05 4238.64 3121.65 4238.64 c
3116.25 4238.64 3111.87 4243.02 3111.87 4248.42 c
3111.87 4253.82 3116.25 4258.2 3121.65 4258.2 c
3127.05 4258.2 3131.42 4253.82 3131.42 4248.42 c
f
n
3168.08 4285.08 m
3168.08 4279.68 3163.7 4275.3 3158.3 4275.3 c
3152.91 4275.3 3148.53 4279.68 3148.53 4285.08 c
3148.53 4290.48 3152.91 4294.85 3158.3 4294.85 c
3163.7 4294.85 3168.08 4290.48 3168.08 4285.08 c
f
n
3204.74 4321.73 m
3204.74 4316.34 3200.36 4311.96 3194.96 4311.96 c
3189.56 4311.96 3185.19 4316.34 3185.19 4321.73 c
3185.19 4327.13 3189.56 4331.51 3194.96 4331.51 c
3200.36 4331.51 3204.74 4327.13 3204.74 4321.73 c
f
n
3241.39 4358.39 m
3241.39 4352.99 3237.02 4348.62 3231.62 4348.62 c
3226.22 4348.62 3221.84 4352.99 3221.84 4358.39 c
3221.84 4363.79 3226.22 4368.16 3231.62 4368.16 c
3237.02 4368.16 3241.39 4363.79 3241.39 4358.39 c
f
n
3278.05 4395.05 m
3278.05 4389.65 3273.67 4385.27 3268.27 4385.27 c
3262.88 4385.27 3258.5 4389.65 3258.5 4395.05 c
3258.5 4400.45 3262.88 4404.82 3268.27 4404.82 c
3273.67 4404.82 3278.05 4400.45 3278.05 4395.05 c
f
n
3314.71 4431.7 m
3314.71 4426.3 3310.33 4421.93 3304.93 4421.93 c
3299.53 4421.93 3295.16 4426.3 3295.16 4431.7 c
3295.16 4437.1 3299.53 4441.48 3304.93 4441.48 c
3310.33 4441.48 3314.71 4437.1 3314.71 4431.7 c
f
n
3351.36 4468.36 m
3351.36 4462.96 3346.98 4458.59 3341.59 4458.59 c
3336.19 4458.59 3331.81 4462.96 3331.81 4468.36 c
3331.81 4473.76 3336.19 4478.14 3341.59 4478.14 c
3346.98 4478.14 3351.36 4473.76 3351.36 4468.36 c
f
n
3388.02 4505.02 m
3388.02 4499.62 3383.64 4495.24 3378.25 4495.24 c
3372.85 4495.24 3368.47 4499.62 3368.47 4505.02 c
3368.47 4510.41 3372.85 4514.79 3378.25 4514.79 c
3383.64 4514.79 3388.02 4510.41 3388.02 4505.02 c
f
n
3424.68 4541.68 m
3424.68 4536.28 3420.3 4531.9 3414.9 4531.9 c
3409.5 4531.9 3405.12 4536.28 3405.12 4541.68 c
3405.12 4547.07 3409.5 4551.45 3414.9 4551.45 c
3420.3 4551.45 3424.68 4547.07 3424.68 4541.68 c
f
n
3460.52 4577.52 m
3460.52 4572.12 3456.14 4567.74 3450.74 4567.74 c
3445.34 4567.74 3440.97 4572.12 3440.97 4577.52 c
3440.97 4582.91 3445.34 4587.29 3450.74 4587.29 c
3456.14 4587.29 3460.52 4582.91 3460.52 4577.52 c
f
n
2730.64 3775.96 m
2730.64 3770.56 2726.27 3766.18 2720.87 3766.18 c
2715.47 3766.18 2711.09 3770.56 2711.09 3775.96 c
2711.09 3781.36 2715.47 3785.73 2720.87 3785.73 c
2726.27 3785.73 2730.64 3781.36 2730.64 3775.96 c
f
n
2763.23 3815.87 m
2763.23 3810.47 2758.85 3806.1 2753.45 3806.1 c
2748.05 3806.1 2743.68 3810.47 2743.68 3815.87 c
2743.68 3821.27 2748.05 3825.65 2753.45 3825.65 c
2758.85 3825.65 2763.23 3821.27 2763.23 3815.87 c
f
n
2795.81 3855.79 m
2795.81 3850.39 2791.43 3846.01 2786.04 3846.01 c
2780.64 3846.01 2776.26 3850.39 2776.26 3855.79 c
2776.26 3861.19 2780.64 3865.56 2786.04 3865.56 c
2791.43 3865.56 2795.81 3861.19 2795.81 3855.79 c
f
n
2829.21 3895.7 m
2829.21 3890.3 2824.83 3885.93 2819.43 3885.93 c
2814.04 3885.93 2809.66 3890.3 2809.66 3895.7 c
2809.66 3901.1 2814.04 3905.48 2819.43 3905.48 c
2824.83 3905.48 2829.21 3901.1 2829.21 3895.7 c
f
n
2861.79 3935.62 m
2861.79 3930.22 2857.42 3925.84 2852.02 3925.84 c
2846.62 3925.84 2842.24 3930.22 2842.24 3935.62 c
2842.24 3941.02 2846.62 3945.39 2852.02 3945.39 c
2857.42 3945.39 2861.79 3941.02 2861.79 3935.62 c
f
n
2894.38 3975.53 m
2894.38 3970.13 2890.0 3965.76 2884.6 3965.76 c
2879.2 3965.76 2874.83 3970.13 2874.83 3975.53 c
2874.83 3980.93 2879.2 3985.31 2884.6 3985.31 c
2890.0 3985.31 2894.38 3980.93 2894.38 3975.53 c
f
n
2926.96 4015.45 m
2926.96 4010.05 2922.59 4005.67 2917.19 4005.67 c
2911.79 4005.67 2907.41 4010.05 2907.41 4015.45 c
2907.41 4020.85 2911.79 4025.22 2917.19 4025.22 c
2922.59 4025.22 2926.96 4020.85 2926.96 4015.45 c
f
n
2960.36 4055.36 m
2960.36 4049.96 2955.98 4045.59 2950.58 4045.59 c
2945.18 4045.59 2940.81 4049.96 2940.81 4055.36 c
2940.81 4060.76 2945.18 4065.14 2950.58 4065.14 c
2955.98 4065.14 2960.36 4060.76 2960.36 4055.36 c
f
n
2992.94 4095.28 m
2992.94 4089.88 2988.57 4085.5 2983.17 4085.5 c
2977.77 4085.5 2973.39 4089.88 2973.39 4095.28 c
2973.39 4100.68 2977.77 4105.05 2983.17 4105.05 c
2988.57 4105.05 2992.94 4100.68 2992.94 4095.28 c
f
n
3025.53 4135.19 m
3025.53 4129.79 3021.15 4125.42 3015.75 4125.42 c
3010.35 4125.42 3005.98 4129.79 3005.98 4135.19 c
3005.98 4140.59 3010.35 4144.97 3015.75 4144.97 c
3021.15 4144.97 3025.53 4140.59 3025.53 4135.19 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3091.51 4215.84 m
3091.51 4210.44 3087.13 4206.06 3081.73 4206.06 c
3076.34 4206.06 3071.96 4210.44 3071.96 4215.84 c
3071.96 4221.23 3076.34 4225.61 3081.73 4225.61 c
3087.13 4225.61 3091.51 4221.23 3091.51 4215.84 c
f
n
3124.09 4255.75 m
3124.09 4250.36 3119.71 4245.98 3114.32 4245.98 c
3108.92 4245.98 3104.54 4250.36 3104.54 4255.75 c
3104.54 4261.15 3108.92 4265.53 3114.32 4265.53 c
3119.71 4265.53 3124.09 4261.15 3124.09 4255.75 c
f
n
3156.68 4295.67 m
3156.68 4290.27 3152.3 4285.89 3146.9 4285.89 c
3141.5 4285.89 3137.12 4290.27 3137.12 4295.67 c
3137.12 4301.07 3141.5 4305.44 3146.9 4305.44 c
3152.3 4305.44 3156.68 4301.07 3156.68 4295.67 c
f
n
3190.07 4335.58 m
3190.07 4330.18 3185.7 4325.81 3180.3 4325.81 c
3174.9 4325.81 3170.52 4330.18 3170.52 4335.58 c
3170.52 4340.98 3174.9 4345.36 3180.3 4345.36 c
3185.7 4345.36 3190.07 4340.98 3190.07 4335.58 c
f
n
3222.66 4375.5 m
3222.66 4370.1 3218.28 4365.72 3212.88 4365.72 c
3207.48 4365.72 3203.11 4370.1 3203.11 4375.5 c
3203.11 4380.89 3207.48 4385.27 3212.88 4385.27 c
3218.28 4385.27 3222.66 4380.89 3222.66 4375.5 c
f
n
3255.24 4415.41 m
3255.24 4410.02 3250.86 4405.64 3245.46 4405.64 c
3240.07 4405.64 3235.69 4410.02 3235.69 4415.41 c
3235.69 4420.81 3240.07 4425.19 3245.46 4425.19 c
3250.86 4425.19 3255.24 4420.81 3255.24 4415.41 c
f
n
3287.82 4455.33 m
3287.82 4449.93 3283.45 4445.55 3278.05 4445.55 c
3272.65 4445.55 3268.27 4449.93 3268.27 4455.33 c
3268.27 4460.73 3272.65 4465.1 3278.05 4465.1 c
3283.45 4465.1 3287.82 4460.73 3287.82 4455.33 c
f
n
3321.22 4495.24 m
3321.22 4489.84 3316.85 4485.47 3311.45 4485.47 c
3306.05 4485.47 3301.67 4489.84 3301.67 4495.24 c
3301.67 4500.64 3306.05 4505.02 3311.45 4505.02 c
3316.85 4505.02 3321.22 4500.64 3321.22 4495.24 c
f
n
3353.81 4535.16 m
3353.81 4529.76 3349.43 4525.38 3344.03 4525.38 c
3338.63 4525.38 3334.26 4529.76 3334.26 4535.16 c
3334.26 4540.55 3338.63 4544.93 3344.03 4544.93 c
3349.43 4544.93 3353.81 4540.55 3353.81 4535.16 c
f
n
3386.39 4575.07 m
3386.39 4569.67 3382.02 4565.3 3376.62 4565.3 c
3371.22 4565.3 3366.84 4569.67 3366.84 4575.07 c
3366.84 4580.47 3371.22 4584.85 3376.62 4584.85 c
3382.02 4584.85 3386.39 4580.47 3386.39 4575.07 c
f
n
2799.88 3788.18 m
2799.88 3782.78 2795.51 3778.4 2790.11 3778.4 c
2784.71 3778.4 2780.34 3782.78 2780.34 3788.18 c
2780.34 3793.57 2784.71 3797.95 2790.11 3797.95 c
2795.51 3797.95 2799.88 3793.57 2799.88 3788.18 c
f
n
2828.39 3831.35 m
2828.39 3825.95 2824.02 3821.57 2818.62 3821.57 c
2813.22 3821.57 2808.84 3825.95 2808.84 3831.35 c
2808.84 3836.75 2813.22 3841.12 2818.62 3841.12 c
2824.02 3841.12 2828.39 3836.75 2828.39 3831.35 c
f
n
2857.72 3874.52 m
2857.72 3869.12 2853.34 3864.75 2847.95 3864.75 c
2842.55 3864.75 2838.17 3869.12 2838.17 3874.52 c
2838.17 3879.92 2842.55 3884.3 2847.95 3884.3 c
2853.34 3884.3 2857.72 3879.92 2857.72 3874.52 c
f
n
2886.23 3917.7 m
2886.23 3912.3 2881.86 3907.92 2876.46 3907.92 c
2871.06 3907.92 2866.68 3912.3 2866.68 3917.7 c
2866.68 3923.09 2871.06 3927.47 2876.46 3927.47 c
2881.86 3927.47 2886.23 3923.09 2886.23 3917.7 c
f
n
2914.74 3960.87 m
2914.74 3955.47 2910.36 3951.09 2904.96 3951.09 c
2899.57 3951.09 2895.19 3955.47 2895.19 3960.87 c
2895.19 3966.27 2899.57 3970.64 2904.96 3970.64 c
2910.36 3970.64 2914.74 3966.27 2914.74 3960.87 c
f
n
2943.25 4003.23 m
2943.25 3997.83 2938.88 3993.45 2933.48 3993.45 c
2928.08 3993.45 2923.7 3997.83 2923.7 4003.23 c
2923.7 4008.63 2928.08 4013.0 2933.48 4013.0 c
2938.88 4013.0 2943.25 4008.63 2943.25 4003.23 c
f
n
2972.58 4046.4 m
2972.58 4041.0 2968.2 4036.63 2962.8 4036.63 c
2957.41 4036.63 2953.03 4041.0 2953.03 4046.4 c
2953.03 4051.8 2957.41 4056.18 2962.8 4056.18 c
2968.2 4056.18 2972.58 4051.8 2972.58 4046.4 c
f
n
3001.09 4089.57 m
3001.09 4084.18 2996.71 4079.8 2991.31 4079.8 c
2985.91 4079.8 2981.54 4084.18 2981.54 4089.57 c
2981.54 4094.97 2985.91 4099.35 2991.31 4099.35 c
2996.71 4099.35 3001.09 4094.97 3001.09 4089.57 c
f
n
3029.6 4132.75 m
3029.6 4127.35 3025.22 4122.97 3019.82 4122.97 c
3014.43 4122.97 3010.05 4127.35 3010.05 4132.75 c
3010.05 4138.15 3014.43 4142.52 3019.82 4142.52 c
3025.22 4142.52 3029.6 4138.15 3029.6 4132.75 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3087.43 4218.28 m
3087.43 4212.88 3083.06 4208.51 3077.66 4208.51 c
3072.26 4208.51 3067.89 4212.88 3067.89 4218.28 c
3067.89 4223.68 3072.26 4228.05 3077.66 4228.05 c
3083.06 4228.05 3087.43 4223.68 3087.43 4218.28 c
f
n
3115.95 4261.45 m
3115.95 4256.05 3111.57 4251.68 3106.17 4251.68 c
3100.77 4251.68 3096.39 4256.05 3096.39 4261.45 c
3096.39 4266.85 3100.77 4271.23 3106.17 4271.23 c
3111.57 4271.23 3115.95 4266.85 3115.95 4261.45 c
f
n
3144.46 4304.63 m
3144.46 4299.23 3140.08 4294.85 3134.68 4294.85 c
3129.28 4294.85 3124.91 4299.23 3124.91 4304.63 c
3124.91 4310.03 3129.28 4314.4 3134.68 4314.4 c
3140.08 4314.4 3144.46 4310.03 3144.46 4304.63 c
f
n
3173.78 4347.8 m
3173.78 4342.4 3169.41 4338.03 3164.01 4338.03 c
3158.61 4338.03 3154.23 4342.4 3154.23 4347.8 c
3154.23 4353.2 3158.61 4357.58 3164.01 4357.58 c
3169.41 4357.58 3173.78 4353.2 3173.78 4347.8 c
f
n
3202.29 4390.16 m
3202.29 4384.76 3197.92 4380.39 3192.52 4380.39 c
3187.12 4380.39 3182.74 4384.76 3182.74 4390.16 c
3182.74 4395.56 3187.12 4399.93 3192.52 4399.93 c
3197.92 4399.93 3202.29 4395.56 3202.29 4390.16 c
f
n
3230.8 4433.33 m
3230.8 4427.93 3226.43 4423.56 3221.03 4423.56 c
3215.63 4423.56 3211.25 4427.93 3211.25 4433.33 c
3211.25 4438.73 3215.63 4443.11 3221.03 4443.11 c
3226.43 4443.11 3230.8 4438.73 3230.8 4433.33 c
f
n
3259.31 4476.51 m
3259.31 4471.11 3254.94 4466.73 3249.54 4466.73 c
3244.14 4466.73 3239.77 4471.11 3239.77 4476.51 c
3239.77 4481.91 3244.14 4486.28 3249.54 4486.28 c
3254.94 4486.28 3259.31 4481.91 3259.31 4476.51 c
f
n
3288.64 4519.68 m
3288.64 4514.28 3284.26 4509.91 3278.86 4509.91 c
3273.46 4509.91 3269.09 4514.28 3269.09 4519.68 c
3269.09 4525.08 3273.46 4529.46 3278.86 4529.46 c
3284.26 4529.46 3288.64 4525.08 3288.64 4519.68 c
f
n
3317.15 4562.85 m
3317.15 4557.45 3312.77 4553.08 3307.38 4553.08 c
3301.98 4553.08 3297.6 4557.45 3297.6 4562.85 c
3297.6 4568.25 3301.98 4572.63 3307.38 4572.63 c
3312.77 4572.63 3317.15 4568.25 3317.15 4562.85 c
f
n
2838.98 3764.55 m
2838.98 3759.16 2834.61 3754.78 2829.21 3754.78 c
2823.81 3754.78 2819.43 3759.16 2819.43 3764.55 c
2819.43 3769.95 2823.81 3774.33 2829.21 3774.33 c
2834.61 3774.33 2838.98 3769.95 2838.98 3764.55 c
f
n
2863.42 3810.17 m
2863.42 3804.77 2859.05 3800.39 2853.65 3800.39 c
2848.25 3800.39 2843.87 3804.77 2843.87 3810.17 c
2843.87 3815.57 2848.25 3819.95 2853.65 3819.95 c
2859.05 3819.95 2863.42 3815.57 2863.42 3810.17 c
f
n
2887.86 3855.79 m
2887.86 3850.39 2883.48 3846.01 2878.09 3846.01 c
2872.69 3846.01 2868.31 3850.39 2868.31 3855.79 c
2868.31 3861.19 2872.69 3865.56 2878.09 3865.56 c
2883.48 3865.56 2887.86 3861.19 2887.86 3855.79 c
f
n
2912.3 3901.41 m
2912.3 3896.01 2907.92 3891.63 2902.52 3891.63 c
2897.12 3891.63 2892.75 3896.01 2892.75 3901.41 c
2892.75 3906.8 2897.12 3911.18 2902.52 3911.18 c
2907.92 3911.18 2912.3 3906.8 2912.3 3901.41 c
f
n
2936.73 3947.02 m
2936.73 3941.62 2932.36 3937.25 2926.96 3937.25 c
2921.56 3937.25 2917.19 3941.62 2917.19 3947.02 c
2917.19 3952.42 2921.56 3956.8 2926.96 3956.8 c
2932.36 3956.8 2936.73 3952.42 2936.73 3947.02 c
f
n
2961.17 3992.64 m
2961.17 3987.24 2956.8 3982.86 2951.4 3982.86 c
2946.0 3982.86 2941.62 3987.24 2941.62 3992.64 c
2941.62 3998.04 2946.0 4002.41 2951.4 4002.41 c
2956.8 4002.41 2961.17 3998.04 2961.17 3992.64 c
f
n
2985.61 4038.26 m
2985.61 4032.86 2981.23 4028.48 2975.84 4028.48 c
2970.44 4028.48 2966.06 4032.86 2966.06 4038.26 c
2966.06 4043.66 2970.44 4048.03 2975.84 4048.03 c
2981.23 4048.03 2985.61 4043.66 2985.61 4038.26 c
f
n
3010.05 4083.88 m
3010.05 4078.48 3005.67 4074.1 3000.27 4074.1 c
2994.88 4074.1 2990.5 4078.48 2990.5 4083.88 c
2990.5 4089.27 2994.88 4093.65 3000.27 4093.65 c
3005.67 4093.65 3010.05 4089.27 3010.05 4083.88 c
f
n
3034.49 4129.49 m
3034.49 4124.09 3030.11 4119.71 3024.71 4119.71 c
3019.31 4119.71 3014.94 4124.09 3014.94 4129.49 c
3014.94 4134.89 3019.31 4139.27 3024.71 4139.27 c
3030.11 4139.27 3034.49 4134.89 3034.49 4129.49 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3082.55 4221.54 m
3082.55 4216.14 3078.17 4211.77 3072.77 4211.77 c
3067.38 4211.77 3063.0 4216.14 3063.0 4221.54 c
3063.0 4226.94 3067.38 4231.32 3072.77 4231.32 c
3078.17 4231.32 3082.55 4226.94 3082.55 4221.54 c
f
n
3106.98 4267.16 m
3106.98 4261.76 3102.61 4257.38 3097.21 4257.38 c
3091.81 4257.38 3087.43 4261.76 3087.43 4267.16 c
3087.43 4272.55 3091.81 4276.93 3097.21 4276.93 c
3102.61 4276.93 3106.98 4272.55 3106.98 4267.16 c
f
n
3131.42 4312.77 m
3131.42 4307.38 3127.05 4303.0 3121.65 4303.0 c
3116.25 4303.0 3111.87 4307.38 3111.87 4312.77 c
3111.87 4318.17 3116.25 4322.55 3121.65 4322.55 c
3127.05 4322.55 3131.42 4318.17 3131.42 4312.77 c
f
n
3155.86 4358.39 m
3155.86 4352.99 3151.48 4348.62 3146.09 4348.62 c
3140.69 4348.62 3136.31 4352.99 3136.31 4358.39 c
3136.31 4363.79 3140.69 4368.16 3146.09 4368.16 c
3151.48 4368.16 3155.86 4363.79 3155.86 4358.39 c
f
n
3180.3 4404.01 m
3180.3 4398.61 3175.92 4394.23 3170.52 4394.23 c
3165.12 4394.23 3160.75 4398.61 3160.75 4404.01 c
3160.75 4409.41 3165.12 4413.78 3170.52 4413.78 c
3175.92 4413.78 3180.3 4409.41 3180.3 4404.01 c
f
n
3204.74 4449.62 m
3204.74 4444.23 3200.36 4439.85 3194.96 4439.85 c
3189.56 4439.85 3185.19 4444.23 3185.19 4449.62 c
3185.19 4455.02 3189.56 4459.4 3194.96 4459.4 c
3200.36 4459.4 3204.74 4455.02 3204.74 4449.62 c
f
n
3229.18 4495.24 m
3229.18 4489.84 3224.8 4485.47 3219.4 4485.47 c
3214.0 4485.47 3209.62 4489.84 3209.62 4495.24 c
3209.62 4500.64 3214.0 4505.02 3219.4 4505.02 c
3224.8 4505.02 3229.18 4500.64 3229.18 4495.24 c
f
n
3253.61 4540.86 m
3253.61 4535.46 3249.23 4531.09 3243.84 4531.09 c
3238.44 4531.09 3234.06 4535.46 3234.06 4540.86 c
3234.06 4546.26 3238.44 4550.63 3243.84 4550.63 c
3249.23 4550.63 3253.61 4546.26 3253.61 4540.86 c
f
n
3278.05 4586.48 m
3278.05 4581.08 3273.67 4576.7 3268.27 4576.7 c
3262.88 4576.7 3258.5 4581.08 3258.5 4586.48 c
3258.5 4591.88 3262.88 4596.25 3268.27 4596.25 c
3273.67 4596.25 3278.05 4591.88 3278.05 4586.48 c
f
n
2900.08 3793.06 m
2900.08 3787.66 2895.7 3783.29 2890.3 3783.29 c
2884.91 3783.29 2880.53 3787.66 2880.53 3793.06 c
2880.53 3798.46 2884.91 3802.84 2890.3 3802.84 c
2895.7 3802.84 2900.08 3798.46 2900.08 3793.06 c
f
n
2919.63 3841.12 m
2919.63 3835.73 2915.25 3831.35 2909.86 3831.35 c
2904.46 3831.35 2900.08 3835.73 2900.08 3841.12 c
2900.08 3846.52 2904.46 3850.9 2909.86 3850.9 c
2915.25 3850.9 2919.63 3846.52 2919.63 3841.12 c
f
n
2940.0 3889.19 m
2940.0 3883.79 2935.62 3879.41 2930.22 3879.41 c
2924.82 3879.41 2920.45 3883.79 2920.45 3889.19 c
2920.45 3894.59 2924.82 3898.96 2930.22 3898.96 c
2935.62 3898.96 2940.0 3894.59 2940.0 3889.19 c
f
n
2959.54 3936.43 m
2959.54 3931.04 2955.17 3926.66 2949.77 3926.66 c
2944.37 3926.66 2940.0 3931.04 2940.0 3936.43 c
2940.0 3941.83 2944.37 3946.21 2949.77 3946.21 c
2955.17 3946.21 2959.54 3941.83 2959.54 3936.43 c
f
n
2979.09 3984.49 m
2979.09 3979.09 2974.72 3974.72 2969.32 3974.72 c
2963.92 3974.72 2959.54 3979.09 2959.54 3984.49 c
2959.54 3989.89 2963.92 3994.27 2969.32 3994.27 c
2974.72 3994.27 2979.09 3989.89 2979.09 3984.49 c
f
n
2999.46 4032.55 m
2999.46 4027.16 2995.08 4022.78 2989.68 4022.78 c
2984.29 4022.78 2979.91 4027.16 2979.91 4032.55 c
2979.91 4037.95 2984.29 4042.33 2989.68 4042.33 c
2995.08 4042.33 2999.46 4037.95 2999.46 4032.55 c
f
n
3019.01 4079.8 m
3019.01 4074.4 3014.63 4070.03 3009.23 4070.03 c
3003.84 4070.03 2999.46 4074.4 2999.46 4079.8 c
2999.46 4085.2 3003.84 4089.57 3009.23 4089.57 c
3014.63 4089.57 3019.01 4085.2 3019.01 4079.8 c
f
n
3038.56 4127.86 m
3038.56 4122.46 3034.18 4118.09 3028.79 4118.09 c
3023.39 4118.09 3019.01 4122.46 3019.01 4127.86 c
3019.01 4133.26 3023.39 4137.64 3028.79 4137.64 c
3034.18 4137.64 3038.56 4133.26 3038.56 4127.86 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3078.48 4223.17 m
3078.48 4217.77 3074.1 4213.39 3068.7 4213.39 c
3063.3 4213.39 3058.93 4217.77 3058.93 4223.17 c
3058.93 4228.57 3063.3 4232.95 3068.7 4232.95 c
3074.1 4232.95 3078.48 4228.57 3078.48 4223.17 c
f
n
3098.02 4271.23 m
3098.02 4265.83 3093.65 4261.45 3088.25 4261.45 c
3082.85 4261.45 3078.48 4265.83 3078.48 4271.23 c
3078.48 4276.63 3082.85 4281.0 3088.25 4281.0 c
3093.65 4281.0 3098.02 4276.63 3098.02 4271.23 c
f
n
3117.57 4318.48 m
3117.57 4313.08 3113.2 4308.7 3107.8 4308.7 c
3102.4 4308.7 3098.02 4313.08 3098.02 4318.48 c
3098.02 4323.88 3102.4 4328.25 3107.8 4328.25 c
3113.2 4328.25 3117.57 4323.88 3117.57 4318.48 c
f
n
3137.94 4366.54 m
3137.94 4361.14 3133.56 4356.76 3128.16 4356.76 c
3122.77 4356.76 3118.39 4361.14 3118.39 4366.54 c
3118.39 4371.93 3122.77 4376.31 3128.16 4376.31 c
3133.56 4376.31 3137.94 4371.93 3137.94 4366.54 c
f
n
3157.49 4414.6 m
3157.49 4409.2 3153.11 4404.82 3147.71 4404.82 c
3142.32 4404.82 3137.94 4409.2 3137.94 4414.6 c
3137.94 4420.0 3142.32 4424.37 3147.71 4424.37 c
3153.11 4424.37 3157.49 4420.0 3157.49 4414.6 c
f
n
3177.04 4461.84 m
3177.04 4456.45 3172.66 4452.07 3167.27 4452.07 c
3161.87 4452.07 3157.49 4456.45 3157.49 4461.84 c
3157.49 4467.24 3161.87 4471.62 3167.27 4471.62 c
3172.66 4471.62 3177.04 4467.24 3177.04 4461.84 c
f
n
3197.41 4509.91 m
3197.41 4504.51 3193.03 4500.13 3187.63 4500.13 c
3182.23 4500.13 3177.86 4504.51 3177.86 4509.91 c
3177.86 4515.3 3182.23 4519.68 3187.63 4519.68 c
3193.03 4519.68 3197.41 4515.3 3197.41 4509.91 c
f
n
3216.96 4557.96 m
3216.96 4552.57 3212.58 4548.19 3207.18 4548.19 c
3201.78 4548.19 3197.41 4552.57 3197.41 4557.96 c
3197.41 4563.36 3201.78 4567.74 3207.18 4567.74 c
3212.58 4567.74 3216.96 4563.36 3216.96 4557.96 c
f
n
2938.36 3779.21 m
2938.36 3773.82 2933.99 3769.44 2928.59 3769.44 c
2923.19 3769.44 2918.82 3773.82 2918.82 3779.21 c
2918.82 3784.61 2923.19 3788.99 2928.59 3788.99 c
2933.99 3788.99 2938.36 3784.61 2938.36 3779.21 c
f
n
2953.03 3828.91 m
2953.03 3823.51 2948.65 3819.13 2943.25 3819.13 c
2937.86 3819.13 2933.48 3823.51 2933.48 3828.91 c
2933.48 3834.3 2937.86 3838.68 2943.25 3838.68 c
2948.65 3838.68 2953.03 3834.3 2953.03 3828.91 c
f
n
2968.5 3878.6 m
2968.5 3873.2 2964.13 3868.82 2958.73 3868.82 c
2953.33 3868.82 2948.95 3873.2 2948.95 3878.6 c
2948.95 3884.0 2953.33 3888.37 2958.73 3888.37 c
2964.13 3888.37 2968.5 3884.0 2968.5 3878.6 c
f
n
2983.17 3928.29 m
2983.17 3922.89 2978.79 3918.51 2973.39 3918.51 c
2967.99 3918.51 2963.62 3922.89 2963.62 3928.29 c
2963.62 3933.68 2967.99 3938.06 2973.39 3938.06 c
2978.79 3938.06 2983.17 3933.68 2983.17 3928.29 c
f
n
2998.64 3977.16 m
2998.64 3971.76 2994.27 3967.39 2988.87 3967.39 c
2983.47 3967.39 2979.09 3971.76 2979.09 3977.16 c
2979.09 3982.56 2983.47 3986.94 2988.87 3986.94 c
2994.27 3986.94 2998.64 3982.56 2998.64 3977.16 c
f
n
3013.31 4026.85 m
3013.31 4021.45 3008.93 4017.08 3003.53 4017.08 c
2998.13 4017.08 2993.76 4021.45 2993.76 4026.85 c
2993.76 4032.25 2998.13 4036.63 3003.53 4036.63 c
3008.93 4036.63 3013.31 4032.25 3013.31 4026.85 c
f
n
3028.79 4076.54 m
3028.79 4071.14 3024.41 4066.77 3019.01 4066.77 c
3013.61 4066.77 3009.23 4071.14 3009.23 4076.54 c
3009.23 4081.94 3013.61 4086.32 3019.01 4086.32 c
3024.41 4086.32 3028.79 4081.94 3028.79 4076.54 c
f
n
3043.45 4126.23 m
3043.45 4120.83 3039.07 4116.46 3033.67 4116.46 c
3028.27 4116.46 3023.9 4120.83 3023.9 4126.23 c
3023.9 4131.63 3028.27 4136.01 3033.67 4136.01 c
3039.07 4136.01 3043.45 4131.63 3043.45 4126.23 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3073.59 4224.8 m
3073.59 4219.4 3069.21 4215.02 3063.81 4215.02 c
3058.41 4215.02 3054.04 4219.4 3054.04 4224.8 c
3054.04 4230.2 3058.41 4234.57 3063.81 4234.57 c
3069.21 4234.57 3073.59 4230.2 3073.59 4224.8 c
f
n
3088.25 4274.49 m
3088.25 4269.09 3083.88 4264.71 3078.48 4264.71 c
3073.08 4264.71 3068.7 4269.09 3068.7 4274.49 c
3068.7 4279.89 3073.08 4284.26 3078.48 4284.26 c
3083.88 4284.26 3088.25 4279.89 3088.25 4274.49 c
f
n
3103.73 4324.18 m
3103.73 4318.78 3099.35 4314.4 3093.95 4314.4 c
3088.55 4314.4 3084.18 4318.78 3084.18 4324.18 c
3084.18 4329.58 3088.55 4333.95 3093.95 4333.95 c
3099.35 4333.95 3103.73 4329.58 3103.73 4324.18 c
f
n
3118.39 4373.87 m
3118.39 4368.47 3114.01 4364.09 3108.61 4364.09 c
3103.21 4364.09 3098.84 4368.47 3098.84 4373.87 c
3098.84 4379.27 3103.21 4383.64 3108.61 4383.64 c
3114.01 4383.64 3118.39 4379.27 3118.39 4373.87 c
f
n
3133.87 4422.74 m
3133.87 4417.34 3129.49 4412.97 3124.09 4412.97 c
3118.7 4412.97 3114.32 4417.34 3114.32 4422.74 c
3114.32 4428.14 3118.7 4432.52 3124.09 4432.52 c
3129.49 4432.52 3133.87 4428.14 3133.87 4422.74 c
f
n
3148.53 4472.43 m
3148.53 4467.04 3144.15 4462.66 3138.75 4462.66 c
3133.36 4462.66 3128.98 4467.04 3128.98 4472.43 c
3128.98 4477.83 3133.36 4482.21 3138.75 4482.21 c
3144.15 4482.21 3148.53 4477.83 3148.53 4472.43 c
f
n
3164.01 4522.12 m
3164.01 4516.73 3159.63 4512.35 3154.23 4512.35 c
3148.83 4512.35 3144.46 4516.73 3144.46 4522.12 c
3144.46 4527.52 3148.83 4531.9 3154.23 4531.9 c
3159.63 4531.9 3164.01 4527.52 3164.01 4522.12 c
f
n
3178.67 4571.81 m
3178.67 4566.41 3174.29 4562.04 3168.89 4562.04 c
3163.5 4562.04 3159.12 4566.41 3159.12 4571.81 c
3159.12 4577.21 3163.5 4581.59 3168.89 4581.59 c
3174.29 4581.59 3178.67 4577.21 3178.67 4571.81 c
f
n
2977.46 3769.44 m
2977.46 3764.04 2973.09 3759.67 2967.69 3759.67 c
2962.29 3759.67 2957.91 3764.04 2957.91 3769.44 c
2957.91 3774.84 2962.29 3779.21 2967.69 3779.21 c
2973.09 3779.21 2977.46 3774.84 2977.46 3769.44 c
f
n
2988.05 3820.76 m
2988.05 3815.36 2983.68 3810.98 2978.28 3810.98 c
2972.88 3810.98 2968.5 3815.36 2968.5 3820.76 c
2968.5 3826.16 2972.88 3830.54 2978.28 3830.54 c
2983.68 3830.54 2988.05 3826.16 2988.05 3820.76 c
f
n
2997.83 3871.27 m
2997.83 3865.87 2993.45 3861.49 2988.05 3861.49 c
2982.66 3861.49 2978.28 3865.87 2978.28 3871.27 c
2978.28 3876.66 2982.66 3881.04 2988.05 3881.04 c
2993.45 3881.04 2997.83 3876.66 2997.83 3871.27 c
f
n
3008.42 3921.77 m
3008.42 3916.37 3004.04 3912.0 2998.64 3912.0 c
2993.25 3912.0 2988.87 3916.37 2988.87 3921.77 c
2988.87 3927.17 2993.25 3931.54 2998.64 3931.54 c
3004.04 3931.54 3008.42 3927.17 3008.42 3921.77 c
f
n
3018.2 3972.27 m
3018.2 3966.88 3013.82 3962.5 3008.42 3962.5 c
3003.02 3962.5 2998.64 3966.88 2998.64 3972.27 c
2998.64 3977.67 3003.02 3982.05 3008.42 3982.05 c
3013.82 3982.05 3018.2 3977.67 3018.2 3972.27 c
f
n
3027.97 4023.59 m
3027.97 4018.2 3023.59 4013.82 3018.2 4013.82 c
3012.8 4013.82 3008.42 4018.2 3008.42 4023.59 c
3008.42 4028.99 3012.8 4033.37 3018.2 4033.37 c
3023.59 4033.37 3027.97 4028.99 3027.97 4023.59 c
f
n
3038.56 4074.1 m
3038.56 4068.7 3034.18 4064.32 3028.79 4064.32 c
3023.39 4064.32 3019.01 4068.7 3019.01 4074.1 c
3019.01 4079.5 3023.39 4083.88 3028.79 4083.88 c
3034.18 4083.88 3038.56 4079.5 3038.56 4074.1 c
f
n
3048.34 4124.6 m
3048.34 4119.2 3043.96 4114.83 3038.56 4114.83 c
3033.16 4114.83 3028.79 4119.2 3028.79 4124.6 c
3028.79 4130.0 3033.16 4134.38 3038.56 4134.38 c
3043.96 4134.38 3048.34 4130.0 3048.34 4124.6 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3068.7 4226.43 m
3068.7 4221.03 3064.32 4216.65 3058.93 4216.65 c
3053.53 4216.65 3049.15 4221.03 3049.15 4226.43 c
3049.15 4231.82 3053.53 4236.2 3058.93 4236.2 c
3064.32 4236.2 3068.7 4231.82 3068.7 4226.43 c
f
n
3078.48 4276.93 m
3078.48 4271.54 3074.1 4267.16 3068.7 4267.16 c
3063.3 4267.16 3058.93 4271.54 3058.93 4276.93 c
3058.93 4282.33 3063.3 4286.71 3068.7 4286.71 c
3074.1 4286.71 3078.48 4282.33 3078.48 4276.93 c
f
n
3089.07 4327.44 m
3089.07 4322.04 3084.69 4317.66 3079.29 4317.66 c
3073.89 4317.66 3069.52 4322.04 3069.52 4327.44 c
3069.52 4332.84 3073.89 4337.21 3079.29 4337.21 c
3084.69 4337.21 3089.07 4332.84 3089.07 4327.44 c
f
n
3098.84 4378.75 m
3098.84 4373.36 3094.46 4368.98 3089.07 4368.98 c
3083.67 4368.98 3079.29 4373.36 3079.29 4378.75 c
3079.29 4384.15 3083.67 4388.53 3089.07 4388.53 c
3094.46 4388.53 3098.84 4384.15 3098.84 4378.75 c
f
n
3108.61 4429.26 m
3108.61 4423.86 3104.24 4419.48 3098.84 4419.48 c
3093.44 4419.48 3089.07 4423.86 3089.07 4429.26 c
3089.07 4434.66 3093.44 4439.04 3098.84 4439.04 c
3104.24 4439.04 3108.61 4434.66 3108.61 4429.26 c
f
n
3119.2 4479.77 m
3119.2 4474.37 3114.83 4469.99 3109.43 4469.99 c
3104.03 4469.99 3099.65 4474.37 3099.65 4479.77 c
3099.65 4485.16 3104.03 4489.54 3109.43 4489.54 c
3114.83 4489.54 3119.2 4485.16 3119.2 4479.77 c
f
n
3128.98 4530.27 m
3128.98 4524.87 3124.6 4520.5 3119.2 4520.5 c
3113.8 4520.5 3109.43 4524.87 3109.43 4530.27 c
3109.43 4535.67 3113.8 4540.04 3119.2 4540.04 c
3124.6 4540.04 3128.98 4535.67 3128.98 4530.27 c
f
n
3139.57 4581.59 m
3139.57 4576.19 3135.19 4571.81 3129.79 4571.81 c
3124.39 4571.81 3120.02 4576.19 3120.02 4581.59 c
3120.02 4586.99 3124.39 4591.36 3129.79 4591.36 c
3135.19 4591.36 3139.57 4586.99 3139.57 4581.59 c
f
n
3018.2 3763.74 m
3018.2 3758.34 3013.82 3753.96 3008.42 3753.96 c
3003.02 3753.96 2998.64 3758.34 2998.64 3763.74 c
2998.64 3769.14 3003.02 3773.52 3008.42 3773.52 c
3013.82 3773.52 3018.2 3769.14 3018.2 3763.74 c
f
n
3023.08 3815.06 m
3023.08 3809.66 3018.71 3805.28 3013.31 3805.28 c
3007.91 3805.28 3003.53 3809.66 3003.53 3815.06 c
3003.53 3820.46 3007.91 3824.83 3013.31 3824.83 c
3018.71 3824.83 3023.08 3820.46 3023.08 3815.06 c
f
n
3027.97 3866.38 m
3027.97 3860.98 3023.59 3856.6 3018.2 3856.6 c
3012.8 3856.6 3008.42 3860.98 3008.42 3866.38 c
3008.42 3871.78 3012.8 3876.15 3018.2 3876.15 c
3023.59 3876.15 3027.97 3871.78 3027.97 3866.38 c
f
n
3032.86 3918.51 m
3032.86 3913.11 3028.48 3908.73 3023.08 3908.73 c
3017.68 3908.73 3013.31 3913.11 3013.31 3918.51 c
3013.31 3923.91 3017.68 3928.29 3023.08 3928.29 c
3028.48 3928.29 3032.86 3923.91 3032.86 3918.51 c
f
n
3038.56 3969.83 m
3038.56 3964.43 3034.18 3960.05 3028.79 3960.05 c
3023.39 3960.05 3019.01 3964.43 3019.01 3969.83 c
3019.01 3975.23 3023.39 3979.61 3028.79 3979.61 c
3034.18 3979.61 3038.56 3975.23 3038.56 3969.83 c
f
n
3043.45 4021.15 m
3043.45 4015.75 3039.07 4011.38 3033.67 4011.38 c
3028.27 4011.38 3023.9 4015.75 3023.9 4021.15 c
3023.9 4026.55 3028.27 4030.93 3033.67 4030.93 c
3039.07 4030.93 3043.45 4026.55 3043.45 4021.15 c
f
n
3048.34 4072.47 m
3048.34 4067.07 3043.96 4062.7 3038.56 4062.7 c
3033.16 4062.7 3028.79 4067.07 3028.79 4072.47 c
3028.79 4077.87 3033.16 4082.25 3038.56 4082.25 c
3043.96 4082.25 3048.34 4077.87 3048.34 4072.47 c
f
n
3053.22 4123.79 m
3053.22 4118.39 3048.85 4114.01 3043.45 4114.01 c
3038.05 4114.01 3033.67 4118.39 3033.67 4123.79 c
3033.67 4129.19 3038.05 4133.56 3043.45 4133.56 c
3048.85 4133.56 3053.22 4129.19 3053.22 4123.79 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3063.81 4227.24 m
3063.81 4221.84 3059.43 4217.46 3054.04 4217.46 c
3048.64 4217.46 3044.26 4221.84 3044.26 4227.24 c
3044.26 4232.64 3048.64 4237.02 3054.04 4237.02 c
3059.43 4237.02 3063.81 4232.64 3063.81 4227.24 c
f
n
3068.7 4278.56 m
3068.7 4273.16 3064.32 4268.79 3058.93 4268.79 c
3053.53 4268.79 3049.15 4273.16 3049.15 4278.56 c
3049.15 4283.96 3053.53 4288.34 3058.93 4288.34 c
3064.32 4288.34 3068.7 4283.96 3068.7 4278.56 c
f
n
3073.59 4329.88 m
3073.59 4324.48 3069.21 4320.11 3063.81 4320.11 c
3058.41 4320.11 3054.04 4324.48 3054.04 4329.88 c
3054.04 4335.28 3058.41 4339.66 3063.81 4339.66 c
3069.21 4339.66 3073.59 4335.28 3073.59 4329.88 c
f
n
3078.48 4381.2 m
3078.48 4375.8 3074.1 4371.43 3068.7 4371.43 c
3063.3 4371.43 3058.93 4375.8 3058.93 4381.2 c
3058.93 4386.6 3063.3 4390.97 3068.7 4390.97 c
3074.1 4390.97 3078.48 4386.6 3078.48 4381.2 c
f
n
3084.18 4432.52 m
3084.18 4427.12 3079.8 4422.74 3074.4 4422.74 c
3069.0 4422.74 3064.62 4427.12 3064.62 4432.52 c
3064.62 4437.92 3069.0 4442.29 3074.4 4442.29 c
3079.8 4442.29 3084.18 4437.92 3084.18 4432.52 c
f
n
3089.07 4484.65 m
3089.07 4479.25 3084.69 4474.88 3079.29 4474.88 c
3073.89 4474.88 3069.52 4479.25 3069.52 4484.65 c
3069.52 4490.05 3073.89 4494.43 3079.29 4494.43 c
3084.69 4494.43 3089.07 4490.05 3089.07 4484.65 c
f
n
3093.95 4535.97 m
3093.95 4530.57 3089.57 4526.2 3084.18 4526.2 c
3078.78 4526.2 3074.4 4530.57 3074.4 4535.97 c
3074.4 4541.37 3078.78 4545.75 3084.18 4545.75 c
3089.57 4545.75 3093.95 4541.37 3093.95 4535.97 c
f
n
3098.84 4587.29 m
3098.84 4581.89 3094.46 4577.52 3089.07 4577.52 c
3083.67 4577.52 3079.29 4581.89 3079.29 4587.29 c
3079.29 4592.69 3083.67 4597.07 3089.07 4597.07 c
3094.46 4597.07 3098.84 4592.69 3098.84 4587.29 c
f
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 1497.72 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: LKKAAA+CMSY10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /LKKAAA+CMSY10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-0 -960 943 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705] def
/OtherBlues [-124 -119] def
/BlueScale 0.04379 def
/StdHW [40] def
/StdVW [85] def
/StemSnapH [40 55] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9C4A637> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 0 /minus/periodcentered/multiply/asteriskmath 12 /circledot 15 /bullet
 20 /lessequal/greaterequal 24 /similar/approxequal 28 /lessmuch 32 /space
/arrowright/quotedbl/numbersign/dollar/percent/ampersand
/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/element
/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D
/E/F/G/H/I/J
/K/L/M/N/O/P
/Q/R/S/T/U/V
/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/grave/a/b
/c/d/e/braceleft/braceright/angbracketleft
/angbracketright/bar/bardbl/l/m/backslash
/o/radical/q/r/s/t
/u/v/w/x/dagger/daggerdbl
/braceleft/bar/braceright/asciitilde/bullet/Euro
/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright
/quotedblleft/quotedblright/bullet/endash/emdash/tilde
/trademark/scaron/guilsinglright/oe/bullet/zcaron
/Ydieresis/space/exclamdown/cent/sterling/currency
/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex
/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave
/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex
/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute
/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn
/ydieresis
/N33 (LKKAAA+CMSY10) -1 TZ
251.545 364.327 m
%ADOBeginSubsetFont: LKKAAA+CMSY10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/LKKAAA+CMSY10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB432204C2EF
9CAB07AB654895DD8804EF7ED97DE3E2616CBB2FB21BE3D9> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/LKKAAA+CMSY10 findfont /Encoding get
dup 0 /minus put
pop
end
+%ADOEndSubsetFont
+/N33 10.6637 Tf
(\000) show
259.874 364.327 m
%ADOBeginSubsetFont: UPIBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/UPIBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/UPIBAA+CMR10 findfont /Encoding get
dup 48 /zero put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(0) show
%ADOBeginSubsetFont: ERNAAA+CMMI10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /ERNAAA+CMMI10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-13 -250 1044 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 442 453 466] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [72] def
/StemSnapH [25 31] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /alpha/beta 14 /delta 21 /lambda
/mu 24 /xi/pi 27 /sigma 30 /phi/chi
/psi/exclam/epsilon/theta1/dollar/percent
/ampersand/phi1/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/period/comma/less/slash
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/braceleft/bar/braceright/asciitilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N21 (ERNAAA+CMMI10) -1 TZ
265.152 364.327 m
%ADOBeginSubsetFont: ERNAAA+CMMI10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/ERNAAA+CMMI10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/period <1C60D8A8C9B08A9570810981675968F2C907C696DFE9BE69433F613
9DF6C45B8165ACC43B6E0B309859F778ABCF0> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/ERNAAA+CMMI10 findfont /Encoding get
dup 58 /period put
pop
end
+%ADOEndSubsetFont
+/N21 10.6637 Tf
(:) show
268.084 364.327 m
/N41 10.6637 Tf
(500)
[34.0627 37.2561 5.27853 ] pdfxs
344.682 364.327 m
/N21 10.6637 Tf
(:) show
347.615 364.327 m
/N41 10.6637 Tf
(5) show
236.739 372.965 m
/N33 10.6637 Tf
(\000) show
245.067 372.965 m
/N41 10.6637 Tf
(0) show
250.346 372.965 m
/N21 10.6637 Tf
(:) show
253.278 372.965 m
/N41 10.6637 Tf
(5) show
255.018 413.958 m
(0) show
246.65 455.339 m
(0) show
251.929 455.339 m
/N21 10.6637 Tf
(:) show
254.861 455.339 m
/N41 10.6637 Tf
(5) show
Q
q
n
3703.6 4688.29 m
4835.88 4688.29 l
4835.88 3620.36 l
3703.6 3620.36 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
3829.05 4649.19 m
4725.1 4649.19 l
4725.1 3701.01 l
3829.05 3701.01 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 2750.54 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
Q
Q
/LKKAAA+CMSY10 /Font _pdfUndefineResource
/N33 /Font _pdfUndefineResource
/UPIBAA+CMR10 /Font _pdfUndefineResource
/N41 /Font _pdfUndefineResource
/ERNAAA+CMMI10 /Font _pdfUndefineResource
/N21 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/tutorial/images/modified_polar_grid.pdf b/doc/tutorial/images/modified_polar_grid.pdf
new file mode 100644
index 0000000..883c3a2
Binary files /dev/null and b/doc/tutorial/images/modified_polar_grid.pdf differ
diff --git a/doc/tutorial/images/nfft_times_flops.eps b/doc/tutorial/images/nfft_times_flops.eps
new file mode 100644
index 0000000..044d8fb
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_flops.eps
@@ -0,0 +1,511 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc. Version 7.6.0.324 (R2008a). Operating System: Linux 2.6.22.12-0.1-default #1 SMP 2007/11/06 23:05:18 UTC i686.
+%%Title: ./nfft_times_flops.eps
+%%CreationDate: 10/10/2008  08:49:54
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    75   338   547   463
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    75   338   547   463
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  687  1783  5665  1498 MR c np
+85 dict begin %Colortable dictionary
+/c0 { 0.000000 0.000000 0.000000 sr} bdef
+/c1 { 1.000000 1.000000 1.000000 sr} bdef
+/c2 { 0.900000 0.000000 0.000000 sr} bdef
+/c3 { 0.000000 0.820000 0.000000 sr} bdef
+/c4 { 0.000000 0.000000 0.800000 sr} bdef
+/c5 { 0.910000 0.820000 0.320000 sr} bdef
+/c6 { 1.000000 0.260000 0.820000 sr} bdef
+/c7 { 0.000000 0.820000 0.820000 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6917 5186 PR
+6 w
+0 1340 5360 0 0 -1340 899 3172 4 MP
+PP
+-5360 0 0 1340 5360 0 0 -1340 899 3172 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 3172 mt 6259 3172 L
+ 899 1832 mt 6259 1832 L
+ 899 3172 mt  899 1832 L
+6259 3172 mt 6259 1832 L
+ 899 3172 mt 6259 3172 L
+ 899 3172 mt  899 1832 L
+1181 3172 mt 1181 3118 L
+1181 1832 mt 1181 1885 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 80 FMSR
+
+1159 3280 mt 
+(4) s
+1745 3172 mt 1745 3118 L
+1745 1832 mt 1745 1885 L
+1723 3280 mt 
+(6) s
+2309 3172 mt 2309 3118 L
+2309 1832 mt 2309 1885 L
+2287 3280 mt 
+(8) s
+2873 3172 mt 2873 3118 L
+2873 1832 mt 2873 1885 L
+2829 3280 mt 
+(10) s
+3437 3172 mt 3437 3118 L
+3437 1832 mt 3437 1885 L
+3393 3280 mt 
+(12) s
+4002 3172 mt 4002 3118 L
+4002 1832 mt 4002 1885 L
+3958 3280 mt 
+(14) s
+4566 3172 mt 4566 3118 L
+4566 1832 mt 4566 1885 L
+4522 3280 mt 
+(16) s
+5130 3172 mt 5130 3118 L
+5130 1832 mt 5130 1885 L
+5086 3280 mt 
+(18) s
+5694 3172 mt 5694 3118 L
+5694 1832 mt 5694 1885 L
+5650 3280 mt 
+(20) s
+6259 3172 mt 6259 3118 L
+6259 1832 mt 6259 1885 L
+6215 3280 mt 
+(22) s
+ 899 3172 mt  952 3172 L
+6259 3172 mt 6205 3172 L
+ 820 3201 mt 
+(0) s
+ 899 2892 mt  952 2892 L
+6259 2892 mt 6205 2892 L
+ 731 2921 mt 
+(500) s
+ 899 2613 mt  952 2613 L
+6259 2613 mt 6205 2613 L
+ 687 2642 mt 
+(1000) s
+ 899 2334 mt  952 2334 L
+6259 2334 mt 6205 2334 L
+ 687 2363 mt 
+(1500) s
+ 899 2055 mt  952 2055 L
+6259 2055 mt 6205 2055 L
+ 687 2084 mt 
+(2000) s
+ 899 3172 mt 6259 3172 L
+ 899 1832 mt 6259 1832 L
+ 899 3172 mt  899 1832 L
+6259 3172 mt 6259 1832 L
+gs 899 1832 5361 1341 MR c np
+7.2 w
+283 28 282 -7 282 14 282 -6 282 25 282 37 282 -5 282 33 
+282 164 283 374 282 134 282 95 282 26 282 -91 282 58 282 29 
+282 -102 282 -213 282 -335 899 2656 20 MP stroke
+gr
+
+7.2 w
+  20   20  899 2656 FO
+  20   20 1181 2321 FO
+  20   20 1463 2108 FO
+  20   20 1745 2006 FO
+  20   20 2027 2035 FO
+  20   20 2309 2093 FO
+  20   20 2591 2002 FO
+  20   20 2873 2028 FO
+  20   20 3155 2123 FO
+  20   20 3437 2257 FO
+  20   20 3720 2631 FO
+  20   20 4002 2795 FO
+  20   20 4284 2828 FO
+  20   20 4566 2823 FO
+  20   20 4848 2860 FO
+  20   20 5130 2885 FO
+  20   20 5412 2879 FO
+  20   20 5694 2893 FO
+  20   20 5976 2886 FO
+  20   20 6259 2914 FO
+gs 899 1832 5361 1341 MR c np
+283 5 282 9 282 7 282 -9 282 4 282 11 282 3 282 -6 
+282 12 283 23 282 22 282 144 282 -21 282 13 282 -14 282 -51 
+282 -14 282 -46 282 -23 899 2907 20 MP stroke
+gr
+
+ 885 2893 mt  913 2921 L
+ 913 2893 mt  885 2921 L
+1167 2870 mt 1195 2898 L
+1195 2870 mt 1167 2898 L
+1449 2824 mt 1477 2852 L
+1477 2824 mt 1449 2852 L
+1731 2810 mt 1759 2838 L
+1759 2810 mt 1731 2838 L
+2013 2759 mt 2041 2787 L
+2041 2759 mt 2013 2787 L
+2295 2745 mt 2323 2773 L
+2323 2745 mt 2295 2773 L
+2577 2758 mt 2605 2786 L
+2605 2758 mt 2577 2786 L
+2859 2737 mt 2887 2765 L
+2887 2737 mt 2859 2765 L
+3141 2881 mt 3169 2909 L
+3169 2881 mt 3141 2909 L
+3423 2903 mt 3451 2931 L
+3451 2903 mt 3423 2931 L
+3706 2926 mt 3734 2954 L
+3734 2926 mt 3706 2954 L
+3988 2938 mt 4016 2966 L
+4016 2938 mt 3988 2966 L
+4270 2932 mt 4298 2960 L
+4298 2932 mt 4270 2960 L
+4552 2935 mt 4580 2963 L
+4580 2935 mt 4552 2963 L
+4834 2946 mt 4862 2974 L
+4862 2946 mt 4834 2974 L
+5116 2950 mt 5144 2978 L
+5144 2950 mt 5116 2978 L
+5398 2941 mt 5426 2969 L
+5426 2941 mt 5398 2969 L
+5680 2948 mt 5708 2976 L
+5708 2948 mt 5680 2976 L
+5962 2957 mt 5990 2985 L
+5990 2957 mt 5962 2985 L
+6245 2962 mt 6273 2990 L
+6273 2962 mt 6245 2990 L
+gs 899 1832 5361 1341 MR c np
+283 6 282 10 282 4 282 -10 282 -1 282 14 282 2 282 0 
+282 3 283 23 282 52 282 118 282 0 282 -10 282 -27 282 -22 
+282 -13 282 -56 282 -41 899 2924 20 MP stroke
+gr
+
+ 879 2924 mt  919 2924 L
+ 899 2904 mt  899 2944 L
+1161 2883 mt 1201 2883 L
+1181 2863 mt 1181 2903 L
+1443 2827 mt 1483 2827 L
+1463 2807 mt 1463 2847 L
+1725 2814 mt 1765 2814 L
+1745 2794 mt 1745 2834 L
+2007 2792 mt 2047 2792 L
+2027 2772 mt 2027 2812 L
+2289 2765 mt 2329 2765 L
+2309 2745 mt 2309 2785 L
+2571 2755 mt 2611 2755 L
+2591 2735 mt 2591 2775 L
+2853 2755 mt 2893 2755 L
+2873 2735 mt 2873 2775 L
+3135 2873 mt 3175 2873 L
+3155 2853 mt 3155 2893 L
+3417 2925 mt 3457 2925 L
+3437 2905 mt 3437 2945 L
+3700 2948 mt 3740 2948 L
+3720 2928 mt 3720 2968 L
+3982 2951 mt 4022 2951 L
+4002 2931 mt 4002 2971 L
+4264 2951 mt 4304 2951 L
+4284 2931 mt 4284 2971 L
+4546 2953 mt 4586 2953 L
+4566 2933 mt 4566 2973 L
+4828 2967 mt 4868 2967 L
+4848 2947 mt 4848 2987 L
+5110 2966 mt 5150 2966 L
+5130 2946 mt 5130 2986 L
+5392 2956 mt 5432 2956 L
+5412 2936 mt 5412 2976 L
+5674 2960 mt 5714 2960 L
+5694 2940 mt 5694 2980 L
+5956 2970 mt 5996 2970 L
+5976 2950 mt 5976 2990 L
+6239 2976 mt 6279 2976 L
+6259 2956 mt 6259 2996 L
+gs 899 1832 5361 1341 MR c np
+DO
+565 -7 564 -26 564 -18 564 243 565 767 564 156 564 0 564 -108 
+1745 1980 9 MP stroke
+SO
+gr
+
+  20   20 1745 1980 FO
+  20   20 2309 1872 FO
+  20   20 2873 1872 FO
+  20   20 3437 2028 FO
+  20   20 4002 2795 FO
+  20   20 4566 3038 FO
+  20   20 5130 3020 FO
+  20   20 5694 2994 FO
+  20   20 6259 2987 FO
+gs 899 1832 5361 1341 MR c np
+DO
+565 15 564 9 564 -11 564 0 565 69 564 53 564 31 564 -25 
+1745 2896 9 MP stroke
+SO
+gr
+
+1731 2882 mt 1759 2910 L
+1759 2882 mt 1731 2910 L
+2295 2857 mt 2323 2885 L
+2323 2857 mt 2295 2885 L
+2859 2888 mt 2887 2916 L
+2887 2888 mt 2859 2916 L
+3423 2941 mt 3451 2969 L
+3451 2941 mt 3423 2969 L
+3988 3010 mt 4016 3038 L
+4016 3010 mt 3988 3038 L
+4552 3010 mt 4580 3038 L
+4580 3010 mt 4552 3038 L
+5116 2999 mt 5144 3027 L
+5144 2999 mt 5116 3027 L
+5680 3008 mt 5708 3036 L
+5708 3008 mt 5680 3036 L
+6245 3023 mt 6273 3051 L
+6273 3023 mt 6245 3051 L
+gs 899 1832 5361 1341 MR c np
+DO
+565 27 564 -4 564 -17 564 -5 565 93 564 107 564 6 564 -39 
+1745 2880 9 MP stroke
+SO
+gr
+
+1725 2880 mt 1765 2880 L
+1745 2860 mt 1745 2900 L
+2289 2841 mt 2329 2841 L
+2309 2821 mt 2309 2861 L
+2853 2847 mt 2893 2847 L
+2873 2827 mt 2873 2867 L
+3417 2954 mt 3457 2954 L
+3437 2934 mt 3437 2974 L
+3982 3047 mt 4022 3047 L
+4002 3027 mt 4002 3067 L
+4546 3042 mt 4586 3042 L
+4566 3022 mt 4566 3062 L
+5110 3025 mt 5150 3025 L
+5130 3005 mt 5130 3045 L
+5674 3021 mt 5714 3021 L
+5694 3001 mt 5694 3041 L
+6239 3048 mt 6279 3048 L
+6259 3028 mt 6259 3068 L
+gs 899 1832 5361 1341 MR c np
+DA
+846 207 846 55 847 855 846 39 2591 1885 5 MP stroke
+SO
+gr
+
+  20   20 2591 1885 FO
+  20   20 3437 1924 FO
+  20   20 4284 2779 FO
+  20   20 5130 2834 FO
+  20   20 5976 3041 FO
+gs 899 1832 5361 1341 MR c np
+DA
+846 86 846 30 847 21 846 29 2591 2951 5 MP stroke
+SO
+gr
+
+2577 2937 mt 2605 2965 L
+2605 2937 mt 2577 2965 L
+3423 2966 mt 3451 2994 L
+3451 2966 mt 3423 2994 L
+4270 2987 mt 4298 3015 L
+4298 2987 mt 4270 3015 L
+5116 3017 mt 5144 3045 L
+5144 3017 mt 5116 3045 L
+5962 3103 mt 5990 3131 L
+5990 3103 mt 5962 3131 L
+gs 899 1832 5361 1341 MR c np
+DA
+846 20 846 33 847 31 846 75 2591 2917 5 MP stroke
+SO
+gr
+
+2571 2917 mt 2611 2917 L
+2591 2897 mt 2591 2937 L
+3417 2992 mt 3457 2992 L
+3437 2972 mt 3437 3012 L
+4264 3023 mt 4304 3023 L
+4284 3003 mt 4284 3043 L
+5110 3056 mt 5150 3056 L
+5130 3036 mt 5130 3076 L
+5956 3076 mt 5996 3076 L
+5976 3056 mt 5976 3096 L
+gs 899 1832 5361 1341 MR c np
+6 w
+gr
+
+6 w
+
+end %%Color Dict
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/nfft_times_flops.pdf b/doc/tutorial/images/nfft_times_flops.pdf
new file mode 100644
index 0000000..c8b92a7
Binary files /dev/null and b/doc/tutorial/images/nfft_times_flops.pdf differ
diff --git a/doc/tutorial/images/nfft_times_frodo.txt b/doc/tutorial/images/nfft_times_frodo.txt
new file mode 100644
index 0000000..9e25808
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo.txt
@@ -0,0 +1,39 @@
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=1$} \\ \hline
+\verb+3+&	\verb+1.3e-07+ &	\verb+8.6e-06+ &	\verb+1.3e-06+ & \verb+(10.0)+\\
+\verb+4+&	\verb+2.1e-07+ &	\verb+3.5e-05+ &	\verb+2.7e-06+ & \verb+(12.9)+\\
+\verb+5+&	\verb+4.2e-07+ &	\verb+1.4e-04+ &	\verb+5.2e-06+ & \verb+(12.3)+\\
+\verb+6+&	\verb+9.2e-07+ &	\verb+5.7e-04+ &	\verb+1.1e-05+ & \verb+(11.5)+\\
+\verb+7+&	\verb+2.2e-06+ &	\verb+2.3e-03+ &	\verb+2.1e-05+ & \verb+(9.5)+\\
+\verb+8+&	\verb+5.3e-06+ &	\verb+9.2e-03+ &	\verb+4.4e-05+ & \verb+(8.3)+\\
+\verb+9+&	\verb+1.1e-05+ &	\verb+3.7e-02+ &	\verb+9.8e-05+ & \verb+(8.8)+\\
+\verb+10+&	\verb+2.5e-05+ &	\verb+1.5e-01+ &	\verb+2.0e-04+ & \verb+(8.1)+\\
+\verb+11+&	\verb+6.0e-05+ &	\verb+6.0e-01+ &	\verb+6.5e-04+ & \verb+(10.8)+\\
+\verb+12+&	\verb+1.5e-04+ &	\verb+2.4e+00+ &	\verb+1.5e-03+ & \verb+(9.8)+\\
+\verb+13+&	\verb+5.5e-04+ &	\verb+9.6e+00+ &	\verb+3.5e-03+ & \verb+(6.4)+\\
+\verb+14+&	\verb+1.7e-03+ &	\verb+4.0e+01+ &	\verb+7.8e-03+ & \verb+(4.6)+\\
+\verb+15+&	\verb+4.0e-03+ &	\verb+1.6e+02+ &	\verb+1.6e-02+ & \verb+(4.1)+\\
+\verb+16+&	\verb+8.4e-03+ &	\verb+*+	&	\verb+3.4e-02+ & \verb+(4.1)+\\
+\verb+17+&	\verb+2.0e-02+ &	\verb+*+	&	\verb+7.5e-02+ & \verb+(3.8)+\\
+\verb+18+&	\verb+4.6e-02+ &	\verb+*+	&	\verb+1.6e-01+ & \verb+(3.4)+\\
+\verb+19+&	\verb+9.5e-02+ &	\verb+*+	&	\verb+3.2e-01+ & \verb+(3.4)+\\
+\verb+20+&	\verb+2.1e-01+ &	\verb+*+	&	\verb+6.9e-01+ & \verb+(3.3)+\\
+\verb+21+&	\verb+4.3e-01+ &	\verb+*+	&	\verb+1.5e+00+ & \verb+(3.5)+\\
+\verb+22+&	\verb+1.0e+00+ &	\verb+*+	&	\verb+3.2e+00+ & \verb+(3.1)+\\
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=2$} \\ \hline
+\verb+6+&	\verb+9.0e-07+ &	\verb+6.0e-04+ &	\verb+6.3e-05+ & \verb+(70.4)+\\
+\verb+8+&	\verb+4.4e-06+ &	\verb+9.5e-03+ &	\verb+2.5e-04+ & \verb+(58.0)+\\
+\verb+10+&	\verb+2.2e-05+ &	\verb+1.5e-01+ &	\verb+1.2e-03+ & \verb+(55.0)+\\
+\verb+12+&	\verb+1.2e-04+ &	\verb+2.4e+00+ &	\verb+6.4e-03+ & \verb+(52.5)+\\
+\verb+14+&	\verb+1.7e-03+ &	\verb+4.0e+01+ &	\verb+4.0e-02+ & \verb+(23.4)+\\
+\verb+16+&	\verb+2.2e-02+ &	\verb+*+	&	\verb+1.7e-01+ & \verb+(7.8)+\\
+\verb+18+&	\verb+8.7e-02+ &	\verb+*+	&	\verb+6.7e-01+ & \verb+(7.7)+\\
+\verb+20+&	\verb+3.3e-01+ &	\verb+*+	&	\verb+3.0e+00+ & \verb+(9.1)+\\
+\verb+22+&	\verb+1.4e+00+ &	\verb+*+	&	\verb+1.4e+01+ & \verb+(10.1)+\\
+\hline \hline \multicolumn{5}{|c|}{$d=3$} \\ \hline
+\verb+9+&	\verb+1.0e-05+ &	\verb+3.8e-02+ &	\verb+4.4e-03+ & \verb+(423.4)+\\
+\verb+12+&	\verb+1.1e-04+ &	\verb+2.4e+00+ &	\verb+4.2e-02+ & \verb+(369.1)+\\
+\verb+15+&	\verb+3.5e-03+ &	\verb+1.6e+02+ &	\verb+3.9e-01+ & \verb+(110.8)+\\
+\verb+18+&	\verb+3.9e-02+ &	\verb+*+	&	\verb+3.9e+00+ & \verb+(99.3)+\\
+\verb+21+&	\verb+9.4e-01+ &	\verb+*+	&	\verb+8.4e+01+ & \verb+(89.0)+\\
diff --git a/doc/tutorial/images/nfft_times_frodo_flops.m b/doc/tutorial/images/nfft_times_frodo_flops.m
new file mode 100644
index 0000000..eb40343
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_flops.m
@@ -0,0 +1,36 @@
+3	1.3e-07	8.6e-06	1.3e-06 10.0
+4	2.1e-07	3.5e-05	2.7e-06 12.9
+5	4.2e-07	1.4e-04	5.2e-06 12.3
+6	9.2e-07	5.7e-04	1.1e-05 11.5
+7	2.2e-06	2.3e-03	2.1e-05 9.5
+8	5.3e-06	9.2e-03	4.4e-05 8.3
+9	1.1e-05	3.7e-02	9.8e-05 8.8
+10	2.5e-05	1.5e-01	2.0e-04 8.1
+11	6.0e-05	6.0e-01	6.5e-04 10.8
+12	1.5e-04	2.4e+00	1.5e-03 9.8
+13	5.5e-04	9.6e+00	3.5e-03 6.4
+14	1.7e-03	4.0e+01	7.8e-03 4.6
+15	4.0e-03	1.6e+02	1.6e-02 4.1
+16	8.4e-03	nan    	3.4e-02 4.1
+17	2.0e-02	nan    	7.5e-02 3.8
+18	4.6e-02	nan    	1.6e-01 3.4
+19	9.5e-02	nan    	3.2e-01 3.4
+20	2.1e-01	nan    	6.9e-01 3.3
+21	4.3e-01	nan    	1.5e+00 3.5
+22	1.0e+00	nan    	3.2e+00 3.1
+
+6	9.0e-07	6.0e-04	6.3e-05 70.4
+8	4.4e-06	9.5e-03	2.5e-04 58.0
+10	2.2e-05	1.5e-01	1.2e-03 55.0
+12	1.2e-04	2.4e+00	6.4e-03 52.5
+14	1.7e-03	4.0e+01	4.0e-02 23.4
+16	2.2e-02	nan    	1.7e-01 7.8
+18	8.7e-02	nan    	6.7e-01 7.7
+20	3.3e-01	nan    	3.0e+00 9.1
+22	1.4e+00	nan    	1.4e+01 10.1
+
+9	1.0e-05	3.8e-02	4.4e-03 423.4
+12	1.1e-04	2.4e+00	4.2e-02 369.1
+15	3.5e-03	1.6e+02	3.9e-01 110.8
+18	3.9e-02	nan    	3.9e+00 99.3
+21	9.4e-01	nan    	8.4e+01 89.0
diff --git a/doc/tutorial/images/nfft_times_frodo_m_2.txt b/doc/tutorial/images/nfft_times_frodo_m_2.txt
new file mode 100644
index 0000000..c2a226b
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_m_2.txt
@@ -0,0 +1,39 @@
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=1$} \\ \hline
+\verb+3+&	\verb+1.3e-07+ &	\verb+8.6e-06+ &	\verb+1.1e-06+ & \verb+(8.6)+\\
+\verb+4+&	\verb+2.1e-07+ &	\verb+3.5e-05+ &	\verb+2.2e-06+ & \verb+(10.5)+\\
+\verb+5+&	\verb+3.7e-07+ &	\verb+1.4e-04+ &	\verb+4.2e-06+ & \verb+(11.4)+\\
+\verb+6+&	\verb+9.4e-07+ &	\verb+5.7e-04+ &	\verb+9.1e-06+ & \verb+(9.8)+\\
+\verb+7+&	\verb+2.1e-06+ &	\verb+2.3e-03+ &	\verb+1.9e-05+ & \verb+(9.0)+\\
+\verb+8+&	\verb+5.1e-06+ &	\verb+9.2e-03+ &	\verb+3.9e-05+ & \verb+(7.7)+\\
+\verb+9+&	\verb+1.1e-05+ &	\verb+3.7e-02+ &	\verb+8.3e-05+ & \verb+(7.4)+\\
+\verb+10+&	\verb+2.5e-05+ &	\verb+1.5e-01+ &	\verb+1.8e-04+ & \verb+(7.1)+\\
+\verb+11+&	\verb+6.1e-05+ &	\verb+6.0e-01+ &	\verb+5.4e-04+ & \verb+(8.9)+\\
+\verb+12+&	\verb+1.6e-04+ &	\verb+2.4e+00+ &	\verb+1.4e-03+ & \verb+(8.9)+\\
+\verb+13+&	\verb+5.8e-04+ &	\verb+9.6e+00+ &	\verb+3.3e-03+ & \verb+(5.6)+\\
+\verb+14+&	\verb+1.6e-03+ &	\verb+3.9e+01+ &	\verb+7.1e-03+ & \verb+(4.3)+\\
+\verb+15+&	\verb+4.0e-03+ &	\verb+1.6e+02+ &	\verb+1.5e-02+ & \verb+(3.7)+\\
+\verb+16+&	\verb+8.5e-03+ &	\verb+*+	&	\verb+3.2e-02+ & \verb+(3.8)+\\
+\verb+17+&	\verb+2.0e-02+ &	\verb+*+	&	\verb+7.2e-02+ & \verb+(3.6)+\\
+\verb+18+&	\verb+4.6e-02+ &	\verb+*+	&	\verb+1.5e-01+ & \verb+(3.2)+\\
+\verb+19+&	\verb+9.5e-02+ &	\verb+*+	&	\verb+3.0e-01+ & \verb+(3.1)+\\
+\verb+20+&	\verb+2.0e-01+ &	\verb+*+	&	\verb+6.4e-01+ & \verb+(3.3)+\\
+\verb+21+&	\verb+4.5e-01+ &	\verb+*+	&	\verb+1.4e+00+ & \verb+(3.2)+\\
+\verb+22+&	\verb+1.0e+00+ &	\verb+*+	&	\verb+3.0e+00+ & \verb+(2.9)+\\
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=2$} \\ \hline
+\verb+6+&	\verb+9.6e-07+ &	\verb+6.0e-04+ &	\verb+3.2e-05+ & \verb+(33.2)+\\
+\verb+8+&	\verb+4.5e-06+ &	\verb+9.5e-03+ &	\verb+1.3e-04+ & \verb+(29.0)+\\
+\verb+10+&	\verb+2.2e-05+ &	\verb+1.5e-01+ &	\verb+6.0e-04+ & \verb+(27.4)+\\
+\verb+12+&	\verb+1.2e-04+ &	\verb+2.4e+00+ &	\verb+4.0e-03+ & \verb+(32.2)+\\
+\verb+14+&	\verb+1.7e-03+ &	\verb+4.0e+01+ &	\verb+3.1e-02+ & \verb+(18.1)+\\
+\verb+16+&	\verb+2.1e-02+ &	\verb+*+	&	\verb+1.3e-01+ & \verb+(6.1)+\\
+\verb+18+&	\verb+8.5e-02+ &	\verb+*+	&	\verb+5.0e-01+ & \verb+(5.8)+\\
+\verb+20+&	\verb+3.2e-01+ &	\verb+*+	&	\verb+2.1e+00+ & \verb+(6.4)+\\
+\verb+22+&	\verb+1.4e+00+ &	\verb+*+	&	\verb+1.1e+01+ & \verb+(7.9)+\\
+\hline \hline \multicolumn{5}{|c|}{$d=3$} \\ \hline
+\verb+9+&	\verb+1.0e-05+ &	\verb+3.9e-02+ &	\verb+1.1e-03+ & \verb+(109.5)+\\
+\verb+12+&	\verb+1.2e-04+ &	\verb+2.4e+00+ &	\verb+1.4e-02+ & \verb+(115.8)+\\
+\verb+15+&	\verb+3.5e-03+ &	\verb+1.6e+02+ &	\verb+1.5e-01+ & \verb+(41.8)+\\
+\verb+18+&	\verb+3.9e-02+ &	\verb+*+	&	\verb+1.7e+00+ & \verb+(42.4)+\\
+\verb+21+&	\verb+9.0e-01+ &	\verb+*+	&	\verb+1.8e+01+ & \verb+(19.6)+\\
diff --git a/doc/tutorial/images/nfft_times_frodo_m_2_flops.m b/doc/tutorial/images/nfft_times_frodo_m_2_flops.m
new file mode 100644
index 0000000..62501da
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_m_2_flops.m
@@ -0,0 +1,36 @@
+3	1.3e-07	8.6e-06	1.1e-06 8.6
+4	2.1e-07	3.5e-05	2.2e-06 10.5
+5	3.7e-07	1.4e-04	4.2e-06 11.4
+6	9.4e-07	5.7e-04	9.1e-06 9.8
+7	2.1e-06	2.3e-03	1.9e-05 9.0
+8	5.1e-06	9.2e-03	3.9e-05 7.7
+9	1.1e-05	3.7e-02	8.3e-05 7.4
+10	2.5e-05	1.5e-01	1.8e-04 7.1
+11	6.1e-05	6.0e-01	5.4e-04 8.9
+12	1.6e-04	2.4e+00	1.4e-03 8.9
+13	5.8e-04	9.6e+00	3.3e-03 5.6
+14	1.6e-03	3.9e+01	7.1e-03 4.3
+15	4.0e-03	1.6e+02	1.5e-02 3.7
+16	8.5e-03	nan	3.2e-02 3.8
+17	2.0e-02	nan	7.2e-02 3.6
+18	4.6e-02	nan	1.5e-01 3.2
+19	9.5e-02	nan	3.0e-01 3.1
+20	2.0e-01	nan	6.4e-01 3.3
+21	4.5e-01	nan	1.4e+00 3.2
+22	1.0e+00	nan	3.0e+00 2.9
+
+6	9.6e-07	6.0e-04	3.2e-05 33.2
+8	4.5e-06	9.5e-03	1.3e-04 29.0
+10	2.2e-05	1.5e-01	6.0e-04 27.4
+12	1.2e-04	2.4e+00	4.0e-03 32.2
+14	1.7e-03	4.0e+01	3.1e-02 18.1
+16	2.1e-02	nan	1.3e-01 6.1
+18	8.5e-02	nan	5.0e-01 5.8
+20	3.2e-01	nan	2.1e+00 6.4
+22	1.4e+00	nan	1.1e+01 7.9
+
+9	1.0e-05	3.9e-02	1.1e-03 109.5
+12	1.2e-04	2.4e+00	1.4e-02 115.8
+15	3.5e-03	1.6e+02	1.5e-01 41.8
+18	3.9e-02	nan	1.7e+00 42.4
+21	9.0e-01	nan	1.8e+01 19.6
diff --git a/doc/tutorial/images/nfft_times_frodo_show.m b/doc/tutorial/images/nfft_times_frodo_show.m
new file mode 100644
index 0000000..aaf8d1f
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_show.m
@@ -0,0 +1,47 @@
+load nfft_times_frodo_m_2_flops.m
+load nfft_times_frodo_flops.m
+
+A=nfft_times_frodo_flops;
+B=nfft_times_frodo_m_2_flops;
+n1=A(1:20,1);
+r1=A(1:20,2);
+s1=A(1:20,4);
+t1=B(1:20,4);
+
+n2=A(21:29,1);
+r2=A(21:29,2);
+s2=A(21:29,4);
+t2=B(21:29,4);
+
+n3=A(30:34,1);
+r3=A(30:34,2);
+s3=A(30:34,4);
+t3=B(30:34,4);
+
+h=plot(n1,5*2.^n1.*n1 ./ r1*10^-6, 'k-', ...
+     n1,5*2.^n1.*n1 ./ r1*10^-6, 'ko', ...
+     n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*9+0)*2.^n1) ./ s1*10^-6, 'k-', ...
+     n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*9+0)*2.^n1) ./ s1*10^-6, 'kx', ...
+     n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*5+0)*2.^n1) ./ t1*10^-6, 'k-', ...
+     n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*5+0)*2.^n1) ./ t1*10^-6, 'k+', ...
+     n2,5*2.^n2.*n2 ./ r2*10^-6, 'k:', ...
+     n2,5*2.^n2.*n2 ./ r2*10^-6, 'ko', ...
+     n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*9^2+0)*2.^n2) ./ s2*10^-6, 'k:', ...
+     n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*9^2+0)*2.^n2) ./ s2*10^-6, 'kx', ...
+     n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*5^2+0)*2.^n2) ./ t2*10^-6, 'k:', ...
+     n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*5^2+0)*2.^n2) ./ t2*10^-6, 'k+', ...
+     n3,5*2.^n3.*n3 ./ r3*10^-6, 'k--', ...
+     n3,5*2.^n3.*n3 ./ r3*10^-6, 'ko', ...
+     n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*9^3+0)*2.^n3) ./ s3*10^-6, 'k--', ...
+     n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*9^3+0)*2.^n3) ./ s3*10^-6, 'kx', ...
+     n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*5^3+0)*2.^n3) ./ t3*10^-6, 'k--', ...
+     n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*5^3+0)*2.^n3) ./ t3*10^-6, 'k+');
+
+axis([3,22,0,2400]);
+set(gcf,'Position',[100,100,1000,333]);
+set(h,'LineWidth',1.8/3); set(h,'Markersize',10/3); set(gca,'FontSize',20/3); 
+set(gca,'DataAspectRatio',[0.25*9.5 1200 1]);
+%set(gca,'XTickLabel',[-n,-n+N/2,-N/2,0,N/2-1,n-N/2-1,n]);
+%set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+print nfft_times_flops.eps -deps
+!epstopdf nfft_times_flops.eps
diff --git a/doc/tutorial/images/polar_grid.eps b/doc/tutorial/images/polar_grid.eps
new file mode 100644
index 0000000..1193200
--- /dev/null
+++ b/doc/tutorial/images/polar_grid.eps
@@ -0,0 +1,87 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (paper.dvi)
%%Version: 1 3
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 20/10/06 15:23
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 112 364 227 463
%%HiResBoundingBox: 112.247 364.03 227.117 462.543
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+

%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put     
ct_CffDict begin                    
/F0Subr     
{
    systemdict /internaldict known 
   {
      1183615869 systemdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } 
   {
      userdict /internaldict known not 
        { 
          userdict /internaldict 
          {
               count 0 eq 
             {/internaldict errordict /invalidaccess get exec} if 
             dup type /integertype ne 
             {/internaldict errordict /invalidaccess get exec} if 
             dup 1183615869 eq
             {pop 0} 
             {/internaldict errordict /invalidaccess get exec} 
             ifelse 
          } 
          dup 14 get 1 25 dict put 
          bind executeonly put 
       } if 
       1183615869 userdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } ifelse
    [ 
       systemdict /internaldict known not 
       { 100 dict /begin cvx /mtx matrix /def cvx } if 
       systemdict /currentpacking known {currentpacking true setpacking} if 
       { 
          systemdict /internaldict known { 
          1183615869 systemdict /internaldict get exec 
          dup /$FlxDict known not { 
          dup dup length exch maxlength eq 
          { pop userdict dup /$FlxDict known not
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } if } 
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } 
          ifelse 
          } if /$FlxDict get begin } if 
          grestore 
          /exdef {exch def} def 
          /dmin exch abs 100 div def 
          /epX exdef /epY exdef 
          /c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef 
          /c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef 
          /c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def 
          /yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def 
          /PickCoords {  
          {c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2} 
          {c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2} 
          ifelse 
          /y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef 
          /y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef 
          } def 
          mtx currentmatrix pop  
          mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or 
          {/flipXY -1 def} 
          {mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or 
          {/flipXY 1 def} 
          {/flipXY 0 def} 
          ifelse } 
          ifelse 
          /erosion 1 def 
          systemdict /internaldict known { 
           1183615869 systemdict /internaldict get exec dup  
          /erosion known 
          {/erosion get /erosion exch def} 
          {pop} 
          ifelse 
          } if 
          yflag 
          {
              flipXY 0 eq c3y2 c4y2 eq or 
             {false PickCoords}
             {
                  /shrink c3y2 c4y2 eq 
                {0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def 
                /yshrink {c4y2 sub shrink mul c4y2 add} def 
                /c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def 
                /c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def 
                /c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def 
                /dY 0 c3y2 c1y2 sub round 
                dtransform flipXY 1 eq {exch} if pop abs def 
                dY dmin lt PickCoords 
                y2 c1y2 sub abs 0.001 gt {
                   c1x2 c1y2 transform flipXY 1 eq {exch} if  
                   /cx exch def /cy exch def 
                   /dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch} 
                   if pop def 
                   dY round dup 0 ne 
                   {/dY exdef } 
                   {pop dY 0 lt {-1}{1} ifelse /dY exdef} 
                   ifelse 
                   /erode PaintType 2 ne erosion 0.5 ge and def  
                   erode {/cy cy 0.5 sub def} if 
                   /ey cy dY add def   
                   /ey ey ceiling ey sub ey floor add def   
                   erode {/ey ey 0.5 add def} if   
                   ey cx flipXY 1 eq {exch} if itransform exch pop  
                   y2 sub /eShift exch def  
                   /y1 y1 eShift add def /y2 y2 eShift add def /y3 y3  
                   eShift add def  
                } if  
             } ifelse  
          } 
          {
              flipXY 0 eq c3x2 c4x2 eq or  
             {false PickCoords }  
             { /shrink c3x2 c4x2 eq  
                {0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def  
                /xshrink {c4x2 sub shrink mul c4x2 add} def  
                /c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def  
                /c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def  
                /c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def  
                /dX c3x2 c1x2 sub round 0 dtransform  
                flipXY -1 eq {exch} if pop abs def 
                dX dmin lt PickCoords  
                x2 c1x2 sub abs 0.001 gt {  
                   c1x2 c1y2 transform flipXY -1 eq {exch} if  
                   /cy exch def /cx exch def   
                   /dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def  
                   dX round dup 0 ne  
                   {/dX exdef}  
                   {pop dX 0 lt {-1}{1} ifelse /dX exdef}  
                   ifelse  
                   /erode PaintType 2 ne erosion .5 ge and def 
                   erode {/cx cx .5 sub def} if  
                   /ex cx dX add def  
                   /ex ex ceiling ex sub ex floor add def  
                   erode {/ex ex .5 add def} if  
                   ex cy flipXY -1 eq {exch} if itransform pop  
                   x2 sub /eShift exch def  
                   /x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def  
                } if  
             } ifelse  
          } ifelse 
          x2 x5 eq y2 y5 eq or  
          {x5 y5 lineto }  
          {x0 y0 x1 y1 x2 y2 curveto  
          x3 y3 x4 y4 x5 y5 curveto}  
          ifelse  
          epY epX   
       }  
       systemdict /currentpacking known {exch setpacking} if   
       /exec cvx /end cvx 
    ] cvx  
    executeonly 
    exch  
    {pop true exch restore}   
    {   
       systemdict /internaldict known not  
       {1183615869 userdict /internaldict get exec  
       exch /FlxProc exch put true}  
       {1183615869 systemdict /internaldict get exec  
       dup length exch maxlength eq  
       {false}   
       {1183615869 systemdict /internaldict get exec 
       exch /FlxProc exch put true}  
       ifelse}  
       ifelse
    } ifelse  
    {
       systemdict /internaldict known  
       {1183615869 systemdict /internaldict get exec /FlxProc get exec}  
       {1183615869 userdict /internaldict get exec /FlxProc get exec}  
       ifelse   
    } if  
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def 
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind  def
/HSSubr 
{
   systemdict /internaldict known not
   {pop 3}
   {1183615869 systemdict /internaldict get exec
    dup /startlock known
    {/startlock get exec}
    {dup /strtlck known
    {/strtlck get exec}
    {pop 3}
    ifelse}
    ifelse}
    ifelse
} bind def
end                                 
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave 
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec

[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3537 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xap="http://ns.adobe.com/xap/1.0/">
+         <xap:CreateDate>2006-10-20T15:23:17+02:00</xap:CreateDate>
+         <xap:ModifyDate>2006-10-20T15:23:17+02:00</xap:ModifyDate>
+         <xap:MetadataDate>2006-10-20T15:23:17+02:00</xap:MetadataDate>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+         <xapMM:DocumentID>uuid:34DD0B9261E111DBB7AD8EFAF1591643</xapMM:DocumentID>
+         <xapMM:InstanceID>uuid:34DD0B9261E111DBB7AD8EFAF1591643</xapMM:InstanceID>
+         <xapMM:DerivedFrom rdf:parseType="Resource">
+            <stRef:instanceID>uuid:fcba86c4-603d-11db-9b35-000a95cd9010</stRef:instanceID>
+            <stRef:documentID>uuid:2144a3e0-603d-11db-9b35-000a95cd9010</stRef:documentID>
+         </xapMM:DerivedFrom>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:title>
+            <rdf:Alt>
+               <rdf:li xml:lang="x-default">paper.dvi</rdf:li>
+            </rdf:Alt>
+         </dc:title>
+         <dc:format>application/eps</dc:format>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end="w"?>

% &end XMP packet& %

[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5

PDFVars/TermAll get exec end end
 PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
112.247 364.03 114.87 98.513 rectclip
q
112.247 364.03 m
227.117 364.03 l
227.117 462.543 l
112.247 462.543 l
h
W
n
q
0.1 0.0 0.0 0.1 0.0 0.0 cm
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
1195.62 4688.31 m
2327.9 4688.31 l
2327.9 3620.38 l
1195.62 3620.38 l
h
W
n
n
[/DeviceGray] cs 1.0 sc
1195.619995 3620.379883 1132.279907 1046.750000 rectfill
+
n
1380.530029 3761.300049 828.437988 828.438232 rectfill
+
4.88755 w
1 j
n
1380.53 3761.3 828.438 828.438 re
S
[4.88755 39.1004 ] 0.0 d
3.25837 w
n
1380.53 3761.3 m
1380.53 4589.74 l
0.0 sc
S
n
1380.53 4589.74 m
1380.53 4589.74 l
S
n
1483.98 3761.3 m
1483.98 4589.74 l
S
n
1483.98 4589.74 m
1483.98 4589.74 l
S
n
1588.25 3761.3 m
1588.25 4589.74 l
S
n
1588.25 4589.74 m
1588.25 4589.74 l
S
n
1691.7 3761.3 m
1691.7 4589.74 l
S
n
1691.7 4589.74 m
1691.7 4589.74 l
S
n
1795.16 3761.3 m
1795.16 4589.74 l
S
n
1795.16 4589.74 m
1795.16 4589.74 l
S
n
1898.61 3761.3 m
1898.61 4589.74 l
S
n
1898.61 4589.74 m
1898.61 4589.74 l
S
n
2002.06 3761.3 m
2002.06 4589.74 l
S
n
2002.06 4589.74 m
2002.06 4589.74 l
S
n
2105.52 3761.3 m
2105.52 4589.74 l
S
n
2105.52 4589.74 m
2105.52 4589.74 l
S
n
2208.97 3761.3 m
2208.97 4589.74 l
S
n
2208.97 4589.74 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
2208.97 3761.3 m
2208.97 3761.3 l
S
n
1380.53 3864.76 m
2208.97 3864.76 l
S
n
2208.97 3864.76 m
2208.97 3864.76 l
S
n
1380.53 3968.21 m
2208.97 3968.21 l
S
n
2208.97 3968.21 m
2208.97 3968.21 l
S
n
1380.53 4072.48 m
2208.97 4072.48 l
S
n
2208.97 4072.48 m
2208.97 4072.48 l
S
n
1380.53 4175.93 m
2208.97 4175.93 l
S
n
2208.97 4175.93 m
2208.97 4175.93 l
S
n
1380.53 4279.38 m
2208.97 4279.38 l
S
n
2208.97 4279.38 m
2208.97 4279.38 l
S
n
1380.53 4382.84 m
2208.97 4382.84 l
S
n
2208.97 4382.84 m
2208.97 4382.84 l
S
n
1380.53 4486.29 m
2208.97 4486.29 l
S
n
2208.97 4486.29 m
2208.97 4486.29 l
S
n
1380.53 4589.74 m
2208.97 4589.74 l
S
n
2208.97 4589.74 m
2208.97 4589.74 l
S
[] 0.0 d
4.88755 w
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
1380.53 4589.74 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
1380.53 4589.74 l
S
n
2208.97 3761.3 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
1380.53 3761.3 m
1380.53 4589.74 l
S
n
1380.53 3761.3 m
1380.53 3770.26 l
S
n
1380.53 4589.74 m
1380.53 4580.78 l
S
n
1483.98 3761.3 m
1483.98 3770.26 l
S
n
1483.98 4589.74 m
1483.98 4580.78 l
S
n
1588.25 3761.3 m
1588.25 3770.26 l
S
n
1588.25 4589.74 m
1588.25 4580.78 l
S
n
1691.7 3761.3 m
1691.7 3770.26 l
S
n
1691.7 4589.74 m
1691.7 4580.78 l
S
n
1795.16 3761.3 m
1795.16 3770.26 l
S
n
1795.16 4589.74 m
1795.16 4580.78 l
S
n
1898.61 3761.3 m
1898.61 3770.26 l
S
n
1898.61 4589.74 m
1898.61 4580.78 l
S
n
2002.06 3761.3 m
2002.06 3770.26 l
S
n
2002.06 4589.74 m
2002.06 4580.78 l
S
n
2105.52 3761.3 m
2105.52 3770.26 l
S
n
2105.52 4589.74 m
2105.52 4580.78 l
S
n
2208.97 3761.3 m
2208.97 3770.26 l
S
n
2208.97 4589.74 m
2208.97 4580.78 l
S
n
1380.53 3761.3 m
1389.49 3761.3 l
S
n
2208.97 3761.3 m
2200.01 3761.3 l
S
n
1380.53 3864.76 m
1389.49 3864.76 l
S
n
2208.97 3864.76 m
2200.01 3864.76 l
S
n
1380.53 3968.21 m
1389.49 3968.21 l
S
n
2208.97 3968.21 m
2200.01 3968.21 l
S
n
1380.53 4072.48 m
1389.49 4072.48 l
S
n
2208.97 4072.48 m
2200.01 4072.48 l
S
n
1380.53 4175.93 m
1389.49 4175.93 l
S
n
2208.97 4175.93 m
2200.01 4175.93 l
S
n
1380.53 4279.38 m
1389.49 4279.38 l
S
n
2208.97 4279.38 m
2200.01 4279.38 l
S
n
1380.53 4382.84 m
1389.49 4382.84 l
S
n
2208.97 4382.84 m
2200.01 4382.84 l
S
n
1380.53 4486.29 m
1389.49 4486.29 l
S
n
2208.97 4486.29 m
2200.01 4486.29 l
S
n
1380.53 4589.74 m
1389.49 4589.74 l
S
n
2208.97 4589.74 m
2200.01 4589.74 l
S
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
1380.53 4589.74 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
1380.53 4589.74 l
S
n
2208.97 3761.3 m
2208.97 4589.74 l
S
Q
q
n
1321.07 4649.21 m
2217.12 4649.21 l
2217.12 3703.47 l
1321.07 3703.47 l
h
W
n
n
1804.93 4589.74 m
1804.93 4584.34 1800.55 4579.97 1795.16 4579.97 c
1789.76 4579.97 1785.38 4584.34 1785.38 4589.74 c
1785.38 4595.14 1789.76 4599.52 1795.16 4599.52 c
1800.55 4599.52 1804.93 4595.14 1804.93 4589.74 c
[/DeviceRGB] cs 0.0 0.0 1.0 sc
f
n
1804.93 4537.61 m
1804.93 4532.21 1800.55 4527.83 1795.16 4527.83 c
1789.76 4527.83 1785.38 4532.21 1785.38 4537.61 c
1785.38 4543.01 1789.76 4547.38 1795.16 4547.38 c
1800.55 4547.38 1804.93 4543.01 1804.93 4537.61 c
f
n
1804.93 4486.29 m
1804.93 4480.89 1800.55 4476.52 1795.16 4476.52 c
1789.76 4476.52 1785.38 4480.89 1785.38 4486.29 c
1785.38 4491.69 1789.76 4496.07 1795.16 4496.07 c
1800.55 4496.07 1804.93 4491.69 1804.93 4486.29 c
f
n
1804.93 4434.16 m
1804.93 4428.76 1800.55 4424.38 1795.16 4424.38 c
1789.76 4424.38 1785.38 4428.76 1785.38 4434.16 c
1785.38 4439.55 1789.76 4443.93 1795.16 4443.93 c
1800.55 4443.93 1804.93 4439.55 1804.93 4434.16 c
f
n
1804.93 4382.84 m
1804.93 4377.44 1800.55 4373.06 1795.16 4373.06 c
1789.76 4373.06 1785.38 4377.44 1785.38 4382.84 c
1785.38 4388.23 1789.76 4392.61 1795.16 4392.61 c
1800.55 4392.61 1804.93 4388.23 1804.93 4382.84 c
f
n
1804.93 4330.7 m
1804.93 4325.3 1800.55 4320.93 1795.16 4320.93 c
1789.76 4320.93 1785.38 4325.3 1785.38 4330.7 c
1785.38 4336.1 1789.76 4340.48 1795.16 4340.48 c
1800.55 4340.48 1804.93 4336.1 1804.93 4330.7 c
f
n
1804.93 4279.38 m
1804.93 4273.98 1800.55 4269.61 1795.16 4269.61 c
1789.76 4269.61 1785.38 4273.98 1785.38 4279.38 c
1785.38 4284.78 1789.76 4289.16 1795.16 4289.16 c
1800.55 4289.16 1804.93 4284.78 1804.93 4279.38 c
f
n
1804.93 4227.25 m
1804.93 4221.85 1800.55 4217.47 1795.16 4217.47 c
1789.76 4217.47 1785.38 4221.85 1785.38 4227.25 c
1785.38 4232.65 1789.76 4237.02 1795.16 4237.02 c
1800.55 4237.02 1804.93 4232.65 1804.93 4227.25 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1804.93 4123.8 m
1804.93 4118.4 1800.55 4114.02 1795.16 4114.02 c
1789.76 4114.02 1785.38 4118.4 1785.38 4123.8 c
1785.38 4129.2 1789.76 4133.57 1795.16 4133.57 c
1800.55 4133.57 1804.93 4129.2 1804.93 4123.8 c
f
n
1804.93 4072.48 m
1804.93 4067.08 1800.55 4062.7 1795.16 4062.7 c
1789.76 4062.7 1785.38 4067.08 1785.38 4072.48 c
1785.38 4077.88 1789.76 4082.25 1795.16 4082.25 c
1800.55 4082.25 1804.93 4077.88 1804.93 4072.48 c
f
n
1804.93 4020.34 m
1804.93 4014.95 1800.55 4010.57 1795.16 4010.57 c
1789.76 4010.57 1785.38 4014.95 1785.38 4020.34 c
1785.38 4025.74 1789.76 4030.12 1795.16 4030.12 c
1800.55 4030.12 1804.93 4025.74 1804.93 4020.34 c
f
n
1804.93 3968.21 m
1804.93 3962.81 1800.55 3958.43 1795.16 3958.43 c
1789.76 3958.43 1785.38 3962.81 1785.38 3968.21 c
1785.38 3973.61 1789.76 3977.98 1795.16 3977.98 c
1800.55 3977.98 1804.93 3973.61 1804.93 3968.21 c
f
n
1804.93 3916.89 m
1804.93 3911.49 1800.55 3907.11 1795.16 3907.11 c
1789.76 3907.11 1785.38 3911.49 1785.38 3916.89 c
1785.38 3922.29 1789.76 3926.66 1795.16 3926.66 c
1800.55 3926.66 1804.93 3922.29 1804.93 3916.89 c
f
n
1804.93 3864.76 m
1804.93 3859.36 1800.55 3854.98 1795.16 3854.98 c
1789.76 3854.98 1785.38 3859.36 1785.38 3864.76 c
1785.38 3870.16 1789.76 3874.53 1795.16 3874.53 c
1800.55 3874.53 1804.93 3870.16 1804.93 3864.76 c
f
n
1804.93 3813.44 m
1804.93 3808.04 1800.55 3803.66 1795.16 3803.66 c
1789.76 3803.66 1785.38 3808.04 1785.38 3813.44 c
1785.38 3818.84 1789.76 3823.21 1795.16 3823.21 c
1800.55 3823.21 1804.93 3818.84 1804.93 3813.44 c
f
n
1764.2 4587.3 m
1764.2 4581.9 1759.82 4577.52 1754.43 4577.52 c
1749.03 4577.52 1744.65 4581.9 1744.65 4587.3 c
1744.65 4592.7 1749.03 4597.07 1754.43 4597.07 c
1759.82 4597.07 1764.2 4592.7 1764.2 4587.3 c
f
n
1769.09 4535.98 m
1769.09 4530.58 1764.71 4526.2 1759.32 4526.2 c
1753.92 4526.2 1749.54 4530.58 1749.54 4535.98 c
1749.54 4541.38 1753.92 4545.75 1759.32 4545.75 c
1764.71 4545.75 1769.09 4541.38 1769.09 4535.98 c
f
n
1773.98 4484.66 m
1773.98 4479.26 1769.6 4474.89 1764.2 4474.89 c
1758.8 4474.89 1754.43 4479.26 1754.43 4484.66 c
1754.43 4490.06 1758.8 4494.43 1764.2 4494.43 c
1769.6 4494.43 1773.98 4490.06 1773.98 4484.66 c
f
n
1778.87 4432.53 m
1778.87 4427.13 1774.49 4422.75 1769.09 4422.75 c
1763.69 4422.75 1759.32 4427.13 1759.32 4432.53 c
1759.32 4437.93 1763.69 4442.3 1769.09 4442.3 c
1774.49 4442.3 1778.87 4437.93 1778.87 4432.53 c
f
n
1784.57 4381.21 m
1784.57 4375.81 1780.19 4371.43 1774.79 4371.43 c
1769.39 4371.43 1765.02 4375.81 1765.02 4381.21 c
1765.02 4386.61 1769.39 4390.98 1774.79 4390.98 c
1780.19 4390.98 1784.57 4386.61 1784.57 4381.21 c
f
n
1789.46 4329.89 m
1789.46 4324.49 1785.08 4320.11 1779.68 4320.11 c
1774.28 4320.11 1769.91 4324.49 1769.91 4329.89 c
1769.91 4335.29 1774.28 4339.66 1779.68 4339.66 c
1785.08 4339.66 1789.46 4335.29 1789.46 4329.89 c
f
n
1794.34 4278.57 m
1794.34 4273.17 1789.96 4268.79 1784.57 4268.79 c
1779.17 4268.79 1774.79 4273.17 1774.79 4278.57 c
1774.79 4283.97 1779.17 4288.34 1784.57 4288.34 c
1789.96 4288.34 1794.34 4283.97 1794.34 4278.57 c
f
n
1799.23 4227.25 m
1799.23 4221.85 1794.86 4217.47 1789.46 4217.47 c
1784.06 4217.47 1779.68 4221.85 1779.68 4227.25 c
1779.68 4232.65 1784.06 4237.02 1789.46 4237.02 c
1794.86 4237.02 1799.23 4232.65 1799.23 4227.25 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1809.82 4123.8 m
1809.82 4118.4 1805.44 4114.02 1800.04 4114.02 c
1794.64 4114.02 1790.27 4118.4 1790.27 4123.8 c
1790.27 4129.2 1794.64 4133.57 1800.04 4133.57 c
1805.44 4133.57 1809.82 4129.2 1809.82 4123.8 c
f
n
1814.71 4072.48 m
1814.71 4067.08 1810.33 4062.7 1804.93 4062.7 c
1799.54 4062.7 1795.16 4067.08 1795.16 4072.48 c
1795.16 4077.88 1799.54 4082.25 1804.93 4082.25 c
1810.33 4082.25 1814.71 4077.88 1814.71 4072.48 c
f
n
1819.59 4021.16 m
1819.59 4015.76 1815.22 4011.38 1809.82 4011.38 c
1804.42 4011.38 1800.04 4015.76 1800.04 4021.16 c
1800.04 4026.55 1804.42 4030.93 1809.82 4030.93 c
1815.22 4030.93 1819.59 4026.55 1819.59 4021.16 c
f
n
1824.48 3969.84 m
1824.48 3964.44 1820.11 3960.06 1814.71 3960.06 c
1809.31 3960.06 1804.93 3964.44 1804.93 3969.84 c
1804.93 3975.24 1809.31 3979.61 1814.71 3979.61 c
1820.11 3979.61 1824.48 3975.24 1824.48 3969.84 c
f
n
1830.18 3918.52 m
1830.18 3913.12 1825.81 3908.74 1820.41 3908.74 c
1815.01 3908.74 1810.63 3913.12 1810.63 3918.52 c
1810.63 3923.92 1815.01 3928.29 1820.41 3928.29 c
1825.81 3928.29 1830.18 3923.92 1830.18 3918.52 c
f
n
1835.07 3866.39 m
1835.07 3860.99 1830.7 3856.61 1825.3 3856.61 c
1819.9 3856.61 1815.52 3860.99 1815.52 3866.39 c
1815.52 3871.79 1819.9 3876.16 1825.3 3876.16 c
1830.7 3876.16 1835.07 3871.79 1835.07 3866.39 c
f
n
1839.96 3815.07 m
1839.96 3809.67 1835.58 3805.29 1830.18 3805.29 c
1824.79 3805.29 1820.41 3809.67 1820.41 3815.07 c
1820.41 3820.46 1824.79 3824.84 1830.18 3824.84 c
1835.58 3824.84 1839.96 3820.46 1839.96 3815.07 c
f
n
1723.47 4581.6 m
1723.47 4576.2 1719.1 4571.82 1713.7 4571.82 c
1708.3 4571.82 1703.92 4576.2 1703.92 4581.6 c
1703.92 4587.0 1708.3 4591.37 1713.7 4591.37 c
1719.1 4591.37 1723.47 4587.0 1723.47 4581.6 c
f
n
1734.06 4530.28 m
1734.06 4524.88 1729.69 4520.5 1724.29 4520.5 c
1718.89 4520.5 1714.51 4524.88 1714.51 4530.28 c
1714.51 4535.68 1718.89 4540.05 1724.29 4540.05 c
1729.69 4540.05 1734.06 4535.68 1734.06 4530.28 c
f
n
1743.84 4479.77 m
1743.84 4474.38 1739.46 4470.0 1734.06 4470.0 c
1728.66 4470.0 1724.29 4474.38 1724.29 4479.77 c
1724.29 4485.17 1728.66 4489.55 1734.06 4489.55 c
1739.46 4489.55 1743.84 4485.17 1743.84 4479.77 c
f
n
1754.43 4429.27 m
1754.43 4423.87 1750.05 4419.49 1744.65 4419.49 c
1739.25 4419.49 1734.88 4423.87 1734.88 4429.27 c
1734.88 4434.67 1739.25 4439.04 1744.65 4439.04 c
1750.05 4439.04 1754.43 4434.67 1754.43 4429.27 c
f
n
1764.2 4378.76 m
1764.2 4373.36 1759.82 4368.99 1754.43 4368.99 c
1749.03 4368.99 1744.65 4373.36 1744.65 4378.76 c
1744.65 4384.16 1749.03 4388.54 1754.43 4388.54 c
1759.82 4388.54 1764.2 4384.16 1764.2 4378.76 c
f
n
1773.98 4327.45 m
1773.98 4322.05 1769.6 4317.67 1764.2 4317.67 c
1758.8 4317.67 1754.43 4322.05 1754.43 4327.45 c
1754.43 4332.84 1758.8 4337.22 1764.2 4337.22 c
1769.6 4337.22 1773.98 4332.84 1773.98 4327.45 c
f
n
1784.57 4276.94 m
1784.57 4271.54 1780.19 4267.16 1774.79 4267.16 c
1769.39 4267.16 1765.02 4271.54 1765.02 4276.94 c
1765.02 4282.34 1769.39 4286.71 1774.79 4286.71 c
1780.19 4286.71 1784.57 4282.34 1784.57 4276.94 c
f
n
1794.34 4226.43 m
1794.34 4221.04 1789.96 4216.66 1784.57 4216.66 c
1779.17 4216.66 1774.79 4221.04 1774.79 4226.43 c
1774.79 4231.83 1779.17 4236.21 1784.57 4236.21 c
1789.96 4236.21 1794.34 4231.83 1794.34 4226.43 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1814.71 4124.61 m
1814.71 4119.21 1810.33 4114.84 1804.93 4114.84 c
1799.54 4114.84 1795.16 4119.21 1795.16 4124.61 c
1795.16 4130.01 1799.54 4134.39 1804.93 4134.39 c
1810.33 4134.39 1814.71 4130.01 1814.71 4124.61 c
f
n
1824.48 4074.11 m
1824.48 4068.71 1820.11 4064.33 1814.71 4064.33 c
1809.31 4064.33 1804.93 4068.71 1804.93 4074.11 c
1804.93 4079.5 1809.31 4083.88 1814.71 4083.88 c
1820.11 4083.88 1824.48 4079.5 1824.48 4074.11 c
f
n
1835.07 4023.6 m
1835.07 4018.2 1830.7 4013.83 1825.3 4013.83 c
1819.9 4013.83 1815.52 4018.2 1815.52 4023.6 c
1815.52 4029.0 1819.9 4033.38 1825.3 4033.38 c
1830.7 4033.38 1835.07 4029.0 1835.07 4023.6 c
f
n
1844.85 3972.28 m
1844.85 3966.88 1840.47 3962.51 1835.07 3962.51 c
1829.68 3962.51 1825.3 3966.88 1825.3 3972.28 c
1825.3 3977.68 1829.68 3982.06 1835.07 3982.06 c
1840.47 3982.06 1844.85 3977.68 1844.85 3972.28 c
f
n
1854.62 3921.78 m
1854.62 3916.38 1850.25 3912.0 1844.85 3912.0 c
1839.45 3912.0 1835.07 3916.38 1835.07 3921.78 c
1835.07 3927.18 1839.45 3931.55 1844.85 3931.55 c
1850.25 3931.55 1854.62 3927.18 1854.62 3921.78 c
f
n
1865.21 3871.27 m
1865.21 3865.88 1860.84 3861.5 1855.44 3861.5 c
1850.04 3861.5 1845.66 3865.88 1845.66 3871.27 c
1845.66 3876.67 1850.04 3881.05 1855.44 3881.05 c
1860.84 3881.05 1865.21 3876.67 1865.21 3871.27 c
f
n
1874.99 3820.77 m
1874.99 3815.37 1870.61 3810.99 1865.21 3810.99 c
1859.81 3810.99 1855.44 3815.37 1855.44 3820.77 c
1855.44 3826.17 1859.81 3830.54 1865.21 3830.54 c
1870.61 3830.54 1874.99 3826.17 1874.99 3820.77 c
f
n
1684.37 4571.82 m
1684.37 4566.42 1680.0 4562.05 1674.6 4562.05 c
1669.2 4562.05 1664.82 4566.42 1664.82 4571.82 c
1664.82 4577.22 1669.2 4581.6 1674.6 4581.6 c
1680.0 4581.6 1684.37 4577.22 1684.37 4571.82 c
f
n
1699.04 4522.13 m
1699.04 4516.73 1694.66 4512.36 1689.26 4512.36 c
1683.86 4512.36 1679.48 4516.73 1679.48 4522.13 c
1679.48 4527.53 1683.86 4531.91 1689.26 4531.91 c
1694.66 4531.91 1699.04 4527.53 1699.04 4522.13 c
f
n
1714.51 4472.44 m
1714.51 4467.04 1710.14 4462.67 1704.74 4462.67 c
1699.34 4462.67 1694.96 4467.04 1694.96 4472.44 c
1694.96 4477.84 1699.34 4482.21 1704.74 4482.21 c
1710.14 4482.21 1714.51 4477.84 1714.51 4472.44 c
f
n
1729.18 4422.75 m
1729.18 4417.35 1724.8 4412.98 1719.4 4412.98 c
1714.0 4412.98 1709.62 4417.35 1709.62 4422.75 c
1709.62 4428.15 1714.0 4432.53 1719.4 4432.53 c
1724.8 4432.53 1729.18 4428.15 1729.18 4422.75 c
f
n
1744.65 4373.88 m
1744.65 4368.48 1740.28 4364.1 1734.88 4364.1 c
1729.48 4364.1 1725.1 4368.48 1725.1 4373.88 c
1725.1 4379.27 1729.48 4383.65 1734.88 4383.65 c
1740.28 4383.65 1744.65 4379.27 1744.65 4373.88 c
f
n
1759.32 4324.19 m
1759.32 4318.79 1754.94 4314.41 1749.54 4314.41 c
1744.14 4314.41 1739.77 4318.79 1739.77 4324.19 c
1739.77 4329.59 1744.14 4333.96 1749.54 4333.96 c
1754.94 4333.96 1759.32 4329.59 1759.32 4324.19 c
f
n
1774.79 4274.5 m
1774.79 4269.1 1770.41 4264.72 1765.02 4264.72 c
1759.62 4264.72 1755.24 4269.1 1755.24 4274.5 c
1755.24 4279.89 1759.62 4284.27 1765.02 4284.27 c
1770.41 4284.27 1774.79 4279.89 1774.79 4274.5 c
f
n
1789.46 4224.8 m
1789.46 4219.41 1785.08 4215.03 1779.68 4215.03 c
1774.28 4215.03 1769.91 4219.41 1769.91 4224.8 c
1769.91 4230.2 1774.28 4234.58 1779.68 4234.58 c
1785.08 4234.58 1789.46 4230.2 1789.46 4224.8 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1819.59 4126.24 m
1819.59 4120.84 1815.22 4116.46 1809.82 4116.46 c
1804.42 4116.46 1800.04 4120.84 1800.04 4126.24 c
1800.04 4131.64 1804.42 4136.02 1809.82 4136.02 c
1815.22 4136.02 1819.59 4131.64 1819.59 4126.24 c
f
n
1834.26 4076.55 m
1834.26 4071.15 1829.88 4066.77 1824.48 4066.77 c
1819.09 4066.77 1814.71 4071.15 1814.71 4076.55 c
1814.71 4081.95 1819.09 4086.32 1824.48 4086.32 c
1829.88 4086.32 1834.26 4081.95 1834.26 4076.55 c
f
n
1849.73 4026.86 m
1849.73 4021.46 1845.36 4017.09 1839.96 4017.09 c
1834.56 4017.09 1830.18 4021.46 1830.18 4026.86 c
1830.18 4032.26 1834.56 4036.64 1839.96 4036.64 c
1845.36 4036.64 1849.73 4032.26 1849.73 4026.86 c
f
n
1864.4 3977.17 m
1864.4 3971.77 1860.02 3967.39 1854.62 3967.39 c
1849.22 3967.39 1844.85 3971.77 1844.85 3977.17 c
1844.85 3982.57 1849.22 3986.95 1854.62 3986.95 c
1860.02 3986.95 1864.4 3982.57 1864.4 3977.17 c
f
n
1879.88 3928.29 m
1879.88 3922.89 1875.5 3918.52 1870.1 3918.52 c
1864.7 3918.52 1860.32 3922.89 1860.32 3928.29 c
1860.32 3933.69 1864.7 3938.07 1870.1 3938.07 c
1875.5 3938.07 1879.88 3933.69 1879.88 3928.29 c
f
n
1894.54 3878.61 m
1894.54 3873.21 1890.16 3868.83 1884.76 3868.83 c
1879.36 3868.83 1874.99 3873.21 1874.99 3878.61 c
1874.99 3884.0 1879.36 3888.38 1884.76 3888.38 c
1890.16 3888.38 1894.54 3884.0 1894.54 3878.61 c
f
n
1910.02 3828.91 m
1910.02 3823.52 1905.64 3819.14 1900.24 3819.14 c
1894.84 3819.14 1890.46 3823.52 1890.46 3828.91 c
1890.46 3834.31 1894.84 3838.69 1900.24 3838.69 c
1905.64 3838.69 1910.02 3834.31 1910.02 3828.91 c
f
n
1646.09 4557.97 m
1646.09 4552.57 1641.71 4548.2 1636.31 4548.2 c
1630.91 4548.2 1626.54 4552.57 1626.54 4557.97 c
1626.54 4563.37 1630.91 4567.75 1636.31 4567.75 c
1641.71 4567.75 1646.09 4563.37 1646.09 4557.97 c
f
n
1665.64 4509.91 m
1665.64 4504.52 1661.26 4500.14 1655.86 4500.14 c
1650.46 4500.14 1646.09 4504.52 1646.09 4509.91 c
1646.09 4515.31 1650.46 4519.69 1655.86 4519.69 c
1661.26 4519.69 1665.64 4515.31 1665.64 4509.91 c
f
n
1686.0 4461.85 m
1686.0 4456.45 1681.62 4452.08 1676.23 4452.08 c
1670.83 4452.08 1666.45 4456.45 1666.45 4461.85 c
1666.45 4467.25 1670.83 4471.62 1676.23 4471.62 c
1681.62 4471.62 1686.0 4467.25 1686.0 4461.85 c
f
n
1705.55 4414.61 m
1705.55 4409.21 1701.18 4404.83 1695.78 4404.83 c
1690.38 4404.83 1686.0 4409.21 1686.0 4414.61 c
1686.0 4420.0 1690.38 4424.38 1695.78 4424.38 c
1701.18 4424.38 1705.55 4420.0 1705.55 4414.61 c
f
n
1725.1 4366.54 m
1725.1 4361.14 1720.73 4356.77 1715.33 4356.77 c
1709.93 4356.77 1705.55 4361.14 1705.55 4366.54 c
1705.55 4371.94 1709.93 4376.32 1715.33 4376.32 c
1720.73 4376.32 1725.1 4371.94 1725.1 4366.54 c
f
n
1745.47 4318.48 m
1745.47 4313.09 1741.09 4308.71 1735.69 4308.71 c
1730.29 4308.71 1725.92 4313.09 1725.92 4318.48 c
1725.92 4323.88 1730.29 4328.26 1735.69 4328.26 c
1741.09 4328.26 1745.47 4323.88 1745.47 4318.48 c
f
n
1765.02 4271.24 m
1765.02 4265.84 1760.64 4261.46 1755.24 4261.46 c
1749.84 4261.46 1745.47 4265.84 1745.47 4271.24 c
1745.47 4276.64 1749.84 4281.01 1755.24 4281.01 c
1760.64 4281.01 1765.02 4276.64 1765.02 4271.24 c
f
n
1784.57 4223.18 m
1784.57 4217.78 1780.19 4213.4 1774.79 4213.4 c
1769.39 4213.4 1765.02 4217.78 1765.02 4223.18 c
1765.02 4228.57 1769.39 4232.95 1774.79 4232.95 c
1780.19 4232.95 1784.57 4228.57 1784.57 4223.18 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1824.48 4127.87 m
1824.48 4122.47 1820.11 4118.09 1814.71 4118.09 c
1809.31 4118.09 1804.93 4122.47 1804.93 4127.87 c
1804.93 4133.27 1809.31 4137.64 1814.71 4137.64 c
1820.11 4137.64 1824.48 4133.27 1824.48 4127.87 c
f
n
1844.03 4079.81 m
1844.03 4074.41 1839.66 4070.04 1834.26 4070.04 c
1828.86 4070.04 1824.48 4074.41 1824.48 4079.81 c
1824.48 4085.21 1828.86 4089.58 1834.26 4089.58 c
1839.66 4089.58 1844.03 4085.21 1844.03 4079.81 c
f
n
1863.58 4032.56 m
1863.58 4027.16 1859.21 4022.79 1853.81 4022.79 c
1848.41 4022.79 1844.03 4027.16 1844.03 4032.56 c
1844.03 4037.96 1848.41 4042.34 1853.81 4042.34 c
1859.21 4042.34 1863.58 4037.96 1863.58 4032.56 c
f
n
1883.95 3984.5 m
1883.95 3979.1 1879.57 3974.73 1874.17 3974.73 c
1868.77 3974.73 1864.4 3979.1 1864.4 3984.5 c
1864.4 3989.9 1868.77 3994.28 1874.17 3994.28 c
1879.57 3994.28 1883.95 3989.9 1883.95 3984.5 c
f
n
1903.5 3936.44 m
1903.5 3931.04 1899.12 3926.66 1893.72 3926.66 c
1888.32 3926.66 1883.95 3931.04 1883.95 3936.44 c
1883.95 3941.84 1888.32 3946.21 1893.72 3946.21 c
1899.12 3946.21 1903.5 3941.84 1903.5 3936.44 c
f
n
1923.05 3889.2 m
1923.05 3883.8 1918.67 3879.42 1913.27 3879.42 c
1907.88 3879.42 1903.5 3883.8 1903.5 3889.2 c
1903.5 3894.59 1907.88 3898.97 1913.27 3898.97 c
1918.67 3898.97 1923.05 3894.59 1923.05 3889.2 c
f
n
1943.41 3841.13 m
1943.41 3835.73 1939.04 3831.36 1933.64 3831.36 c
1928.24 3831.36 1923.86 3835.73 1923.86 3841.13 c
1923.86 3846.53 1928.24 3850.91 1933.64 3850.91 c
1939.04 3850.91 1943.41 3846.53 1943.41 3841.13 c
f
n
1609.43 4540.87 m
1609.43 4535.47 1605.05 4531.09 1599.66 4531.09 c
1594.26 4531.09 1589.88 4535.47 1589.88 4540.87 c
1589.88 4546.27 1594.26 4550.64 1599.66 4550.64 c
1605.05 4550.64 1609.43 4546.27 1609.43 4540.87 c
f
n
1633.87 4495.25 m
1633.87 4489.85 1629.49 4485.48 1624.09 4485.48 c
1618.7 4485.48 1614.32 4489.85 1614.32 4495.25 c
1614.32 4500.65 1618.7 4505.02 1624.09 4505.02 c
1629.49 4505.02 1633.87 4500.65 1633.87 4495.25 c
f
n
1658.3 4449.63 m
1658.3 4444.23 1653.93 4439.86 1648.53 4439.86 c
1643.13 4439.86 1638.75 4444.23 1638.75 4449.63 c
1638.75 4455.03 1643.13 4459.41 1648.53 4459.41 c
1653.93 4459.41 1658.3 4455.03 1658.3 4449.63 c
f
n
1682.74 4404.02 m
1682.74 4398.62 1678.37 4394.24 1672.97 4394.24 c
1667.57 4394.24 1663.2 4398.62 1663.2 4404.02 c
1663.2 4409.41 1667.57 4413.79 1672.97 4413.79 c
1678.37 4413.79 1682.74 4409.41 1682.74 4404.02 c
f
n
1707.18 4358.4 m
1707.18 4353.0 1702.8 4348.62 1697.41 4348.62 c
1692.01 4348.62 1687.63 4353.0 1687.63 4358.4 c
1687.63 4363.8 1692.01 4368.17 1697.41 4368.17 c
1702.8 4368.17 1707.18 4363.8 1707.18 4358.4 c
f
n
1731.62 4312.78 m
1731.62 4307.38 1727.24 4303.01 1721.84 4303.01 c
1716.45 4303.01 1712.07 4307.38 1712.07 4312.78 c
1712.07 4318.18 1716.45 4322.56 1721.84 4322.56 c
1727.24 4322.56 1731.62 4318.18 1731.62 4312.78 c
f
n
1756.06 4267.16 m
1756.06 4261.77 1751.68 4257.39 1746.28 4257.39 c
1740.88 4257.39 1736.51 4261.77 1736.51 4267.16 c
1736.51 4272.56 1740.88 4276.94 1746.28 4276.94 c
1751.68 4276.94 1756.06 4272.56 1756.06 4267.16 c
f
n
1780.5 4221.55 m
1780.5 4216.15 1776.12 4211.77 1770.72 4211.77 c
1765.32 4211.77 1760.95 4216.15 1760.95 4221.55 c
1760.95 4226.95 1765.32 4231.32 1770.72 4231.32 c
1776.12 4231.32 1780.5 4226.95 1780.5 4221.55 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1828.55 4129.5 m
1828.55 4124.1 1824.18 4119.72 1818.78 4119.72 c
1813.38 4119.72 1809.0 4124.1 1809.0 4129.5 c
1809.0 4134.9 1813.38 4139.27 1818.78 4139.27 c
1824.18 4139.27 1828.55 4134.9 1828.55 4129.5 c
f
n
1852.99 4083.88 m
1852.99 4078.48 1848.62 4074.11 1843.22 4074.11 c
1837.82 4074.11 1833.44 4078.48 1833.44 4083.88 c
1833.44 4089.28 1837.82 4093.66 1843.22 4093.66 c
1848.62 4093.66 1852.99 4089.28 1852.99 4083.88 c
f
n
1877.43 4038.27 m
1877.43 4032.87 1873.05 4028.49 1867.66 4028.49 c
1862.26 4028.49 1857.88 4032.87 1857.88 4038.27 c
1857.88 4043.66 1862.26 4048.04 1867.66 4048.04 c
1873.05 4048.04 1877.43 4043.66 1877.43 4038.27 c
f
n
1901.87 3992.65 m
1901.87 3987.25 1897.49 3982.87 1892.09 3982.87 c
1886.7 3982.87 1882.32 3987.25 1882.32 3992.65 c
1882.32 3998.05 1886.7 4002.42 1892.09 4002.42 c
1897.49 4002.42 1901.87 3998.05 1901.87 3992.65 c
f
n
1926.3 3947.03 m
1926.3 3941.63 1921.93 3937.25 1916.53 3937.25 c
1911.13 3937.25 1906.76 3941.63 1906.76 3947.03 c
1906.76 3952.43 1911.13 3956.8 1916.53 3956.8 c
1921.93 3956.8 1926.3 3952.43 1926.3 3947.03 c
f
n
1950.75 3901.41 m
1950.75 3896.02 1946.37 3891.64 1940.97 3891.64 c
1935.57 3891.64 1931.2 3896.02 1931.2 3901.41 c
1931.2 3906.81 1935.57 3911.19 1940.97 3911.19 c
1946.37 3911.19 1950.75 3906.81 1950.75 3901.41 c
f
n
1975.18 3855.8 m
1975.18 3850.4 1970.8 3846.02 1965.41 3846.02 c
1960.01 3846.02 1955.63 3850.4 1955.63 3855.8 c
1955.63 3861.2 1960.01 3865.57 1965.41 3865.57 c
1970.8 3865.57 1975.18 3861.2 1975.18 3855.8 c
f
n
1574.4 4519.69 m
1574.4 4514.29 1570.03 4509.91 1564.63 4509.91 c
1559.23 4509.91 1554.85 4514.29 1554.85 4519.69 c
1554.85 4525.09 1559.23 4529.46 1564.63 4529.46 c
1570.03 4529.46 1574.4 4525.09 1574.4 4519.69 c
f
n
1603.73 4476.52 m
1603.73 4471.12 1599.35 4466.74 1593.95 4466.74 c
1588.55 4466.74 1584.18 4471.12 1584.18 4476.52 c
1584.18 4481.91 1588.55 4486.29 1593.95 4486.29 c
1599.35 4486.29 1603.73 4481.91 1603.73 4476.52 c
f
n
1632.24 4433.34 m
1632.24 4427.94 1627.86 4423.57 1622.46 4423.57 c
1617.07 4423.57 1612.69 4427.94 1612.69 4433.34 c
1612.69 4438.74 1617.07 4443.12 1622.46 4443.12 c
1627.86 4443.12 1632.24 4438.74 1632.24 4433.34 c
f
n
1660.75 4390.17 m
1660.75 4384.77 1656.37 4380.39 1650.97 4380.39 c
1645.57 4380.39 1641.2 4384.77 1641.2 4390.17 c
1641.2 4395.57 1645.57 4399.94 1650.97 4399.94 c
1656.37 4399.94 1660.75 4395.57 1660.75 4390.17 c
f
n
1689.26 4347.81 m
1689.26 4342.41 1684.88 4338.04 1679.48 4338.04 c
1674.09 4338.04 1669.71 4342.41 1669.71 4347.81 c
1669.71 4353.21 1674.09 4357.59 1679.48 4357.59 c
1684.88 4357.59 1689.26 4353.21 1689.26 4347.81 c
f
n
1718.59 4304.64 m
1718.59 4299.24 1714.21 4294.86 1708.81 4294.86 c
1703.41 4294.86 1699.04 4299.24 1699.04 4304.64 c
1699.04 4310.04 1703.41 4314.41 1708.81 4314.41 c
1714.21 4314.41 1718.59 4310.04 1718.59 4304.64 c
f
n
1747.1 4261.46 m
1747.1 4256.06 1742.72 4251.69 1737.32 4251.69 c
1731.92 4251.69 1727.55 4256.06 1727.55 4261.46 c
1727.55 4266.86 1731.92 4271.24 1737.32 4271.24 c
1742.72 4271.24 1747.1 4266.86 1747.1 4261.46 c
f
n
1775.61 4218.29 m
1775.61 4212.89 1771.23 4208.52 1765.83 4208.52 c
1760.43 4208.52 1756.06 4212.89 1756.06 4218.29 c
1756.06 4223.69 1760.43 4228.06 1765.83 4228.06 c
1771.23 4228.06 1775.61 4223.69 1775.61 4218.29 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1833.44 4132.76 m
1833.44 4127.36 1829.07 4122.98 1823.67 4122.98 c
1818.27 4122.98 1813.89 4127.36 1813.89 4132.76 c
1813.89 4138.16 1818.27 4142.53 1823.67 4142.53 c
1829.07 4142.53 1833.44 4138.16 1833.44 4132.76 c
f
n
1861.95 4089.58 m
1861.95 4084.18 1857.58 4079.81 1852.18 4079.81 c
1846.78 4079.81 1842.4 4084.18 1842.4 4089.58 c
1842.4 4094.98 1846.78 4099.36 1852.18 4099.36 c
1857.58 4099.36 1861.95 4094.98 1861.95 4089.58 c
f
n
1890.46 4046.41 m
1890.46 4041.01 1886.09 4036.64 1880.69 4036.64 c
1875.29 4036.64 1870.91 4041.01 1870.91 4046.41 c
1870.91 4051.81 1875.29 4056.18 1880.69 4056.18 c
1886.09 4056.18 1890.46 4051.81 1890.46 4046.41 c
f
n
1919.79 4003.24 m
1919.79 3997.84 1915.41 3993.46 1910.02 3993.46 c
1904.62 3993.46 1900.24 3997.84 1900.24 4003.24 c
1900.24 4008.64 1904.62 4013.01 1910.02 4013.01 c
1915.41 4013.01 1919.79 4008.64 1919.79 4003.24 c
f
n
1948.3 3960.88 m
1948.3 3955.48 1943.93 3951.1 1938.53 3951.1 c
1933.13 3951.1 1928.75 3955.48 1928.75 3960.88 c
1928.75 3966.28 1933.13 3970.65 1938.53 3970.65 c
1943.93 3970.65 1948.3 3966.28 1948.3 3960.88 c
f
n
1976.81 3917.7 m
1976.81 3912.3 1972.43 3907.93 1967.04 3907.93 c
1961.64 3907.93 1957.26 3912.3 1957.26 3917.7 c
1957.26 3923.1 1961.64 3927.48 1967.04 3927.48 c
1972.43 3927.48 1976.81 3923.1 1976.81 3917.7 c
f
n
2005.32 3874.53 m
2005.32 3869.13 2000.95 3864.76 1995.55 3864.76 c
1990.15 3864.76 1985.77 3869.13 1985.77 3874.53 c
1985.77 3879.93 1990.15 3884.3 1995.55 3884.3 c
2000.95 3884.3 2005.32 3879.93 2005.32 3874.53 c
f
n
1541.82 4495.25 m
1541.82 4489.85 1537.44 4485.48 1532.04 4485.48 c
1526.64 4485.48 1522.27 4489.85 1522.27 4495.25 c
1522.27 4500.65 1526.64 4505.02 1532.04 4505.02 c
1537.44 4505.02 1541.82 4500.65 1541.82 4495.25 c
f
n
1575.22 4455.34 m
1575.22 4449.94 1570.84 4445.56 1565.44 4445.56 c
1560.04 4445.56 1555.67 4449.94 1555.67 4455.34 c
1555.67 4460.73 1560.04 4465.11 1565.44 4465.11 c
1570.84 4465.11 1575.22 4460.73 1575.22 4455.34 c
f
n
1607.8 4415.42 m
1607.8 4410.02 1603.43 4405.64 1598.03 4405.64 c
1592.63 4405.64 1588.25 4410.02 1588.25 4415.42 c
1588.25 4420.82 1592.63 4425.2 1598.03 4425.2 c
1603.43 4425.2 1607.8 4420.82 1607.8 4415.42 c
f
n
1640.39 4375.5 m
1640.39 4370.11 1636.01 4365.73 1630.61 4365.73 c
1625.21 4365.73 1620.84 4370.11 1620.84 4375.5 c
1620.84 4380.9 1625.21 4385.28 1630.61 4385.28 c
1636.01 4385.28 1640.39 4380.9 1640.39 4375.5 c
f
n
1672.97 4335.59 m
1672.97 4330.19 1668.59 4325.82 1663.2 4325.82 c
1657.8 4325.82 1653.42 4330.19 1653.42 4335.59 c
1653.42 4340.99 1657.8 4345.36 1663.2 4345.36 c
1668.59 4345.36 1672.97 4340.99 1672.97 4335.59 c
f
n
1706.37 4295.68 m
1706.37 4290.28 1701.99 4285.9 1696.59 4285.9 c
1691.19 4285.9 1686.82 4290.28 1686.82 4295.68 c
1686.82 4301.07 1691.19 4305.45 1696.59 4305.45 c
1701.99 4305.45 1706.37 4301.07 1706.37 4295.68 c
f
n
1738.95 4255.76 m
1738.95 4250.36 1734.57 4245.98 1729.18 4245.98 c
1723.78 4245.98 1719.4 4250.36 1719.4 4255.76 c
1719.4 4261.16 1723.78 4265.54 1729.18 4265.54 c
1734.57 4265.54 1738.95 4261.16 1738.95 4255.76 c
f
n
1771.54 4215.84 m
1771.54 4210.45 1767.16 4206.07 1761.76 4206.07 c
1756.36 4206.07 1751.98 4210.45 1751.98 4215.84 c
1751.98 4221.24 1756.36 4225.62 1761.76 4225.62 c
1767.16 4225.62 1771.54 4221.24 1771.54 4215.84 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1837.52 4135.2 m
1837.52 4129.8 1833.14 4125.43 1827.74 4125.43 c
1822.34 4125.43 1817.96 4129.8 1817.96 4135.2 c
1817.96 4140.6 1822.34 4144.98 1827.74 4144.98 c
1833.14 4144.98 1837.52 4140.6 1837.52 4135.2 c
f
n
1870.1 4095.29 m
1870.1 4089.89 1865.72 4085.51 1860.32 4085.51 c
1854.93 4085.51 1850.55 4089.89 1850.55 4095.29 c
1850.55 4100.68 1854.93 4105.06 1860.32 4105.06 c
1865.72 4105.06 1870.1 4100.68 1870.1 4095.29 c
f
n
1902.68 4055.37 m
1902.68 4049.97 1898.31 4045.59 1892.91 4045.59 c
1887.51 4045.59 1883.13 4049.97 1883.13 4055.37 c
1883.13 4060.77 1887.51 4065.14 1892.91 4065.14 c
1898.31 4065.14 1902.68 4060.77 1902.68 4055.37 c
f
n
1936.08 4015.46 m
1936.08 4010.06 1931.7 4005.68 1926.3 4005.68 c
1920.91 4005.68 1916.53 4010.06 1916.53 4015.46 c
1916.53 4020.86 1920.91 4025.23 1926.3 4025.23 c
1931.7 4025.23 1936.08 4020.86 1936.08 4015.46 c
f
n
1968.66 3975.54 m
1968.66 3970.14 1964.29 3965.77 1958.89 3965.77 c
1953.49 3965.77 1949.11 3970.14 1949.11 3975.54 c
1949.11 3980.94 1953.49 3985.32 1958.89 3985.32 c
1964.29 3985.32 1968.66 3980.94 1968.66 3975.54 c
f
n
2001.25 3935.62 m
2001.25 3930.23 1996.87 3925.85 1991.47 3925.85 c
1986.07 3925.85 1981.7 3930.23 1981.7 3935.62 c
1981.7 3941.02 1986.07 3945.4 1991.47 3945.4 c
1996.87 3945.4 2001.25 3941.02 2001.25 3935.62 c
f
n
2033.83 3895.71 m
2033.83 3890.31 2029.46 3885.94 2024.06 3885.94 c
2018.66 3885.94 2014.28 3890.31 2014.28 3895.71 c
2014.28 3901.11 2018.66 3905.48 2024.06 3905.48 c
2029.46 3905.48 2033.83 3901.11 2033.83 3895.71 c
f
n
1511.68 4468.37 m
1511.68 4462.97 1507.3 4458.59 1501.91 4458.59 c
1496.51 4458.59 1492.13 4462.97 1492.13 4468.37 c
1492.13 4473.77 1496.51 4478.14 1501.91 4478.14 c
1507.3 4478.14 1511.68 4473.77 1511.68 4468.37 c
f
n
1548.34 4431.71 m
1548.34 4426.31 1543.96 4421.94 1538.56 4421.94 c
1533.16 4421.94 1528.79 4426.31 1528.79 4431.71 c
1528.79 4437.11 1533.16 4441.49 1538.56 4441.49 c
1543.96 4441.49 1548.34 4437.11 1548.34 4431.71 c
f
n
1584.99 4395.05 m
1584.99 4389.66 1580.62 4385.28 1575.22 4385.28 c
1569.82 4385.28 1565.44 4389.66 1565.44 4395.05 c
1565.44 4400.45 1569.82 4404.83 1575.22 4404.83 c
1580.62 4404.83 1584.99 4400.45 1584.99 4395.05 c
f
n
1621.65 4358.4 m
1621.65 4353.0 1617.27 4348.62 1611.88 4348.62 c
1606.48 4348.62 1602.1 4353.0 1602.1 4358.4 c
1602.1 4363.8 1606.48 4368.17 1611.88 4368.17 c
1617.27 4368.17 1621.65 4363.8 1621.65 4358.4 c
f
n
1658.3 4321.74 m
1658.3 4316.34 1653.93 4311.97 1648.53 4311.97 c
1643.13 4311.97 1638.75 4316.34 1638.75 4321.74 c
1638.75 4327.14 1643.13 4331.52 1648.53 4331.52 c
1653.93 4331.52 1658.3 4327.14 1658.3 4321.74 c
f
n
1694.96 4285.09 m
1694.96 4279.69 1690.59 4275.31 1685.19 4275.31 c
1679.79 4275.31 1675.41 4279.69 1675.41 4285.09 c
1675.41 4290.48 1679.79 4294.86 1685.19 4294.86 c
1690.59 4294.86 1694.96 4290.48 1694.96 4285.09 c
f
n
1731.62 4248.43 m
1731.62 4243.03 1727.24 4238.65 1721.84 4238.65 c
1716.45 4238.65 1712.07 4243.03 1712.07 4248.43 c
1712.07 4253.83 1716.45 4258.2 1721.84 4258.2 c
1727.24 4258.2 1731.62 4253.83 1731.62 4248.43 c
f
n
1768.28 4211.77 m
1768.28 4206.38 1763.9 4202.0 1758.5 4202.0 c
1753.1 4202.0 1748.73 4206.38 1748.73 4211.77 c
1748.73 4217.17 1753.1 4221.55 1758.5 4221.55 c
1763.9 4221.55 1768.28 4217.17 1768.28 4211.77 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1840.77 4139.27 m
1840.77 4133.88 1836.4 4129.5 1831.0 4129.5 c
1825.6 4129.5 1821.22 4133.88 1821.22 4139.27 c
1821.22 4144.67 1825.6 4149.05 1831.0 4149.05 c
1836.4 4149.05 1840.77 4144.67 1840.77 4139.27 c
f
n
1877.43 4102.62 m
1877.43 4097.22 1873.05 4092.84 1867.66 4092.84 c
1862.26 4092.84 1857.88 4097.22 1857.88 4102.62 c
1857.88 4108.02 1862.26 4112.39 1867.66 4112.39 c
1873.05 4112.39 1877.43 4108.02 1877.43 4102.62 c
f
n
1914.09 4065.96 m
1914.09 4060.56 1909.71 4056.18 1904.31 4056.18 c
1898.91 4056.18 1894.54 4060.56 1894.54 4065.96 c
1894.54 4071.36 1898.91 4075.73 1904.31 4075.73 c
1909.71 4075.73 1914.09 4071.36 1914.09 4065.96 c
f
n
1950.75 4029.3 m
1950.75 4023.91 1946.37 4019.53 1940.97 4019.53 c
1935.57 4019.53 1931.2 4023.91 1931.2 4029.3 c
1931.2 4034.7 1935.57 4039.08 1940.97 4039.08 c
1946.37 4039.08 1950.75 4034.7 1950.75 4029.3 c
f
n
1987.4 3992.65 m
1987.4 3987.25 1983.02 3982.87 1977.62 3982.87 c
1972.23 3982.87 1967.85 3987.25 1967.85 3992.65 c
1967.85 3998.05 1972.23 4002.42 1977.62 4002.42 c
1983.02 4002.42 1987.4 3998.05 1987.4 3992.65 c
f
n
2024.06 3955.99 m
2024.06 3950.59 2019.68 3946.21 2014.28 3946.21 c
2008.88 3946.21 2004.51 3950.59 2004.51 3955.99 c
2004.51 3961.39 2008.88 3965.77 2014.28 3965.77 c
2019.68 3965.77 2024.06 3961.39 2024.06 3955.99 c
f
n
2060.71 3919.33 m
2060.71 3913.93 2056.34 3909.56 2050.94 3909.56 c
2045.54 3909.56 2041.16 3913.93 2041.16 3919.33 c
2041.16 3924.73 2045.54 3929.11 2050.94 3929.11 c
2056.34 3929.11 2060.71 3924.73 2060.71 3919.33 c
f
n
1484.8 4438.23 m
1484.8 4432.83 1480.42 4428.45 1475.02 4428.45 c
1469.62 4428.45 1465.25 4432.83 1465.25 4438.23 c
1465.25 4443.63 1469.62 4448.0 1475.02 4448.0 c
1480.42 4448.0 1484.8 4443.63 1484.8 4438.23 c
f
n
1524.71 4404.83 m
1524.71 4399.43 1520.34 4395.05 1514.94 4395.05 c
1509.54 4395.05 1505.16 4399.43 1505.16 4404.83 c
1505.16 4410.23 1509.54 4414.61 1514.94 4414.61 c
1520.34 4414.61 1524.71 4410.23 1524.71 4404.83 c
f
n
1564.63 4372.25 m
1564.63 4366.85 1560.25 4362.47 1554.85 4362.47 c
1549.45 4362.47 1545.08 4366.85 1545.08 4372.25 c
1545.08 4377.64 1549.45 4382.02 1554.85 4382.02 c
1560.25 4382.02 1564.63 4377.64 1564.63 4372.25 c
f
n
1604.54 4339.66 m
1604.54 4334.27 1600.17 4329.89 1594.77 4329.89 c
1589.37 4329.89 1584.99 4334.27 1584.99 4339.66 c
1584.99 4345.06 1589.37 4349.44 1594.77 4349.44 c
1600.17 4349.44 1604.54 4345.06 1604.54 4339.66 c
f
n
1644.46 4307.08 m
1644.46 4301.68 1640.08 4297.3 1634.68 4297.3 c
1629.29 4297.3 1624.91 4301.68 1624.91 4307.08 c
1624.91 4312.48 1629.29 4316.86 1634.68 4316.86 c
1640.08 4316.86 1644.46 4312.48 1644.46 4307.08 c
f
n
1684.37 4273.68 m
1684.37 4268.28 1680.0 4263.91 1674.6 4263.91 c
1669.2 4263.91 1664.82 4268.28 1664.82 4273.68 c
1664.82 4279.08 1669.2 4283.46 1674.6 4283.46 c
1680.0 4283.46 1684.37 4279.08 1684.37 4273.68 c
f
n
1724.29 4241.1 m
1724.29 4235.7 1719.91 4231.32 1714.51 4231.32 c
1709.11 4231.32 1704.74 4235.7 1704.74 4241.1 c
1704.74 4246.5 1709.11 4250.87 1714.51 4250.87 c
1719.91 4250.87 1724.29 4246.5 1724.29 4241.1 c
f
n
1764.2 4208.52 m
1764.2 4203.12 1759.82 4198.74 1754.43 4198.74 c
1749.03 4198.74 1744.65 4203.12 1744.65 4208.52 c
1744.65 4213.91 1749.03 4218.29 1754.43 4218.29 c
1759.82 4218.29 1764.2 4213.91 1764.2 4208.52 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1844.85 4142.53 m
1844.85 4137.13 1840.47 4132.76 1835.07 4132.76 c
1829.68 4132.76 1825.3 4137.13 1825.3 4142.53 c
1825.3 4147.93 1829.68 4152.31 1835.07 4152.31 c
1840.47 4152.31 1844.85 4147.93 1844.85 4142.53 c
f
n
1884.76 4109.95 m
1884.76 4104.55 1880.39 4100.17 1874.99 4100.17 c
1869.59 4100.17 1865.21 4104.55 1865.21 4109.95 c
1865.21 4115.35 1869.59 4119.72 1874.99 4119.72 c
1880.39 4119.72 1884.76 4115.35 1884.76 4109.95 c
f
n
1924.68 4077.36 m
1924.68 4071.96 1920.3 4067.59 1914.9 4067.59 c
1909.5 4067.59 1905.13 4071.96 1905.13 4077.36 c
1905.13 4082.76 1909.5 4087.14 1914.9 4087.14 c
1920.3 4087.14 1924.68 4082.76 1924.68 4077.36 c
f
n
1964.59 4043.96 m
1964.59 4038.57 1960.21 4034.19 1954.82 4034.19 c
1949.42 4034.19 1945.04 4038.57 1945.04 4043.96 c
1945.04 4049.36 1949.42 4053.74 1954.82 4053.74 c
1960.21 4053.74 1964.59 4049.36 1964.59 4043.96 c
f
n
2004.51 4011.38 m
2004.51 4005.98 2000.13 4001.61 1994.73 4001.61 c
1989.33 4001.61 1984.96 4005.98 1984.96 4011.38 c
1984.96 4016.78 1989.33 4021.16 1994.73 4021.16 c
2000.13 4021.16 2004.51 4016.78 2004.51 4011.38 c
f
n
2044.42 3978.8 m
2044.42 3973.4 2040.05 3969.02 2034.65 3969.02 c
2029.25 3969.02 2024.87 3973.4 2024.87 3978.8 c
2024.87 3984.2 2029.25 3988.57 2034.65 3988.57 c
2040.05 3988.57 2044.42 3984.2 2044.42 3978.8 c
f
n
2084.34 3946.21 m
2084.34 3940.82 2079.96 3936.44 2074.56 3936.44 c
2069.16 3936.44 2064.79 3940.82 2064.79 3946.21 c
2064.79 3951.61 2069.16 3955.99 2074.56 3955.99 c
2079.96 3955.99 2084.34 3951.61 2084.34 3946.21 c
f
n
1460.36 4405.64 m
1460.36 4400.25 1455.98 4395.87 1450.59 4395.87 c
1445.19 4395.87 1440.81 4400.25 1440.81 4405.64 c
1440.81 4411.04 1445.19 4415.42 1450.59 4415.42 c
1455.98 4415.42 1460.36 4411.04 1460.36 4405.64 c
f
n
1503.54 4376.32 m
1503.54 4370.92 1499.16 4366.54 1493.76 4366.54 c
1488.36 4366.54 1483.98 4370.92 1483.98 4376.32 c
1483.98 4381.72 1488.36 4386.09 1493.76 4386.09 c
1499.16 4386.09 1503.54 4381.72 1503.54 4376.32 c
f
n
1546.71 4347.81 m
1546.71 4342.41 1542.33 4338.04 1536.93 4338.04 c
1531.54 4338.04 1527.16 4342.41 1527.16 4347.81 c
1527.16 4353.21 1531.54 4357.59 1536.93 4357.59 c
1542.33 4357.59 1546.71 4353.21 1546.71 4347.81 c
f
n
1589.88 4319.3 m
1589.88 4313.9 1585.5 4309.52 1580.11 4309.52 c
1574.71 4309.52 1570.33 4313.9 1570.33 4319.3 c
1570.33 4324.7 1574.71 4329.07 1580.11 4329.07 c
1585.5 4329.07 1589.88 4324.7 1589.88 4319.3 c
f
n
1632.24 4290.79 m
1632.24 4285.39 1627.86 4281.01 1622.46 4281.01 c
1617.07 4281.01 1612.69 4285.39 1612.69 4290.79 c
1612.69 4296.19 1617.07 4300.56 1622.46 4300.56 c
1627.86 4300.56 1632.24 4296.19 1632.24 4290.79 c
f
n
1675.41 4261.46 m
1675.41 4256.06 1671.04 4251.69 1665.64 4251.69 c
1660.24 4251.69 1655.86 4256.06 1655.86 4261.46 c
1655.86 4266.86 1660.24 4271.24 1665.64 4271.24 c
1671.04 4271.24 1675.41 4266.86 1675.41 4261.46 c
f
n
1718.59 4232.95 m
1718.59 4227.55 1714.21 4223.18 1708.81 4223.18 c
1703.41 4223.18 1699.04 4227.55 1699.04 4232.95 c
1699.04 4238.35 1703.41 4242.73 1708.81 4242.73 c
1714.21 4242.73 1718.59 4238.35 1718.59 4232.95 c
f
n
1761.76 4204.44 m
1761.76 4199.04 1757.38 4194.66 1751.98 4194.66 c
1746.59 4194.66 1742.21 4199.04 1742.21 4204.44 c
1742.21 4209.84 1746.59 4214.21 1751.98 4214.21 c
1757.38 4214.21 1761.76 4209.84 1761.76 4204.44 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1847.29 4146.61 m
1847.29 4141.21 1842.91 4136.83 1837.52 4136.83 c
1832.12 4136.83 1827.74 4141.21 1827.74 4146.61 c
1827.74 4152.0 1832.12 4156.38 1837.52 4156.38 c
1842.91 4156.38 1847.29 4152.0 1847.29 4146.61 c
f
n
1890.46 4118.09 m
1890.46 4112.7 1886.09 4108.32 1880.69 4108.32 c
1875.29 4108.32 1870.91 4112.7 1870.91 4118.09 c
1870.91 4123.49 1875.29 4127.87 1880.69 4127.87 c
1886.09 4127.87 1890.46 4123.49 1890.46 4118.09 c
f
n
1933.64 4089.58 m
1933.64 4084.18 1929.26 4079.81 1923.86 4079.81 c
1918.46 4079.81 1914.09 4084.18 1914.09 4089.58 c
1914.09 4094.98 1918.46 4099.36 1923.86 4099.36 c
1929.26 4099.36 1933.64 4094.98 1933.64 4089.58 c
f
n
1976.81 4060.26 m
1976.81 4054.86 1972.43 4050.48 1967.04 4050.48 c
1961.64 4050.48 1957.26 4054.86 1957.26 4060.26 c
1957.26 4065.66 1961.64 4070.04 1967.04 4070.04 c
1972.43 4070.04 1976.81 4065.66 1976.81 4060.26 c
f
n
2019.17 4031.75 m
2019.17 4026.35 2014.79 4021.97 2009.39 4021.97 c
2004.0 4021.97 1999.62 4026.35 1999.62 4031.75 c
1999.62 4037.14 2004.0 4041.52 2009.39 4041.52 c
2014.79 4041.52 2019.17 4037.14 2019.17 4031.75 c
f
n
2062.34 4003.24 m
2062.34 3997.84 2057.96 3993.46 2052.57 3993.46 c
2047.17 3993.46 2042.79 3997.84 2042.79 4003.24 c
2042.79 4008.64 2047.17 4013.01 2052.57 4013.01 c
2057.96 4013.01 2062.34 4008.64 2062.34 4003.24 c
f
n
2105.52 3974.73 m
2105.52 3969.33 2101.14 3964.95 2095.74 3964.95 c
2090.34 3964.95 2085.96 3969.33 2085.96 3974.73 c
2085.96 3980.12 2090.34 3984.5 2095.74 3984.5 c
2101.14 3984.5 2105.52 3980.12 2105.52 3974.73 c
f
n
1439.18 4370.62 m
1439.18 4365.22 1434.8 4360.84 1429.41 4360.84 c
1424.01 4360.84 1419.63 4365.22 1419.63 4370.62 c
1419.63 4376.02 1424.01 4380.39 1429.41 4380.39 c
1434.8 4380.39 1439.18 4376.02 1439.18 4370.62 c
f
n
1484.8 4346.18 m
1484.8 4340.78 1480.42 4336.41 1475.02 4336.41 c
1469.62 4336.41 1465.25 4340.78 1465.25 4346.18 c
1465.25 4351.58 1469.62 4355.95 1475.02 4355.95 c
1480.42 4355.95 1484.8 4351.58 1484.8 4346.18 c
f
n
1530.41 4321.74 m
1530.41 4316.34 1526.04 4311.97 1520.64 4311.97 c
1515.24 4311.97 1510.86 4316.34 1510.86 4321.74 c
1510.86 4327.14 1515.24 4331.52 1520.64 4331.52 c
1526.04 4331.52 1530.41 4327.14 1530.41 4321.74 c
f
n
1576.03 4297.3 m
1576.03 4291.91 1571.66 4287.53 1566.26 4287.53 c
1560.86 4287.53 1556.48 4291.91 1556.48 4297.3 c
1556.48 4302.7 1560.86 4307.08 1566.26 4307.08 c
1571.66 4307.08 1576.03 4302.7 1576.03 4297.3 c
f
n
1621.65 4272.87 m
1621.65 4267.47 1617.27 4263.09 1611.88 4263.09 c
1606.48 4263.09 1602.1 4267.47 1602.1 4272.87 c
1602.1 4278.27 1606.48 4282.64 1611.88 4282.64 c
1617.27 4282.64 1621.65 4278.27 1621.65 4272.87 c
f
n
1667.27 4248.43 m
1667.27 4243.03 1662.89 4238.65 1657.49 4238.65 c
1652.09 4238.65 1647.71 4243.03 1647.71 4248.43 c
1647.71 4253.83 1652.09 4258.2 1657.49 4258.2 c
1662.89 4258.2 1667.27 4253.83 1667.27 4248.43 c
f
n
1712.88 4223.99 m
1712.88 4218.59 1708.51 4214.21 1703.11 4214.21 c
1697.71 4214.21 1693.33 4218.59 1693.33 4223.99 c
1693.33 4229.39 1697.71 4233.77 1703.11 4233.77 c
1708.51 4233.77 1712.88 4229.39 1712.88 4223.99 c
f
n
1758.5 4199.55 m
1758.5 4194.16 1754.12 4189.78 1748.73 4189.78 c
1743.33 4189.78 1738.95 4194.16 1738.95 4199.55 c
1738.95 4204.95 1743.33 4209.33 1748.73 4209.33 c
1754.12 4209.33 1758.5 4204.95 1758.5 4199.55 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1850.55 4151.49 m
1850.55 4146.09 1846.17 4141.72 1840.77 4141.72 c
1835.38 4141.72 1831.0 4146.09 1831.0 4151.49 c
1831.0 4156.89 1835.38 4161.27 1840.77 4161.27 c
1846.17 4161.27 1850.55 4156.89 1850.55 4151.49 c
f
n
1896.17 4127.05 m
1896.17 4121.66 1891.79 4117.28 1886.39 4117.28 c
1880.99 4117.28 1876.62 4121.66 1876.62 4127.05 c
1876.62 4132.45 1880.99 4136.83 1886.39 4136.83 c
1891.79 4136.83 1896.17 4132.45 1896.17 4127.05 c
f
n
1941.79 4102.62 m
1941.79 4097.22 1937.41 4092.84 1932.01 4092.84 c
1926.61 4092.84 1922.23 4097.22 1922.23 4102.62 c
1922.23 4108.02 1926.61 4112.39 1932.01 4112.39 c
1937.41 4112.39 1941.79 4108.02 1941.79 4102.62 c
f
n
1987.4 4078.18 m
1987.4 4072.78 1983.02 4068.4 1977.62 4068.4 c
1972.23 4068.4 1967.85 4072.78 1967.85 4078.18 c
1967.85 4083.58 1972.23 4087.95 1977.62 4087.95 c
1983.02 4087.95 1987.4 4083.58 1987.4 4078.18 c
f
n
2033.02 4053.74 m
2033.02 4048.34 2028.64 4043.96 2023.24 4043.96 c
2017.84 4043.96 2013.47 4048.34 2013.47 4053.74 c
2013.47 4059.14 2017.84 4063.52 2023.24 4063.52 c
2028.64 4063.52 2033.02 4059.14 2033.02 4053.74 c
f
n
2078.64 4029.3 m
2078.64 4023.91 2074.26 4019.53 2068.86 4019.53 c
2063.46 4019.53 2059.09 4023.91 2059.09 4029.3 c
2059.09 4034.7 2063.46 4039.08 2068.86 4039.08 c
2074.26 4039.08 2078.64 4034.7 2078.64 4029.3 c
f
n
2124.25 4004.87 m
2124.25 3999.47 2119.88 3995.09 2114.48 3995.09 c
2109.08 3995.09 2104.7 3999.47 2104.7 4004.87 c
2104.7 4010.27 2109.08 4014.64 2114.48 4014.64 c
2119.88 4014.64 2124.25 4010.27 2124.25 4004.87 c
f
n
1422.07 4333.96 m
1422.07 4328.56 1417.7 4324.19 1412.3 4324.19 c
1406.9 4324.19 1402.52 4328.56 1402.52 4333.96 c
1402.52 4339.36 1406.9 4343.73 1412.3 4343.73 c
1417.7 4343.73 1422.07 4339.36 1422.07 4333.96 c
f
n
1470.14 4314.41 m
1470.14 4309.01 1465.76 4304.64 1460.36 4304.64 c
1454.96 4304.64 1450.59 4309.01 1450.59 4314.41 c
1450.59 4319.81 1454.96 4324.19 1460.36 4324.19 c
1465.76 4324.19 1470.14 4319.81 1470.14 4314.41 c
f
n
1518.2 4294.05 m
1518.2 4288.65 1513.82 4284.27 1508.42 4284.27 c
1503.02 4284.27 1498.64 4288.65 1498.64 4294.05 c
1498.64 4299.45 1503.02 4303.82 1508.42 4303.82 c
1513.82 4303.82 1518.2 4299.45 1518.2 4294.05 c
f
n
1565.44 4274.5 m
1565.44 4269.1 1561.07 4264.72 1555.67 4264.72 c
1550.27 4264.72 1545.89 4269.1 1545.89 4274.5 c
1545.89 4279.89 1550.27 4284.27 1555.67 4284.27 c
1561.07 4284.27 1565.44 4279.89 1565.44 4274.5 c
f
n
1613.5 4254.95 m
1613.5 4249.55 1609.12 4245.17 1603.73 4245.17 c
1598.33 4245.17 1593.95 4249.55 1593.95 4254.95 c
1593.95 4260.34 1598.33 4264.72 1603.73 4264.72 c
1609.12 4264.72 1613.5 4260.34 1613.5 4254.95 c
f
n
1661.56 4234.58 m
1661.56 4229.18 1657.19 4224.8 1651.79 4224.8 c
1646.39 4224.8 1642.02 4229.18 1642.02 4234.58 c
1642.02 4239.98 1646.39 4244.36 1651.79 4244.36 c
1657.19 4244.36 1661.56 4239.98 1661.56 4234.58 c
f
n
1708.81 4215.03 m
1708.81 4209.63 1704.43 4205.25 1699.04 4205.25 c
1693.64 4205.25 1689.26 4209.63 1689.26 4215.03 c
1689.26 4220.43 1693.64 4224.8 1699.04 4224.8 c
1704.43 4224.8 1708.81 4220.43 1708.81 4215.03 c
f
n
1756.87 4195.48 m
1756.87 4190.08 1752.5 4185.71 1747.1 4185.71 c
1741.7 4185.71 1737.32 4190.08 1737.32 4195.48 c
1737.32 4200.88 1741.7 4205.25 1747.1 4205.25 c
1752.5 4205.25 1756.87 4200.88 1756.87 4195.48 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1852.18 4155.57 m
1852.18 4150.17 1847.8 4145.79 1842.4 4145.79 c
1837.0 4145.79 1832.63 4150.17 1832.63 4155.57 c
1832.63 4160.96 1837.0 4165.34 1842.4 4165.34 c
1847.8 4165.34 1852.18 4160.96 1852.18 4155.57 c
f
n
1900.24 4136.02 m
1900.24 4130.62 1895.86 4126.24 1890.46 4126.24 c
1885.07 4126.24 1880.69 4130.62 1880.69 4136.02 c
1880.69 4141.41 1885.07 4145.79 1890.46 4145.79 c
1895.86 4145.79 1900.24 4141.41 1900.24 4136.02 c
f
n
1947.48 4116.46 m
1947.48 4111.07 1943.11 4106.69 1937.71 4106.69 c
1932.31 4106.69 1927.94 4111.07 1927.94 4116.46 c
1927.94 4121.86 1932.31 4126.24 1937.71 4126.24 c
1943.11 4126.24 1947.48 4121.86 1947.48 4116.46 c
f
n
1995.55 4096.1 m
1995.55 4090.7 1991.17 4086.32 1985.77 4086.32 c
1980.38 4086.32 1976.0 4090.7 1976.0 4096.1 c
1976.0 4101.5 1980.38 4105.88 1985.77 4105.88 c
1991.17 4105.88 1995.55 4101.5 1995.55 4096.1 c
f
n
2043.61 4076.55 m
2043.61 4071.15 2039.23 4066.77 2033.83 4066.77 c
2028.43 4066.77 2024.06 4071.15 2024.06 4076.55 c
2024.06 4081.95 2028.43 4086.32 2033.83 4086.32 c
2039.23 4086.32 2043.61 4081.95 2043.61 4076.55 c
f
n
2090.86 4057.0 m
2090.86 4051.6 2086.48 4047.23 2081.08 4047.23 c
2075.68 4047.23 2071.3 4051.6 2071.3 4057.0 c
2071.3 4062.4 2075.68 4066.77 2081.08 4066.77 c
2086.48 4066.77 2090.86 4062.4 2090.86 4057.0 c
f
n
2138.91 4036.64 m
2138.91 4031.24 2134.54 4026.86 2129.14 4026.86 c
2123.74 4026.86 2119.36 4031.24 2119.36 4036.64 c
2119.36 4042.04 2123.74 4046.41 2129.14 4046.41 c
2134.54 4046.41 2138.91 4042.04 2138.91 4036.64 c
f
n
1408.23 4295.68 m
1408.23 4290.28 1403.85 4285.9 1398.45 4285.9 c
1393.05 4285.9 1388.68 4290.28 1388.68 4295.68 c
1388.68 4301.07 1393.05 4305.45 1398.45 4305.45 c
1403.85 4305.45 1408.23 4301.07 1408.23 4295.68 c
f
n
1457.92 4281.01 m
1457.92 4275.61 1453.54 4271.24 1448.14 4271.24 c
1442.74 4271.24 1438.37 4275.61 1438.37 4281.01 c
1438.37 4286.41 1442.74 4290.79 1448.14 4290.79 c
1453.54 4290.79 1457.92 4286.41 1457.92 4281.01 c
f
n
1507.61 4265.54 m
1507.61 4260.14 1503.23 4255.76 1497.83 4255.76 c
1492.43 4255.76 1488.05 4260.14 1488.05 4265.54 c
1488.05 4270.93 1492.43 4275.31 1497.83 4275.31 c
1503.23 4275.31 1507.61 4270.93 1507.61 4265.54 c
f
n
1557.3 4250.87 m
1557.3 4245.47 1552.92 4241.1 1547.52 4241.1 c
1542.12 4241.1 1537.75 4245.47 1537.75 4250.87 c
1537.75 4256.27 1542.12 4260.65 1547.52 4260.65 c
1552.92 4260.65 1557.3 4256.27 1557.3 4250.87 c
f
n
1606.17 4235.39 m
1606.17 4230.0 1601.8 4225.62 1596.4 4225.62 c
1591.0 4225.62 1586.62 4230.0 1586.62 4235.39 c
1586.62 4240.79 1591.0 4245.17 1596.4 4245.17 c
1601.8 4245.17 1606.17 4240.79 1606.17 4235.39 c
f
n
1655.86 4220.73 m
1655.86 4215.34 1651.48 4210.96 1646.09 4210.96 c
1640.69 4210.96 1636.31 4215.34 1636.31 4220.73 c
1636.31 4226.13 1640.69 4230.51 1646.09 4230.51 c
1651.48 4230.51 1655.86 4226.13 1655.86 4220.73 c
f
n
1705.55 4205.25 m
1705.55 4199.86 1701.18 4195.48 1695.78 4195.48 c
1690.38 4195.48 1686.0 4199.86 1686.0 4205.25 c
1686.0 4210.65 1690.38 4215.03 1695.78 4215.03 c
1701.18 4215.03 1705.55 4210.65 1705.55 4205.25 c
f
n
1755.24 4190.59 m
1755.24 4185.2 1750.87 4180.82 1745.47 4180.82 c
1740.07 4180.82 1735.69 4185.2 1735.69 4190.59 c
1735.69 4195.99 1740.07 4200.37 1745.47 4200.37 c
1750.87 4200.37 1755.24 4195.99 1755.24 4190.59 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1853.81 4160.45 m
1853.81 4155.05 1849.43 4150.68 1844.03 4150.68 c
1838.63 4150.68 1834.26 4155.05 1834.26 4160.45 c
1834.26 4165.85 1838.63 4170.23 1844.03 4170.23 c
1849.43 4170.23 1853.81 4165.85 1853.81 4160.45 c
f
n
1903.5 4145.79 m
1903.5 4140.39 1899.12 4136.02 1893.72 4136.02 c
1888.32 4136.02 1883.95 4140.39 1883.95 4145.79 c
1883.95 4151.19 1888.32 4155.57 1893.72 4155.57 c
1899.12 4155.57 1903.5 4151.19 1903.5 4145.79 c
f
n
1953.19 4130.31 m
1953.19 4124.91 1948.81 4120.54 1943.41 4120.54 c
1938.02 4120.54 1933.64 4124.91 1933.64 4130.31 c
1933.64 4135.71 1938.02 4140.09 1943.41 4140.09 c
1948.81 4140.09 1953.19 4135.71 1953.19 4130.31 c
f
n
2002.88 4115.65 m
2002.88 4110.25 1998.5 4105.88 1993.1 4105.88 c
1987.7 4105.88 1983.33 4110.25 1983.33 4115.65 c
1983.33 4121.05 1987.7 4125.43 1993.1 4125.43 c
1998.5 4125.43 2002.88 4121.05 2002.88 4115.65 c
f
n
2051.75 4100.17 m
2051.75 4094.77 2047.38 4090.4 2041.98 4090.4 c
2036.58 4090.4 2032.2 4094.77 2032.2 4100.17 c
2032.2 4105.57 2036.58 4109.95 2041.98 4109.95 c
2047.38 4109.95 2051.75 4105.57 2051.75 4100.17 c
f
n
2101.45 4085.51 m
2101.45 4080.11 2097.07 4075.73 2091.67 4075.73 c
2086.27 4075.73 2081.89 4080.11 2081.89 4085.51 c
2081.89 4090.91 2086.27 4095.29 2091.67 4095.29 c
2097.07 4095.29 2101.45 4090.91 2101.45 4085.51 c
f
n
2151.13 4070.04 m
2151.13 4064.64 2146.76 4060.26 2141.36 4060.26 c
2135.96 4060.26 2131.58 4064.64 2131.58 4070.04 c
2131.58 4075.43 2135.96 4079.81 2141.36 4079.81 c
2146.76 4079.81 2151.13 4075.43 2151.13 4070.04 c
f
n
1398.45 4256.57 m
1398.45 4251.18 1394.07 4246.8 1388.68 4246.8 c
1383.28 4246.8 1378.9 4251.18 1378.9 4256.57 c
1378.9 4261.97 1383.28 4266.35 1388.68 4266.35 c
1394.07 4266.35 1398.45 4261.97 1398.45 4256.57 c
f
n
1449.77 4245.98 m
1449.77 4240.59 1445.39 4236.21 1440.0 4236.21 c
1434.6 4236.21 1430.22 4240.59 1430.22 4245.98 c
1430.22 4251.38 1434.6 4255.76 1440.0 4255.76 c
1445.39 4255.76 1449.77 4251.38 1449.77 4245.98 c
f
n
1500.27 4236.21 m
1500.27 4230.81 1495.9 4226.43 1490.5 4226.43 c
1485.1 4226.43 1480.73 4230.81 1480.73 4236.21 c
1480.73 4241.61 1485.1 4245.98 1490.5 4245.98 c
1495.9 4245.98 1500.27 4241.61 1500.27 4236.21 c
f
n
1550.78 4225.62 m
1550.78 4220.22 1546.4 4215.84 1541.0 4215.84 c
1535.61 4215.84 1531.23 4220.22 1531.23 4225.62 c
1531.23 4231.02 1535.61 4235.39 1541.0 4235.39 c
1546.4 4235.39 1550.78 4231.02 1550.78 4225.62 c
f
n
1601.29 4215.84 m
1601.29 4210.45 1596.91 4206.07 1591.51 4206.07 c
1586.11 4206.07 1581.73 4210.45 1581.73 4215.84 c
1581.73 4221.24 1586.11 4225.62 1591.51 4225.62 c
1596.91 4225.62 1601.29 4221.24 1601.29 4215.84 c
f
n
1652.61 4206.07 m
1652.61 4200.67 1648.23 4196.3 1642.83 4196.3 c
1637.43 4196.3 1633.05 4200.67 1633.05 4206.07 c
1633.05 4211.47 1637.43 4215.84 1642.83 4215.84 c
1648.23 4215.84 1652.61 4211.47 1652.61 4206.07 c
f
n
1703.11 4195.48 m
1703.11 4190.08 1698.73 4185.71 1693.33 4185.71 c
1687.93 4185.71 1683.56 4190.08 1683.56 4195.48 c
1683.56 4200.88 1687.93 4205.25 1693.33 4205.25 c
1698.73 4205.25 1703.11 4200.88 1703.11 4195.48 c
f
n
1753.61 4185.71 m
1753.61 4180.31 1749.24 4175.93 1743.84 4175.93 c
1738.44 4175.93 1734.06 4180.31 1734.06 4185.71 c
1734.06 4191.11 1738.44 4195.48 1743.84 4195.48 c
1749.24 4195.48 1753.61 4191.11 1753.61 4185.71 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1855.44 4165.34 m
1855.44 4159.94 1851.06 4155.57 1845.66 4155.57 c
1840.26 4155.57 1835.89 4159.94 1835.89 4165.34 c
1835.89 4170.74 1840.26 4175.12 1845.66 4175.12 c
1851.06 4175.12 1855.44 4170.74 1855.44 4165.34 c
f
n
1905.94 4155.57 m
1905.94 4150.17 1901.57 4145.79 1896.17 4145.79 c
1890.77 4145.79 1886.39 4150.17 1886.39 4155.57 c
1886.39 4160.96 1890.77 4165.34 1896.17 4165.34 c
1901.57 4165.34 1905.94 4160.96 1905.94 4155.57 c
f
n
1956.45 4144.98 m
1956.45 4139.58 1952.07 4135.2 1946.67 4135.2 c
1941.27 4135.2 1936.89 4139.58 1936.89 4144.98 c
1936.89 4150.38 1941.27 4154.75 1946.67 4154.75 c
1952.07 4154.75 1956.45 4150.38 1956.45 4144.98 c
f
n
2007.77 4135.2 m
2007.77 4129.8 2003.39 4125.43 1997.99 4125.43 c
1992.59 4125.43 1988.21 4129.8 1988.21 4135.2 c
1988.21 4140.6 1992.59 4144.98 1997.99 4144.98 c
2003.39 4144.98 2007.77 4140.6 2007.77 4135.2 c
f
n
2058.27 4125.43 m
2058.27 4120.03 2053.89 4115.65 2048.5 4115.65 c
2043.1 4115.65 2038.72 4120.03 2038.72 4125.43 c
2038.72 4130.82 2043.1 4135.2 2048.5 4135.2 c
2053.89 4135.2 2058.27 4130.82 2058.27 4125.43 c
f
n
2108.77 4114.84 m
2108.77 4109.44 2104.4 4105.06 2099.0 4105.06 c
2093.6 4105.06 2089.23 4109.44 2089.23 4114.84 c
2089.23 4120.23 2093.6 4124.61 2099.0 4124.61 c
2104.4 4124.61 2108.77 4120.23 2108.77 4114.84 c
f
n
2159.28 4105.06 m
2159.28 4099.66 2154.9 4095.29 2149.5 4095.29 c
2144.11 4095.29 2139.73 4099.66 2139.73 4105.06 c
2139.73 4110.46 2144.11 4114.84 2149.5 4114.84 c
2154.9 4114.84 2159.28 4110.46 2159.28 4105.06 c
f
n
1392.75 4215.84 m
1392.75 4210.45 1388.37 4206.07 1382.97 4206.07 c
1377.57 4206.07 1373.2 4210.45 1373.2 4215.84 c
1373.2 4221.24 1377.57 4225.62 1382.97 4225.62 c
1388.37 4225.62 1392.75 4221.24 1392.75 4215.84 c
f
n
1444.07 4210.96 m
1444.07 4205.56 1439.69 4201.18 1434.29 4201.18 c
1428.89 4201.18 1424.52 4205.56 1424.52 4210.96 c
1424.52 4216.36 1428.89 4220.73 1434.29 4220.73 c
1439.69 4220.73 1444.07 4216.36 1444.07 4210.96 c
f
n
1495.39 4206.07 m
1495.39 4200.67 1491.01 4196.3 1485.61 4196.3 c
1480.21 4196.3 1475.84 4200.67 1475.84 4206.07 c
1475.84 4211.47 1480.21 4215.84 1485.61 4215.84 c
1491.01 4215.84 1495.39 4211.47 1495.39 4206.07 c
f
n
1547.52 4201.18 m
1547.52 4195.79 1543.14 4191.41 1537.75 4191.41 c
1532.35 4191.41 1527.97 4195.79 1527.97 4201.18 c
1527.97 4206.58 1532.35 4210.96 1537.75 4210.96 c
1543.14 4210.96 1547.52 4206.58 1547.52 4201.18 c
f
n
1598.84 4195.48 m
1598.84 4190.08 1594.46 4185.71 1589.07 4185.71 c
1583.67 4185.71 1579.29 4190.08 1579.29 4195.48 c
1579.29 4200.88 1583.67 4205.25 1589.07 4205.25 c
1594.46 4205.25 1598.84 4200.88 1598.84 4195.48 c
f
n
1650.16 4190.59 m
1650.16 4185.2 1645.79 4180.82 1640.39 4180.82 c
1634.99 4180.82 1630.61 4185.2 1630.61 4190.59 c
1630.61 4195.99 1634.99 4200.37 1640.39 4200.37 c
1645.79 4200.37 1650.16 4195.99 1650.16 4190.59 c
f
n
1701.48 4185.71 m
1701.48 4180.31 1697.1 4175.93 1691.7 4175.93 c
1686.3 4175.93 1681.93 4180.31 1681.93 4185.71 c
1681.93 4191.11 1686.3 4195.48 1691.7 4195.48 c
1697.1 4195.48 1701.48 4191.11 1701.48 4185.71 c
f
n
1752.8 4180.82 m
1752.8 4175.42 1748.42 4171.04 1743.02 4171.04 c
1737.62 4171.04 1733.25 4175.42 1733.25 4180.82 c
1733.25 4186.21 1737.62 4190.59 1743.02 4190.59 c
1748.42 4190.59 1752.8 4186.21 1752.8 4180.82 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1856.25 4170.23 m
1856.25 4164.83 1851.88 4160.45 1846.48 4160.45 c
1841.08 4160.45 1836.7 4164.83 1836.7 4170.23 c
1836.7 4175.62 1841.08 4180.0 1846.48 4180.0 c
1851.88 4180.0 1856.25 4175.62 1856.25 4170.23 c
f
n
1907.57 4165.34 m
1907.57 4159.94 1903.2 4155.57 1897.8 4155.57 c
1892.4 4155.57 1888.02 4159.94 1888.02 4165.34 c
1888.02 4170.74 1892.4 4175.12 1897.8 4175.12 c
1903.2 4175.12 1907.57 4170.74 1907.57 4165.34 c
f
n
1958.89 4160.45 m
1958.89 4155.05 1954.51 4150.68 1949.11 4150.68 c
1943.71 4150.68 1939.34 4155.05 1939.34 4160.45 c
1939.34 4165.85 1943.71 4170.23 1949.11 4170.23 c
1954.51 4170.23 1958.89 4165.85 1958.89 4160.45 c
f
n
2010.21 4155.57 m
2010.21 4150.17 2005.83 4145.79 2000.43 4145.79 c
1995.04 4145.79 1990.66 4150.17 1990.66 4155.57 c
1990.66 4160.96 1995.04 4165.34 2000.43 4165.34 c
2005.83 4165.34 2010.21 4160.96 2010.21 4155.57 c
f
n
2061.53 4149.86 m
2061.53 4144.46 2057.15 4140.09 2051.75 4140.09 c
2046.36 4140.09 2041.98 4144.46 2041.98 4149.86 c
2041.98 4155.26 2046.36 4159.64 2051.75 4159.64 c
2057.15 4159.64 2061.53 4155.26 2061.53 4149.86 c
f
n
2113.66 4144.98 m
2113.66 4139.58 2109.29 4135.2 2103.89 4135.2 c
2098.49 4135.2 2094.11 4139.58 2094.11 4144.98 c
2094.11 4150.38 2098.49 4154.75 2103.89 4154.75 c
2109.29 4154.75 2113.66 4150.38 2113.66 4144.98 c
f
n
2164.98 4140.09 m
2164.98 4134.69 2160.61 4130.31 2155.21 4130.31 c
2149.81 4130.31 2145.43 4134.69 2145.43 4140.09 c
2145.43 4145.49 2149.81 4149.86 2155.21 4149.86 c
2160.61 4149.86 2164.98 4145.49 2164.98 4140.09 c
f
n
1390.3 4175.93 m
1390.3 4170.53 1385.93 4166.16 1380.53 4166.16 c
1375.13 4166.16 1370.75 4170.53 1370.75 4175.93 c
1370.75 4181.33 1375.13 4185.71 1380.53 4185.71 c
1385.93 4185.71 1390.3 4181.33 1390.3 4175.93 c
f
n
1442.44 4175.93 m
1442.44 4170.53 1438.06 4166.16 1432.66 4166.16 c
1427.27 4166.16 1422.89 4170.53 1422.89 4175.93 c
1422.89 4181.33 1427.27 4185.71 1432.66 4185.71 c
1438.06 4185.71 1442.44 4181.33 1442.44 4175.93 c
f
n
1493.76 4175.93 m
1493.76 4170.53 1489.38 4166.16 1483.98 4166.16 c
1478.59 4166.16 1474.21 4170.53 1474.21 4175.93 c
1474.21 4181.33 1478.59 4185.71 1483.98 4185.71 c
1489.38 4185.71 1493.76 4181.33 1493.76 4175.93 c
f
n
1545.89 4175.93 m
1545.89 4170.53 1541.52 4166.16 1536.12 4166.16 c
1530.72 4166.16 1526.34 4170.53 1526.34 4175.93 c
1526.34 4181.33 1530.72 4185.71 1536.12 4185.71 c
1541.52 4185.71 1545.89 4181.33 1545.89 4175.93 c
f
n
1598.03 4175.93 m
1598.03 4170.53 1593.65 4166.16 1588.25 4166.16 c
1582.85 4166.16 1578.48 4170.53 1578.48 4175.93 c
1578.48 4181.33 1582.85 4185.71 1588.25 4185.71 c
1593.65 4185.71 1598.03 4181.33 1598.03 4175.93 c
f
n
1649.34 4175.93 m
1649.34 4170.53 1644.97 4166.16 1639.57 4166.16 c
1634.17 4166.16 1629.8 4170.53 1629.8 4175.93 c
1629.8 4181.33 1634.17 4185.71 1639.57 4185.71 c
1644.97 4185.71 1649.34 4181.33 1649.34 4175.93 c
f
n
1701.48 4175.93 m
1701.48 4170.53 1697.1 4166.16 1691.7 4166.16 c
1686.3 4166.16 1681.93 4170.53 1681.93 4175.93 c
1681.93 4181.33 1686.3 4185.71 1691.7 4185.71 c
1697.1 4185.71 1701.48 4181.33 1701.48 4175.93 c
f
n
1752.8 4175.93 m
1752.8 4170.53 1748.42 4166.16 1743.02 4166.16 c
1737.62 4166.16 1733.25 4170.53 1733.25 4175.93 c
1733.25 4181.33 1737.62 4185.71 1743.02 4185.71 c
1748.42 4185.71 1752.8 4181.33 1752.8 4175.93 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1856.25 4175.93 m
1856.25 4170.53 1851.88 4166.16 1846.48 4166.16 c
1841.08 4166.16 1836.7 4170.53 1836.7 4175.93 c
1836.7 4181.33 1841.08 4185.71 1846.48 4185.71 c
1851.88 4185.71 1856.25 4181.33 1856.25 4175.93 c
f
n
1908.39 4175.93 m
1908.39 4170.53 1904.01 4166.16 1898.61 4166.16 c
1893.21 4166.16 1888.84 4170.53 1888.84 4175.93 c
1888.84 4181.33 1893.21 4185.71 1898.61 4185.71 c
1904.01 4185.71 1908.39 4181.33 1908.39 4175.93 c
f
n
1959.7 4175.93 m
1959.7 4170.53 1955.33 4166.16 1949.93 4166.16 c
1944.53 4166.16 1940.16 4170.53 1940.16 4175.93 c
1940.16 4181.33 1944.53 4185.71 1949.93 4185.71 c
1955.33 4185.71 1959.7 4181.33 1959.7 4175.93 c
f
n
2011.84 4175.93 m
2011.84 4170.53 2007.46 4166.16 2002.06 4166.16 c
1996.66 4166.16 1992.29 4170.53 1992.29 4175.93 c
1992.29 4181.33 1996.66 4185.71 2002.06 4185.71 c
2007.46 4185.71 2011.84 4181.33 2011.84 4175.93 c
f
n
2063.16 4175.93 m
2063.16 4170.53 2058.78 4166.16 2053.38 4166.16 c
2047.98 4166.16 2043.61 4170.53 2043.61 4175.93 c
2043.61 4181.33 2047.98 4185.71 2053.38 4185.71 c
2058.78 4185.71 2063.16 4181.33 2063.16 4175.93 c
f
n
2115.29 4175.93 m
2115.29 4170.53 2110.91 4166.16 2105.52 4166.16 c
2100.12 4166.16 2095.74 4170.53 2095.74 4175.93 c
2095.74 4181.33 2100.12 4185.71 2105.52 4185.71 c
2110.91 4185.71 2115.29 4181.33 2115.29 4175.93 c
f
n
2166.61 4175.93 m
2166.61 4170.53 2162.23 4166.16 2156.84 4166.16 c
2151.44 4166.16 2147.06 4170.53 2147.06 4175.93 c
2147.06 4181.33 2151.44 4185.71 2156.84 4185.71 c
2162.23 4185.71 2166.61 4181.33 2166.61 4175.93 c
f
n
1392.75 4135.2 m
1392.75 4129.8 1388.37 4125.43 1382.97 4125.43 c
1377.57 4125.43 1373.2 4129.8 1373.2 4135.2 c
1373.2 4140.6 1377.57 4144.98 1382.97 4144.98 c
1388.37 4144.98 1392.75 4140.6 1392.75 4135.2 c
f
n
1444.07 4140.09 m
1444.07 4134.69 1439.69 4130.31 1434.29 4130.31 c
1428.89 4130.31 1424.52 4134.69 1424.52 4140.09 c
1424.52 4145.49 1428.89 4149.86 1434.29 4149.86 c
1439.69 4149.86 1444.07 4145.49 1444.07 4140.09 c
f
n
1495.39 4144.98 m
1495.39 4139.58 1491.01 4135.2 1485.61 4135.2 c
1480.21 4135.2 1475.84 4139.58 1475.84 4144.98 c
1475.84 4150.38 1480.21 4154.75 1485.61 4154.75 c
1491.01 4154.75 1495.39 4150.38 1495.39 4144.98 c
f
n
1547.52 4149.86 m
1547.52 4144.46 1543.14 4140.09 1537.75 4140.09 c
1532.35 4140.09 1527.97 4144.46 1527.97 4149.86 c
1527.97 4155.26 1532.35 4159.64 1537.75 4159.64 c
1543.14 4159.64 1547.52 4155.26 1547.52 4149.86 c
f
n
1598.84 4155.57 m
1598.84 4150.17 1594.46 4145.79 1589.07 4145.79 c
1583.67 4145.79 1579.29 4150.17 1579.29 4155.57 c
1579.29 4160.96 1583.67 4165.34 1589.07 4165.34 c
1594.46 4165.34 1598.84 4160.96 1598.84 4155.57 c
f
n
1650.16 4160.45 m
1650.16 4155.05 1645.79 4150.68 1640.39 4150.68 c
1634.99 4150.68 1630.61 4155.05 1630.61 4160.45 c
1630.61 4165.85 1634.99 4170.23 1640.39 4170.23 c
1645.79 4170.23 1650.16 4165.85 1650.16 4160.45 c
f
n
1701.48 4165.34 m
1701.48 4159.94 1697.1 4155.57 1691.7 4155.57 c
1686.3 4155.57 1681.93 4159.94 1681.93 4165.34 c
1681.93 4170.74 1686.3 4175.12 1691.7 4175.12 c
1697.1 4175.12 1701.48 4170.74 1701.48 4165.34 c
f
n
1752.8 4170.23 m
1752.8 4164.83 1748.42 4160.45 1743.02 4160.45 c
1737.62 4160.45 1733.25 4164.83 1733.25 4170.23 c
1733.25 4175.62 1737.62 4180.0 1743.02 4180.0 c
1748.42 4180.0 1752.8 4175.62 1752.8 4170.23 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1856.25 4180.82 m
1856.25 4175.42 1851.88 4171.04 1846.48 4171.04 c
1841.08 4171.04 1836.7 4175.42 1836.7 4180.82 c
1836.7 4186.21 1841.08 4190.59 1846.48 4190.59 c
1851.88 4190.59 1856.25 4186.21 1856.25 4180.82 c
f
n
1907.57 4185.71 m
1907.57 4180.31 1903.2 4175.93 1897.8 4175.93 c
1892.4 4175.93 1888.02 4180.31 1888.02 4185.71 c
1888.02 4191.11 1892.4 4195.48 1897.8 4195.48 c
1903.2 4195.48 1907.57 4191.11 1907.57 4185.71 c
f
n
1958.89 4190.59 m
1958.89 4185.2 1954.51 4180.82 1949.11 4180.82 c
1943.71 4180.82 1939.34 4185.2 1939.34 4190.59 c
1939.34 4195.99 1943.71 4200.37 1949.11 4200.37 c
1954.51 4200.37 1958.89 4195.99 1958.89 4190.59 c
f
n
2010.21 4195.48 m
2010.21 4190.08 2005.83 4185.71 2000.43 4185.71 c
1995.04 4185.71 1990.66 4190.08 1990.66 4195.48 c
1990.66 4200.88 1995.04 4205.25 2000.43 4205.25 c
2005.83 4205.25 2010.21 4200.88 2010.21 4195.48 c
f
n
2061.53 4201.18 m
2061.53 4195.79 2057.15 4191.41 2051.75 4191.41 c
2046.36 4191.41 2041.98 4195.79 2041.98 4201.18 c
2041.98 4206.58 2046.36 4210.96 2051.75 4210.96 c
2057.15 4210.96 2061.53 4206.58 2061.53 4201.18 c
f
n
2113.66 4206.07 m
2113.66 4200.67 2109.29 4196.3 2103.89 4196.3 c
2098.49 4196.3 2094.11 4200.67 2094.11 4206.07 c
2094.11 4211.47 2098.49 4215.84 2103.89 4215.84 c
2109.29 4215.84 2113.66 4211.47 2113.66 4206.07 c
f
n
2164.98 4210.96 m
2164.98 4205.56 2160.61 4201.18 2155.21 4201.18 c
2149.81 4201.18 2145.43 4205.56 2145.43 4210.96 c
2145.43 4216.36 2149.81 4220.73 2155.21 4220.73 c
2160.61 4220.73 2164.98 4216.36 2164.98 4210.96 c
f
n
1398.45 4094.47 m
1398.45 4089.07 1394.07 4084.7 1388.68 4084.7 c
1383.28 4084.7 1378.9 4089.07 1378.9 4094.47 c
1378.9 4099.87 1383.28 4104.25 1388.68 4104.25 c
1394.07 4104.25 1398.45 4099.87 1398.45 4094.47 c
f
n
1449.77 4105.06 m
1449.77 4099.66 1445.39 4095.29 1440.0 4095.29 c
1434.6 4095.29 1430.22 4099.66 1430.22 4105.06 c
1430.22 4110.46 1434.6 4114.84 1440.0 4114.84 c
1445.39 4114.84 1449.77 4110.46 1449.77 4105.06 c
f
n
1500.27 4114.84 m
1500.27 4109.44 1495.9 4105.06 1490.5 4105.06 c
1485.1 4105.06 1480.73 4109.44 1480.73 4114.84 c
1480.73 4120.23 1485.1 4124.61 1490.5 4124.61 c
1495.9 4124.61 1500.27 4120.23 1500.27 4114.84 c
f
n
1550.78 4125.43 m
1550.78 4120.03 1546.4 4115.65 1541.0 4115.65 c
1535.61 4115.65 1531.23 4120.03 1531.23 4125.43 c
1531.23 4130.82 1535.61 4135.2 1541.0 4135.2 c
1546.4 4135.2 1550.78 4130.82 1550.78 4125.43 c
f
n
1601.29 4135.2 m
1601.29 4129.8 1596.91 4125.43 1591.51 4125.43 c
1586.11 4125.43 1581.73 4129.8 1581.73 4135.2 c
1581.73 4140.6 1586.11 4144.98 1591.51 4144.98 c
1596.91 4144.98 1601.29 4140.6 1601.29 4135.2 c
f
n
1652.61 4144.98 m
1652.61 4139.58 1648.23 4135.2 1642.83 4135.2 c
1637.43 4135.2 1633.05 4139.58 1633.05 4144.98 c
1633.05 4150.38 1637.43 4154.75 1642.83 4154.75 c
1648.23 4154.75 1652.61 4150.38 1652.61 4144.98 c
f
n
1703.11 4155.57 m
1703.11 4150.17 1698.73 4145.79 1693.33 4145.79 c
1687.93 4145.79 1683.56 4150.17 1683.56 4155.57 c
1683.56 4160.96 1687.93 4165.34 1693.33 4165.34 c
1698.73 4165.34 1703.11 4160.96 1703.11 4155.57 c
f
n
1753.61 4165.34 m
1753.61 4159.94 1749.24 4155.57 1743.84 4155.57 c
1738.44 4155.57 1734.06 4159.94 1734.06 4165.34 c
1734.06 4170.74 1738.44 4175.12 1743.84 4175.12 c
1749.24 4175.12 1753.61 4170.74 1753.61 4165.34 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1855.44 4185.71 m
1855.44 4180.31 1851.06 4175.93 1845.66 4175.93 c
1840.26 4175.93 1835.89 4180.31 1835.89 4185.71 c
1835.89 4191.11 1840.26 4195.48 1845.66 4195.48 c
1851.06 4195.48 1855.44 4191.11 1855.44 4185.71 c
f
n
1905.94 4195.48 m
1905.94 4190.08 1901.57 4185.71 1896.17 4185.71 c
1890.77 4185.71 1886.39 4190.08 1886.39 4195.48 c
1886.39 4200.88 1890.77 4205.25 1896.17 4205.25 c
1901.57 4205.25 1905.94 4200.88 1905.94 4195.48 c
f
n
1956.45 4206.07 m
1956.45 4200.67 1952.07 4196.3 1946.67 4196.3 c
1941.27 4196.3 1936.89 4200.67 1936.89 4206.07 c
1936.89 4211.47 1941.27 4215.84 1946.67 4215.84 c
1952.07 4215.84 1956.45 4211.47 1956.45 4206.07 c
f
n
2007.77 4215.84 m
2007.77 4210.45 2003.39 4206.07 1997.99 4206.07 c
1992.59 4206.07 1988.21 4210.45 1988.21 4215.84 c
1988.21 4221.24 1992.59 4225.62 1997.99 4225.62 c
2003.39 4225.62 2007.77 4221.24 2007.77 4215.84 c
f
n
2058.27 4225.62 m
2058.27 4220.22 2053.89 4215.84 2048.5 4215.84 c
2043.1 4215.84 2038.72 4220.22 2038.72 4225.62 c
2038.72 4231.02 2043.1 4235.39 2048.5 4235.39 c
2053.89 4235.39 2058.27 4231.02 2058.27 4225.62 c
f
n
2108.77 4236.21 m
2108.77 4230.81 2104.4 4226.43 2099.0 4226.43 c
2093.6 4226.43 2089.23 4230.81 2089.23 4236.21 c
2089.23 4241.61 2093.6 4245.98 2099.0 4245.98 c
2104.4 4245.98 2108.77 4241.61 2108.77 4236.21 c
f
n
2159.28 4245.98 m
2159.28 4240.59 2154.9 4236.21 2149.5 4236.21 c
2144.11 4236.21 2139.73 4240.59 2139.73 4245.98 c
2139.73 4251.38 2144.11 4255.76 2149.5 4255.76 c
2154.9 4255.76 2159.28 4251.38 2159.28 4245.98 c
f
n
1408.23 4055.37 m
1408.23 4049.97 1403.85 4045.59 1398.45 4045.59 c
1393.05 4045.59 1388.68 4049.97 1388.68 4055.37 c
1388.68 4060.77 1393.05 4065.14 1398.45 4065.14 c
1403.85 4065.14 1408.23 4060.77 1408.23 4055.37 c
f
n
1457.92 4070.04 m
1457.92 4064.64 1453.54 4060.26 1448.14 4060.26 c
1442.74 4060.26 1438.37 4064.64 1438.37 4070.04 c
1438.37 4075.43 1442.74 4079.81 1448.14 4079.81 c
1453.54 4079.81 1457.92 4075.43 1457.92 4070.04 c
f
n
1507.61 4085.51 m
1507.61 4080.11 1503.23 4075.73 1497.83 4075.73 c
1492.43 4075.73 1488.05 4080.11 1488.05 4085.51 c
1488.05 4090.91 1492.43 4095.29 1497.83 4095.29 c
1503.23 4095.29 1507.61 4090.91 1507.61 4085.51 c
f
n
1557.3 4100.17 m
1557.3 4094.77 1552.92 4090.4 1547.52 4090.4 c
1542.12 4090.4 1537.75 4094.77 1537.75 4100.17 c
1537.75 4105.57 1542.12 4109.95 1547.52 4109.95 c
1552.92 4109.95 1557.3 4105.57 1557.3 4100.17 c
f
n
1606.17 4115.65 m
1606.17 4110.25 1601.8 4105.88 1596.4 4105.88 c
1591.0 4105.88 1586.62 4110.25 1586.62 4115.65 c
1586.62 4121.05 1591.0 4125.43 1596.4 4125.43 c
1601.8 4125.43 1606.17 4121.05 1606.17 4115.65 c
f
n
1655.86 4130.31 m
1655.86 4124.91 1651.48 4120.54 1646.09 4120.54 c
1640.69 4120.54 1636.31 4124.91 1636.31 4130.31 c
1636.31 4135.71 1640.69 4140.09 1646.09 4140.09 c
1651.48 4140.09 1655.86 4135.71 1655.86 4130.31 c
f
n
1705.55 4145.79 m
1705.55 4140.39 1701.18 4136.02 1695.78 4136.02 c
1690.38 4136.02 1686.0 4140.39 1686.0 4145.79 c
1686.0 4151.19 1690.38 4155.57 1695.78 4155.57 c
1701.18 4155.57 1705.55 4151.19 1705.55 4145.79 c
f
n
1755.24 4160.45 m
1755.24 4155.05 1750.87 4150.68 1745.47 4150.68 c
1740.07 4150.68 1735.69 4155.05 1735.69 4160.45 c
1735.69 4165.85 1740.07 4170.23 1745.47 4170.23 c
1750.87 4170.23 1755.24 4165.85 1755.24 4160.45 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1853.81 4190.59 m
1853.81 4185.2 1849.43 4180.82 1844.03 4180.82 c
1838.63 4180.82 1834.26 4185.2 1834.26 4190.59 c
1834.26 4195.99 1838.63 4200.37 1844.03 4200.37 c
1849.43 4200.37 1853.81 4195.99 1853.81 4190.59 c
f
n
1903.5 4205.25 m
1903.5 4199.86 1899.12 4195.48 1893.72 4195.48 c
1888.32 4195.48 1883.95 4199.86 1883.95 4205.25 c
1883.95 4210.65 1888.32 4215.03 1893.72 4215.03 c
1899.12 4215.03 1903.5 4210.65 1903.5 4205.25 c
f
n
1953.19 4220.73 m
1953.19 4215.34 1948.81 4210.96 1943.41 4210.96 c
1938.02 4210.96 1933.64 4215.34 1933.64 4220.73 c
1933.64 4226.13 1938.02 4230.51 1943.41 4230.51 c
1948.81 4230.51 1953.19 4226.13 1953.19 4220.73 c
f
n
2002.88 4235.39 m
2002.88 4230.0 1998.5 4225.62 1993.1 4225.62 c
1987.7 4225.62 1983.33 4230.0 1983.33 4235.39 c
1983.33 4240.79 1987.7 4245.17 1993.1 4245.17 c
1998.5 4245.17 2002.88 4240.79 2002.88 4235.39 c
f
n
2051.75 4250.87 m
2051.75 4245.47 2047.38 4241.1 2041.98 4241.1 c
2036.58 4241.1 2032.2 4245.47 2032.2 4250.87 c
2032.2 4256.27 2036.58 4260.65 2041.98 4260.65 c
2047.38 4260.65 2051.75 4256.27 2051.75 4250.87 c
f
n
2101.45 4265.54 m
2101.45 4260.14 2097.07 4255.76 2091.67 4255.76 c
2086.27 4255.76 2081.89 4260.14 2081.89 4265.54 c
2081.89 4270.93 2086.27 4275.31 2091.67 4275.31 c
2097.07 4275.31 2101.45 4270.93 2101.45 4265.54 c
f
n
2151.13 4281.01 m
2151.13 4275.61 2146.76 4271.24 2141.36 4271.24 c
2135.96 4271.24 2131.58 4275.61 2131.58 4281.01 c
2131.58 4286.41 2135.96 4290.79 2141.36 4290.79 c
2146.76 4290.79 2151.13 4286.41 2151.13 4281.01 c
f
n
1422.07 4017.09 m
1422.07 4011.69 1417.7 4007.31 1412.3 4007.31 c
1406.9 4007.31 1402.52 4011.69 1402.52 4017.09 c
1402.52 4022.48 1406.9 4026.86 1412.3 4026.86 c
1417.7 4026.86 1422.07 4022.48 1422.07 4017.09 c
f
n
1470.14 4036.64 m
1470.14 4031.24 1465.76 4026.86 1460.36 4026.86 c
1454.96 4026.86 1450.59 4031.24 1450.59 4036.64 c
1450.59 4042.04 1454.96 4046.41 1460.36 4046.41 c
1465.76 4046.41 1470.14 4042.04 1470.14 4036.64 c
f
n
1518.2 4057.0 m
1518.2 4051.6 1513.82 4047.23 1508.42 4047.23 c
1503.02 4047.23 1498.64 4051.6 1498.64 4057.0 c
1498.64 4062.4 1503.02 4066.77 1508.42 4066.77 c
1513.82 4066.77 1518.2 4062.4 1518.2 4057.0 c
f
n
1565.44 4076.55 m
1565.44 4071.15 1561.07 4066.77 1555.67 4066.77 c
1550.27 4066.77 1545.89 4071.15 1545.89 4076.55 c
1545.89 4081.95 1550.27 4086.32 1555.67 4086.32 c
1561.07 4086.32 1565.44 4081.95 1565.44 4076.55 c
f
n
1613.5 4096.1 m
1613.5 4090.7 1609.12 4086.32 1603.73 4086.32 c
1598.33 4086.32 1593.95 4090.7 1593.95 4096.1 c
1593.95 4101.5 1598.33 4105.88 1603.73 4105.88 c
1609.12 4105.88 1613.5 4101.5 1613.5 4096.1 c
f
n
1661.56 4116.46 m
1661.56 4111.07 1657.19 4106.69 1651.79 4106.69 c
1646.39 4106.69 1642.02 4111.07 1642.02 4116.46 c
1642.02 4121.86 1646.39 4126.24 1651.79 4126.24 c
1657.19 4126.24 1661.56 4121.86 1661.56 4116.46 c
f
n
1708.81 4136.02 m
1708.81 4130.62 1704.43 4126.24 1699.04 4126.24 c
1693.64 4126.24 1689.26 4130.62 1689.26 4136.02 c
1689.26 4141.41 1693.64 4145.79 1699.04 4145.79 c
1704.43 4145.79 1708.81 4141.41 1708.81 4136.02 c
f
n
1756.87 4155.57 m
1756.87 4150.17 1752.5 4145.79 1747.1 4145.79 c
1741.7 4145.79 1737.32 4150.17 1737.32 4155.57 c
1737.32 4160.96 1741.7 4165.34 1747.1 4165.34 c
1752.5 4165.34 1756.87 4160.96 1756.87 4155.57 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1852.18 4195.48 m
1852.18 4190.08 1847.8 4185.71 1842.4 4185.71 c
1837.0 4185.71 1832.63 4190.08 1832.63 4195.48 c
1832.63 4200.88 1837.0 4205.25 1842.4 4205.25 c
1847.8 4205.25 1852.18 4200.88 1852.18 4195.48 c
f
n
1900.24 4215.03 m
1900.24 4209.63 1895.86 4205.25 1890.46 4205.25 c
1885.07 4205.25 1880.69 4209.63 1880.69 4215.03 c
1880.69 4220.43 1885.07 4224.8 1890.46 4224.8 c
1895.86 4224.8 1900.24 4220.43 1900.24 4215.03 c
f
n
1947.48 4234.58 m
1947.48 4229.18 1943.11 4224.8 1937.71 4224.8 c
1932.31 4224.8 1927.94 4229.18 1927.94 4234.58 c
1927.94 4239.98 1932.31 4244.36 1937.71 4244.36 c
1943.11 4244.36 1947.48 4239.98 1947.48 4234.58 c
f
n
1995.55 4254.95 m
1995.55 4249.55 1991.17 4245.17 1985.77 4245.17 c
1980.38 4245.17 1976.0 4249.55 1976.0 4254.95 c
1976.0 4260.34 1980.38 4264.72 1985.77 4264.72 c
1991.17 4264.72 1995.55 4260.34 1995.55 4254.95 c
f
n
2043.61 4274.5 m
2043.61 4269.1 2039.23 4264.72 2033.83 4264.72 c
2028.43 4264.72 2024.06 4269.1 2024.06 4274.5 c
2024.06 4279.89 2028.43 4284.27 2033.83 4284.27 c
2039.23 4284.27 2043.61 4279.89 2043.61 4274.5 c
f
n
2090.86 4294.05 m
2090.86 4288.65 2086.48 4284.27 2081.08 4284.27 c
2075.68 4284.27 2071.3 4288.65 2071.3 4294.05 c
2071.3 4299.45 2075.68 4303.82 2081.08 4303.82 c
2086.48 4303.82 2090.86 4299.45 2090.86 4294.05 c
f
n
2138.91 4314.41 m
2138.91 4309.01 2134.54 4304.64 2129.14 4304.64 c
2123.74 4304.64 2119.36 4309.01 2119.36 4314.41 c
2119.36 4319.81 2123.74 4324.19 2129.14 4324.19 c
2134.54 4324.19 2138.91 4319.81 2138.91 4314.41 c
f
n
1439.18 3980.43 m
1439.18 3975.03 1434.8 3970.65 1429.41 3970.65 c
1424.01 3970.65 1419.63 3975.03 1419.63 3980.43 c
1419.63 3985.83 1424.01 3990.2 1429.41 3990.2 c
1434.8 3990.2 1439.18 3985.83 1439.18 3980.43 c
f
n
1484.8 4004.87 m
1484.8 3999.47 1480.42 3995.09 1475.02 3995.09 c
1469.62 3995.09 1465.25 3999.47 1465.25 4004.87 c
1465.25 4010.27 1469.62 4014.64 1475.02 4014.64 c
1480.42 4014.64 1484.8 4010.27 1484.8 4004.87 c
f
n
1530.41 4029.3 m
1530.41 4023.91 1526.04 4019.53 1520.64 4019.53 c
1515.24 4019.53 1510.86 4023.91 1510.86 4029.3 c
1510.86 4034.7 1515.24 4039.08 1520.64 4039.08 c
1526.04 4039.08 1530.41 4034.7 1530.41 4029.3 c
f
n
1576.03 4053.74 m
1576.03 4048.34 1571.66 4043.96 1566.26 4043.96 c
1560.86 4043.96 1556.48 4048.34 1556.48 4053.74 c
1556.48 4059.14 1560.86 4063.52 1566.26 4063.52 c
1571.66 4063.52 1576.03 4059.14 1576.03 4053.74 c
f
n
1621.65 4078.18 m
1621.65 4072.78 1617.27 4068.4 1611.88 4068.4 c
1606.48 4068.4 1602.1 4072.78 1602.1 4078.18 c
1602.1 4083.58 1606.48 4087.95 1611.88 4087.95 c
1617.27 4087.95 1621.65 4083.58 1621.65 4078.18 c
f
n
1667.27 4102.62 m
1667.27 4097.22 1662.89 4092.84 1657.49 4092.84 c
1652.09 4092.84 1647.71 4097.22 1647.71 4102.62 c
1647.71 4108.02 1652.09 4112.39 1657.49 4112.39 c
1662.89 4112.39 1667.27 4108.02 1667.27 4102.62 c
f
n
1712.88 4127.05 m
1712.88 4121.66 1708.51 4117.28 1703.11 4117.28 c
1697.71 4117.28 1693.33 4121.66 1693.33 4127.05 c
1693.33 4132.45 1697.71 4136.83 1703.11 4136.83 c
1708.51 4136.83 1712.88 4132.45 1712.88 4127.05 c
f
n
1758.5 4151.49 m
1758.5 4146.09 1754.12 4141.72 1748.73 4141.72 c
1743.33 4141.72 1738.95 4146.09 1738.95 4151.49 c
1738.95 4156.89 1743.33 4161.27 1748.73 4161.27 c
1754.12 4161.27 1758.5 4156.89 1758.5 4151.49 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1850.55 4199.55 m
1850.55 4194.16 1846.17 4189.78 1840.77 4189.78 c
1835.38 4189.78 1831.0 4194.16 1831.0 4199.55 c
1831.0 4204.95 1835.38 4209.33 1840.77 4209.33 c
1846.17 4209.33 1850.55 4204.95 1850.55 4199.55 c
f
n
1896.17 4223.99 m
1896.17 4218.59 1891.79 4214.21 1886.39 4214.21 c
1880.99 4214.21 1876.62 4218.59 1876.62 4223.99 c
1876.62 4229.39 1880.99 4233.77 1886.39 4233.77 c
1891.79 4233.77 1896.17 4229.39 1896.17 4223.99 c
f
n
1941.79 4248.43 m
1941.79 4243.03 1937.41 4238.65 1932.01 4238.65 c
1926.61 4238.65 1922.23 4243.03 1922.23 4248.43 c
1922.23 4253.83 1926.61 4258.2 1932.01 4258.2 c
1937.41 4258.2 1941.79 4253.83 1941.79 4248.43 c
f
n
1987.4 4272.87 m
1987.4 4267.47 1983.02 4263.09 1977.62 4263.09 c
1972.23 4263.09 1967.85 4267.47 1967.85 4272.87 c
1967.85 4278.27 1972.23 4282.64 1977.62 4282.64 c
1983.02 4282.64 1987.4 4278.27 1987.4 4272.87 c
f
n
2033.02 4297.3 m
2033.02 4291.91 2028.64 4287.53 2023.24 4287.53 c
2017.84 4287.53 2013.47 4291.91 2013.47 4297.3 c
2013.47 4302.7 2017.84 4307.08 2023.24 4307.08 c
2028.64 4307.08 2033.02 4302.7 2033.02 4297.3 c
f
n
2078.64 4321.74 m
2078.64 4316.34 2074.26 4311.97 2068.86 4311.97 c
2063.46 4311.97 2059.09 4316.34 2059.09 4321.74 c
2059.09 4327.14 2063.46 4331.52 2068.86 4331.52 c
2074.26 4331.52 2078.64 4327.14 2078.64 4321.74 c
f
n
2124.25 4346.18 m
2124.25 4340.78 2119.88 4336.41 2114.48 4336.41 c
2109.08 4336.41 2104.7 4340.78 2104.7 4346.18 c
2104.7 4351.58 2109.08 4355.95 2114.48 4355.95 c
2119.88 4355.95 2124.25 4351.58 2124.25 4346.18 c
f
n
1460.36 3945.4 m
1460.36 3940.0 1455.98 3935.62 1450.59 3935.62 c
1445.19 3935.62 1440.81 3940.0 1440.81 3945.4 c
1440.81 3950.8 1445.19 3955.18 1450.59 3955.18 c
1455.98 3955.18 1460.36 3950.8 1460.36 3945.4 c
f
n
1503.54 3974.73 m
1503.54 3969.33 1499.16 3964.95 1493.76 3964.95 c
1488.36 3964.95 1483.98 3969.33 1483.98 3974.73 c
1483.98 3980.12 1488.36 3984.5 1493.76 3984.5 c
1499.16 3984.5 1503.54 3980.12 1503.54 3974.73 c
f
n
1546.71 4003.24 m
1546.71 3997.84 1542.33 3993.46 1536.93 3993.46 c
1531.54 3993.46 1527.16 3997.84 1527.16 4003.24 c
1527.16 4008.64 1531.54 4013.01 1536.93 4013.01 c
1542.33 4013.01 1546.71 4008.64 1546.71 4003.24 c
f
n
1589.88 4031.75 m
1589.88 4026.35 1585.5 4021.97 1580.11 4021.97 c
1574.71 4021.97 1570.33 4026.35 1570.33 4031.75 c
1570.33 4037.14 1574.71 4041.52 1580.11 4041.52 c
1585.5 4041.52 1589.88 4037.14 1589.88 4031.75 c
f
n
1632.24 4060.26 m
1632.24 4054.86 1627.86 4050.48 1622.46 4050.48 c
1617.07 4050.48 1612.69 4054.86 1612.69 4060.26 c
1612.69 4065.66 1617.07 4070.04 1622.46 4070.04 c
1627.86 4070.04 1632.24 4065.66 1632.24 4060.26 c
f
n
1675.41 4089.58 m
1675.41 4084.18 1671.04 4079.81 1665.64 4079.81 c
1660.24 4079.81 1655.86 4084.18 1655.86 4089.58 c
1655.86 4094.98 1660.24 4099.36 1665.64 4099.36 c
1671.04 4099.36 1675.41 4094.98 1675.41 4089.58 c
f
n
1718.59 4118.09 m
1718.59 4112.7 1714.21 4108.32 1708.81 4108.32 c
1703.41 4108.32 1699.04 4112.7 1699.04 4118.09 c
1699.04 4123.49 1703.41 4127.87 1708.81 4127.87 c
1714.21 4127.87 1718.59 4123.49 1718.59 4118.09 c
f
n
1761.76 4146.61 m
1761.76 4141.21 1757.38 4136.83 1751.98 4136.83 c
1746.59 4136.83 1742.21 4141.21 1742.21 4146.61 c
1742.21 4152.0 1746.59 4156.38 1751.98 4156.38 c
1757.38 4156.38 1761.76 4152.0 1761.76 4146.61 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1847.29 4204.44 m
1847.29 4199.04 1842.91 4194.66 1837.52 4194.66 c
1832.12 4194.66 1827.74 4199.04 1827.74 4204.44 c
1827.74 4209.84 1832.12 4214.21 1837.52 4214.21 c
1842.91 4214.21 1847.29 4209.84 1847.29 4204.44 c
f
n
1890.46 4232.95 m
1890.46 4227.55 1886.09 4223.18 1880.69 4223.18 c
1875.29 4223.18 1870.91 4227.55 1870.91 4232.95 c
1870.91 4238.35 1875.29 4242.73 1880.69 4242.73 c
1886.09 4242.73 1890.46 4238.35 1890.46 4232.95 c
f
n
1933.64 4261.46 m
1933.64 4256.06 1929.26 4251.69 1923.86 4251.69 c
1918.46 4251.69 1914.09 4256.06 1914.09 4261.46 c
1914.09 4266.86 1918.46 4271.24 1923.86 4271.24 c
1929.26 4271.24 1933.64 4266.86 1933.64 4261.46 c
f
n
1976.81 4290.79 m
1976.81 4285.39 1972.43 4281.01 1967.04 4281.01 c
1961.64 4281.01 1957.26 4285.39 1957.26 4290.79 c
1957.26 4296.19 1961.64 4300.56 1967.04 4300.56 c
1972.43 4300.56 1976.81 4296.19 1976.81 4290.79 c
f
n
2019.17 4319.3 m
2019.17 4313.9 2014.79 4309.52 2009.39 4309.52 c
2004.0 4309.52 1999.62 4313.9 1999.62 4319.3 c
1999.62 4324.7 2004.0 4329.07 2009.39 4329.07 c
2014.79 4329.07 2019.17 4324.7 2019.17 4319.3 c
f
n
2062.34 4347.81 m
2062.34 4342.41 2057.96 4338.04 2052.57 4338.04 c
2047.17 4338.04 2042.79 4342.41 2042.79 4347.81 c
2042.79 4353.21 2047.17 4357.59 2052.57 4357.59 c
2057.96 4357.59 2062.34 4353.21 2062.34 4347.81 c
f
n
2105.52 4376.32 m
2105.52 4370.92 2101.14 4366.54 2095.74 4366.54 c
2090.34 4366.54 2085.96 4370.92 2085.96 4376.32 c
2085.96 4381.72 2090.34 4386.09 2095.74 4386.09 c
2101.14 4386.09 2105.52 4381.72 2105.52 4376.32 c
f
n
1484.8 3912.82 m
1484.8 3907.42 1480.42 3903.04 1475.02 3903.04 c
1469.62 3903.04 1465.25 3907.42 1465.25 3912.82 c
1465.25 3918.21 1469.62 3922.59 1475.02 3922.59 c
1480.42 3922.59 1484.8 3918.21 1484.8 3912.82 c
f
n
1524.71 3946.21 m
1524.71 3940.82 1520.34 3936.44 1514.94 3936.44 c
1509.54 3936.44 1505.16 3940.82 1505.16 3946.21 c
1505.16 3951.61 1509.54 3955.99 1514.94 3955.99 c
1520.34 3955.99 1524.71 3951.61 1524.71 3946.21 c
f
n
1564.63 3978.8 m
1564.63 3973.4 1560.25 3969.02 1554.85 3969.02 c
1549.45 3969.02 1545.08 3973.4 1545.08 3978.8 c
1545.08 3984.2 1549.45 3988.57 1554.85 3988.57 c
1560.25 3988.57 1564.63 3984.2 1564.63 3978.8 c
f
n
1604.54 4011.38 m
1604.54 4005.98 1600.17 4001.61 1594.77 4001.61 c
1589.37 4001.61 1584.99 4005.98 1584.99 4011.38 c
1584.99 4016.78 1589.37 4021.16 1594.77 4021.16 c
1600.17 4021.16 1604.54 4016.78 1604.54 4011.38 c
f
n
1644.46 4043.96 m
1644.46 4038.57 1640.08 4034.19 1634.68 4034.19 c
1629.29 4034.19 1624.91 4038.57 1624.91 4043.96 c
1624.91 4049.36 1629.29 4053.74 1634.68 4053.74 c
1640.08 4053.74 1644.46 4049.36 1644.46 4043.96 c
f
n
1684.37 4077.36 m
1684.37 4071.96 1680.0 4067.59 1674.6 4067.59 c
1669.2 4067.59 1664.82 4071.96 1664.82 4077.36 c
1664.82 4082.76 1669.2 4087.14 1674.6 4087.14 c
1680.0 4087.14 1684.37 4082.76 1684.37 4077.36 c
f
n
1724.29 4109.95 m
1724.29 4104.55 1719.91 4100.17 1714.51 4100.17 c
1709.11 4100.17 1704.74 4104.55 1704.74 4109.95 c
1704.74 4115.35 1709.11 4119.72 1714.51 4119.72 c
1719.91 4119.72 1724.29 4115.35 1724.29 4109.95 c
f
n
1764.2 4142.53 m
1764.2 4137.13 1759.82 4132.76 1754.43 4132.76 c
1749.03 4132.76 1744.65 4137.13 1744.65 4142.53 c
1744.65 4147.93 1749.03 4152.31 1754.43 4152.31 c
1759.82 4152.31 1764.2 4147.93 1764.2 4142.53 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1844.85 4208.52 m
1844.85 4203.12 1840.47 4198.74 1835.07 4198.74 c
1829.68 4198.74 1825.3 4203.12 1825.3 4208.52 c
1825.3 4213.91 1829.68 4218.29 1835.07 4218.29 c
1840.47 4218.29 1844.85 4213.91 1844.85 4208.52 c
f
n
1884.76 4241.1 m
1884.76 4235.7 1880.39 4231.32 1874.99 4231.32 c
1869.59 4231.32 1865.21 4235.7 1865.21 4241.1 c
1865.21 4246.5 1869.59 4250.87 1874.99 4250.87 c
1880.39 4250.87 1884.76 4246.5 1884.76 4241.1 c
f
n
1924.68 4273.68 m
1924.68 4268.28 1920.3 4263.91 1914.9 4263.91 c
1909.5 4263.91 1905.13 4268.28 1905.13 4273.68 c
1905.13 4279.08 1909.5 4283.46 1914.9 4283.46 c
1920.3 4283.46 1924.68 4279.08 1924.68 4273.68 c
f
n
1964.59 4307.08 m
1964.59 4301.68 1960.21 4297.3 1954.82 4297.3 c
1949.42 4297.3 1945.04 4301.68 1945.04 4307.08 c
1945.04 4312.48 1949.42 4316.86 1954.82 4316.86 c
1960.21 4316.86 1964.59 4312.48 1964.59 4307.08 c
f
n
2004.51 4339.66 m
2004.51 4334.27 2000.13 4329.89 1994.73 4329.89 c
1989.33 4329.89 1984.96 4334.27 1984.96 4339.66 c
1984.96 4345.06 1989.33 4349.44 1994.73 4349.44 c
2000.13 4349.44 2004.51 4345.06 2004.51 4339.66 c
f
n
2044.42 4372.25 m
2044.42 4366.85 2040.05 4362.47 2034.65 4362.47 c
2029.25 4362.47 2024.87 4366.85 2024.87 4372.25 c
2024.87 4377.64 2029.25 4382.02 2034.65 4382.02 c
2040.05 4382.02 2044.42 4377.64 2044.42 4372.25 c
f
n
2084.34 4404.83 m
2084.34 4399.43 2079.96 4395.05 2074.56 4395.05 c
2069.16 4395.05 2064.79 4399.43 2064.79 4404.83 c
2064.79 4410.23 2069.16 4414.61 2074.56 4414.61 c
2079.96 4414.61 2084.34 4410.23 2084.34 4404.83 c
f
n
1511.68 3882.68 m
1511.68 3877.28 1507.3 3872.9 1501.91 3872.9 c
1496.51 3872.9 1492.13 3877.28 1492.13 3882.68 c
1492.13 3888.07 1496.51 3892.45 1501.91 3892.45 c
1507.3 3892.45 1511.68 3888.07 1511.68 3882.68 c
f
n
1548.34 3919.33 m
1548.34 3913.93 1543.96 3909.56 1538.56 3909.56 c
1533.16 3909.56 1528.79 3913.93 1528.79 3919.33 c
1528.79 3924.73 1533.16 3929.11 1538.56 3929.11 c
1543.96 3929.11 1548.34 3924.73 1548.34 3919.33 c
f
n
1584.99 3955.99 m
1584.99 3950.59 1580.62 3946.21 1575.22 3946.21 c
1569.82 3946.21 1565.44 3950.59 1565.44 3955.99 c
1565.44 3961.39 1569.82 3965.77 1575.22 3965.77 c
1580.62 3965.77 1584.99 3961.39 1584.99 3955.99 c
f
n
1621.65 3992.65 m
1621.65 3987.25 1617.27 3982.87 1611.88 3982.87 c
1606.48 3982.87 1602.1 3987.25 1602.1 3992.65 c
1602.1 3998.05 1606.48 4002.42 1611.88 4002.42 c
1617.27 4002.42 1621.65 3998.05 1621.65 3992.65 c
f
n
1658.3 4029.3 m
1658.3 4023.91 1653.93 4019.53 1648.53 4019.53 c
1643.13 4019.53 1638.75 4023.91 1638.75 4029.3 c
1638.75 4034.7 1643.13 4039.08 1648.53 4039.08 c
1653.93 4039.08 1658.3 4034.7 1658.3 4029.3 c
f
n
1694.96 4065.96 m
1694.96 4060.56 1690.59 4056.18 1685.19 4056.18 c
1679.79 4056.18 1675.41 4060.56 1675.41 4065.96 c
1675.41 4071.36 1679.79 4075.73 1685.19 4075.73 c
1690.59 4075.73 1694.96 4071.36 1694.96 4065.96 c
f
n
1731.62 4102.62 m
1731.62 4097.22 1727.24 4092.84 1721.84 4092.84 c
1716.45 4092.84 1712.07 4097.22 1712.07 4102.62 c
1712.07 4108.02 1716.45 4112.39 1721.84 4112.39 c
1727.24 4112.39 1731.62 4108.02 1731.62 4102.62 c
f
n
1768.28 4139.27 m
1768.28 4133.88 1763.9 4129.5 1758.5 4129.5 c
1753.1 4129.5 1748.73 4133.88 1748.73 4139.27 c
1748.73 4144.67 1753.1 4149.05 1758.5 4149.05 c
1763.9 4149.05 1768.28 4144.67 1768.28 4139.27 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1840.77 4211.77 m
1840.77 4206.38 1836.4 4202.0 1831.0 4202.0 c
1825.6 4202.0 1821.22 4206.38 1821.22 4211.77 c
1821.22 4217.17 1825.6 4221.55 1831.0 4221.55 c
1836.4 4221.55 1840.77 4217.17 1840.77 4211.77 c
f
n
1877.43 4248.43 m
1877.43 4243.03 1873.05 4238.65 1867.66 4238.65 c
1862.26 4238.65 1857.88 4243.03 1857.88 4248.43 c
1857.88 4253.83 1862.26 4258.2 1867.66 4258.2 c
1873.05 4258.2 1877.43 4253.83 1877.43 4248.43 c
f
n
1914.09 4285.09 m
1914.09 4279.69 1909.71 4275.31 1904.31 4275.31 c
1898.91 4275.31 1894.54 4279.69 1894.54 4285.09 c
1894.54 4290.48 1898.91 4294.86 1904.31 4294.86 c
1909.71 4294.86 1914.09 4290.48 1914.09 4285.09 c
f
n
1950.75 4321.74 m
1950.75 4316.34 1946.37 4311.97 1940.97 4311.97 c
1935.57 4311.97 1931.2 4316.34 1931.2 4321.74 c
1931.2 4327.14 1935.57 4331.52 1940.97 4331.52 c
1946.37 4331.52 1950.75 4327.14 1950.75 4321.74 c
f
n
1987.4 4358.4 m
1987.4 4353.0 1983.02 4348.62 1977.62 4348.62 c
1972.23 4348.62 1967.85 4353.0 1967.85 4358.4 c
1967.85 4363.8 1972.23 4368.17 1977.62 4368.17 c
1983.02 4368.17 1987.4 4363.8 1987.4 4358.4 c
f
n
2024.06 4395.05 m
2024.06 4389.66 2019.68 4385.28 2014.28 4385.28 c
2008.88 4385.28 2004.51 4389.66 2004.51 4395.05 c
2004.51 4400.45 2008.88 4404.83 2014.28 4404.83 c
2019.68 4404.83 2024.06 4400.45 2024.06 4395.05 c
f
n
2060.71 4431.71 m
2060.71 4426.31 2056.34 4421.94 2050.94 4421.94 c
2045.54 4421.94 2041.16 4426.31 2041.16 4431.71 c
2041.16 4437.11 2045.54 4441.49 2050.94 4441.49 c
2056.34 4441.49 2060.71 4437.11 2060.71 4431.71 c
f
n
1541.82 3855.8 m
1541.82 3850.4 1537.44 3846.02 1532.04 3846.02 c
1526.64 3846.02 1522.27 3850.4 1522.27 3855.8 c
1522.27 3861.2 1526.64 3865.57 1532.04 3865.57 c
1537.44 3865.57 1541.82 3861.2 1541.82 3855.8 c
f
n
1575.22 3895.71 m
1575.22 3890.31 1570.84 3885.94 1565.44 3885.94 c
1560.04 3885.94 1555.67 3890.31 1555.67 3895.71 c
1555.67 3901.11 1560.04 3905.48 1565.44 3905.48 c
1570.84 3905.48 1575.22 3901.11 1575.22 3895.71 c
f
n
1607.8 3935.62 m
1607.8 3930.23 1603.43 3925.85 1598.03 3925.85 c
1592.63 3925.85 1588.25 3930.23 1588.25 3935.62 c
1588.25 3941.02 1592.63 3945.4 1598.03 3945.4 c
1603.43 3945.4 1607.8 3941.02 1607.8 3935.62 c
f
n
1640.39 3975.54 m
1640.39 3970.14 1636.01 3965.77 1630.61 3965.77 c
1625.21 3965.77 1620.84 3970.14 1620.84 3975.54 c
1620.84 3980.94 1625.21 3985.32 1630.61 3985.32 c
1636.01 3985.32 1640.39 3980.94 1640.39 3975.54 c
f
n
1672.97 4015.46 m
1672.97 4010.06 1668.59 4005.68 1663.2 4005.68 c
1657.8 4005.68 1653.42 4010.06 1653.42 4015.46 c
1653.42 4020.86 1657.8 4025.23 1663.2 4025.23 c
1668.59 4025.23 1672.97 4020.86 1672.97 4015.46 c
f
n
1706.37 4055.37 m
1706.37 4049.97 1701.99 4045.59 1696.59 4045.59 c
1691.19 4045.59 1686.82 4049.97 1686.82 4055.37 c
1686.82 4060.77 1691.19 4065.14 1696.59 4065.14 c
1701.99 4065.14 1706.37 4060.77 1706.37 4055.37 c
f
n
1738.95 4095.29 m
1738.95 4089.89 1734.57 4085.51 1729.18 4085.51 c
1723.78 4085.51 1719.4 4089.89 1719.4 4095.29 c
1719.4 4100.68 1723.78 4105.06 1729.18 4105.06 c
1734.57 4105.06 1738.95 4100.68 1738.95 4095.29 c
f
n
1771.54 4135.2 m
1771.54 4129.8 1767.16 4125.43 1761.76 4125.43 c
1756.36 4125.43 1751.98 4129.8 1751.98 4135.2 c
1751.98 4140.6 1756.36 4144.98 1761.76 4144.98 c
1767.16 4144.98 1771.54 4140.6 1771.54 4135.2 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1837.52 4215.84 m
1837.52 4210.45 1833.14 4206.07 1827.74 4206.07 c
1822.34 4206.07 1817.96 4210.45 1817.96 4215.84 c
1817.96 4221.24 1822.34 4225.62 1827.74 4225.62 c
1833.14 4225.62 1837.52 4221.24 1837.52 4215.84 c
f
n
1870.1 4255.76 m
1870.1 4250.36 1865.72 4245.98 1860.32 4245.98 c
1854.93 4245.98 1850.55 4250.36 1850.55 4255.76 c
1850.55 4261.16 1854.93 4265.54 1860.32 4265.54 c
1865.72 4265.54 1870.1 4261.16 1870.1 4255.76 c
f
n
1902.68 4295.68 m
1902.68 4290.28 1898.31 4285.9 1892.91 4285.9 c
1887.51 4285.9 1883.13 4290.28 1883.13 4295.68 c
1883.13 4301.07 1887.51 4305.45 1892.91 4305.45 c
1898.31 4305.45 1902.68 4301.07 1902.68 4295.68 c
f
n
1936.08 4335.59 m
1936.08 4330.19 1931.7 4325.82 1926.3 4325.82 c
1920.91 4325.82 1916.53 4330.19 1916.53 4335.59 c
1916.53 4340.99 1920.91 4345.36 1926.3 4345.36 c
1931.7 4345.36 1936.08 4340.99 1936.08 4335.59 c
f
n
1968.66 4375.5 m
1968.66 4370.11 1964.29 4365.73 1958.89 4365.73 c
1953.49 4365.73 1949.11 4370.11 1949.11 4375.5 c
1949.11 4380.9 1953.49 4385.28 1958.89 4385.28 c
1964.29 4385.28 1968.66 4380.9 1968.66 4375.5 c
f
n
2001.25 4415.42 m
2001.25 4410.02 1996.87 4405.64 1991.47 4405.64 c
1986.07 4405.64 1981.7 4410.02 1981.7 4415.42 c
1981.7 4420.82 1986.07 4425.2 1991.47 4425.2 c
1996.87 4425.2 2001.25 4420.82 2001.25 4415.42 c
f
n
2033.83 4455.34 m
2033.83 4449.94 2029.46 4445.56 2024.06 4445.56 c
2018.66 4445.56 2014.28 4449.94 2014.28 4455.34 c
2014.28 4460.73 2018.66 4465.11 2024.06 4465.11 c
2029.46 4465.11 2033.83 4460.73 2033.83 4455.34 c
f
n
1574.4 3831.36 m
1574.4 3825.96 1570.03 3821.58 1564.63 3821.58 c
1559.23 3821.58 1554.85 3825.96 1554.85 3831.36 c
1554.85 3836.76 1559.23 3841.13 1564.63 3841.13 c
1570.03 3841.13 1574.4 3836.76 1574.4 3831.36 c
f
n
1603.73 3874.53 m
1603.73 3869.13 1599.35 3864.76 1593.95 3864.76 c
1588.55 3864.76 1584.18 3869.13 1584.18 3874.53 c
1584.18 3879.93 1588.55 3884.3 1593.95 3884.3 c
1599.35 3884.3 1603.73 3879.93 1603.73 3874.53 c
f
n
1632.24 3917.7 m
1632.24 3912.3 1627.86 3907.93 1622.46 3907.93 c
1617.07 3907.93 1612.69 3912.3 1612.69 3917.7 c
1612.69 3923.1 1617.07 3927.48 1622.46 3927.48 c
1627.86 3927.48 1632.24 3923.1 1632.24 3917.7 c
f
n
1660.75 3960.88 m
1660.75 3955.48 1656.37 3951.1 1650.97 3951.1 c
1645.57 3951.1 1641.2 3955.48 1641.2 3960.88 c
1641.2 3966.28 1645.57 3970.65 1650.97 3970.65 c
1656.37 3970.65 1660.75 3966.28 1660.75 3960.88 c
f
n
1689.26 4003.24 m
1689.26 3997.84 1684.88 3993.46 1679.48 3993.46 c
1674.09 3993.46 1669.71 3997.84 1669.71 4003.24 c
1669.71 4008.64 1674.09 4013.01 1679.48 4013.01 c
1684.88 4013.01 1689.26 4008.64 1689.26 4003.24 c
f
n
1718.59 4046.41 m
1718.59 4041.01 1714.21 4036.64 1708.81 4036.64 c
1703.41 4036.64 1699.04 4041.01 1699.04 4046.41 c
1699.04 4051.81 1703.41 4056.18 1708.81 4056.18 c
1714.21 4056.18 1718.59 4051.81 1718.59 4046.41 c
f
n
1747.1 4089.58 m
1747.1 4084.18 1742.72 4079.81 1737.32 4079.81 c
1731.92 4079.81 1727.55 4084.18 1727.55 4089.58 c
1727.55 4094.98 1731.92 4099.36 1737.32 4099.36 c
1742.72 4099.36 1747.1 4094.98 1747.1 4089.58 c
f
n
1775.61 4132.76 m
1775.61 4127.36 1771.23 4122.98 1765.83 4122.98 c
1760.43 4122.98 1756.06 4127.36 1756.06 4132.76 c
1756.06 4138.16 1760.43 4142.53 1765.83 4142.53 c
1771.23 4142.53 1775.61 4138.16 1775.61 4132.76 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1833.44 4218.29 m
1833.44 4212.89 1829.07 4208.52 1823.67 4208.52 c
1818.27 4208.52 1813.89 4212.89 1813.89 4218.29 c
1813.89 4223.69 1818.27 4228.06 1823.67 4228.06 c
1829.07 4228.06 1833.44 4223.69 1833.44 4218.29 c
f
n
1861.95 4261.46 m
1861.95 4256.06 1857.58 4251.69 1852.18 4251.69 c
1846.78 4251.69 1842.4 4256.06 1842.4 4261.46 c
1842.4 4266.86 1846.78 4271.24 1852.18 4271.24 c
1857.58 4271.24 1861.95 4266.86 1861.95 4261.46 c
f
n
1890.46 4304.64 m
1890.46 4299.24 1886.09 4294.86 1880.69 4294.86 c
1875.29 4294.86 1870.91 4299.24 1870.91 4304.64 c
1870.91 4310.04 1875.29 4314.41 1880.69 4314.41 c
1886.09 4314.41 1890.46 4310.04 1890.46 4304.64 c
f
n
1919.79 4347.81 m
1919.79 4342.41 1915.41 4338.04 1910.02 4338.04 c
1904.62 4338.04 1900.24 4342.41 1900.24 4347.81 c
1900.24 4353.21 1904.62 4357.59 1910.02 4357.59 c
1915.41 4357.59 1919.79 4353.21 1919.79 4347.81 c
f
n
1948.3 4390.17 m
1948.3 4384.77 1943.93 4380.39 1938.53 4380.39 c
1933.13 4380.39 1928.75 4384.77 1928.75 4390.17 c
1928.75 4395.57 1933.13 4399.94 1938.53 4399.94 c
1943.93 4399.94 1948.3 4395.57 1948.3 4390.17 c
f
n
1976.81 4433.34 m
1976.81 4427.94 1972.43 4423.57 1967.04 4423.57 c
1961.64 4423.57 1957.26 4427.94 1957.26 4433.34 c
1957.26 4438.74 1961.64 4443.12 1967.04 4443.12 c
1972.43 4443.12 1976.81 4438.74 1976.81 4433.34 c
f
n
2005.32 4476.52 m
2005.32 4471.12 2000.95 4466.74 1995.55 4466.74 c
1990.15 4466.74 1985.77 4471.12 1985.77 4476.52 c
1985.77 4481.91 1990.15 4486.29 1995.55 4486.29 c
2000.95 4486.29 2005.32 4481.91 2005.32 4476.52 c
f
n
1609.43 3810.18 m
1609.43 3804.78 1605.05 3800.4 1599.66 3800.4 c
1594.26 3800.4 1589.88 3804.78 1589.88 3810.18 c
1589.88 3815.58 1594.26 3819.95 1599.66 3819.95 c
1605.05 3819.95 1609.43 3815.58 1609.43 3810.18 c
f
n
1633.87 3855.8 m
1633.87 3850.4 1629.49 3846.02 1624.09 3846.02 c
1618.7 3846.02 1614.32 3850.4 1614.32 3855.8 c
1614.32 3861.2 1618.7 3865.57 1624.09 3865.57 c
1629.49 3865.57 1633.87 3861.2 1633.87 3855.8 c
f
n
1658.3 3901.41 m
1658.3 3896.02 1653.93 3891.64 1648.53 3891.64 c
1643.13 3891.64 1638.75 3896.02 1638.75 3901.41 c
1638.75 3906.81 1643.13 3911.19 1648.53 3911.19 c
1653.93 3911.19 1658.3 3906.81 1658.3 3901.41 c
f
n
1682.74 3947.03 m
1682.74 3941.63 1678.37 3937.25 1672.97 3937.25 c
1667.57 3937.25 1663.2 3941.63 1663.2 3947.03 c
1663.2 3952.43 1667.57 3956.8 1672.97 3956.8 c
1678.37 3956.8 1682.74 3952.43 1682.74 3947.03 c
f
n
1707.18 3992.65 m
1707.18 3987.25 1702.8 3982.87 1697.41 3982.87 c
1692.01 3982.87 1687.63 3987.25 1687.63 3992.65 c
1687.63 3998.05 1692.01 4002.42 1697.41 4002.42 c
1702.8 4002.42 1707.18 3998.05 1707.18 3992.65 c
f
n
1731.62 4038.27 m
1731.62 4032.87 1727.24 4028.49 1721.84 4028.49 c
1716.45 4028.49 1712.07 4032.87 1712.07 4038.27 c
1712.07 4043.66 1716.45 4048.04 1721.84 4048.04 c
1727.24 4048.04 1731.62 4043.66 1731.62 4038.27 c
f
n
1756.06 4083.88 m
1756.06 4078.48 1751.68 4074.11 1746.28 4074.11 c
1740.88 4074.11 1736.51 4078.48 1736.51 4083.88 c
1736.51 4089.28 1740.88 4093.66 1746.28 4093.66 c
1751.68 4093.66 1756.06 4089.28 1756.06 4083.88 c
f
n
1780.5 4129.5 m
1780.5 4124.1 1776.12 4119.72 1770.72 4119.72 c
1765.32 4119.72 1760.95 4124.1 1760.95 4129.5 c
1760.95 4134.9 1765.32 4139.27 1770.72 4139.27 c
1776.12 4139.27 1780.5 4134.9 1780.5 4129.5 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1828.55 4221.55 m
1828.55 4216.15 1824.18 4211.77 1818.78 4211.77 c
1813.38 4211.77 1809.0 4216.15 1809.0 4221.55 c
1809.0 4226.95 1813.38 4231.32 1818.78 4231.32 c
1824.18 4231.32 1828.55 4226.95 1828.55 4221.55 c
f
n
1852.99 4267.16 m
1852.99 4261.77 1848.62 4257.39 1843.22 4257.39 c
1837.82 4257.39 1833.44 4261.77 1833.44 4267.16 c
1833.44 4272.56 1837.82 4276.94 1843.22 4276.94 c
1848.62 4276.94 1852.99 4272.56 1852.99 4267.16 c
f
n
1877.43 4312.78 m
1877.43 4307.38 1873.05 4303.01 1867.66 4303.01 c
1862.26 4303.01 1857.88 4307.38 1857.88 4312.78 c
1857.88 4318.18 1862.26 4322.56 1867.66 4322.56 c
1873.05 4322.56 1877.43 4318.18 1877.43 4312.78 c
f
n
1901.87 4358.4 m
1901.87 4353.0 1897.49 4348.62 1892.09 4348.62 c
1886.7 4348.62 1882.32 4353.0 1882.32 4358.4 c
1882.32 4363.8 1886.7 4368.17 1892.09 4368.17 c
1897.49 4368.17 1901.87 4363.8 1901.87 4358.4 c
f
n
1926.3 4404.02 m
1926.3 4398.62 1921.93 4394.24 1916.53 4394.24 c
1911.13 4394.24 1906.76 4398.62 1906.76 4404.02 c
1906.76 4409.41 1911.13 4413.79 1916.53 4413.79 c
1921.93 4413.79 1926.3 4409.41 1926.3 4404.02 c
f
n
1950.75 4449.63 m
1950.75 4444.23 1946.37 4439.86 1940.97 4439.86 c
1935.57 4439.86 1931.2 4444.23 1931.2 4449.63 c
1931.2 4455.03 1935.57 4459.41 1940.97 4459.41 c
1946.37 4459.41 1950.75 4455.03 1950.75 4449.63 c
f
n
1975.18 4495.25 m
1975.18 4489.85 1970.8 4485.48 1965.41 4485.48 c
1960.01 4485.48 1955.63 4489.85 1955.63 4495.25 c
1955.63 4500.65 1960.01 4505.02 1965.41 4505.02 c
1970.8 4505.02 1975.18 4500.65 1975.18 4495.25 c
f
n
1646.09 3793.07 m
1646.09 3787.67 1641.71 3783.3 1636.31 3783.3 c
1630.91 3783.3 1626.54 3787.67 1626.54 3793.07 c
1626.54 3798.47 1630.91 3802.85 1636.31 3802.85 c
1641.71 3802.85 1646.09 3798.47 1646.09 3793.07 c
f
n
1665.64 3841.13 m
1665.64 3835.73 1661.26 3831.36 1655.86 3831.36 c
1650.46 3831.36 1646.09 3835.73 1646.09 3841.13 c
1646.09 3846.53 1650.46 3850.91 1655.86 3850.91 c
1661.26 3850.91 1665.64 3846.53 1665.64 3841.13 c
f
n
1686.0 3889.2 m
1686.0 3883.8 1681.62 3879.42 1676.23 3879.42 c
1670.83 3879.42 1666.45 3883.8 1666.45 3889.2 c
1666.45 3894.59 1670.83 3898.97 1676.23 3898.97 c
1681.62 3898.97 1686.0 3894.59 1686.0 3889.2 c
f
n
1705.55 3936.44 m
1705.55 3931.04 1701.18 3926.66 1695.78 3926.66 c
1690.38 3926.66 1686.0 3931.04 1686.0 3936.44 c
1686.0 3941.84 1690.38 3946.21 1695.78 3946.21 c
1701.18 3946.21 1705.55 3941.84 1705.55 3936.44 c
f
n
1725.1 3984.5 m
1725.1 3979.1 1720.73 3974.73 1715.33 3974.73 c
1709.93 3974.73 1705.55 3979.1 1705.55 3984.5 c
1705.55 3989.9 1709.93 3994.28 1715.33 3994.28 c
1720.73 3994.28 1725.1 3989.9 1725.1 3984.5 c
f
n
1745.47 4032.56 m
1745.47 4027.16 1741.09 4022.79 1735.69 4022.79 c
1730.29 4022.79 1725.92 4027.16 1725.92 4032.56 c
1725.92 4037.96 1730.29 4042.34 1735.69 4042.34 c
1741.09 4042.34 1745.47 4037.96 1745.47 4032.56 c
f
n
1765.02 4079.81 m
1765.02 4074.41 1760.64 4070.04 1755.24 4070.04 c
1749.84 4070.04 1745.47 4074.41 1745.47 4079.81 c
1745.47 4085.21 1749.84 4089.58 1755.24 4089.58 c
1760.64 4089.58 1765.02 4085.21 1765.02 4079.81 c
f
n
1784.57 4127.87 m
1784.57 4122.47 1780.19 4118.09 1774.79 4118.09 c
1769.39 4118.09 1765.02 4122.47 1765.02 4127.87 c
1765.02 4133.27 1769.39 4137.64 1774.79 4137.64 c
1780.19 4137.64 1784.57 4133.27 1784.57 4127.87 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1824.48 4223.18 m
1824.48 4217.78 1820.11 4213.4 1814.71 4213.4 c
1809.31 4213.4 1804.93 4217.78 1804.93 4223.18 c
1804.93 4228.57 1809.31 4232.95 1814.71 4232.95 c
1820.11 4232.95 1824.48 4228.57 1824.48 4223.18 c
f
n
1844.03 4271.24 m
1844.03 4265.84 1839.66 4261.46 1834.26 4261.46 c
1828.86 4261.46 1824.48 4265.84 1824.48 4271.24 c
1824.48 4276.64 1828.86 4281.01 1834.26 4281.01 c
1839.66 4281.01 1844.03 4276.64 1844.03 4271.24 c
f
n
1863.58 4318.48 m
1863.58 4313.09 1859.21 4308.71 1853.81 4308.71 c
1848.41 4308.71 1844.03 4313.09 1844.03 4318.48 c
1844.03 4323.88 1848.41 4328.26 1853.81 4328.26 c
1859.21 4328.26 1863.58 4323.88 1863.58 4318.48 c
f
n
1883.95 4366.54 m
1883.95 4361.14 1879.57 4356.77 1874.17 4356.77 c
1868.77 4356.77 1864.4 4361.14 1864.4 4366.54 c
1864.4 4371.94 1868.77 4376.32 1874.17 4376.32 c
1879.57 4376.32 1883.95 4371.94 1883.95 4366.54 c
f
n
1903.5 4414.61 m
1903.5 4409.21 1899.12 4404.83 1893.72 4404.83 c
1888.32 4404.83 1883.95 4409.21 1883.95 4414.61 c
1883.95 4420.0 1888.32 4424.38 1893.72 4424.38 c
1899.12 4424.38 1903.5 4420.0 1903.5 4414.61 c
f
n
1923.05 4461.85 m
1923.05 4456.45 1918.67 4452.08 1913.27 4452.08 c
1907.88 4452.08 1903.5 4456.45 1903.5 4461.85 c
1903.5 4467.25 1907.88 4471.62 1913.27 4471.62 c
1918.67 4471.62 1923.05 4467.25 1923.05 4461.85 c
f
n
1943.41 4509.91 m
1943.41 4504.52 1939.04 4500.14 1933.64 4500.14 c
1928.24 4500.14 1923.86 4504.52 1923.86 4509.91 c
1923.86 4515.31 1928.24 4519.69 1933.64 4519.69 c
1939.04 4519.69 1943.41 4515.31 1943.41 4509.91 c
f
n
1684.37 3779.22 m
1684.37 3773.82 1680.0 3769.45 1674.6 3769.45 c
1669.2 3769.45 1664.82 3773.82 1664.82 3779.22 c
1664.82 3784.62 1669.2 3789.0 1674.6 3789.0 c
1680.0 3789.0 1684.37 3784.62 1684.37 3779.22 c
f
n
1699.04 3828.91 m
1699.04 3823.52 1694.66 3819.14 1689.26 3819.14 c
1683.86 3819.14 1679.48 3823.52 1679.48 3828.91 c
1679.48 3834.31 1683.86 3838.69 1689.26 3838.69 c
1694.66 3838.69 1699.04 3834.31 1699.04 3828.91 c
f
n
1714.51 3878.61 m
1714.51 3873.21 1710.14 3868.83 1704.74 3868.83 c
1699.34 3868.83 1694.96 3873.21 1694.96 3878.61 c
1694.96 3884.0 1699.34 3888.38 1704.74 3888.38 c
1710.14 3888.38 1714.51 3884.0 1714.51 3878.61 c
f
n
1729.18 3928.29 m
1729.18 3922.89 1724.8 3918.52 1719.4 3918.52 c
1714.0 3918.52 1709.62 3922.89 1709.62 3928.29 c
1709.62 3933.69 1714.0 3938.07 1719.4 3938.07 c
1724.8 3938.07 1729.18 3933.69 1729.18 3928.29 c
f
n
1744.65 3977.17 m
1744.65 3971.77 1740.28 3967.39 1734.88 3967.39 c
1729.48 3967.39 1725.1 3971.77 1725.1 3977.17 c
1725.1 3982.57 1729.48 3986.95 1734.88 3986.95 c
1740.28 3986.95 1744.65 3982.57 1744.65 3977.17 c
f
n
1759.32 4026.86 m
1759.32 4021.46 1754.94 4017.09 1749.54 4017.09 c
1744.14 4017.09 1739.77 4021.46 1739.77 4026.86 c
1739.77 4032.26 1744.14 4036.64 1749.54 4036.64 c
1754.94 4036.64 1759.32 4032.26 1759.32 4026.86 c
f
n
1774.79 4076.55 m
1774.79 4071.15 1770.41 4066.77 1765.02 4066.77 c
1759.62 4066.77 1755.24 4071.15 1755.24 4076.55 c
1755.24 4081.95 1759.62 4086.32 1765.02 4086.32 c
1770.41 4086.32 1774.79 4081.95 1774.79 4076.55 c
f
n
1789.46 4126.24 m
1789.46 4120.84 1785.08 4116.46 1779.68 4116.46 c
1774.28 4116.46 1769.91 4120.84 1769.91 4126.24 c
1769.91 4131.64 1774.28 4136.02 1779.68 4136.02 c
1785.08 4136.02 1789.46 4131.64 1789.46 4126.24 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1819.59 4224.8 m
1819.59 4219.41 1815.22 4215.03 1809.82 4215.03 c
1804.42 4215.03 1800.04 4219.41 1800.04 4224.8 c
1800.04 4230.2 1804.42 4234.58 1809.82 4234.58 c
1815.22 4234.58 1819.59 4230.2 1819.59 4224.8 c
f
n
1834.26 4274.5 m
1834.26 4269.1 1829.88 4264.72 1824.48 4264.72 c
1819.09 4264.72 1814.71 4269.1 1814.71 4274.5 c
1814.71 4279.89 1819.09 4284.27 1824.48 4284.27 c
1829.88 4284.27 1834.26 4279.89 1834.26 4274.5 c
f
n
1849.73 4324.19 m
1849.73 4318.79 1845.36 4314.41 1839.96 4314.41 c
1834.56 4314.41 1830.18 4318.79 1830.18 4324.19 c
1830.18 4329.59 1834.56 4333.96 1839.96 4333.96 c
1845.36 4333.96 1849.73 4329.59 1849.73 4324.19 c
f
n
1864.4 4373.88 m
1864.4 4368.48 1860.02 4364.1 1854.62 4364.1 c
1849.22 4364.1 1844.85 4368.48 1844.85 4373.88 c
1844.85 4379.27 1849.22 4383.65 1854.62 4383.65 c
1860.02 4383.65 1864.4 4379.27 1864.4 4373.88 c
f
n
1879.88 4422.75 m
1879.88 4417.35 1875.5 4412.98 1870.1 4412.98 c
1864.7 4412.98 1860.32 4417.35 1860.32 4422.75 c
1860.32 4428.15 1864.7 4432.53 1870.1 4432.53 c
1875.5 4432.53 1879.88 4428.15 1879.88 4422.75 c
f
n
1894.54 4472.44 m
1894.54 4467.04 1890.16 4462.67 1884.76 4462.67 c
1879.36 4462.67 1874.99 4467.04 1874.99 4472.44 c
1874.99 4477.84 1879.36 4482.21 1884.76 4482.21 c
1890.16 4482.21 1894.54 4477.84 1894.54 4472.44 c
f
n
1910.02 4522.13 m
1910.02 4516.73 1905.64 4512.36 1900.24 4512.36 c
1894.84 4512.36 1890.46 4516.73 1890.46 4522.13 c
1890.46 4527.53 1894.84 4531.91 1900.24 4531.91 c
1905.64 4531.91 1910.02 4527.53 1910.02 4522.13 c
f
n
1723.47 3769.45 m
1723.47 3764.05 1719.1 3759.68 1713.7 3759.68 c
1708.3 3759.68 1703.92 3764.05 1703.92 3769.45 c
1703.92 3774.85 1708.3 3779.22 1713.7 3779.22 c
1719.1 3779.22 1723.47 3774.85 1723.47 3769.45 c
f
n
1734.06 3820.77 m
1734.06 3815.37 1729.69 3810.99 1724.29 3810.99 c
1718.89 3810.99 1714.51 3815.37 1714.51 3820.77 c
1714.51 3826.17 1718.89 3830.54 1724.29 3830.54 c
1729.69 3830.54 1734.06 3826.17 1734.06 3820.77 c
f
n
1743.84 3871.27 m
1743.84 3865.88 1739.46 3861.5 1734.06 3861.5 c
1728.66 3861.5 1724.29 3865.88 1724.29 3871.27 c
1724.29 3876.67 1728.66 3881.05 1734.06 3881.05 c
1739.46 3881.05 1743.84 3876.67 1743.84 3871.27 c
f
n
1754.43 3921.78 m
1754.43 3916.38 1750.05 3912.0 1744.65 3912.0 c
1739.25 3912.0 1734.88 3916.38 1734.88 3921.78 c
1734.88 3927.18 1739.25 3931.55 1744.65 3931.55 c
1750.05 3931.55 1754.43 3927.18 1754.43 3921.78 c
f
n
1764.2 3972.28 m
1764.2 3966.88 1759.82 3962.51 1754.43 3962.51 c
1749.03 3962.51 1744.65 3966.88 1744.65 3972.28 c
1744.65 3977.68 1749.03 3982.06 1754.43 3982.06 c
1759.82 3982.06 1764.2 3977.68 1764.2 3972.28 c
f
n
1773.98 4023.6 m
1773.98 4018.2 1769.6 4013.83 1764.2 4013.83 c
1758.8 4013.83 1754.43 4018.2 1754.43 4023.6 c
1754.43 4029.0 1758.8 4033.38 1764.2 4033.38 c
1769.6 4033.38 1773.98 4029.0 1773.98 4023.6 c
f
n
1784.57 4074.11 m
1784.57 4068.71 1780.19 4064.33 1774.79 4064.33 c
1769.39 4064.33 1765.02 4068.71 1765.02 4074.11 c
1765.02 4079.5 1769.39 4083.88 1774.79 4083.88 c
1780.19 4083.88 1784.57 4079.5 1784.57 4074.11 c
f
n
1794.34 4124.61 m
1794.34 4119.21 1789.96 4114.84 1784.57 4114.84 c
1779.17 4114.84 1774.79 4119.21 1774.79 4124.61 c
1774.79 4130.01 1779.17 4134.39 1784.57 4134.39 c
1789.96 4134.39 1794.34 4130.01 1794.34 4124.61 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1814.71 4226.43 m
1814.71 4221.04 1810.33 4216.66 1804.93 4216.66 c
1799.54 4216.66 1795.16 4221.04 1795.16 4226.43 c
1795.16 4231.83 1799.54 4236.21 1804.93 4236.21 c
1810.33 4236.21 1814.71 4231.83 1814.71 4226.43 c
f
n
1824.48 4276.94 m
1824.48 4271.54 1820.11 4267.16 1814.71 4267.16 c
1809.31 4267.16 1804.93 4271.54 1804.93 4276.94 c
1804.93 4282.34 1809.31 4286.71 1814.71 4286.71 c
1820.11 4286.71 1824.48 4282.34 1824.48 4276.94 c
f
n
1835.07 4327.45 m
1835.07 4322.05 1830.7 4317.67 1825.3 4317.67 c
1819.9 4317.67 1815.52 4322.05 1815.52 4327.45 c
1815.52 4332.84 1819.9 4337.22 1825.3 4337.22 c
1830.7 4337.22 1835.07 4332.84 1835.07 4327.45 c
f
n
1844.85 4378.76 m
1844.85 4373.36 1840.47 4368.99 1835.07 4368.99 c
1829.68 4368.99 1825.3 4373.36 1825.3 4378.76 c
1825.3 4384.16 1829.68 4388.54 1835.07 4388.54 c
1840.47 4388.54 1844.85 4384.16 1844.85 4378.76 c
f
n
1854.62 4429.27 m
1854.62 4423.87 1850.25 4419.49 1844.85 4419.49 c
1839.45 4419.49 1835.07 4423.87 1835.07 4429.27 c
1835.07 4434.67 1839.45 4439.04 1844.85 4439.04 c
1850.25 4439.04 1854.62 4434.67 1854.62 4429.27 c
f
n
1865.21 4479.77 m
1865.21 4474.38 1860.84 4470.0 1855.44 4470.0 c
1850.04 4470.0 1845.66 4474.38 1845.66 4479.77 c
1845.66 4485.17 1850.04 4489.55 1855.44 4489.55 c
1860.84 4489.55 1865.21 4485.17 1865.21 4479.77 c
f
n
1874.99 4530.28 m
1874.99 4524.88 1870.61 4520.5 1865.21 4520.5 c
1859.81 4520.5 1855.44 4524.88 1855.44 4530.28 c
1855.44 4535.68 1859.81 4540.05 1865.21 4540.05 c
1870.61 4540.05 1874.99 4535.68 1874.99 4530.28 c
f
n
1764.2 3763.75 m
1764.2 3758.35 1759.82 3753.97 1754.43 3753.97 c
1749.03 3753.97 1744.65 3758.35 1744.65 3763.75 c
1744.65 3769.14 1749.03 3773.52 1754.43 3773.52 c
1759.82 3773.52 1764.2 3769.14 1764.2 3763.75 c
f
n
1769.09 3815.07 m
1769.09 3809.67 1764.71 3805.29 1759.32 3805.29 c
1753.92 3805.29 1749.54 3809.67 1749.54 3815.07 c
1749.54 3820.46 1753.92 3824.84 1759.32 3824.84 c
1764.71 3824.84 1769.09 3820.46 1769.09 3815.07 c
f
n
1773.98 3866.39 m
1773.98 3860.99 1769.6 3856.61 1764.2 3856.61 c
1758.8 3856.61 1754.43 3860.99 1754.43 3866.39 c
1754.43 3871.79 1758.8 3876.16 1764.2 3876.16 c
1769.6 3876.16 1773.98 3871.79 1773.98 3866.39 c
f
n
1778.87 3918.52 m
1778.87 3913.12 1774.49 3908.74 1769.09 3908.74 c
1763.69 3908.74 1759.32 3913.12 1759.32 3918.52 c
1759.32 3923.92 1763.69 3928.29 1769.09 3928.29 c
1774.49 3928.29 1778.87 3923.92 1778.87 3918.52 c
f
n
1784.57 3969.84 m
1784.57 3964.44 1780.19 3960.06 1774.79 3960.06 c
1769.39 3960.06 1765.02 3964.44 1765.02 3969.84 c
1765.02 3975.24 1769.39 3979.61 1774.79 3979.61 c
1780.19 3979.61 1784.57 3975.24 1784.57 3969.84 c
f
n
1789.46 4021.16 m
1789.46 4015.76 1785.08 4011.38 1779.68 4011.38 c
1774.28 4011.38 1769.91 4015.76 1769.91 4021.16 c
1769.91 4026.55 1774.28 4030.93 1779.68 4030.93 c
1785.08 4030.93 1789.46 4026.55 1789.46 4021.16 c
f
n
1794.34 4072.48 m
1794.34 4067.08 1789.96 4062.7 1784.57 4062.7 c
1779.17 4062.7 1774.79 4067.08 1774.79 4072.48 c
1774.79 4077.88 1779.17 4082.25 1784.57 4082.25 c
1789.96 4082.25 1794.34 4077.88 1794.34 4072.48 c
f
n
1799.23 4123.8 m
1799.23 4118.4 1794.86 4114.02 1789.46 4114.02 c
1784.06 4114.02 1779.68 4118.4 1779.68 4123.8 c
1779.68 4129.2 1784.06 4133.57 1789.46 4133.57 c
1794.86 4133.57 1799.23 4129.2 1799.23 4123.8 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1809.82 4227.25 m
1809.82 4221.85 1805.44 4217.47 1800.04 4217.47 c
1794.64 4217.47 1790.27 4221.85 1790.27 4227.25 c
1790.27 4232.65 1794.64 4237.02 1800.04 4237.02 c
1805.44 4237.02 1809.82 4232.65 1809.82 4227.25 c
f
n
1814.71 4278.57 m
1814.71 4273.17 1810.33 4268.79 1804.93 4268.79 c
1799.54 4268.79 1795.16 4273.17 1795.16 4278.57 c
1795.16 4283.97 1799.54 4288.34 1804.93 4288.34 c
1810.33 4288.34 1814.71 4283.97 1814.71 4278.57 c
f
n
1819.59 4329.89 m
1819.59 4324.49 1815.22 4320.11 1809.82 4320.11 c
1804.42 4320.11 1800.04 4324.49 1800.04 4329.89 c
1800.04 4335.29 1804.42 4339.66 1809.82 4339.66 c
1815.22 4339.66 1819.59 4335.29 1819.59 4329.89 c
f
n
1824.48 4381.21 m
1824.48 4375.81 1820.11 4371.43 1814.71 4371.43 c
1809.31 4371.43 1804.93 4375.81 1804.93 4381.21 c
1804.93 4386.61 1809.31 4390.98 1814.71 4390.98 c
1820.11 4390.98 1824.48 4386.61 1824.48 4381.21 c
f
n
1830.18 4432.53 m
1830.18 4427.13 1825.81 4422.75 1820.41 4422.75 c
1815.01 4422.75 1810.63 4427.13 1810.63 4432.53 c
1810.63 4437.93 1815.01 4442.3 1820.41 4442.3 c
1825.81 4442.3 1830.18 4437.93 1830.18 4432.53 c
f
n
1835.07 4484.66 m
1835.07 4479.26 1830.7 4474.89 1825.3 4474.89 c
1819.9 4474.89 1815.52 4479.26 1815.52 4484.66 c
1815.52 4490.06 1819.9 4494.43 1825.3 4494.43 c
1830.7 4494.43 1835.07 4490.06 1835.07 4484.66 c
f
n
1839.96 4535.98 m
1839.96 4530.58 1835.58 4526.2 1830.18 4526.2 c
1824.79 4526.2 1820.41 4530.58 1820.41 4535.98 c
1820.41 4541.38 1824.79 4545.75 1830.18 4545.75 c
1835.58 4545.75 1839.96 4541.38 1839.96 4535.98 c
f
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 243.734 4059.78 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: XUVAAA+CMSY10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /XUVAAA+CMSY10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-0 -960 943 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705] def
/OtherBlues [-124 -119] def
/BlueScale 0.04379 def
/StdHW [40] def
/StdVW [85] def
/StemSnapH [40 55] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9C4A637> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 0 /minus/periodcentered/multiply/asteriskmath 12 /circledot 15 /bullet
 20 /lessequal/greaterequal 24 /similar/approxequal 28 /lessmuch 32 /space
/arrowright/quotedbl/numbersign/dollar/percent/ampersand
/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/element
/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D
/E/F/G/H/I/J
/K/L/M/N/O/P
/Q/R/S/T/U/V
/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/grave/a/b
/c/d/e/braceleft/braceright/angbracketleft
/angbracketright/bar/bardbl/l/m/backslash
/o/radical/q/r/s/t
/u/v/w/x/dagger/daggerdbl
/braceleft/bar/braceright/asciitilde/bullet/Euro
/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright
/quotedblleft/quotedblright/bullet/endash/emdash/tilde
/trademark/scaron/guilsinglright/oe/bullet/zcaron
/Ydieresis/space/exclamdown/cent/sterling/currency
/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex
/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave
/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex
/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute
/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn
/ydieresis
/N33 (XUVAAA+CMSY10) -1 TZ
126.263 364.328 m
%ADOBeginSubsetFont: XUVAAA+CMSY10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/XUVAAA+CMSY10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB432204C2EF
9CAB07AB654895DD8804EF7ED97DE3E2616CBB2FB21BE3D9> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/XUVAAA+CMSY10 findfont /Encoding get
dup 0 /minus put
pop
end
+%ADOEndSubsetFont
+/N33 10.6637 Tf
(\000) show
%ADOBeginSubsetFont: EWLBAA+CMR10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /EWLBAA+CMR10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-40 -250 1009 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 448 666 677] def
/OtherBlues [-206 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [69] def
/StemSnapH [22 31] def
/StemSnapV [69 89] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /ff/fi/fl/ffi
 32 /space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/circumflex/underscore/quoteleft/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/endash/bar/braceright/tilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N41 (EWLBAA+CMR10) -1 TZ
134.592 364.328 m
%ADOBeginSubsetFont: EWLBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/EWLBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/EWLBAA+CMR10 findfont /Encoding get
dup 48 /zero put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(0) show
%ADOBeginSubsetFont: REAAAA+CMMI10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /REAAAA+CMMI10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-13 -250 1044 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 442 453 466] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [72] def
/StemSnapH [25 31] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /alpha/beta 14 /delta 21 /lambda
/mu 24 /xi/pi 27 /sigma 30 /phi/chi
/psi/exclam/epsilon/theta1/dollar/percent
/ampersand/phi1/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/period/comma/less/slash
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/braceleft/bar/braceright/asciitilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N21 (REAAAA+CMMI10) -1 TZ
139.87 364.328 m
%ADOBeginSubsetFont: REAAAA+CMMI10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/REAAAA+CMMI10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/period <1C60D8A8C9B08A9570810981675968F2C907C696DFE9BE69433F613
9DF6C45B8165ACC43B6E0B309859F778ABCF0> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/REAAAA+CMMI10 findfont /Encoding get
dup 58 /period put
pop
end
+%ADOEndSubsetFont
+/N21 10.6637 Tf
(:) show
142.802 364.328 m
%ADOBeginSubsetFont: EWLBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/EWLBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
A> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/EWLBAA+CMR10 findfont /Encoding get
dup 53 /five put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(500)
[33.946 37.2557 5.27853 ] pdfxs
219.283 364.328 m
/N21 10.6637 Tf
(:) show
222.215 364.328 m
/N41 10.6637 Tf
(5) show
111.456 372.966 m
/N33 10.6637 Tf
(\000) show
119.785 372.966 m
/N41 10.6637 Tf
(0) show
125.063 372.966 m
/N21 10.6637 Tf
(:) show
127.996 372.966 m
/N41 10.6637 Tf
(5) show
129.618 413.96 m
(0) show
121.251 455.341 m
(0) show
126.529 455.341 m
/N21 10.6637 Tf
(:) show
129.462 455.341 m
/N41 10.6637 Tf
(5) show
Q
q
n
2449.61 4685.86 m
3581.89 4685.86 l
3581.89 3620.37 l
2449.61 3620.37 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
2575.06 4646.76 m
3520.8 4646.76 l
3520.8 3701.02 l
2575.06 3701.02 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 1497.72 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
3703.6 4688.29 m
4835.88 4688.29 l
4835.88 3620.36 l
3703.6 3620.36 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
3829.05 4649.19 m
4725.1 4649.19 l
4725.1 3701.01 l
3829.05 3701.01 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 2750.54 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
Q
Q
/EWLBAA+CMR10 /Font _pdfUndefineResource
/N41 /Font _pdfUndefineResource
/REAAAA+CMMI10 /Font _pdfUndefineResource
/N21 /Font _pdfUndefineResource
/XUVAAA+CMSY10 /Font _pdfUndefineResource
/N33 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/tutorial/images/polar_grid.pdf b/doc/tutorial/images/polar_grid.pdf
new file mode 100644
index 0000000..5a9bb2d
Binary files /dev/null and b/doc/tutorial/images/polar_grid.pdf differ
diff --git a/doc/tutorial/images/sparse2D_0.eps b/doc/tutorial/images/sparse2D_0.eps
new file mode 100755
index 0000000..5abf7c1
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_0.eps
@@ -0,0 +1,111 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_0.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 17:56:59 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 35 35
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 35 moveto 0 0 lineto 35 0 lineto 35 35 lineto closepath clip newpath
+-11.0 54.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 720 990 m 1080 990 l 1080 1350 l 720 1350 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 360 990 m 540 990 l 540 1170 l 360 1170 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 900 630 m 1080 630 l 1080 810 l 900 810 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1260 990 m 1440 990 l 1440 1170 l 1260 1170 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 900 1530 m 1080 1530 l 1080 1710 l 900 1710 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_0.pdf b/doc/tutorial/images/sparse2D_0.pdf
new file mode 100644
index 0000000..f37a289
Binary files /dev/null and b/doc/tutorial/images/sparse2D_0.pdf differ
diff --git a/doc/tutorial/images/sparse2D_1.eps b/doc/tutorial/images/sparse2D_1.eps
new file mode 100755
index 0000000..fe61390
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_1.eps
@@ -0,0 +1,123 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_1.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 18:37:45 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 69 69
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 69 moveto 0 0 lineto 69 0 lineto 69 69 lineto closepath clip newpath
+-76.2 79.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 3510 360 m 3690 360 l 3690 720 l 3510 720 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3330 900 m 3690 900 l 3690 1080 l 3330 1080 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 2970 1260 m 3150 1260 l 3150 1620 l 2970 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3330 1800 m 3690 1800 l 3690 1980 l 3330 1980 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3330 1260 m 3690 1260 l 3690 1620 l 3330 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3870 1260 m 4050 1260 l 4050 1620 l 3870 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3510 2160 m 3690 2160 l 3690 2520 l 3510 2520 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 2430 1260 m 2790 1260 l 2790 1440 l 2430 1440 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4230 1260 m 4590 1260 l 4590 1440 l 4230 1440 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_1.pdf b/doc/tutorial/images/sparse2D_1.pdf
new file mode 100644
index 0000000..c456d8f
Binary files /dev/null and b/doc/tutorial/images/sparse2D_1.pdf differ
diff --git a/doc/tutorial/images/sparse2D_2.eps b/doc/tutorial/images/sparse2D_2.eps
new file mode 100755
index 0000000..f219b45
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_2.eps
@@ -0,0 +1,123 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_2.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 18:45:03 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 115 115
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 115 moveto 0 0 lineto 115 0 lineto 115 115 lineto closepath clip newpath
+-5.3 241.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 2340 5490 m 1620 5490 l 1620 6210 l 2340 6210 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1080 5670 m 1440 5670 l 1440 6030 l 1080 6030 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 180 5850 m 180 5670 l 900 5670 l 900 5850 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 2520 5670 m 2880 5670 l 2880 6030 l 2520 6030 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3060 5850 m 3060 5670 l 3780 5670 l 3780 5850 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1800 4950 m 2160 4950 l 2160 5310 l 1800 5310 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1980 4050 m 2160 4050 l 2160 4770 l 1980 4770 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1800 6390 m 2160 6390 l 2160 6750 l 1800 6750 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1980 6930 m 2160 6930 l 2160 7650 l 1980 7650 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_2.pdf b/doc/tutorial/images/sparse2D_2.pdf
new file mode 100644
index 0000000..3d0f243
Binary files /dev/null and b/doc/tutorial/images/sparse2D_2.pdf differ
diff --git a/doc/tutorial/images/sparse2D_3.eps b/doc/tutorial/images/sparse2D_3.eps
new file mode 100755
index 0000000..0df3b19
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_3.eps
@@ -0,0 +1,135 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_3.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 18:45:32 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 217 217
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 217 moveto 0 0 lineto 217 0 lineto 217 217 lineto closepath clip newpath
+-59.1 222.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 4770 3285 m 4410 3285 l 4410 4005 l 4770 4005 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4950 4185 m 4950 4545 l 5670 4545 l 5670 4185 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 6210 3285 m 5850 3285 l 5850 4005 l 6210 4005 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4950 2745 m 4950 3105 l 5670 3105 l 5670 2745 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3510 3465 m 3510 3825 l 4230 3825 l 4230 3465 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3330 3465 m 3330 3645 l 1890 3645 l 1890 3465 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 6390 3465 m 6390 3825 l 7110 3825 l 7110 3465 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 7290 3645 m 7290 3465 l 8730 3465 l 8730 3645 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5490 1845 m 5130 1845 l 5130 2565 l 5490 2565 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5310 225 m 5490 225 l 5490 1665 l 5310 1665 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5490 4725 m 5130 4725 l 5130 5445 l 5490 5445 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5310 5625 m 5490 5625 l 5490 7065 l 5310 7065 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5670 3285 m 4950 3285 l 4950 4005 l 5670 4005 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_3.pdf b/doc/tutorial/images/sparse2D_3.pdf
new file mode 100644
index 0000000..9ecaa27
Binary files /dev/null and b/doc/tutorial/images/sparse2D_3.pdf differ
diff --git a/doc/tutorial/images/sphere.eps b/doc/tutorial/images/sphere.eps
new file mode 100644
index 0000000..02701e9
--- /dev/null
+++ b/doc/tutorial/images/sphere.eps
@@ -0,0 +1,48 @@
+%!PS-Adobe-3.1 EPSF-3.0
%%Title: sphere.pdf
%%Creator: Adobe Illustrator(R) 11
%%AI8_CreatorVersion: 11.0.0
%AI9_PrintingDataBegin
%%For: Holden Caulfield
%%CreationDate: 7/12/05
%%BoundingBox: 0 0 344 325
%%HiResBoundingBox: 0 0 344 325
%%CropBox: 0 0 344 325
%%LanguageLevel: 2
%%DocumentData: Clean7Bit
%%Pages: 1
%%DocumentNeededResources: 
%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
%%+ procset Adobe_CoolType_Utility_T42 (1.0 0)
%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.19 0)
%%+ procset Adobe_CoolType_Core (2.23 0)
%%+ procset Adobe_AGM_Core (2.0 0)
%%+ procset Adobe_AGM_Utils (1.0 0)
%%DocumentFonts: 
%%DocumentNeededFonts: 
%%DocumentNeededFeatures: 
%%DocumentSuppliedFeatures: 
%%DocumentCustomColors: 
%%CMYKCustomColor: 
%%RGBCustomColor: 
%ADO_ContainsXMP: MainFirst
%AI7_Thumbnail: 128 124 8
%%BeginData: 5318 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FD3FFF527D7DA8FD7BFFA8527D5252FD7CFFA8FF7DA8FD7DFFA8FD
%7EFF5252FD7DFFA8F8F8FD7EFF7DA8FD7FFFA8FDFCFFFFFFFFA8FDFCFFFF
%FFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFF
%A8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD
%7EFFA8A8FD79FFA8FFFD04A87DA87DA8A8FFA8FD70FFA8FFFFFFA8FD07FF
%A8FFA8FFA8FFA8FD68FFA8A8A8FFA8FD0FFFA8FFFFFFA8A8A8FD64FFA8FD
%15FFA8FD05FFA8FD61FFA8A8FD0FFFA8FD07FFA8FD07FFA8FD5CFFA8FD1B
%FFA8FD07FFA8FD5AFFA8FD09FFA8FD09FFA8FD08FFA8A8FD07FFA8FD58FF
%A8FD7EFFA8FD09FFA8FD15FFA8FD0BFFA8FD52FFA8FD21FFA8FFFFFFA87D
%FD06FFA8FD50FFA8FD0BFFA8FD0BFFA8FD0BFFA8FFFF7D52FD07FFA8FD4E
%FFA8FD0BFFA8FD1BFF7D7DFD55FFA8FD25FFA8FFFF7D7DFD54FFA8FD27FF
%7DFFA852FD53FFA8FD0DFFA8FD0DFFA8FD0BFFA8277DFD0BFFA8FD72FFA8
%FD72FFA8FFA8FD09FFA8FFA8FD0DFFA8FD46FFA8FD0DFFA8FD11FFA8FD07
%FFA8FD11FFA8FD28FFA8FFA8FD19FFA8FD0DFFA8FD0FFFA8FFFFFFA8FD05
%FFA8FFFFFFA8FD29FFA8FFA8FD0CFFA8FFA8FFA8FD15FFA8FD2DFFA8FD25
%FFA8FFA8FD12FFA8FFA8FFA8FD21FFA8FD0FFFA8FFA87DA8FD06FF7D52FF
%FFA8FD0EFFA8FD11FFA8FFA8FFA8FD1AFFA8FFA8FD0FFFA8FD20FFA827FD
%07FF52FFFFFFA8FD0FFFA8FD0DFFA8FFA8FFA8FD20FFA8FFA8FFA8FD09FF
%A8FD20FF7D2752A8FFA8FFA8FFA8A8FD04FFA8FD0DFFA8FD09FFA8FFA8FF
%A8FFA8FD28FFA8FFA8FD28FF7DA8FFFFFFA8FD07FFA8FD0FFFA8FD07FFA8
%FFA8FD30FFA8FFA8FFA8FFA8FD0FFFA8FD0FFFA8FD05FFA8FD09FFA8FD0F
%FFA8FFA8FFA8FFA8FD36FFA8FFA8FD1BFFA8FFFFFFA8FFA8FFFFFFA8FD19
%FFA8A8A8FD3DFFA8A8FFA8A8FD0AFFA8FFA8A8A8FFA8FFFFFFA8FFA8FFA8
%FFFFFFA8FFFFFFA8A8FFFFA8FFFFFFA8FFA8A8A8FFA8FD07FFA8FFA8FFFF
%FFA8FD3EFFA8FD0BFFA8FFFFFFA8FD25FFA8FFFFFFA8FD44FFA8FD09FFA8
%FFA8FFA8FD13FFA8FFFFFFA8FD0BFFA8FD05FFA8FFA8FD07FFA8FD44FFA8
%FD09FFA8FD13FFA8FD0CFFA8FFFFA8FD07FFA8FD05FFA8FD3CFFA8FFFFA8
%A8FD0BFFA8A8A8FFA8FD0DFFA8FFA8FD09FFA8FFFFFFA8FD0BFFA8FFA8FF
%A8A8FD4DFFA8FD05FFA8FD0BFFA8FD07FFA8FD17FFA8FD3CFFA8FD17FFA8
%FFA8A8A8FD0BFFA8FFFFFFA8FD05FFA8FD0FFFA8A8FD3DFFA8FD1FFFA8A8
%FFFFA8FD1DFFA8FD3CFFA8FD0FFFA8A8FD0FFFA87DFFA8FD0DFFA8FD0FFF
%A8A8FD3CFFA8A8FD1DFFA8A8A8FFFFA8A8FD1DFFA8FD3CFFA8A8A8FD15FF
%A8FD05FF7D7D527DFD04FFA8A8A8FFA8FD07FFA8FD0FFFA8FD40FFA8FD0D
%FFA8FFFFFFA8A8A8FD07FF277DFD08FFA8FD17FFA8FFA8FD3CFFA8FFFFFF
%A8FFA8FD09FFA8FFA8FFA8FFA8FFA8FFA8A8A8FFA87DA8FFA8FFA8FFA8FF
%A8A8A8FFA8FFA8FFA8FFA8FFA8FD09FFA8A8A8FFA8A8FD43FFA8FD07FFA8
%FD1DFFA8FD0DFFA8FFA8FD05FFA8FD3CFFA8FD07FFFD05A8FD15FFA8FD0B
%FFA8FFA8FFA8FFFFFFA8A87DA8A8FD07FFA8FD3EFFA8FFFFFFA8FFA8FFA8
%FFFFFFA8FFA8FFA8FFA8FD1CFFA87DA8A8FFA8FD05FFA8FFA8FD42FFA8A8
%A8FFA8FFA8FD0BFFA8FFA8A8A8FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FF
%A8A8A8FFA8A8A8FFA8FFA8FD0BFFA8FFA8FFA8FD3CFFA8A8A8FD1FFFA8FD
%1FFFFD05A8FD34FFA8FFA8A8A8FFFFFFA8FD0FFFA8FD0FFFA8FD0FFFA8FD
%0FFFA8FFA8A8A8FFA8FD2EFFA8FFA8FFA8FD35FFA8FD0FFFA8FD09FFA8FD
%26FFA8FFA8A8A8FFA8FD09FFA8FD1FFFA8FD0FFFA8FD0DFFA8FD0BFFA8FF
%A8FFA8FD1EFFA8FFA8FFA8FD0FFFA8FD2DFFA8FD1FFFA8FFA8FD14FFA8A8
%FFFFA8FFA8FFA8FD12FFA8FD0EFFA8FD1DFFA8FD0FFFA8FD13FFA8FFA8FF
%A8FFA8FD0CFFA82727FFA8FD45FFA8FD27FFA827F8FD06FF7D52A8FFFFA8
%2752A8FD19FFA8FD0DFFA8FD0FFFA8FD0DFFA8FD29FF27527DFF7D52A8FF
%7D52A87DFD1FFFA8FD0DFFA8FD4AFF7D52A87D7DA87D52FD1FFFA8A8FD29
%FFA8FD0DFFA8FD1FFF7DA87D27FFFFFFA8FD49FFA8FD0DFFA8FD23FF7DFD
%24FFA8FD0DFFA8FD0DFFA8FD0CFFA8FD0CFFA8FD4AFFA8FD27FFA8FD58FF
%A8FD19FFA8FD0BFFA8FD0CFFA8FD4DFFA8FD0BFFA8FD74FFA8FD17FFA8FD
%0BFFA8FD0BFFA8FD50FFA8FD21FFA8FD5EFFA8FD09FFA8FD0BFFA8FD09FF
%A8FD09FFA8FD56FFA8FD1DFFA8FD62FFA8A8A8FD07FFA8FD12FFA8FD08FF
%A8FD64FFA8FD19FFA8FD5EFFA8FD0FFFA8FD07FFA8FD05FFA8FFA8FD60FF
%A8FFA8FD05FFA8FD13FFA8FD66FFA8FFA8FD09FFA8FFFFFFA8FFFFFFA8FF
%A8A8A8FD6AFFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8FD74FFA8FFA8A8
%7DFD04A8FFA8FDF9FFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFF
%A8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD
%FCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFF
%FD42FFFF
%%EndData
%%EndComments
%%BeginDefaults
%%ViewingOrientation: 1 0 0 1
%%EndDefaults
%%BeginProlog
%%BeginResource: procset Adobe_AGM_Utils 1.0 0
%%Version: 1.0 0
%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc.  All Rights Reserved.
systemdict /setpacking known
{
	currentpacking
	true setpacking
} if
userdict /Adobe_AGM_Utils 68 dict dup begin put
/bdf
{
	bind def
} bind def
/nd{
	null def
}bdf
/xdf
{
	exch def
}bdf
/ldf 
{
	load def
}bdf
/ddf
{
	put
}bdf	
/xddf
{
	3 -1 roll put
}bdf	
/xpt
{
	exch put
}bdf
/ndf
{ 
	exch dup where{
		pop pop pop
	}{
		xdf
	}ifelse
}def
/cdndf
{
	exch dup currentdict exch known{
		pop pop
	}{
		exch def
	}ifelse
}def
/bdict
{
	mark
}bdf
/edict
{
	counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
}def
/ps_level
	/languagelevel where{
		pop systemdict /languagelevel get exec
	}{
		1
	}ifelse
def
/level2 
	ps_level 2 ge
def
/level3 
	ps_level 3 ge
def
/ps_version
	{version cvr} stopped {
		-1
	}if
def
/makereadonlyarray
{
	/packedarray where{
		pop packedarray
	}{
		array astore readonly
	}ifelse
}bdf
/map_reserved_ink_name
{
	dup type /stringtype eq{
		dup /Red eq{
			pop (_Red_)
		}{
			dup /Green eq{
				pop (_Green_)
			}{
				dup /Blue eq{
					pop (_Blue_)
				}{
					dup () cvn eq{
						pop (Process)
					}if
				}ifelse
			}ifelse
		}ifelse
	}if
}bdf
/AGMUTIL_GSTATE 22 dict def
/get_gstate
{
	AGMUTIL_GSTATE begin
	/AGMUTIL_GSTATE_clr_spc currentcolorspace def
	/AGMUTIL_GSTATE_clr_indx 0 def
	/AGMUTIL_GSTATE_clr_comps 12 array def
	mark currentcolor counttomark
		{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
		/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
	/AGMUTIL_GSTATE_fnt rootfont def
	/AGMUTIL_GSTATE_lw currentlinewidth def
	/AGMUTIL_GSTATE_lc currentlinecap def
	/AGMUTIL_GSTATE_lj currentlinejoin def
	/AGMUTIL_GSTATE_ml currentmiterlimit def
	currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
	/AGMUTIL_GSTATE_sa currentstrokeadjust def
	/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
	/AGMUTIL_GSTATE_op currentoverprint def
	/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
	/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
	currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
		cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
	/AGMUTIL_GSTATE_ht currenthalftone def
	/AGMUTIL_GSTATE_flt currentflat def
	end
}def
/set_gstate
{
	AGMUTIL_GSTATE begin
	AGMUTIL_GSTATE_clr_spc setcolorspace
	AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
	/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
	AGMUTIL_GSTATE_fnt setfont
	AGMUTIL_GSTATE_lw setlinewidth
	AGMUTIL_GSTATE_lc setlinecap
	AGMUTIL_GSTATE_lj setlinejoin
	AGMUTIL_GSTATE_ml setmiterlimit
	AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
	AGMUTIL_GSTATE_sa setstrokeadjust
	AGMUTIL_GSTATE_clr_rnd setcolorrendering
	AGMUTIL_GSTATE_op setoverprint
	AGMUTIL_GSTATE_bg cvx setblackgeneration
	AGMUTIL_GSTATE_ucr cvx setundercolorremoval
	AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
		AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
	AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
		{
		currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
			{
			  mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
			} if
		}{
		AGMUTIL_GSTATE_ht sethalftone
		} ifelse
	AGMUTIL_GSTATE_flt setflat
	end
}def
/get_gstate_and_matrix
{
	AGMUTIL_GSTATE begin
	/AGMUTIL_GSTATE_ctm matrix currentmatrix def
	end
	get_gstate
}def
/set_gstate_and_matrix
{
	set_gstate
	AGMUTIL_GSTATE begin
	AGMUTIL_GSTATE_ctm setmatrix
	end
}def
/AGMUTIL_str256 256 string def
/AGMUTIL_src256 256 string def
/AGMUTIL_dst64 64 string def
/AGMUTIL_srcLen nd
/AGMUTIL_ndx nd
/agm_sethalftone
{ 
	dup
	begin
		/_Data load
		/Thresholds xdf
	end
	level3 
	{ sethalftone }{
		dup /HalftoneType get 3 eq {
			sethalftone
		} {pop} ifelse
	}ifelse
} def 
/rdcmntline
{
	currentfile AGMUTIL_str256 readline pop
	(%) anchorsearch {pop} if
} bdf
/filter_cmyk
{	
	dup type /filetype ne{
		exch () /SubFileDecode filter
	}
	{
		exch pop
	}
	ifelse
	[
	exch
	{
		AGMUTIL_src256 readstring pop
		dup length /AGMUTIL_srcLen exch def
		/AGMUTIL_ndx 0 def
		AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
			1 index exch get
			AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
			/AGMUTIL_ndx AGMUTIL_ndx 1 add def
		}for
		pop
		AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
	}
	bind
	/exec cvx
	] cvx
} bdf
/filter_indexed_devn
{
	cvi Names length mul names_index add Lookup exch get
} bdf
/filter_devn
{	
	4 dict begin
	/srcStr xdf
	/dstStr xdf
	dup type /filetype ne{
		0 () /SubFileDecode filter
	}if
	[
	exch
		[
			/devicen_colorspace_dict /AGMCORE_gget cvx /begin cvx
			currentdict /srcStr get /readstring cvx /pop cvx
			/dup cvx /length cvx 0 /gt cvx [
				Adobe_AGM_Utils /AGMUTIL_ndx 0 /ddf cvx
				names_index Names length currentdict /srcStr get length 1 sub {
					1 /index cvx /exch cvx /get cvx
					currentdict /dstStr get /AGMUTIL_ndx /load cvx 3 -1 /roll cvx /put cvx
					Adobe_AGM_Utils /AGMUTIL_ndx /AGMUTIL_ndx /load cvx 1 /add cvx /ddf cvx
				} for
				currentdict /dstStr get 0 /AGMUTIL_ndx /load cvx /getinterval cvx
			] cvx /if cvx
			/end cvx
		] cvx
		bind
		/exec cvx
	] cvx
	end
} bdf
/AGMUTIL_imagefile nd
/read_image_file
{
	AGMUTIL_imagefile 0 setfileposition
	10 dict begin
	/imageDict xdf
	/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
	/imbufIdx 0 def
	/origDataSource imageDict /DataSource get def
	/origMultipleDataSources imageDict /MultipleDataSources get def
	/origDecode imageDict /Decode get def
	/dstDataStr imageDict /Width get colorSpaceElemCnt mul string def
	/srcDataStrs [ imageDict begin
		currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse
		{
			Width Decode length 2 div mul cvi string
		} repeat
		end ] def
	imageDict /MultipleDataSources known {MultipleDataSources}{false} ifelse
	{
		/imbufCnt imageDict /DataSource get length def
		/imbufs imbufCnt array def
		0 1 imbufCnt 1 sub {
			/imbufIdx xdf
			imbufs imbufIdx imbufLen string put
			imageDict /DataSource get imbufIdx [ AGMUTIL_imagefile imbufs imbufIdx get /readstring cvx /pop cvx ] cvx put
		} for
		DeviceN_PS2 {
			imageDict begin
		 	/DataSource [ DataSource /devn_sep_datasource cvx ] cvx def
			/MultipleDataSources false def
			/Decode [0 1] def
			end
		} if
	}{
		/imbuf imbufLen string def
		Indexed_DeviceN level3 not and DeviceN_NoneName or {
			imageDict begin
		 	/DataSource [AGMUTIL_imagefile Decode BitsPerComponent false 1 /filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource /exec cvx] cvx def
			/Decode [0 1] def
			end
		}{
			imageDict /DataSource {AGMUTIL_imagefile imbuf readstring pop} put
		} ifelse
	} ifelse
	imageDict exch
	load exec
	imageDict /DataSource origDataSource put
	imageDict /MultipleDataSources origMultipleDataSources put
	imageDict /Decode origDecode put	
	end
} bdf
/write_image_file
{
	begin
	{ (AGMUTIL_imagefile) (w+) file } stopped{
		false
	}{
		Adobe_AGM_Utils/AGMUTIL_imagefile xddf 
		2 dict begin
		/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
		MultipleDataSources {DataSource 0 get}{DataSource}ifelse type /filetype eq {
			/imbuf imbufLen string def
		}if
		1 1 Height { 
			pop
			MultipleDataSources {
			 	0 1 DataSource length 1 sub {
					DataSource type dup
					/arraytype eq {
						pop DataSource exch get exec
					}{
						/filetype eq {
							DataSource exch get imbuf readstring pop
						}{
							DataSource exch get
						} ifelse
					} ifelse
					AGMUTIL_imagefile exch writestring
				} for
			}{
				DataSource type dup
				/arraytype eq {
					pop DataSource exec
				}{
					/filetype eq {
						DataSource imbuf readstring pop
					}{
						DataSource
					} ifelse
				} ifelse
				AGMUTIL_imagefile exch writestring
			} ifelse
		}for
		end
		true
	}ifelse
	end
} bdf
/close_image_file
{
	AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
}def
statusdict /product known userdict /AGMP_current_show known not and{
	/pstr statusdict /product get def
	pstr (HP LaserJet 2200) eq 	
	pstr (HP LaserJet 4000 Series) eq or
	pstr (HP LaserJet 4050 Series ) eq or
	pstr (HP LaserJet 8000 Series) eq or
	pstr (HP LaserJet 8100 Series) eq or
	pstr (HP LaserJet 8150 Series) eq or
	pstr (HP LaserJet 5000 Series) eq or
	pstr (HP LaserJet 5100 Series) eq or
	pstr (HP Color LaserJet 4500) eq or
	pstr (HP Color LaserJet 4600) eq or
	pstr (HP LaserJet 5Si) eq or
	pstr (HP LaserJet 1200 Series) eq or
	pstr (HP LaserJet 1300 Series) eq or
	pstr (HP LaserJet 4100 Series) eq or 
	{
 		userdict /AGMP_current_show /show load put
		userdict /show {
		  currentcolorspace 0 get
		  /Pattern eq
		  {false charpath f}
		  {AGMP_current_show} ifelse
		} put
	}if
	currentdict /pstr undef
} if
/consumeimagedata
{
	begin
	currentdict /MultipleDataSources known not
		{/MultipleDataSources false def} if
	MultipleDataSources
		{
		1 dict begin
		/flushbuffer Width cvi string def
		1 1 Height cvi
			{
			pop
			0 1 DataSource length 1 sub
				{
				DataSource exch get
				dup type dup 
				/filetype eq
					{
					exch flushbuffer readstring pop pop
					}if
				/arraytype eq
					{
					exec pop
					}if
				}for
			}for
		end
		}
		{
		/DataSource load type dup 
		/filetype eq
			{
			1 dict begin
			/flushbuffer Width Decode length 2 div mul cvi string def
			1 1 Height { pop DataSource flushbuffer readstring pop pop} for
			end
			}if
		/arraytype eq
			{
			1 1 Height { pop DataSource pop } for
			}if
		}ifelse
	end
}bdf
/addprocs
{
	  2{/exec load}repeat
	  3 1 roll
	  [ 5 1 roll ] bind cvx
}def
/modify_halftone_xfer
{
	currenthalftone dup length dict copy begin
	 currentdict 2 index known{
	 	1 index load dup length dict copy begin
		currentdict/TransferFunction known{
			/TransferFunction load
		}{
			currenttransfer
		}ifelse
		 addprocs /TransferFunction xdf 
		 currentdict end def
		currentdict end sethalftone
	}{ 
		currentdict/TransferFunction known{
			/TransferFunction load 
		}{
			currenttransfer
		}ifelse
		addprocs /TransferFunction xdf
		currentdict end sethalftone		
		pop
	}ifelse
}def
/clonearray
{
	dup xcheck exch
	dup length array exch
	Adobe_AGM_Core/AGMCORE_tmp -1 ddf 
	{
	Adobe_AGM_Core/AGMCORE_tmp AGMCORE_tmp 1 add ddf 
	dup type /dicttype eq
		{
			AGMCORE_tmp
			exch
			clonedict
			Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf 
		} if
	dup type /arraytype eq
		{
			AGMCORE_tmp exch
			clonearray
			Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf 
		} if
	exch dup
	AGMCORE_tmp 4 -1 roll put
	}forall
	exch {cvx} if
}bdf
/clonedict
{
	dup length dict
	begin
		{
		dup type /dicttype eq
			{
				clonedict
			} if
		dup type /arraytype eq
			{
				clonearray
			} if
		def
		}forall
	currentdict
	end
}bdf
/DeviceN_PS2
{
	/currentcolorspace AGMCORE_gget 0 get /DeviceN eq level3 not and
} bdf
/Indexed_DeviceN
{
	/indexed_colorspace_dict AGMCORE_gget dup null ne {
		/CSD known
	}{
		pop false
	} ifelse
} bdf
/DeviceN_NoneName
{	
	/Names where {
		pop
		false Names
		{
			(None) eq or
		} forall
	}{
		false
	}ifelse
} bdf
/DeviceN_PS2_inRip_seps
{
	/AGMCORE_in_rip_sep where
	{
		pop dup type dup /arraytype eq exch /packedarraytype eq or
		{
			dup 0 get /DeviceN eq level3 not and AGMCORE_in_rip_sep and
			{
				/currentcolorspace exch AGMCORE_gput
				false
			}
			{
				true
			}ifelse
		}
		{
			true
		} ifelse
	}
	{
		true
	} ifelse
} bdf
/base_colorspace_type
{
	dup type /arraytype eq {0 get} if
} bdf
/doc_setup{
	Adobe_AGM_Utils begin
}bdf
/doc_trailer{
	currentdict Adobe_AGM_Utils eq{
		end
	}if
}bdf
systemdict /setpacking known
{
	setpacking
} if
%%EndResource
%%BeginResource: procset Adobe_AGM_Core 2.0 0
%%Version: 2.0 0
%%Copyright: Copyright (C) 1997-2003 Adobe Systems, Inc.  All Rights Reserved.
systemdict /setpacking known
{
	currentpacking
	true setpacking
} if
userdict /Adobe_AGM_Core 216 dict dup begin put
/nd{
	null def
}bind def
/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
/AGMCORE_str256 256 string def
/AGMCORE_save nd
/AGMCORE_graphicsave nd
/AGMCORE_c 0 def
/AGMCORE_m 0 def
/AGMCORE_y 0 def
/AGMCORE_k 0 def
/AGMCORE_cmykbuf 4 array def
/AGMCORE_screen [currentscreen] cvx def
/AGMCORE_tmp 0 def
/AGMCORE_&setgray nd
/AGMCORE_&setcolor nd
/AGMCORE_&setcolorspace nd
/AGMCORE_&setcmykcolor nd
/AGMCORE_cyan_plate nd
/AGMCORE_magenta_plate nd
/AGMCORE_yellow_plate nd
/AGMCORE_black_plate nd
/AGMCORE_plate_ndx nd
/AGMCORE_get_ink_data nd
/AGMCORE_is_cmyk_sep nd
/AGMCORE_host_sep nd
/AGMCORE_avoid_L2_sep_space nd
/AGMCORE_distilling nd
/AGMCORE_composite_job nd
/AGMCORE_producing_seps nd
/AGMCORE_ps_level -1 def
/AGMCORE_ps_version -1 def
/AGMCORE_environ_ok nd
/AGMCORE_CSA_cache 0 dict def
/AGMCORE_CSD_cache 0 dict def
/AGMCORE_pattern_cache 0 dict def
/AGMCORE_currentoverprint false def
/AGMCORE_deltaX nd
/AGMCORE_deltaY nd
/AGMCORE_name nd
/AGMCORE_sep_special nd
/AGMCORE_err_strings 4 dict def
/AGMCORE_cur_err nd
/AGMCORE_ovp nd
/AGMCORE_current_spot_alias false def
/AGMCORE_inverting false def
/AGMCORE_feature_dictCount nd
/AGMCORE_feature_opCount nd
/AGMCORE_feature_ctm nd
/AGMCORE_ConvertToProcess false def
/AGMCORE_Default_CTM matrix def
/AGMCORE_Default_PageSize nd
/AGMCORE_currentbg nd
/AGMCORE_currentucr nd
/AGMCORE_gradientcache 32 dict def
/AGMCORE_in_pattern false def
/knockout_unitsq nd
/AGMCORE_CRD_cache where{
	pop
}{
	/AGMCORE_CRD_cache 0 dict def
}ifelse
/AGMCORE_key_known
{
	where{
		/Adobe_AGM_Core_Id known
	}{
		false
	}ifelse
}ndf
/flushinput
{
	save
	2 dict begin
	/CompareBuffer 3 -1 roll def
	/readbuffer 256 string def
	mark
	{
	currentfile readbuffer {readline} stopped
		{cleartomark mark}
		{
		not
			{pop exit}
		if
		CompareBuffer eq
			{exit}
		if
		}ifelse
	}loop
	cleartomark
	end
	restore
}bdf
/getspotfunction
{
	AGMCORE_screen exch pop exch pop
	dup type /dicttype eq{
		dup /HalftoneType get 1 eq{
			/SpotFunction get
		}{
			dup /HalftoneType get 2 eq{
				/GraySpotFunction get
			}{ 
				pop
				{
					abs exch abs 2 copy add 1 gt{
						1 sub dup mul exch 1 sub dup mul add 1 sub
					}{
						dup mul exch dup mul add 1 exch sub
					}ifelse
				}bind
			}ifelse
		}ifelse
	}if
} def
/clp_npth
{
	clip newpath
} def
/eoclp_npth
{
	eoclip newpath
} def
/npth_clp
{
	newpath clip
} def
/add_grad
{
	AGMCORE_gradientcache 3 1 roll put
}bdf
/exec_grad
{
	AGMCORE_gradientcache exch get exec
}bdf
/graphic_setup
{
	/AGMCORE_graphicsave save def
	concat
	0 setgray
	0 setlinecap
	0 setlinejoin
	1 setlinewidth
	[] 0 setdash
	10 setmiterlimit
	newpath
	false setoverprint
	false setstrokeadjust
	Adobe_AGM_Core/spot_alias get exec
	/Adobe_AGM_Image where {
		pop
		Adobe_AGM_Image/spot_alias 2 copy known{
			get exec
		}{
			pop pop
		}ifelse
	} if
	100 dict begin
	/dictstackcount countdictstack def
	/showpage {} def
	mark
} def
/graphic_cleanup
{
	cleartomark
	dictstackcount 1 countdictstack 1 sub {end}for
	end
	AGMCORE_graphicsave restore
} def
/compose_error_msg
{
	grestoreall initgraphics	
	/Helvetica findfont 10 scalefont setfont
	/AGMCORE_deltaY 100 def
	/AGMCORE_deltaX 310 def
	clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
	0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
	0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
	0 AGMCORE_&setgray
	gsave 1 AGMCORE_&setgray fill grestore 
	1 setlinewidth gsave stroke grestore
	currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
	/AGMCORE_deltaY 12 def
	/AGMCORE_tmp 0 def
	AGMCORE_err_strings exch get
		{
		dup 32 eq
			{
			pop
			AGMCORE_str256 0 AGMCORE_tmp getinterval
			stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
				{
				currentpoint AGMCORE_deltaY sub exch pop
				clippath pathbbox pop pop pop 44 add exch moveto
				} if
			AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
			0 1 AGMCORE_str256 length 1 sub
				{
				AGMCORE_str256 exch 0 put
				}for
			/AGMCORE_tmp 0 def
			}
			{
				AGMCORE_str256 exch AGMCORE_tmp xpt
				/AGMCORE_tmp AGMCORE_tmp 1 add def
			} ifelse
		} forall
} bdf
/doc_setup{
	Adobe_AGM_Core begin
	/AGMCORE_ps_version xdf
	/AGMCORE_ps_level xdf
	errordict /AGM_handleerror known not{
		errordict /AGM_handleerror errordict /handleerror get put
		errordict /handleerror {
			Adobe_AGM_Core begin
			$error /newerror get AGMCORE_cur_err null ne and{
				$error /newerror false put
				AGMCORE_cur_err compose_error_msg
			}if
			$error /newerror true put
			end
			errordict /AGM_handleerror get exec
			} bind put
		}if
	/AGMCORE_environ_ok 
		ps_level AGMCORE_ps_level ge
		ps_version AGMCORE_ps_version ge and 
		AGMCORE_ps_level -1 eq or
	def
	AGMCORE_environ_ok not
		{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
	/AGMCORE_&setgray systemdict/setgray get def
	level2{
		/AGMCORE_&setcolor systemdict/setcolor get def
		/AGMCORE_&setcolorspace systemdict/setcolorspace get def
	}if
	/AGMCORE_currentbg currentblackgeneration def
	/AGMCORE_currentucr currentundercolorremoval def
	/AGMCORE_distilling
		/product where{
			pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
		}{
			false
		}ifelse
	def
	level2 not{
		/xput{
			dup load dup length exch maxlength eq{
				dup dup load dup
				length dup 0 eq {pop 1} if 2 mul dict copy def
			}if
			load begin
				def
 			end
		}def
	}{
		/xput{
			load 3 1 roll put
		}def
	}ifelse
	/AGMCORE_GSTATE AGMCORE_key_known not{
		/AGMCORE_GSTATE 21 dict def
		/AGMCORE_tmpmatrix matrix def
		/AGMCORE_gstack 32 array def
		/AGMCORE_gstackptr 0 def
		/AGMCORE_gstacksaveptr 0 def
		/AGMCORE_gstackframekeys 10 def
		/AGMCORE_&gsave /gsave ldf
		/AGMCORE_&grestore /grestore ldf
		/AGMCORE_&grestoreall /grestoreall ldf
		/AGMCORE_&save /save ldf
		/AGMCORE_gdictcopy {
			begin
			{ def } forall
			end
		}def
		/AGMCORE_gput {
			AGMCORE_gstack AGMCORE_gstackptr get
			3 1 roll
			put
		}def
		/AGMCORE_gget {
			AGMCORE_gstack AGMCORE_gstackptr get
			exch
			get
		}def
		/gsave {
			AGMCORE_&gsave
			AGMCORE_gstack AGMCORE_gstackptr get
			AGMCORE_gstackptr 1 add
			dup 32 ge {limitcheck} if
			Adobe_AGM_Core exch
			/AGMCORE_gstackptr xpt
			AGMCORE_gstack AGMCORE_gstackptr get
			AGMCORE_gdictcopy
		}def
		/grestore {
			AGMCORE_&grestore
			AGMCORE_gstackptr 1 sub
			dup AGMCORE_gstacksaveptr lt {1 add} if
			Adobe_AGM_Core exch
			/AGMCORE_gstackptr xpt
		}def
		/grestoreall {
			AGMCORE_&grestoreall
			Adobe_AGM_Core
			/AGMCORE_gstackptr AGMCORE_gstacksaveptr put 
		}def
		/save {
			AGMCORE_&save
			AGMCORE_gstack AGMCORE_gstackptr get
			AGMCORE_gstackptr 1 add
			dup 32 ge {limitcheck} if
			Adobe_AGM_Core begin
				/AGMCORE_gstackptr exch def
				/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
			end
			AGMCORE_gstack AGMCORE_gstackptr get
			AGMCORE_gdictcopy
		}def
		0 1 AGMCORE_gstack length 1 sub {
				AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
		} for
	}if
	level3 /AGMCORE_&sysshfill AGMCORE_key_known not and
	{
		/AGMCORE_&sysshfill systemdict/shfill get def
		/AGMCORE_&usrshfill /shfill load def
		/AGMCORE_&sysmakepattern systemdict/makepattern get def
		/AGMCORE_&usrmakepattern /makepattern load def
	}if
	/currentcmykcolor [0 0 0 0] AGMCORE_gput
	/currentstrokeadjust false AGMCORE_gput
	/currentcolorspace [/DeviceGray] AGMCORE_gput
	/sep_tint 0 AGMCORE_gput
	/devicen_tints [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 0 0 0 0 0 0 0] AGMCORE_gput
	/sep_colorspace_dict null AGMCORE_gput
	/devicen_colorspace_dict null AGMCORE_gput
	/indexed_colorspace_dict null AGMCORE_gput
	/currentcolor_intent () AGMCORE_gput
	/customcolor_tint 1 AGMCORE_gput
	<<
	/MaxPatternItem currentsystemparams /MaxPatternCache get
	>>
	setuserparams
	end
}def
/page_setup
{
	/setcmykcolor where{
		pop
		Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
	}if
	Adobe_AGM_Core begin
	/setcmykcolor
	{
		4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
		1 sub 4 1 roll
		3 {
			3 index add neg dup 0 lt {
				pop 0
			} if
			3 1 roll
		} repeat
		setrgbcolor pop
	}ndf
	/currentcmykcolor
	{
		/currentcmykcolor AGMCORE_gget aload pop
	}ndf
	/setoverprint
	{
		pop
	}ndf
	/currentoverprint
	{
		false
	}ndf
	/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
	/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
	/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
	/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
	/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
	/AGMCORE_plate_ndx 
		AGMCORE_cyan_plate{ 
			0
		}{
			AGMCORE_magenta_plate{
				1
			}{
				AGMCORE_yellow_plate{
					2
				}{
					AGMCORE_black_plate{
						3
					}{
						4
					}ifelse
				}ifelse
			}ifelse
		}ifelse
		def
	/AGMCORE_have_reported_unsupported_color_space false def
	/AGMCORE_report_unsupported_color_space
	{
		AGMCORE_have_reported_unsupported_color_space false eq
		{
			(Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.) ==
			Adobe_AGM_Core /AGMCORE_have_reported_unsupported_color_space true ddf
		} if
	}def
	/AGMCORE_composite_job
		AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
	/AGMCORE_in_rip_sep
		/AGMCORE_in_rip_sep where{
			pop AGMCORE_in_rip_sep
		}{
			AGMCORE_distilling 
			{
				false
			}{
				userdict/Adobe_AGM_OnHost_Seps known{
					false
				}{
					level2{
						currentpagedevice/Separations 2 copy known{
							get
						}{
							pop pop false
						}ifelse
					}{
						false
					}ifelse
				}ifelse
			}ifelse
		}ifelse
	def
	/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
	/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
	/AGM_preserve_spots 
		/AGM_preserve_spots where{
			pop AGM_preserve_spots
		}{
			AGMCORE_distilling AGMCORE_producing_seps or
		}ifelse
	def
	/AGM_is_distiller_preserving_spotimages
	{
		currentdistillerparams/PreserveOverprintSettings known
		{
			currentdistillerparams/PreserveOverprintSettings get
				{
					currentdistillerparams/ColorConversionStrategy known
					{
						currentdistillerparams/ColorConversionStrategy get
						/LeaveColorUnchanged eq
					}{
						true
					}ifelse
				}{
					false
				}ifelse
		}{
			false
		}ifelse
	}def
	/convert_spot_to_process where {pop}{
		/convert_spot_to_process
		{
			dup map_alias {
				/Name get exch pop
			} if
			dup dup (None) eq exch (All) eq or
				{
				pop false
				}{
				AGMCORE_host_sep
				{ 
					gsave
					1 0 0 0 setcmykcolor currentgray 1 exch sub
					0 1 0 0 setcmykcolor currentgray 1 exch sub
					0 0 1 0 setcmykcolor currentgray 1 exch sub
					0 0 0 1 setcmykcolor currentgray 1 exch sub
					add add add 0 eq
					{
						pop false
					}{
						false setoverprint
						1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
						currentgray 0 eq
					}ifelse
					grestore
				}{
					AGMCORE_distilling
					{
						pop AGM_is_distiller_preserving_spotimages not
					}{
						Adobe_AGM_Core/AGMCORE_name xddf
						false
						Adobe_AGM_Core/AGMCORE_in_pattern known {Adobe_AGM_Core/AGMCORE_in_pattern get}{false} ifelse
						not currentpagedevice/OverrideSeparations known and
							{
							currentpagedevice/OverrideSeparations get
								{
								/HqnSpots /ProcSet resourcestatus
									{
									pop pop pop true
									}if
								}if
							}if					
							{
							AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
							}{
							gsave
							[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
							false
							currentpagedevice/SeparationColorNames 2 copy known
							{
								get
								{ AGMCORE_name eq or}forall
							not
							}{
								pop pop pop true
							}ifelse
							grestore
						}ifelse
					}ifelse
				}ifelse
			}ifelse
		}def
	}ifelse
	/convert_to_process where {pop}{
		/convert_to_process
		{
			dup length 0 eq
				{
				pop false
				}{
				AGMCORE_host_sep
				{ 
				dup true exch
					{
					dup (Cyan) eq exch
					dup (Magenta) eq 3 -1 roll or exch
					dup (Yellow) eq 3 -1 roll or exch
					dup (Black) eq 3 -1 roll or
						{pop}
						{convert_spot_to_process and}ifelse
					}
				forall
					{
					true exch
						{
						dup (Cyan) eq exch
						dup (Magenta) eq 3 -1 roll or exch
						dup (Yellow) eq 3 -1 roll or exch
						(Black) eq or and
						}forall
						not
					}{pop false}ifelse
				}{
				false exch
					{
					dup (Cyan) eq exch
					dup (Magenta) eq 3 -1 roll or exch
					dup (Yellow) eq 3 -1 roll or exch
					dup (Black) eq 3 -1 roll or
					{pop}
					{convert_spot_to_process or}ifelse
					}
				forall
				}ifelse
			}ifelse
		}def
	}ifelse	
	/AGMCORE_avoid_L2_sep_space  
		version cvr 2012 lt 
		level2 and 
		AGMCORE_producing_seps not and
	def
	/AGMCORE_is_cmyk_sep
		AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
	def
	/AGM_avoid_0_cmyk where{
		pop AGM_avoid_0_cmyk
	}{
		AGM_preserve_spots 
		userdict/Adobe_AGM_OnHost_Seps known 
		userdict/Adobe_AGM_InRip_Seps known or
		not and
	}ifelse
	{
		/setcmykcolor[
			{
				4 copy add add add 0 eq currentoverprint and{
					pop 0.0005
				}if
			}/exec cvx
			/AGMCORE_&setcmykcolor load dup type/operatortype ne{
				/exec cvx
			}if
		]cvx def
	}if
	AGMCORE_host_sep{
		/setcolortransfer
		{ 
			AGMCORE_cyan_plate{
				pop pop pop
			}{
			  	AGMCORE_magenta_plate{
			  		4 3 roll pop pop pop
			  	}{
			  		AGMCORE_yellow_plate{
			  			4 2 roll pop pop pop
			  		}{
			  			4 1 roll pop pop pop
			  		}ifelse
			  	}ifelse
			}ifelse
			settransfer  
		}	
		def
		/AGMCORE_get_ink_data
			AGMCORE_cyan_plate{
				{pop pop pop}
			}{
			  	AGMCORE_magenta_plate{
			  		{4 3 roll pop pop pop}
			  	}{
			  		AGMCORE_yellow_plate{
			  			{4 2 roll pop pop pop}
			  		}{
			  			{4 1 roll pop pop pop}
			  		}ifelse
			  	}ifelse
			}ifelse
		def
		/AGMCORE_RemoveProcessColorNames
			{
			1 dict begin
			/filtername
				{
				dup /Cyan eq 1 index (Cyan) eq or
					{pop (_cyan_)}if
				dup /Magenta eq 1 index (Magenta) eq or
					{pop (_magenta_)}if
				dup /Yellow eq 1 index (Yellow) eq or
					{pop (_yellow_)}if
				dup /Black eq 1 index (Black) eq or
					{pop (_black_)}if
				}def
			dup type /arraytype eq
				{[exch {filtername}forall]}
				{filtername}ifelse
			end
			}def
		/AGMCORE_IsSeparationAProcessColor
			{
			dup (Cyan) eq exch dup (Magenta) eq exch dup (Yellow) eq exch (Black) eq or or or
			}def
		level3 {
			/AGMCORE_IsCurrentColor
				{
				gsave
				false setoverprint
				1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
				currentgray 0 eq 
				grestore
				}def
			/AGMCORE_filter_functiondatasource
				{	
				5 dict begin
				/data_in xdf
				data_in type /stringtype eq
					{
					/ncomp xdf
					/comp xdf
					/string_out data_in length ncomp idiv string def
					0 ncomp data_in length 1 sub
						{
						string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
						}for
					string_out
					}{
					string /string_in xdf
					/string_out 1 string def
					/component xdf
					[
					data_in string_in /readstring cvx
						[component /get cvx 255 /exch cvx /sub cvx string_out /exch cvx 0 /exch cvx /put cvx string_out]cvx
						[/pop cvx ()]cvx /ifelse cvx
					]cvx /ReusableStreamDecode filter
				}ifelse
				end
				}def
			/AGMCORE_separateShadingFunction
				{
				2 dict begin
				/paint? xdf
				/channel xdf
					begin
					FunctionType 0 eq
						{
						/DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
						currentdict /Decode known
							{/Decode Decode channel 2 mul 2 getinterval def}if
						paint? not
							{/Decode [1 1]def}if
						}if
					FunctionType 2 eq
						{
						paint?
							{
							/C0 [C0 channel get 1 exch sub] def
							/C1 [C1 channel get 1 exch sub] def
							}{
							/C0 [1] def
							/C1 [1] def
							}ifelse			
						}if
					FunctionType 3 eq
						{
						/Functions [Functions {channel paint? AGMCORE_separateShadingFunction} forall] def			
						}if
					currentdict /Range known
						{/Range [0 1] def}if
					currentdict
					end
				end
				}def
			/AGMCORE_separateShading
				{
				3 -1 roll begin
				currentdict /Function known
					{
					currentdict /Background known
						{[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
					Function 3 1 roll AGMCORE_separateShadingFunction /Function xdf
					/ColorSpace [/DeviceGray] def
					}{
					ColorSpace dup type /arraytype eq {0 get}if /DeviceCMYK eq
						{
						/ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}] def
						}{
						ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
						}ifelse
					ColorSpace 0 get /Separation eq
						{
							{
								[1 /exch cvx /sub cvx]cvx
							}{
								[/pop cvx 1]cvx
							}ifelse
							ColorSpace 3 3 -1 roll put
							pop
						}{
							{
								[exch ColorSpace 1 get length 1 sub exch sub /index cvx 1 /exch cvx /sub cvx ColorSpace 1 get length 1 add 1 /roll cvx ColorSpace 1 get length{/pop cvx} repeat]cvx
							}{
								pop [ColorSpace 1 get length {/pop cvx} repeat cvx 1]cvx
							}ifelse
							ColorSpace 3 3 -1 roll bind put
						}ifelse
					ColorSpace 2 /DeviceGray put																		
					}ifelse
				end
				}def
			/AGMCORE_separateShadingDict
				{
				dup /ColorSpace get
				dup type /arraytype ne
					{[exch]}if
				dup 0 get /DeviceCMYK eq
					{
					exch begin 
					currentdict
					AGMCORE_cyan_plate
						{0 true}if
					AGMCORE_magenta_plate
						{1 true}if
					AGMCORE_yellow_plate
						{2 true}if
					AGMCORE_black_plate
						{3 true}if
					AGMCORE_plate_ndx 4 eq
						{0 false}if		
					dup not currentoverprint and
						{/AGMCORE_ignoreshade true def}if
					AGMCORE_separateShading
					currentdict
					end exch
					}if
				dup 0 get /Separation eq
					{
					exch begin
					ColorSpace 1 get dup /None ne exch /All ne and
						{
						ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
							{
							ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq 
								{
								/ColorSpace
									[
									/Separation
									ColorSpace 1 get
									/DeviceGray
										[
										ColorSpace 3 get /exec cvx
										4 AGMCORE_plate_ndx sub -1 /roll cvx
										4 1 /roll cvx
										3 [/pop cvx]cvx /repeat cvx
										1 /exch cvx /sub cvx
										]cvx									
									]def
								}{
								AGMCORE_report_unsupported_color_space
								AGMCORE_black_plate not
									{
									currentdict 0 false AGMCORE_separateShading
									}if
								}ifelse
							}{
							currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
							0 exch 
							dup not currentoverprint and
								{/AGMCORE_ignoreshade true def}if
							AGMCORE_separateShading
							}ifelse	
						}if			
					currentdict
					end exch
					}if
				dup 0 get /DeviceN eq
					{
					exch begin
					ColorSpace 1 get convert_to_process
						{
						ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq 
							{
							/ColorSpace
								[
								/DeviceN
								ColorSpace 1 get
								/DeviceGray
									[
									ColorSpace 3 get /exec cvx
									4 AGMCORE_plate_ndx sub -1 /roll cvx
									4 1 /roll cvx
									3 [/pop cvx]cvx /repeat cvx
									1 /exch cvx /sub cvx
									]cvx									
								]def
							}{
							AGMCORE_report_unsupported_color_space
							AGMCORE_black_plate not
								{
								currentdict 0 false AGMCORE_separateShading
								/ColorSpace [/DeviceGray] def
								}if
							}ifelse
						}{
						currentdict
						false -1 ColorSpace 1 get
							{
							AGMCORE_IsCurrentColor
								{
								1 add
								exch pop true exch exit
								}if
							1 add
							}forall
						exch 
						dup not currentoverprint and
							{/AGMCORE_ignoreshade true def}if
						AGMCORE_separateShading
						}ifelse
					currentdict
					end exch
					}if
				dup 0 get dup /DeviceCMYK eq exch dup /Separation eq exch /DeviceN eq or or not
					{
					exch begin
					ColorSpace dup type /arraytype eq
						{0 get}if
					/DeviceGray ne
						{
						AGMCORE_report_unsupported_color_space
						AGMCORE_black_plate not
							{
							ColorSpace 0 get /CIEBasedA eq
								{
								/ColorSpace [/Separation /_ciebaseda_ /DeviceGray {}] def
								}if
							ColorSpace 0 get dup /CIEBasedABC eq exch dup /CIEBasedDEF eq exch /DeviceRGB eq or or
								{
								/ColorSpace [/DeviceN [/_red_ /_green_ /_blue_] /DeviceRGB {}] def
								}if
							ColorSpace 0 get /CIEBasedDEFG eq
								{
								/ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}]
								}if
							currentdict 0 false AGMCORE_separateShading
							}if
						}if
					currentdict
					end exch
					}if
				pop
				dup /AGMCORE_ignoreshade known
					{
					begin
					/ColorSpace [/Separation (None) /DeviceGray {}] def
					currentdict end
					}if
				}def
			/shfill
				{
				clonedict
				AGMCORE_separateShadingDict 
				dup /AGMCORE_ignoreshade known
					{pop}
					{AGMCORE_&sysshfill}ifelse
				}def
			/makepattern
				{
				exch
				dup /PatternType get 2 eq
					{
					clonedict
					begin
					/Shading Shading AGMCORE_separateShadingDict def
					currentdict end
					exch AGMCORE_&sysmakepattern
					}{
					exch AGMCORE_&usrmakepattern
					}ifelse
				}def
		}if
	}if
	AGMCORE_in_rip_sep{
		/setcustomcolor
		{
			exch aload pop
			dup 7 1 roll inRip_spot_has_ink not	{ 
				4 {4 index mul 4 1 roll}
				repeat
				/DeviceCMYK setcolorspace
				6 -2 roll pop pop
			}{ 
				Adobe_AGM_Core begin
					/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
				end
				[/Separation 4 -1 roll /DeviceCMYK
				{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
				]
				setcolorspace
			}ifelse
			setcolor
		}ndf
		/setseparationgray
		{
			[/Separation (All) /DeviceGray {}] setcolorspace_opt
			1 exch sub setcolor
		}ndf
	}{
		/setseparationgray
		{
			AGMCORE_&setgray
		}ndf
	}ifelse
	/findcmykcustomcolor
	{
		5 makereadonlyarray
	}ndf
	/setcustomcolor
	{
		exch aload pop pop
		4 {4 index mul 4 1 roll} repeat
		setcmykcolor pop
	}ndf
	/has_color
		/colorimage where{
			AGMCORE_producing_seps{
				pop true
			}{
				systemdict eq
			}ifelse
		}{
			false
		}ifelse
	def
	/map_index
	{
		1 index mul exch getinterval {255 div} forall
	} bdf
	/map_indexed_devn
	{
		Lookup Names length 3 -1 roll cvi map_index
	} bdf
	/n_color_components
	{
		base_colorspace_type
		dup /DeviceGray eq{
			pop 1
		}{
			/DeviceCMYK eq{
				4
			}{
				3
			}ifelse
		}ifelse
	}bdf
	level2{
		/mo /moveto ldf
		/li /lineto ldf
		/cv /curveto ldf
		/knockout_unitsq
		{
			1 setgray
			0 0 1 1 rectfill
		}def
		/level2ScreenFreq{
			begin
			60
			HalftoneType 1 eq{
				pop Frequency
			}if
			HalftoneType 2 eq{
				pop GrayFrequency
			}if
			HalftoneType 5 eq{
				pop Default level2ScreenFreq
			}if
			 end
		}def
		/currentScreenFreq{
			currenthalftone level2ScreenFreq
		}def
		level2 /setcolorspace AGMCORE_key_known not and{
			/AGMCORE_&&&setcolorspace /setcolorspace ldf
			/AGMCORE_ReplaceMappedColor
			{
				dup type dup /arraytype eq exch /packedarraytype eq or
				{
					dup 0 get dup /Separation eq
					{
						pop
						dup length array copy
						dup dup 1 get
						current_spot_alias
						{
							dup map_alias
							{
								begin
								/sep_colorspace_dict currentdict AGMCORE_gput
								pop pop	pop
								[ 
									/Separation Name 
									CSA map_csa
									dup /MappedCSA xdf 
									/sep_colorspace_proc load
								]
								dup Name
								end
							}if
						}if
						map_reserved_ink_name 1 xpt
					}{
						/DeviceN eq 
						{
							dup length array copy
							dup dup 1 get [ 
								exch {
									current_spot_alias{
										dup map_alias{
											/Name get exch pop
										}if
									}if
									map_reserved_ink_name
								} forall 
							] 1 xpt
						}if
					}ifelse
				}if
			}def
			/setcolorspace
			{
				dup type dup /arraytype eq exch /packedarraytype eq or
				{
					dup 0 get /Indexed eq
					{
						AGMCORE_distilling
						{
							/PhotoshopDuotoneList where
							{
								pop false
							}{
								true
							}ifelse
						}{
							true
						}ifelse
						{
							aload pop 3 -1 roll
							AGMCORE_ReplaceMappedColor
							3 1 roll 4 array astore
						}if
					}{
						AGMCORE_ReplaceMappedColor
					}ifelse
				}if
				DeviceN_PS2_inRip_seps {AGMCORE_&&&setcolorspace} if
			}def
		}if	
	}{
		/adj
		{
			currentstrokeadjust{
				transform
				0.25 sub round 0.25 add exch
				0.25 sub round 0.25 add exch
				itransform
			}if
		}def
		/mo{
			adj moveto
		}def
		/li{
			adj lineto
		}def
		/cv{
			6 2 roll adj
			6 2 roll adj
			6 2 roll adj curveto
		}def
		/knockout_unitsq
		{
			1 setgray
			8 8 1 [8 0 0 8 0 0] {<ffffffffffffffff>} image
		}def
		/currentstrokeadjust{
			/currentstrokeadjust AGMCORE_gget
		}def
		/setstrokeadjust{
			/currentstrokeadjust exch AGMCORE_gput
		}def
		/currentScreenFreq{
			currentscreen pop pop
		}def
		/setcolorspace
		{
			/currentcolorspace exch AGMCORE_gput
		} def
		/currentcolorspace
		{
			/currentcolorspace AGMCORE_gget
		} def
		/setcolor_devicecolor
		{
			base_colorspace_type
			dup /DeviceGray eq{
				pop setgray
			}{
				/DeviceCMYK eq{
					setcmykcolor
				}{
					setrgbcolor
				}ifelse
			}ifelse
		}def
		/setcolor
		{
			currentcolorspace 0 get
			dup /DeviceGray ne{
				dup /DeviceCMYK ne{
					dup /DeviceRGB ne{
						dup /Separation eq{
							pop
							currentcolorspace 3 get exec
							currentcolorspace 2 get
						}{
							dup /Indexed eq{
								pop
								currentcolorspace 3 get dup type /stringtype eq{
									currentcolorspace 1 get n_color_components
									3 -1 roll map_index
								}{
									exec
								}ifelse
								currentcolorspace 1 get
							}{
								/AGMCORE_cur_err /AGMCORE_invalid_color_space def
								AGMCORE_invalid_color_space
							}ifelse
						}ifelse
					}if
				}if
			}if
			setcolor_devicecolor
		} def
	}ifelse
	/sop /setoverprint ldf
	/lw /setlinewidth ldf
	/lc /setlinecap ldf
	/lj /setlinejoin ldf
	/ml /setmiterlimit ldf
	/dsh /setdash ldf
	/sadj /setstrokeadjust ldf
	/gry /setgray ldf
	/rgb /setrgbcolor ldf
	/cmyk /setcmykcolor ldf
	/sep /setsepcolor ldf
	/devn /setdevicencolor ldf
	/idx /setindexedcolor ldf
	/colr /setcolor ldf
	/csacrd /set_csa_crd ldf
	/sepcs /setsepcolorspace ldf
	/devncs /setdevicencolorspace ldf
	/idxcs /setindexedcolorspace ldf
	/cp /closepath ldf
	/clp /clp_npth ldf
	/eclp /eoclp_npth ldf
	/f /fill ldf
	/ef /eofill ldf
	/@ /stroke ldf
	/nclp /npth_clp ldf
	/gset /graphic_setup ldf
	/gcln /graphic_cleanup ldf
	currentdict{
		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
			bind
		}if
		def
	}forall
	/currentpagedevice currentpagedevice def
/getrampcolor {
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
ColorSpaceFamily /Separation eq
	{
	sep
	}
	{
	ColorSpaceFamily /DeviceN eq
		{
		devn
		}
		{
		setcolor
		}ifelse
	}ifelse
} bind def
/sssetbackground { aload pop setcolor } bind def
/RadialShade {
40 dict begin
/ColorSpaceFamily exch def
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
/setinkoverprint where {pop /setinkoverprint{pop}def}if
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
/theta AA 1 AA dup mul sub sqrt div 1 atan def
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round cvi } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
/theta AA 1 AA dup mul sub sqrt div 1 atan def
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bind def
/GenStrips {
40 dict begin
/ColorSpaceFamily exch def
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
/setinkoverprint where {pop /setinkoverprint{pop}def}if
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round cvi } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bind def
}def
/page_trailer
{
	end
}def
/doc_trailer{
}def
systemdict /findcolorrendering known{
	/findcolorrendering systemdict /findcolorrendering get def
}if
systemdict /setcolorrendering known{
	/setcolorrendering systemdict /setcolorrendering get def
}if
/test_cmyk_color_plate
{
	gsave
	setcmykcolor currentgray 1 ne
	grestore
}def
/inRip_spot_has_ink
{
	dup Adobe_AGM_Core/AGMCORE_name xddf
	convert_spot_to_process not
}def
/map255_to_range
{
	1 index sub
	3 -1 roll 255 div mul add
}def
/set_csa_crd
{
	/sep_colorspace_dict null AGMCORE_gput
	begin
		CSA map_csa setcolorspace_opt
		set_crd
	end
}
def
/setsepcolor
{ 
	/sep_colorspace_dict AGMCORE_gget begin
		dup /sep_tint exch AGMCORE_gput
		TintProc
	end
} def
/setdevicencolor
{ 
	/devicen_colorspace_dict AGMCORE_gget begin
		Names length copy
		Names length 1 sub -1 0
		{
			/devicen_tints AGMCORE_gget 3 1 roll xpt
		} for
		TintProc
	end
} def
/sep_colorspace_proc
{
	Adobe_AGM_Core/AGMCORE_tmp xddf
	/sep_colorspace_dict AGMCORE_gget begin
	currentdict/Components known{
		Components aload pop 
		TintMethod/Lab eq{
			2 {AGMCORE_tmp mul NComponents 1 roll} repeat
			LMax sub AGMCORE_tmp mul LMax add  NComponents 1 roll
		}{
			TintMethod/Subtractive eq{
				NComponents{
					AGMCORE_tmp mul NComponents 1 roll
				}repeat
			}{
				NComponents{
					1 sub AGMCORE_tmp mul 1 add  NComponents 1 roll
				} repeat
			}ifelse
		}ifelse
	}{
		ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
		aload pop
	}ifelse
	end
} def
/sep_colorspace_gray_proc
{
	Adobe_AGM_Core/AGMCORE_tmp xddf
	/sep_colorspace_dict AGMCORE_gget begin
	GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
	end
} def
/sep_proc_name
{
	dup 0 get 
	dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
		pop [/DeviceGray]
		/sep_colorspace_gray_proc
	}{
		/sep_colorspace_proc
	}ifelse
} def
/setsepcolorspace
{ 
	current_spot_alias{
		dup begin
			Name map_alias{
				exch pop
			}if
		end
	}if
	dup /sep_colorspace_dict exch AGMCORE_gput
	begin
	/MappedCSA CSA map_csa def
	Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
	AGMCORE_avoid_L2_sep_space{
		[/Indexed MappedCSA sep_proc_name 255 exch 
			{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx 
		] setcolorspace_opt
		/TintProc {
			255 mul round cvi setcolor
		}bdf
	}{
		MappedCSA 0 get /DeviceCMYK eq 
		currentdict/Components known and 
		AGMCORE_sep_special not and{
			/TintProc [
				Components aload pop Name findcmykcustomcolor 
				/exch cvx /setcustomcolor cvx
			] cvx bdf
		}{
 			AGMCORE_host_sep Name (All) eq and{
 				/TintProc { 
					1 exch sub setseparationgray 
				}bdf
 			}{
				AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and 
				AGMCORE_host_sep or
				Name () eq and{
					/TintProc [
						MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
							cvx /setcmykcolor cvx
						}{
							cvx /setgray cvx
						}ifelse
					] cvx bdf
				}{
					AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
	 					/TintProc [
							/dup cvx
							MappedCSA sep_proc_name cvx exch
							0 get /DeviceGray eq{
								1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
							}if
							/Name cvx /findcmykcustomcolor cvx /exch cvx
							AGMCORE_host_sep{
								AGMCORE_is_cmyk_sep
								/Name cvx 
								/AGMCORE_IsSeparationAProcessColor load /exec cvx
								/not cvx /and cvx 
							}{
								Name inRip_spot_has_ink not
							}ifelse
							[
		 						/pop cvx 1
							] cvx /if cvx
							/setcustomcolor cvx
						] cvx bdf
 					}{ 
						/TintProc /setcolor ldf
						[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
					}ifelse
				}ifelse
			}ifelse
		}ifelse
	}ifelse
	set_crd
	setsepcolor
	end
} def
/additive_blend
{
  	3 dict begin
  	/numarrays xdf
  	/numcolors xdf
  	0 1 numcolors 1 sub
  		{
  		/c1 xdf
  		1
  		0 1 numarrays 1 sub
  			{
			1 exch add /index cvx
  			c1 /get cvx /mul cvx
  			}for
 		numarrays 1 add 1 /roll cvx 
  		}for
 	numarrays [/pop cvx] cvx /repeat cvx
  	end
}def
/subtractive_blend
{
	3 dict begin
	/numarrays xdf
	/numcolors xdf
	0 1 numcolors 1 sub
		{
		/c1 xdf
		1 1
		0 1 numarrays 1 sub
			{
			1 3 3 -1 roll add /index cvx  
			c1 /get cvx /sub cvx /mul cvx
			}for
		/sub cvx
		numarrays 1 add 1 /roll cvx
		}for
	numarrays [/pop cvx] cvx /repeat cvx
	end
}def
/exec_tint_transform
{
	/TintProc [
		/TintTransform cvx /setcolor cvx
	] cvx bdf
	MappedCSA setcolorspace_opt
} bdf
/devn_makecustomcolor
{
	2 dict begin
	/names_index xdf
	/Names xdf
	1 1 1 1 Names names_index get findcmykcustomcolor
	/devicen_tints AGMCORE_gget names_index get setcustomcolor
	Names length {pop} repeat
	end
} bdf
/setdevicencolorspace
{ 
	dup /AliasedColorants known {false}{true}ifelse 
	current_spot_alias and {
		6 dict begin
		/names_index 0 def
		dup /names_len exch /Names get length def
		/new_names names_len array def
		/new_LookupTables names_len array def
		/alias_cnt 0 def
		dup /Names get
		{
			dup map_alias {
				exch pop
				dup /ColorLookup known {
					dup begin
					new_LookupTables names_index ColorLookup put
					end
				}{
					dup /Components known {
						dup begin
						new_LookupTables names_index Components put
						end
					}{
						dup begin
						new_LookupTables names_index [null null null null] put
						end
					} ifelse
				} ifelse
				new_names names_index 3 -1 roll /Name get put
				/alias_cnt alias_cnt 1 add def 
			}{
				/name xdf				
				new_names names_index name put
				dup /LookupTables known {
					dup begin
					new_LookupTables names_index LookupTables names_index get put
					end
				}{
					dup begin
					new_LookupTables names_index [null null null null] put
					end
				} ifelse
			} ifelse
			/names_index names_index 1 add def 
		} forall
		alias_cnt 0 gt {
			/AliasedColorants true def
			0 1 names_len 1 sub {
				/names_index xdf
				new_LookupTables names_index get 0 get null eq {
					dup /Names get names_index get /name xdf
					name (Cyan) eq name (Magenta) eq name (Yellow) eq name (Black) eq
					or or or not {
						/AliasedColorants false def
						exit
					} if
				} if
			} for
			AliasedColorants {
				dup begin
				/Names new_names def
				/AliasedColorants true def
				/LookupTables new_LookupTables def
				currentdict /TTTablesIdx known not {
					/TTTablesIdx -1 def
				} if
				currentdict /NComponents known not {
					/NComponents TintMethod /Subtractive eq {4}{3}ifelse def
				} if
				end
			} if
		}if
		end
	} if
	dup /devicen_colorspace_dict exch AGMCORE_gput
	begin
	/MappedCSA CSA map_csa def
	currentdict /AliasedColorants known {
		AliasedColorants
	}{
		false
	} ifelse
	/TintTransform load type /nulltype eq or {
		/TintTransform [
			0 1 Names length 1 sub
				{
				/TTTablesIdx TTTablesIdx 1 add def
				dup LookupTables exch get dup 0 get null eq
					{
					1 index
					Names exch get
					dup (Cyan) eq
						{
						pop exch
						LookupTables length exch sub
						/index cvx
						0 0 0
						}
						{
						dup (Magenta) eq
							{
							pop exch
							LookupTables length exch sub
							/index cvx
							0 /exch cvx 0 0
							}
							{
							(Yellow) eq
								{
								exch
								LookupTables length exch sub
								/index cvx
								0 0 3 -1 /roll cvx 0
								}
								{
								exch
								LookupTables length exch sub
								/index cvx
								0 0 0 4 -1 /roll cvx
								} ifelse
							} ifelse
						} ifelse
					5 -1 /roll cvx /astore cvx
					}
					{
					dup length 1 sub
					LookupTables length 4 -1 roll sub 1 add
					/index cvx /mul cvx /round cvx /cvi cvx /get cvx
					} ifelse
					Names length TTTablesIdx add 1 add 1 /roll cvx
				} for
			Names length [/pop cvx] cvx /repeat cvx
			NComponents Names length
  			TintMethod /Subtractive eq
  				{
  				subtractive_blend
  				}
  				{
  				additive_blend
  				} ifelse
		] cvx bdf
	} if
	AGMCORE_host_sep {
		Names convert_to_process {
			exec_tint_transform
		}
		{	
			currentdict /AliasedColorants known {
				AliasedColorants not
			}{
				false
			} ifelse
			5 dict begin
			/AvoidAliasedColorants xdf
			/painted? false def
			/names_index 0 def
			/names_len Names length def
			Names {
				AvoidAliasedColorants {
					/currentspotalias current_spot_alias def
					false set_spot_alias
				} if
				AGMCORE_is_cmyk_sep {
					dup (Cyan) eq AGMCORE_cyan_plate and exch
					dup (Magenta) eq AGMCORE_magenta_plate and exch
					dup (Yellow) eq AGMCORE_yellow_plate and exch
					(Black) eq AGMCORE_black_plate and or or or {
						/devicen_colorspace_dict AGMCORE_gget /TintProc [
							Names names_index /devn_makecustomcolor cvx
						] cvx ddf
						/painted? true def
					} if
					painted? {exit} if
				}{
					0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq {
					/devicen_colorspace_dict AGMCORE_gget /TintProc [
						Names names_index /devn_makecustomcolor cvx
					] cvx ddf
					/painted? true def
					exit
					} if
				} ifelse
				AvoidAliasedColorants {
					currentspotalias set_spot_alias
				} if
				/names_index names_index 1 add def
			} forall
			painted? {
				/devicen_colorspace_dict AGMCORE_gget /names_index names_index put
			}{
				/devicen_colorspace_dict AGMCORE_gget /TintProc [
					names_len [/pop cvx] cvx /repeat cvx 1 /setseparationgray cvx
					0 0 0 0 () /findcmykcustomcolor cvx 0 /setcustomcolor cvx
				] cvx ddf
			} ifelse
			end
		} ifelse
	}
	{
		AGMCORE_in_rip_sep {
			Names convert_to_process not
		}{
			level3
		} ifelse
		{
			[/DeviceN Names MappedCSA /TintTransform load] setcolorspace_opt
			/TintProc level3 not AGMCORE_in_rip_sep and {
				[
					Names /length cvx [/pop cvx] cvx /repeat cvx
				] cvx bdf
			}{
				/setcolor ldf
			} ifelse
		}{
			exec_tint_transform
		} ifelse
	} ifelse
	set_crd
	/AliasedColorants false def
	end
} def
/setindexedcolorspace
{
	dup /indexed_colorspace_dict exch AGMCORE_gput
	begin
		currentdict /CSD known {
			CSD get_csd /Names known {
				CSD get_csd begin
				currentdict devncs
				AGMCORE_host_sep{
					4 dict begin
					/devnCompCnt Names length def
					/NewLookup HiVal 1 add string def
					0 1 HiVal {
						/tableIndex xdf
						Lookup dup type /stringtype eq {
							devnCompCnt tableIndex map_index
						}{
							exec
						} ifelse
						setdevicencolor
						currentgray
						tableIndex exch
						HiVal mul cvi 
						NewLookup 3 1 roll put
					} for
					[/Indexed currentcolorspace HiVal NewLookup] setcolorspace_opt
					end
				}{
					level3
					{
					[/Indexed [/DeviceN Names MappedCSA /TintTransform load] HiVal Lookup] setcolorspace_opt
					}{
					[/Indexed MappedCSA HiVal
						[
						Lookup dup type /stringtype eq
							{/exch cvx CSD get_csd /Names get length dup /mul cvx exch /getinterval cvx {255 div} /forall cvx}
							{/exec cvx}ifelse
							/TintTransform load /exec cvx
						]cvx
					]setcolorspace_opt
					}ifelse
				} ifelse
				end
			}{
			} ifelse
			set_crd
		}
		{
			/MappedCSA CSA map_csa def
			AGMCORE_host_sep level2 not and{
				0 0 0 0 setcmykcolor
			}{
				[/Indexed MappedCSA 
				level2 not has_color not and{
					dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
						pop [/DeviceGray]
					}if
					HiVal GrayLookup
				}{
					HiVal 
					currentdict/RangeArray known{
						{ 
							/indexed_colorspace_dict AGMCORE_gget begin
							Lookup exch 
							dup HiVal gt{
								pop HiVal
							}if
							NComponents mul NComponents getinterval {} forall
							NComponents 1 sub -1 0{
								RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
								NComponents 1 roll
							}for
							end
						} bind
					}{
						Lookup
					}ifelse
				}ifelse
				] setcolorspace_opt
				set_crd
			}ifelse
		}ifelse
	end
}def
/setindexedcolor
{
	AGMCORE_host_sep {
		/indexed_colorspace_dict AGMCORE_gget dup /CSD known {
			begin
			CSD get_csd begin
			map_indexed_devn
			devn
			end
			end
		}{
			AGMCORE_gget/Lookup get 4 3 -1 roll map_index
			pop setcmykcolor
		} ifelse
	}{
		level3 not AGMCORE_in_rip_sep and /indexed_colorspace_dict AGMCORE_gget /CSD known and {
			/indexed_colorspace_dict AGMCORE_gget /CSD get get_csd begin
			map_indexed_devn
			devn
			end
		}
		{
			setcolor
		} ifelse
	}ifelse
} def
/ignoreimagedata
{
	currentoverprint not{
		gsave
		dup clonedict begin
		1 setgray
		/Decode [0 1] def
		/DataSource <FF> def
		/MultipleDataSources false def
		/BitsPerComponent 8 def
		currentdict end
		systemdict /image get exec
		grestore
		}if
	consumeimagedata
}def
/add_csa
{
	Adobe_AGM_Core begin
			/AGMCORE_CSA_cache xput
	end
}def
/get_csa_by_name
{
	dup type dup /nametype eq exch /stringtype eq or{
		Adobe_AGM_Core begin
		1 dict begin
		/name xdf
		AGMCORE_CSA_cache
		{
			0 get name eq {
				exit
			}{
				pop
			} ifelse
		}forall
		end
		end
	}{
		pop
	} ifelse
}def
/map_csa
{
	dup type /nametype eq{
		Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
	}if
}def
/add_csd
{
	Adobe_AGM_Core begin
		/AGMCORE_CSD_cache xput
	end
}def
/get_csd
{
	dup type /nametype eq{
		Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
	}if
}def
/pattern_buf_init
{
	/count get 0 0 put
} def
/pattern_buf_next
{
	dup /count get dup 0 get
	dup 3 1 roll
	1 add 0 xpt
	get				
} def
/cachepattern_compress
{
	5 dict begin
	currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def
	/patarray 20 dict def
	/string_size 16000 def
	/readbuffer string_size string def
	currentglobal true setglobal 
	patarray 1 array dup 0 1 put /count xpt
	setglobal
	/LZWFilter 
	{
		exch
		dup length 0 eq {
			pop
		}{
			patarray dup length 1 sub 3 -1 roll put
		} ifelse
		{string_size}{0}ifelse string
	} /LZWEncode filter def
	{ 		
		ReadFilter readbuffer readstring
		exch LZWFilter exch writestring
		not {exit} if
	} loop
	LZWFilter closefile
	patarray				
	end
}def
/cachepattern
{
	2 dict begin
	currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def
	/patarray 20 dict def
	currentglobal true setglobal 
	patarray 1 array dup 0 1 put /count xpt
	setglobal
	{
		ReadFilter 16000 string readstring exch
		patarray dup length 1 sub 3 -1 roll put
		not {exit} if
	} loop
	patarray dup dup length 1 sub () put					
	end	
}def
/add_pattern
{
	Adobe_AGM_Core begin
		/AGMCORE_pattern_cache xput
	end
}def
/get_pattern
{
	dup type /nametype eq{
		Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
		dup wrap_paintproc
	}if
}def
/wrap_paintproc
{ 
  statusdict /currentfilenameextend known{
	  begin
		/OldPaintProc /PaintProc load def
		/PaintProc
		{
		  mark exch
		  dup /OldPaintProc get stopped
		  {closefile restore end} if
		  cleartomark
		}  def
	  end
  } {pop} ifelse
} def
/make_pattern
{
	dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
	exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
	exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
	matrix translate exch matrix concatmatrix
			  1 index begin
		BBox 0 get XStep div cvi XStep mul /xshift exch neg def
		BBox 1 get YStep div cvi YStep mul /yshift exch neg def
		BBox 0 get xshift add
		BBox 1 get yshift add
		BBox 2 get xshift add
		BBox 3 get yshift add
		4 array astore
		/BBox exch def
		[ xshift yshift /translate load null /exec load ] dup
		3 /PaintProc load put cvx /PaintProc exch def
		end
	gsave 0 setgray
	makepattern
	grestore
}def
/set_pattern
{
	dup /PatternType get 1 eq{
		dup /PaintType get 1 eq{
			currentoverprint sop [/DeviceGray] setcolorspace 0 setgray
		}if
	}if
	setpattern
}def
/setcolorspace_opt
{
	dup currentcolorspace eq{
		pop
	}{
		setcolorspace
	}ifelse
}def
/updatecolorrendering
{
	currentcolorrendering/Intent known{
		currentcolorrendering/Intent get
	}{
		null
	}ifelse
	Intent ne{
		false  
		Intent
		AGMCORE_CRD_cache {
			exch pop 
			begin
				dup Intent eq{
					currentdict setcolorrendering_opt
					end 
					exch pop true exch	
					exit
				}if
			end
		} forall
		pop
		not{
			systemdict /findcolorrendering known{
				Intent findcolorrendering pop
				/ColorRendering findresource 
				dup length dict copy
				setcolorrendering_opt
			}if
		}if
	}if
} def
/add_crd
{
	AGMCORE_CRD_cache 3 1 roll put
}def
/set_crd
{
	AGMCORE_host_sep not level2 and{
		currentdict/CRD known{
			AGMCORE_CRD_cache CRD get dup null ne{
				setcolorrendering_opt
			}{
				pop
			}ifelse
		}{
			currentdict/Intent known{
				updatecolorrendering
			}if
		}ifelse
		currentcolorspace dup type /arraytype eq
			{0 get}if
		/DeviceRGB eq
			{
			currentdict/UCR known
				{/UCR}{/AGMCORE_currentucr}ifelse
			load setundercolorremoval
			currentdict/BG known 
				{/BG}{/AGMCORE_currentbg}ifelse
			load setblackgeneration
			}if
	}if
}def
/setcolorrendering_opt
{
	dup currentcolorrendering eq{
		pop
	}{
		begin
			/Intent Intent def
			currentdict
		end
		setcolorrendering
	}ifelse
}def
/cpaint_gcomp
{
	convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
	Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
	{
		(%end_cpaint_gcomp) flushinput
	}if
}def
/cpaint_gsep
{
	Adobe_AGM_Core/AGMCORE_ConvertToProcess get
	{	
		(%end_cpaint_gsep) flushinput
	}if
}def
/cpaint_gend
{
	newpath
}def
/path_rez
{
	dup 0 ne{
		AGMCORE_deviceDPI exch div 
		dup 1 lt{
			pop 1
		}if
		setflat
	}{
		pop
	}ifelse 	
}def
/set_spot_alias_ary
{
	/AGMCORE_SpotAliasAry where{
		pop pop
	}{
		Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
		true set_spot_alias
	}ifelse
}def
/set_spot_alias
{
	/AGMCORE_SpotAliasAry where{
		/AGMCORE_current_spot_alias 3 -1 roll put
	}{
		pop
	}ifelse
}def
/current_spot_alias
{
	/AGMCORE_SpotAliasAry where{
		/AGMCORE_current_spot_alias get
	}{
		false
	}ifelse
}def
/map_alias
{
	/AGMCORE_SpotAliasAry where{
		begin
			/AGMCORE_name xdf
			false	
			AGMCORE_SpotAliasAry{
				dup/Name get AGMCORE_name eq{
					save exch
					/Adobe_AGM_Core currentdict def
					/CSD get get_csd
					exch restore
					exch pop true
					exit
				}{
					pop
				}ifelse
			}forall
		end
	}{
		pop false
	}ifelse
}bdf
/spot_alias
{
	true set_spot_alias
	/AGMCORE_&setcustomcolor AGMCORE_key_known not {
		Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
	} if
	/customcolor_tint 1 AGMCORE_gput
	Adobe_AGM_Core begin
	/setcustomcolor
	{
		dup /customcolor_tint exch AGMCORE_gput
		current_spot_alias{
			1 index 4 get map_alias{
				mark 3 1 roll
				setsepcolorspace
				counttomark 0 ne{
					setsepcolor
				}if
				pop
				pop
			}{
				AGMCORE_&setcustomcolor
			}ifelse
		}{
			AGMCORE_&setcustomcolor
		}ifelse
	}bdf
	end
}def
/begin_feature
{
	Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
	count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
	{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
}def
/end_feature
{
	2 dict begin
	/spd /setpagedevice load def
	/setpagedevice { get_gstate spd set_gstate } def
	stopped{$error/newerror false put}if
	end
	count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
	countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
	{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
}def
/set_negative
{
	Adobe_AGM_Core begin
	/AGMCORE_inverting exch def
	level2{
		currentpagedevice/NegativePrint known{
			currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
				true begin_feature true{
						bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
				}end_feature
			}if
			/AGMCORE_inverting false def
		}if
	}if
	AGMCORE_inverting{
		[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
		gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse 
		/AGMIRS_&fill where {pop AGMIRS_&fill}{fill} ifelse grestore
	}if
	end
}def
/lw_save_restore_override {
	/md where {
		pop
		md begin
		initializepage
		/initializepage{}def
		/pmSVsetup{} def
		/endp{}def
		/pse{}def
		/psb{}def
		/orig_showpage where
			{pop}
			{/orig_showpage /showpage load def}
		ifelse
		/showpage {orig_showpage gR} def
		end
	}if
}def
/pscript_showpage_override {
	/NTPSOct95 where
	{
		begin
		showpage
		save
		/showpage /restore load def
		/restore {exch pop}def
		end
	}if
}def
/driver_media_override
{
	/md where {
		pop
		md /initializepage known {
			md /initializepage {} put
		} if
		md /rC known {
			md /rC {4{pop}repeat} put
		} if
	}if
	/mysetup where {
		/mysetup [1 0 0 1 0 0] put
	}if
	Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
	level2
		{Adobe_AGM_Core /AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
}def
/driver_check_media_override
{
	/PrepsDict where
		{pop}
		{
		Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
		Adobe_AGM_Core /AGMCORE_Default_PageSize get type /arraytype eq
			{
			Adobe_AGM_Core /AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
			Adobe_AGM_Core /AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
			}if
			{
			Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
			}if
		}ifelse
}def
AGMCORE_err_strings begin
	/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
	/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
	/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
end
end
systemdict /setpacking known
{
	setpacking
} if
%%EndResource
%%BeginResource: procset Adobe_CoolType_Core 2.23 0
%%Copyright: Copyright 1997-2003 Adobe Systems Incorporated.  All Rights Reserved.
%%Version: 2.23 0
10 dict begin
/Adobe_CoolType_Passthru currentdict def
/Adobe_CoolType_Core_Defined userdict /Adobe_CoolType_Core known def
Adobe_CoolType_Core_Defined
	{ /Adobe_CoolType_Core userdict /Adobe_CoolType_Core get def }
if
userdict /Adobe_CoolType_Core 60 dict dup begin put
/Adobe_CoolType_Version 2.23 def
/Level2?
	systemdict /languagelevel known dup
		{ pop systemdict /languagelevel get 2 ge }
	if def
Level2? not
	{
	/currentglobal false def
	/setglobal /pop load def
	/gcheck { pop false } bind def
	/currentpacking false def
	/setpacking /pop load def
	/SharedFontDirectory 0 dict def
	}
if
currentpacking
true setpacking
/@_SaveStackLevels
	{
	Adobe_CoolType_Data
		begin
		@opStackCountByLevel @opStackLevel
		2 copy known not
			{ 2 copy 3 dict dup /args 7 index 5 add array put put get }
			{
			get dup /args get dup length 3 index lt
				{
				dup length 5 add array exch
				1 index exch 0 exch putinterval
				1 index exch /args exch put
				}
				{ pop }
			ifelse
			}
		ifelse
			begin
			count 2 sub 1 index lt
				{ pop count 1 sub }
			if
			dup /argCount exch def
			dup 0 gt
				{
				exch 1 index 2 add 1 roll
				args exch 0 exch getinterval 
			astore pop
				}
				{ pop }
			ifelse
			count 1 sub /restCount exch def
			end
		/@opStackLevel @opStackLevel 1 add def
		countdictstack 1 sub
		@dictStackCountByLevel exch @dictStackLevel exch put
		/@dictStackLevel @dictStackLevel 1 add def
		end
	} bind def
/@_RestoreStackLevels
	{
	Adobe_CoolType_Data
		begin
		/@opStackLevel @opStackLevel 1 sub def
		@opStackCountByLevel @opStackLevel get
			begin
			count restCount sub dup 0 gt
				{ { pop } repeat }
				{ pop }
			ifelse
			args 0 argCount getinterval {} forall
			end
		/@dictStackLevel @dictStackLevel 1 sub def
		@dictStackCountByLevel @dictStackLevel get
		end
	countdictstack exch sub dup 0 gt
		{ { end } repeat }
		{ pop }
	ifelse
	} bind def
/@_PopStackLevels
	{
	Adobe_CoolType_Data
		begin
		/@opStackLevel @opStackLevel 1 sub def
		/@dictStackLevel @dictStackLevel 1 sub def
		end
	} bind def
/@Raise
	{
	exch cvx exch errordict exch get exec
	stop
	} bind def
/@ReRaise
	{
	cvx $error /errorname get errordict exch get exec
	stop
	} bind def
/@Stopped
	{
	0 @#Stopped
	} bind def
/@#Stopped
	{
	@_SaveStackLevels
	stopped
		{ @_RestoreStackLevels true }
		{ @_PopStackLevels false }
	ifelse
	} bind def
/@Arg
	{
	Adobe_CoolType_Data
		begin
		@opStackCountByLevel @opStackLevel 1 sub get /args get exch get
		end
	} bind def
currentglobal true setglobal
/CTHasResourceForAllBug
	Level2?
		{
		1 dict dup begin
		mark
			{
				(*) { pop stop } 128 string /Category
			resourceforall
			}
		stopped
		cleartomark
		currentdict eq dup
			{ end }
		if
		not
		}
		{ false }
	ifelse
	def
/CTHasResourceStatusBug
	Level2?
		{
		mark
			{ /steveamerige /Category resourcestatus }
		stopped
			{ cleartomark true }
			{ cleartomark currentglobal not }
		ifelse
		}
		{ false }
	ifelse
	def
setglobal
/CTResourceStatus
		{
		mark 3 1 roll
		/Category findresource
			begin
			({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
				{ cleartomark false }
				{ { 3 2 roll pop true } { cleartomark false } ifelse }
			ifelse
			end
		} bind def
/CTWorkAroundBugs
	{
	Level2?
		{
		/cid_PreLoad /ProcSet resourcestatus
			{
			pop pop
			currentglobal
			mark
				{
				(*)
					{
					dup /CMap CTHasResourceStatusBug
						{ CTResourceStatus }
						{ resourcestatus }
					ifelse
						{
						pop dup 0 eq exch 1 eq or
							{
							dup /CMap findresource gcheck setglobal
							/CMap undefineresource
							}
							{
							pop CTHasResourceForAllBug
								{ exit }
								{ stop }
							ifelse
							}
						ifelse
						}
						{ pop }
					ifelse
					}
				128 string /CMap resourceforall
				}
			stopped
				{ cleartomark }
			stopped pop
			setglobal
			}
		if
		}
	if
	} bind def
/doc_setup
	{
	Adobe_CoolType_Core
		begin
		CTWorkAroundBugs
		/mov /moveto load def
		/nfnt /newencodedfont load def
		/mfnt /makefont load def
		/sfnt /setfont load def
		/ufnt /undefinefont load def
		/chp /charpath load def
		/awsh /awidthshow load def
		/wsh /widthshow load def
		/ash /ashow load def
		/sh /show load def
		end
	userdict /Adobe_CoolType_Data 10 dict dup
		begin
		/AddWidths? false def
		/CC 0 def
		/charcode 2 string def
		/@opStackCountByLevel 32 dict def
		/@opStackLevel 0 def
		/@dictStackCountByLevel 32 dict def
		/@dictStackLevel 0 def
		/InVMFontsByCMap 10 dict def
		/InVMDeepCopiedFonts 10 dict def
		end put
	} bind def
/doc_trailer
	{
	currentdict Adobe_CoolType_Core eq
		{ end }
	if
	} bind def
/page_setup
	{
	Adobe_CoolType_Core begin
	} bind def
/page_trailer
	{
	end
	} bind def
/unload
	{
	systemdict /languagelevel known
		{
		systemdict/languagelevel get 2 ge
			{
			userdict/Adobe_CoolType_Core 2 copy known
				{ undef }
				{ pop pop }
			ifelse
			}
		if
		}
	if
	} bind def
/ndf
	{
	1 index where
		{ pop pop pop }
		{ dup xcheck { bind } if def }
	ifelse
	} def
/findfont systemdict
	begin
	userdict
		begin
		/globaldict where { /globaldict get begin } if
			dup where pop exch get
		/globaldict where { pop end } if
		end
	end
Adobe_CoolType_Core_Defined
	{ /systemfindfont exch def }
	{
	/findfont 1 index def
	/systemfindfont exch def
	}
ifelse
/undefinefont
	{ pop } ndf
/copyfont
	{
	currentglobal 3 1 roll
	1 index gcheck setglobal
	dup null eq { 0 } { dup length } ifelse
	2 index length add 1 add dict
		begin
		exch
			{
			1 index /FID eq
				{ pop pop }
				{ def }
			ifelse
			}
		forall
		dup null eq
			{ pop }
			{ { def } forall }
		ifelse
		currentdict
		end
	exch setglobal
	} bind def
/copyarray
	{
	currentglobal exch
	dup gcheck setglobal
	dup length array copy
	exch setglobal
	} bind def
/newencodedfont
	{
	currentglobal
		{
		SharedFontDirectory 3 index  known
			{ SharedFontDirectory 3 index get /FontReferenced known }
			{ false }
		ifelse
		}
		{
		FontDirectory 3 index known
			{ FontDirectory 3 index get /FontReferenced known }
			{
			SharedFontDirectory 3 index known
				{ SharedFontDirectory 3 index get /FontReferenced known }
				{ false }
			ifelse
			}
		ifelse
		}
	ifelse
	dup
		{
		3 index findfont /FontReferenced get
		2 index dup type /nametype eq
			{findfont}
		if ne
			{ pop false }
		if
		}
	if
		{
		pop
		1 index findfont
		/Encoding get exch
		0 1 255
			{ 2 copy get 3 index 3 1 roll put }
		for
		pop pop pop
		}
		{
		dup type /nametype eq
		  { findfont }
	  if
		dup dup maxlength 2 add dict
			begin
			exch
				{
				1 index /FID ne
					{def}
					{pop pop}
				ifelse
				}
			forall
			/FontReferenced exch def
			/Encoding exch dup length array copy def
			/FontName 1 index dup type /stringtype eq { cvn } if def dup
			currentdict
			end
		definefont def
		}
	ifelse
	} bind def
/SetSubstituteStrategy
	{
	$SubstituteFont
		begin
		dup type /dicttype ne
			{ 0 dict }
		if
		currentdict /$Strategies known
			{
			exch $Strategies exch 
			2 copy known
				{
				get
				2 copy maxlength exch maxlength add dict
					begin
					{ def } forall
					{ def } forall
					currentdict
					dup /$Init known
						{ dup /$Init get exec }
					if
					end
				/$Strategy exch def
				}
				{ pop pop pop }
			ifelse
			}
			{ pop pop }
		ifelse
		end
	} bind def
/scff
	{
	$SubstituteFont
		begin
		dup type /stringtype eq
			{ dup length exch }
			{ null }
		ifelse
		/$sname exch def
		/$slen exch def
		/$inVMIndex
			$sname null eq
				{
				1 index $str cvs
				dup length $slen sub $slen getinterval cvn
				}
				{ $sname }
			ifelse def
		end
		{ findfont }
	@Stopped
		{
		dup length 8 add string exch
		1 index 0 (BadFont:) putinterval
		1 index exch 8 exch dup length string cvs putinterval cvn
			{ findfont }
		@Stopped
			{ pop /Courier findfont }
		if
		}
	if
	$SubstituteFont
		begin
		/$sname null def
		/$slen 0 def
		/$inVMIndex null def
		end
	} bind def
/isWidthsOnlyFont
	{
	dup /WidthsOnly known
		{ pop pop true }
		{
		dup /FDepVector known
			{ /FDepVector get { isWidthsOnlyFont dup { exit } if } forall }
			{
			dup /FDArray known
				{ /FDArray get { isWidthsOnlyFont dup { exit } if } forall }
				{ pop }
			ifelse
			}
		ifelse
		}
	ifelse
	} bind def
/?str1 256 string def
/?set
	{
	$SubstituteFont
		begin
		/$substituteFound false def
		/$fontname 4 index def
		/$doSmartSub false def
		end
	3 index
	currentglobal false setglobal exch
	/CompatibleFonts /ProcSet resourcestatus
		{
		pop pop
		/CompatibleFonts /ProcSet findresource
			begin
			dup /CompatibleFont currentexception
			1 index /CompatibleFont true setexception
			1 index /Font resourcestatus
				{
				pop pop
				3 2 roll setglobal
				end
				exch
				dup findfont
				/CompatibleFonts /ProcSet findresource
					begin
					3 1 roll exch /CompatibleFont exch setexception
					end
				}
				{
				3 2 roll setglobal
				1 index exch /CompatibleFont exch setexception
				end
				findfont
				$SubstituteFont /$substituteFound true put
				}
			ifelse
		}
		{ exch setglobal findfont }
	ifelse
	$SubstituteFont
		begin
		$substituteFound
			{
		 false
		 (%%[Using embedded font ) print
		 5 index ?str1 cvs print
		 ( to avoid the font substitution problem noted earlier.]%%\n) print
		 }
			{
			dup /FontName known
				{
				dup /FontName get $fontname eq
				1 index /DistillerFauxFont known not and
				/currentdistillerparams where
					{ pop false 2 index isWidthsOnlyFont not and }
				if
				}
				{ false }
			ifelse
			}
		ifelse
		exch pop
		/$doSmartSub true def
		end
		{
		exch pop exch pop exch
		2 dict dup /Found 3 index put
		exch findfont exch
		}
		{
		exch exec
		exch dup findfont
		dup /FontType get 3 eq
	  {
		  exch ?str1 cvs
		  dup length 1 sub
		  -1 0
		{
			  exch dup 2 index get 42 eq
			{
				 exch 0 exch getinterval cvn 4 1 roll 3 2 roll pop
				 exit
			  }
			  {exch pop} ifelse
		  }for
		}
		{
		 exch pop
	  } ifelse
		2 dict dup /Downloaded 6 5 roll put
		}
	ifelse
	dup /FontName 4 index put copyfont definefont pop
	} bind def
/?str2 256 string def
/?add
	{
	1 index type /integertype eq
		{ exch true 4 2 }
		{ false 3 1 }
	ifelse
	roll
	1 index findfont
	dup /Widths known
		{
		Adobe_CoolType_Data /AddWidths? true put
		gsave dup 1000 scalefont setfont
		}
	if
	/Downloaded known
		{
		exec
		exch
			{
			exch ?str2 cvs exch
			findfont /Downloaded get 1 dict begin /Downloaded 1 index def ?str1 cvs length
			?str1 1 index 1 add 3 index putinterval
			exch length 1 add 1 index add
			?str1 2 index (*) putinterval
			?str1 0 2 index getinterval cvn findfont 
			?str1 3 index (+) putinterval
			2 dict dup /FontName ?str1 0 6 index getinterval cvn put
			dup /Downloaded Downloaded put end copyfont
			dup /FontName get exch definefont pop pop pop
			}
			{
			pop
			}
		ifelse
		}
		{
		pop
		exch
			{
			findfont
			dup /Found get
			dup length exch ?str1 cvs pop
			?str1 1 index (+) putinterval
			?str1 1 index 1 add 4 index ?str2 cvs putinterval
			?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add getinterval cvn
			1 dict exch 1 index exch /FontName exch put copyfont
			dup /FontName get exch definefont pop
			}
			{
			pop
			}
		ifelse
		}
	ifelse
	Adobe_CoolType_Data /AddWidths? get
		{ grestore Adobe_CoolType_Data /AddWidths? false put }
	if
	} bind def
/?sh
	{
	currentfont /Downloaded known { exch } if pop
	} bind def
/?chp
	{
	currentfont /Downloaded known { pop } { false chp } ifelse
	} bind def
/?mv 
	{
	currentfont /Downloaded known { moveto pop pop } { pop pop moveto } ifelse
	} bind def
setpacking
userdict /$SubstituteFont 25 dict put
1 dict
	begin
	/SubstituteFont
		dup $error exch 2 copy known
			{ get }
			{ pop pop { pop /Courier } bind }
		ifelse def
	/currentdistillerparams where dup
		{
		pop pop
		currentdistillerparams /CannotEmbedFontPolicy 2 copy known
			{ get /Error eq }
			{ pop pop false }
		ifelse
		}
	if not
		{
		countdictstack array dictstack 0 get
			begin
			userdict
				begin
				$SubstituteFont
					begin
					/$str 128 string def
					/$fontpat 128 string def
					/$slen 0 def
					/$sname null def
					/$match false def
					/$fontname null def
					/$substituteFound false def
					/$inVMIndex null def
					/$doSmartSub true def
					/$depth 0 def
					/$fontname null def
					/$italicangle 26.5 def
					/$dstack null def
					/$Strategies 10 dict dup
						begin
						/$Type3Underprint
							{
							currentglobal exch false setglobal
							11 dict
								begin
								/UseFont exch
									$WMode 0 ne
										{
										dup length dict copy
										dup /WMode $WMode put
										/UseFont exch definefont
										}
									if def
								/FontName $fontname dup type /stringtype eq { cvn } if def
								/FontType 3 def
								/FontMatrix [ .001 0 0 .001 0 0 ] def
								/Encoding 256 array dup 0 1 255 { /.notdef put dup } for pop def
								/FontBBox [ 0 0 0 0 ] def
								/CCInfo 7 dict dup
									begin
									/cc null def
									/x 0 def
									/y 0 def
									end def
								/BuildChar
									{
									exch
										begin
										CCInfo
											begin
											1 string dup 0 3 index put exch pop
											/cc exch def
											UseFont 1000 scalefont setfont
											cc stringwidth /y exch def /x exch def
											x y setcharwidth
											$SubstituteFont /$Strategy get /$Underprint get exec
											0 0 moveto cc show
											x y moveto
											end
										end
									} bind def
								currentdict
								end
							exch setglobal
							} bind def
						/$GetaTint
							2 dict dup
								begin
								/$BuildFont
									{
									dup /WMode known
										{ dup /WMode get }
										{ 0 }
									ifelse
									/$WMode exch def
									$fontname exch
									dup /FontName known
										{
										dup /FontName get
										dup type /stringtype eq { cvn } if
										}
										{ /unnamedfont }
									ifelse
									exch
									Adobe_CoolType_Data /InVMDeepCopiedFonts get
									1 index /FontName get known
										{
										pop
										Adobe_CoolType_Data /InVMDeepCopiedFonts get
										1 index get
										null copyfont
										}
										{ $deepcopyfont }
									ifelse
									exch 1 index exch /FontBasedOn exch put
									dup /FontName $fontname dup type /stringtype eq { cvn } if put
									definefont
									Adobe_CoolType_Data /InVMDeepCopiedFonts get
										begin
										dup /FontBasedOn get 1 index def
										end
									} bind def
								/$Underprint
									{
									gsave
									x abs y abs gt
										{ /y 1000 def }
										{ /x -1000 def 500 120 translate }
									ifelse
									Level2?
										{
										[ /Separation (All) /DeviceCMYK { 0 0 0 1 pop } ]
										setcolorspace
										}
										{ 0 setgray }
									ifelse
									10 setlinewidth
									x .8 mul
									[ 7 3 ]
										{
										y mul 8 div 120 sub x 10 div exch moveto
										0 y 4 div neg rlineto
										dup 0 rlineto
										0 y 4 div rlineto
										closepath
										gsave
										Level2?
											{ .2 setcolor }
											{ .8 setgray }
										ifelse
										fill grestore
										stroke
										}
									forall
									pop
									grestore
									} bind def
								end def
						/$Oblique
							1 dict dup
								begin
								/$BuildFont
									{
									currentglobal exch dup gcheck setglobal
									null copyfont
										begin
										/FontBasedOn
										currentdict /FontName known
											{
											FontName
											dup type /stringtype eq { cvn } if
											}
											{ /unnamedfont }
										ifelse
										def
										/FontName $fontname dup type /stringtype eq { cvn } if def
										/currentdistillerparams where
											{ pop }
											{
											/FontInfo currentdict /FontInfo known
												{ FontInfo null copyfont }
												{ 2 dict }
											ifelse
											dup
												begin
												/ItalicAngle $italicangle def
												/FontMatrix FontMatrix
												[ 1 0 ItalicAngle dup sin exch cos div 1 0 0 ]
												matrix concatmatrix readonly
												end
											4 2 roll def
											def
											}
										ifelse
										FontName currentdict
										end
									definefont
									exch setglobal
									} bind def
								end def
						/$None
							1 dict dup
								begin
								/$BuildFont {} bind def
								end def
						end def
					/$Oblique SetSubstituteStrategy
					/$findfontByEnum
						{
						dup type /stringtype eq { cvn } if
						dup /$fontname exch def
						$sname null eq
							{ $str cvs dup length $slen sub $slen getinterval }
							{ pop $sname }
						ifelse
						$fontpat dup 0 (fonts/*) putinterval exch 7 exch putinterval
						/$match false def
						$SubstituteFont /$dstack countdictstack array dictstack put
						mark
							{
							$fontpat 0 $slen 7 add getinterval
								{ /$match exch def exit }
							$str filenameforall
							}
						stopped
							{
							cleardictstack
							currentdict
							true
							$SubstituteFont /$dstack get
								{
								exch
									{
									1 index eq
										{ pop false }
										{ true }
									ifelse
									}
									{ begin false }
								ifelse
								}
							forall
							pop
							}
						if
						cleartomark
						/$slen 0 def
						$match false ne
							{ $match (fonts/) anchorsearch pop pop cvn }
							{ /Courier }
						ifelse
						} bind def
					/$ROS 1 dict dup
						begin
						/Adobe 4 dict dup
							begin
							/Japan1  [ /Ryumin-Light /HeiseiMin-W3
										  /GothicBBB-Medium /HeiseiKakuGo-W5
										  /HeiseiMaruGo-W4 /Jun101-Light ] def
							/Korea1  [ /HYSMyeongJo-Medium /HYGoThic-Medium ] def
							/GB1	  [ /STSong-Light /STHeiti-Regular ] def
							/CNS1	 [ /MKai-Medium /MHei-Medium ] def
							end def
						end def
					/$cmapname null def
					/$deepcopyfont
						{
						dup /FontType get 0 eq
							{
							1 dict dup /FontName /copied put copyfont
								begin
								/FDepVector FDepVector copyarray
								0 1 2 index length 1 sub
									{
									2 copy get $deepcopyfont
									dup /FontName /copied put
									/copied exch definefont
									3 copy put pop pop
									}
								for
								def
								currentdict
								end
							}
							{ $Strategies /$Type3Underprint get exec }
						ifelse
						} bind def
					/$buildfontname
						{
						dup /CIDFont findresource /CIDSystemInfo get
							begin
							Registry length Ordering length Supplement 8 string cvs
							3 copy length 2 add add add string
							dup 5 1 roll dup 0 Registry putinterval
							dup 4 index (-) putinterval
							dup 4 index 1 add Ordering putinterval
							4 2 roll add 1 add 2 copy (-) putinterval
							end
						1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch
						anchorsearch
							{ pop pop 3 2 roll putinterval cvn /$cmapname exch def }
							{ pop pop pop pop pop }
						ifelse
						length
						$str 1 index (-) putinterval 1 add
						$str 1 index $cmapname $fontpat cvs putinterval
						$cmapname length add
						$str exch 0 exch getinterval cvn
						} bind def
					/$findfontByROS
						{
						/$fontname exch def
						$ROS Registry 2 copy known
							{
							get Ordering 2 copy known
								{ get }
								{ pop pop [] }
							ifelse
							}
							{ pop pop [] }
						ifelse
						false exch
							{
							dup /CIDFont resourcestatus
								{
								pop pop
								save
								1 index /CIDFont findresource
								dup /WidthsOnly known
									{ dup /WidthsOnly get }
									{ false }
								ifelse
								exch pop
								exch restore
									{ pop }
									{ exch pop true exit }
								ifelse
								}
								{ pop }
							ifelse
							}
						forall
							{ $str cvs $buildfontname }
							{
							false (*)
								{
								save exch
								dup /CIDFont findresource
								dup /WidthsOnly known
									{ dup /WidthsOnly get not }
									{ true }
								ifelse
								exch /CIDSystemInfo get
								dup /Registry get Registry eq
								exch /Ordering get Ordering eq and and
									{ exch restore exch pop true exit }
									{ pop restore }
								ifelse
								}
							$str /CIDFont resourceforall
								{ $buildfontname }
								{ $fontname $findfontByEnum }
							ifelse
							}
						ifelse
						} bind def
					end
				end
				currentdict /$error known currentdict /languagelevel known and dup
					{ pop $error /SubstituteFont known }
				if
				dup
					{ $error }
					{ Adobe_CoolType_Core }
				ifelse
				begin
					{
					/SubstituteFont
					/CMap /Category resourcestatus
						{
						pop pop
						{
						$SubstituteFont
							begin
							/$substituteFound true def
							dup length $slen gt
							$sname null ne or
							$slen 0 gt and
								{
								$sname null eq
									{ dup $str cvs dup length $slen sub $slen getinterval cvn }
									{ $sname }
								ifelse
								Adobe_CoolType_Data /InVMFontsByCMap get
								1 index 2 copy known
									{
									get
									false exch
										{
										pop
										currentglobal
											{
											GlobalFontDirectory 1 index known
												{ exch pop true exit }
												{ pop }
											ifelse
											}
											{
											FontDirectory 1 index known
												{ exch pop true exit }
												{
												GlobalFontDirectory 1 index known
													{ exch pop true exit }
													{ pop }
												ifelse
												}
											ifelse
											}
										ifelse
										}
									forall
									}
									{ pop pop false }
								ifelse
									{
									exch pop exch pop
									}
									{
									dup /CMap resourcestatus
										{
										pop pop
										dup /$cmapname exch def
										/CMap findresource /CIDSystemInfo get { def } forall
										$findfontByROS
										}
										{
										128 string cvs
										dup (-) search
											{
											3 1 roll search
												{
												3 1 roll pop
													{ dup cvi }
												stopped
													{ pop pop pop pop pop $findfontByEnum }
													{
													4 2 roll pop pop
													exch length
													exch
													2 index length
													2 index
													sub
													exch 1 sub -1 0
														{
														$str cvs dup length
														4 index
														0
														4 index
														4 3 roll add
														getinterval
														exch 1 index exch 3 index exch
														putinterval
														dup /CMap resourcestatus
															{
															pop pop
															4 1 roll pop pop pop
															dup /$cmapname exch def
															/CMap findresource /CIDSystemInfo get { def } forall
															$findfontByROS
															true exit
															}
															{ pop }
														ifelse
														}
													for
													dup type /booleantype eq
														{ pop }
														{ pop pop pop $findfontByEnum }
													ifelse
													}
												ifelse
												}
												{ pop pop pop $findfontByEnum }
											ifelse
											}
											{ pop pop $findfontByEnum }
										ifelse
										}
									ifelse
									}
								ifelse
								}
								{ //SubstituteFont exec }
							ifelse
							/$slen 0 def
							end
						}
						}
						{
						{
						$SubstituteFont
							begin
							/$substituteFound true def
							dup length $slen gt
							$sname null ne or
							$slen 0 gt and
								{ $findfontByEnum }
								{ //SubstituteFont exec }
							ifelse
							end
						}
						}
					ifelse
					bind readonly def
					Adobe_CoolType_Core /scfindfont /systemfindfont load put
					}
					{
					/scfindfont
						{
						$SubstituteFont
							begin
							dup systemfindfont
							dup /FontName known
								{ dup /FontName get dup 3 index ne }
								{ /noname true }
							ifelse
							dup
								{
								/$origfontnamefound 2 index def
								/$origfontname 4 index def /$substituteFound true def
								}
							if
							exch pop
								{
								$slen 0 gt
								$sname null ne
								3 index length $slen gt or and
									{
									pop dup $findfontByEnum findfont
									dup maxlength 1 add dict
										begin
											{ 1 index /FID eq { pop pop } { def } ifelse }
										forall
										currentdict
										end
									definefont
									dup /FontName known { dup /FontName get } { null } ifelse
									$origfontnamefound ne
										{
										$origfontname $str cvs print
										( substitution revised, using ) print
										dup /FontName known
											{ dup /FontName get } { (unspecified font) }
										ifelse
										$str cvs print (.\n) print
										}
									if
									}
									{ exch pop }
								ifelse
								}
								{ exch pop }
							ifelse
							end
						} bind def
					}
				ifelse
				end
			end
		Adobe_CoolType_Core_Defined not
			{
			Adobe_CoolType_Core /findfont
				{
				$SubstituteFont
					begin
					$depth 0 eq
						{
						/$fontname 1 index dup type /stringtype ne { $str cvs } if def
						/$substituteFound false def
						}
					if
					/$depth $depth 1 add def
					end
				scfindfont
				$SubstituteFont
					begin
					/$depth $depth 1 sub def
					$substituteFound $depth 0 eq and
						{
						$inVMIndex null ne
							{ dup $inVMIndex $AddInVMFont }
						if
						$doSmartSub
							{
							currentdict /$Strategy known
								{ $Strategy /$BuildFont get exec }
							if
							}
						if
						}
					if
					end
				} bind put
			}
		if
		}
	if
	end
/$AddInVMFont
	{
	exch /FontName 2 copy known
		{
		get
		1 dict dup begin exch 1 index gcheck def end exch
		Adobe_CoolType_Data /InVMFontsByCMap get exch
		$DictAdd
		}
		{ pop pop pop }
	ifelse
	} bind def
/$DictAdd
	{
	2 copy known not
		{ 2 copy 4 index length dict put }
	if
	Level2? not
		{
		2 copy get dup maxlength exch length 4 index length add lt
		2 copy get dup length 4 index length add exch maxlength 1 index lt
			{
			2 mul dict
				begin
				2 copy get { forall } def
				2 copy currentdict put
				end
			}
			{ pop }
		ifelse
		}
	if
	get
		begin
			{ def }
		forall
		end
	} bind def
end
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.19 0
systemdict /languagelevel known dup
	{ currentglobal false setglobal }
	{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
	{ 2 copy get dup maxlength 25 add dict copy }
	{ 25 dict }
ifelse put
Adobe_CoolType_Utility
	begin
	/ct_Level2? exch def
	/ct_Clone? 1183615869 internaldict dup
			/CCRun known not
			exch /eCCRun known not
			ct_Level2? and or def
ct_Level2?
	{ globaldict begin currentglobal true setglobal }
if
	/ct_AddStdCIDMap
		ct_Level2?
			{ {
			((Hex) 57 StartData
			0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
			7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
			d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
			cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
			} }
			{ {
			<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
		 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
			4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
			} }
		ifelse bind def
userdict /cid_extensions known
dup { cid_extensions /cid_UpdateDB known and } if
	 {
	 cid_extensions
	 begin
	 /cid_GetCIDSystemInfo
		 {
		 1 index type /stringtype eq
			 { exch cvn exch }
		 if
		 cid_extensions
			 begin
			 dup load 2 index known
				 {
				 2 copy
				 cid_GetStatusInfo
				 dup null ne
					 {
					 1 index load
					 3 index get
					 dup null eq
						  { pop pop cid_UpdateDB }
						  {
						  exch
						  1 index /Created get eq
							  { exch pop exch pop }
							  { pop cid_UpdateDB }
						  ifelse
						  }
					 ifelse
					 }
					 { pop cid_UpdateDB }
				 ifelse
				 }
				 { cid_UpdateDB }
			 ifelse
			 end
		 } bind def
	 end
	 }
if
ct_Level2?
	{ end setglobal }
if
	/ct_UseNativeCapability?  systemdict /composefont known def
	/ct_MakeOCF 35 dict def
	/ct_Vars 25 dict def
	/ct_GlyphDirProcs 6 dict def
	/ct_BuildCharDict 15 dict dup
		begin
		/charcode 2 string def
		/dst_string 1500 string def
		/nullstring () def
		/usewidths? true def
		end def
	ct_Level2? { setglobal } { pop } ifelse
	ct_GlyphDirProcs
		begin
		/GetGlyphDirectory
			{
			systemdict /languagelevel known
				{ pop /CIDFont findresource /GlyphDirectory get }
				{
				1 index /CIDFont findresource /GlyphDirectory
				get dup type /dicttype eq
					{
					dup dup maxlength exch length sub 2 index lt
						{
						dup length 2 index add dict copy 2 index
						/CIDFont findresource/GlyphDirectory 2 index put
						}
					if
					}
				if
				exch pop exch pop
				}
			ifelse
			+
			} def
		/+
			{
			systemdict /languagelevel known
				{
				currentglobal false setglobal
				3 dict begin
					/vm exch def
				}
				{ 1 dict begin }
			ifelse
			/$ exch def
			systemdict /languagelevel known
				{
				vm setglobal
				/gvm currentglobal def
				$ gcheck setglobal
				}
			if
			? { $ begin } if
			} def
		/? { $ type /dicttype eq } def
		/| {
			userdict /Adobe_CoolType_Data known
				{
			Adobe_CoolType_Data /AddWidths? known
				{
				 currentdict Adobe_CoolType_Data
					begin
					  begin
						AddWidths?
								{
								Adobe_CoolType_Data /CC 3 index put
								? { def } { $ 3 1 roll put } ifelse
								CC charcode exch 1 index 0 2 index 256 idiv put
								1 index exch 1 exch 256 mod put
								stringwidth 2 array astore
								currentfont /Widths get exch CC exch put
								}
								{ ? { def } { $ 3 1 roll put } ifelse }
							ifelse
					end
				end
				}
				{ ? { def } { $ 3 1 roll put } ifelse }	ifelse
				}
				{ ? { def } { $ 3 1 roll put } ifelse }
			ifelse
			} def
		/!
			{
			? { end } if
			systemdict /languagelevel known
				{ gvm setglobal }
			if
			end
			} def
		/: { string currentfile exch readstring pop } executeonly def
		end
	ct_MakeOCF
		begin
		/ct_cHexEncoding
		[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
		 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
		 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
		 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
		 /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
		 /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
		 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
		 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
		 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
		 /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
		 /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
		 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
		 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
		 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
		/ct_CID_STR_SIZE 8000 def
		/ct_mkocfStr100 100 string def
		/ct_defaultFontMtx [.001 0 0 .001 0 0] def
		/ct_1000Mtx [1000 0 0 1000 0 0] def
		/ct_raise {exch cvx exch errordict exch get exec stop} bind def
		/ct_reraise
			{ cvx $error /errorname get (Error: ) print dup (						  ) cvs print
					errordict exch get exec stop
			} bind def
		/ct_cvnsi
			{
			1 index add 1 sub 1 exch 0 4 1 roll
				{
				2 index exch get
				exch 8 bitshift
				add
				}
			for
			exch pop
			} bind def
		/ct_GetInterval
			{
			Adobe_CoolType_Utility /ct_BuildCharDict get
				begin
				/dst_index 0 def
				dup dst_string length gt
					{ dup string /dst_string exch def }
				if
				1 index ct_CID_STR_SIZE idiv
				/arrayIndex exch def
				2 index arrayIndex  get
				2 index
				arrayIndex ct_CID_STR_SIZE mul
				sub
					{
					dup 3 index add 2 index length le
						{
						2 index getinterval
						dst_string  dst_index 2 index putinterval
						length dst_index add /dst_index exch def
						exit
						}
						{
						1 index length 1 index sub
						dup 4 1 roll
						getinterval
						dst_string  dst_index 2 index putinterval
						pop dup dst_index add /dst_index exch def
						sub
						/arrayIndex arrayIndex 1 add def
						2 index dup length arrayIndex gt
							  { arrayIndex get }
							  {
							  pop
							  exit
							  }
						ifelse
						0
						}
					ifelse
					}
				loop
				pop pop pop
				dst_string 0 dst_index getinterval
				end
			} bind def
		ct_Level2?
			{
			/ct_resourcestatus
			currentglobal mark true setglobal
				{ /unknowninstancename /Category resourcestatus }
			stopped
				{ cleartomark setglobal true }
				{ cleartomark currentglobal not exch setglobal }
			ifelse
				{
					{
					mark 3 1 roll /Category findresource
						begin
						ct_Vars /vm currentglobal put
						({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
							{ cleartomark false }
							{ { 3 2 roll pop true } { cleartomark false } ifelse }
						ifelse
						ct_Vars /vm get setglobal
						end
					}
				}
				{ { resourcestatus } }
			ifelse bind def
			/CIDFont /Category ct_resourcestatus
				{ pop pop }
				{
				currentglobal  true setglobal
				/Generic /Category findresource
				dup length dict copy
				dup /InstanceType /dicttype put
				/CIDFont exch /Category defineresource pop
				setglobal
				}
			ifelse
			ct_UseNativeCapability?
				{
				/CIDInit /ProcSet findresource begin
				12 dict begin
				begincmap
				/CIDSystemInfo 3 dict dup begin
				  /Registry (Adobe) def
				  /Ordering (Identity) def
				  /Supplement 0 def
				end def
				/CMapName /Identity-H def
				/CMapVersion 1.000 def
				/CMapType 1 def
				1 begincodespacerange
				<0000> <FFFF>
				endcodespacerange
				1 begincidrange
				<0000> <FFFF> 0
				endcidrange
				endcmap
				CMapName currentdict /CMap defineresource pop
				end
				end
				}
			if
			}
			{
			/ct_Category 2 dict begin
			/CIDFont  10 dict def
			/ProcSet	2 dict def
			currentdict
			end
			def
			/defineresource
				{
				ct_Category 1 index 2 copy known
					{
					get
					dup dup maxlength exch length eq
						{
						dup length 10 add dict copy
						ct_Category 2 index 2 index put
						}
					if
					3 index 3 index put
					pop exch pop
					}
					{ pop pop /defineresource /undefined ct_raise }
				ifelse
				} bind def
			/findresource
				{
				ct_Category 1 index 2 copy known
					{
					get
					2 index 2 copy known
						{ get 3 1 roll pop pop}
						{ pop pop /findresource /undefinedresource ct_raise }
					ifelse
					}
					{ pop pop /findresource /undefined ct_raise }
				ifelse
				} bind def
			/resourcestatus
				{
				ct_Category 1 index 2 copy known
					{
					get
					2 index known
					exch pop exch pop
						{
						0 -1 true
						}
						{
						false
						}
					ifelse
					}
					{ pop pop /findresource /undefined ct_raise }
				ifelse
				} bind def
			/ct_resourcestatus /resourcestatus load def
			}
		ifelse
		/ct_CIDInit 2 dict
			begin
			/ct_cidfont_stream_init
				{
					{
					dup (Binary) eq
						{
						pop
						null
						currentfile
						ct_Level2?
							{
								{ cid_BYTE_COUNT () /SubFileDecode filter }
							stopped
								{ pop pop pop }
							if
							}
						if
						/readstring load
						exit
						}
					if
					dup (Hex) eq
						{
						pop
						currentfile
						ct_Level2?
							{
								{ null exch /ASCIIHexDecode filter /readstring }
							stopped
								{ pop exch pop (>) exch /readhexstring }
							if
							}
							{ (>) exch /readhexstring }
						ifelse
						load
						exit
						}
					if
					/StartData /typecheck ct_raise
					}
				loop
				cid_BYTE_COUNT ct_CID_STR_SIZE le
					{
					2 copy cid_BYTE_COUNT string exch exec
					pop
					1 array dup
					3 -1 roll
					0 exch put
					}
					{
					cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
					dup array exch 2 sub 0 exch 1 exch
						{
						2 copy
						5 index
						ct_CID_STR_SIZE
						string
						6 index exec
						pop
						put
						pop
						}
					for
					2 index
					cid_BYTE_COUNT ct_CID_STR_SIZE mod string
					3 index exec
					pop
					1 index exch
					1 index length 1 sub
					exch put
					}
				ifelse
				cid_CIDFONT exch /GlyphData exch put
				2 index null eq
					{
					pop pop pop
					}
					{
					pop /readstring load
					1 string exch
						{
						3 copy exec
						pop
						dup length 0 eq
							{
							pop pop pop pop pop
							true exit
							}
						if
						4 index
						eq
							{
							pop pop pop pop
							false exit
							}
						if
						}
					loop
					pop
					}
				ifelse
				} bind def
			/StartData
				{
				mark
					{
					currentdict
					dup /FDArray get 0 get /FontMatrix get
					0 get 0.001 eq
						{
						dup /CDevProc known not
							{
							/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
								{ get }
								{
								pop pop
								{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
								}
							ifelse
							def
							}
						if
						}
						{
						 /CDevProc
							 {
							 pop pop pop pop pop
							 0
							 1 cid_temp /cid_CIDFONT get
							 /FDArray get 0 get
							 /FontMatrix get 0 get div
							 7 index 2 div
							 1 index 0.88 mul
							 } def
						}
					ifelse
					/cid_temp 15 dict def
					cid_temp
						begin
						/cid_CIDFONT exch def
						3 copy pop
						dup /cid_BYTE_COUNT exch def 0 gt
							{
							ct_cidfont_stream_init
							FDArray
								{
								/Private get
								dup /SubrMapOffset known
									{
									begin
									/Subrs SubrCount array def
									Subrs
									SubrMapOffset
									SubrCount
									SDBytes
									ct_Level2?
										{
										currentdict dup /SubrMapOffset undef
										dup /SubrCount undef
										/SDBytes undef
										}
									if
									end
									/cid_SD_BYTES exch def
									/cid_SUBR_COUNT exch def
									/cid_SUBR_MAP_OFFSET exch def
									/cid_SUBRS exch def
									cid_SUBR_COUNT 0 gt
										{
										GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
										0 cid_SD_BYTES ct_cvnsi
										0 1 cid_SUBR_COUNT 1 sub
											{
											exch 1 index
											1 add
											cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
											GlyphData exch cid_SD_BYTES ct_GetInterval
											0 cid_SD_BYTES ct_cvnsi
											cid_SUBRS 4 2 roll
											GlyphData exch
											4 index
											1 index
											sub
											ct_GetInterval
											dup length string copy put
											}
										for
										pop
										}
									if
									}
									{ pop }
								ifelse
								}
							forall
							}
						if
						cleartomark pop pop
						end
					CIDFontName currentdict /CIDFont defineresource pop
					end end
					}
				stopped
					{ cleartomark /StartData ct_reraise }
				if
				} bind def
			currentdict
			end def
		/ct_saveCIDInit
			{
			/CIDInit /ProcSet ct_resourcestatus
				{ true }
				{ /CIDInitC /ProcSet ct_resourcestatus }
			ifelse
				{
				pop pop
				/CIDInit /ProcSet findresource
				ct_UseNativeCapability?
					{ pop null }
					{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
				ifelse
				}
				{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
			ifelse
			ct_Vars exch /ct_oldCIDInit exch put
			} bind def
		/ct_restoreCIDInit
			{
			ct_Vars /ct_oldCIDInit get dup null ne
				{ /CIDInit exch /ProcSet defineresource pop }
				{ pop }
			ifelse
			} bind def
		/ct_BuildCharSetUp
			{
			1 index
				begin
				CIDFont
					begin
					Adobe_CoolType_Utility /ct_BuildCharDict get
						begin
						/ct_dfCharCode exch def
						/ct_dfDict exch def
						CIDFirstByte ct_dfCharCode add
						dup CIDCount ge
							{ pop 0 }
						if
						/cid exch def
							{
							GlyphDirectory cid 2 copy known
								{ get }
								{ pop pop nullstring }
							ifelse
							dup length FDBytes sub 0 gt
								{
								dup
								FDBytes 0 ne
									{ 0 FDBytes ct_cvnsi }
									{ pop 0 }
								ifelse
								/fdIndex exch def
								dup length FDBytes sub FDBytes exch getinterval
								/charstring exch def
								exit
								}
								{
								pop
								cid 0 eq
									{ /charstring nullstring def exit }
								if
								/cid 0 def
								}
							ifelse
							}
						loop
			} def
		/ct_SetCacheDevice
			{
			0 0 moveto
			dup stringwidth
			3 -1 roll
			true charpath
			pathbbox
			0 -1000
			7 index 2 div 880
			setcachedevice2
			0 0 moveto
			} def
		/ct_CloneSetCacheProc
			{
			1 eq
				{
				stringwidth
				pop -2 div -880
				0 -1000 setcharwidth
				moveto
				}
				{
				usewidths?
					{
					currentfont /Widths get cid
					2 copy known
						{ get exch pop aload pop }
						{ pop pop stringwidth }
					ifelse
					}
					{ stringwidth }
				ifelse
				setcharwidth
				0 0 moveto
				}
			ifelse
			} def
		/ct_Type3ShowCharString
			{
			ct_FDDict fdIndex 2 copy known
				{ get }
				{
				currentglobal 3 1 roll
				1 index gcheck setglobal
				ct_Type1FontTemplate dup maxlength dict copy
					begin
					FDArray fdIndex get
					dup /FontMatrix 2 copy known
						{ get }
						{ pop pop ct_defaultFontMtx }
					ifelse
					/FontMatrix exch dup length array copy def
					/Private get
					/Private exch def
					/Widths rootfont /Widths get def
					/CharStrings 1 dict dup /.notdef
						<d841272cf18f54fc13> dup length string copy put def
					currentdict
					end
				/ct_Type1Font exch definefont
				dup 5 1 roll put
				setglobal
				}
			ifelse
			dup /CharStrings get 1 index /Encoding get
			ct_dfCharCode get charstring put
			rootfont /WMode 2 copy known
				{ get }
				{ pop pop 0 }
			ifelse
			exch
			1000 scalefont setfont
			ct_str1 0 ct_dfCharCode put
			ct_str1 exch ct_dfSetCacheProc
			ct_SyntheticBold
				{
				currentpoint
				ct_str1 show
				newpath
				moveto
				ct_str1 true charpath
				ct_StrokeWidth setlinewidth
				stroke
				}
				{ ct_str1 show }
			ifelse
			} def
		/ct_Type4ShowCharString
			{
			ct_dfDict ct_dfCharCode charstring
			FDArray fdIndex get
			dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
				{ ct_1000Mtx matrix concatmatrix concat }
				{ pop }
			ifelse
			/Private get
			Adobe_CoolType_Utility /ct_Level2? get not
				{
				ct_dfDict /Private
				3 -1 roll
					{ put }
				1183615869 internaldict /superexec get exec
				}
			if
			1183615869 internaldict
			Adobe_CoolType_Utility /ct_Level2? get
				{ 1 index }
				{ 3 index /Private get mark 6 1 roll }
			ifelse
			dup /RunInt known
				{ /RunInt get }
				{ pop /CCRun }
			ifelse
			get exec
			Adobe_CoolType_Utility /ct_Level2? get not
				{ cleartomark }
			if
			} bind def
		/ct_BuildCharIncremental
			{
				{
				Adobe_CoolType_Utility /ct_MakeOCF get begin
				ct_BuildCharSetUp
				ct_ShowCharString
				}
			stopped
				{ stop }
			if
			end
			end
			end
			end
			} bind def
		/BaseFontNameStr (BF00) def
		/ct_Type1FontTemplate 14 dict
			begin
			/FontType 1 def
			/FontMatrix  [0.001 0 0 0.001 0 0] def
			/FontBBox  [-250 -250 1250 1250] def
			/Encoding ct_cHexEncoding def
			/PaintType 0 def
			currentdict
			end def
		/BaseFontTemplate 11 dict
			begin
			/FontMatrix  [0.001 0 0 0.001 0 0] def
			/FontBBox  [-250 -250 1250 1250] def
			/Encoding ct_cHexEncoding def
			/BuildChar /ct_BuildCharIncremental load def
			ct_Clone?
				{
				/FontType 3 def
				/ct_ShowCharString /ct_Type3ShowCharString load def
				/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
				/ct_SyntheticBold false def
				/ct_StrokeWidth 1 def
				}
				{
				/FontType 4 def
				/Private 1 dict dup /lenIV 4 put def
				/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
				/PaintType 0 def
				/ct_ShowCharString /ct_Type4ShowCharString load def
				}
			ifelse
			/ct_str1 1 string def
			currentdict
			end def
		/BaseFontDictSize BaseFontTemplate length 5 add def
		/ct_matrixeq
			{
			true 0 1 5
				{
				dup 4 index exch get exch 3 index exch get eq and
				dup not
					{ exit }
				if
				}
			for
			exch pop exch pop
			} bind def
		/ct_makeocf
			{
			15 dict
				begin
				exch /WMode exch def
				exch /FontName exch def
				/FontType 0 def
				/FMapType 2 def
			dup /FontMatrix known
				{ dup /FontMatrix get /FontMatrix exch def }
				{ /FontMatrix matrix def }
			ifelse
				/bfCount 1 index /CIDCount get 256 idiv 1 add
					dup 256 gt { pop 256} if def
				/Encoding
					256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
					bfCount 1 255 { 2 copy bfCount put pop } for
					def
				/FDepVector bfCount dup 256 lt { 1 add } if array def
				BaseFontTemplate BaseFontDictSize dict copy
					begin
					/CIDFont exch def
					CIDFont /FontBBox known
						{ CIDFont /FontBBox get /FontBBox exch def }
					if
					CIDFont /CDevProc known
						{ CIDFont /CDevProc get /CDevProc exch def }
					if
					currentdict
					end
				BaseFontNameStr 3 (0) putinterval
				0 1 bfCount dup 256 eq { 1 sub } if
					{
					FDepVector exch
					2 index BaseFontDictSize dict copy
						begin
						dup /CIDFirstByte exch 256 mul def
						FontType 3 eq
							{ /ct_FDDict 2 dict def }
						if
						currentdict
						end
					1 index  16
					BaseFontNameStr  2 2 getinterval cvrs pop
					BaseFontNameStr exch definefont
					put
					}
				for
				ct_Clone?
					{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
				if
				FontName
				currentdict
				end
			definefont
			ct_Clone?
				{
				gsave
				dup 1000 scalefont setfont
				ct_BuildCharDict
					begin
					/usewidths? false def
					currentfont /Widths get
						begin
						exch /CIDFont get /GlyphDirectory get
							{
							pop
							dup charcode exch 1 index 0 2 index 256 idiv put
							1 index exch 1 exch 256 mod put
							stringwidth 2 array astore def
							}
						forall
						end
					/usewidths? true def
					end
				grestore
				}
				{ exch pop }
			ifelse
			} bind def
		/ct_ComposeFont
			{
			ct_UseNativeCapability?
				{
				2 index /CMap ct_resourcestatus
					{ pop pop exch pop }
					{
					/CIDInit /ProcSet findresource
						begin
						12 dict
							begin
							begincmap
							/CMapName 3 index def
							/CMapVersion 1.000 def
							/CMapType 1 def
							exch /WMode exch def
							/CIDSystemInfo 3 dict dup
								begin
								/Registry (Adobe) def
								/Ordering
								CMapName ct_mkocfStr100 cvs
								(Adobe-) search
									{
									pop pop
									(-) search
										{
										dup length string copy
										exch pop exch pop
										}
										{ pop (Identity)}
									ifelse
									}
									{ pop  (Identity)  }
								ifelse
								def
								/Supplement 0 def
								end def
							1 begincodespacerange
							<0000> <FFFF>
							endcodespacerange
							1 begincidrange
							<0000> <FFFF> 0
							endcidrange
							endcmap
							CMapName currentdict /CMap defineresource pop
							end
						end
					}
				ifelse
				composefont
				}
				{
				3 2 roll pop
				0 get /CIDFont findresource
				ct_makeocf
				}
			ifelse
			} bind def
		/ct_MakeIdentity
			{
			ct_UseNativeCapability?
				{
				1 index /CMap ct_resourcestatus
					{ pop pop }
					{
					/CIDInit /ProcSet findresource begin
					12 dict begin
					begincmap
					/CMapName 2 index def
					/CMapVersion 1.000 def
					/CMapType 1 def
					/CIDSystemInfo 3 dict dup
						begin
						/Registry (Adobe) def
						/Ordering
						CMapName ct_mkocfStr100 cvs
						(Adobe-) search
							{
							pop pop
							(-) search
								{ dup length string copy exch pop exch pop }
								{ pop (Identity) }
							ifelse
							}
							{ pop (Identity) }
						ifelse
						def
						/Supplement 0 def
						end def
					1 begincodespacerange
					<0000> <FFFF>
					endcodespacerange
					1 begincidrange
					<0000> <FFFF> 0
					endcidrange
					endcmap
					CMapName currentdict /CMap defineresource pop
					end
					end
					}
				ifelse
				composefont
				}
				{
				exch pop
				0 get /CIDFont findresource
				ct_makeocf
				}
			ifelse
			} bind def
		currentdict readonly pop
		end
	end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.0 0
userdict /ct_T42Dict 15 dict put
ct_T42Dict begin
/Is2015?
{
  version
  cvi
  2015
  ge
} bind def
/AllocGlyphStorage
{
  Is2015?
  {	
		pop
  } 
  { 
		{string} forall
  } ifelse
} bind def
/Type42DictBegin
{
	25 dict begin
  /FontName exch def
  /CharStrings 256 dict 
	begin
		  /.notdef 0 def
		  currentdict 
	end def
  /Encoding exch def
  /PaintType 0 def
  /FontType 42 def
  /FontMatrix [1 0 0 1 0 0] def
  4 array  astore cvx /FontBBox exch def
  /sfnts
} bind def
/Type42DictEnd  
{
	 currentdict dup /FontName get exch definefont end
	ct_T42Dict exch
	dup /FontName get exch put
} bind def
/RD {string currentfile exch readstring pop} executeonly def
/PrepFor2015
{
	Is2015?
	{		  
		 /GlyphDirectory 
		 16
		 dict def
		 sfnts 0 get
		 dup
		 2 index
		 (glyx)
		 putinterval
		 2 index  
		 (locx)
		 putinterval
		 pop
		 pop
	}
	{
		 pop
		 pop
	} ifelse			
} bind def
/AddT42Char
{
	Is2015?
	{
		/GlyphDirectory get 
		begin
		def
		end
		pop
		pop
	}
	{
		/sfnts get
		4 index
		get
		3 index
	  2 index
		putinterval
		pop
		pop
		pop
		pop
	} ifelse
} bind def
end
%%EndResource
Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
%%BeginResource: procset Adobe_AGM_Image 1.0 0
%%Version: 1.0 0
%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc.  All Rights Reserved.
systemdict /setpacking known
{
	currentpacking
	true setpacking
} if
userdict /Adobe_AGM_Image 75 dict dup begin put
/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
/nd{
	null def
}bind def
/AGMIMG_&image nd
/AGMIMG_&colorimage nd
/AGMIMG_&imagemask nd
/AGMIMG_mbuf () def
/AGMIMG_ybuf () def
/AGMIMG_kbuf () def
/AGMIMG_c 0 def
/AGMIMG_m 0 def
/AGMIMG_y 0 def
/AGMIMG_k 0 def
/AGMIMG_tmp nd
/AGMIMG_imagestring0 nd
/AGMIMG_imagestring1 nd
/AGMIMG_imagestring2 nd
/AGMIMG_imagestring3 nd
/AGMIMG_imagestring4 nd
/AGMIMG_imagestring5 nd
/AGMIMG_cnt nd
/AGMIMG_fsave nd
/AGMIMG_colorAry nd
/AGMIMG_override nd
/AGMIMG_name nd
/AGMIMG_maskSource nd
/invert_image_samples nd
/knockout_image_samples	nd
/img nd
/sepimg nd
/devnimg nd
/idximg nd
/doc_setup
{ 
	Adobe_AGM_Core begin
	Adobe_AGM_Image begin
	/AGMIMG_&image systemdict/image get def
	/AGMIMG_&imagemask systemdict/imagemask get def
	/colorimage where{
		pop
		/AGMIMG_&colorimage /colorimage ldf
	}if
	end
	end
}def
/page_setup
{
	Adobe_AGM_Image begin
	/AGMIMG_ccimage_exists {/customcolorimage where 
		{
			pop
			/Adobe_AGM_OnHost_Seps where
			{
			pop false
			}{
			/Adobe_AGM_InRip_Seps where
				{
				pop false
				}{
					true
				 }ifelse
			 }ifelse
			}{
			false
		}ifelse 
	}bdf
	level2{
		/invert_image_samples
		{
			Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
			/Decode [ Decode 1 get Decode 0 get] def
		}def
		/knockout_image_samples
		{
			Operator/imagemask ne{
				/Decode [1 1] def
			}if
		}def
	}{	
		/invert_image_samples
		{
			{1 exch sub} currenttransfer addprocs settransfer
		}def
		/knockout_image_samples
		{
			{ pop 1 } currenttransfer addprocs settransfer
		}def
	}ifelse
	/img /imageormask ldf
	/sepimg /sep_imageormask ldf
	/devnimg /devn_imageormask ldf
	/idximg /indexed_imageormask ldf
	/_ctype 7 def
	currentdict{
		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
			bind
		}if
		def
	}forall
}def
/page_trailer
{
	end
}def
/doc_trailer
{
}def
/imageormask_sys
{
	begin
		save mark
		level2{
			currentdict
			Operator /imagemask eq{
				AGMIMG_&imagemask
			}{
				use_mask {
					level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse
				}{
					AGMIMG_&image
				}ifelse
			}ifelse
		}{
			Width Height
			Operator /imagemask eq{
				Decode 0 get 1 eq Decode 1 get 0 eq	and
				ImageMatrix /DataSource load
				AGMIMG_&imagemask
			}{
				BitsPerComponent ImageMatrix /DataSource load
				AGMIMG_&image
			}ifelse
		}ifelse
		cleartomark restore
	end
}def
/overprint_plate
{
	currentoverprint {
		0 get dup type /nametype eq {
			dup /DeviceGray eq{
				pop AGMCORE_black_plate not
			}{
				/DeviceCMYK eq{
					AGMCORE_is_cmyk_sep not
				}if
			}ifelse
		}{
			false exch
			{
				 AGMOHS_sepink eq or
			} forall
			not
		} ifelse
	}{
		pop false
	}ifelse
}def
/process_mask_L3
{
	dup begin
	/ImageType 1 def
	end
	4 dict begin
		/DataDict exch def
		/ImageType 3 def
		/InterleaveType 3 def
		/MaskDict 9 dict begin
			/ImageType 1 def
			/Width DataDict dup /MaskWidth known {/MaskWidth}{/Width} ifelse get def
			/Height DataDict dup /MaskHeight known {/MaskHeight}{/Height} ifelse get def
			/ImageMatrix [Width 0 0 Height neg 0 Height] def
			/NComponents 1 def
			/BitsPerComponent 1 def
			/Decode [0 1] def
			/DataSource AGMIMG_maskSource def
		currentdict end def
	currentdict end
}def
/use_mask
{
	dup type /dicttype eq
	{
		dup /Mask known	{
			dup /Mask get {
				level3
				{true}
				{
					dup /MaskWidth known {dup /MaskWidth get 1 index /Width get eq}{true}ifelse exch
					dup /MaskHeight known {dup /MaskHeight get 1 index /Height get eq}{true}ifelse
					3 -1 roll and
				} ifelse
			}
			{false} ifelse
		}
		{false} ifelse
	}
	{false} ifelse
}def
/make_line_source
{
	begin
	MultipleDataSources {
		[
		Decode length 2 div cvi {Width string} repeat
		]
	}{
		Width Decode length 2 div mul cvi string
	}ifelse
	end
}def
/datasource_to_str
{
	exch dup type
	dup /filetype eq {
		pop exch readstring
	}{
		/arraytype eq {
			exec exch copy
		}{
			pop
		}ifelse
	}ifelse
	pop
}def
/masked_image_simulation
{
	3 dict begin
	dup make_line_source /line_source xdf
	/mask_source AGMIMG_maskSource /LZWDecode filter def
	dup /Width get 8 div ceiling cvi string /mask_str xdf
	begin
	gsave
	0 1 translate 1 -1 Height div scale
	1 1 Height {
		pop
		gsave
		MultipleDataSources {
			0 1 DataSource length 1 sub {
				dup DataSource exch get
				exch line_source exch get
				datasource_to_str
			} for
		}{
			DataSource line_source datasource_to_str
		} ifelse
		<<
			/PatternType 1
			/PaintProc [
				/pop cvx
				<<
					/ImageType 1
					/Width Width
					/Height 1
					/ImageMatrix Width 1.0 sub 1 matrix scale 0.5 0 matrix translate matrix concatmatrix
					/MultipleDataSources MultipleDataSources
					/DataSource line_source
					/BitsPerComponent BitsPerComponent
					/Decode Decode
				>>
				/image cvx
			] cvx
			/BBox [0 0 Width 1]
			/XStep Width
			/YStep 1
			/PaintType 1
			/TilingType 2
		>>
		matrix makepattern set_pattern
		<<
			/ImageType 1
			/Width Width
			/Height 1
			/ImageMatrix Width 1 matrix scale
			/MultipleDataSources false
			/DataSource mask_source mask_str readstring pop
			/BitsPerComponent 1
			/Decode [0 1]
		>>
		imagemask
		grestore
		0 1 translate
	} for
	grestore
	end
	end
}def
/imageormask
{
	begin
		SkipImageProc {
			currentdict consumeimagedata
		}
		{
			save mark
			level2 AGMCORE_host_sep not and{
				currentdict
				Operator /imagemask eq DeviceN_PS2 not and {
					imagemask
				}{
					AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
						[/Separation /Black /DeviceGray {}] setcolorspace
						/Decode [ Decode 1 get Decode 0 get ] def
					}if
					use_mask {
						level3 {process_mask_L3 image}{masked_image_simulation}ifelse
					}{
						DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and 
						{
							Names convert_to_process not {
								2 dict begin
								/imageDict xdf
								/names_index 0 def
								gsave
								imageDict write_image_file {
									Names {
										dup (None) ne {
											[/Separation 3 -1 roll /DeviceGray {1 exch sub}] setcolorspace
											Operator imageDict read_image_file
											names_index 0 eq {true setoverprint} if
											/names_index names_index 1 add def
										}{
											pop
										} ifelse
									} forall
									close_image_file
								} if
								grestore
								end
							}{
								Operator /imagemask eq {
									imagemask
								}{
									image
								} ifelse
							} ifelse
						}{
							Operator /imagemask eq {
								imagemask
							}{
								image
							} ifelse
						} ifelse
					}ifelse
				}ifelse
			}{
				Width Height
				Operator /imagemask eq{
					Decode 0 get 1 eq Decode 1 get 0 eq	and
					ImageMatrix /DataSource load
					/Adobe_AGM_OnHost_Seps where {
						pop imagemask
					}{
						currentgray 1 ne{
							currentdict imageormask_sys
						}{
							currentoverprint not{
								1 AGMCORE_&setgray
								currentdict imageormask_sys
							}{
								currentdict ignoreimagedata
							}ifelse				 		
						}ifelse
					}ifelse
				}{
					BitsPerComponent ImageMatrix 
					MultipleDataSources{
						0 1 NComponents 1 sub{
							DataSource exch get
						}for
					}{
						/DataSource load
					}ifelse
					Operator /colorimage eq{
						AGMCORE_host_sep{
							MultipleDataSources level2 or NComponents 4 eq and{
								AGMCORE_is_cmyk_sep{
									MultipleDataSources{
										/DataSource [
											DataSource 0 get /exec cvx
											DataSource 1 get /exec cvx
											DataSource 2 get /exec cvx
											DataSource 3 get /exec cvx
											/AGMCORE_get_ink_data cvx
										] cvx def
									}{
										/DataSource 
										Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul 
										/DataSource load
										filter_cmyk 0 () /SubFileDecode filter def
									}ifelse
									/Decode [ Decode 0 get Decode 1 get ] def
									/MultipleDataSources false def
									/NComponents 1 def
									/Operator /image def
									invert_image_samples
						 			1 AGMCORE_&setgray
									currentdict imageormask_sys
								}{
									currentoverprint not Operator/imagemask eq and{
  			 							1 AGMCORE_&setgray
  			 							currentdict imageormask_sys
  			 						}{
  			 							currentdict ignoreimagedata
  			 						}ifelse
								}ifelse
							}{	
								MultipleDataSources NComponents AGMIMG_&colorimage						
							}ifelse
						}{
							true NComponents colorimage
						}ifelse
					}{
						Operator /image eq{
							AGMCORE_host_sep{
								/DoImage true def
								HostSepColorImage{
									invert_image_samples
								}{
									AGMCORE_black_plate not Operator/imagemask ne and{
										/DoImage false def
										currentdict ignoreimagedata
					 				}if
								}ifelse
						 		1 AGMCORE_&setgray
								DoImage
									{currentdict imageormask_sys} if
							}{
								use_mask {
									level3 {process_mask_L3 image}{masked_image_simulation}ifelse
								}{
									image
								}ifelse
							}ifelse
						}{
							Operator/knockout eq{
								pop pop pop pop pop
								currentcolorspace overprint_plate not{
									knockout_unitsq
								}if
							}if
						}ifelse
					}ifelse
				}ifelse
			}ifelse
			cleartomark restore
		}ifelse
	end
}def
/sep_imageormask
{
 	/sep_colorspace_dict AGMCORE_gget begin
	/MappedCSA CSA map_csa def
	begin
	SkipImageProc {
		currentdict consumeimagedata
	}
	{
		save mark 
		AGMCORE_avoid_L2_sep_space{
			/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
		}if
 		AGMIMG_ccimage_exists 
		MappedCSA 0 get /DeviceCMYK eq and
		currentdict/Components known and 
		Name () ne and 
		Name (All) ne and 
		Operator /image eq and
		AGMCORE_producing_seps not and
		level2 not and
		{
			Width Height BitsPerComponent ImageMatrix 
			[
			/DataSource load /exec cvx
			{
				0 1 2 index length 1 sub{
					1 index exch
					2 copy get 255 xor put
				}for
			} /exec cvx
			] cvx bind
			MappedCSA 0 get /DeviceCMYK eq{
				Components aload pop
			}{
				0 0 0 Components aload pop 1 exch sub
			}ifelse
			Name findcmykcustomcolor
			customcolorimage
		}{
			AGMCORE_producing_seps not{
				level2{
					AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
						/sep_tint AGMCORE_gget setcolor
					}if
					currentdict imageormask
				}{ 
					currentdict
					Operator /imagemask eq{
						imageormask
					}{
						sep_imageormask_lev1
					}ifelse
				}ifelse
 			}{
				AGMCORE_host_sep{
					Operator/knockout eq{
						currentdict/ImageMatrix get concat
						knockout_unitsq
					}{
						currentgray 1 ne{
 							AGMCORE_is_cmyk_sep Name (All) ne and{
 								level2{
	 								[ /Separation Name [/DeviceGray]
	 								{ 
	 									sep_colorspace_proc AGMCORE_get_ink_data
										1 exch sub
	 								} bind
									] AGMCORE_&setcolorspace
									/sep_tint AGMCORE_gget AGMCORE_&setcolor
 									currentdict imageormask_sys
	 							}{
	 								currentdict
									Operator /imagemask eq{
										imageormask_sys
									}{
										sep_image_lev1_sep
									}ifelse
	 							}ifelse
 							}{
 								Operator/imagemask ne{
									invert_image_samples
 								}if
		 						currentdict imageormask_sys
 							}ifelse
 						}{
 							currentoverprint not Name (All) eq or Operator/imagemask eq and{
								currentdict imageormask_sys 
								}{
								currentoverprint not
									{
 									gsave 
 									knockout_unitsq
 									grestore
									}if
								currentdict consumeimagedata 
		 					}ifelse
 						}ifelse
		 			}ifelse
 				}{
					currentcolorspace 0 get /Separation ne{
						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
						/sep_tint AGMCORE_gget setcolor
					}if
					currentoverprint 
					MappedCSA 0 get /DeviceCMYK eq and 
					Name inRip_spot_has_ink not and 
					Name (All) ne and {
						imageormask_l2_overprint
					}{
						currentdict imageormask
 					}ifelse
				}ifelse
			}ifelse
		}ifelse
		cleartomark restore
	}ifelse
	end
	end
}def
/decode_image_sample
{
	4 1 roll exch dup 5 1 roll
	sub 2 4 -1 roll exp 1 sub div mul add
} bdf
/colorSpaceElemCnt
{
	currentcolorspace 0 get dup /DeviceCMYK eq {
		pop 4
	}
	{
		/DeviceRGB eq {
			pop 3
		}{
			1
		} ifelse
	} ifelse
} bdf
/devn_sep_datasource
{
	1 dict begin
	/dataSource xdf
	[
		0 1 dataSource length 1 sub {
			dup currentdict /dataSource get /exch cvx /get cvx /exec cvx
			/exch cvx names_index /ne cvx [ /pop cvx ] cvx /if cvx
		} for
	] cvx bind
	end
} bdf		
/devn_alt_datasource
{
	11 dict begin
	/srcDataStrs xdf
	/dstDataStr xdf
	/convProc xdf
	/origcolorSpaceElemCnt xdf
	/origMultipleDataSources xdf
	/origBitsPerComponent xdf
	/origDecode xdf
	/origDataSource xdf
	/dsCnt origMultipleDataSources {origDataSource length}{1}ifelse def
	/samplesNeedDecoding
		0 0 1 origDecode length 1 sub {
			origDecode exch get add
		} for
		origDecode length 2 div div
		dup 1 eq {
			/decodeDivisor 2 origBitsPerComponent exp 1 sub def
		} if
		2 origBitsPerComponent exp 1 sub ne
	def
	[
		0 1 dsCnt 1 sub [
			currentdict /origMultipleDataSources get {
				dup currentdict /origDataSource get exch get dup type
			}{
				currentdict /origDataSource get dup type
			} ifelse
			dup /filetype eq {
				pop currentdict /srcDataStrs get 3 -1 /roll cvx /get cvx /readstring cvx /pop cvx
			}{
				/stringtype ne {
					/exec cvx
				} if
				currentdict /srcDataStrs get /exch cvx 3 -1 /roll cvx /xpt cvx
			} ifelse
		] cvx /for cvx
		currentdict /srcDataStrs get 0 /get cvx /length cvx 0 /ne cvx [
			0 1 Width 1 sub [
				Adobe_AGM_Utils /AGMUTIL_ndx /xddf cvx
				currentdict /origMultipleDataSources get {
					0 1 dsCnt 1 sub [
						Adobe_AGM_Utils /AGMUTIL_ndx1 /xddf cvx
						currentdict /srcDataStrs get /AGMUTIL_ndx1 /load cvx /get cvx /AGMUTIL_ndx /load cvx /get cvx
						samplesNeedDecoding {
							currentdict /decodeDivisor known {
								currentdict /decodeDivisor get /div cvx
							}{
								currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvxs
								BitsPerComponent /decode_image_sample load /exec cvx
							} ifelse
						} if
					] cvx /for cvx
				}{
					Adobe_AGM_Utils /AGMUTIL_ndx1 0 /ddf cvx
					currentdict /srcDataStrs get 0 /get cvx /AGMUTIL_ndx /load cvx		
					currentdict /origDecode get length 2 idiv dup 3 1 /roll cvx /mul cvx /exch cvx /getinterval cvx 
					[
						samplesNeedDecoding {
							currentdict /decodeDivisor known {
								currentdict /decodeDivisor get /div cvx
							}{
								currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvx
								BitsPerComponent /decode_image_sample load /exec cvx
								Adobe_AGM_Utils /AGMUTIL_ndx1 /AGMUTIL_ndx1 /load cvx 1 /add cvx /ddf cvx
							} ifelse
						} if
					] cvx /forall cvx
				} ifelse
				currentdict /convProc get /exec cvx
				currentdict /origcolorSpaceElemCnt get 1 sub -1 0 [
					currentdict /dstDataStr get 3 1 /roll cvx /AGMUTIL_ndx /load cvx currentdict /origcolorSpaceElemCnt get /mul cvx /add cvx /exch cvx
					currentdict /convProc get /filter_indexed_devn load ne {
						255 /mul cvx /cvi cvx 
					} if
					/put cvx 
				] cvx /for cvx
			] cvx /for cvx
			currentdict /dstDataStr get
		] cvx /if cvx
	] cvx bind
	end
} bdf
/devn_imageormask
{
 	/devicen_colorspace_dict AGMCORE_gget begin
	/MappedCSA CSA map_csa def
	2 dict begin
	dup dup
	/dstDataStr exch /Width get colorSpaceElemCnt mul string def
	/srcDataStrs [ 3 -1 roll begin
		currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse
		{
			Width Decode length 2 div mul cvi string
		} repeat
		end ] def
	begin
	SkipImageProc {
		currentdict consumeimagedata
	}
	{
		save mark 
		AGMCORE_producing_seps not {
			level3 not {
				Operator /imagemask ne {
					/DataSource [
						DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
						colorSpaceElemCnt /devicen_colorspace_dict AGMCORE_gget /TintTransform get 
						dstDataStr srcDataStrs devn_alt_datasource /exec cvx
						] cvx 0 () /SubFileDecode filter def
					/MultipleDataSources false def
					/Decode colorSpaceElemCnt [ exch {0 1} repeat ] def
				} if
			}if
			currentdict imageormask
 		}{
			AGMCORE_host_sep{
				Names convert_to_process {
					CSA map_csa 0 get /DeviceCMYK eq {
						/DataSource
							Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul 
							[
							DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
							4 /devicen_colorspace_dict AGMCORE_gget /TintTransform get 
							dstDataStr srcDataStrs devn_alt_datasource /exec cvx
							] cvx
						filter_cmyk 0 () /SubFileDecode filter def
						/MultipleDataSources false def
						/Decode [1 0] def
						/DeviceGray setcolorspace
			 			currentdict imageormask_sys
 					}{
						AGMCORE_report_unsupported_color_space
						AGMCORE_black_plate {
							/DataSource [
								DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
								CSA map_csa 0 get /DeviceRGB eq{3}{1}ifelse /devicen_colorspace_dict AGMCORE_gget /TintTransform get
								dstDataStr srcDataStrs devn_alt_datasource /exec cvx
								] cvx 0 () /SubFileDecode filter def
							/MultipleDataSources false def
							/Decode colorSpaceElemCnt [ exch {0 1} repeat ] def
				 			currentdict imageormask_sys
				 		}
						{
	 						gsave 
	 						knockout_unitsq
	 						grestore
							currentdict consumeimagedata 
						} ifelse
 					} ifelse
				}
				{	
					/devicen_colorspace_dict AGMCORE_gget /names_index known {
	 					Operator/imagemask ne{
	 						MultipleDataSources {
		 						/DataSource [ DataSource devn_sep_datasource /exec cvx ] cvx def
								/MultipleDataSources false def
	 						}{
								/DataSource /DataSource load dstDataStr srcDataStrs 0 get filter_devn def
	 						} ifelse
							invert_image_samples
	 					} if
			 			currentdict imageormask_sys
	 				}{
	 					currentoverprint not Operator/imagemask eq and{
							currentdict imageormask_sys 
							}{
							currentoverprint not
								{
	 							gsave 
	 							knockout_unitsq
	 							grestore
								}if
							currentdict consumeimagedata 
			 			}ifelse
	 				}ifelse
	 			}ifelse
 			}{
				currentdict imageormask
			}ifelse
		}ifelse
		cleartomark restore
	}ifelse
	end
	end
	end
}def
/imageormask_l2_overprint
{
	currentdict
	currentcmykcolor add add add 0 eq{
		currentdict consumeimagedata
	}{
		level3{ 			
			currentcmykcolor 
			/AGMIMG_k xdf 
			/AGMIMG_y xdf 
			/AGMIMG_m xdf 
			/AGMIMG_c xdf
			Operator/imagemask eq{
				[/DeviceN [
				AGMIMG_c 0 ne {/Cyan} if
				AGMIMG_m 0 ne {/Magenta} if
				AGMIMG_y 0 ne {/Yellow} if
				AGMIMG_k 0 ne {/Black} if
				] /DeviceCMYK {}] setcolorspace
				AGMIMG_c 0 ne {AGMIMG_c} if
				AGMIMG_m 0 ne {AGMIMG_m} if
				AGMIMG_y 0 ne {AGMIMG_y} if
				AGMIMG_k 0 ne {AGMIMG_k} if
				setcolor			
			}{	
				/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
				[/Indexed 				
					[
						/DeviceN [
							AGMIMG_c 0 ne {/Cyan} if
							AGMIMG_m 0 ne {/Magenta} if
							AGMIMG_y 0 ne {/Yellow} if
							AGMIMG_k 0 ne {/Black} if
						] 
						/DeviceCMYK {
							AGMIMG_k 0 eq {0} if
							AGMIMG_y 0 eq {0 exch} if
							AGMIMG_m 0 eq {0 3 1 roll} if
							AGMIMG_c 0 eq {0 4 1 roll} if						
						}
					]
					255
					{
						255 div 
						mark exch
						dup	dup dup
						AGMIMG_k 0 ne{
							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop		
							counttomark 1 roll
						}{
							pop
						}ifelse
						AGMIMG_y 0 ne{
							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop		
							counttomark 1 roll
						}{
							pop
						}ifelse
						AGMIMG_m 0 ne{
							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop		
							counttomark 1 roll
						}{
							pop
						}ifelse
						AGMIMG_c 0 ne{
							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop		
							counttomark 1 roll
						}{
							pop
						}ifelse
						counttomark 1 add -1 roll pop
					}
				] setcolorspace
			}ifelse
			imageormask_sys
		}{
	write_image_file{
		currentcmykcolor
		0 ne{
			[/Separation /Black /DeviceGray {}] setcolorspace
			gsave
			/Black
			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
			cvx modify_halftone_xfer
			Operator currentdict read_image_file
			grestore
		}if
		0 ne{
			[/Separation /Yellow /DeviceGray {}] setcolorspace
			gsave
			/Yellow
			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
			cvx modify_halftone_xfer
			Operator currentdict read_image_file
			grestore
		}if
		0 ne{
			[/Separation /Magenta /DeviceGray {}] setcolorspace
			gsave
			/Magenta
			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
			cvx modify_halftone_xfer
			Operator currentdict read_image_file
			grestore
		}if
		0 ne{
			[/Separation /Cyan /DeviceGray {}] setcolorspace
			gsave
			/Cyan 
			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
			cvx modify_halftone_xfer
			Operator currentdict read_image_file
			grestore
		} if
				close_image_file
			}{
				imageormask
			}ifelse
		}ifelse
	}ifelse
} def
/indexed_imageormask
{
	begin
		save mark 
 		currentdict
 		AGMCORE_host_sep{
			Operator/knockout eq{
				/indexed_colorspace_dict AGMCORE_gget dup /CSA known {
					/CSA get map_csa
				}{
					/CSD get get_csd /Names get
				} ifelse
				overprint_plate not{
					knockout_unitsq
				}if
			}{
				Indexed_DeviceN {
					/devicen_colorspace_dict AGMCORE_gget /names_index known {
			 			indexed_image_lev2_sep
					}{
						currentoverprint not{
							knockout_unitsq
			 			}if
			 			currentdict consumeimagedata
					} ifelse
				}{
		 			AGMCORE_is_cmyk_sep{
						Operator /imagemask eq{
							imageormask_sys
						}{
							level2{
								indexed_image_lev2_sep
							}{
								indexed_image_lev1_sep
							}ifelse
						}ifelse
					}{
						currentoverprint not{
							knockout_unitsq
			 			}if
			 			currentdict consumeimagedata
					}ifelse
				}ifelse
			}ifelse
 		}{
			level2{
				Indexed_DeviceN {
					/indexed_colorspace_dict AGMCORE_gget begin
					CSD get_csd begin
				}{
					/indexed_colorspace_dict AGMCORE_gget begin
					CSA map_csa 0 get /DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and {
						[/Indexed [/DeviceN [/Cyan /Magenta /Yellow /Black] /DeviceCMYK {}] HiVal Lookup]
						setcolorspace
					} if
					end
				} ifelse
				imageormask
				Indexed_DeviceN {
					end
					end
				} if
			}{ 
				Operator /imagemask eq{
					imageormask
				}{
					indexed_imageormask_lev1
				}ifelse
			}ifelse
 		}ifelse
		cleartomark restore
	end
}def
/indexed_image_lev2_sep
{
	/indexed_colorspace_dict AGMCORE_gget begin
	begin
		Indexed_DeviceN not {
			currentcolorspace 
			dup 1 /DeviceGray put
			dup 3
			currentcolorspace 2 get 1 add string
			0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
			{
			dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
			}for 
			put	setcolorspace
		} if
		currentdict 
		Operator /imagemask eq{
			AGMIMG_&imagemask
		}{
			use_mask {
				level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse
			}{
				AGMIMG_&image
			}ifelse
		}ifelse
	end end
}def
  /OPIimage
  {
  	dup type /dicttype ne{
  		10 dict begin
  			/DataSource xdf
  			/ImageMatrix xdf
  			/BitsPerComponent xdf
  			/Height xdf
  			/Width xdf
  			/ImageType 1 def
  			/Decode [0 1 def]
  			currentdict
  		end
  	}if
  	dup begin
  		/NComponents 1 cdndf
  		/MultipleDataSources false cdndf
  		/SkipImageProc {false} cdndf
  		/HostSepColorImage false cdndf
  		/Decode [
  				0 
  				currentcolorspace 0 get /Indexed eq{
  					2 BitsPerComponent exp 1 sub
  				}{
  					1
  				}ifelse
  		] cdndf
  		/Operator /image cdndf
  	end
  	/sep_colorspace_dict AGMCORE_gget null eq{
  		imageormask
  	}{
  		gsave
  		dup begin invert_image_samples end
  		sep_imageormask
  		grestore
  	}ifelse
  }def
/cachemask_level2
{
	3 dict begin
	/LZWEncode filter /WriteFilter xdf
	/readBuffer 256 string def
	/ReadFilter
		currentfile
		0 (%EndMask) /SubFileDecode filter
		/ASCII85Decode filter
		/RunLengthDecode filter
	def
	{
		ReadFilter readBuffer readstring exch
		WriteFilter exch writestring
		not {exit} if
	}loop
	WriteFilter closefile
	end
}def
/cachemask_level3
{
	currentfile
	<<
		/Filter [ /SubFileDecode /ASCII85Decode /RunLengthDecode ]
		/DecodeParms [ << /EODCount 0 /EODString (%EndMask) >> null null ]
		/Intent 1
	>>
	/ReusableStreamDecode filter
}def
/spot_alias
{
	/mapto_sep_imageormask 
	{
		dup type /dicttype ne{
			12 dict begin
				/ImageType 1 def
				/DataSource xdf
				/ImageMatrix xdf
				/BitsPerComponent xdf
				/Height xdf
				/Width xdf
				/MultipleDataSources false def
		}{
			begin
		}ifelse
				/Decode [/customcolor_tint AGMCORE_gget 0] def
				/Operator /image def
				/HostSepColorImage false def
				/SkipImageProc {false} def
				currentdict 
			end
		sep_imageormask
	}bdf
	/customcolorimage
	{
		Adobe_AGM_Image/AGMIMG_colorAry xddf
		/customcolor_tint AGMCORE_gget
		bdict
			/Name AGMIMG_colorAry 4 get
			/CSA [ /DeviceCMYK ] 
			/TintMethod /Subtractive
			/TintProc null
			/MappedCSA null
			/NComponents 4 
			/Components [ AGMIMG_colorAry aload pop pop ] 
		edict
		setsepcolorspace
		mapto_sep_imageormask
	}ndf
	Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
	/customcolorimage
	{
		Adobe_AGM_Image/AGMIMG_override false put
		dup 4 get map_alias{
			/customcolor_tint AGMCORE_gget exch setsepcolorspace
			pop
			mapto_sep_imageormask
		}{
			AGMIMG_&customcolorimage
		}ifelse			
	}bdf
}def
/snap_to_device
{
	6 dict begin
	matrix currentmatrix
	dup 0 get 0 eq 1 index 3 get 0 eq and
	1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
	{
		1 1 dtransform 0 gt exch 0 gt /AGMIMG_xSign? exch def /AGMIMG_ySign? exch def
		0 0 transform
		AGMIMG_ySign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch
		AGMIMG_xSign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch
		itransform /AGMIMG_llY exch def /AGMIMG_llX exch def
		1 1 transform
		AGMIMG_ySign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch
		AGMIMG_xSign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch
		itransform /AGMIMG_urY exch def /AGMIMG_urX exch def			
		[AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub  AGMIMG_llX AGMIMG_llY] concat
	}{
	}ifelse
	end
} def
level2 not{
	/colorbuf
	{
		0 1 2 index length 1 sub{
			dup 2 index exch get 
			255 exch sub 
			2 index 
			3 1 roll 
			put
		}for
	}def
	/tint_image_to_color
	{
		begin
			Width Height BitsPerComponent ImageMatrix 
			/DataSource load
		end
		Adobe_AGM_Image begin
			/AGMIMG_mbuf 0 string def
			/AGMIMG_ybuf 0 string def
			/AGMIMG_kbuf 0 string def
			{
				colorbuf dup length AGMIMG_mbuf length ne
					{
					dup length dup dup
					/AGMIMG_mbuf exch string def
					/AGMIMG_ybuf exch string def
					/AGMIMG_kbuf exch string def
					} if
				dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
			}
			addprocs
			{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage	
		end
	} def			
	/sep_imageormask_lev1
	{
		begin
			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
				{
					255 mul round cvi GrayLookup exch get
				} currenttransfer addprocs settransfer
				currentdict imageormask
			}{
				/sep_colorspace_dict AGMCORE_gget/Components known{
					MappedCSA 0 get /DeviceCMYK eq{
						Components aload pop
					}{
						0 0 0 Components aload pop 1 exch sub
					}ifelse
					Adobe_AGM_Image/AGMIMG_k xddf 
					Adobe_AGM_Image/AGMIMG_y xddf 
					Adobe_AGM_Image/AGMIMG_m xddf 
					Adobe_AGM_Image/AGMIMG_c xddf 
					AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
						{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
						currentdict imageormask
					}{ 
						currentcolortransfer
						{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
						{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
						{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
						{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
						setcolortransfer
						currentdict tint_image_to_color
					}ifelse
				}{
					MappedCSA 0 get /DeviceGray eq {
						{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
						currentdict imageormask
					}{
						MappedCSA 0 get /DeviceCMYK eq {
							currentcolortransfer
							{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
							{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
							{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
							{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
							setcolortransfer 
							currentdict tint_image_to_color
						}{ 
							currentcolortransfer
							{pop 1} exch addprocs 4 1 roll
							{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
							{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
							{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
							setcolortransfer 
							currentdict tint_image_to_color
						}ifelse
					}ifelse
				}ifelse
			}ifelse
		end
	}def
	/sep_image_lev1_sep
	{
		begin
			/sep_colorspace_dict AGMCORE_gget/Components known{
				Components aload pop
				Adobe_AGM_Image/AGMIMG_k xddf 
				Adobe_AGM_Image/AGMIMG_y xddf 
				Adobe_AGM_Image/AGMIMG_m xddf 
				Adobe_AGM_Image/AGMIMG_c xddf 
				{AGMIMG_c mul 1 exch sub}
				{AGMIMG_m mul 1 exch sub}
				{AGMIMG_y mul 1 exch sub}
				{AGMIMG_k mul 1 exch sub}
			}{ 
				{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
				{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
				{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
				{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
			}ifelse
			AGMCORE_get_ink_data currenttransfer addprocs settransfer
			currentdict imageormask_sys
		end
	}def
	/indexed_imageormask_lev1
	{
		/indexed_colorspace_dict AGMCORE_gget begin
		begin
			currentdict
			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
				{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
				imageormask
			}{
				MappedCSA 0 get /DeviceGray eq {
					{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
					imageormask
				}{
					MappedCSA 0 get /DeviceCMYK eq {
						currentcolortransfer
						{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
						{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
						{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
						{4 mul HiVal mul round cvi		 Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
						setcolortransfer 
						tint_image_to_color
					}{ 
						currentcolortransfer
						{pop 1} exch addprocs 4 1 roll
						{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
						{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
						{3 mul HiVal mul round cvi 		Lookup exch get HiVal div} exch addprocs 4 1 roll
						setcolortransfer 
						tint_image_to_color
					}ifelse
				}ifelse
			}ifelse
		end end
	}def
	/indexed_image_lev1_sep
	{
		/indexed_colorspace_dict AGMCORE_gget begin
		begin
			{4 mul HiVal mul round cvi		 Lookup exch get HiVal div 1 exch sub}
			{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
			{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
			{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
			AGMCORE_get_ink_data currenttransfer addprocs settransfer
			currentdict imageormask_sys
		end end
	}def
}if
end
systemdict /setpacking known
{
	setpacking
} if
%%EndResource
currentdict Adobe_AGM_Utils eq {end} if
%%EndProlog
%%BeginSetup
Adobe_AGM_Utils begin
2 2010 Adobe_AGM_Core/doc_setup get exec
Adobe_CoolType_Core/doc_setup get exec
Adobe_AGM_Image/doc_setup get exec
currentdict Adobe_AGM_Utils eq {end} if
%%EndSetup
%%Page: sphere.pdf 1
%%EndPageComments
%%BeginPageSetup
/currentdistillerparams where
{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse
{ userdict /AI11_PDFMark5 /cleartomark load put
userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put}
{ userdict /AI11_PDFMark5 /pdfmark load put
userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse
[/NamespacePush AI11_PDFMark5
[/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5
[{ai_metadata_stream_123}
currentfile 0 (%  &&end XMP packet marker&&)
/SubFileDecode filter AI11_ReadMetadata_PDFMark5
<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+  <pdf:Producer>pdfeTeX-1.21a</pdf:Producer>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+  xmlns:pdfx='http://ns.adobe.com/pdfx/1.3/'>
+  <pdfx:PTEX.Fullbanner>This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4</pdfx:PTEX.Fullbanner>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+  xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+  xmlns:xap='http://ns.adobe.com/xap/1.0/'
+  xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+  <xap:CreateDate>2005-12-07T14:03:19+01:00</xap:CreateDate>
+  <xap:CreatorTool>TeX</xap:CreatorTool>
+  <xap:ModifyDate>2005-12-07T14:29:58Z</xap:ModifyDate>
+  <xap:Thumbnails>
+   <rdf:Alt>
+    <rdf:li rdf:parseType='Resource'>
+     <xapGImg:format>JPEG</xapGImg:format>
+     <xapGImg:width>256</xapGImg:width>
+     <xapGImg:height>244</xapGImg:height>
+     <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA9AEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpG [...]
+    </rdf:li>
+   </rdf:Alt>
+  </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>
+  <xapMM:DocumentID>uuid:78e3a3e0-6724-11da-aded-000a95cd9010</xapMM:DocumentID>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+  xmlns:dc='http://purl.org/dc/elements/1.1/'>
+  <dc:format>application/postscript</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             [...]
%  &&end XMP packet marker&&
[{ai_metadata_stream_123}
<</Type /Metadata /Subtype /XML>>
/PUT AI11_PDFMark5
[/Document
1 dict begin /Metadata {ai_metadata_stream_123} def
currentdict end /BDC AI11_PDFMark5
Adobe_AGM_Utils begin
Adobe_AGM_Core/page_setup get exec
Adobe_CoolType_Core/page_setup get exec
Adobe_AGM_Image/page_setup get exec
%%EndPageSetup
Adobe_AGM_Core/AGMCORE_save save ddf
1 -1 scale 0 -325 translate
[1 0 0 1 0 0 ]  concat
% page clip
gsave
newpath
gsave % PSGState
0 0 mo
0 325 li
344 325 li
344 0 li
clp
[1 0 0 1 0 0 ] concat
gsave % PSGState
0 325 mo
344 325 li
344 0 li
0 0 li
0 325 li
clp
gsave % PSGState
-12.2452 351.722 mo
356.255 351.722 li
356.255 -16.7779 li
-12.2452 -16.7779 li
-12.2452 351.722 li
clp
0.216 lw
0 lc
0 lj
2.6131 ml
[] 0 dsh
true sadj
329.505 209.672 mo
14.5088 125.27 li
14.5079 209.672 mo
329.506 125.27 li
172.007 324.969 mo
172.007 9.97217 li
false sop
/0 
[/DeviceRGB] add_csa
0 0 0 rgb
@
171.664 77.0962 mo
221.234 77.0962 261.663 117.526 261.663 167.096 cv
261.663 216.667 221.234 257.094 171.664 257.094 cv
122.094 257.094 81.6641 216.667 81.6641 167.096 cv
81.6641 117.526 122.094 77.0962 171.664 77.0962 cv
1 1 1 rgb
ef
172.007 77.4712 mo
221.578 77.4712 262.006 117.901 262.006 167.471 cv
262.006 217.042 221.578 257.469 172.007 257.469 cv
122.438 257.469 82.0079 217.042 82.0079 167.471 cv
82.0079 117.901 122.438 77.4712 172.007 77.4712 cv
cp
0 0 0 rgb
@
0.5 lw
191.078 139.833 mo
186.748 127.856 179.469 120.302 172.007 120.302 cv
@
0.216 lw
[4.53601 4.32001 ] 0 dsh
172.007 257.469 mo
147.222 257.469 127.008 217.042 127.008 167.471 cv
127.008 117.901 147.222 77.4712 172.007 77.4712 cv
@
[] 0 dsh
262.006 167.471 mo
262.006 179.864 221.578 189.971 172.007 189.971 cv
122.438 189.971 82.0079 179.864 82.0079 167.471 cv
@
[4.53601 4.32001 ] 0 dsh
233.469 183.86 mo
85.125 144.188 li
262.006 167.471 mo
262.006 155.079 221.578 144.971 172.007 144.971 cv
122.438 144.971 82.0079 155.079 82.0079 167.471 cv
@
329.505 209.672 mo
322.747 211.055 li
324.343 205.094 li
329.505 209.672 li
ef
110.657 183.922 mo
259 144.334 li
@
14.5088 209.672 mo
19.6709 205.096 li
21.2686 211.057 li
14.5088 209.672 li
ef
0.5 lw
[] 0 dsh
172.007 167.471 mo
208.536 114.972 li
@
206.956 113.872 mo
207.561 113.002 208.763 112.784 209.635 113.391 cv
210.507 113.998 210.721 115.201 210.117 116.071 cv
209.511 116.941 208.308 117.159 207.436 116.552 cv
206.564 115.945 206.35 114.742 206.956 113.872 cv
ef
195.218 177.954 mo
188.292 178.889 180.056 179.452 172.007 179.452 cv
160.027 179.452 147.86 178.235 139.25 176.221 cv
215.912 187.11 mo
172.007 167.471 li
@
0.216 lw
172.007 257.469 mo
196.792 257.469 217.007 217.042 217.007 167.471 cv
217.007 117.901 196.792 77.4712 172.007 77.4712 cv
@
[4.53601 4.32001 ] 0 dsh
172.007 257.469 mo
172.007 77.4712 li
@
172.007 9.97217 mo
168.923 16.1431 li
175.094 16.1431 li
172.007 9.97217 li
ef
grestore % PSGState
false sop
0 0 0 rgb
%ADOBeginSubsetFont: CMMI12 Initial
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
13 dict dup begin
/FontType 1 def
/FontName /CMMI12 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/Weight (Roman) def
/ItalicAngle -14.04 def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 114 /r put
dup 120 /x put
def
/UniqueID 5087386 def
/FontBBox {-31 -250 1026 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-21 0 431 441 452 463 683 704] def
/OtherBlues [-204 -194] def
/BlueScale 0.04379 def
/StdHW [22] def
/StdVW [65] def
/StemSnapH [22 29] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
3 dict dup begin
/r <1C60D8A8C9B7628037FFC34225CDB51C16B6280E0517770F69131E099966
F689816DBB94E394FAC1DD9A7C1A14C9636A7D2A8B72705C22612EFEFFA6E526
4FF4EBF61CD9C4DD8B27578E011E8DDEBF419CAC1F6A2F1FE994DF5C901FD0BE
A9E7C62177556CCE084E3BECB95D975A4D2F2A65A78E12C3AB4ACCE568AEB738
452E5B0C6CD2019C0B9AA154E192BB18B0CE92FA48AF13577432A54DCB74656A
4A13E51A965BFC9D023FADEC3106AF414E85A814E3E3249DD8D208FADB8DC3FB
27> |-
/x <1C60D8A8C9B7EF325DF88715F012E085EB64F0A4FE8713D04CDEA9CB20E9
B15249D56AC8A0C2E0E12761B3B972D802D5F8B18F4F576C2666702361F5C2B4
8D78C52532223071C01FA681430DA735F1A7AE51C80B9138D3695956A62D9B46
0B17A4E36DAB726D8A63568FAB7BE160BEDB176EF49099F6F41A5863B069F194
EE62B71BD3B36F4A3FC9946AAB077F14F50A9438F7F58BFD49954B5720AE57E1
71B43DB3AF9DBD54119DEA2A7A1C00079C808029D90A7EF0A91CB3EF0628D6A4
2D1F0CCEC95B876569E8B0C44DA543AE071E278458104AF4D774998DBD764C7F
96602C> |-
/.notdef <1C60D8A8C9B81F2CC3> |-
end put
end
dup /FontName get exch definefont pop
end
%ADOEndSubsetFont
/JPGFDA+CMMI12 /CMMI12 findfont def
/JPGFDA+CMMI12*1 
[
114{/.notdef}repeat /r 5{/.notdef}repeat /x 135{/.notdef}repeat
] JPGFDA+CMMI12 nfnt
JPGFDA+CMMI12*1  [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
201.887 135.73 mov
(r) sh
333.424 215.398 mov
(x) sh
%ADOBeginSubsetFont: CMR8 Initial
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
13 dict dup begin
/FontType 1 def
/FontName /CMR8 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/Weight (Roman) def
/ItalicAngle 0 def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 50 /two put
def
/UniqueID 5000791 def
/FontBBox {-36 -250 1070 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-21 0 431 446 665 675 683 704] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [28] def
/StdVW [76] def
/StemSnapH [28 33] def
/StemSnapV [76 92] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
2 dict dup begin
/two <1C60D8A8C9B7883C479819BD474E9964F6BF369AAF487ABFE629F8A563
37D176F7C9556B1CAAE607CA6285C927013D8BDE6137B6739AFDAF8D7D8B1E86
BAFBB9D834592D58F996DFF88B929F1FABA7347C2BBDB5519BE210DDE834DD1D
CB9A84AA77E585DFD5A86708901622F6AC3CFFFF626D8C5FD08A157C4A8F19F7
F5FA2E61175441FDD6> |-
/.notdef <1C60D8A8C9B808980A> |-
end put
end
dup /FontName get exch definefont pop
end
%ADOEndSubsetFont
/GPGFDA+CMR8 /CMR8 findfont def
/GPGFDA+CMR8*1 
[
50{/.notdef}repeat /two 205{/.notdef}repeat
] GPGFDA+CMR8 nfnt
GPGFDA+CMR8*1  [7.96999 -9.76042e-16 -9.76042e-16 -7.96999 0 0 ]mfnt sfnt
340.076 217.191 mov
(2) sh
JPGFDA+CMMI12*1  [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
0.416016 215.398 mov
(x) sh
%ADOBeginSubsetFont: CMR8 AddGlyphs
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
systemdict begin
GPGFDA+CMR8 dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/one <1C60D8A8C9B7883C47E9695A643EC7CDC9D492AB150D29B838BCDE5298
51B4F36139BB3C5556B7F7E4934494C8CA669B61323ACA68A6240E429D123FC3
10871A43C3C2B8652E724507A70C99EC1FF6EE1EA351C2BAEF> |-
systemdict /gcheck known {setglobal} if end {end} if
end
GPGFDA+CMR8 /Encoding get
dup 49 /one put
pop
%ADOEndSubsetFont
/GPGFDA+CMR8*2 
[
49{/.notdef}repeat /one 206{/.notdef}repeat
] GPGFDA+CMR8 nfnt
GPGFDA+CMR8*2  [7.96999 -9.76042e-16 -9.76042e-16 -7.96999 0 0 ]mfnt sfnt
7.06787 217.191 mov
(1) sh
JPGFDA+CMMI12*1  [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
168.42 5.39307 mov
(x) sh
%ADOBeginSubsetFont: CMR8 AddGlyphs
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
systemdict begin
GPGFDA+CMR8 dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/three <1C60D8A8C9B7883CBAA92B92A60ED97CC7706D34A36348BC2B93805C
7C1833580FAA27E95855649C4EE0492E1681D62AEDB7EC0D4D44FE91FF7AD466
5FD8D6994E56FB00B47353D8538086D2C46021ADFB3F80264F6C2EF23799D21E
81ACDE63FE62C97F7BE27D7DCE3B9BAF5B096FE9F9E10574C4FE3C149B03DD0A
59DE10D784DCCBFDFC6D3C5399775DC28DB91A04691B5B8F3D1C009DFAB49BB8
18D90EA7C1> |-
systemdict /gcheck known {setglobal} if end {end} if
end
GPGFDA+CMR8 /Encoding get
dup 51 /three put
pop
%ADOEndSubsetFont
/GPGFDA+CMR8*3 
[
51{/.notdef}repeat /three 204{/.notdef}repeat
] GPGFDA+CMR8 nfnt
GPGFDA+CMR8*3  [7.96999 -9.76042e-16 -9.76042e-16 -7.96999 0 0 ]mfnt sfnt
175.072 7.18604 mov
(3) sh
grestore % PSGState
0.216 lw
0 lc
0 lj
2.6131 ml
[] 0 dsh
true sadj
72.0171 194.273 mo
110.657 183.922 li
false sop
0 0 0 rgb
@
4 ml
270.647 193.896 mo
232.847 183.767 li
@
%ADOBeginSubsetFont: CMMI12 AddGlyphs
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
systemdict begin
JPGFDA+CMMI12 dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/theta1 <1C60D8A8C9B7FA1301BE6180781D244B43F2F97D795A8C67AF29757
0B25D011F7553AE87DA67246C75A123D38A7E2A9E73C089D0155659C213520B6
BF3708CF9E463A551165DF528979C5D29939E4C663B7CB9ACD2D34590AACA015
370E594274B63269C8F1CFCDE8C91D720B13F6B93C2E0C4CB325FAAA90199F59
0A1AC543010663224FE9AA5C2BA7CFE5A136E95946849176A836312B7F034FCF
4D6AC1AC7238CDCD1DE8CE95FDACABE12915BD7468460A9C53C13689C62E4957
EFA9AD8D18B2997483879F7A346270DF44C1AE41B892E443E6FAAAFC0E03E340
2ECABE2B7246DA1D5670AD7110BF40E94066EA9490675CB0A81BEFFC608EFE8E
B9C> |-
/phi1 <1C60D8A8C9B6747BB73B43E39C205190D75AB2FA80068C30CFF75B781
B8EF25B40D3CE1F8BF1235B5920904D98C1751ACD1ECE66AA5D36E6C1B0A8270
63C26C16EF05F21A86369CC9EEB5C4FBFDD1B1033971034EB6BB92D726AF889E
8FAEBC642112085AE58F32148895EE95BF45DBD1651424FB17E02ED87E805BC1
2A8D7FC6BBCEE3EDEE61F46B81CD695594BD8913AA6E31AFF96FA2BC0EB51123
4DC983CFE742ECE43A47058200D1BD7CA0237343381C2D71B3385B4C3D1> |-
/xi <1C60D8A8C9B71063258B553F1B532EC10F40E30216C77B3F0B5660F2681
931B66B80D025CB05EB0F48CA6066E901D78AA8BDBA0138C54FFF8BC2753E842
2BAE3AE8CA07E859A4B65B4D5BD4727F3F9107AA32A4A57EB21B5630206288DD
3BEEDDAA3A69061629F0A34376B6E16CE06067FD5361A33C8D6231C3893FBC27
DA84816540B60AC54A3B46F95C2017D13E3D6A05441ECC1CCFCC0E271B2EB892
AA15AB9593923D3AFC1719CB0C359E9F3496DECE857F42C607298AB3F002EE31
0452C9265BCFBD8D84E2C48799C08153602DF1797D52F8C67BDFAEBA64E17B0D
D653E1C5FDC09B8B1BE444DD31C2CCE33B522DE3589EF9276F4E8BDDA185B4DF
FD3F802509F0BBF017DBB660603BE2B25606F1B38D53804373299EC38C0556EC
A9B2D754890C919EA4C2FFA9F42AAF4905ECF7BF321854AD8259B94818A6467E
BBE549BDD6FDF0210134D> |-
systemdict /gcheck known {setglobal} if end {end} if
end
JPGFDA+CMMI12 /Encoding get
dup 35 /theta1 put
dup 39 /phi1 put
dup 187 /xi put
pop
%ADOEndSubsetFont
/JPGFDA+CMMI12*1 
[
35{/.notdef}repeat /theta1 3{/.notdef}repeat /phi1 74{/.notdef}repeat /r 5{/.notdef}repeat /x 
66{/.notdef}repeat /xi 68{/.notdef}repeat
] JPGFDA+CMMI12 nfnt
JPGFDA+CMMI12*1  [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
176.416 140.398 mov
(#) sh
162.916 175.898 mov
(') sh
212.916 110.398 mov
(\273) sh
%ADOBeginClientInjection: EndPageContent "AI11EPS"
userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse

%ADOEndClientInjection: EndPageContent "AI11EPS"
% page clip
grestore
grestore % PSGState
/JPGFDA+CMMI12*1 ufnt
/GPGFDA+CMR8*1 ufnt
/GPGFDA+CMR8*2 ufnt
/GPGFDA+CMR8*3 ufnt
Adobe_AGM_Core/AGMCORE_save get restore
%%PageTrailer
[/EMC AI11_PDFMark5
[/NamespacePop AI11_PDFMark5
Adobe_AGM_Image/page_trailer get exec
Adobe_CoolType_Core/page_trailer get exec
Adobe_AGM_Core/page_trailer get exec
currentdict Adobe_AGM_Utils eq {end} if
%%Trailer
Adobe_AGM_Image/doc_trailer get exec
Adobe_CoolType_Core/doc_trailer get exec
Adobe_AGM_Core/doc_trailer get exec
%%EOF
%AI9_PrintingDataEnd

userdict /AI9_read_buffer 256 string put
userdict begin
/ai9_skip_data
{
	mark
	{
		currentfile AI9_read_buffer { readline } stopped
		{
		}
		{
			not
			{
				exit
			} if
			(%AI9_PrivateDataEnd) eq
			{
				exit
			} if
		} ifelse
	} loop
	cleartomark
} def
end
userdict /ai9_skip_data get exec
%AI9_PrivateDataBegin
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: Adobe Illustrator(R) 11.0
%%AI8_CreatorVersion: 11.0.0
%%For: (Holden Caulfield) (Damage Inc.)
%%Title: (sphere.eps)
%%CreationDate: 7/12/05 15:30
%AI9_DataStream
%Gb",KLKZH)e*+=CmQjfK5_L"1(^S$0L]W/g&;Qo(#M at l,]DC",4dekaIfH#2r9lh-0[l`,]"1d at Fh:o3fkT4[9aBA)5KUS]qC`Nm
%mtKt]_rWA.m^RtmHY1i79t9Gnb0RZS at Zd.>BD`saQQ<QI?]*J%Cq<#qF#Q$Z'TJ^]d+>n>U-O,aT8uKIc_t76.ahit at ud,MPP0#M
%FrH$HTdK3sIaK3UW"OJ*O0>G:nZ'W0&K"dAC4]bFi'j`(^Xp$X&e,*=6_Q.#$<\\IA;%e4j4?A10Np%'p2W!Z^3`Dg%;mpC\!J((
%"Vme.,C<B(J'-Z&OpG5rb"kscBfq\Pm.mUlFW,jMO[sRI*/TPaALqkONOZ`eHT1?[BY']cL1Ghb;4!pu__:>Ns.HVh1B:5><b%0)
%T8inm;0\<JeS\t^DN"fLe7H[;(c<0R-2^43OTLM#5N%i@^1ZI at N&eEb%goLX=-I\%&'$>Vee66MS=;EK%iAJ7'o'P[64*9Umnn0`
%^)%.^pZO#C*Y"AMHDGM`!^P*81a'4H6^(A9do53qK@)MI5tbb>$N-hM:Ki_6Mj"Z6K[[Hjs+L/3JJ&E:\`BUhe?NUq\=.N:m1E`[
%7eQ$8*`-8\c1I670AFU^8;N/l'tJhfZ at A0*1dUae'S=YE'L!0:prqj<VkF\"%>E^l69kT9a]k'bg8%b+$DjIop_AcTWFuu<7ADCa
%[[BZOR7%,!,g\cSSOc#F6ious2u&&(\K$jVje-3<#B+WC.)W@[Q=ZggW6MX;Sn1J6!\o7m^dEDnDkX''4qr%Ii"J`!R,AWM_3i0'
%P'8T(pk1CV,5?h2MjPW0 at 8-.s^L0J!#qZ`OOd9EDn-S-0^[MrW"FUo!P5_-hN!hhC%*QLDEIIn.Jn'C$JgL1;29EoGoE9==)sJ at c
%(["=?62j/!(a",l94S7KW6%+VA+1:,_>(qd-<MF6@=7PN^L2.oro'&+%Su!r9#:;\PKY5E&qX355P-AP!'i0bO#UbT5([o*7IVY`
%KoDNe&!.I78ACs3EP=sMnK4!Hd>=(oUP%92eDr3?%mH[$Tl1bi_$R(KT25_]kAZ9B/Zp+G3RS#'DNTZB=qR_C+=EC?BL,l>ig^Xo
%'Bf_Q8\YCH!4b'6in+P':eL)FZqfnMpZ*EIS?,CNc",*+DFb-dr^Z0R?L=PK_^2HdH"DhWP%gOb[n-6KrBY:gL;]?0ca&@<Gocr0
%&X-$q`eFc"#d;l6Bp[>FW$)'EIgK2PKRYgQhT12g^MoS<QN*+t%TaoBT#cE'^K?HmQN*+tnMp=bO,JG,Kn#L!GpE>8s0>eu>Q.:p
%3Eut[T#cE'^O2XNQN*+t60TKMk:h,L8`l<9(4VI]BRFn](QP^.TJ8dRQl)$DZV2pnZC*]MNmJ at VrQ`5tQ5/73p_Vt0`UZh5QQXW4
%56d\d-!=-/'kU,7$g-"7Xjo'M,Iaa'6_9-E(_^Fr//&G)iW(q8%o;]LT^Z!\)2nlMZ\ndNBUlFVrXQ6V>,7d(=R;N7#c33h;+cKf
%W9?\G2a[#[:g(T&l:jbCS^@:o95TP4j!*'qf]BCO4B\@':&`S*EYL523 at Y[Waop7;1k/Z$!2'_)pMaGj4=cEqarn9(,!u<O7';H?
%$Q,Wnc3]1jRurfZ&u58\>Gbn,=6q5f`r_?dDlSr#C58SLh\7AG>(g..67ZZ>8n_U/brj4T:g864/,RVkkt%<NRLq7uf#DWBF_R:B
%pIQd"bRqiY/)`Uo)M-[Q7KJDQ?]\Y--l$>)g6"kBW^\L+&lel8r"<1c2_d.A&R)k[E2g&GG;<dk25\5K/b1%7H<af;ij_?j\C;h$
%):GT+<e5=k<[au`RRH1V)%do>6#)SqL)=@#ieSn.9>!UA$@uH0,'"4eDcLXor5*epgu8ZB6`O6s!mQWZOAK>EN$G-l at rZoe'UXh.
%>J])<TrK]l[q;cGN/&*c$+5k$'Vf.P]d7bDP,JOO_PhgCTGDjN@]H#RhoZhc at SCN.S-rb#;-i.;/B9/.h7?i=-u_ul]sBKTUlO5f
%4R_Sf$dU$V)?Uh- at tM?/=4J4C8G!r=3B*_q9X;#:3+uQN1X1k-=/^/qC0,[Mk"D^uADI$h`"nUg-QH$E#&&uo at oJGoE+sPHieu$b
%G(#;/(Z`;`0jtfbXAC4e<)+F4"r`)9>,2qa3$fK/a(g-g26<cLW`I"UV+=c#HkZ#^$EO&1j7/SQ8/g^]+$-Ui2km:B&8TbBp"C%n
%d$HE6W+9),2#U!D9=67'mpXHJQ/;icN[,FkdTb^[lFmQ`ULU[PpI&^9,L8[M'kOSYHI96Zlnd'(Uu.g]5[!"X at LJk%^c,AVPbrgf
%,F0QX441N*Xp",`dU.PE;A(+<A:Ok:3Wu;KN+qB0UVqf_2k3b)6)eQjA'Sh(W99M(#sF.C):=mBY8$Y(;<NdLFBGNTUj7c7,#S"Q
%7qm6[89."l#75EJ>8KdPoqsId8BX:6[7"!$`'b=YKLV8!J#2h_6tOV:\"qYS9X0J[Nf:(Wnr=Gms6j&hgX]o?GCjd)pu]^pHf3d,
%hf?%0GafMDkHi=W`j5\k-[j$RlJ-D;GJ#t'M88k#[cA4!l!Va&-),qkhu8N9-YadQ)f[udZNt)doK&*"EkTkFg^`E"h:7Yrgb)+W
%*Z(c2`>jGUWCE?kC#dbGmI#f!XsX*%pJ7G6QQc%V\FH`S3/;91!Z\2^.B7DdeIcME7*:H&AO]Rc.;muSR$"[1;Keoc4-Rh4#Uh3$
%F at D(ijJ%[M8h/S2%gF!qkTKpd0$m&^%P3nc5DE#d\1Tbn".dtebUiqg2 at gXl%g/cMUcn*f`X#4"hL7_lo`Et&r!u"1%$uMkhsPKJ
%2ZFL70M(#j:1q`kf+2E_J]_HW?47k&U\T/BR#Imm\WHU\%lXqk<nbTS[;t9a);jb$W2\1/KC>#tU:V>]&$\A=4VrGE??$>iA8h29
%1r0(=*OdEk/#'1D[lm1qUg!`e$r-.N(kWQlC2Pe2Nk,-er^ANWNQ7eSN-m?uGI]tn9L_Jo2W7Fq0EW5]p(0aqDM%mr6:NBCNJ]qk
%S+r?JS36.trYbfg84\q`r[`K`o5-7Xq%Z-3OQ)NL_2Ws'jrAsO#RslY&(GZ.Nr#1:J3`U/bNl7Y?>pO-p]i:[*6qRm6m at XV7R<bo
%`V0e7N4]9uStP5'4MOdWl]kH5MA3(P65;q9ij^M7`'#PhYAE?m]^!=,/Jb+3U,JEq8\<.J^%33mf'_N$6'a?1d>l"]2''("eR[HA
%/^ZVL9t at Gm[uKZ5)L8u*'IbmYMq*JRmbOV(AEsZ1WVj+bK+5ua?Ba^qMAqATCGc")?OXZm-JSSq!f, at V(nj'r*-04\jTs(#k^su&
%d-"jpR,CJ%Gh2$Qg##'RbLq9q*qpCF3jY[B$)W&l+oFl:C,h]26!_H*@DST?hZg?\q+1qnLZ<$REGr,[1Bo0ijl at N,^D1[Q6c=`@
%TD]X2W:I.>?]'&cd6EL1Lgm:Q:C^coIf_!^J!$#_5jWeP6)]IEJ/TQs&4qF2>2\W=ZAh$[b?p:`j5-_q`h.5RZAq2q&RZT0]Hb3Q
%!X2)eLfUDu:iZ]A*J(L at E8q5Z3W^$dT]ug4*.^1AT^E(Bd*ct<*ZT`$8)VK$G]j3rcsXk1KU6D"\`2 at ReDILTcN/t>hr2S]^WG)N
%BD*-nGeE82UH.8f&a1 at Q*<?:,+9V_((8N0/EWeQHJM1!N&X]4l&W.1iLq=n#5V4.l,+7U"r8e3WL(Pg.K4`%F0`pSYC?'4BYo;7i
%#Gh9O"Q57=T-jC6LV at .>LZkIl.?!0)8=']@@#6)mBMUZPo_/[N]8HTk__OZF+g0nk&73.gXLDCWX1g_dWtUTqDJqd$l&e^DL-WRQ
%_nY/?8U;H&i:F!4T*)V3?q_+p9[Wn?N.?1]hBB*5<3M9fX at 0kd!*C%$joF4X`;NK,q1$0W$bls&4WoQ('!p#2+n?_C/>DdobOfBe
%Y46/MD4iK9`CYa1s(VnL^CXu5U"5cCbtgBV_iG"#@/EKij0:uT71V,?$2R9d<`uiM at Z[&l6&r\eO5"(:N#"tNJF+NeeD[%qOIOC5
%<Y2C+!asE:7D9o0M23OR*K,#*PRA\*Li-lDF.riDC4rdrWIhj6Y<[aj9c<aC!ctnfg"er;`##m.(f;2$dOP>c9'oj2V]E&DZYPCm
%9IP[(6`G3N7mJc%s!@=5n,Mt%dN!AOrWk>Hp^UZhS"<N4m5 at I"n>-\+Mca['_.Iar,L%B9BhB11)cU_M?W`.&ZiV`H^[QTTRa68\
%"j>2`J&rE&n!AOM(G(:C=;KX'm]TTS')ZKk<%J_Kc!X##IRF:5Bn%r[/cR63?9mhdJ7sTJ[SFdjE.05e0gr3Y6"3((S=fITh'Gs,
%;2\(d18<pk$*qGA*)n*pi7gD6AF36N=9*'Nr9PL+MF<sckrkIB$f7YoGkN4s3oK_qE"EA/[FhS\R<3'$Aq9eZ%6[$7PpXpaWbD>s
%i2bm]%WC at Ol?J"h(&6HsIPpN=*6/mPHW>lDjen at mqD-jLnuK`KYCR*ic^q^un;=RS0DVHMZtUV\XE",X6X-shCQHL\lieDPopXKX
%0D/gSf<dm\BdfM,#6$(M26C$M at T;VYWI?-NY#E6N#>>c*`C+TGnO3 at o71j4-`^k2)Uh7\D)6bkoO2NfNNA4[f`_R:IMkB.0IrXN%
%>_,B/$'GmIO)9>`e1<k?Q>-q=V7mj"3I.?3P;sm.m+$mY3BUUu8QH++%a+J'pR<h+"F1(]o\ci;P3 at 4LoJuhZ08YEDSK[b1\*XL2
%G625tJl\lG2Rlh.W2&LIg())_5NkTDIJH9lrn\%Oh<_hh#PWQ.l-gY*pOooXC)[2\QZDF9p<Z<Z2#t:`VsW#Zq/-9A0pWkJEMisl
%@iI8I!&TWfKO>[%Q7/rF`uLgn$qn"'!D/bSJR:S=a0G?Ng3$B$;J0I.RnRW925`k)g/r<FD((2IP#l2i5r8O2G`3Qh4>^_VJ5shf
%+Brm2JG:).1&MsK]nA<DL\uV4.GrEs*<'r*ckFPG.]G'e2qpFnB/6'Q!e0p3,0KEudW%/;huD4JYClt6]tbBJ;tYJ4B.gh+A9bhj
%#JgPBWBCCZcN0]I"5p@@5AGD^ON+X%2ZWA4%`<c0$RrV[GDOI,A@)_U1h<X8Lh%Sll6$aM6&MO1"nbu\M`1&c=;(YqM7#Jl28i>3
%)U)^cFOBHX(<bAVAPcJ01]?4%#&t(;dt(jOs0=RG7#-\Mlel.Z-[*RN9.E2:8*"uS&RpHpc3U=F;ZAp[.7^X<%-(LbMsFN,%r"j0
%=SNsXRgAt2;S`RMi8;1LCa)G6p-o#Ms"Ohi(lu9.?\gp/OSWe4G<)11rN at 3))WX,K+St?dBoJouH\"8]4oX&pqB'!oB0@/j5,H./
%l<cH<J+Q2d`1%a46OH9BVr:#fnh1rF#lXV0rZ:`u6X.J)[uEt0I!nPVfb3P(AZicnH1.&o6NidIc2KjN>9CYq7+*9qo`)Foh4:q+
%&b$.r"$?ks\BA,Se=Pa>^d5kbjn<f#C(Ihfl>42'CIf7CW:J_qj8\-4)VdR#]mOb*Cj/A/d8JoKd7>MsOZH&"[J=BHf&h=+YYiU4
%;1#sSeQJ2kXb*OsZ5ncW,'934)],>^!%^bm!3e$/=d.e0`RL[kn!AEK]"i[Vh*7jM;/^A-q@=rJPDJqNhRl#7Gk?$^)Io\7^bUO.
%O^USMb%`qD/be\S7f7aT_*.U)&-9G"Wm2'_(g>DpWodZaV7dHjeR!90j;^(>9FH>EOZkus^^\)G/1gPI)m2,'9b\V^.osA*GmYpO
%+B2`(>ja&"+3frS$YW"s(D%Z%1#JI]:,UD,a.n at NdA4JN&g``tZ$Er/gE`2f^!(4OPHZF[Io*DcJpVnPA0.*/P:4#U:4(cfG1Yn\
%<<Ze>,.702BW]r<\QJF/06-AX#)0\Ld2\8oG]*N6K8B3Re=srf>kPG<3.;@o;2Mt/e9#>NO6`oD_d;8E[T'q@/e6.]cJ)98]H)d5
%kZ"FYJBT#9I#hX)&g*082d\)dSk`ok#t'@]ed at 8d=tJ0u=>.1QFtJRoWJK,*cdkE[<rQ`\.a(c(ekq"O]XP0pYcql94&[ps9`Z at j
%o)c6I,,?NY<n"d9P4Asq$r!iM at b5A7'abkDjL$:D&cI<]7B/H at F#*4HZ]5A9Au.,Xi8*+]_fcRM/kk"=;m:`*9 at H35G>%;Y0eG2t
%d2ko'Y?,Va%?Pi0bIk+*#hGY&5Qeg4^U20h=e\,dSh='7Kuq-'88gWRq_O':ktr<I2F0BdTL7q;HSG7VL!6(+XPZ5g9!RdC]PR)i
%.(u.qD3ora0F7aaKb8gmH<R7a'N[P:UU103NNt%4fB43t at Qg[=k08]$b41>u7Z4!^,Rd/krlhBT?83)k,'Y4sR8Z.U38bk0#?e)]
%%eZ5E0)R`q/4[nRRf@"@5V.fhUTrJbK7Z($_4ll\Id!'^o"EN6BIrCbH7K9D/@sZ:fjZ4<k2YkOL%_j52c?_?k"br^=`.n>G#2qn
%&&bnMb6[M!0mG*%T.NOp6jBL7I*[R(r]bu=+#>B*j$uX=Z(Th=Qp6kcW",?.BO4`(Q1N\WAD'4>RG$iR)59P-o`.U+7a"AMXqd'g
%V=>tf$W>)9d@!"K9BA3d6e/8GO+Y5Z.s0,#r$aP2bbt[P%1s7XE+Z`p(]2rn0r7+YUbPLhJdTV@(5jJ6j)JAMKZ];4S4o21La9(F
%.g,oBRhq?cJQ5!='Z:W=7?n^I)RlY1OWKj@,!?Pt at _rgV+_tA5YoF.Jk4>0aO&/O6;(?56+=[HYEic_VYZ;MfTArph6dtHpH-o;^
%`$4I=J;!BYj=nbhF%UK=5V,c%/A)3'PqD%=BPg(KmA7coLR;Y%_*MkLnUR=oibLA@]Q3j[`SWp$5`:&`420.E"*&.7dE)SA.[7-f
%pF7'`=63p(b*9`jL+l1)Qc"8+;_O&*WrTE&@)tYdicd+46_lc][h*d,5(fr!cThJ9n,Y at V>KO*Ch8iAWMWMW at O:s_ZG=iBs*NopZ
%@,e2[Pb,#A9_Kq%NMb>[!A[g(X^dFg!/)i>MT<dr'L"Eb)A=Vme$!oVkS:6F6\WFu,i=.aZ>Mf5)CD1"=lQWk4B:(9Q#<cTh(Vj[
%<CQ at -KTd<`M4<hb/e[TV>\*Z`"KdZuBDbi^b+:Aife>:L%'/2e=Cd.$jUiDFraOC^5FU at M47,lsh at 6Bq8m!oLBh00WVA0XE]/$d,
%`00o*kcCa<,o/pB(a-%[;B2<cAM*XP>R(OiUi=t^nBGc1lOFNH\X`#+\/n?Jq&.cVl6n/=ZbNC`g'f&.Sq1-[1I'33a)VQ'm!?SG
%1>HssC/PkQr',.rG[9kMdh\bpaJl;qML?6:ob>3hH=i5DRP at _5h/)q12aO at QVHlT!;R_]Y>^RJiC+J#W-*F^/1,Y=U_5=*0%'E_Z
%(+BuZ>R+#D\)mol$N4O1XYsm66/Wui:HGc:"r at k1'X,O:'mBDsGh?"ag-i),-[Uar;,K'?F7=sFPadfU3C2c9XU^g0/jJT>]rPD@
%b$uCA"tp^HQKdtH:4#QmbdX`%-nYd5U,iTARnBg;ZuTI2C#>^I."[$l8CTnaVJ<"<U:mRk=+u*>VhLVf<4aUgr9&ed[/\O^Yedc*
%;6)0.$5F+k-4uR=DG>&7P;Uim"jdk'2LsHrh`3 at jasWhiBBm%.X*B:`mIh[k`9"Ueq at D$_cdP(!?0_,d:Q<Yq^U#$&iQFjZ,5)i\
%p/5/D28qdY=,U4RD3\0mXOHn^e3*>.5'-ilHG#2ImM]mdSXdGBU+ap9Mo0]"Dm;+R)!Wc^aOF;ca-gXSYRp))HquNLO8/mL^W?'\
%Xh+B[jGGLLE&HOlq:l]kKFVe3bMb3efI9.?]%[ZU]c6_+`T.b,q9CX`L-7V'2?pf[cQ<h/EA=S+>;n3/3l(KUq8_hral-\]IIpO:
%>]2J&:^Tt,%4#`mLr6%jjh-d;RGX=Yf87I8]Qj-pb0F>1%se0A--3a'cOKS1F5GG7bf/@Y2Fec%rAj`D]Z$DDdeB0^>OslO4K#1h
%([J4eN<L02))p$:H`0W5Zs7=;>sEV#W1D at o3NW_9GWs?1Jol*aSpiZ!+-OK?YhE\P96WIInpVP!7Si5rBe6AhRcdV-#(lX2.S0A"
%P6ti3mrI2-c7U4&O4fj]>3!90Lbn4nK[4DTL@>$m3oo1NMmLl/3C+&*VAD/sRYUZP?kG&Fj56h3]O!^l@*eeq#f$h=^@CYND`.Jg
%$aGa`o'577\'pDUgTm\Tgl'NrFECeBkk*)EbV(@\YMX&ZH402j8ZuHuMkcIT^VaV:f#[?jIIs&]mkjBVo:=82rK6NS+5qkLq7%u"
%l>Xl$#2/?cg7ZpY_;UXQS/ZSHr"3K:[rqXE$dLP`b>"7j%DB"N$UqX8332\p7AGPuV7`3k?9P3Ir7gM2%%X87Ve at X(=Zq3D]oFNP
%lI:<h7S;cM<p6o:FJS.X&t(T>7\)FX0)g8YD91P53_d)Y1%p^WmI]GEF_B3<nM#'THBUEZ1o;InpVjt1]@65UQLe@/+&9t)Sbc7E
%jFomtOeK\S]mNCQoZ%l!IL`Z?i2pmpqs5GKGW2<HHCY8npNK[+'[;Q)P[%SES"*?Rm9nnKoq:2V+db:LNapC]SYCC4*h6IBh*1^s
%2$gq/%A+"6cG+e4W_QpHK&rAlJkjYC3\>BYkZuq=UJ?GT<GKQXIXPoLF;d;uIJ)5'UJ at 68NV>T0f;ZZqfY at 8XVEan245?sHdsC:-
%AD$-(<t>HD3dpZ+lV5\hmM'>.1Y1k9GPh6r3S*TiiFk8+m'JsX[5rW)U3T&\(4m(Ko.tdtQU at p&2LTbOhs%e\DqO;AZ`q3_SN:":
%A$#kU0<Z8l:2_cUc&^TU]5FP8Q*2^O:(^9VDEja<4k9VLDt2c_ at dM_8o_*>iW?gIHh+jG at r[I7LjNIC%Gurhb2!FT-5+!Ed9"LS5
%DuKRYoXd>K3XqY&SYBFE='@Ik9jt,oO at QWj4>5g)(O&In>oX[2,:s.)hIHgO^!LkY)ZBTR/DoDQh*qKM<k+O-c\5,\QTiYbST!ms
%&*YqJ9O4V8i<d9/^MlN;BpI6sE2>)"37]m#N>36'USQ at 3lIrFMKdZK]/Whl`_dr1=h<?*/[l[Na_k:nRg9L2dDC3eM2P_)LOjBgG
%BeGUW;[n'IB3_K'A1H2K7Q&mgUj2A-QmFWYjgWPnC at Yd)Fr2d=>V!_$BYAXHN8*8RRKL#P-g3GC-Pt7ENQ.rp#l!=/Y'iAPmQV#Y
%;X]%8HBik6X<"4PG:hja_tM-5k,jTIkWsrH^N9p#Q[R=UgA#N_dSCapFgrpuh+lAUID"brT%u'@g]#TE6<!d<2bJK*DlN]2p2-^,
%T8FK7H2k\T^3IQLO026nC&I[a8Y0_S.P]LpIDcU)CO[t;o:k3uY6R*m1OSM-9to8<&#8k)L0?'9ppNSG0:iU0G,LmWfbe4:Vu,c(
%CK0&ZceNV%_m^rgEh>,,=N3oSHBJK?,K4'igaeCFH(<<qoegKB9AsaUoM"l-iG,_,hMh#RpuDoe8r]3Z3PRKh?-Y[kF+[m'2KCS9
%(Q%,p:tF[3i#K8n-4S25`DcW,IpY^3Gba5D`(VZ0\ES_=D>r)IbK^m4Wb3tTR*-eT\FUIl1T0t.76+/2]1;&+_aiO.dd/i]a02'L
%I&eG(r5q%uf?FRZ$6:aa=nk,#e3`gfJii-_p?CooH5K<Ichq,'.GC'UEONE*CSt*PC7csN%O0oZglos at q*7>oOP$IlcDq`ikKUX.
%WcP\cTQq:BBMoJEXb;[S(WkIuZ_e_d^:#:B_`EQs?^<95L0iK"F(SPber.5H+BpC?kBXO8DAl,)D2\XtjH\+egI@)De at W0/Ecfhl
%*Jc!P->]hlM?e#k>R^T'*b8_5it.#I%hap$1I<D("[1-f1/g)5MM/ZrBYaFpXQ9^>Mr!UrF8.*^df&Sq>_1:J`tNlXQA^@V*-:_7
%#gR!nhtJ2*.IeBb^5f=G$[^_bE2"pr#i7c"51Ka2"'gr$5-#S'kAVk^,CI\A/AZ[Ng;2Toi at q:]P`3F/e.,e9E>L:.84=U[XRe[6
%fp^XLlN]M]bNJ=s#rj815P[X1N1-\.#=\s?'3,:O1Gt.<'nB+NOUn>H?pXj6(l!2\O-D]9Vu1S5r$mp=.P*d3XfY?\G.^\MBO7KP
%IEC.t&"V!#@Y45%4j4AQ9ah,%1b[ub^0>GB7CV8aQ1$nX:ZRqb`NP]1hDs#Kf[VsIW`?(W>6N,9I")CYO:hJW\3b/,I'L6*A0"IY
%V"u9Pjs#;.TWNPA``#"^Mtq at 2TlG8h8OGs.E/i8Xg`N&=?4bo<eAk=Uc,]8S6F4/WDr4"64VL6:0i\c7*qgGF2C#`;JK`(Da9SGl
%8(:Kq.[WAt5DA8-%tamA"03IIUE5._nGtd#>Mmu,6EmJ?qj)dHfD`eJ.=pf<MWV]7AFR7_i%=<R%auf&8tiprS5?LtM_!PgJNiMC
%E/EaiICOe^lFOX7ff7^;"&AJmDD<)al3)of!"8%AE1LYKX0E3*MaZO<MC^-a$\(- at o[.7>$:).b)QS_-Y8TjK?PtPZ*e#kLak%oC
%%Eb1=A:mi*nsKua?U0Bf*t&9c,M5Ail>h_'@BZmXZ,8i7s,_'eM[l2QPTP+,36Vn6RgO^bhhDDY\25V at K0Z4[^XtrI<u?k[!h%Hh
%QUL'c#fI]W>5O,R!CsaXiFpObF"Ndak8u]'3#9/GC+SNKSq8D$(3*6^G!jT"]!J#YX"<dG+`1JQXiNVdW+sE0SAD70HuNh4?Z'e!
%p4L?X'*BX4)U/1N5'31'0!"."i(/'p\E^%tRMR!'>pa>G]>,9D>@0#fF6P%LctI+N-?q?Pa^H!a;k)jE$PKmS7A,aeqRdJ("Z7F=
%Xiq]VB"i=hM3(h*aV\O/k^>;lcL"HTWcJ&IkG<`!!ireJZ?eV)\+Nkio17G9Xhm%]!r4$R=0K,&@;AT8`QR<>[B3S1#aq.b`j*Fh
%`Zrl]a_[?G]ApE8lDHtU9G(rEgA<h9'q)'M668+d].?JTT?D)l)t'Jj6K at I>(Sn?TLlX9gGP<J*HirdU20R=#&F+GL*1iLpKmAS+
%10!OAqI8\>^0IQjS!ogDMg"_Na!NAbS at 3O_o8ZmY"dinEH#`quq^#1_DTBE:bffK`\+>bBh"A<*>e?So3):g!PtD-J-q:5PBa]fD
%;=iLJ_5?(h?)`-$MV+2-\dK%T*A0_/o0^lr/[bs8WV5:Jd1DQQQQ\,D;/&gY<M36Oa@?(K:t`,35;l>poW`O)G]+c3QP[)h9=5V$
%p0Q@*;:JHQbuK*rAV88l%@o0gHWD)W0`B[3?Kt^Xo(X3-%I%SPWF[/0N+]g#VJA at 32_goK0_W0Jh@7IW(?V\g?8%I)Kh5%#(^fs#
%Q6</DA-CD:2R5&.cZ9sL+bFB#4IPdU)'jtp:ea%*N7u"s.b1iM5:GfqeJ8oYUA0%,^%$1l1;1$S9^KZB9#!#?BYEJ]Z/V:a^AcE8
%gGQLic`:IBW1Dhm#fe)\\oRh!1"G!Kei5Ci3^9h?k":LQgCuaQgsSM<OdWU"pFRZJqpK&&p$*FJEm0e&i,pi&le+P=q2X%=$9spf
%Ld8I/UecchJ3jG:7_9EhO.#+l/i;e2G^bE`L5cWYRLYB+RaRJ3'5\*[WYH*)*OT55-4%!;6??7*N/m>rBWQPc;Pc6l#)pT>4h[\O
%>\FV6Te$Wn-BAZH?!\Ia[G\M>/V5LrZ:0*mZq3iq[P?sSEh_f-C_IVR.E3"X>3F750!n3,6kEK\d;8TY!2P]"87Y`S#&6dIRPN_t
%!\1L0gK<Pf;,KG2)V28Z6d!hY*JAs,MII7h10Io*Rtu:s;6g"A%@!Hnl'o!4hEhp$Y\ruJ6TamT9+R at sjZ-T>lo`eWq^Qr0a&`]l
%)O at lsqj7'!@s`:YEFUV/KJCfU0W$(MF_B-2[G!8%?,iqi/kC4G!<L_8qL89$"$e!nXu0M\@YL_&Hf'G7nW&l,UK5X4F'[Q>;O30[
%>J"AK"E]_\d*SEM>:s0UIH3_;6KR)@KoJ!3FSJrJ5oos5`Q.=kP(9b=)e^%RgY;ehq9n]rFh!C^0;'n=q9ZYI1"mVWZf><s?;);R
%^-"MA+VN3]ItI3-^4[N\`'.lR4mT!"Q8Iao44YCZgIko/U@'Y)V$:_Cp[Rcjij()aVc[tjf at j-Pfb8I'%E%Q[P/h4?iNu>]p$!eS
%e)bQ53[(j^>4!'i5cAKpdU6'm%F@$s)Jr!9AAf"A]$%re_#fQ57mB,lmq/JikfLCeDJN<6 at K7=#a3:j9;0g_nn)DN2Ius#U=RrBe
%+)gl][MT#+>PE)S_bqW.k/?sWZISa"T#mVGQ\X73pA>5Vq:=)2NFtMiEGW`U!Gs`<H#/-Hka3uQ7D*WAfesUY*sj:]Pl5"M5DNQM
%nSA-b/[ThSHe7u7e&.3@#S;ra8+.:fmHq\iS<=>gfe?lO7GVA*=SF&o+.pD>cM]_U7koj8hr2mpb\ld<_dm[NgZ%pR%3gerM.OWB
%I)]X+]jK at e;[p^ONMt.#`ug4NM8N0ee8E7rgUA`"d<aKu'<t$ie:-$i6AN`2EBa at i/.7[n!Ti4$=DmTbS?C&%XVTfh?*Wb#?@6\K
%58MEL)Y<E&/5+AqVNJdNMWH1g&^0Im:EJ9PQ?L2%!q+T"%[L>U#B[$mUM.WE-_8?X2(Qdc&<:;B6(@etjo3`3jaNE&/bb8&<U.\d
%maMl)\0:mLQFQH1)`U0C.*$, at H:?>%\b=kAENXmX=_Er#8nXcf1Ib]ckDd-'%a,!76>'`kos4uO?1X&.'![p&;O)_?+m*QiQYo4p
%VUh__(--3u<^[KOm5R9M(==4]l*`1+NV,%!FPGUt0Fq"^g]ap.D=4sg:i%9X2K^H=^%UiO/Qo!m-:].*:RV($dk#Q!m9F<&nQA;e
%."Ln.SsMl!##>3*eqEDS][NJZI5q2%6s`ES/g[*[-c=77I%8&0(/h8U38YWLO>tG5^F&o,p[PO^`fc+Ib\*eY^F6E0^'G5"_]tKC
%o'\peFVnVN,Zn-+NG@=Z#e=LK3-tSW\]T-oBq:4,b<)OaAl>oQ#g0Jg;Qc=e)O?$/(JF>"eu at OrMl9mDZIAD/qr,"CQ at 61XYh.m4
%ER2e4TT\o.XVM;iLqRj.KPE&-\[),Wl!$^%_DmZ:r%ortk7apCniC#brp9WhNC7)0-'XrGB\us-,--?0<>pB(4ZN4sY267DTO2O9
%#NmP@'AXAn[2eR:ULB"kk^g at i%=9#OOHm0_*bR,4](TY>\GY`06'74E4LM3-Iq.9a%!.YQUqLJW[.dfheRsNQkVHjDmM+6q#5QpH
%]V3S3`S'IH.d9uQ/X2mU8_2E-L(;WZ3h=mOB;=Q%[!eS at H$cHW$?c0#Suq]D$C9Ol%.Wq=6cM!%Tt/7aJ?f*VB/EWE'8OcP#K#]g
%FaB&aYDk4E*"1q9b at n8F'l9Bt\fM-[39+m4n,TsU*#g3(3:%s!XsIn$Q4'BgPsUDp-C8jUYgNGQouLi#LKC%7 at m&OhSPVQ-ddCqq
%m%pU&VPf<\1eCmEm=tC,A/A`71I\DUR\_R92RJJ(/Su`Z7e!oTMaC>FY3cDHU_hi\0#hcmM?s>a*6mFTGhVc2e;0m]D-EsZ3*'Z$
%4J,_1At+(Z)@)8\Y,L1TG1<7/@%"p at 6PiJWZQ1PtcU4\JR/^PQ(t4k2AA)fIG-(#_d0%MLZ2eVeJRph<M6XJ[D?E[(;%eU)74[gF
%!,&kB+BlYmf7n1u%QuUO]r^2Xe]*^'j,k?c2a#l7)b'I*)/Z0k6>O\N)gcH:H[Mo$hTcX[b\\,6VdU'Ff2HA at A(Ji]6/$Kcp(Kd*
%V8?0`/(i&'Z(EABkO$[(-oGTe/\YV[?`9g+%9g,$X[d8iS4-i=U+P2!]aBu\X6.N2$&]Ke>NUWS?Ej(TmCX9I0lB3/VCLnTo4%/6
%+ at Bf2Rb&JO*S.[$I[[AI\Y=7fR5W/f?B]a4[b(eB`a1]iA#%Ol>:EVmS9'CGC%#FP>D>/sr1Y<=?@3[u_W"?"Eubeho"rst?*\4K
%:BuNHCi[To"K#4h at D8`n#'V8+(G5KYAP,b;T,>n#(q[.r+G1,^a`6$!`L&g>UX[?VBc>F+D+SFTOGJm$gtY at W"DN9O:d;SC#+fZ$
%'cA9l[?#jD%$4S4;4*kr"5?Lb5r1DMCo^D$H!_&>E4E9qgq59Eg7/7\,MXON)Q(V]md&fL3(`gJCN\p7$YL8<HP<8ef#.f/,l(8p
%CM("`<j7FC/O\FAn&o3X(?\J*6^%Y)FoJ#W`mB_NaK\4.#!::8gUY[g$Ld2)ddjsj at OW*f;O68E.Q]"3fLDP%!ah!3Z&_0I/i8>L
%f!et/-<44dkoM-l(YYaX?DQ-+2452>%_^PfPjCk"g!a[Z;tq`nR@;e>*@@b\?"?/CN,=]=V2mA.E>MZDcoQ/pgSJQ;E1tsB[0E9T
%@SlH`E!S^GR[n/URn8lGZI*&)g=GtCKMQo`LuRhAUkIImG1kU<\^h.#f!Y:SPA$r?dP;gqF#so?(t2c(lc[N5-j4hhkLVf;8@[6/
%RbABa/mI;l&n)`NfEUTn4#mWKJJ>O5DeYUGD&1-i5.SW>W9BNjTXm3cf6ZHM-V#=N4'%HhWfp:*-`I#TiG/+L+fk7bB#:6A(9T3.
%c2!ao1srm[>d="X*pYZ1l=<D_!<_'(X50EXMd6]$]WHQ*S at i[,:S^$Ebqa]mD2[33'%WQ^KlarZbj92/--9J(^&D.1Oqu<jHk"DV
%ZJ,2+dk?ako8/&^pURt"55Q]=Hu^!8i[D*KCn3i<F49iH,a;pP)J64K(@?!M.O!;]C'YZ?1>$k>D20C8Y5,<oQMk"RK@)+KM_EhS
%`)^$N?\p9pCYu:q*3rkn\r95,ZES?F'4aG5mBpbQC(m9-kD-KRORW'"CECd'=:1c3,HXK!/-9nl]D1r6IR&b(I";Qmh;iY6j)&;L
%dn\CA-C0#mEk^/s0XVh#SPTC$";@T7>[/*lQos<[s&n9?C+R\P]id-NXjJWE\74XJ(Ame5(r1=?1p at uhOS_WANWs?H*lT_[ZPhN?
%L3_8X:1(HRVm7?cVD1V"hF.\\an4.E<b=uC>Itchgl`8N=5utJ]au5(a%r_SZ?!EX'$Ep(Z2F=/\QCbHl3(%*-XfnK(h<8W=KjBC
%g\X_4W^F5IeqZ"I-F>q at Ciu$^TZumJJJMmtiUl6fLh/sn3b!@R%gc!;hFK1jVjcpHj3:=oSg6/$@6Bma=GE>aPuuUs*8X^ICZ;m8
%YtSd0Bt%Q^a_PK_:VLXiM$TK0(@Er>0:QR&U2h:7>DoqRqoN?[%VpE3+2R_`kEoDAH(Rm<#BMhiG`t)DJ'bUA%9 at lIpsekB(&bd@
%'C-B"L29AkR`Drg]Pu;M"eC at Pf+1b^2u!.dhjXUKX?A*.Q-E-'ff'D?hZa<$Ck#\UB<h'WkFQmGqHR[<d;]?<g,EP?\^T2lO"4&/
%rTmI(_t,JhEMlj@%6R]2MCh6n2Z3LH`Kn^c/u#aMk&-K&B?.:CadFg'I-<*gE[A-2V0aZan_IU^Ei//a1L52#j8PqD7Fg6a-E;8e
%[H<omL[/"oWn(GB%!f%kE)F$?SE"fGWjY!TT3YEu2jW9,<3<^.)J%q_>Z at gsjE7t]je?K!E+6Q6N\@E`>Z36C-LCB!C(5.)qiQ)I
%;75PTC,iic(G;`=j=$ernf&BFCHAkK48,Nf<GSb:-CWB.0<3T>a4RZk\%&A?F%nMqqcdB+D)^htY,U"?-LBrjC(5-^)\$V9B.NXD
%@3/V-_n5;)eXH3-bkg.%<3:/er&BI5s.X8OGfu^c<3;L,Wu""/K8Z`e/&Q7:MX?Yi[7r_enWqp8<,EUnq;[C5mH,YJ^8TaD!i\mi
%#r%Dk2,2BQnLfkgEq\Y)1T[EcgFu.Bj2Pr4BA8Idhphpl6#uZW(u%0Y<.F(ZU\&@Aak8b3]!7BfD>/-NPOrZ1Y$5CpmDs"<PEiRV
%HM2MbBq(u4gITWHi(Q[7BlBN3XbsaC/j7qn7HiS$]4$#oNT=ohrQ5SuZY^rggV1)N3'H$9/tLCLdMnupgON,PZIg]k>=l4,ak8/8
%]NojWDWf!q-*s)bb9lK,2Ws1Wl.OdD*hDBYTARH0gJEGA5>TV6JP+G8:XcZ;hdH5CoP?lolK)/bSXuqtK*KHNEo-,bc:ub\c8ME%
%%FVS"fET?BijR=BD'WbP(u+0*B'[Rl>@VLJ)Qdj2[]/M.6jsH*Ps7sg[ZR)^T3Z4<P[8[E%?Rs-$!X3<)hOlPS$7$][Z0?aLJ-6c
%@'I*K,NUi,]N4:=HHI8`T)HR=ZPA^@OihG)mVMJ_AU,A#s7YgHo5'\9B:I\lDHkIlhjs.RD%Oj$p[7CUiTaWpo'P,B8K3FhRETQp
%2 at s78hOSM0H@o3=[675MHWI%9*qb7m7t\Ub]@"+YlWN&7]u+n+L232s<doL=KkTM*na0+eh'?Lc4E>[J)<8k5iSVfqhu6ZR9es_j
%0XdI0EJI34)?7C/nI;fb[`fRIaK49=`]0J!Z]"^.eQ\<mN,dBc_QRO0>=T4l,%KF-a^@?T(tY8Uh.M]H(h:!0`bjLo\V#i\_;<3m
%j1gp8^27K\Af9VEGnrKa(tXZdh0m;Q8aPXN1WIC>d at Gu7l=Ptoc2MT:`Z<VJeN:hh(]9T2&\Ni9j4iW at D4WJ"GS7tj1WIhTlqmNs
%AW.SWfIeu"GC4&:6,r]nGLg\q1%%lHphLc-b4r7!b8?R.,Y"bI438<e=Z6"9:JFc#N14#e]?1u"G=1do1WC0?$2;3$0u!<po,D8"
%>KN5fA;j/<[_A65on!#`@pG_DmO0qe04S6Aq[^H.0lD8Kf1n*@mFs9YaVZrrMdXRCj#1q'G*"FrqbH)lAW3Z7mX?Zrr5UY&Sh[Ai
%4)13]Ui(2,N,]#\l&"LBAW/]MSr_dO(ft[Da5>&W[rH'Z%Pl&kT;D7FN,e7<:qr2Kr\G(Ah2H?/Xi:%`N,^_7m9D1M)<2K8"$=XB
%fA$As9,ZcZh"SC.`jj-=Y<0rFhaHmNT/!K%pNN/_:<jm9p9%f8)<2Kupl7,L*HoB^O#+d%J$SJWpUeQb[r[2\cSNT6I,hib(ruW\
%Nm:f*43\U$[J4p21%)9u_V%Z'\A?nVEQ7dVcQCW^(uP>j1%U?D^!(ec1Tm3%re'QV3B%p+q7!ZIj`9E'hVZEbQZL&UX`*seiJ(jq
%Bm."V)fB.:>A&`7.E#=1qk`Xu3B(4$A&"0I/d$kbKmtO5gcDcj(YRcibkg5?%QDS4hd(E8S>NEbZ!CssbFNBghKPD//isXf]&U9*
%_e%$JfWP-tG.>glhnP6nY16s0-Tc^fI,n#._bKaAG*X.$kD$2'MsW,Y>TW<V\!Pgl%[Z?FN)fY4lu5,F`U:(MATM^PM!e!D__!+E
%GENt!,LCC*HjA?`C+JPXZGXrX/4A:l4?Hek**N(5IZtkeq/4&-g#97$WFmIE.Q^n\%C['@Y[r"Q2Al<_0T3/>r@?R[44rNJkj!'O
%qo#ti%QDD[0!iIWeI*AZ\$Eno:2]l]lu9KudAuaUg#5,+cH*2#LW]ddD_9jpG.>b[AC&foZbp>b]:`I-8p7_qg[dM[iOY>ocEkDg
%4SdU7_`*sL+(U-Gbfc$Q_e&4:\bE]$lu8^NS)%\3X7Q(8.m%!*V)F6QQeC><DR_i6CqK''?(H0Om$GV.VPmJN-8,j7\W<g*+>Mg`
%2gsoVdtdGsTZ/qO)BD at +-uPWtX1Oitgt9'e<Mn.<^=FMQFH*:9r=KBqW_\i_.:o-c[6'oT(pb#g0dpq,b%ZehHQ:9KA&9kDG%Yut
%L1\>RGM!)A:,nC[8?u:t!O_/4^P3kFA*13`-"%rZh*<&\YU2nIhni,IeG3OSCXG4.Z-t at e)'8,>%[W3QJ$mhs(P^&8H)FB^DthOf
%"3+m>KeipObpYIb9ChEg#U\'\c^g(':$KftmU^UP8*a4(O(Q;Xl0**N#Vb<"Fe/Fe42[?]0KR>ARu'NhB+3QD]bmmU\GltgCM"pQ
%r'/:%f=U-;%tPqf[un=@APWTAdlFU"pPtrd^ec0]*@Bol;QfB_?mheqYBSH`VUEb.r@@:/7K^RRNpO8SX>@C6V=cWc[_is-jSHFE
%'!eEZF at U'Pa*[8!DB&bTF$8/VG\YsE=4CR'*i,rC\X;G_Sdgk=6C3ZXA)LX]?gC.+>FuI9YVd$(]_<H!SL0-8KQ`M9>:2no5B.UL
%BQp0'n1n>9SiFDhMYO_p7i6:[UZn]0ml7Ig#P\('O:8\0_mNW>rcVGElat[IPeDJi>N(*o\fTVaFAnqbrH-IDk!"tb,&hShFuSe,
%V'l/kXk0\X>H?LLcZ!]dTRg]4BfhkmFrcr]4`>AiY%^oqAUF,&d:S]9U%+4HhfQT_Bb<t>:Q`-#$WRUJXe4s?`pE'_C_/@/ht"ho
%23$i)O4U9V7n.lHG%,soc5\`_YbM-*gr;7`KDUl(DSS#5(3aZ4mMiNHs&^<?(3O[s]pZr%eo_rbSbnB7GFJ^;Z.?Ni)[L?4R.un]
%hu8`?M_@/)cc?HS(oLndj8aL'[?F*jj&D"nfhQ>uS;?R?IBJ1pjkUkj4U/V.P(:60gf2?uLO0YX@'F$LXT_7smu,kT6-u?CNGf^^
%auM at 9>l]dh_dH=ks-D+k$<?9)gY[[8o]3DsCu\YCEo/RKfN'?Y"ukZe"*fUK8H<14h4qKF0Rg6qCM%uZo$R3RO,XuCagmsr.,h9#
%2=H1VNRCjQq<$9^DFS+`lXF#C7;?DU#Ub7e(2[o=Cj+N<'cB)e98C^+$%\:WG9rP0NP0c/81_7ET6.c8CE1?Cl6s&YpRDuk\NP[V
%\\6n*m;pZ"9pro3IIB]X\+af9f(\sJ]=`J8Z#&PG+UQf5&Bf%<($)Lc7P#cpkoT>%P4`WCQ65LOA]9W5)i3V:nVNrA7M+F[mu5oO
%$nrUCPI4N$Gr(AA(n/,!r9<CJj*45W%!Gh[_JCFjS,?%CIe#I->OL7i]Ui<n(2RT>5Ab at 7L!ZDgAdZgf[rR/SM<%[?IE5gRN-9#a
%rL-LJon33kh.'SKM]I-B?nAk;c(^Bg*4V)Y)Cc.a482c[8)Q^SZ^G#pYqokDXf*&"AF<JDX4$LmQY6257C13RH0oek[O&5meFe?n
%?<a"CA9Nl":,fONLN8WN?<`V0mH<*C?cTXB>)TM'ps`D^]e9R*a+HB?M5>7uL2MM8aadfLL-+Nih9r;f_;>N#/3!-j5^/BZG5\a@
%AA#M$a8k!qG0EC-l*IS9S&<3kh%c'_F>Ig35PJ!Blc5?t1t.>pHXR at t$b($H$Bn/cS8bq[?*7_YE at 7$`IB7GT=oRe&NUQD)p!i2!
%qE+Ro//eW=Zcas//QU?"7Vr=^dD`WQl!EHnZ]@lSii4ciA at q#Djh%XBQ07C#`p"N5[=I/"FGCoU,+2!O[hrETAukW&Oc(U"Q`l/t
%qp)7=a-gB)!rL:cdH"a7nUPV-:$^mcDE.A\lfISIm&O2/Uq^*B_eZEH8DLoo^E4Gu3]4\?f8$c]pq@<L=ZnSLT&XE=kOX'b7m8Ge
%W\;npqd.]DhGld(iq^rpF+;3S!j:J?0]dR/G9;2=hp(]1pYhp<Ug&'+RGccO50mR_X%r,1iPnH%.q:F5WGX[9A:p3b6+6=)"q([B
%gL-^q4664bV4V*(09-f<-b#Yq:cXZ^e.2aR3.W'/mk+!hQ//)&fOaJ34-%j=3-cI&[*_,mE'9h8i.Aim+1\&^*_d,Ln;P?nVf*QX
%62)OjFH^hDW0TX=(W.Mhr@%Q&AmZY'@k(_*hB.4<l"Te at q078RZTup<FaE7o]:Q$Xn^KPaWn%QSUK7?Y4IgBJ7.GTF3\ua\k7U\R
%)ntoort3&)V,Qh)A#=?q$nn2f_>H[%aY*jpK-4HH435 at sdi<Ed\U7!skO3%%5<e(h2rFFppu4,-/_*>/X)P+F(<'<3\%XEMDe/AZ
%UrUZbgb;oW7WZ!4aIp(g<42:sBGp4O2a$BbSR"6OL7_7\e4&5>EqB(e4SH8YiKT65I&*;39W77K#M^CT9c$S)[.`YSF\`[$N(E*6
%nTL/c"B.$@,0(`l_&d,7:@P_,pJDqTrqgr!7Wi[94tH?a)33lU16YjdJO]>-%F9?:0'h:gIi`.?\PYFR"bV`!S*<n@\!d$5I-/U:
%4;C`P-dZ;i)SQu[s,(\0HRD,Ej1pqN<8QYO0!f;jk6n:W%'>G$pE\Y`*dH/5dMH*\f at NZ31^3-onfZ1!o_>LP5/%J(8"N#DhE>%R
%C>S_QAi;_&'-$a$qKtH>:+%R&c[<o#=JjCs__*9?Id"XN at Vi)JR:dG^$]Tu at jIGH>TA`V-"GK>Q5?mBYW0<!*iK9^+c91?34Zf5V
%q&QuMH^MuIp?Og)b18>'d;4'lHY&7N/W/fi?Roe,XY:s!h at eOfB):tWZ0XG5%RH"t2oqC+^33T")dheDkhmA3Nl]CN at e2P:k@^>5
%G:_M@]O"*po8bAiXih@\MY"?^CsG+U<);IHUU9Tg;e7>HWp;fUY-3a<<;YTQD?mRiHmDGs_o'8+Cl\,%B#Bb1#B<BZ!c_85>e-R.
%W`M;BFiEF0cF7"ZqZus'j^V%j/,$JtFd9VaY$RNsX0c)[Q5\,r?eOH;oUGJCYFb]+O?L,D;^rK0M130NmeR$Wkm%]fq<l)NV:<26
%c%!JS=g.#,(Hk;QeaqU\1V[[d[l!A,42m4))8bal%IAor8pKCT/:nl(DG3:l(h]8X$]R^A\]j2MO&plBqOmYL%V5a7j<lg at bn.7m
%"3#en?OARmki_;V&Nj-.hU%M"f$aJR4[R*Vr"'8spZ'J3A]WeD9_Bd4_bA>N4@$f?Q'bHbiC;8`r&mTCE8takrV-hlTo$Rtps/cL
%O5K<oe^GP.lX*S(@ZPErH at Zgr:P5)T4A7,*=8VpJJ's3<QQ$qO at t)@.O36/0X0]oQNN#"Jj[h53o2SZ$3%sD)rPQZ`-rkJ(#;<K?
%<. at om&^F`m!`-4k.#e%pI-5BFBAZ)P0qtE/I>U+D<^@OHToUgdMom6)M*<`b?+67$N5*0P6\Ot./Dn-c5@@UfaV1CZ/Pn+l&PVb0
%p?VKkMO+M%RoPA1:@b=1eQmcbm^(.V.MAYHlRQTMFo(f\rcXbmB/A at 02d<=_DKDNC`Wb3h`<Z)r>`#Irn.\$YJrbJPqH!reLm)Y"
%Q*'.ccDN\>6`A[^Om+g)0j'/=dk6pRe#CO@;C!oAPoHm/*cn+JM^6]&q\.R_3`TNf&_HjN!QIk>hFt?30*>a-7*`K4r(F5HTSU<h
%jF-,g5Z.882d2_K=Lh at KX_EqmZd?N<=.Xh?jA$^J9t.b&1jX-`^-sjo4BisB+o2gAlJ`1I1]T"EYW271Vg)GP=P, at 2'76[k2I[3W
%E^=1#BXuQjGc(%OS^7.rgg!rPf?`J^O$@mjV6UC'f[k>!4QU26DSA."IA10:7ms/Jm^j'!,.E3S-oq-[pXukSFY#(As7%jCa\Gr#
%ad=42ZVpd.rcrt*U,b%``Q#_!b\AalT$1!WX32kYe%#cIb6"6l+L^]db"R`MDtG53;SOVO#F*G#Up_YpeSF1a[&7Q4IblZ4gn0ub
%#KEcp?l"tGl*HT1&967r6&KHbmb#an4cpHa,[[e at cmUJIC[)$_MlO,c??:jcgnici3P,_F6%AM,Eh@=m1@[.l%Ch'--0NDE]E0`=
%5qD.BFl<YOMpqQO^nZ1cGo$U;\*cb'?NrA\'?e2XpaqURkQgPZ?BkSm)]&]pHB<SCL.rmdX at 4Vn)<,\@o.H@\"r`n%@W at 58Ris*:
%I$jPMRQn[poa%r=,A7!hlE2:lW)p)rJWtgt"D3*ISU<I>Aa.OiDg^!\93EZgE]V<C<_"Amf<$D(iqpglKkK0JZ)^?K6b:<,"<"Ag
%ja?6ua5q`E_#\.Va\e($`"TIB5?$_e$A)[1At?`XRMY3^jkJ6QN?,Vc%:6R1acZ&OH$0O>\gSWT'i'mIH<`n2g>=3X*u3*d*eJ()
%gr*'"#o\"VP`in)\s&Og3bO8qU'F!C"PqGXEB"Wr(%0Q.rP;H(%=)-K&dS6r,j>F.D3elu*d[F[ke*rE[hcFi4[^Et+Cq4=TRQFj
%?4p,D"P7f,.=<Kb82G\]jZBVO8'@G8Set=Up)Jtup[EuM^.o$uO8W<%M:8YWhXf,9A/Yu<7K/!FU0[t_E7B*.cQ\u+@/o[$T(<X=
%.jLL7q'fo3p_hhtTgS'T]0+=J>;pKR;<G!Gn'mq)`D3aqUp@*6qq/JnAB4RdC/\TcG2Eq[Ju=N/(`$.J%"8pQH]0jK>oI9(\SNjI
%dc^oiA>4[=*[:IZ?4bi2)EO/)+T8L24,'P0fe<3WM.[Y%/J!r&Fcr?Y7\ds9.nROZDe-JKB_oe"?*Ko5*\1u(p5JB97$_(0Apq*f
%?6(33RCa`&4cA!1m."[oa#ZoP6bD\Z=Fkfs]^YO"n?u@^'_^#`PBXV6o#ZR?O70Ql92?g!q7b!Bhat=6%Tg`"G't)B4V+^[k-uD+
%>M_c6DGIK]E8OgHYbF^se9.18(?I/Ea;Ia7V2>"mp%8B-M%s(6nFFDjc;]^]7_[@8UquLu;u52:5#mejd at S6'7/*6L5U>\d\o;!A
%/VWf:"O7U,T!?PjILiR1AeI[+f0JJ)=FDF:Ro1]Q>#4>^be=ef<]h!hKdtXtpK>L[F=ZO2%k?oE.]p%/akXpt>bZbO"VI:I at aS(?
%_s!XgSbZo\b.g(bW0?;m=X`UumsUOE,j]In<9MQ+ at Or@i>IV!Q>3t?[-o7BcRo_GHee)V"p)(Lgm/dt+?u1*I;@W*Lfrl*4/6PR=
%80f`NRF<($!ugd-N]M`8l1Tc.j:eV)g5ifmGB^0N3qtmKo8G%Dq-Xg36u#:<**WPXhf'Rg'p]%pSX?e;oF^[cN495V04lF>[3Z*;
%(1=D7)[mKW0[e<WNjs&9O<?b at K=;2;Z=X:*\h0Z>?WW<8rB5>91#.tZ`W:<-pMKUN0^OS$i"M'(gnD&ZYl?F26&\`!Gb&UpN7"c6
%C`+gZGb"&`b;o3:6JJH;=,hH%<M$5rbRt5;_&CE/=q"^r&fq at _BMF4DTRn:djg&o3BRGIW7%mV!/-]u1^*MXY!sFc0SGi;g;jQ#;
%kp=/bMctdBhhGL\j`CCEZehJ.,C=eYF<TB-h&so+quBB5i[2J;*us%$pu4no>R`@`jBu/=;6G>D)dDqs.i9D^ffY/]M"o9n`4[nJ
%\\#^2#ORA&11#HjAhGG3bu+i at RDV/;),.>L]m)=lEReO&<DcspeBEfU&*qHs at V:j8Jb5PpD(b=4R-Rm?er#P!fB3g>]YC#.,Wd&5
%VQ)S80+Q:?(f+i<%aKcYjDIo.*ZQfZl<?s?k-KgZOLT]%<PJ?N5*UF--,dYMqo%tI=M4(oOHhN#"R5.7MGthGVOGPn/Jf)0AF7R<
%"K6K/m0f.[7*^VGkIllOg/@EH_G[&4+a8!I%e<'!(hgMrQ.<14X at Ajr`!MTl^EHE1iWO9#h[h1SEM>IEb.^-7$6P0WeJUDdJYo2.
%%[jVrbi<7@/VQHCDAME':c:L0!@KA4T(kmF$!pQEkXH;`C9Mpb73bQh/bU+b73bPIY$Vbh)KDK2<FZ,^EgA;.>e$G%#3R_0\N3Ch
%q[Z1J7-?t;Y((DNF=.#&=pf?SQ3-&ULg;U2bq%dgL&sdg:-aU1"bEB[-Ye'GB*(LH:;j6@*=ER@>_%Wd?P"V(E<8>#N<ICEjen0b
%hh'LCDSAa(2'Vh8Iq=ndCLh;._ISpVcROKC,af..SiZ(J.%6iel"hBC5D[\^ZYVAKc[DUG_!lcKF*-`QFbZpt+5=/sh,PZ&&\OH@
%CR"nk4@`H3.P+&5kfXT%8HQ65>?R[J8K9?%ZG`-#ImkI.2,7tT-4ZBM/30FBs/V21$kIE6)OJ"K"_ZZX6K;8(VC./Tq[_-`&+#3/
%f;4g7Nk1i66jK7O$GGX6&7go*2L7\Q_:4aU?W=Xqf^-j*mi-_g88C,M)gt0Xf^0C56cDp2r%\BCBDNhi8du:c:VI:9PIFnUCo'07
%V>4->NS'3]'lOP>S*p4tpeLeG/*\WCd9aChOQXpl:ul"-D,QVZVM$b:SaOQm4pLmE>@m6r=jM/3RAo9F(O-l*d%>m6GsCX_#%b<r
%qr<+1j`#Z2:5og#)*!211C%W5U%\!H_D)&rhpKu6@`rGu^T-;/CVYcJ7`Ynf\\lTQ?Mc'ZFh1rDP0K+1(lf;5ikef1?G3VHO#21@
%FCbt#dui3<,LrE715sT1lU89:fGi<sR&/H5![YIYP&r'*Jt:RQpqK#!Q">:c=@qMQc8C4:r\0n39qLJ at WI`OkRI<>Kkj5enQsfY=
%3'=NdKcj8 at P-ZihS;;L^Ic"ron"YKHo)eUk''[H*CEL'_:@4*khM&K6FUXeL6bsVLa<Tg*j7FVI5N,si]naWI at 9<=M&"KhgaOIj+
%KZ-^UOQlLT+aI8o36^X;8Leu<G at H&lS>hjR4:E_+a4lQ/o&OY,gl/E(6BAZcoW!]#WCE[f'jB#Jq<LPJ;D,\Z+8Y^h[RFgQKZ;;8
%P<4Te.TTSD at 2\+2&]XjDGb=8%DNMr<cIh/TU<Sq8h$&?6:8R,T/P:#W^Chff7qk5?h#n%_=$G+g!K(%09gBWSh\q+-E1$\0:3CtI
%Oh2fT%7*nL8T9U=Id4V'UuB0TK8D8DICHNee">G?,BHa)Yds1-%\c$k@*-g,d<X<@gZdOIrX^A$ZX?Bhmm/l087u@`3=,/@MeO1D
%<FDXiH5cJk4Y*E0?@#fDeFTP>GKOdZ;2l]`bqNFKI#,\]81/)aC-ShER\]S<]"Ier-9c.8d9(L'RNBsh[)tpn?.cF`;XsPSOm3Kq
%&kP<6gDD>Y2aI`agdq!*B"I,!^$1ZG*_<!B`7GG&#q1'.W"65&(,0/&'&9h`XoSiPH)uS.Cb0Lan72bL`%<nKap(BJg[$Y!qpl0i
%96OjWp*%OLL\gDc5$i3;_+]:!^7hgqEC"S1%ZhlU\$)BZB7gB`hA2Pc?fcM`BZZ[EF1?B>E<3E'e`l]tSpdBe*QrZ[.%&=,SGZUF
%I.8(,4lu$K\bI:>fPf&I*3NW\-lS7h\5YjR>]!89kHof)HCKg*H(/E*piNq>X_CbR at CCoV>8Y3qA@'YjS>0cElscS-":^fj3B'9U
%_ki&f>-L(mY,q`U`q:/7 at _Ya`RP!.SWBmlHVP[5P=:g?R9tA(2]+K+02dh=3WT$lBeJ]rnch7'!kjlGmej7?3_:1Wo$oFfEZ7i''
%6(6(_;cc"#E)MYiB>,&C6Ngod6\q(Z)TY\J(>`DeaF4^0=%PIpZaIDMlYGPs$9c!C^a,m at pN)aNA0)gG&P2Z6]PljQ1YE^+6ukE0
%):k?nV9_W3I;r'BRo8Vu.k:g.&3K1kI3<gFN:"\2"LsA%MB%/EB^t$8=YIu0c_A@%Gl at 3P.^RQV3o9Y&'UL=?SUY-n9>2)3;e2BV
%_7tK;[VjkTd3\:iKW(VHnguYhmNY]Vg7\p>IKFYc_"8SR1Z6Bk(N6I+5-.)D+pf&JlU4ZMLplN*_05:Ni#F3i6`N,b-Fu*WQ#&ds
%)E!7R>_[quNgC=0b9BXe*(GeKrHU/b\TasKku at 02&BMBrYFb8#L!7U!+kU_8keoQ0jS=`*%Wgm82jdk?mG2Z%RDU5_CcBaQTY]p3
%QgHbq9\ACCZ".I/A.[ZN%Pgn(Hg<6CkuAJ/c4GDqn+sUg4mJ>.D,Scj=^qdT`,4ou]8?U=mS!2A;r=V*?s?-\HW@/!_#hGE+tqWQ
%e28h2J&AFWDOAQ+peD65Gs')tbF,skSPkuJ&)CQ9oBg]H+f0+M;5\%9dBA>=GsZI"8MMo%\?8u;r*9]iVD.17&J0,jh7?8*&49^I
%GGC`;V<b((&4;B<o)u5q'>/I0n\LcUGbRB5&sn[sN%"ARfg[fa#^e53V_q(:2Fa=^e4h91Q0P0[ZV at piY"rT/9O`mH_?he(>YXQq
%hs786mki<"A:JW:"T_V'1I*>VQMWg8qeYT.7I0)m9As6LDo<sI*mh2 at 3a'eO*G)P<[mq^_)(mj1XW]I54n\&-\pBcqYK#]#(G)3W
%qG+Q*!u3d_=Lr,J/Xs)1("6TP)j`C&7.Ec,5!/Xaj'Sg;\e at 3>7u_pr]2,VAdn(p0&\.c'-GqjmBYCXjZPnPR)Is<jSsWG#pNneo
%nV>=[qtiZu\bhR2JUjU.);(i:1*#b!OpimmTrt*EiA.<kc"R8HSPpH\d%OuX82]kj(I>9qcN(6$GZR5SRA^<Z(R85R)t:mWn`X*p
%iRiA<]0)\$IRb2%Z/9-XKc]L_E at Q-(HS-+KYU=<Ep!142*FdF6_o`^=N,(91T4dE$o/;:j#.kM"nP9sDp,LoMU'?dQYk;3&e,/R2
%(d#5kVOOdg&o)7Ja4p(0G1ChCp"UodN'!Q!@'HpJgiFY44'GbK:Yp!l=apM4?4k.L*m@\?0HE+]>qV81(7AA`WRDZjp?rN=m1bn#
%4Hg%O,<FLibfP8o==R,ZLMNZYS$8-skSTPW0kMjWTO[69LEELpNOP-shY:q?n,[l[9/Wj2*D%#cEf*jT]J1/24UGI"YE&q?^5L:K
%O"-AAA_:W(KJL$U(fg^Ci5%9aO$=VIcFLfb$nEVa&msG2+Id2[,i7ZO,S\*+0A1#TE([9J'1$q0GX!06`aVLD%`]ut\&6Zb=fQh6
%Y9:eDRA.9:?7&eNH7`S!LhQW0(NR!"!&Abc*HQLEY'92LM@<"u:r<k(:dD^)>-2l0l8C=WU!DkLC3!'*=5IbtIrf]^,ZkT4Li$K`
%%>:9#`%oSgUHQSAL+;9,=UZ;:mjl4qAh-l)<4Ee$#BI`79:'M+ce?1^Ld!:`]U1`0jrdsF\,:Pc(tLZ1?".'2W4]<q=<=rVOMr'%
%6>D1Xp#)Q$7E0^=Ll"p[HGKAQIJ#5Y3m*AL;)Jsu0jf8rQg8qs8cLc at .Ra^8-GPY at ne=1t(/d!fSZ0(jfM$Pjjn&Um1DFSDb!gDg
%fK902AN"gs&7_hO#Sg at O%We.[$5p=NDPYgnCRRpZaQ88E3P1$%3d]2NaiOVibp?g^o7^i_#_DZ1a[MLaa:8(A?MIRdIhg;e6?b_u
%HGr_:f at p$rP2[$K`bBE<#+g8B&3!9+)<:8JOm1I5c#p"B/:q%L?=5RsgagJu5t45).4n^p at LlHL&ibfU(`@ODOIPaV^)RL]#%G<(
%&DDZ1oNAf`kD11Y%:,'`&D7),04ENUY3R.(3MNciooMO!Apcjg_b70O'[q-k*g(U:i?=?^@.Q)-BQf0+().Wpa>S>t\-d/qKPfcp
%MOZ;^D_k14+BBY0hp7>C#B;2bC*,?]bN[O;+t)ZXlnaZS&:[GYR7->o0;(NJE2-I:SsdC.-\c`M/!"/W(R/1o>HY$;M/^Z<DF9c"
%f&X/^0+bF*n8 at 0Wp9Ba"D/=UX<>)$QX$S#B:LVcg<b:</TpO_)El2j at d++l`J;i"$M/q][g>CQ^MS@$A*N[.(hos:g&;`sUac6V6
%nd5s2_0;XMV!lbW[Zu)eQhNB-U4Jm0D#Q9K=j>i4/2bpdn,W''jnU?;Wj\aurG[h2E9=1oBRtebAA+8\@V"@%!GVle&j_jq#_^<N
%'YF03cqJG!5o%jG(*=1\?dN0aS)=?W0kaZQa2DfPi\q<+m&QjX:i*'XGaCq"T]dA0e&ROn"2E>T'KA;X6!+lb!!Ei40\<g&YX:gc
%#VKb_>8$m+0H7qd='hBY8Df4]*'Z@!%Y5Y6M<KAX-o-uXqUEW2(\'4'1$[Rf'aBROkj>q!0Koh1qI;5#I3m at LkN_D/[M.!pX*dip
%=7c\(fCZ.t+P-oiOhj$X7ekuZ-an;%5TPmkl'E&3oFMj^-F\)Tq$d;I'Q!=WW=T/=.`BEd.,WW^&a<!XW?9BqXOu!aY?B_k#e?cn
%;hE6*&3H"9I1W_a4*`7^BI(Vk&- at .NoI?8TjRZ#<9/WD\a1C?\;87&7h]\eEhk-[81FLgW5e>Rh&Mj&\O2@$..\g*U&qfYifI.N@
%^SLPeh9rNi`c?%\JoL)k`81Y!UI$7Kb4*]d5R6pO9C0$)7SYd%3>r+gg'bd1ChYWFr(u=+Q]lKjn1dHY];cDdg4.tI`@$4h`Gdqa
%bm4+VcEORm;"W(T_1"1D`YJXZ';?7`'hS;#1/qoE$R'lU-pn_ZhJ;'u-tFu]XOLD^-K'HoE'^t'Tn3bn`qG"',FbsWJ4rSdcsj4p
%00!3$Yo)i]$htbnq\DQ'p$`r!/,j_Y"o4shD(Gn'p4DAih9'2'gC"Iu^$p^+g>F<BNJEU,&W_ujS&L<B>>ArNK]m%ZiolN(G-:r:
%l,VRRqULEcGgXE2U5u]Z at 9]N#g/)Vd]Ym*:Y5@[OKB^cHJidum=]R^GB&Gm[_W_NWGbst7L/";Ko;(&T3)A7j;]P`c=Wg&d/L&H/
%FK0_q'^U6bA?@Cn"d)[I0j!bGWj*/"52mL56S6e1M<L(Bet5P\nOXWEZQA])QPC&BF&h6"jAX)C&<bhLYGJ`$%0tnFB#rp<,fe:s
%DFc..?k;.3r;eb-$9@&)MgIt]Pc8hLr,l!UJucjUC67V"`:*Og,)=+5;LqQ7Sqai(]GTA?ArYo[_4imdo$^E07i5/Rl8OG*KVYns
%?;?77Q5Fk]n%,mOR8+PRf>4O.doa(1Rferl;=YK,C4_3OT<N(9E:H4GLPg/"e-(F,W>f]UiPbN=m:ZE3R_"[!.Z55p2k]b\lKK(;
%3\3fP5<"Ei7i%_m'n0Wp!akkB$>:m@^N&CtZLM(phj:KelD/fW(<W-^Y79"qLL'Sb[ZUEg;8*Vaq[N4&UO7]RXAH[(++Cj1U:1 at o
%@MO's$R3qeeNK%/_iU$96Y[-""M7/jk0<(5?8u?6op!?Ub+XbQG_N6<Hn%Zu)EuP".*n_ACLgMdA)2/S>H=XeJ^FXJ&M,N"5,;&"
%+3;hgXS^ue$Z2^V)&WfCVSYJ/>Os at +:Cjh0_T!F.o%q0\HBj3(,/U#Zd'fpZ$unlT/*k0<NSK1p)a?Ze;fc[q[U(Ykaiei-G#@2(
%I)LGKaJT>&D_SZ95,Im%BOQrq at Hi-$&#f<'JL$::NiaQVAp<I)"4t!pcrbIq!TKiPPM?h0bfoNSH2E4"Sm!:kG=B-86^i;2HC$m2
%B&_4j.Eah4OS0TrEE_80V956,GbL?`]U,uQ#,ra`\olag7j#4L80tJ#WFE6)%/0-S09B%Y8[;=3B?sD.mpOql5gUdp`Z-V`<%(XM
%QPX at PhJ=o#3af-&&l(*YPE5D at 1'-rVr.s7D^ZL9Sq#Le&fAY#kIeb3%Ep*&'!&[$j6WSRk)8Y"6=_&Q.08egY:jQB7AE)F3:TT)O
%mOQ&VNDFS117a-a>Zo!Uj_ts%=A9,S<X0Wt0k!d9W<+RTJj8\!H%s?=b/iicbXRXBI:cu@`C!U8A0GAoWL27<doZ__Q_C[7+KG]c
%:lI.S8dsmE6CfS7kKSJa7(Tu"UJ^F-4J,A&Y4+#A6Y^?Ofe;$WMqp<nF>Wtf>`i!tFk?*P&T+C[eK[UqK`2Fn]!)U:#!N/\8G84,
%p'EN"*;:^q8tOud_1WKVP_\t+-*B;9YAk9!N#qHKW2%UINpt.u)b(ib*cm#,jGfpp2NKj"I;C9D>+*AM5t(J at k?$>r3J'5e9r!_,
%O#b&p6Q8K8D'!cZE1'-8FXqc88"7O=$)c*d'Qpd.bRrK:5D^5]kEQk/marrQ8<,]^N0tX6R%m`Q4c<);2p at oME[t\Ffe$fTs&@nT
%2-XmLQm:TjfIZ<$F4tSLZ"LCgb`Un\efrWnhkb%joC6's+s\O,l0K.h$S)"DRiLC(L6/IJ.+6>8QrHKhI=<:EX8<7Mnb'-pl'=pl
%,3++d$<:lXOF&gqhgF<Pc``@@?gt/;O#D$YDe(00%e$9<_WFmNF=3EgN>0$b!YHj&NV678m[KX66uTh'g7J`<F":a+0p[6%S*A at F
%YoHV?2gnhokb,(5(>qSiYO>r.^QJ\_PXgF6IqQm&"+h%aQpE!]aMATE?ams at 6lN*IZ%>U"brA!>Qt/P,d%`qB=.LZL_]&TsB]req
%kLRFO2eX5-O\1)E:rQP26E[j/dG-2Jna<A*pEqdF*dE<O3/+1;+[ZQF8hbIG)DOE`!ruI>L`N.NNa]En^$*Re;,9!\fIaq_h?%pq
%aA(R4[D3[5$c">G/;E5TTuCEk?4_"rgsTZ9CG3K'grNqakN]@l at +S]rp0Y88)!oraMHK0r/;?$/!M>N#faC[l.JCY)Nm[\DS\`,f
%7r#r7N(ecD$,e)h<Im_t:F@[5*:Q3Q\,jm.r9Uo`?*EkFVfSN6k%rf">R^;iHt'iPf$tFr\!Ji/N6gqI0M;.3Y56QDh at 4+h2fL7:
%_?(=0KmLL"X00*GRjS_<HqU@!i$X5?`Mt>U)of%'\X[3KZu?Ur!C$nlUom/h7iL at H4N3*^d/Sq;+b^eBb<k)1&0dEHoqIX@'[0L&
%rZE4S;Fctq4aBBBK9gI),sd%N#\$t`g%"<t%jEtrW\Zo!4Q6TQ$`<E95F8A(iA.frNSXT6ir^(Ci4bTum_`Ilg"`PL&QIRoVD4"B
%i0.lZT3Dp"UGu%J<9Gtd7lh&jk2G628Mg[RKDVmLQHMIU(d3e297(@AouX(hMLb3T7=p9#%)4$VB"t6'H=7KKL>85k<Gu]"jXW7%
%o('>dP#dAJLrtge!#/2"$t[)s4O%.,n]@!V^i5URK`1;8SpKC8D<^KF.-)K$b:fgO)W_oHD"HlXN<?&dM<NfD`s-_D%B+n!!A>Tu
%5,Lk5/k8$Zfq4otg at H5reO1M,bq&7*.%:4o7?EC6AkDF-`E+u`'p*^7hCiPu.0uhMak[ug2\el>qK6r$1%<%7>B9MNY-O#^fJ]En
%)[.9+m:*]SUQ*8%@sNOt,)a8RYq^>^/4ITOpee]c^7;K\CspHpYi#Anc!C-KinC\fK"M2AfROB%#_;s_#r at 0hU7e/7,:]>pGG"KQ
%H1kIM1(o<G`,kCV^YR]s_Fgr0<rHe*$g9O?<@`DF5"Dp&T7Jd=U(,bKi1ZA!k/3rB(LL at rN>MVhi\kPFg_nTj.HKSnVu8G<?SS>*
%Wn'?F?ntD.i]k&(7_-/?,5L:dA=\WrS(qgo(GkRu(sXm(`N6C=p'K=7)-m<@"6^c;&&rcH.;U at A?KFdWG%(PY-1Aqb#<QCY]tc.P
%QKD(]%.;Kb\sAZ;<=lJh-18Ve?BdIUNj2<Z/%*XB9?ENci,+2&8'Q7W/n\COjW?AGekXd!FW%AsfdWefr%+gmmo3Sq*`fs<N-V!;
%@EbTnjP>6dpBkDrj"(ZGADShqRBg`:A-SQ:$tOg9d8`C-q]&K,rOn6bpGnu7qg0 at NmrJVZCi?MPrI']^GK6:]8,N0';>.,$mTQfh
%rI']:$$JP:U]#V$1nWVV?:PTkf?sR]7rlS=rOe0apGkQNZ*2d,&#*k6n2abC3Pq/UXZf7>I<4]Ms,$rkdHbIqT-NX!!?jQ#*!(gT
%Z5$p+hOol6_m]=[.9U;+Y9UX)'J>bJ:r('AeMR<#Otd;=6O>JZ!Rg2=H++)+%/$QMKP*Y/o>QKdp;[M=5CnENao1$e&reMh^)srK
%kF,ch86jKa.I49^9B/[Eh'ZVIg.d4QPrl0QBN'h*OANofMlK5RFR`Jhh'Du2GOaFdUt;<WP*19H^%/'Ec%e[q/]C]M4`%DC]j[a@
%gLE)?OI*[OYdA04IL!MnerB-R(lW]JM&VVjlV,k[gaX%(M#:'3gZ`bnac!m,4.!rr/'f.H_c$#clPsN\Pl,/m='V$ilQRlI1'g^U
%*[=Zj./OduY_B`?$r1- at 1q-*4$=9Cl4!KFVFbjI-]Kk/"Jf&[M$^CTD`,Mt_iZgi,LEhOZnUfGhHU#HQ.pg"2h1m50?1 at u-rs</e
%'e`rGcf'[g=1j%qgkR,/?1A!aZ,70kY'<7XEcrj?fG-&9p7EI^^Z1$PVH#Sq1$jc6E*WrD%(kL&l56,VJ&MeMbk\;qiGZSK*j-G4
%gf)+>"gc;UiA.E+Z<-HL?GO2\LEhOZnUbS^qSaRcZ66_Bq%1KK.pbKZpKM</`sXtRg@$)ZYRrOMGd2l5_le7CVga'+iIq at X;[eIj
%=1gfOItAM\h;'iA3>=47MAItuc/FIe)d^Uq)>@Mcq+l^T%t/fU,DHQS3b`QRYqYBFL%U8<bRZN([rHNB-tB)#!M^>s^R2SFfOh.2
%m2Omr;X3s2iWVIH_C*-t04a5ips!s<2pC(?d:aJR=8>d:5<R+sciT_!IY:S>Y/3Z@?m:W:09[2Ang"2Mn+8)TLKYP_[>:N/&AtYq
%61q]L$o.++(W]]8`8Cllq1DYG)t<u at rs</e'edXRi"&6b]Aa"(`JtS_]H&Y5%\dIO2/gMC`'=&'ER!8._V.[R#K/K<`s]\HNtU'W
%*A:7_j2<fn`s]m<BDWeUEA%]PNfni,f=W+W.%+:g*7qi/-DZY9f5/G70h68aP=aHZa#3n!%blFJ##`G,#]\,Dn\T`9fL%5!s6nu!
%p9677=dome%(kL&\K9Y%LgaAtT\/uL6k$]e"k6ctNYlrY$cnN]L50uh$S&;AEmiGZB5Pf$JbZSTKEN86n3Xg#$<htbC^OB+ at aG1u
%FCYkc\3b1"Ki'hb&V:d'Sht%<mCG(=_A;hT=t'0#QO1c`p+VAmLa2c$"2gXQ%pDddnAc#[hNC8!B49(=h9s<9"kB&\j=k4Fd"6(.
%3-psu.;/`XjY)9IRt at 1#hZ&9`B2anuDR2<;R'S6_=n[D2HC2#fU]G#Lh["9]74.==P,!alRt at 0lSUC&`B2amJ3L+oXo<`P.0P==G
%oD5Pp57V`m#reYdddb5F9gR&AbHj^+o>[m)VD)X]O>D4;r^*!Y8baW8RZB+NrufVHnBq[D7r]<b$$/!.3Q(.^7[UM2EWKt-r^*!Y
%.EHd;CONQDB2anu&t<k,0PAl&<]sEC*9M(So8;r.fO<&PFG"ThigZ<F_Qq;[BlZk6o97FB?q)E#:"V$FP*Q\o\O*dQK8Aq3:QtDc
%CX&<DHX[ZGO:u>4bVTMMF"*;7dRN6uAtiDUln#[l3CE.K[[Ufu3TBl,2g;'W`W`FDE\r!9NQ).o;EL=/dRN8KU?u+PNoYEHO(2FV
%X`(sQLJ9][TJV*SGGL5<"d5eXpdnCYE]I_2Q)(B+ir\m88Q/@'"l]u6r1p;=irWD0IN`F*8X+s.q&;n(9u[?OF&q7JN!kL0`e@][
%ps4p-HMkr`PG\=EJj%o!JC6m]B)]98WBW3l:qr2NeRVq[Dq)+<I+Y-a`=^H+A_)8,MK(r>a[^;?g1X_VO7&dR,AfhN,i?SGglXK5
%(F].mh2sT6(GHftdG0jB)Ac5FGVjW?j&T\p%UT3%HrA]7^@:]HA(`F]dSGf0A<6[H-dpAd7Bn,V`IZ#4oH5pO6qYjT`uojGirW8+
%$\h56<d;eCr.stpQ""dlp=Q]0n!P?XiR5)eYB1PW-f;kmD.(@'T;K=8;>03PG$/K',4a=\<q1i[Oj).O/f=`4a_`6j$^?=I%8tM-
%5g]'NX^DA_I*EplR'#NaOB(O5`ntO:R@<,tVXT\n7'AOu97";L'+mf1Ou;bN,dR*^o<N328pFn9r[$BPKrJDuP2K_PW7$d-d`5L(
%Y0)5>7F898jGd!49Yt>*]VCF40E;.8kLkYJ<rUdP9-;9WQIXcXJYCrLMdqjR)!-+plG2"Th\CRuNJT@=[dY$lo>/DpA4Td*]d0[Y
%Q#o4qd]]!H/(oET#.8kGp61d6'-8K`Dn:'@ReaUD9XQ6NO*L7Q.DdboJl;3\itqeNX`7er^C\b9'FUTh6Ld-$m<ArtR]!aUbE9^H
%`_Ku6dH[Hcd73-?4?"8=7.9R+?L-cZ>o\K#r(d):]MHWbJ?`dg)D8J at 0sX4V.pX`UjTtBjX5!/70a_G5XK\5"De%PCnL*_f1q`,N
%T"XCLc'+2*+]N4Y!2&^jDKKlM at sJ2HqCF04E/UCK6"8iKdT9Sn4Oc"k)YbG_d*?/l9OgDd64MR*rILlpCCfFsVr=YFKWq[%&#+L=
%?E?95h!sX5j&F,6Vo`3?ksYIeojUpf^2ZE/Di@#-nL136W^a'o?/WoKI4d%ASjVboH%T%];(F#W5'*#i0Q0C*`)m0aeX]T#19$6u
%CeS+P?jN?"eFjUD!feQ.Xk%^3:6C8fGUbrA6bdSbgeG<8mKKBX&#.JB(H6*Z]0:&"gX0='fq8*d[N!F"Ppj<iGtk$KLdsUX$<"F[
%:ZHYUX':,?c5`S?KPu+_%cO6b=!*R]d:?HSqJ,,bbWPfc]/)bsnBGK.*bgG+LsIBXOUX\^d@^,!*4K-HKcd$>d%=HZOE-jR%$G=O
%5HhZR.V2i[lGtst-XU4teCBio3\sp!E.>X=N5]Cg#F'pYpmWfHeT`$#=5i0;^ksnP;gr`PWfpp0At->(ON(e:jk><U9nSSbMmH2/
%9;Y?S7^J_a+])*lPtWhW\N5_R4m#BpeUd(`p)BT[[h[,0PLafSrMDo4W"[[*jAgoNWLS9OmdM"0`H-O"=Mdd>kU7O\T-lUtKj^]t
%InL-QOhs:S/K7Dk-_m,T,i>PtJBOH$m-TM)ZFEm%-Ura0k4YOWHE>p6;,Xc'[\tD0,:QZXX;[6#B4d6c&)n&o#`rV.V"U;Ba[eY^
%X,&'1('@m3oW.n&Y_^2^&X@,Ub.e[G<^?1fAKZi/P?O\'o=%Arf4p/Q/'#2lo8.niIM6k&;K^LV*D**HT4'e.\I0q>dYm<dg3O.:
%r$l/O)O2oW=9-$rC4!QUOIZV7jm;"J3"$$+?Q\el?JmFMr$?-iq0Enp9Ae#)FQPP-8+Z<</j'8fIR:,3Q^Ifn9/n/&eTn[QXXDe[
%QNrsq0,,a8U:2,pA?Bb31#<\d1$^*QX7J4d5Ned>;$SHQ\s`HjGCM<4!Q;3#pF;FDgu3==4==U7HKn*[q6,h;\M[CePe%4$Eu4k:
%'$4+8;RAZ!an*LM!XH3k9ssBE[V6--4=0$MkEf!._!037.+F<+\2+rOINjfpl$geNdMfn)<gfeUHLirc3pPJ[dD5Vjg$uBuNS6c[
%>ZN1k>tp<8QN1`PRtUIT_l^dXH>=98dSOa:dGqD-W*Rse.N+]SFL?BsOZlR\C#Ll(BaB++f`<cp`3WX1HkD<<q:EjgokT at Dou\_-
%V=-4e`@g.gY^=,tAFF;7*^OV^UY1;:4,YLjEb0[:igi.p:(2oC3Ouj=Y?b9;3;_#J"Y<HRK_tkrik&KDp84\NE%i89gf/stM)g=$
%+*T*sBs1V&rG/!pF;CY.G]!glI,\EUQO<hDm7b)SGT?O at k;5ADekVB0q+b9o^I^'gh&Rfi$er_!*/&,!'!?9rH/_=i8p(:@6h$3U
%8h1C]lNT0,2j`DHR*Ck43k]nYV(7nmP12$H-0)^RGFkg,`I'FacK<'^?*g:#0G/H!WYAGjJq#.Z%mho&UAO7;+28G#Q_A6&l:k'G
%3/h142P0-n;u3b^^(;qY7\;/q*kcSEY227>\$jm>U5_nq,o6Cl5+Abrbf'6Cgc'F'cNUK=P>Z3T:1bm1^TUn#=h]00/d*e9C#S]m
%Rs<65ZBsIHUV[59!V'^u2/K$4S)\$_?&riEA4+$/IgOlna9MIeDdaS*fq>bK\$1k+VNh&RY`4ZZi(!Z&Cni3o&l\QufLA at hZ;pK]
%CkE#n&oYhUGM81[h.hjH<*TDdENH`G at l=%#g>5_i6)C\XLI[%9elUZ:$6`>^l&1J$//r?N,LTrSi.8P`X2(Oi-)Ybeql!$Vkt*LI
%D0Vj+oTOq!X4A1S'hrg'T5?9.GKiMgAXCP8?UOEBO4ml)0.AP>&#!XchoQc/)UB4Zlbl4qljPpQ\Ql_sMl8*hG4n3r7ko&6ZC at M[
%7.F`VOG/*pnstIdG=/f01>0h5n)KP_ at _O+Q)m_Dk[(OhbGMj*P3rOYnX6.H&>?#k:;;1eCe-R_?p/al*TS7R>Mt0[db3mdXP]iU_
%Z3gt<r at 0NkC,aJ]TD2DqPo,-dV49HT(m"6jRQ/U(^@A3B/q9#8b_?dR;HkB-N%<e1D*;WVh^<_rBsfEAo&l6!2"SRWbJSJAiACce
%d<AYghu<m^e<`mQ#o5a0,BEmQ%K;MJkM58`bg+P9cKI,up%\MKJ?8O.[%8U3;>aK:s+oVMH)pi>X+Xiq8($5%\r3tteb*dKl4mAT
%QbYm0CbH'K3h_0kfNo*tcHBW=CbH'K*9J at T[MK'F.n/e6_Y/Rh=H2Aa&@NAX_cd'GJZug1)!nNF5hKBS9[TOdJM>o;iLZm:O&H:t
%H(9nl]?EmYFuA,CF-t6"He'i/StSpWTos1'-T>3"Ph*Pei0o!YI]s":8<4=/T,-nX-[3)A>uL2r2VQg#[6'V;4CW#$IS$*F]f`9s
%?%!W:U^)*3T,8qQ\j5lJCM!Jrk at dn!fV<PP]KLhNggF`=c_]dY+JPo3*:"0_\jG!3/)BI;e*0<ab_X4j*1r?:0ZAT#r[lj`Raj2^
%b#so^%O9d[msBTZoqSNekj9(5Hd0OIf,oU9=rtrsWKgk^4(_-Bq$1K[qrh;&m=gt#("^]e at 2Oprc*qD_(l;fFlboW\Fo+^*:+g%E
%XWtM,,?6OGDAk#C. at l?^;L]Qumj-iG3)Xnlj^C]oi\F9MS).d at bFW:)DDJK@\Sa3%6X3I>XF*kk[iNR8U>C+bpS/B%-cpQ at BtOd&
%0eJ_ at QiAU7B-IGYrB8\VCpMK%hY1p'<V_/(Jq^iEl'HkAr*-62M8'8Rp)WX#pae"_7l0CNr5XH4cjlA2Vr>pHRA-(890)H^1Kh'g
%nae[+a9t.=;;#9eabg,7!Olc3L$P<gdpelQ_YkXk?uF]FX\ZL4h7ZU at O&qT>Ls;5$ag at Fg6eoF0PCCT[SO_@!):6^S"=3qH%>aa1
%,'9o)Q1=dHH,1-^7QAWV7PaGtb^_&[^\?aDls.>"j9Hfign'<\UUpQ^EOUehP]K#,cA%IWkMd8?P-[5Z$/A'Ngi"BOl!)0>.nM!u
%>plXt]oa^(/b,Zs,gB*4"58i)U@^,fV-b,SO:!&bA#qpdJ%bu7n5nQub5jiohZVjCn@$g(Xn/!2r2RL3FNZkM]_!\"UICVW_aX<7
%Mhbr:$.CrWjAP0mP6sRFCDRj1etQ#2pd,=mJD;cJYJ)j_k- at LZ'D:,u?sc6geCjV7_j!5!Lb#+h2>sr:9,egNqX\n-9!=^`E`\FU
%L7,HuMAE*!P:DWs\T(NnUQL[4&r\+m&,)eaddplA511kp'r(7cC[Lh!9+mG\XWpE_^%(6b:]9Z47,^h$H!3khkPb'sOq^XX$;ocO
%q;utVRj>@UmQoA!'9RR-ChH8mci+8=3fkAMcMhm+LY]^ZmumitM$L=rH7 at u?QX?d586)<?/qh[cX+.94OKirkI-JEqS\i(TDLLPF
%=,X0Z\sGJ3Vmd+\oujL/A)3G,Yo^Q?Jbd[kYf$G"_mf1"Brf#+VJ=HN at PalclrY(Hns8R_q2c*A<6lMpD45\6]!6)>Fq^Kc[^OX7
%B>WDqg<R]UiR[Al9Uu7J2g5(#hpcNC-Sl,mH..?C_/YHE`:LBc>g6arD7c*Z)m\Mm2;O,qnPU=9^gf_QbN<[S^GH[Zd(OiOhE>$)
%'&+tOPIjuf7O)6$_:Wt!D>T&)IaLJ!q5d)6/,k]I$e8NpWWXP:!MB(XPJ-51XnuX:>F29-ipSeq;[0`YeVU<84#,5Ec!_$CRq>uC
%G%jp%%]'iuU:"NSl*sTGmP8FL6D)d&eCL0_T$ZZ.5rW+nKc\1S`*6&c%1H(4ko%^QOJ7cG\9 at VjI=Vs<'p!_K$lLLC"?=\2Vl6P8
%C2K`E1L at R9Jj#sM-Ro&kG,[$ane*lGY:l;ZRN*dpk1J#?Ain7pkCY.cl,Qa_^sBc%DIBk]DBQnj:k!cAeq.)#X)&>rD=d&k(lSh,
%bguC8M*4A.D6=g>&oX at HQY7<0PpT<>L`\>UQaCOB;$UbQ5;Uqi#41B*PeA/gX4iS(%h,aj at e=6lTD8/lihPTsI8+j#+#0P:a`etg
%\tF*H>W!#^RY@)#A)_$7n.5 at DhYQ;jC/a+,Ku"E$A7)?kL`$N-dUN;F&R7e0Ms^0^m[&=iMUlGPS,fr'RpeQ`:RR&jFL9JiT+S.D
%/4mN+a-dR$D85`hKIYEGU3fjlY`("XckX`WhO)FF-X=Kq\QE<'G:K9b.\l,5f2mDlCA75[X""mN`sf(FLM@]@A.(Q&Phs=#(BZ]o
%cF.=:M5O^,ViPL-q`MWZXXOVJ2k+S$b0^?r/)tR8&_)Fl1XRjGCXiXMqFI.fTB=(K%HA^-7.K(nX at qmoqTb)j]KF7>QfkE6%n!_X
%.t2%#Le%q,OhB2CVIQsVc*AQ4<`-U&S/)R2(Ud80U#G-?lAQN4A6hO^6,T=0QYX[!YIo7AY at S?G>Ae=8,ZNT"c&Km\To3R at f8?0a
%;.\L?@fF%dAlZ*L,buCXV24l4?@1b"b&o[DD9lXU37#(biKU+#UR=/DmQq\4`9NlYC3*;Hc.+fhD`'/4G4]7iioI6&dRrc'?Zb2k
%8t9(FS]I!ubW^EmVjYqF1 at KT>P6`o8a+s+B>cmBD@$LD`n]56?0P+2iIC\%!oTB(CAr(AjUG3b6+jc=L_Hl\Fe#H`ignJ-=)(pg1
%<&5RaP.AlWKDm,[7s&hrn]q)QWl<]TA7aN;,?IQ%FmT:*8qs_l.i05]H[*<@7JNuTjnjc[2eST6`2fal-Pto92`%D!H?H*oM7gSX
%'E_WaT]cR%%3)QcaAl]rVGX5>Y!:BhDYCl(TEuFNLJo+^T0:>f?,aN3E+]g':nTA/o[M3H[Zp2&T/rU at c4Y%)^K[Ke(I>@;.(`qP
%R=C?,T2#_oA:ah-$cS-REH=d30Li+]A]gcN-(IZoH'SL!4LO2Bq,i)`[2Q[jY($*7W0osbZF*+!j&S at R#WXN-eaqbb(3ln/b]E:`
%,6=Z2NsO_uJmPpf*7o.B)q:(b<:(2iJmT>07d4MniWnCbng4gLi\O"DG^;,<4)]j^]V)=8qN'!hnUdFn)5J;OcqC[r>dVm*DZ=_p
%%U-Xq[$/2tI$>,JY@;a<4:1`RU7(X+Ai7)H.LYnWg+??'B1'YEq+oS6G$Km8#iUYr;a0-4;EH5KQ6aph<jcI;g[WF'Lh)8i/*j5S
%5ic.5=<.!k\s*/!;A%PN3JMfRNOqYe1<OKiQFl"$JU)ohJQJg0(lf!+J+ofSA!-ediBR5r-s.<EA75Q at p^k6l6CW"WB.](k;A`@+
%=._IC-\n8gE&)<*s(r'P;ls03cQt/OMu;ol4<(ObJ/\8!SqaG=keQm!'Y[JP7>1\Vs%qSeXh5Q9rYn&^i?.O8oT+^4'J8ujg=!qf
%D^g'C7/8hQ#pOlrf`:r.-@^N.mgIVa<Md^^X+t,s//M\F*gZO)=XJs>%Id[^^^5<k6#Z at 9N&MR^L7h9<mCG3nDrl2R(@Z(,4Mt!'
%G[?]p at 2Q)4BDd^b823E]9 at J:06 at 3E2is11C(-`K%dO][k*NVbo at Q8:VL<g9UiFbLd;U5]s(4a at 9"E+it`+S1$+Q)Z2q/%OeoUP4g
%#Y`,8-&#0!=nGmU;W\nsL08,?N0i_d="G0[$FE##*O76VAc7'QDe"'?MM7tlTU-%,N8DDSn/9Miktl[F*V,BNWu^a*%.CZ=Dc7T9
%'Z7eX#k/>3.>3b$H7.EZrC(Ib7ZGuU7e,cR&o5KjT_^`&-7r#ZZ@:FlJ.8KA'aP!]]oD.D.9JPTNtqjfDo".2=@&N0[1/]?n7f9T
%R"tb1([Z'SK03;,58_b96MLiS)l458Zi2/V8Y\c at 7&,!L>_t=J/Pn6jQ[n0>M at g[YNMJ>'J=#5g/(fP!3%#]S#sg3HVj.Pq?B3)%
%TK+YYKS"s1W%A>.Wp3R8 at 2o)h$O>G?6FahRpi3>>]dt3oD3!9,nc\.cq@%%Sq at on,Cn6/>8nLSob;V2`EA.QF5,bY,j2]%h(`#q`
%0s%&!VCe4idE3 at O-,=Yb:TR7<G1q2W/$KFpTIiRl>7KWC>)]hfD&Oj<7r)gk,;-/V"8nAABHCj&NPWb#Kc%\9f.\N<^hHJ6\GunN
%>0#t,5[oi8 at 3CNd.rYMRZ?-kZK4C$h$8Mu<XSM8[[N1G/lK4?,!CM50!:huW%g8Sf`Hd59o/n[eHIq+jCtuhZ"YUsn"_D']%Lb?I
%+6&RU"+)T#rbu`'`fUH`ZT7';!cB"I#?VAWi8+`nr]2r_<%Q;3\V,<oARKG\+cc0uh=>Z<ZjB&)rW0\;Gnpl%?FpWi-qhJ1rEP.@
%_o&0:Q3j`)O>@5\1sL&oQlpK@*Y/TC.CLo=c]Tma<abHAn7 at +n:PHH#/f=-i598ek7gO*n?bT/1!LXX^"5_NN[);/58FLX##7iD8
%:>j60fKdMr=WLjYc'WMIPnUh%.^6.#!lH-F!?),^W`E1j?3Ll_KE+[c at 3`SJ3*m^Y3TS-s?oT4i"M#hMlTcR`GYN]EZ9>;nfDps_
%b]AN:T[-G"i(-X0f^V4j!9+T25?PFgb+nCTK<pkf$h.An7Vr0 at Puk"&T[mM\-.OoEFXu;GNH=Q/S#j0[p,K6+_Ar3hj/-<P\qF?'
%$G\.,=UYLFfjq(!<=iEeeu-ZT?u\.X[Ak3*JhfM\hmC at Xd3BJs!\u\0e/J"#j)4<mn<pc\mcK_t^X^XB8scJl?2/a'%Kl#X4KpL,
%Ljf)[fGAnQ^6g/=7K9bKI>_q#0.(ZSpDQD0'kEuC!4R!:iFtPHc3E5HN^oK at p_h?8e#]/F`lSJ-dmV3rVfs5KYW=<p at u!iYk_N.Y
%r+fXC8Oh6\YmL-sGQ;^?Zj+4dZo.aaN'3Q9rhjCCNQ76.CYnr?D_-NTD[*oK/@2h-5M-$%;'-%M?:n/r$gs.C-i~>
%AI9_PrivateDataEnd
\ No newline at end of file
diff --git a/doc/tutorial/images/sphere.pdf b/doc/tutorial/images/sphere.pdf
new file mode 100755
index 0000000..ee88c7d
Binary files /dev/null and b/doc/tutorial/images/sphere.pdf differ
diff --git a/doc/tutorial/images/temperaturemap_filled.pdf b/doc/tutorial/images/temperaturemap_filled.pdf
new file mode 100644
index 0000000..ed2a859
Binary files /dev/null and b/doc/tutorial/images/temperaturemap_filled.pdf differ
diff --git a/doc/tutorial/images/temperaturemap_gaps.pdf b/doc/tutorial/images/temperaturemap_gaps.pdf
new file mode 100644
index 0000000..97ed010
Binary files /dev/null and b/doc/tutorial/images/temperaturemap_gaps.pdf differ
diff --git a/doc/tutorial/images/window_fct1.eps b/doc/tutorial/images/window_fct1.eps
new file mode 100755
index 0000000..bdcf9f6
--- /dev/null
+++ b/doc/tutorial/images/window_fct1.eps
@@ -0,0 +1,501 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: window_fct1.eps
+%%CreationDate: 07/29/2004  11:42:09
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   341  6214  4613 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-20) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3542 mt  952 3542 L
+6255 3542 mt 6201 3542 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3640 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3477 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 2469 mt  952 2469 L
+6255 2469 mt 6201 2469 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 2567 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 2404 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1397 mt  952 1397 L
+6255 1397 mt 6201 1397 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1495 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1332 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+1 3 6 15 5 16 6 15 5 16 5 15 6 16 5 15 
+5 16 6 15 5 15 5 16 6 15 5 15 5 15 6 15 
+5 16 6 15 5 15 5 15 6 15 5 15 5 15 6 15 
+5 14 5 15 6 15 5 15 5 15 6 14 5 15 6 15 
+5 14 5 15 6 14 5 15 5 15 6 14 5 14 5 15 
+6 14 5 15 5 14 6 14 5 14 6 15 5 14 5 14 
+6 14 5 14 5 14 6 14 5 14 5 14 6 14 5 14 
+5 14 6 14 5 14 6 13 5 14 5 14 6 14 5 13 
+5 14 6 14 5 13 5 14 6 13 5 14 5 13 6 13 
+5 14 5 13 6 13 5 14 6 13 5 13 5 13 6 14 
+5 13 5 13 6 13 5 13 5 13 6 13 5 13 5 13 
+6 13 5 12 6 13 5 13 5 13 6 13 5 12 5 13 
+6 13 5 12 5 13 5730 2984 100 MP stroke
+6 12 5 13 5 12 6 13 5 12 6 12 5 13 5 12 
+6 12 5 13 5 12 6 12 5 12 5 12 6 12 5 13 
+5 12 6 12 5 12 6 11 5 12 5 12 6 12 5 12 
+5 12 6 11 5 12 5 12 6 12 5 11 5 12 6 11 
+5 12 5 11 6 12 5 11 6 12 5 11 5 11 6 12 
+5 11 5 11 6 12 5 11 5 11 6 11 5 11 5 11 
+6 11 5 11 6 11 5 11 5 11 6 11 5 11 5 11 
+6 10 5 11 5 11 6 11 5 10 5 11 6 10 5 11 
+6 11 5 10 5 11 6 10 5 10 5 11 6 10 5 10 
+5 11 6 10 5 10 5 10 6 11 5 10 6 10 5 10 
+5 10 6 10 5 10 5 10 6 10 5 10 5 9 6 10 
+5 10 5 10 6 10 5 9 5 10 6 10 5 9 6 10 
+5 9 5 10 6 9 5199 1895 100 MP stroke
+5 10 5 9 6 9 5 10 5 9 6 9 5 10 5 9 
+6 9 5 9 6 9 5 10 5 9 6 9 5 9 5 9 
+6 9 5 8 5 9 6 9 5 9 5 9 6 9 5 8 
+6 9 5 9 5 8 6 9 5 8 5 9 6 8 5 9 
+5 8 6 9 5 8 5 9 6 8 5 8 6 8 5 9 
+5 8 6 8 5 8 5 8 6 8 5 8 5 8 6 8 
+5 8 5 8 6 8 5 8 5 8 6 8 5 7 6 8 
+5 8 5 7 6 8 5 8 5 7 6 8 5 7 5 8 
+6 7 5 8 5 7 6 7 5 8 6 7 5 7 5 7 
+6 8 5 7 5 7 6 7 5 7 5 7 6 7 5 7 
+5 7 6 7 5 7 6 7 5 7 5 6 6 7 5 7 
+5 7 6 6 5 7 5 6 6 7 5 7 5 6 6 7 
+5 6 6 6 5 7 4669 1111 100 MP stroke
+5 6 6 6 5 7 5 6 6 6 5 6 5 7 6 6 
+5 6 5 6 6 6 5 6 6 6 5 6 5 6 6 6 
+5 6 5 5 6 6 5 6 5 6 6 5 5 6 5 6 
+6 5 5 6 5 5 6 6 5 5 6 6 5 5 5 6 
+6 5 5 5 5 6 6 5 5 5 5 5 6 5 5 6 
+5 5 6 5 5 5 6 5 5 5 5 5 6 5 5 5 
+5 4 6 5 5 5 5 5 6 4 5 5 5 5 6 4 
+5 5 6 5 5 4 5 5 6 4 5 5 5 4 6 4 
+5 5 5 4 6 4 5 5 5 4 6 4 5 4 6 4 
+5 5 5 4 6 4 5 4 5 4 6 4 5 4 5 3 
+6 4 5 4 5 4 6 4 5 3 5 4 6 4 5 3 
+6 4 5 4 5 3 6 4 5 3 5 4 6 3 5 3 
+5 4 6 3 5 3 4139 634 100 MP stroke
+5 4 6 3 5 3 6 3 5 3 5 3 6 4 5 3 
+5 3 6 3 5 2 5 3 6 3 5 3 5 3 6 3 
+5 3 6 2 5 3 5 3 6 2 5 3 5 2 6 3 
+5 3 5 2 6 2 5 3 5 2 6 3 5 2 6 2 
+5 3 5 2 6 2 5 2 5 2 6 2 5 2 5 2 
+6 2 5 2 5 2 6 2 5 2 5 2 6 2 5 2 
+6 1 5 2 5 2 6 2 5 1 5 2 6 1 5 2 
+5 1 6 2 5 1 5 2 6 1 5 2 6 1 5 1 
+5 1 6 2 5 1 5 1 6 1 5 1 5 1 6 1 
+5 1 5 1 6 1 5 1 6 1 5 1 5 1 6 1 
+5 0 5 1 6 1 5 1 5 0 6 1 5 0 5 1 
+6 0 5 1 6 0 5 1 5 0 6 1 5 0 5 0 
+6 0 5 1 5 0 3609 462 100 MP stroke
+6 0 5 0 5 0 6 0 5 0 5 0 6 0 5 0 
+6 0 5 0 5 0 6 0 5 0 5 -1 6 0 5 0 
+5 0 6 -1 5 0 5 -1 6 0 5 -1 6 0 5 -1 
+5 0 6 -1 5 0 5 -1 6 -1 5 -1 5 0 6 -1 
+5 -1 5 -1 6 -1 5 -1 6 -1 5 -1 5 -1 6 -1 
+5 -1 5 -1 6 -1 5 -1 5 -1 6 -2 5 -1 5 -1 
+6 -1 5 -2 6 -1 5 -2 5 -1 6 -2 5 -1 5 -2 
+6 -1 5 -2 5 -1 6 -2 5 -2 5 -2 6 -1 5 -2 
+6 -2 5 -2 5 -2 6 -2 5 -2 5 -2 6 -2 5 -2 
+5 -2 6 -2 5 -2 5 -2 6 -2 5 -2 5 -3 6 -2 
+5 -2 6 -3 5 -2 5 -3 6 -2 5 -2 5 -3 6 -3 
+5 -2 5 -3 6 -2 5 -3 5 -3 6 -2 5 -3 6 -3 
+5 -3 5 -3 6 -3 3078 597 100 MP stroke
+5 -3 5 -2 6 -3 5 -3 5 -3 6 -4 5 -3 5 -3 
+6 -3 5 -3 6 -3 5 -4 5 -3 6 -3 5 -4 5 -3 
+6 -3 5 -4 5 -3 6 -4 5 -3 5 -4 6 -4 5 -3 
+6 -4 5 -4 5 -3 6 -4 5 -4 5 -4 6 -4 5 -3 
+5 -4 6 -4 5 -4 5 -4 6 -4 5 -4 5 -5 6 -4 
+5 -4 6 -4 5 -4 5 -5 6 -4 5 -4 5 -5 6 -4 
+5 -4 5 -5 6 -4 5 -5 5 -4 6 -5 5 -5 6 -4 
+5 -5 5 -5 6 -4 5 -5 5 -5 6 -5 5 -4 5 -5 
+6 -5 5 -5 5 -5 6 -5 5 -5 6 -5 5 -5 5 -6 
+6 -5 5 -5 5 -5 6 -5 5 -6 5 -5 6 -5 5 -6 
+5 -5 6 -6 5 -5 6 -6 5 -5 5 -6 6 -5 5 -6 
+5 -6 6 -5 5 -6 5 -6 6 -6 5 -5 5 -6 6 -6 
+5 -6 5 -6 6 -6 2548 1037 100 MP stroke
+5 -6 6 -6 5 -6 5 -6 6 -6 5 -7 5 -6 6 -6 
+5 -6 5 -7 6 -6 5 -6 5 -7 6 -6 5 -6 6 -7 
+5 -6 5 -7 6 -7 5 -6 5 -7 6 -6 5 -7 5 -7 
+6 -7 5 -6 5 -7 6 -7 5 -7 6 -7 5 -7 5 -7 
+6 -7 5 -7 5 -7 6 -7 5 -7 5 -7 6 -8 5 -7 
+5 -7 6 -7 5 -8 6 -7 5 -7 5 -8 6 -7 5 -8 
+5 -7 6 -8 5 -7 5 -8 6 -8 5 -7 5 -8 6 -8 
+5 -7 5 -8 6 -8 5 -8 6 -8 5 -8 5 -8 6 -8 
+5 -8 5 -8 6 -8 5 -8 5 -8 6 -8 5 -8 5 -9 
+6 -8 5 -8 6 -8 5 -9 5 -8 6 -9 5 -8 5 -9 
+6 -8 5 -9 5 -8 6 -9 5 -8 5 -9 6 -9 5 -8 
+6 -9 5 -9 5 -9 6 -9 5 -9 5 -8 6 -9 5 -9 
+5 -9 6 -9 5 -9 2018 1783 100 MP stroke
+5 -10 6 -9 5 -9 6 -9 5 -9 5 -10 6 -9 5 -9 
+5 -10 6 -9 5 -9 5 -10 6 -9 5 -10 5 -9 6 -10 
+5 -9 6 -10 5 -10 5 -9 6 -10 5 -10 5 -10 6 -10 
+5 -9 5 -10 6 -10 5 -10 5 -10 6 -10 5 -10 5 -10 
+6 -10 5 -10 6 -11 5 -10 5 -10 6 -10 5 -11 5 -10 
+6 -10 5 -11 5 -10 6 -10 5 -11 5 -10 6 -11 5 -11 
+6 -10 5 -11 5 -10 6 -11 5 -11 5 -11 6 -10 5 -11 
+5 -11 6 -11 5 -11 5 -11 6 -11 5 -11 6 -11 5 -11 
+5 -11 6 -11 5 -11 5 -11 6 -12 5 -11 5 -11 6 -12 
+5 -11 5 -11 6 -12 5 -11 6 -12 5 -11 5 -12 6 -11 
+5 -12 5 -11 6 -12 5 -12 5 -12 6 -11 5 -12 5 -12 
+6 -12 5 -12 5 -12 6 -11 5 -12 6 -12 5 -12 5 -13 
+6 -12 5 -12 5 -12 1488 2836 100 MP stroke
+6 -12 5 -12 5 -13 6 -12 5 -12 5 -13 6 -12 5 -12 
+6 -13 5 -12 5 -13 6 -12 5 -13 5 -12 6 -13 5 -13 
+5 -12 6 -13 5 -13 5 -13 6 -13 5 -12 6 -13 5 -13 
+5 -13 6 -13 5 -13 5 -13 6 -13 5 -13 5 -13 6 -14 
+5 -13 5 -13 6 -13 5 -14 6 -13 5 -13 5 -14 6 -13 
+5 -13 5 -14 6 -13 5 -14 5 -13 6 -14 5 -14 5 -13 
+6 -14 5 -14 5 -14 6 -13 5 -14 6 -14 5 -14 5 -14 
+6 -14 5 -14 5 -14 6 -14 5 -14 5 -14 6 -14 5 -14 
+5 -14 6 -15 5 -14 6 -14 5 -14 5 -15 6 -14 5 -15 
+5 -14 6 -14 5 -15 5 -15 6 -14 5 -15 5 -14 6 -15 
+5 -15 6 -14 5 -15 5 -15 6 -15 5 -15 5 -14 6 -15 
+5 -15 5 -15 6 -15 5 -15 5 -15 6 -15 5 -16 6 -15 
+5 -15 5 -15 6 -15 957 4194 100 MP stroke
+5 -16 5 -15 6 -15 5 -16 5 -15 6 -16 5 -15 5 -16 
+6 -15 5 -16 5 -15 899 4364 12 MP stroke
+6 w
+gr
+
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/window_fct1.pdf b/doc/tutorial/images/window_fct1.pdf
new file mode 100644
index 0000000..ecd329d
Binary files /dev/null and b/doc/tutorial/images/window_fct1.pdf differ
diff --git a/doc/tutorial/images/window_fct2.eps b/doc/tutorial/images/window_fct2.eps
new file mode 100755
index 0000000..94c63d8
--- /dev/null
+++ b/doc/tutorial/images/window_fct2.eps
@@ -0,0 +1,501 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: window_fct2.eps
+%%CreationDate: 07/29/2004  11:42:09
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   558   583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   558   583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   341  6214  4613 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt 
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6072 4894 mt 
+(0.5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-20) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3542 mt  952 3542 L
+6255 3542 mt 6201 3542 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3640 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3477 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 2469 mt  952 2469 L
+6255 2469 mt 6201 2469 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 2567 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 2404 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1397 mt  952 1397 L
+6255 1397 mt 6201 1397 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1495 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1332 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+5 3 6 7 5 8 5 9 6 12 5 12 5 13 6 13 
+5 15 5 14 6 15 5 14 5 15 6 15 5 15 6 15 
+5 15 5 15 6 15 5 15 5 15 6 15 5 14 5 15 
+6 15 5 15 5 15 6 14 5 15 6 15 5 14 5 15 
+6 14 5 15 5 15 6 14 5 14 5 15 6 14 5 15 
+5 14 6 14 5 14 6 15 5 14 5 14 6 14 5 14 
+5 14 6 14 5 14 5 14 6 14 5 14 5 14 6 14 
+5 14 6 13 5 14 5 14 6 14 5 13 5 14 6 14 
+5 13 5 14 6 13 5 14 5 13 6 13 5 14 5 13 
+6 13 5 14 6 13 5 13 5 13 6 14 5 13 5 13 
+6 13 5 13 5 13 6 13 5 13 5 13 6 13 5 12 
+6 13 5 13 5 13 6 13 5 12 5 13 6 13 5 12 
+5 13 6 12 5 13 5719 2959 100 MP stroke
+5 12 6 13 5 12 6 12 5 13 5 12 6 12 5 13 
+5 12 6 12 5 12 5 12 6 12 5 13 5 12 6 12 
+5 12 6 11 5 12 5 12 6 12 5 12 5 12 6 11 
+5 12 5 12 6 12 5 11 5 12 6 11 5 12 5 11 
+6 12 5 11 6 12 5 11 5 11 6 12 5 11 5 11 
+6 12 5 11 5 11 6 11 5 11 5 11 6 11 5 11 
+6 11 5 11 5 11 6 11 5 11 5 11 6 10 5 11 
+5 11 6 11 5 10 5 11 6 10 5 11 6 11 5 10 
+5 11 6 10 5 10 5 11 6 10 5 10 5 11 6 10 
+5 10 5 10 6 11 5 10 6 10 5 10 5 10 6 10 
+5 10 5 10 6 10 5 10 5 9 6 10 5 10 5 10 
+6 10 5 9 5 10 6 10 5 9 6 10 5 9 5 10 
+6 9 5 10 5 9 5189 1876 100 MP stroke
+6 9 5 10 5 9 6 9 5 10 5 9 6 9 5 9 
+6 9 5 10 5 9 6 9 5 9 5 9 6 9 5 8 
+5 9 6 9 5 9 5 9 6 9 5 8 6 9 5 9 
+5 8 6 9 5 8 5 9 6 8 5 9 5 8 6 9 
+5 8 5 9 6 8 5 8 6 8 5 9 5 8 6 8 
+5 8 5 8 6 8 5 8 5 8 6 8 5 8 5 8 
+6 8 5 8 5 8 6 8 5 7 6 8 5 8 5 7 
+6 8 5 8 5 7 6 8 5 7 5 8 6 7 5 8 
+5 7 6 7 5 8 6 7 5 7 5 7 6 8 5 7 
+5 7 6 7 5 7 5 7 6 7 5 7 5 7 6 7 
+5 7 6 7 5 7 5 6 6 7 5 7 5 7 6 6 
+5 7 5 6 6 7 5 7 5 6 6 7 5 6 6 6 
+5 7 5 6 6 6 4658 1099 100 MP stroke
+5 7 5 6 6 6 5 6 5 7 6 6 5 6 5 6 
+6 6 5 6 6 6 5 6 5 6 6 6 5 6 5 5 
+6 6 5 6 5 6 6 5 5 6 5 6 6 5 5 6 
+5 5 6 6 5 5 6 6 5 5 5 6 6 5 5 5 
+5 6 6 5 5 5 5 5 6 5 5 6 5 5 6 5 
+5 5 6 5 5 5 5 5 6 5 5 5 5 4 6 5 
+5 5 5 5 6 4 5 5 5 5 6 4 5 5 6 5 
+5 4 5 5 6 4 5 5 5 4 6 4 5 5 5 4 
+6 4 5 5 5 4 6 4 5 4 6 4 5 5 5 4 
+6 4 5 4 5 4 6 4 5 4 5 3 6 4 5 4 
+5 4 6 4 5 3 5 4 6 4 5 3 6 4 5 4 
+5 3 6 4 5 3 5 4 6 3 5 3 5 4 6 3 
+5 3 5 4 6 3 4128 627 100 MP stroke
+5 3 6 3 5 3 5 3 6 4 5 3 5 3 6 3 
+5 2 5 3 6 3 5 3 5 3 6 3 5 3 6 2 
+5 3 5 3 6 2 5 3 5 2 6 3 5 3 5 2 
+6 2 5 3 5 2 6 3 5 2 6 2 5 3 5 2 
+6 2 5 2 5 2 6 2 5 2 5 2 6 2 5 2 
+5 2 6 2 5 2 5 2 6 2 5 2 6 1 5 2 
+5 2 6 2 5 1 5 2 6 1 5 2 5 1 6 2 
+5 1 5 2 6 1 5 2 6 1 5 1 5 1 6 2 
+5 1 5 1 6 1 5 1 5 1 6 1 5 1 5 1 
+6 1 5 1 6 1 5 1 5 1 6 1 5 0 5 1 
+6 1 5 1 5 0 6 1 5 0 5 1 6 0 5 1 
+6 0 5 1 5 0 6 1 5 0 5 0 6 0 5 1 
+5 0 6 0 5 0 3598 462 100 MP stroke
+5 0 6 0 5 0 5 0 6 0 5 0 6 0 5 0 
+5 0 6 0 5 0 5 -1 6 0 5 0 5 0 6 -1 
+5 0 5 -1 6 0 5 -1 6 0 5 -1 5 0 6 -1 
+5 0 5 -1 6 -1 5 -1 5 0 6 -1 5 -1 5 -1 
+6 -1 5 -1 6 -1 5 -1 5 -1 6 -1 5 -1 5 -1 
+6 -1 5 -1 5 -1 6 -2 5 -1 5 -1 6 -1 5 -2 
+6 -1 5 -2 5 -1 6 -2 5 -1 5 -2 6 -1 5 -2 
+5 -1 6 -2 5 -2 5 -2 6 -1 5 -2 6 -2 5 -2 
+5 -2 6 -2 5 -2 5 -2 6 -2 5 -2 5 -2 6 -2 
+5 -2 5 -2 6 -2 5 -2 5 -3 6 -2 5 -2 6 -3 
+5 -2 5 -3 6 -2 5 -2 5 -3 6 -3 5 -2 5 -3 
+6 -2 5 -3 5 -3 6 -2 5 -3 6 -3 5 -3 5 -3 
+6 -3 5 -3 5 -2 3068 602 100 MP stroke
+6 -3 5 -3 5 -3 6 -4 5 -3 5 -3 6 -3 5 -3 
+6 -3 5 -4 5 -3 6 -3 5 -4 5 -3 6 -3 5 -4 
+5 -3 6 -4 5 -3 5 -4 6 -4 5 -3 6 -4 5 -4 
+5 -3 6 -4 5 -4 5 -4 6 -4 5 -3 5 -4 6 -4 
+5 -4 5 -4 6 -4 5 -4 5 -5 6 -4 5 -4 6 -4 
+5 -4 5 -5 6 -4 5 -4 5 -5 6 -4 5 -4 5 -5 
+6 -4 5 -5 5 -4 6 -5 5 -5 6 -4 5 -5 5 -5 
+6 -4 5 -5 5 -5 6 -5 5 -4 5 -5 6 -5 5 -5 
+5 -5 6 -5 5 -5 6 -5 5 -5 5 -6 6 -5 5 -5 
+5 -5 6 -5 5 -6 5 -5 6 -5 5 -6 5 -5 6 -6 
+5 -5 6 -6 5 -5 5 -6 6 -5 5 -6 5 -6 6 -5 
+5 -6 5 -6 6 -6 5 -5 5 -6 6 -6 5 -6 5 -6 
+6 -6 5 -6 6 -6 2537 1049 100 MP stroke
+5 -6 5 -6 6 -6 5 -7 5 -6 6 -6 5 -6 5 -7 
+6 -6 5 -6 5 -7 6 -6 5 -6 6 -7 5 -6 5 -7 
+6 -7 5 -6 5 -7 6 -6 5 -7 5 -7 6 -7 5 -6 
+5 -7 6 -7 5 -7 6 -7 5 -7 5 -7 6 -7 5 -7 
+5 -7 6 -7 5 -7 5 -7 6 -8 5 -7 5 -7 6 -7 
+5 -8 6 -7 5 -7 5 -8 6 -7 5 -8 5 -7 6 -8 
+5 -7 5 -8 6 -8 5 -7 5 -8 6 -8 5 -7 5 -8 
+6 -8 5 -8 6 -8 5 -8 5 -8 6 -8 5 -8 5 -8 
+6 -8 5 -8 5 -8 6 -8 5 -8 5 -9 6 -8 5 -8 
+6 -8 5 -9 5 -8 6 -9 5 -8 5 -9 6 -8 5 -9 
+5 -8 6 -9 5 -8 5 -9 6 -9 5 -8 6 -9 5 -9 
+5 -9 6 -9 5 -9 5 -8 6 -9 5 -9 5 -9 6 -9 
+5 -9 5 -10 6 -9 2007 1802 100 MP stroke
+5 -9 6 -9 5 -9 5 -10 6 -9 5 -9 5 -10 6 -9 
+5 -9 5 -10 6 -9 5 -10 5 -9 6 -10 5 -9 6 -10 
+5 -10 5 -9 6 -10 5 -10 5 -10 6 -10 5 -9 5 -10 
+6 -10 5 -10 5 -10 6 -10 5 -10 5 -10 6 -10 5 -10 
+6 -11 5 -10 5 -10 6 -10 5 -11 5 -10 6 -10 5 -11 
+5 -10 6 -10 5 -11 5 -10 6 -11 5 -11 6 -10 5 -11 
+5 -10 6 -11 5 -11 5 -11 6 -10 5 -11 5 -11 6 -11 
+5 -11 5 -11 6 -11 5 -11 6 -11 5 -11 5 -11 6 -11 
+5 -11 5 -11 6 -12 5 -11 5 -11 6 -12 5 -11 5 -11 
+6 -12 5 -11 6 -12 5 -11 5 -12 6 -11 5 -12 5 -11 
+6 -12 5 -12 5 -12 6 -11 5 -12 5 -12 6 -12 5 -12 
+5 -12 6 -11 5 -12 6 -12 5 -12 5 -13 6 -12 5 -12 
+5 -12 6 -12 5 -12 1477 2860 100 MP stroke
+5 -13 6 -12 5 -12 5 -13 6 -12 5 -12 6 -13 5 -12 
+5 -13 6 -12 5 -13 5 -12 6 -13 5 -13 5 -12 6 -13 
+5 -13 5 -13 6 -13 5 -12 6 -13 5 -13 5 -13 6 -13 
+5 -13 5 -13 6 -13 5 -13 5 -13 6 -14 5 -13 5 -13 
+6 -13 5 -14 6 -13 5 -13 5 -14 6 -13 5 -13 5 -14 
+6 -13 5 -14 5 -13 6 -14 5 -14 5 -13 6 -14 5 -14 
+5 -14 6 -13 5 -14 6 -14 5 -14 5 -14 6 -14 5 -14 
+5 -14 6 -14 5 -14 5 -14 6 -14 5 -14 5 -14 6 -15 
+5 -14 6 -14 5 -14 5 -15 6 -14 5 -15 5 -14 6 -14 
+5 -15 5 -15 6 -14 5 -15 5 -14 6 -15 5 -15 6 -14 
+5 -15 5 -15 6 -15 5 -15 5 -14 6 -15 5 -15 5 -15 
+6 -15 5 -15 5 -15 6 -15 5 -15 6 -15 5 -15 5 -14 
+6 -15 5 -14 5 -15 947 4221 100 MP stroke
+6 -13 5 -13 5 -12 6 -12 5 -9 5 -8 6 -7 5 -3 
+5 -2 899 4300 10 MP stroke
+6 w
+gr
+
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/window_fct2.pdf b/doc/tutorial/images/window_fct2.pdf
new file mode 100644
index 0000000..eb3d9fc
Binary files /dev/null and b/doc/tutorial/images/window_fct2.pdf differ
diff --git a/doc/tutorial/images/window_fct3.eps b/doc/tutorial/images/window_fct3.eps
new file mode 100755
index 0000000..d7a0692
--- /dev/null
+++ b/doc/tutorial/images/window_fct3.eps
@@ -0,0 +1,484 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: window_fct3.eps
+%%CreationDate: 07/29/2004  11:42:09
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox:    40   199   555   602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c  /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+  makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+  exch dup 3 1 roll findfont dup length dict begin
+  { 1 index /FID ne {def}{pop pop} ifelse } forall
+  /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+  exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+  {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+  dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup  0 exch rlineto exch 0 rlineto
+  neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+   PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop	translate 0 0 moveto scale
+  0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+  0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+  0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+  /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+  vradius add translate hradius vradius scale 0 0 1 180 270 arc 
+  tMatrix setmatrix lrx hradius sub uly vradius add translate
+  hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+  lrx hradius sub lry vradius sub translate hradius vradius scale
+  0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+  translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+  closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+  closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+  newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+  rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+  sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+  closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+  ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+  2 0 asub 3 1 asub 4 0 asub 5 1 asub
+  dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+  dmat dtri tri_to_matrix tmat1 invertmatrix 
+  smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+  currentfile exch readhexstring pop
+  /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+  cols rows 8 compute_transform 
+  {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox:    40   199   555   602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+  273   113  6178  4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+   0    0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt  899  389 L
+ 899 4615 mt  899 4561 L
+ 899  389 mt  899  442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 599 4894 mt 
+(-32) s
+1903 4615 mt 1903 4561 L
+1903  389 mt 1903  442 L
+1603 4894 mt 
+(-20) s
+2572 4615 mt 2572 4561 L
+2572  389 mt 2572  442 L
+2272 4894 mt 
+(-12) s
+3577 4615 mt 3577 4561 L
+3577  389 mt 3577  442 L
+3504 4894 mt 
+(0) s
+4497 4615 mt 4497 4561 L
+4497  389 mt 4497  442 L
+4351 4894 mt 
+(11) s
+5167 4615 mt 5167 4561 L
+5167  389 mt 5167  442 L
+5021 4894 mt 
+(19) s
+6255 4615 mt 6255 4561 L
+6255  389 mt 6255  442 L
+6109 4894 mt 
+(32) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt 
+(-20) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 3558 mt  952 3558 L
+6255 3558 mt 6201 3558 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3656 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3493 mt 
+(-15) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 2502 mt  952 2502 L
+6255 2502 mt 6201 2502 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 2600 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 2437 mt 
+(-10) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 1445 mt  952 1445 L
+6255 1445 mt 6201 1445 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1543 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1380 mt 
+(-5) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899  389 mt  952  389 L
+6255  389 mt 6201  389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273  487 mt 
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566  324 mt 
+(0) s
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt  899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899  389 mt 6255  389 L
+ 899 4615 mt  899  389 L
+6255 4615 mt 6255  389 L
+gs 899 389 5357 4227 MR c np
+24 w
+75 255 83 276 84 265 84 254 83 243 84 233 84 221 83 211 
+84 200 84 189 83 179 84 167 84 157 84 146 83 135 84 124 
+84 114 83 103 84 92 84 81 83 70 84 59 84 49 83 38 
+84 27 84 16 83 5 84 -5 84 -16 84 -27 83 -38 84 -49 
+84 -59 83 -70 84 -81 84 -92 83 -103 84 -114 84 -124 83 -135 
+84 -146 84 -157 83 -167 84 -179 84 -189 84 -200 83 -211 84 -221 
+84 -233 83 -243 84 -254 84 -265 83 -276 75 -255 1326 4616 55 MP stroke
+gr
+
+24 w
+  60   60 1401 4361 FO
+  60   60 1484 4085 FO
+  60   60 1568 3820 FO
+  60   60 1652 3566 FO
+  60   60 1735 3323 FO
+  60   60 1819 3090 FO
+  60   60 1903 2869 FO
+  60   60 1986 2658 FO
+  60   60 2070 2458 FO
+  60   60 2154 2269 FO
+  60   60 2238 2090 FO
+  60   60 2321 1923 FO
+  60   60 2405 1766 FO
+  60   60 2489 1620 FO
+  60   60 2572 1485 FO
+  60   60 2656 1361 FO
+  60   60 2740 1247 FO
+  60   60 2823 1144 FO
+  60   60 2907 1052 FO
+  60   60 2991  971 FO
+  60   60 3074  901 FO
+  60   60 3158  842 FO
+  60   60 3242  793 FO
+  60   60 3325  755 FO
+  60   60 3409  728 FO
+  60   60 3493  712 FO
+  60   60 3577  707 FO
+  60   60 3660  712 FO
+  60   60 3744  728 FO
+  60   60 3828  755 FO
+  60   60 3911  793 FO
+  60   60 3995  842 FO
+  60   60 4079  901 FO
+  60   60 4162  971 FO
+  60   60 4246 1052 FO
+  60   60 4330 1144 FO
+  60   60 4413 1247 FO
+  60   60 4497 1361 FO
+  60   60 4581 1485 FO
+  60   60 4664 1620 FO
+  60   60 4748 1766 FO
+  60   60 4832 1923 FO
+  60   60 4916 2090 FO
+  60   60 4999 2269 FO
+  60   60 5083 2458 FO
+  60   60 5167 2658 FO
+  60   60 5250 2869 FO
+  60   60 5334 3090 FO
+  60   60 5418 3323 FO
+  60   60 5501 3566 FO
+  60   60 5585 3820 FO
+  60   60 5669 4085 FO
+  60   60 5752 4361 FO
+gs 899 389 5357 4227 MR c np
+0 -4226 2572 4615 2 MP stroke
+0 -4226 4497 4615 2 MP stroke
+0 -4226 5167 4615 2 MP stroke
+0 -4226 1903 4615 2 MP stroke
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/window_fct3.pdf b/doc/tutorial/images/window_fct3.pdf
new file mode 100644
index 0000000..e8a6582
Binary files /dev/null and b/doc/tutorial/images/window_fct3.pdf differ
diff --git a/doc/tutorial/paper.tex b/doc/tutorial/paper.tex
new file mode 100755
index 0000000..2cc8e47
--- /dev/null
+++ b/doc/tutorial/paper.tex
@@ -0,0 +1,2229 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\nfftversion}{3.0}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+  \hspace*{0ex} \hfill
+  \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+  1.4ex\hrule  width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%==============================================================================
+% Title Page
+%==============================================================================
+\begin{document}
+
+\title{NFFT \nfftversion\ - Tutorial}
+\author{Jens Keiner\thanks{keiner at math.uni-luebeck.de,University of
+    L\"ubeck, Institute of  Mathematics, 23560 L\"ubeck} \and
+  Stefan Kunis\thanks{kunis at mathematik.tu-chemnitz.de, Chemnitz University of
+    Technology, Department of Mathematics, 09107 Chemnitz, Germany} \and
+  Daniel Potts\thanks{potts at mathematik.tu-chemnitz.de, Chemnitz University of
+    Technology, Department of Mathematics, 09107 Chemnitz, Germany}}
+\date{}
+\maketitle
+
+\begin{center}
+  \vspace{-8ex}
+  {\large {\tt http://www.tu-chemnitz.de/$\sim$potts/nfft}}
+  \vspace{8ex}
+\end{center}
+
+%\begin{abstract}
+%\noindent {\it Key words and phrases}:  \\
+%\noindent {\it Last revision}: \today \\
+%\noindent {\it 2000 AMS Mathematics Subject Classification}: 65T50, 65T40
+%\end{abstract}
+
+
+\begin{center}
+  \begin{tabular}{cc}
+    \includegraphics[width=7.5cm]{images/front_pic1} &
+    \includegraphics[width=7.5cm]{images/front_pic2}
+  \end{tabular}
+\end{center}
+
+\clearpage
+\tableofcontents
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Introduction}\label{sect:1}
+\setcounter{equation}{0}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This tutorial surveys the fast Fourier transform at nonequispaced nodes (NFFT),
+its generalisations, its inversion, and the related C library NFFT \nfftversion.
+The goal of this manuscript is twofold -- to shed some light on the
+mathematical background, as well as to provide an overview over the C library
+to allow the user to use it effectively. Following this, this document splits
+into two parts:
+
+In Sections \ref{sect:nfft}, \ref{sect:gen} and \ref{sect:inv}, we
+introduce the NFFT which, as a starting point, leads to several concepts for
+further generalisation and inversion. We focus on a mathematical
+description of the related algorithms. However, we complement the necessarily
+incomplete quick glance at the ideas by references to related mathematical
+literature.
+In Section \ref{sect:nfft}, we introduce the problem of computing the discrete
+Fourier transform at nonequispaced nodes (NDFT), along with the notation
+used and related works in the literature. The algorithms (NFFT) are developed
+in pseudo code.
+Furthermore, we turn for recent generalisations, including in particular NFFTs
+on the sphere and iterative schemes for inversion of the nonequispaced FFTs,
+in Section \ref{sect:gen} and \ref{sect:inv}, respectively.
+
+Having laid the theoretical foundations, Section \ref{sect:lib} provides an
+overview over the NFFT \nfftversion\ C library and the general principles for using the
+available algorithms in your own code. Rather than describing the library
+interface in every detail, we restrict to simple recipes in order to
+familiarise with the very general concepts sufficient for most everyday tasks.
+For the experienced user, we provide full interface documentation
+(see \verb+doc/html/index.html+ in the package directory) which gives
+detailed information on more advanced options and parameter settings for
+each routine. Figure \ref{nfft:fig:svn} gives an overview over the directory
+structure of the NFFT \nfftversion\ package.
+Finally, Section \ref{sect:ex} gives some simple examples for using the
+library and some more advanced applications are given in Section
+\ref{sec:appl}
+along with numerical results.
+
+\begin{figure}[p]
+  \centering
+  \input{tree}
+  \caption{Directory structure of the NFFT \nfftversion\ package
+    \label{nfft:fig:svn}}
+\end{figure}
+
+%The computational complexity of the proposed algorithms is $\cO(|I_{\mathbf{N}}|
+%\log |I_{\mathbf{N}}| + M)$ for $|I_{\mathbf{N}}|$ equispaced frequencies and $M$
+%nonequispaced samples.
+%Besides the core module for the nonequispaced FFT, the following tree
+%structure shows various generalisations, a module for inverse transforms, some
+%examples, and recent applications.
+
+%The remainder of this tutorial is organised as follows:
+%The implementation and usage of the library is described in Section
+%\ref{sect:library}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Notation, the NDFT, and the NFFT}\label{sect:nfft}
+\setcounter{equation}{0}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This section summarises the mathematical theory and ideas behind the NFFT.
+Let the torus
+\begin{equation*}
+  \T^d
+  := \left\{ \mathbf{x}=\left(x_t\right)_{t=0,\hdots,d-1} \in \R^d: - \frac{1}{2}
+  \le x_t < \frac{1}{2},\; t=0,\hdots,d-1 \right\}
+\end{equation*}
+of dimension $d\in\N$ be given.
+It will serve as domain from which the nonequispaced nodes $\mathbf{x}$ are taken.
+Thus, the sampling set is given by ${\cal X}:=\{\mathbf{x}_j \in
+\T^d:\,j=0,\hdots,M-1\}$.
+
+Possible frequencies $\mathbf{k}\in\Z^d$ are collected in the multi-index set
+\begin{equation*}
+  I_{\mathbf{N}} := \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: -
+    \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\},
+\end{equation*}
+where $\mathbf{N}=\left(N_t\right)_{t=0,\hdots,d-1}$ is the {\bf EVEN}
+multibandlimit, i.e., $N_t\in 2\N$.
+To keep notation simple, the multi-index $\mathbf{k}$ addresses elements of
+vectors and matrices as well, i.e., the plain index $\tilde
+k:=\sum_{t=0}^{d-1} (k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1} N_{t'}$
+is not used here.
+The inner product between the frequency index $\mathbf{k}$ and the time/spatial
+node $\mathbf{x}$ is defined in the usual way by $\mathbf{k} \mathbf{x}:=k_0 x_0 + k_1 x_1
++\hdots+ k_{d-1} x_{d-1}$.
+Furthermore, two vectors may be combined by the component-wise product $\mathbf{\sigma}
+\odot \mathbf{N}:=\left(\sigma_0 N_0, \sigma_1 N_1, \hdots, \sigma_{d-1} N_{d-1},
+\right)^{\top}$ with its inverse $\mathbf{N}^{-1}:=\left(\frac{1}{N_0},
+  \frac{1}{N_1}, \hdots,  \frac{1}{N_{d-1}} \right)^{\top}$.
+
+The space of all $d$-variate, one-periodic functions $f: \T^d \rightarrow \C$
+is restricted to the space of $d$-variate trigonometric polynomials
+\begin{equation*}
+  T_{\mathbf{N}}:={\rm span}\left(\eim{\mathbf{k}\mathbf{\cdot}}:\,\mathbf{k} \in I_{\mathbf{N}}\right)
+\end{equation*}
+with degree $N_t\; (t=0,\hdots,d-1)$ in the $t$-th dimension.
+The dimension $\dim T_{N}$ of the space of $d$-variate trigonometric
+polynomials $T_{N}$ is given by $\dim T_{N} = |I_{\mathbf{N}}| =
+\prod\limits_{t=0}^{d-1} N_t$.
+
+%------------------------------------------------------------------------------
+\subsection{NDFT - nonequispaced discrete Fourier transform}
+%------------------------------------------------------------------------------
+The first problem to be addressed can be regarded as a matrix vector
+multiplication. For a finite number of given Fourier coefficients
+$\hat f_{\mathbf{k}} \in \C$, $\mathbf{k}\in I_{\mathbf{N}}$, we consider the evaluation of the
+trigonometric polynomial
+\begin{equation} \label{trigPoly}
+  f\left(\mathbf{x}\right) := \sum_{\mathbf{k}\in I_{\mathbf{N}}} \hat{f}_{\mathbf{k}}
+  \eim{\mathbf{k}\mathbf{x}}
+\end{equation}
+at given nonequispaced nodes $\mathbf{x}_j \in \T^d$.
+Thus, our concern is the evaluation of
+\begin{equation}\label{eq:nfft}
+  f_j = f\left(\mathbf{x}_j\right) := \sum_{\mathbf{k}\in I_{\mathbf{N}}} \hat{f}_{\mathbf{k}}
+  \eim{\mathbf{k}\mathbf{x}_j},
+\end{equation}
+$j=0,\hdots,M-1$.
+In matrix vector notation this reads
+\begin{equation} \label{ndft}
+  \mathbf{f}=\mathbf{A} \mathbf{\hat{f}}
+\end{equation}
+where
+\begin{equation*}
+  \mathbf{f}:=\left(f_j\right)_{j=0,\hdots,M-1},\quad
+  \mathbf{A}:=\left(\eim{\mathbf{k}\mathbf{x}_j}\right)_{j=0,\hdots,M-1;\;\mathbf{k}\in I_{\mathbf{N}}},
+  \quad
+  \mathbf{\hat{f}}:=\left(\hat{f}_{\mathbf{k}}\right)_{\mathbf{k}\in I_{\mathbf{N}}}.
+\end{equation*}
+The straightforward algorithm for computing this matrix vector product,
+which is called NDFT, takes $\cO(M |I_{\mathbf{N}}|)$ arithmetical operations.
+
+A closely related matrix vector product is the adjoint NDFT
+\begin{equation*}
+  \mathbf{\hat{h}}=\mathbf{A}^{\adj} \mathbf{f}, \qquad \hat h_{\mathbf{k}}=\sum_{j=0}^{M-1}
+  \hat{f}_{ j} \eip{\mathbf{k}\mathbf{x}_j},
+\end{equation*}
+where $\mathbf{A}^{\adj}=\overline {\mathbf{A}}^{\top}$ denotes the conjugate transpose
+of the nonequispaced Fourier matrix $\mathbf{A}$.
+
+\subsubsection*{Equispaced nodes}
+For $d\in\N,\;N_t=N\in 2\N$, $t=0,\hdots,d-1$ and $M=N^d$ equispaced nodes
+$\mathbf{x}_{\mathbf{j}}={1 \over N}\mathbf{j}$, $\mathbf{j} \in I_{\mathbf{N}}$ the computation of
+\eqref{ndft} is known as multivariate discrete Fourier transform (DFT).
+In this special case, the input data $\hat{f}_{\mathbf{k}}$ are called discrete
+Fourier coefficients and the samples $f_{\mathbf{j}}$ can be computed by the well
+known fast Fourier transform (FFT) with only $\cO(|I_{\mathbf{N}}| \log |
+  I_{\mathbf{N}}|)$ arithmetic operations.
+Furthermore, one has the inversion formula
+\begin{equation*}
+  \mathbf{A} \mathbf{A}^{\adj}=\mathbf{A}^{\adj} \mathbf{A}= |I_{\mathbf{N}}| \mathbf{I},
+\end{equation*}
+which does {\bf NOT} hold true for the nonequispaced case in general.
+
+%------------------------------------------------------------------------------
+\subsection{NFFT - nonequispaced fast Fourier transform}
+\label{sec.nfft}
+%------------------------------------------------------------------------------
+For the sake of simplicity, we explain the ideas behind the NFFT for the
+one-dimensional case $d=1$ and the algorithm NFFT.
+The generalisation of the FFT is an approximative algorithm and has
+computational complexity ${\cal O}\left(N \log N  + \log
+  \left(1/\varepsilon\right) M\right)$, where $\varepsilon$ denotes the
+desired accuracy.
+The main idea is to use standard FFTs and a window function $\varphi$ which is
+well localised in the time/spatial domain $\mathbb{R}$ and in the frequency
+domain $\mathbb{R}$.
+Several window functions were proposed in \cite{duro93,bey95,st97,four,fesu02}.
+
+The considered problem is the fast evaluation of
+\begin{equation} \label{trigPoly1d}
+  f\left(x\right) = \sum_{k\in I_N} \hat{f}_k \eim{k x}
+\end{equation}
+at arbitrary nodes $x_j \in \T,\;j=0,\hdots,M-1$.
+
+\subsubsection*{The ansatz}
+One wants to approximate the trigonometric polynomial $f$ in
+(\ref{trigPoly1d}) by a linear combination of shifted 1-periodic window
+functions $\tilde \varphi$ as
+\begin{equation}\label{s1}
+  s_1\left(x\right) := \sum_{l \in I_n} g_{l} \; \tilde \varphi\left(x -
+  \frac{l}{n}\right) \, .
+\end{equation}
+With the help of an oversampling factor $\sigma >1$, the FFT length is given by
+$n:=\sigma N$.
+
+\subsubsection*{The window function}
+Starting with a reasonable window function $\varphi:\R\rightarrow\R$, one
+assumes that its 1-periodic version $\tilde\varphi$, i.e.
+\begin{equation*}
+  \tilde \varphi\left(x\right):=\sum_{r \in \Z} \varphi\left(x+r\right)
+\end{equation*}
+has an uniformly convergent Fourier series and is well localised in the
+time/spatial domain $\T$ and in the frequency domain $\mathbb{Z}$.
+The periodic window function $\tilde \varphi$ may be represented by its
+Fourier series
+\begin{equation*}
+  \tilde \varphi\left(x\right)=
+  \sum_{k\in \Z} c_k\left(\tilde\varphi\right) \eim{k x}
+\end{equation*}
+with the Fourier coefficients
+\begin{equation*}
+  c_k\left( \tilde \varphi \right)
+  :=\int\limits_{\T} \tilde \varphi \left(x\right) \eip{k x} \, {\rm d} x
+  = \int\limits_{\mathbb{R}} \varphi \left(x\right) \eip{k x} \, {\rm d} x
+  = \hat \varphi \left(k\right),\quad k\in\Z.
+\end{equation*}
+\begin{figure}[ht!]
+   \begin{center}
+    \begin{tabular}{ccc}
+     \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct1} &
+     \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct2} &
+     \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct3}
+    \end{tabular}
+   \end{center}
+   \caption{From left to right: Gaussian window function $\varphi$, its
+     1-periodic version $\tilde \varphi$, and the integral Fourier-transform
+     $\hat \varphi$ (with pass, transition, and stop band) for
+     $N=24,\,\sigma=\frac{4}{3},\,n=32$.}
+   \label{fig:window_fun}
+ \end{figure}
+
+\subsubsection*{The first approximation - cut-off in frequency domain}
+Switching from the definition (\ref{s1}) to the frequency domain, one obtains
+\begin{equation*}
+  s_1\left(x\right)
+  =\sum_{k \in I_n} \hat g_k \, c_k\left(\tilde \varphi\right) \, \eim{k x}
+  +\sum_{r \in \Z \backslash \left\{0\right\}} \sum_{k \in I_n} \hat g_k \,
+  c_{k + n r} \left(\tilde \varphi\right) \, \eim{(k + n r)x }
+\end{equation*}
+with the discrete Fourier coefficients
+\begin{equation} \label{coeff}
+  \hat g_k := \sum_{l \in I_n} g_l \, \eip{\frac{k l}{n}}.
+\end{equation}
+Comparing (\ref{trigPoly1d}) to (\ref{s1}) and assuming
+$c_k\left(\tilde\varphi\right)$ small for $|k|\ge n-\frac{N}{2}$ suggests to
+set
+\begin{equation} \label{coeff2}
+  \hat g_k := \left\{
+    \begin{array}{ll}
+      \frac{\hat f_k}{c_k \left(\tilde \varphi\right)} & \text{for } k \in I_N
+      , \\[1ex]
+      0 & \text{for } k \in I_n \backslash I_N  . \\
+    \end{array}
+  \right.
+\end{equation}
+Then the values $g_l$ can be obtained from (\ref{coeff}) by
+\begin{equation*}
+  g_l = \frac{1}{n}\sum\limits_{k \in I_N} \hat g_k \, \eim{\frac{k l}{n}}
+  \qquad (l \in I_n),
+\end{equation*}
+a FFT of size $n$.
+
+This approximation causes an aliasing error.
+
+\subsubsection*{The second approximation - cut-off in time/spatial domain}
+If $\varphi$ is well localised in time/space domain $\mathbb{R}$ it can be
+approximated by a function
+\begin{equation*}
+  \psi\left(x\right)=\varphi\left(x\right) \chi_{[-{m \over n},{m \over
+      n}]}\left(x\right)
+\end{equation*}
+with ${\rm supp} \, \psi \, \left[-{m \over n},{m \over n}\right], \;m \ll
+n,\; m\in \N$.
+Again, one defines its one periodic version $\tilde \psi$ with compact support
+in $\T$ as
+\begin{equation*}
+  \tilde \psi\left(x\right)=\sum_{r \in \Z} \psi\left(x+r\right).
+\end{equation*}
+With the help of the index set
+\begin{equation*}
+  I_{n,m} \left(x_j\right) := \left\{ l \in I_n : n x_j - m \le l \le n x_j +
+    m \right\}
+\end{equation*}
+an approximation to $s_1$ is defined by
+\begin{equation} \label{approx}
+  s\left(x_j\right) := \sum_{l \in I_{n,m}\left(x_j\right) } g_l \,
+  \tilde\psi\left(x_j - {l \over n}\right) \, .
+\end{equation}
+Note, that for fixed $x_j\in \T$, the above sum contains at most
+$(2m+1)$ nonzero summands.
+
+This approximation causes a truncation error.
+
+\subsubsection*{The case $d>1$}
+Starting with the original problem of evaluating the multivariate
+trigonometric polynomial in (\ref{trigPoly}) one has to do a few
+generalisations.
+The window function is given by
+\begin{equation*}
+  \varphi\left(\mathbf{x}\right):=\varphi_0\left(x_0\right)
+  \varphi_1\left(x_1\right) \hdots \varphi_{d-1}\left(x_{d-1}\right)
+\end{equation*}
+where $\varphi_t$ is an univariate window function.
+Thus, a simple consequence is
+\begin{equation*}
+  c_{\mathbf{k}}\left(\tilde \varphi\right)
+  = c_{k_0}\left(\tilde \varphi_0\right) c_{k_1}\left(\tilde \varphi_1\right)
+  \hdots c_{k_{d-1}}\left(\tilde \varphi_{d-1}\right).
+\end{equation*}
+The ansatz is generalised to
+\begin{equation*}
+  s_1\left(\mathbf{x}\right) := \sum_{\mathbf{l} \in I_{\mathbf{n}}} g_{\mathbf{l}} \; \tilde
+  \varphi\left(\mathbf{x} - \mathbf{n}^{-1}\odot\mathbf{l}\right),
+\end{equation*}
+where the FFT size is given by $\mathbf{n}:=\mathbf{\sigma} \odot \mathbf{N}$ and the
+oversampling factors by
+$\mathbf{\sigma}=\left(\sigma_0,\hdots,\sigma_{d-1}\right)^{\top}$.
+Along the lines of (\ref{coeff2}) one defines
+\begin{equation*}
+  \hat g_{\mathbf{k}} := \left\{
+    \begin{array}{ll}
+      \frac{\hat f_{\mathbf{k}}}{c_{\mathbf{k}} \left(\tilde \varphi\right)} & \text{for
+      } \mathbf{k} \in I_{\mathbf{N}} , \\[1ex]
+      0 & \text{for } \mathbf{k} \in I_{\mathbf{n}} \backslash I_{\mathbf{N}}  . \\
+    \end{array}
+  \right.
+\end{equation*}
+The values $g_{\mathbf{l}}$ can be obtained by a (multivariate) FFT of size $n_0
+\times n_1 \times \hdots \times n_{d-1}$ as
+\begin{equation*}
+  g_{\mathbf{l}} = \frac{1}{\left|I_{\mathbf{n}}\right|}\sum\limits_{\mathbf{k} \in
+  I_{\mathbf{N}}} \hat g_{\mathbf{k}} \, \eim{\mathbf{k} \left(\mathbf{n}^{-1}\odot \mathbf{l}\right)},
+  \quad \mathbf{l} \in I_{\mathbf{n}}.
+\end{equation*}
+Using the compactly supported function $\psi\left(\mathbf{x}\right)=\varphi\left(\mathbf{x}\right)\chi_{[-{m \over n},{m \over
+    n}]^d}\left(\mathbf{x}\right)$,
+one obtains
+\begin{equation*}
+  s\left(\mathbf{x}_j\right) := \sum_{\mathbf{l} \in I_{\mathbf{n},m}\left(\mathbf{x}_j\right) }
+  g_{\mathbf{l}} \, \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l}\right) \, ,
+\end{equation*}
+where $\tilde \psi$ again denotes the one periodic version of $\psi$ and the
+multi-index set is given by
+\begin{equation*}
+  I_{\mathbf{n},m} \left(\mathbf{x}_j\right) := \left\{ \mathbf{l} \in I_{\mathbf{n}} : \mathbf{n}
+  \odot \mathbf{x}_j - m \mathbf{1} \le \mathbf{l} \le \mathbf{n} \odot \mathbf{x}_j + m
+  \mathbf{1}\right\}\,.
+\end{equation*}
+
+\subsubsection*{The algorithm}
+In summary, the following Algorithm~\ref{algo:nfft} is obtained for the fast
+computation of \eqref{ndft} with ${\cal O} \left(\left|I_{\mathbf{n}}\right| \log
+  \left|I_{\mathbf{n}}\right| + m M\right)$ arithmetic operations.
+\begin{algorithm}[ht]
+  \caption{\tt NFFT\label{algo:nfft}}
+  Input: $d,M \in \N$, $\mathbf{N}\in 2\N^d$\\
+  {\invisible{Input:}} ${\mathbf{x}}_j\in [-\frac{1}{2},\frac{1}{2}]^d,\;
+  j=0,\hdots,M-1$, and $\hat f_{\mathbf{k}}\in \C,\; \mathbf{k} \in I_{\mathbf{N}}$,\\[1ex]
+                                %{\invisible{Input:}} ($\mathbf{\sigma} \in \mathbb{R}^d ,\;\sigma_t > 1,\;t=0,\hdots,d-1$, $m \in \N$, flags)\\[1ex]
+                                %Precomputation: $\mathbf{n} := \sigma \odot \mathbf{N}$,\\
+                                %{\invisible{Precomputation:}} $c_{\mathbf{k}}\left(\tilde \varphi\right), \; \mathbf{k} \in I_{\mathbf{N}}$
+                                %if the flag (see Section \ref{sect:parameters}) {\tt PRE\_PHI\_HUT} is set,\\
+                                %{\invisible{Precomputation:}} $\tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right),
+                                %\, j=0,\hdots,M-1 , \, \mathbf{l} \in I_{\mathbf{n},\mathbf{m}} \left({\mathbf{x}}_j\right)$ if {\tt PRE\_PSI} is set.
+  \begin{algorithmic}[1]
+    \topsep=1.5ex
+    \itemsep=1.5ex
+
+    \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+    \begin{equation*}
+      \hat g_{\mathbf{k}} :=\frac{\hat f_{\mathbf{k}}}{ \left|I_{\mathbf{n}}\right| c_{\mathbf{k}}
+        \left(\tilde \varphi\right)}.
+    \end{equation*}
+
+    \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute by $d$-variate {\rm FFT}
+    \begin{equation*}
+      g_{\mathbf{l}} := \sum\limits_{\mathbf{k} \in I_{\mathbf{N}} } \hat g_{\mathbf{k}} \,
+        \eim{\mathbf{k} \left(\mathbf{n}^{-1}\odot \mathbf{l}\right)}.
+    \end{equation*}
+
+    \STATE For $j=0,\hdots,M-1$ compute
+    \begin{equation*}
+      f_j := \sum\limits_{\mathbf{l} \in I_{\mathbf{n},m} \left({\mathbf{x}}_j\right)
+      } g_{\mathbf{l}} \, \tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right).
+    \end{equation*}
+  \end{algorithmic}
+  Output: approximate values $f_j,\;j=0,\hdots,M-1$.\\
+  Complexity: ${\cal O} (|\mathbf{N}| \log |\mathbf{N}|+M)$.
+\end{algorithm}
+
+Algorithm~\ref{algo:nfft} reads in matrix vector notation as
+\begin{equation*}
+  \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{B} \mathbf{B} \mathbf{B} \mathbf{\hat{f}},
+\end{equation*}
+where $\mathbf{B}$ denotes the real $M \times \left|I_{\mathbf{n}}\right|$ sparse matrix
+\begin{equation*} \label{spB}
+  \mathbf{B} := \left( \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l}\right)
+  \right)_{j=0,\hdots,M-1;\, \mathbf{l}\in I_{\mathbf{n}}},
+\end{equation*}
+where $\mathbf{B}$ is the Fourier matrix of size $\left|I_{\mathbf{n}}\right| \times
+\left|I_{\mathbf{n}}\right|$, and where $\mathbf{B}$ is the real $\left|I_{\mathbf{n}}\right|
+\times |I_{\mathbf{N}}|$ 'diagonal' matrix
+\begin{equation*}
+  \mathbf{B} := \bigotimes_{t=0}^{d-1} \left(\mathbf{O}_t \, | \, \mbox{diag}\left(1/\,
+      c_{k_t}\left(\tilde \varphi_t\right)\right)_{k_t\in I_{N_t}} \, | \,
+      \mathbf{O}_t \right)^{\rm {T}}
+\end{equation*}
+with zero matrices $\mathbf{O}_t$ of size $N_t \times \frac{n_t-N_t}{2}$.
+
+The corresponding computation of the adjoint matrix vector product reads as
+\begin{equation*}
+  \mathbf{A}^{\adj} \mathbf{\hat{f}} \approx \mathbf{B}^{\top}  \mathbf{B}^{\adj} \mathbf{B}^{\top}
+  \mathbf{\hat{f}} \, .
+\end{equation*}
+With the help of the transposed index set
+\begin{equation*}
+  I_{\mathbf{n},m}^{\top}\left(\mathbf{l}\right) := \left\{j=0,\hdots,M-1 : \mathbf{l}-m
+  \mathbf{1} \le \mathbf{n} \odot \mathbf{x}_j \le \mathbf{l}+m \mathbf{1}\right\},
+\end{equation*}
+one obtains Algorithm~\ref{algo:nfftH} for the adjoint NFFT.
+\begin{algorithm}[htbp]
+  \caption{\tt NFFT$^{\adj}$\label{algo:nfftH}}
+  Input: $d,M \in \N$, $\mathbf{N}\in 2\N^d$\\
+  {\invisible{Input:}} ${\mathbf{x}}_j\in [-\frac{1}{2},\frac{1}{2}]^d,\; j=0,\hdots,M-1$, and $f_j\in \C,\; j=0,\hdots,M-1$,\\[1ex]
+                                %Input: $\mathbf{N}\in \N^d$, $\mathbf{\sigma} \in \mathbb{R}^d ,\;\sigma_t > 1,\;t=0,\hdots,d-1$, $M \in \N$, $\mathbf{m} \in \N^d$\\
+                                %{\invisible{Input:}} ${\mathbf{x}}_j\in {\T}^d,\; j=0,\hdots,M-1$, and $f_j \in \C,\; j=0,\hdots,M-1$\\[1ex]
+                                %Precomputation: $\mathbf{n} := \sigma \odot \mathbf{N}$,\\
+                                %{\invisible{Precomputation:}} $c_{\mathbf{k}}\left(\tilde \varphi\right), \; \mathbf{k} \in I_{\mathbf{N}}$
+                                %if the flag (see Section \ref{sect:parameters}) {\tt PRE\_PHI\_HUT} is set,\\
+                                %{\invisible{Precomputation:}} $\tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right),
+                                %\, j=0,\hdots,M-1 , \, \mathbf{l} \in I_{\mathbf{n},\mathbf{m}} \left({\mathbf{x}}_j\right)$ if {\tt PRE\_PSI} is set.
+  \begin{algorithmic}[1]
+    \topsep=1.5ex
+    \itemsep=1.5ex
+
+    \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute
+    \begin{equation*}
+      g_{\mathbf{l}} := \sum\limits_{j \in I_{\mathbf{n},m}^{\top} (\mathbf{l}) } f_j \,
+      \tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right)\, .
+    \end{equation*}
+
+    \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute by $d$-variate (backward) {\rm FFT}
+    \begin{equation*}
+      \hat g_{\mathbf{k}} := \sum\limits_{\mathbf{l} \in I_{\mathbf{n}}}
+      g_{\mathbf{l}} \, {\rm e}^{+2 \pi {\rm i} \mathbf{k} \left(\mathbf{n}^{-1} \odot
+      \mathbf{l}\right)}.
+    \end{equation*}
+
+    \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+    \begin{equation*}
+      \hat h_{\mathbf{k}} := \frac{\hat g_{\mathbf{k}}}{\left|I_{\mathbf{n}}\right|
+      c_{\mathbf{k}}(\tilde \varphi)}.
+    \end{equation*}
+  \end{algorithmic}
+  Output: approximate values $\hat h_{\mathbf{k}},\;\mathbf{k} \in I_{\mathbf{N}}$.\\
+ Complexity: ${\cal O} (|\mathbf{N}| \log |\mathbf{N}|+M)$.
+\end{algorithm}
+Due to the characterisation of the nonzero elements of the matrix $\mathbf{B}$,
+i.e.,
+\begin{equation*}
+  \bigcup\limits_{j=0}^{M-1} j \times I_{\mathbf{n},m} \left({\mathbf{x}}_j\right)=
+  \bigcup\limits_{\mathbf{l} \in I_{\mathbf{n}}} I_{\mathbf{n},m}^{\top}\left(\mathbf{l}\right)
+  \times \mathbf{l}.
+\end{equation*}
+the multiplication with the sparse matrix $\mathbf{B}^{\top}$ is implemented in a
+'transposed' way in the library, summation as outer loop and only using the
+multi-index sets $I_{\mathbf{n},m} \left({\mathbf{x}}_j\right)$.
+
+%------------------------------------------------------------------------------
+\subsection{Available window functions and evaluation techniques}
+\label{sect:windows}
+%------------------------------------------------------------------------------
+Again, only the case $d=1$ is presented.
+To keep the aliasing error and the truncation error small, several functions
+$\varphi$ with good localisation in time and frequency domain were proposed,
+e.g. the (dilated) {\it Gaussian} \cite{duro93, st97, DuSc}
+\begin{eqnarray} \label{gaussian}
+\varphi\left(x\right)
+&=&
+\left(\pi b\right)^{-1/2} \,
+{\rm e}^{-\frac{\left(nx\right)^2}{b}}
+\qquad
+\left(b := \frac{2\sigma}{2 \sigma -1} \frac{m}{\pi} \right),\\
+\hat \varphi \left(k\right)
+&=&
+\frac{1}{n} \, {\rm e}^{-b\left(\frac{\pi k}{n}\right)^2} , \nonumber
+\end{eqnarray}
+(dilated) {\it cardinal central $B$--splines} \cite{bey95, st97}
+\begin{eqnarray} \label{bspline}
+\varphi\left(x\right)
+&=&
+M_{2m}\left(n x\right),\\ \nonumber
+\hat \varphi \left(k\right)
+&=&
+\frac{1}{n} \sinc^{2m} \left( k \pi/n\right),
+\end{eqnarray}
+where $M_{2m}$ denotes the centred cardinal $B$--Spline of order $2m$,\\
+(dilated) {\it Sinc functions} \cite{pottshabil}
+\begin{eqnarray} \label{sinc}
+\varphi\left(x\right)
+&=&
+\frac{N\left(2\sigma-1\right)}{2m} \sinc^{2m} \left(\frac{\left(\pi N x \left(2\sigma-1\right)\right)}{2m} \right),\\
+\hat \varphi \left(k\right)
+&=&
+M_{2m}\left(\frac{2mk}{\left(2\sigma-1\right)N}\right)
+\nonumber
+\end{eqnarray}
+and
+(dilated) {\it Kaiser--Bessel functions} \cite{Ja, four}
+\begin{eqnarray} \label{kaiser}
+\varphi\left(x\right)
+&=& \frac{1}{\pi} \left\{
+\ds  \begin{array}{ll}
+\ds \frac{\sinh\left(b
+\sqrt{m^2 - n^2 x^2}\right)}{\sqrt{m^2 - n^2 x^2}}
+& \mbox{for } |x| \le \frac{m}{n}
+\qquad
+\left(b :=  \pi \left(2 - \frac{1}{\sigma} \right) \right) ,\\[4ex]
+\ds \frac{\sin\left(b
+\sqrt{n^2 x^2 - m^2}\right)}{\sqrt{n^2 x^2-m^2}}
+& \mbox{otherwise},
+ \end{array}
+\right.
+\\[1ex]
+\hat \varphi \left(k\right)
+&=& \frac{1}{n} \left\{
+\ds  \begin{array}{cl}
+ \, I_0 \left(m \sqrt{b^2 - \left(2 \pi k/n \right)^2} \right)
+&
+{\rm for} \; \; k= -n \left(1-\frac{1}{2\sigma} \right), \ldots,
+n \left(1-\frac{1}{2\sigma}\right),\\
+0&{\rm otherwise},
+ \end{array}
+\right.
+\nonumber
+\end{eqnarray}
+where $I_0$ denotes the {\it modified zero--order Bessel function}.
+For these functions $\varphi$ it has been proven that
+$$
+|f\left(\mathbf{x}_j\right) - s\left(\mathbf{x}_j\right)| \le C\left(\sigma,m\right) \|\mathbf{\hat{f}}\|_1
+$$
+where
+$$
+C\left(\sigma,m\right) :=
+\left\{
+\begin{array}{ll}
+4 \, \e^{-m \pi \left(1-1/\left(2\sigma-1\right)\right)}& {\rm for} \; \left(\ref{gaussian}\right) ,\\
+4 \, \left(\frac{1}{2\sigma -1} \right)^{2m}& {\rm for} \; \left(\ref{bspline}\right), \\[1ex]
+\frac{1}{m-1}\left(\frac{2}{\sigma^{2m}}+\left(\frac{\sigma}{2\sigma-1}\right)^{2m}\right)&
+{\rm for} \; \left(\ref{sinc}\right), \\[1ex]
+4\pi\left(\sqrt{m}+m\right)\sqrt[4]{1-\frac{1}{\sigma}} \, \e^{-2 \pi m \sqrt{1-1/\sigma}} &  {\rm for} \; \left(\ref{kaiser}\right).
+\end{array}
+\right.
+$$
+Thus, for fixed $\sigma >1$, the approximation error introduced by the NFFT
+decays exponentially with the number $m$ of summands in (\ref{approx}).
+Using the tensor product approach the above error estimates can be generalised
+for the multivariate setting \cite{elst}.
+On the other hand, the complexity of the NFFT increases with $m$.
+
+In the following, we suggest different methods for the compressed storage and
+application of the matrix $\mathbf{B}$ which are all available within our NFFT
+library by choosing particular flags in a simple way during the initialisation
+phase.
+These methods do not yield a different asymptotic performance but rather yield
+a lower constant in the amount of computation.
+
+\subsubsection*{Fully precomputed window function}
+One possibility is to precompute all values $\varphi(\mathbf{x}_j -
+\mathbf{n}^{-1}\odot\mathbf{l})$ for $j=0,\hdots,M-1$ and $\mathbf{l}\in I_{\mathbf{n},m} (\mathbf{x}_j)$
+explicitly.
+Thus, one has to store the large amount of $(2m+1)^d M$ real numbers but uses
+no extra floating point operations during the matrix vector multiplication
+beside the necessary $(2m+1)^d M$ flops.
+Furthermore, we store for this method explicitly the row and column for each
+nonzero entry of the matrix $\mathbf{B}$.
+This method, included by the flag {\tt PRE\_FULL\_PSI}, is the fastest procedure
+but can only be used if enough main memory is available.
+
+\subsubsection*{Tensor product based precomputation}
+Using the fact that the window functions are built as tensor products one can
+store $\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for
+$j=0,\hdots,M-1$, $t=0,\hdots,d-1$, and $l_t\in I_{n_t,m} ((\mathbf{x}_j)_t)$
+where $(\mathbf{x}_j)_t$ denotes the $t$-th component of the $j$-th node.
+This method uses a medium amount of memory to store $d(2m+1)M$ real numbers
+in total.
+However, one has to carry out for each node at most $2(2m+1)^d$ extra
+multiplications to compute from the factors the multivariate window function
+$\varphi(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l})$ for $\mathbf{l}\in I_{\mathbf{n},m}(\mathbf{x}_j)$.
+%where a naive version would take $d(2m+1)^d$ multiplications.
+Note, that this technique is available for every window function discussed
+here and can be used by means of the flag {\tt PRE\_PSI} which is also the
+default method within our software library.
+
+\subsubsection*{Linear interpolation from a lookup table}
+For a large number of nodes $M$, the amount of memory can by further reduced
+by the use of lookup table techniques.
+For a recent example within the framework of gridding see \cite{BeNiPa05}.
+We suggest to precompute from the even window function the equidistant samples
+$\varphi_t(\frac{rm}{Kn_t})$ for $t=0,\hdots,d-1$ and $r=0,\hdots,K,\;K\in\N$
+and then compute for the actual node $\mathbf{x}_j$ during the NFFT the values
+$\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for $t=0,\hdots,d-1$ and $l_t\in
+I_{n_t,m} ((\mathbf{x}_j)_t)$ by means of the linear interpolation from its two
+neighbouring precomputed samples.
+
+This method needs only a storage of $dK$ real numbers in total where $K$
+depends solely on the target accuracy but neither on the number of nodes $M$
+nor on the multidegree $\mathbf{N}$.
+Choosing $K$ to be a multiple of $m$, we further reduce the computational
+costs during the interpolation since the distance from $(\mathbf{x}_j)_t-
+\frac{l_t}{n_t}$ to the two neighbouring interpolation nodes and hence the
+interpolation weights remain the same for all $l_t\in I_{n_t,m}((
+\mathbf{x}_j)_t)$.
+This method requires $2(2m+1)^d$ extra multiplications per node and is
+used within the NFFT by the flag {\tt PRE\_LIN\_PSI}. Error estimates for this approximation are given in \cite{KuPo06}.
+
+\subsubsection*{Fast Gaussian gridding}
+Two useful properties of the Gaussian window function \eqref{gaussian} within
+the present framework were recently reviewed in \cite{GrLe04}.
+Beside its tensor product structure for $d>1$, which also holds for all other
+window functions, it is remarkable that the number of evaluations of the form
+{\tt exp()} can be greatly decreased.
+More precisely, for $d=1$ and a fixed node $x_j$ the evaluations of
+$\varphi(x_j-\frac{l'}{n})$, $l'\in I_{n,m}(x_j)$, can be reduced by the
+splitting
+\begin{equation*}
+  \sqrt{\pi b}\varphi\left(x_j-\frac{l'}{n}\right)
+  =\e^{-\frac{(nx_j-l')^2}{b}}
+  =\e^{-\frac{(nx_j-u)^2}{b}}
+  \left(\e^{-\frac{2(nx_j-u)}{b}}\right)^l
+  \e^{-\frac{l^2}{b}}\,.
+\end{equation*}
+where $u=\min I_{n,m}(x_j)$ and $l=0,\hdots,2m$.
+Note, that the first factor and the exponential within the brackets are
+constant for each fixed node $x_j$.
+Once, we evaluate the second exponential, its $l$-th power can be computed
+consecutively by multiplications only.
+Furthermore, the last exponential is independent of $x_j$ and these $2m+1$
+values are computed only once within the NFFT and their amount is negligible.
+Thus, it is sufficient to store or evaluate $2M$ exponentials for $d=1$.
+The case $d>1$ uses $2dM$ storages or evaluations by using the general tensor
+product structure.
+This method is employed by the flags {\tt FG\_PSI} and {\tt PRE\_FG\_PSI} for
+the evaluation or storage of $2d$ exponentials per node, respectively.
+
+\subsubsection*{No precomputation of the window function}
+The last considered method uses no precomputation at all, but rather evaluates
+the univariate window function $(2m+1)^d M$ times.
+Thus, the computational time depends on how fast we can evaluate the
+particular window function.
+However, no additional storage is necessary which suits this approach whenever
+the problem size reaches the memory limits of the used computer.
+
+%------------------------------------------------------------------------------
+\subsection{Further NFFT approaches}
+%------------------------------------------------------------------------------
+Several papers have described fast approximations for the NFFT.
+Common names for NFFT are
+{\it non-uniform fast Fourier transform} \cite{fesu02},
+{\it generalised fast Fourier transform} \cite{duro93},
+{\it unequally-spaced fast Fourier transform} \cite{bey95},
+{\it fast approximate Fourier transforms for irregularly spaced data} \cite{ware98},
+{\it non-equispaced fast Fourier transform} \cite{Fou02} or
+{\it gridding} \cite{scsc, Ja, Pe}.
+
+In various papers, different window functions were considered, e.g. Gaussian
+pulse tapered with a Hanning window in \cite{DuSc}, Gaussian kernels combined
+with Sinc kernels in \cite{Pe}, and special optimised windows in
+\cite{Ja,DuSc}.
+
+A simple but nevertheless fast scheme for the computation of \eqref{ndft} in
+the univariate case $d=1$ is presented in \cite{AnDa96}.
+This approach uses for each node $x_j \in [-\frac{1}{2},\frac{1}{2})$ a $m$-th
+order Taylor expansion of the trigonometric polynomial in \eqref{trigPoly}
+about the nearest neighbouring point on the oversampled equispaced lattice
+$\{n^{-1} k - \frac{1}{2}\}_{k=0,\hdots,n-1}$ where again $n=\sigma N,\,
+\sigma\gg 1$.
+Besides its simple structure and only $\cO(N\log N+M)$ arithmetic operations,
+this algorithm utilises $m$ FFTs of size $n$ compared to only one in the NFFT
+approach, uses a medium amount of extra memory, and is not suited for highly
+accurate computations, see \cite{KuPo06}.
+Furthermore, its extension to higher dimensions has not been considered so
+far.
+
+Another approach for the univariate case $d=1$ is considered in \cite{DuRo95}
+and based on a Lagrange interpolation technique.
+After taking a $N$-point FFT of the vector $\mathbf{\hat{f}}$ in \eqref{ndft} one
+uses an exact polynomial interpolation scheme to obtain the values of the
+trigonometric polynomial $f$ at the nonequispaced nodes $x_j$.
+Here, the time consuming part is the exact polynomial interpolation scheme
+which can however be realised fast in an approximate way by means of the fast
+multipole method.
+This approach is appealing since it allows also for the inverse transform.
+Nevertheless, numerical experiments in \cite{DuRo95} showed that this
+approach is far more time consuming than Algorithm \ref{algo:nfft} and the
+inversion can only be computed in a stable way for almost equispaced nodes
+\cite{DuRo95}.
+
+Furthermore, special approaches based on scaling vectors \cite{NgLi99}, based
+on minimising the Frobenius norm of certain error matrices \cite{st01} or
+based on min-max interpolation \cite{fesu02} are proposed.
+While these approaches gain some accuracy for the Gaussian or B-Spline
+windows, no reasonable improvement is obtained for the Kaiser-Bessel window
+function.
+
+For comparison of different approaches, we refer to
+\cite{ware98,st01,fesu02,KuPo06}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Generalisations and inversion} \label{sect:gen}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+We consider generalisations of the NFFT for
+%------------------------------------------------------------------------------
+\subsection{NNFFT - nonequispaced in time and frequency fast Fourier
+  transform}
+%------------------------------------------------------------------------------
+
+Now we are interested in the computation of
+\begin{equation*}
+  f_j= \sum_{k=0}^{N-1} \hat f_k \eim{\left(\mathbf{v}_k \odot \mathbf{N}\right))\mathbf{x}_j}
+\end{equation*}
+for $j =0,\hdots,M-1$, $\mathbf{v}_k, \mathbf{x}_j \in \T^d$, and $\hat f_k \in \C$, where $\mathbf{N}\in \N^d$
+denotes the "nonharmonic" bandwidth.
+The corresponding fast algorithm is known as {\it fast Fourier transform for
+nonequispaced data in space {\bf and} frequency domain} (NNFFT) \cite{duro93,elst,postta01} or as type 3 nonuniform FFT \cite{LeGr05}.
+
+A straightforward evaluation of this sum with the standard NFFT is not
+possible, since the samples in neither domain are equispaced.
+However, an so-called NNFFT was first suggested in \cite{duro93} and later
+studied in more depth in \cite{elst}, which permits the fast calculation of
+the Fourier transform of a vector of nonequispaced samples at a vector of
+nonequispaced positions.
+It constitutes a combination of the standard NFFT and its adjoint see also
+\cite{postta01}.
+
+%------------------------------------------------------------------------------
+\subsection{NFCT/NFST - nonequispaced fast (co)sine transform}
+%------------------------------------------------------------------------------
+
+Let nonequispaced nodes $\mathbf{x}_j \in [0,\frac{1}{2}]^d$ and frequencies
+$\mathbf{k}$ in the index sets
+\begin{align*}
+  I_{\mathbf{N}}^C &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: 0
+    \le k_t < N_t ,\;t=0,\hdots,d-1\right\},\\
+  I_{\mathbf{N}}^S &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: 1
+    \le k_t < N_t ,\;t=0,\hdots,d-1\right\}
+\end{align*}
+be given.
+For notational convenience let furthermore $\cos(\mathbf{k} \odot \mathbf{x}) :=
+\cos(k_0 x_0) \cdot \hdots \cdot \cos(k_{d-1} x_{d-1})$ and $\sin(\mathbf{k} \odot
+\mathbf{x}) := \sin(k_0 x_0) \cdot \hdots \cdot \sin(k_{d-1} x_{d-1})$.
+
+The {\it nonequispaced discrete cosine} and {\it sine transforms} are given by
+\begin{align*}
+  f\left(\mathbf{x}_j\right) &= \sum_{\mathbf{k}\in I_{\mathbf{N}}^C} \hat{f}_{\mathbf{k}}
+  \cos(2\pi(\mathbf{k}\odot\mathbf{x}_j)),\\
+  f\left(\mathbf{x}_j\right) &= \sum_{\mathbf{k}\in I_{\mathbf{N}}^S} \hat{f}_{\mathbf{k}}
+  \sin(2\pi(\mathbf{k}\odot\mathbf{x}_j)),
+\end{align*}
+for $j=0,\hdots,M-1$ and real coefficients $\hat f_{\mathbf{k}} \in \R$,
+respectively.
+
+The straight forward algorithm of this matrix vector product, which is called
+ndct and ndst, takes $\cO(M |I_{\mathbf{N}}^C|)$ and $\cO(M |I_{\mathbf{N}}^C|)$
+arithmetical operations.
+For these real transforms the adjoint transforms coincide with the ordinary
+transposed matrix vector products.
+Our fast approach is based on the NFFT and seems to be easier than the
+Chebyshev transform based derivation in \cite{po01} and faster than the
+algorithms in \cite{tili00} which still use FFTs.
+Instead of FFTs we use fast algorithms for the discrete cosine transform
+(DCT--I) and for the discrete sine transform (DST--I).
+For details we refer to \cite{fepo02}.
+
+%------------------------------------------------------------------------------
+\subsection{NSFFT - nonequispaced sparse fast Fourier transform}
+%------------------------------------------------------------------------------
+
+We consider the fast evaluation of trigonometric polynomials from so-called
+hyperbolic crosses.
+In multivariate approximation one has to deal with the so called `curse of
+dimensionality', i.e., the number of degrees of freedom for representing an
+approximation of a function with a prescribed accuracy depends exponentially
+on the dimensionality of the considered problem.
+This obstacle can be circumvented to some extend by the interpolation on
+sparse grids and the related approximation on hyperbolic cross points in the
+Fourier domain, see, e.g., \cite{Zeng91,Spr00,BuZe04}.
+
+Instead of approximating a Fourier series on the standard tensor product grid
+$I_{\mathbf{(N,\hdots,N)}}$ with $\cO(N^d)$ degrees of freedom, it can be
+approximated with only $\cO(N \log^{d-1} N)$ degrees of freedom from the
+hyperbolic cross
+\begin{equation*}
+  H_N^d := \bigcup_{\mathbf{N}\in\N^d,\, |I_{\mathbf{N}}|=N} I_{\mathbf{N}},
+\end{equation*}
+where $N=2^{J+2},\;J\in\NZ$ and we allow $N_t=1$ in the $t$-th coordinate in
+the definition of $I_{\mathbf{N}}$.
+The approximation error in a suitable norm (dominated mixed smoothness) can be shown to deteriorate only by a factor of $\log^{d-1} N$,
+cf. \cite{Spr00}.
+\begin{figure}[ht]
+  \centering
+  \begin{tabular}{cccc}
+    \includegraphics[scale=0.6]{images/sparse2D_0}&
+    \includegraphics[scale=0.6]{images/sparse2D_1}&
+    \includegraphics[scale=0.6]{images/sparse2D_2}&
+    \includegraphics[scale=0.6]{images/sparse2D_3}
+  \end{tabular}
+  \caption{Hyperbolic cross points for $d=2$ and $J=0,\ldots,3$.
+    \label{sparse_grid}}
+\end{figure}
+
+The {\em nonequispaced sparse discrete Fourier transform} (NSDFT) is the
+evaluation of
+\begin{equation*}
+  f\left(\mathbf{x}_j\right) = \sum_{\mathbf{k}\in H_N^d}
+  \hat f_{\mathbf{k}} \eim{\mathbf{k} \mathbf{x}_j}
+\end{equation*}
+for given Fourier coefficients $\hat f_{\mathbf{k}}\in\C$ and nodes $\mathbf{x}_j\in
+\T^d$.
+The number of used arithmetical operations is $\cO(M N\log^{d-1}N)$.
+This is reduced by our fast schemes to $\cO(N\log^2 N+M)$ for $d=2$ and
+$\cO(N^{3/2} \log N+M)$ for $d=3$, see \cite{FeKuPo} for details.
+
+%------------------------------------------------------------------------------
+\subsection{FPT - fast polynomial transform} \label{sect:fpt}
+%------------------------------------------------------------------------------
+A \emph{discrete polynomial transform} (DPT) is a generalisation of the DFT
+from the basis of complex exponentials $\mathrm{e}^{\mathrm{i} k x}$ to an
+arbitrary systems of algebraic polynomials satisfying a three-term recurrence
+relation.
+More precisely, let $P_{0},P_{1},\hdots:[-1,1]\rightarrow\R$ be a sequence of
+polynomials that satisfies a three-term recurrence relation
+\begin{equation*}
+  P_{k+1}(x) = (\alpha_{k} x  + \beta_{k})P_{k}(x) + \gamma_{k} P_{k-1}(x),
+\end{equation*}
+with $\alpha_{k} \neq 0$, $k\ge 0$, $P_{0}(x) := 1$, and $P_{-1}(x) := 0$.
+Clearly, every $P_{k}$ is a polynomial of exact degree $k$ and typical
+examples are the classical orthogonal Jacobi polynomials
+$P_{k}^{(\alpha,\beta)}$.
+
+Now, let $f:[-1,1]\rightarrow\R$ be a polynomial of degree $N\in\N$ given by
+the finite linear combination
+\begin{equation*}
+  f(x) = \sum_{k=0}^{N} a_{k} P_{k}(x).
+\end{equation*}
+The discrete polynomial transform (DPT) and its fast version, the \emph{fast
+  polynomial transform} (FPT), are the transformation of the coefficients
+$a_{k}$ into coefficients $b_{k}$ from the orthogonal expansion of $f$ into
+the basis of Chebyshev polynomials of the first kind $T_{k}(x) := \cos(k
+  \arccos x)$, i.e.,
+\begin{equation*}
+  f(x) = \sum_{k=0}^N b_{k} T_{k}(x).
+\end{equation*}
+A direct algorithm for computing this transformation needs $\cO(N^2)$
+arithmetic operations.
+The FPT algorithm implemented in the NFFT library follows the approach in
+\cite{postta98} and is based on the idea of using the three-term-recurrence
+relation repeatedly.
+Together with a method for fast polynomial multiplication in the Chebyshev
+basis and a cascade-like summation process, this yields a method for computing
+the polynomial transform with $\cO(N \log^2 N)$ arithmetic operations.
+For more detailed information, we refer the reader to
+\cite{drhe, drhero, postta98, po01, KePo06} and the references therein.
+
+%------------------------------------------------------------------------------
+\subsection{NFSFT - nonequispaced fast spherical Fourier transform}
+\label{sect:gen:nfsft}
+%------------------------------------------------------------------------------
+Fourier analysis on the sphere has, despite other fields, practical
+relevance in tomography, geophysics, seismology, meteorology and
+crystallography. In analogy to the complex exponentials
+$\mathrm{e}^{\mathrm{i} k x}$ on the torus, the spherical harmonics
+form the orthogonal Fourier basis with respect to the usual inner product on  the sphere.
+
+\subsubsection*{Spherical coordinates}
+Every point in $\R^3$ can be described in spherical coordinates by a vector
+$(r,\vartheta,\varphi)^{\top}$ with the radius $r\ge 0$ and two angles
+$\vartheta \in [0,\pi]$, $\varphi \in [0,2\pi)$.
+We denote by $\S^2$ the two-dimensional unit sphere embedded into $\R^3$,
+i.e.
+\begin{equation*}
+  \S^2 := \left\{\mathbf{x} \in \R^{3}:\; \|\mathbf{x}\|_2=1\right\}
+\end{equation*}
+and identify a point from $\S^2$ with the corresponding vector
+$(\vartheta,\varphi)^{\top}$.
+The spherical coordinate system is illustrated in Figure \ref{sphere}.
+\begin{figure}[tb]
+  \centering
+  \includegraphics[width=0.60\textwidth]{images/sphere}
+  \caption{The spherical coordinate system in $\R^3$: Every point $\boldsymbol{\xi}$ on a
+    sphere with radius $r$ centred at the origin can be described by angles
+  $\vartheta \in [0,\pi]$, $\varphi \in [0,2\pi)$ and the radius $r \in \mathbb{R}^+$.
+  For $\vartheta = 0$ or $\vartheta = \pi$ the point $\boldsymbol{\xi}$ coincides with the
+  North or the South pole, respectively.} \label{sphere}
+\end{figure}
+
+\subsubsection*{Legendre polynomials and associated Legendre functions}
+The Legendre polynomials $P_k : [-1,1]\rightarrow \R$, $k\ge 0$, as
+classical orthogonal polynomials are given by their corresponding Rodrigues
+formula
+\begin{equation*}
+  P_k(x) := \frac{1}{2^k k!} \frac{\text{d}^k}{\text{d} x^k}
+  \left(x^2-1\right)^k.
+\end{equation*}
+
+The associated Legendre functions $P_k^n : [-1,1] \rightarrow \R$, $k \ge n
+\ge 0$ are defined by
+\begin{equation*}
+  P_k^n(x) := \left(\frac{(k-n)!}{(k+n)!}\right)^{1/2}
+  \left(1-x^2\right)^{n/2} \frac{\text{d}^n}{\text{d} x^n} P_k(x).
+\end{equation*}
+For $n = 0$, they coincide with the Legendre polynomials $P_k = P_k^0$.
+The associated Legendre functions $P_{k}^n$ obey the three-term recurrence
+relation
+\begin{equation*}
+  P_{k+1}^n(x) = \frac{2k+1}{((k-n+1)(k+n+1))^{1/2}} x P_k^n(x) -
+  \frac{((k-n)(k+n))^{1/2}}{((k-n+1)(k+n+1))^{1/2}} P_{k-1}^n(x)
+\end{equation*}
+for $k \ge n \ge 0$, $P_{n-1}^n(x) = 0$, $P_{n}^n(x) = \frac{\sqrt{(2n)!}}{2^n
+  n!}\left(1-x^2\right)^{n/2}$.
+For fixed $n$, the set $\{P_k^n:\: k \ge n\}$ forms a set of
+orthogonal functions, i.e.,
+\begin{equation*}
+  \left\langle P_k^n,P_l^n \right\rangle =
+  \int_{-1}^{1}  P_k^n(x) P_l^n(x) \text{d} x =
+  \frac{2}{2k+1} \delta_{k,l}.
+\end{equation*}
+Again, we denote by $\bar{P}_{k}^n = \sqrt{\frac{2k+1}{2}} P_k^n$ the
+orthonormal associated Legendre functions.
+In the following, we allow also for $n < 0$ and set $P_{k}^n$ := $P_{k}^{-n}$
+in this case.
+
+\subsubsection*{Spherical harmonics}
+The spherical harmonics $Y_k^n : \S^2 \rightarrow \C$, $k \ge |n|$, $n\in\Z$,
+are given by
+\begin{equation*}
+  Y_k^n(\vartheta,\varphi) := P_k^{n}(\cos\vartheta)
+  \, \mathrm{e}^{\mathrm{i} n \varphi}.
+\end{equation*}
+They form an orthogonal basis for the space of square integrable functions on
+the sphere, i.e.,
+\begin{equation*}
+  \left\langle Y_k^n,Y_l^m \right\rangle  =
+  \int_{0}^{2\pi} \int_{0}^{\pi} Y_k^n(\vartheta,\varphi)
+  \overline{Y_l^m(\vartheta,\varphi)} \sin \vartheta \; \mathrm{d} \vartheta
+  \; \mathrm{d} \varphi =
+  \frac{4\pi}{2k+1} \delta_{k,l}\delta_{n,m}.
+\end{equation*}
+The orthonormal spherical harmonics are denoted by $\bar{Y}_k^n =
+\sqrt{\frac{2k+1}{4\pi}} Y_k^n$.
+
+Hence, any square integrable function $f:\S^2\rightarrow\C$ has the expansion
+\begin{equation*}
+  f = \sum_{k=0}^{\infty} \sum_{n=-k}^{k} \hat{f}(k,n) \bar{Y}_k^n,
+\end{equation*}
+with the spherical Fourier coefficients $\hat{f}(k,n) = \left\langle f,
+\bar{Y}_k^n \right\rangle$.
+The function $f$ is called \emph{bandlimited}, if $\hat{f}(k,n)=0$ for $k>N$
+and some $N\in\N$.
+In analogy to the NFFT on the Torus $\mathbb{T}$, we define the sampling set
+\begin{equation*}
+  \mathcal{X}: = \left\{\left(\vartheta_{j},\varphi_{j}\right) \in
+  \mathbb{S}^2:\,j=0,\hdots,M-1\right\}
+\end{equation*}
+of nodes on the sphere $\S^2$ and the set of possible ''frequencies''
+\begin{equation*}
+  \mathcal{I}_{N} := \left\{(k,n):\,k=0,1,\ldots,N;\;
+  n=-k,\ldots,k\right\}.
+\end{equation*}
+The \emph{nonequispaced discrete spherical Fourier transform} (NDSFT) is
+defined as the evaluation of the finite spherical Fourier sum
+\begin{equation}
+  \label{eq.ndsft}
+   f_j=
+  f\left(\vartheta_{j},\varphi_{j}\right) =
+    \sum_{(k,n) \in \, \mathcal{I}_{N}} \hat{f}_k^n \,
+      Y_k^n\left(\vartheta_{j},\varphi_{j}\right) =
+    \sum_{k=0}^N \sum_{n=-k}^k \hat{f}_k^n \,
+      Y_k^n\left(\vartheta_{j},\varphi_{j}\right)
+\end{equation}
+for $j=0,\hdots,M-1$.
+In matrix vector notation, this reads $\mathbf{f} = \mathbf{Y} \; \mathbf{\hat
+  f}$ with
+\begin{equation*}
+  \begin{split}
+    \mathbf{f} & := \left(f_j\right)_{j=0}^{M-1} \in
+      \mathbb{C}^{M},\ f_{j} := f\left(\vartheta_{j},\varphi_{j}\right),\\
+    \mathbf{Y} & :=
+      \left(Y_k^n\left(\vartheta_j,\varphi_j\right)\right)_{j=0,\ldots,M-1;\;
+      (k,n) \in \mathcal{I}_N} \in \mathbb{C}^{M \times (N+1)^2},\\
+    \mathbf{\hat f} & := \left(\hat f_k^n\right)_{(k,n) \in \mathcal{I}_N} \in
+      \mathbb{C}^{(N+1)^2}.
+  \end{split}
+\end{equation*}
+The corresponding \emph{adjoint nonequispaced
+  discrete fast spherical Fourier transform} (adjoint NDSFT) is defined as
+the evaluation of
+\begin{equation*}
+  \label{eq.adjointndsft}
+  \hat h_{k}^n =
+  \sum_{j = 0}^{M-1} f\left(\vartheta_{j},\varphi_{j}\right)
+  \overline{Y_k^n\left(\vartheta_{j},\varphi_{j}\right)}
+\end{equation*}
+for all $(k,n) \in \mathcal{I}_{N}$.
+Again, in matrix vector notation, this reads $\mathbf{\hat h} =
+\mathbf{Y}^{\adj} \, \mathbf{f}$.
+
+The coefficients $\hat h_{k}^n$ are, in general, not
+identical to the Fourier coefficients $\hat{f}(k,n)$ of the function $f$.
+However, provided that for the sampling set $\mathcal{X}$ a quadrature rule
+with weights $w_{j}$, $j=0,\hdots,M-1$, and sufficient degree of exactness
+is available, one might recover the Fourier coefficients $\hat{f}(k,n)$ by
+evaluating
+\begin{equation*}
+  \hat{f}_{k}^n = \int_{0}^{2\pi} \int_{0}^{\pi} f(\vartheta,\varphi)
+  \overline{Y_{k}^n(\vartheta,\varphi)} \sin\vartheta \; \mathrm{d} \vartheta
+  \; \mathrm{d} \varphi =
+  \sum_{j = 0}^{M-1} w_{j} f\left(\vartheta_{j},\varphi_{j}\right)
+  \overline{Y_k^n\left(\vartheta_{j},\varphi_{j}\right)}
+\end{equation*}
+for all $(k,n) \in \mathcal{I}_{N}$.
+
+Direct algorithms for computing the NDSFT and adjoint NDSFT transformations
+need $\cO(M N^2)$ arithmetic operations.
+A combination of the fast polynomial transform and the NFFT leads to
+approximate algorithms with $\cO(N^2 \log^2 N + M)$ arithmetic operations.
+These are denoted \emph{NFSFT} and \emph{adjoint NFSFT}, respectively.
+The NFSFT algorithm using  the FPT and the NFFT was introduced in
+\cite{kupo02} while the adjoint NFSFT variant was developed in \cite{KePo06}.
+
+\begin{algorithm}[tb]
+  \caption[NFSFT]{Nonequispaced fast spherical Fourier transform (NFSFT)}
+  \label{NFSFT:Algorithm:NFSFT}
+  \begin{algorithmic}
+    \STATE  Input: $N \in \mathbb{N}_0$, $M \in \mathbb{N}$, spherical Fourier
+      coefficients $\mathbf{\hat{f}} = (\hat{f}_{k}^n)_{(k,n) \in
+      \mathcal{I}_{N}} \in \mathbb{C}^{(N+1)^2}$,\\
+    \STATE \invisible{Input:} a sampling set $\mathcal{X} = \left(\vartheta_{j},
+      \varphi_{j}\right)_{j=0}^{M-1} \in ([0,\pi]\times [0,2\pi))^{M}$.
+    \STATE
+    \FOR {$n=-N,\ldots,N$}
+      \STATE Compute the Chebyshev coefficients $\left(b_{k}^n\right)_{k=0}^{N}$
+        of $g^{n}$ by a fast polynomial transform.
+      \STATE Compute the coefficients $\left(c_{k}^n\right)_{k=-N}^N$
+        %as in \eqref{NFSFT:afterChebToExp}
+        from the coefficients $\left(b_{k}^n\right)_{k=0}^{M}$.
+    \ENDFOR
+    \STATE Compute the function values
+      $\left(f\left(\vartheta_{j},\varphi_{j}\right)\right)_{j=0}^{M-1}$
+      by evaluating the Fourier sum %in \eqref{NFSFT:transformed}
+      using a fast two-dimensional NFFT.
+    \STATE
+    \STATE Output: The function values ${\mathbf{f}} =
+      \left(f\left(\vartheta_{j},
+      \varphi_{j}\right)\right)_{j=0}^{M-1} \in \mathbb{C}^{M}$.
+    \STATE Complexity: $\mathcal{O}\left(N^2 \log^2 N +
+      M\right)$.
+\end{algorithmic}
+\end{algorithm}
+
+\begin{algorithm}[tb]
+  \caption[Adjoint NFSFT]{Adjoint nonequispaced fast spherical Fourier
+    transform (adjoint NFSFT)}
+  \label{NFSFT:Algorithm:adjointNFSFT}
+  \begin{algorithmic}
+    \STATE  Input: $N \in \mathbb{N}_0$, $M \in \mathbb{N}$, a sampling set
+      $\mathcal{X} = \left(\vartheta_{j}, \varphi_{j}\right)_{j=0}^{M-1}
+      \in ([0,\pi]\times [0,2\pi))^{M}$,\\
+    \STATE \invisible{Input:} values $\mathbf{\tilde{f}} =
+      (\tilde{f}_{j})_{j=0}^{M-1} \in \mathbb{C}^M$.
+    \STATE
+    \STATE Compute the coefficients $\left(\tilde{c}_{k}^n\right)_{k,n=-N}^N$ from
+      the values $\left(f_{j}\right)_{j=0}^{N-1}$.
+      %according to the matrix $\mathbf{F}_{\mathcal{X}}^{\h}$ in
+      %\eqref{NFSFT:adjointNFSFTmv}
+    \FOR {$n=-N,\ldots,N$}
+      \STATE Compute the coefficients $\left(\tilde{b}_{k}^n\right)_{k=0}^N$ from the
+        coefficients $\left(\tilde{c}_{k}^n\right)_{k=-N}^{N}$.
+        % according to the matrix $\mathbf{B}^{\transp}$ in \eqref{NFSFT:adjointNFSFTmv}
+      \STATE Compute the coefficients $\left(\tilde{a}_{k}^n\right)_{k=|n|}^{N}$ from
+        the coefficients $\left(\tilde{b}_{k}^n\right)_{k=0}^N$
+        %according to the matrix $\mathbf{T}^{\transp}$ in \eqref{NFSFT:adjointNFSFTmv}
+        by a fast transposed polynomial transform.
+    \ENDFOR
+    \STATE
+    \STATE Output: Coefficients $\mathbf{h} =
+      \left(\tilde{h}_{k}^n\right)_{(k,n)
+      \in \mathcal{I}_N} \in \mathbb{C}^{(N+1)^2}$.
+    \STATE Complexity: $\mathcal{O}\left(N^2 \log^2 N +
+      M\right)$.
+\end{algorithmic}
+\end{algorithm}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Solver - inverse transforms} \label{sect:inv}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+In the following, we describe the inversion of the NFFT, i.e., the computation
+of Fourier coefficients from given samples $(\mathbf{x}_j,y_j) \in \T^d\times \C$,
+$j=0,\ldots,M-1$.
+In matrix vector notation, we aim to solve the linear system of equations
+\begin{equation}\label{eq:infft}
+  \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{y}
+\end{equation}
+for the vector $\mathbf{\hat{f}}\in\C^{|I_{\mathbf{N}|}}$.
+Note however that the nonequispaced Fourier matrix $\mathbf{A}$ can be replaced by
+any other Fourier matrix from Section \ref{sect:gen}.
+
+Typically, the number of samples $M$ and the dimension of the space of the
+polynomials $|I_{\mathbf{N}}|$ do not coincide, i.e., the matrix $\mathbf{A}$ is
+rectangular.
+There are no simple inverses to nonequispaced Fourier matrices in general and
+we search for some pseudoinverse solution $\mathbf{\hat{f}}^{\dagger}$, see
+e.g. \cite[p. 15]{Bj96}.
+However, we conclude from eigenvalue estimates in
+\cite{FeGrSt95,BaGr03,KuPo04} that the matrix $\mathbf{A}$ has full rank if
+\begin{equation*}
+  \max_{0\le t<d} N_t < c_d \delta^{-1}\,, \qquad \delta:=2\max_{
+  \mathbf{x}\in\T^d}\min_{j=0,\hdots,M-1}\dist_{\infty}\left(\mathbf{x}_j,\mathbf{x}_l\right),
+\end{equation*}
+or
+\begin{equation*}
+  \min_{0\le t<d} N_t>C_d q^{-1}\,, \qquad q:=\min_{0\le j<l<M}
+  \dist_{\infty}\left(\mathbf{x}_j,\mathbf{x}_l\right).
+\end{equation*}
+
+In what follows, we consider a weighted least squares solution for the
+over-determined case and an optimal interpolation for the consistent
+underdetermined case.
+Both cases are solved by means of iterative algorithms where Algorithm
+\ref{algo:nfft} and \ref{algo:nfftH} are used for the matrix vector
+multiplication with $\mathbf{A}$ and $\mathbf{A}^{\adj}$, respectively.
+
+%------------------------------------------------------------------------------
+\subsubsection*{Least squares}
+%------------------------------------------------------------------------------
+
+For a comparative low polynomial degree $|I_{\mathbf{N}}|<M$ the system
+\eqref{eq:infft} is over-determined, so that in general the given data $y_j\in
+\C,\;j=0,\hdots,M-1,$ will be only approximated up to the {\em residual} $
+\mathbf{r}:=\mathbf{f}-\mathbf{A} \mathbf{\hat{f}}$.
+One considers the {\em weighted approximation problem}
+\begin{equation*}
+  \|\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}\|_{\mathbf{W}}
+  = \left(\sum_{j=0}^{M-1} w_j |y_j-f(x_j)|^2\right)^{1/2}
+  \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min,
+\end{equation*}
+which may incorporate weights $w_j> 0$, $\mathbf{W}:=\diag(w_j)_{j=0,\hdots,M-1}$,
+to compensate for clusters in the sampling set ${\cal X}$.
+This least squares problem is equivalent to the
+{\em weighted normal equation of first kind}
+\begin{equation}\label{eq:no1}
+  \mathbf{A}^{\adj} \mathbf{W} \mathbf{A} \mathbf{\hat{f}} = \mathbf{A}^{\adj} \mathbf{W} \mathbf{y}.
+\end{equation}
+
+Applying the Landweber (also known as Richardson, ...), the steepest descent,
+or the conjugate gradient scheme to \eqref{eq:no1} yields the following
+Algorithms \ref{algo:landweber}-\ref{algo:wCGNR(E)}.
+\begin{algorithm}[ht!]
+  \caption{Landweber}
+  \label{algo:landweber}
+  Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{
+  \mathbf{N}}|},\, \alpha>0$
+  \begin{algorithmic}[1]
+    \topsep=1.5ex
+    \itemsep=1.5ex
+    \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+    \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+
+    \FOR{$l=0,\hdots$}
+    \topsep=1.5ex
+    \itemsep=1.5ex
+    \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+    +\alpha \mathbf{\hat{W}} \mathbf{\hat{z}}_l$
+    \STATE $\mathbf{r}_{l+1}=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_{l+1}$
+    \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+    \ENDFOR
+  \end{algorithmic}
+  Output: $\mathbf{\hat{f}}_{l}$
+\end{algorithm}
+
+\begin{algorithm}[ht!]
+  \caption{Steepest descent}
+  \label{algo:gradient}
+  Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{\mathbf{N}}|}$
+  \begin{algorithmic}[1]
+    \topsep=1.5ex
+    \itemsep=1.5ex
+    \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+    \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+
+    \FOR{$l=0,\hdots$}
+    \topsep=1.5ex
+    \itemsep=1.5ex
+    \STATE $\mathbf{v}_l = \mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{z}}_l$
+    \STATE $\alpha_l=\frac{\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{z}}_l}
+              {\mathbf{v}_l^{\adj} \mathbf{W} \mathbf{v}_l}$
+              \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+              +\alpha_l \mathbf{\hat{W}}\mathbf{\hat{z}}_l$
+              \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l+1} - \alpha_l \mathbf{v}_l$
+              \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+              \ENDFOR
+  \end{algorithmic}
+  Output: $\mathbf{\hat{f}}_{l}$
+   \end{algorithm}
+
+\begin{algorithm}[ht!]
+    \caption{Conjugate gradients for the normal equations, Residual
+      minimisation (CGNR)}
+    \label{algo:wCGNR(E)}
+    Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{\mathbf{N}}|}$
+    \begin{algorithmic}[1]
+      \topsep=1.5ex
+      \itemsep=1.5ex
+      \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+      \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+      \STATE $\mathbf{\hat{p}}_0=\mathbf{\hat{z}}_0$
+      \FOR{$l=0,\hdots$}
+      \topsep=1.5ex
+      \itemsep=1.5ex
+      \STATE $\mathbf{v}_l=\mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+      \STATE $\alpha_l=\frac{\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{z}}_l} {\mathbf{v}_l^{\adj} \mathbf{W} \mathbf{v}_l}$
+      \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+      +\alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+      \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{v}_l$
+      \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+      \STATE $\beta_l=\frac{\mathbf{\hat{z}}_{l+1}^{\adj} \mathbf{\hat{W}}\mathbf{\hat{z}}_{l+1}}
+             {\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}}\mathbf{\hat{z}}_l}$
+             \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l + \mathbf{\hat{z}}_{l+1}$
+             \ENDFOR
+    \end{algorithmic}
+    Output: $\mathbf{\hat{f}}_{l}$
+\end{algorithm}
+
+%------------------------------------------------------------------------------
+\subsubsection*{Interpolation}
+%------------------------------------------------------------------------------
+
+For a comparative high polynomial degree $|I_{\mathbf{N}}|>M$ one expects to
+interpolate the given data $y_j\in \C,\;j=0,\hdots,M-1,$ exactly.
+The (consistent) linear system \eqref{eq:infft} is under-determined.
+One considers the {\em damped minimisation problem}
+\begin{equation*}
+  \label{eq:ip}
+  \|\mathbf{\hat{f}}\|_{\mathbf{\hat{W}}}^{-1}
+  =\left(\sum_{\mathbf{k}\in I_{\mathbf{N}}} \frac{|\hat f_{\mathbf{k}}|^2}{\hat w_{\mathbf{k}}}
+  \right)^{1/2} \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min \quad \text{subject
+  to} \quad \mathbf{A} \mathbf{\hat{f}} = \mathbf{y},
+\end{equation*}
+which may incorporate 'damping factors' $\hat w_{\mathbf{k}}> 0$, $\mathbf{\hat{W}}:=
+\diag(\hat w_{\mathbf{k}})_{\mathbf{k}\in I_{\mathbf{N}}}$.
+A smooth solution is favoured, i.e., a decay of the Fourier coefficients $\hat
+f_{\mathbf{k}},\;\mathbf{k}\in I_{\mathbf{N}}$, for decaying damping factors $\hat w_{
+\mathbf{k}}$.
+This interpolation problem is equivalent to the
+{\em damped normal equation of second kind}
+\begin{equation} \label{eq:no2}
+  \mathbf{A} \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}
+  = \mathbf{y}, \qquad \mathbf{\hat{f}} =
+  \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}.
+\end{equation}
+
+Applying the conjugate gradient scheme to \eqref{eq:no2} yields the following
+Algorithm \ref{algo:wCGNE(R)}.
+\begin{algorithm}[ht!]
+  \caption{Conjugate gradients for the normal equations, Error minimisation
+    (CGNE)}
+  \label{algo:wCGNE(R)}
+  Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{\mathbf{N}}|}$
+  \begin{algorithmic}[1]
+    \topsep=1.5ex \itemsep=1.5ex
+    \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+    \STATE $\mathbf{\hat{p}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+    \FOR{$l=0,\hdots$}
+    \topsep=1.5ex \itemsep=1.5ex
+    \STATE $\alpha_l=\frac{\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}
+           {\mathbf{\hat{p}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{p}}_l}$
+           \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+           +\alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+           \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+           \STATE $\beta_l=\frac{\mathbf{r}_{l+1}^{\adj} \mathbf{W} \mathbf{r}_{l+1}}
+                  {\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}$
+
+                  \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l + \mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+                  \ENDFOR
+  \end{algorithmic}
+  Output: $\mathbf{\hat{f}}_{l}$
+\end{algorithm}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Library}\label{sect:lib}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ The library is completely written in C and uses the FFTW library \cite{fftw}
+ which has to be installed on your system.
+ The library has several options (determined at compile time) and parameters
+ (determined at run time).
+
+%------------------------------------------------------------------------------
+\subsection{Installation}
+%------------------------------------------------------------------------------
+Download from {\tt www.tu-chemnitz.de/$\sim$potts/nfft} the most recent
+version {\tt nfft3.x.x.tgz}. In the following, we assume that you use a \verb+bash+
+compatible shell.
+Uncompress the archive.
+\begin{itemize}
+  \item \verb"tar xfvz nfft3.x.x.tar.gz"
+\end{itemize}
+Change to the newly created directory.
+\begin{itemize}
+  \item \verb+cd nfft3.x.x+
+\end{itemize}
+Optional: Set environment variables (see also below).
+Leave this step out, if you are unsure what to do.
+Example:
+\begin{itemize}
+  \item \verb+export CPPFLAGS="-I/path/to/include/files"+\\
+  \item \verb+export LDFLAGS="-L/path/to/libraries"+
+\end{itemize}
+Run the configure script.
+\begin{itemize}
+  \item \verb+./configure+
+\end{itemize}
+Compile the sources.
+\begin{itemize}
+  \item \verb+make+
+\end{itemize}
+This builds the NFFT library and all examples and applications. You can run
+\verb"make install" to install the library on your system. If
+for example \verb+/usr+ is your default installation directory, \verb+make install+
+will copy the NFFT 3 library to \verb+/usr/lib+, the C header files to
+\verb+/usr/include/nfft+ and the documentation together with all examples and
+applications to \verb+/usr/share/nfft+.
+
+For more information on fine grained
+control over the installation directories, run the \verb"configure" script
+with the option \verb+--help+, i.e. \verb+./configure --help+.
+For example, to see what gets installed, run
+\verb+./configure --prefix=some/path/to/a/temporary/directory+ in the line of
+commands above. After \verb+make+ and \verb+make install+, you will find all
+installed files in the directory structure created under the temporary directory.
+
+The following options can also be used in conjunction with the configure script:
+By default, NFFT 3 routines use the Kaiser-Bessel window function
+(see Appendix \ref{sec.nfft}). You can
+change the window function with the option \verb"--with-window=ARG",
+where \verb"ARG" is replaced by \verb"kaiserbessel" (Kaiser-Bessel),
+\verb"gaussian" (Gaussian), \verb"bspline" (B-spline),
+\verb"sinc" (sinc power) or \verb"delta" (Dirac delta) to yield the
+window function in parenthesis.
+
+The NFFT transforms can be configured to measure elapsed
+time for each step of Algorithm~\ref{algo:nfft} and \ref{algo:nfftH}.
+This should help customise the library to one's needs.
+You can enable this behaviour with
+the options \verb"--enable-measure-time" and/or
+\verb"--enable-measure-time-fftw".
+
+%------------------------------------------------------------------------------
+\subsection{Procedure for computing an NFFT}\label{sect:general_proc}
+%------------------------------------------------------------------------------
+One has to follow certain steps to write a simple program using the NFFT
+library.
+A complete example is shown in Section \ref{sect:first_trafo}.
+The first argument of each function is a pointer to a application-owned
+variable of type {\tt nfft\_plan}.
+The aim of this structure is to keep interfaces small, it contains all
+parameters and data.
+
+\subsubsection*{Initialisation}
+Initialisation of a plan is done by one of the {\tt nfft\_init}-functions.
+The simplest version for the univariate case $d=1$ just specifies the number
+of Fourier coefficients $N_0$ and the number of nonequispaced nodes $M$.
+For an application-owned variable {\tt nfft\_plan my\_plan} the function call is
+\begin{center}
+  {\tt nfft\_init\_1d(\&my\_plan,N0,M);}
+\end{center}
+The first argument should be uninitialised. Memory allocation is completely
+done by the init routine.
+
+\subsubsection*{Setting nodes}
+One has to define the nodes $\mathbf{x}_j \in \T^d$ for the
+transformation in the member variable {\tt my\_plan.x}.
+The $t$-th coordinate of the $j$-th node $\mathbf{x}_j$ is assigned by
+\begin{center}
+  {\tt my\_plan.x[d*j+t]= /* your choice in [-0.5,0.5] */;}
+\end{center}
+
+\subsubsection*{Precompute $\tilde\psi$}
+The precomputation of the values $\tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot
+\mathbf{l}\right)$, i.e. the entries of the matrix $\mathbf{B}$, depends on the choice
+for {\tt my\_plan.x}.
+If one of the proposed precomputation strategies ({\tt PRE\_LIN\_PSI}, {\tt
+  PRE\_FG\_PSI}, {\tt PRE\_PSI}, or {\tt PRE\_FULL\_PSI}) is used, one has to call
+the appropriate precomputation routine {\bf AFTER} setting the nodes.
+For simpler usage this has been summarised by
+\begin{center}
+  {\tt if(my\_plan.nfft\_flags \& PRE\_ONE\_PSI)
+    nfft\_precompute\_one\_psi(\&my\_plan);}
+\end{center}
+Note furthermore, that
+\begin{enumerate}
+\item {\tt FG\_PSI} and {\tt PRE\_FG\_PSI} rely on the Gaussian window
+  function,
+\item {\tt PRE\_LIN\_PSI} is actual node independent and in this case the
+  precomputation can be done before setting nodes,
+\item {\tt PRE\_FULL\_PSI} asks for quite a bit of memory.
+\end{enumerate}
+
+\subsubsection*{Doing the transform}
+Algorithm \ref{algo:nfft} is implemented as
+\begin{center}
+  {\tt nfft\_trafo(\&my\_plan);}
+\end{center}
+takes {\tt my\_plan.f\_hat} as its input and overwrites {\tt my\_plan.f}.
+One only needs one plan for several transforms of the same kind,
+i.e. transforms with equal initialisation parameters.
+For comparison, the direct calculation of \eqref{ndft} is done by
+{\tt ndft\_trafo}.
+The adjoint transforms are given by {\tt nfft\_adjoint} and {\tt
+  ndft\_adjoint}, respectively.
+
+All data with multi-indices is stored plain, in particular the Fourier
+coefficient $\hat f_{\mathbf{k}}$ is stored in {\tt my\_plan.f\_hat[k]} with
+${\text{\tt k}}:=\sum_{t=0}^{d-1} (k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1}
+N_{t'}$.
+Data vectors might be exchanged by
+\begin{center}
+  {\tt NFFT\_SWAP\_complex(my\_plan.f\_hat,new\_f\_hat);}.
+\end{center}
+
+\subsubsection*{Finalisation}
+All memory allocated by the init routine is deallocated by
+\begin{center}
+  {\tt nfft\_finalize(\&my\_plan);}
+\end{center}
+Note, that almost all (de)allocation operations of the library are done by
+{\tt fftw\_malloc} and {\tt fftw\_free}.
+Additional data, declared and allocated by the application, have to be
+deallocated by the user's program as well.
+
+\subsubsection*{Data structure and functions}
+ The library defines the structure {\tt nfft\_plan}, the most important
+ members are listed in Table \ref{table:nfft_members}.
+ Moreover, the user functions for the NFFT are collected in Table
+ \ref{table:nfft_user_fun}.
+ They all have return type {\tt void} and their first argument is of type {\tt
+ nfft\_plan*}.
+
+
+ \begin{table}[ht!]
+   \begin{center}
+     \begin{tabular}{|r l|l|l|}
+       \hline Type                 & Name           & Size
+        & Description                                              \\
+       \hline
+       \hline {\tt int}            & {\tt d}        & 1
+        & Spatial dimension $d$                                    \\
+       \hline {\tt int*}           & {\tt N}        & d
+        & Multibandwidth $\mathbf{N}$                                   \\
+       \hline {\tt int}            & {\tt N\_total} & 1
+        & Number of coefficients $|I_{\mathbf{N}}|$                     \\
+       \hline {\tt int}            & {\tt M\_total} & 1
+        & Number of nodes $M$                                      \\
+       \hline {\tt double complex*}& {\tt f\_hat}   &
+        $|I_{\mathbf{N}}|$ & Fourier coefficients $\mathbf{\hat{f}}$ or     \\
+                                   &                &
+        & adjoint coefficients $\mathbf{\hat{h}}$                      \\
+       \hline {\tt double complex*}& {\tt f}        & $M$
+        & Samples $\mathbf{f}$                                          \\
+       \hline {\tt double*}        & {\tt x}        & $dM$
+        & Sampling set ${\cal X}$                                  \\
+       \hline
+     \end{tabular}
+   \end{center}
+   \caption{Interesting members of {\tt nfft\_plan}.}
+   \label{table:nfft_members}
+ \end{table}
+
+ \begin{table}[ht!]
+   \begin{center}
+     \begin{tabular}{|l l|}
+       \hline Name & Additional arguments \\
+       \hline
+       \hline {\tt ndft\_trafo} & \\
+       \hline {\tt ndft\_adjoint} &\\
+       \hline {\tt nfft\_trafo} &\\
+       \hline {\tt nfft\_adjoint} &\\
+       \hline {\tt nfft\_init\_1d} & {\tt int N0, int M}\\
+       \hline {\tt nfft\_init\_2d} & {\tt int N0, int N1, int M}\\
+       \hline {\tt nfft\_init\_3d} & {\tt int N0, int N1, int N2, int M}\\
+       \hline {\tt nfft\_init} & {\tt int d, int* N, int M}\\
+       \hline {\tt nfft\_init\_guru} & {\tt int d, int* N, int M, int* n, int m,} \\
+       & {\tt unsigned nfft\_flags, unsigned fftw\_flags}\\
+       \hline {\tt nfft\_precompute\_one\_psi} &\\
+       \hline {\tt nfft\_check} &\\
+       \hline {\tt nfft\_finalize} &\\
+       \hline
+    \end{tabular}
+   \end{center}
+   \caption{User functions of the NFFT.}
+   \label{table:nfft_user_fun}
+  \end{table}
+
+
+%------------------------------------------------------------------------------
+ \subsection{Generalisations and nomenclature}
+%------------------------------------------------------------------------------
+The generalisations to the nonequispaced FFT in time and frequency domain, the
+nonequispaced fast (co)sine transform, and the nonequispaced sparse FFT are
+based on the same procedure as the NFFT.
+In the following we give some more details for the nonequispaced fast
+spherical Fourier transform.
+
+\subsubsection*{NFSFT}
+Compared to the NFFT routines, the NFSFT module shares a similar basic
+procedure for computing the transformations. It differs, however, slightly
+in data layout and function interfaces.
+
+The NFSFT routines depend on initially precomputed global data that limits the
+maximum degree \verb"N" that can be used for computing transformations. This
+precomputation has to be performed only once at program runtime regardless of
+how many individual transform plans are used throughout the rest. This is done
+by
+\begin{center}
+  \verb"nfsft_precompute(N,1000,0U,0U);"
+\end{center}
+Here, \verb"N" is the maximum degree that can be used in all subsequent transformations,
+\verb"1000" is the threshold for the FPTs used internally, and
+\verb"0U" and \verb"0U" are optional flags for the NFSFT and FPT. If you
+are unsure which values to use, leave the threshold at \verb"1000" and
+the flags at \verb"0U".
+
+Initialisation of a plan is done by calling one of the
+\verb"nfsft_init"-functions. We need no dimension parameter here, as in
+the NFFT case. The simplest version is a call to \verb"nfsft_init"
+specifying only the bandwidth $N$ and the number of nonequispaced nodes $M$.
+For an application-owned variable  \verb"nfsft_plan my_plan" the function call
+is
+\begin{center}
+  \verb"nfsft_init(&my_plan,N,M);"
+\end{center}
+The first argument should be uninitialised. Memory allocation is completely
+done by the init routine.
+
+After initialising a plan, one defines the nodes $(\vartheta_{j},\varphi_{j}) \in
+[0,2\pi) \times [0,\pi]$ in spherical coordinates in the member variable
+\verb"my_plan.x".
+For consistency with the other modules and the conventions used there, we
+use swapped and scaled spherical coordinates
+\begin{align*}
+  \tilde{\varphi} & :=
+    \left\{
+      \begin{array}{ll}
+        \frac{\varphi}{2\pi}, & \text{if $0 \le \varphi < \pi$}, \\[1ex]
+        \frac{\varphi}{2\pi}-1, & \text{if $\pi \le \varphi < 2\pi$},
+      \end{array}
+    \right. & \tilde{\vartheta} & := \frac{\vartheta}{2\pi}
+\end{align*}
+and identify a point from $\mathbb{S}^2$ with the vector
+$(\tilde{\varphi}, \tilde{\vartheta}) \in
+[-\frac{1}{2}, \frac{1}{2}) \times [0,\frac{1}{2}]$.
+The angles $\tilde{\varphi}_{j}$ and $\tilde{\vartheta}_{j}$ for
+the $j$-th node are assigned by
+\begin{center}
+  \begin{minipage}{10cm}
+    \verb"my_plan.x[2*j]   = /* your choice in [-0.5,0.5] */;"
+    \verb"my_plan.x[2*j+1] = /* your choice in [0,0.5] */;"
+  \end{minipage}
+\end{center}
+After setting the nodes, the same node-dependent (see the exception above)
+precomputation as for the NFFT has to be performed.
+This is done by
+\begin{center}
+  \verb"nfsft_precompute_x(&my_plan);"
+\end{center}
+which itself calls \verb"nfft_precompute_one_psi(&my_plan)" as explained above. You might modify
+the precomputation strategy by passing the appropriate NFFT flags to one of the
+more advanced \verb"nfsft_init" routines.
+Setting the spherical Fourier coefficients $\hat{f}_{k}^n$ in \verb+my_plan.f_hat+
+should be done using the helper macro \verb+NFSFT_INDEX+. This reads
+\begin{center}
+  \begin{minipage}{11cm}
+  \verb"for (k = 0; k <= N; k++)" \\
+%  \verb"{" \\
+  \verb"  for (n = -k; n <= k; n++)" \\
+%  \verb"  {" \\
+  \verb"    my_plan.f_hat[NFSFT_INDEX(k,n,&plan)] = /* your choice */;" \\
+%  \verb"  }"\\
+%  \verb"}"
+  \end{minipage}
+\end{center}
+For the NFSFT, spherical Fourier coefficients are stored in a fashion different from
+the NFFT. You should always use the helper macro \verb+NFSFT_INDEX+ for setting
+the spherical Fourier coefficients. If, in place of a NFSFT transformation, you
+would like to perform an adjoint NFSFT transformation, you set
+the values $f\left(\vartheta_{j}, \varphi_{j}\right)$ in \verb+my_plan.f+ as follows:
+\begin{center}
+  \begin{minipage}{11cm}
+  \verb"for (j = 0; j < M; j++)" \\
+%  \verb"{" \\
+  \verb"  my_plan.f[j] = /* your choice */;" \\
+%  \verb"}"
+  \end{minipage}
+\end{center}
+
+The actual transforms are computed by calling either \verb+nfsft_trafo(&my_plan)+
+for the NFSFT (see Algorithm \ref{NFSFT:Algorithm:NFSFT}) or
+\verb+nfsft_adjoint(&my_plan)+ for the adjoint NFSFT (see Algorithm
+\ref{NFSFT:Algorithm:adjointNFSFT}).
+Remember, that you must make sure that \verb+my_plan.x+ and \verb+my_plan.f_hat+
+or \verb+my_plan.f+ have been initialised appropriately prior to calling the
+corresponding transformation routine.
+On execution, \verb+nfsft_trafo+ overwrites \verb+my_plan.f+ while
+\verb+nfsft_adjoint+ overwrites \verb+my_plan.f_hat+.
+One only needs one plan for several transforms of the same kind,
+i.e. transforms with equal initialisation parameters.
+For comparison, the direct calculation of \eqref{eq.ndsft} and \eqref{eq.adjointndsft}
+are done by \verb+ndsft_trafo+ and \verb+ndsft_adjoint+, respectively.
+
+All memory allocated by the init routine is deallocated by
+\begin{center}
+  \verb+nfsft_finalize(&my_plan);+
+\end{center}
+while the memory allocated by \verb+nfsft_precompute+ gets
+freed by calling
+\begin{center}
+  \verb+nfsft_forget();+
+\end{center}
+Additional data, declared and allocated by the application, has to be
+deallocated by the user's program as well.
+
+The library defines the structure \verb+nfsft_plan+, the most important
+members are listed in Table \ref{table:nfsft_members}.
+The structure contains, public read-only (r) and public read-write (w)
+members.
+The user functions for the NFSFT are collected in Table
+\ref{table:nfsft_user_fun}.
+
+\begin{table}[ht!]
+  \begin{center}
+    \begin{tabular}{|r l|l|c|l|}
+      \hline Type                 & Name           & Size           & Type & Description \\
+      \hline
+        \verb+int+                & \verb+N+       & 1              & r    & Bandwidth $N$ \\
+        \verb+int+                & \verb+N_total+ & 1              & r    & Set to $4|\mathcal{I}_N|=4(N+1)^2$,\\
+                            &                &                &      & quadruple of the number of Fourier coefficients\\
+        \verb+int+                & \verb+M_total+ & 1              & r    & Total number of nodes $M$ \\
+        \verb+double complex*+    & \verb+f_hat+   & $4|\mathcal{I}_N|$ & w    & Fourier coefficients $\hat{\mathbf{f}}$ or\\
+                                  &                &                &      & adjoint coefficients $\hat{\mathbf{h}}$ \\
+        \verb+double complex*+    & \verb+f+       & $M$            & w    & Samples $\mathbf{f}$ \\
+        \verb+double*+            & \verb+x+       & $M$            & w    & Sampling set $\mathcal{X}$ \\
+       \hline
+      \end{tabular}
+   \end{center}
+   \caption{Interesting members of {\tt nfsft\_plan}.\label{table:nfsft_members}}
+ \end{table}
+
+ \begin{table}[ht!]
+   \begin{center}
+     \begin{tabular}{|l l|}
+       \hline Name & Additional arguments \\
+       \hline
+       \hline \verb+nfsft_precompute+    & \verb+int N, double threshold,+\\
+                                         & \verb+unsigned int nfsft_flags, unsigned int fpt_flags+\\
+       \hline \verb+nfsft_init+          & \verb+int N, int M+ \\
+       \hline \verb+nfsft_init_advanced+ & \verb+int N, int M, unsigned int nfsft_flags+ \\
+       \hline \verb+nfsft_init_guru+     & \verb+int N, int M, unsigned int nfsft_flags,+ \\
+                                         & \verb+int nfft_flags, int nfft_cutoff+ \\
+       \hline \verb+nfsft_precompute_x+  & \\
+       \hline \verb+ndsft_trafo+         & \\
+       \hline \verb+ndst_adjoint+        & \\
+       \hline \verb+nfsft_trafo+         & \\
+       \hline \verb+nfsft_adjoint+       & \\
+       \hline \verb+nfsft_finalize+      & \\
+       \hline \verb+nfsft_forget+        & \\
+       \hline
+    \end{tabular}
+   \end{center}
+   \caption{User functions of the NFSFT.\label{table:nfsft_user_fun}}
+  \end{table}
+
+Some more things should be kept in mind when using the NFSFT module:
+\begin{itemize}
+\item The bandwidth $N_{\text{max}}$ up to which global precomputation is
+  performed when calling \verb+nfsft_precompute+ is always chosen as the
+  next power of two with respect to the specified maximum bandwidth $N$.
+\item By default, the NDSFT and NFSFT transformations,
+  \verb+ndsft_trafo+ and \verb+nfsft_trafo+, are allowed to destroy the
+  input \verb+f_hat+ while the input \verb+x+ is preserved. On the contrary,
+  the adjoint NDSFT and NFSFT transformations, \verb+ndsft_adjoint+ and
+  \verb+nfsft_adjoint+, do not destroy the input \verb+f+ and \verb+x+ by
+  default. The desired behaviour can be assured by using the
+  \verb+NFSFT_PRESERVE_F_HAT+, \verb+NFSFT_PRESERVE_X+, \verb+NFSFT_PRESERVE_F+ and
+  \verb+NFSFT_DESTROY_F_HAT+, \verb+NFSFT_DESTROY_X+, \verb+NFSFT_DESTROY_F+
+  flags.
+\end{itemize}
+
+%------------------------------------------------------------------------------
+ \subsection{Inversion and solver module} \label{sect:general_proc_infft}
+%------------------------------------------------------------------------------
+ The flow chart in Figure \ref{fig:struct} shows how to use the inverse
+ transforms as implemented in the solver module of the library.
+ There is no general stopping rule implemented, since this task is highly
+ dependent on the particular application.
+  \begin{figure}[ht!]
+   \begin{center}
+     \input{struct}
+   \end{center}
+   \caption{Flow chart of the inverse transforms.\label{fig:struct}}
+ \end{figure}
+
+ Each inverse transform basically wraps an already initialised Fourier
+ transform.
+ The user specifies one of the Algorithms
+ \ref{algo:landweber}-\ref{algo:wCGNE(R)} by setting one of the flags
+ ({\tt LANDWEBER}, {\tt STEEPEST\_DESCENT}, {\tt CGNR}, {\tt CGNE}).
+ Weights and/or damping factors are used if the flags {\tt
+ PRECOMPUTE\_WEIGHT}, {\tt PRECOMPUTE\_DAMP} are set and one has to initialise
+ the members {\tt my\_iplan.w}, {\tt my\_iplan.w\_hat} in these cases.
+ Default flags are {\tt CGNR}.
+
+ In case of the NFFT, the library defines the structure {\tt infft\_plan}.
+ The members of this plan are given by Table \ref{table:infft_members}.
+ The user functions for the inverse NFFT are collected in Table
+ \ref{table:infft_user_fun}.
+ They all have return type {\tt void} and their first argument is of type {\tt
+ infft\_plan*}.
+ Replacing {\tt nfft} by any other Fourier transform gives the appropriate
+ inverse to this transform.
+
+ \begin{table}[ht!]
+   \begin{center}
+     \begin{tabular}{|r l|l|l|}
+       \hline Type               & Name                & Size           & Description                       \\
+       \hline
+       \hline {\tt double*}      & {\tt w}             & {\tt M\_total} & weights $\mathbf{w}$ \\
+       \hline {\tt double*}      & {\tt w\_hat}        & {\tt N\_total} & damping factors $\mathbf{\hat{w}}$ \\
+       \hline {\tt (FLT\_TYPE)*} & {\tt y}             & {\tt M\_total} & right hand side $\mathbf{y}$ \\
+       \hline {\tt (FLT\_TYPE)*} & {\tt f\_hat\_iter}  & {\tt N\_total} & actual solution \\
+       \hline {\tt (FLT\_TYPE)*} & {\tt r\_iter}       & {\tt M\_total} & residual vector $\mathbf{r}_{l+1}$\\
+       \hline {\tt double}       & {\tt dot\_r\_iter}  & 1 & $\|\mathbf{r}_{l+1}\|_{\mathbf{W}}^2$ \\
+       \hline
+     \end{tabular}
+   \end{center}
+   \caption{More important members of each inverse plan, where {\tt
+   (FLT\_TYPE)} is {\tt double} for the NFCT and NFST and {\tt double complex}
+   in all other cases.}
+   \label{table:infft_members}
+  \end{table}
+
+  \begin{table}[ht!]
+   \begin{center}
+    \begin{tabular}{|l l|}
+     \hline Name & Additional arguments \\
+     \hline
+     \hline {\tt infft\_init} & {\tt nfft\_plan *mv}\\
+     \hline {\tt infft\_init\_advanced} & {\tt nfft\_plan *mv, unsigned infft\_flags}\\
+     \hline {\tt infft\_before\_loop} & \\
+     \hline {\tt infft\_loop\_one\_step} &\\
+     \hline {\tt infft\_finalize} &\\
+     \hline
+    \end{tabular}
+   \end{center}
+   \caption{User functions of the inverse NFFT.}
+   \label{table:infft_user_fun}
+  \end{table}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Examples}\label{sect:ex}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The library was tested on a AMD Athlon(tm) XP 2700+, 1GB memory, SuSe-Linux,
+kernel 2.4.20-4GB-athlon, gcc version 3.3.
+In all tests with random input the nodes $\mathbf{x}_j$ and the Fourier
+coefficients $\hat f_{\mathbf{k}}$ are chosen pseudo randomly  with  $\mathbf{x}_j \in
+[-0.5,0.5]^d$ and $\hat f_{\mathbf{k}} \in [0,1] \times [0,1]{\rm i}$.
+
+%------------------------------------------------------------------------------
+\subsection{Computing your first transform}\label{sect:first_trafo}
+%------------------------------------------------------------------------------
+
+The following code summarises the steps of Section \ref{sect:general_proc} and
+computes a univariate NFFT from 14 Fourier coefficients and 19 nodes.
+Note that this routine is part of {\tt simple\_test.c} in {\tt examples/nfft/}
+and uses additional routines as defined {\tt include/util.h} to set up and
+show vectors.
+\begin{verbatim}
+void simple_test_nfft_1d()
+{
+  nfft_plan p;
+  int N=14;
+  int M=19;
+
+  nfft_init_1d(&p,N,M);
+
+  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+  if(p.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&p);
+
+  nfft_vrand_unit_complex(p.f_hat,p.N_total);
+  nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, f_hat");
+
+  ndft_trafo(&p);
+  nfft_vpr_complex(p.f,p.M_total,"ndft, f");
+
+  nfft_trafo(&p);
+  nfft_vpr_complex(p.f,p.M_total,"nfft, f");
+
+  nfft_finalize(&p);
+}
+\end{verbatim}
+
+%------------------------------------------------------------------------------
+\subsection{Computation time vs. problem size}
+%------------------------------------------------------------------------------
+The program {\tt nfft\_times} in the same directory compares the computation
+time of the FFT (\cite{fftw}, {\tt FFTW\_MEASURE}), the straightforward
+evaluation of \eqref{eq:nfft}, denoted by NDFT, and the NFFT for increasing
+total problem sizes $|I_{\mathbf{N}}|$ and space dimensions $d=1,2,3$, where $
+\mathbf{N}=(N,\hdots,N)^{\top},\;N\in\N$.
+While the nodes for the FFT are restricted to the lattice $\mathbf{N}^{-1}\odot
+I_{\mathbf{N}}$, we choose $M=N^d$ random nodes for the NDFT and the NFFT.
+Within the latter, we use the oversampling factor $\sigma=2$, the cut-off
+$m=4$, and the Kaiser-Bessel window function ({\tt PRE\_PSI}, {\tt
+  PRE\_PHI\_HUT}).
+This results in a fixed accuracy of $E_{\infty}:=\|\mathbf{f}-
+\mathbf{s}\|_{\infty}/\|\mathbf{\hat{f}}\|_1\approx 10^{-8}$ for $d=1,2,3$.
+
+\begin{table}[ht!]
+  \centering
+  \begin{tabular}{|r|r|r|r||r|r|r|r|}
+    \hline
+    $l_N$ & FFT & NDFT & NFFT &
+    $l_N$ & FFT & NDFT & NFFT\\
+    \hline
+\multicolumn{4}{|c||}{$d=1$} & \multicolumn{4}{c|}{$d=2$}\\ \hline
+$3$&    $1.3e-07$&      $8.7e-06$&      $4.6e-06$&      $6$&    $9.9e-07$&      $5.7e-04$&      $3.2e-04$ \\
+$4$&    $2.0e-07$&      $3.5e-05$&      $8.7e-06$&      $8$&    $4.4e-06$&      $9.2e-03$&      $1.3e-03$ \\
+$5$&    $4.0e-07$&      $1.4e-04$&      $1.7e-05$&      $10$&   $2.1e-05$&      $1.5e-01$&      $5.2e-03$ \\
+$6$&    $8.9e-07$&      $5.6e-04$&      $3.6e-05$&      $12$&   $1.2e-04$&      $2.4e+00$&      $2.3e-02$ \\
+$7$&    $2.2e-06$&      $2.2e-03$&      $7.2e-05$&      $14$&   $1.7e-03$&      $3.8e+01$&      $1.5e-01$ \\
+$8$&    $4.8e-06$&      $9.0e-03$&      $1.4e-04$&      $16$&   $2.1e-02$&      *&              $6.8e-01$ \\
+$9$&    $1.1e-05$&      $3.6e-02$&      $2.9e-04$&      $18$&   $8.4e-02$&      *&              $2.8e+00$ \\
+$10$&   $2.4e-05$&      $1.4e-01$&      $6.0e-04$&      $20$&   $3.2e-01$&      *&              $1.2e+01$ \\
+$11$&   $5.7e-05$&      $5.8e-01$&      $1.4e-03$&      $22$&   $1.4e+00$&
+    *&              $5.3e+01$ \\ \cline{5-8}
+$12$&   $1.5e-04$&      $2.3e+00$&      $3.2e-03$&
+    \multicolumn{4}{c|}{$d=3$}\\ \cline{5-8}
+$13$&   $5.5e-04$&      $9.4e+00$&      $8.2e-03$&      $9$&    $1.0e-05$&      $3.7e-02$&      $2.5e-02$ \\
+$14$&   $1.7e-03$&      $3.8e+01$&      $2.0e-02$&      $12$&   $1.1e-04$&      $2.4e+00$&      $2.5e-01$ \\
+$15$&   $3.8e-03$&      $1.5e+02$&      $4.9e-02$&      $15$&   $3.4e-03$&      $1.5e+02$&      $2.4e+00$ \\
+$16$&   $8.2e-03$&      *&              $1.2e-01$&      $18$&   $5.2e-02$&      *&              $2.1e+01$ \\
+$17$&   $1.9e-02$&      *&              $2.4e-01$&      $21$&   $9.0e-01$&      *&              $1.8e+02$ \\
+$18$&   $4.5e-02$&      *&              $3.6e-01$&       & & & \\
+$19$&   $9.2e-02$&      *&              $9.8e-01$&       & & & \\
+$20$&   $1.9e-01$&      *&              $2.1e+00$&       & & & \\
+$21$&   $4.2e-01$&      *&              $4.2e+00$&       & & & \\
+$22$&   $1.0e-00$&      *&              $9.5e+00$&       & & & \\
+    %\input{images/nfft/timings_nice_dagobert}
+    \hline
+  \end{tabular}
+  \caption{Computation time in seconds with respect to $l_N=\log_2|I_{
+  \mathbf{N}}|$.
+    Note that we used accumulated measurements in case of small times and the
+    times (*) are not displayed due to the large response time in comparison
+    to the FFT time.}
+  \label{tab:TimeSpace_1}
+\end{table}
+
+We conclude the following: The FFT and the NFFT show the expected
+$\cO(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}|)$ time complexity, i.e., doubling the total size $|I_{\mathbf{N}}|$
+results in only slightly more than twice the computation time, whereas the
+NDFT behaves as $\cO(|I_{\mathbf{N}}|^2)$.
+Note furthermore, that the constant in the $\cO$-notation is independent of
+the space dimension $d$ for the FFT and the NDFT, whereas the computation time
+of the NFFT increases considerably for larger $d$.
+
+%------------------------------------------------------------------------------
+\subsection{Accuracy vs. window function and cut-off parameter $m$}
+%------------------------------------------------------------------------------
+The accuracy of the Algorithm \ref{algo:nfft}, measured by
+\begin{equation*}
+E_2=\frac{\|\mathbf{f}- \mathbf{s}\|_2}{\|\mathbf{f}\|_2}
+=\left({\sum_{j=0}^{M-1}|f_j-s\left(
+\mathbf{x}_j\right)|^2}/{\sum_{j=0}^{M-1}
+    |f_j|^2}\right)^{\frac{1}{2}}
+\end{equation*}
+and
+\begin{equation*}
+E_{\infty}=\frac{\|\mathbf{f}- \mathbf{s}\|_{\infty}}{\|\mathbf{\hat{f}}\|_1}
+={\max_{0\le j<M}|f_j-s\left(
+\mathbf{x}_j\right)|}/{\sum_{\mathbf{k} \in I_{\mathbf{N}}} |\hat
+  f_{\mathbf{k}}|}
+\end{equation*}
+is shown in Figure \ref{fig:accuracy}.
+
+ \begin{figure}[ht!]
+   \begin{center}
+    \begin{tabular}{c c c}
+     \includegraphics[width=4.8cm]{images/accuracy1} &
+     \includegraphics[width=4.8cm]{images/accuracy2} &
+     \includegraphics[width=4.8cm]{images/accuracy3} \\
+     \includegraphics[width=4.8cm]{images/accuracy4} &
+     \includegraphics[width=4.8cm]{images/accuracy5} &
+     \includegraphics[width=4.8cm]{images/accuracy6}
+    \end{tabular}
+   \end{center}
+   \caption{The error $E_2$ (top) and $E_{\infty}$ (bottom) with respect to $m$,
+     from left to right $d=1,2,3$ ($N=2^{12},2^6,2^4,\, \sigma=2,\,M=10000$),
+     for Kaiser Bessel- (circle), Sinc- (x), B-Spline- ($+$), and Gaussian window (triangle).}
+   \label{fig:accuracy}
+ \end{figure}
+
+%------------------------------------------------------------------------------
+\subsection{Computing an inverse transform}\label{sect:rec_example}
+%------------------------------------------------------------------------------
+The usage of the inverse NFFT is demonstrated by {\tt simple\_test} in {\tt
+  examples/solver}.
+Executing the {\sc MatLab} script {\tt glacier.m} in the same  directory
+produces the following two plots.
+Note that the corresponding C-file {\tt glacier.c} is called from the {\sc
+  MatLab} script.
+\begin{figure}[ht!]
+  \begin{center}
+    \begin{tabular}{cc}
+      \includegraphics[width=6cm]{images/glacier1} &
+      \includegraphics[width=6cm]{images/glacier2}
+    \end{tabular}
+  \end{center}
+  \caption{Reconstruction of the glacier from samples at $M=8345$ nodes ({\tt
+      vol87.dat} from \cite{Franke.Daten}) with $N_0=N_1=256$  and $40$
+      iterations. \label{Fig:glacier}}
+\end{figure}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Applications}\label{sec:appl}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+In this section we describe important applications which are based on the NFFT
+kernel.
+One can find these programs in the directory {\tt applications}.
+
+%------------------------------------------------------------------------------
+\subsection{Summation of smooth and singular kernels}
+%------------------------------------------------------------------------------
+
+We are interested in the fast evaluation of linear combinations of radial
+functions, i.e. the computation of
+\begin{equation*}
+  g\left(\mathbf{y}_j\right) := \sum_{k=1}^N \alpha_k K\left(\left\|\mathbf{y}_j-
+  \mathbf{x}_k\right\|_2\right)
+\end{equation*}
+for $j=1,\hdots,M$ and nodes $\mathbf{x}_k, \mathbf{y}_j \in \R^d$.
+For smooth kernels $K$ with an additional parameter $c>0$, e.g. the Gaussian
+$K(x)=\e^{-x^2/c^2}$, the multiquadric $K(x)=\sqrt{x^2+c^2}$ or the inverse
+multiquadric $K(x)=1/\sqrt{x^2+c^2}$ our algorithm requires $\cO(N+M)$
+arithmetic operations.
+In the case of singular kernels $K$, e.g.,
+\begin{equation*}
+  \frac{1}{x^2},\; \frac{1}{|x|}, \; \log |x|, \;
+  x^2 \log |x|, \; \frac{1}{x}, \;
+  \frac{\sin(c x)}{x},\; \frac{\cos(c x)}{x}, \; \cot(cx)
+\end{equation*}
+an additional regularisation procedure must be incorporated and the algorithm
+has the arithmetic complexity  $\cO(N \log N +M)$ or $\cO(M\log M + N)$ if
+either the target nodes $\mathbf{y}_j$ or the source nodes $\mathbf{x}_k$ are
+``reasonably uniformly distributed''.
+
+Note that the proposed fast algorithm \cite{post02,postni04,FeSt03}
+generalises the diagonalisation of convolution matrices by Fourier matrices to
+the setting of arbitrary nodes.
+In particular, this yields nearly the same arithmetic complexity as the FMM
+\cite{beatgreen97} while allowing for an easy change of various kernels.
+A recent application in particle simulation is given in \cite{popori05}.
+The directory {\tt applications/fastsum} contains C and {\sc MatLab} programs
+that show how to use the fast summation method.
+
+%------------------------------------------------------------------------------
+\subsection{Fast Gauss transform}
+%------------------------------------------------------------------------------
+
+This is a special case of the fast summation method, we compute approximations
+of the following sums.
+Given complex coefficients $\alpha_k \in \C$ and source nodes
+$x_k\in[-\frac{1}{4},\frac{1}{4}]$, our goal consists in the fast evaluation
+of the sum
+\begin{equation*}
+  g\left(y\right)=\sum_{k=1}^N \alpha_k {\rm e}^{-\sigma|y-x_k|^2}
+\end{equation*}
+at the target nodes $y_j \in [-\frac{1}{4},\frac{1}{4}]$, $j=1,\ldots,M$,
+where  $\sigma =a +{\rm i} b$, $a>0$, $b\in\R$, denotes a  complex parameter.
+For details see \cite{KuPoSt06} and the related paper \cite{AnBe04} for
+applications.
+All numerical examples of \cite{KuPoSt06} are produced by the programs in {\tt
+  applications/fastgauss}.
+
+%------------------------------------------------------------------------------
+\subsection{Summation of zonal functions on the sphere}
+%------------------------------------------------------------------------------
+
+Given $M,N \in \N$, arbitrary source nodes $\mathbf{\eta}_k \in \S^2$ and real
+coefficients $\alpha_k\in\R$, evaluate the sum
+\begin{equation*}
+  g\left(\mathbf{\xi}\right) := \sum_{k = 1}^N \alpha_k K\left(\mathbf{\eta}_k \cdot
+  \mathbf{\xi}\right)
+\end{equation*}
+at the target nodes $\mathbf{\xi}_j\in\S^2$, $j=1,\hdots,M$.
+The naive approach for evaluating this sum takes $\cO(MN)$ floating point
+operations if we assume that the zonal function $K$ can be evaluated in
+constant time or that all values $K(\mathbf{\eta}_k \cdot \mathbf{\xi}_j)$ can be stored
+in advance.
+
+In contrast, our scheme is based on the nonequispaced fast spherical Fourier
+transform, has arithmetic complexity $\cO(M+N)$, and can be easily adapted to
+such different kernels $K$ as
+  \begin{enumerate}
+  \item the Poisson kernel
+    $Q_{h}:[-1,1] \rightarrow \R$ with $h \in (0,1)$  given by
+    \[
+    Q_{h}(x) := \frac{1}{4\pi} \frac{1-h^2}{\left(1-2 h x+h^2\right)^{3/2}},
+    \]
+  \item  the singularity kernel
+    $S_{h}:[-1,1] \rightarrow \R$ with $h \in (0,1)$  given by
+    \[
+    S_{h}(x) := \frac{1}{2\pi} \frac{1}{\left(1-2 h x +h^2\right)^{1/2}},
+    \]
+\item the locally supported kernel
+ $L_{h,\lambda}:[-1,1] \rightarrow \R$ with $h \in (-1,1)$ and
+ $\lambda \in \mathbb{N}_0$ given by
+ \[
+    L_{h,\lambda}(x) :=
+    \left\{\begin{array}{l@{\quad \text{if} \quad}rcl}
+        0 & -1 &\le x \le& h, \\
+        \frac{\lambda+1}{2\pi(1-h)^{\lambda+1}}\left(x-h\right)^{\lambda} &
+        h & <  x \le& 1,
+      \end{array}\right.
+    \]
+or
+\item the spherical Gaussian kernel
+  $G_{\sigma}:[-1,1] \rightarrow
+  \R$ with $\sigma>0$
+  \[
+  G_{\sigma}(x) := \e^{2\sigma x-2\sigma}\,.
+  \]
+  \end{enumerate}
+
+For details see \cite{KeKuPo06}, all corresponding numerical examples can be
+found in {\tt applications\ /fastsumS2}.
+
+%------------------------------------------------------------------------------
+\subsection{Iterative reconstruction in magnetic resonance imaging}
+%------------------------------------------------------------------------------
+
+In magnetic resonance imaging (MRI) the raw data is measured in k-space, the
+domain of spatial frequencies.
+Methods that use a non-Cartesian sampling grid in k-space, e.g. a spiral, are
+becoming increasingly important.
+Reconstruction is usually performed by resampling the data onto a Cartesian
+grid and the usage of the standard FFT - often denoted by gridding.
+Another approach, the inverse model, is based on an implicit discretisation.
+Both discretisations are solved efficiently by means of the NFFT and the
+inverse NFFT, respectively.
+Furthermore, a unified approach to field inhomogeneity correction has been
+included, see \cite{KnKuPo,EgKnPo06} for details.
+
+%------------------------------------------------------------------------------
+\subsection{Computation of the polar FFT}
+%------------------------------------------------------------------------------
+
+The polar FFT is a special case of the NFFT, where one computes the Fourier
+transform on particular grids.
+Of course, the polar as well as a so-called pseudo-polar FFT can be computed
+very accurately and efficiently by the NFFT.
+Furthermore, the reconstruction of a $2d$ signal from its Fourier transform
+samples on a (pseudo-)polar grid by means of the inverse nonequispaced FFT is
+possible under certain density assumptions.
+For details see \cite{FeKuPo06} and for further applications
+\cite{AvCoDoElIs}.
+
+\begin{figure}[ht]
+  \centering
+  \subfigure
+  {\includegraphics[width=0.3\textwidth]{images/polar_grid}}\hfill
+  \subfigure
+  {\includegraphics[width=0.3\textwidth]{images/modified_polar_grid}}\hfill
+  \subfigure
+  {\includegraphics[width=0.3\textwidth]{images/linogram_grid}}
+ \caption{Left to right: polar, modified polar, and linogram grid of size
+   $R=16$, $T=32$. \label{fig:grids}}
+\end{figure}
+
+%------------------------------------------------------------------------------
+\subsection{Radon transform, computer tomography, and ridgelet transform}
+%------------------------------------------------------------------------------
+
+We are interested in efficient and high quality reconstructions of digital $N
+\times N$ medical images from their Radon transform.
+The standard reconstruction algorithm, the filtered backprojection, ensures a
+good quality of the images at the expense of $\cO( N^3 )$ arithmetic
+operations.
+Fourier reconstruction methods reduce the number of arithmetic operations to
+${\cal O}( N^2 \log N )$.
+Unfortunately, the straightforward Fourier reconstruction algorithm suffers
+from unacceptable artifacts so that it is useless in practice.
+A better quality of the reconstructed images can be achieved by our algorithm
+based on NFFTs.
+For details see \cite{PoSt01IMA, PoSt00SPIE, PoSt02JFAA} and the directory
+{\tt applications/radon}.
+
+Another application of the discrete Radon transform is the discrete Ridgelet
+transform, see e.g. \cite{CaDeDoYi}.
+A simple test program for denoising an image by hard thresholding the ridgelet
+coefficients can be found in {\tt applications/radon}.
+It uses the NFFT-based discrete Radon transform and the translation-invariant
+discrete Wavelet transform based on {\sc MatLab} toolbox WaveLab850
+\cite{WaveLab}.
+See \cite{FeMa05} for details.
+
+\bibliographystyle{abbrv}
+%\bibliographystyle{alpha}
+\bibliography{../references/references}
+\end{document}
diff --git a/doc/tutorial/paper_brief.tex b/doc/tutorial/paper_brief.tex
new file mode 100755
index 0000000..cfa40ae
--- /dev/null
+++ b/doc/tutorial/paper_brief.tex
@@ -0,0 +1,2001 @@
+%==============================================================================
+%\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+\documentclass[acmtoms]{acmtrans2m}
+%==============================================================================
+\acmVolume{V}
+\acmNumber{N}
+\acmYear{08}
+\acmMonth{M}
+
+% LaTeX packages
+\usepackage{caption}
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[plain,Alg.]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+\usepackage{multirow}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0.2}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+  \hspace*{0ex} \hfill
+  \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+  1.4ex\hrule  width 1.4ex} \vrule height 1.5ex}
+}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+\DeclareCaptionLabelSeparator{periodem}{.\hskip 1em}
+\captionsetup{font=footnotesize,labelfont=,labelsep=periodem}
+
+%\captionnamefont{\footnotesize}
+%\captiontitlefont{\footnotesize}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\markboth{Keiner, Kunis, Potts}{NFFT, nonequispaced fast Fourier transforms}
+
+\title{Using NFFT~3 -- a software library for various nonequispaced fast
+  Fourier transforms}
+\author{
+  Jens Keiner\\
+  University of L\"ubeck\\
+  23560 L\"ubeck, Germany\\
+  keiner at math.uni-luebeck.de
+  \and
+  Stefan Kunis\\
+  Chemnitz University of Technology\\
+  09107 Chemnitz, Germany\\
+  kunis at mathematik.tu-chemnitz.de
+  \and
+  Daniel Potts\\
+  Chemnitz University of Technology\\
+  09107 Chemnitz, Germany\\
+  potts at mathematik.tu-chemnitz.de
+  }
+\begin{abstract}
+  NFFT~3 is a software library that implements the nonequispaced fast Fourier
+  transform (NFFT) and a number of related algorithms, e.g. nonequispaced fast
+  Fourier transforms on the sphere and iterative schemes for inversion. This is
+  to provide a survey on the mathematical concepts behind the NFFT and its variants,
+  as well as a general guideline for using the library. Numerical examples for
+  a number of applications are given.
+\end{abstract}
+
+\category{G.1}{F.2.1}{Numerical analysis, Computation of transforms}
+\terms{Algorithms, Documentation, Theory}
+\keywords{fast Fourier transforms, approximative algorithms}
+
+\begin{document}
+\maketitle
+%===============================================================================
+\section{Introduction} \label{sect:1}
+%===============================================================================
+\setcounter{equation}{0}
+
+NFFT~3 \cite{nfft3} is a C software library for computing
+the nonequispaced fast Fourier transform (NFFT); see Appendix \ref{A.4} for
+alternative denominations, further approaches, and references.
+At the heart of the library is a fast algorithm that generalizes the
+ubiquitous FFT \cite{CoTu65} from equally spaced to arbitrary sampling
+points/spatial nodes, hence the name NFFT; see Appendix \ref{appendix.nfft}.
+Our implementation is based on the popular FFTW library \cite{FFTW05}.
+Unlike the FFT, the NFFT is not trivially inverted, which compells one to
+resort to iterative techniques. Our library also implements these iterative
+algorithms for inversion, as well as several other discrete transforms related to
+or based on the NFFT. This paper is to present an overview over NFFT~3, the
+underlying algorithmic concepts, and intents to serve as a general guideline.
+
+We start in Section \ref{sect:nfft} with the definition of the nonequispaced
+discrete Fourier transform (NDFT) as a generalization of the discrete
+Fourier transform (DFT) to arbitrary nodes. The NFFT algorithm, its key properties,
+and differences to the classical FFT are discussed.
+Having settled the relevant definitions, the basic principles
+of using the NFFT~3 software library are described in Section \ref{sect:lib}.
+%shows how to compile and install the software package on
+%your computer system.
+%A small example in one dimension demonstrates the basic principles.
+An overview over the software interface to the NFFT library routines concludes
+this section.
+In Section \ref{sect:gen}, several transforms that derive from the original NFFT
+are described. This includes, among others, the NFFT on the unit sphere and
+iterative schemes for inversion of the NFFT. Section \ref{sect:sum} is to summarize
+the theoretical arithmetic costs of our algorithms and presents actual
+performance measurements for our implementation.
+In the final Section \ref{sect:exap}, a number of elementary numerical examples
+as well as more advanced applications are given.
+
+We have restricted ourselves to describe brief recipes which should be
+sufficient for most users. For the experienced user, a comprehensive software
+interface documentation is provided within the downloadable software package
+\cite[doc/refman.pdf]{nfft3}.
+
+%===============================================================================
+\section{Nonequispaced discrete Fourier transform} \label{sect:nfft}
+%===============================================================================
+\setcounter{equation}{0}
+
+Fast Fourier transforms (FFTs) have recently been generalized to
+arbitrary sampling situations; see
+\cite{duro93,bey95,AnDa96,st97,ware98,postta01} and the references in Appendix
+\ref{A.4}.
+A convenient approach is to define the discrete Fourier transform (DFT) as the
+evaluation of a trigonometric polynomial, given by its Fourier coefficients,
+at equispaced spatial nodes. This can then be generalized to arbitrary nodes.
+
+\subsection{Discrete Fourier transform}
+Following standard conventions \cite{loan,FFTW05} the (forward) discrete Fourier
+transform (DFT) is defined as the calculation of the sums
+\begin{equation} \label{eq.dft}
+  f_{j} = \sum_{k = 0}^{N-1} \hat{f}_{k} \mathrm{e}^{-2\pi\mathrm{i}jk/N} \qquad
+  (j=0,\ldots,N-1)
+\end{equation}
+for $N \in \mathbb{N}$ and given coefficients $\hat{f}_{k}\in\C$.
+The transform is readily inverted, i.e.,
+\begin{equation}
+  \label{eq.idft}
+  \hat{f}_{k} = \frac{1}{N} \sum_{j = 0}^{N-1} f_{j} \mathrm{e}^{2\pi\mathrm{i}kj/N}.
+\end{equation}
+Clearly, the computation of these transforms requires $\mathcal{O}(N^{2})$
+arithmetic operations in general. Fast Fourier transforms (FFTs) are
+$\mathcal{O}(N \log N)$ algorithms to compute the same result.
+
+In matrix-vector notation, the DFT can be written as the matrix-vector product
+\begin{align*}
+  \mathbf{f} = \mathbf{F} \, \mathbf{\hat{f}}, \quad
+\mathbf{F} =
+(\mathrm{e}^{-2\pi\mathrm{i}jk/N})_{j,k=0,\ldots,N}
+\end{align*}
+with vectors $\mathbf{f} = (f_j)_{j=0,\ldots,N-1}$,
+$\mathbf{\hat{f}} = (\hat{f}_k)_{k=0,\ldots,N-1}$,
+and the Fourier matrix $\mathbf{F}$.
+%= (\mathrm{e}^{-2\pi\mathrm{i}jk/N})_{j,k=0,\ldots,N}$.
+The inverse transform is equivalent to $\mathbf{\hat{f}} = \tfrac{1}{N}
+\mathbf{F}^{\adj} \, \mathbf{f}$.
+It is straightforward to generalize these concepts to multidimensional
+transforms; see Section \ref{subsect.definition} below. But before we
+define the NDFT, some notation is at order.
+
+\subsection{Notation}
+A $d$-dimensional nonequispaced discrete Fourier transform is defined by a set
+of arbitrary spatial nodes $\mathcal{X}$ and a frequency bandwidth vector
+$\mathbf{N}$.
+Each node $\mathbf x_j$ in the sampling set
+${\cal X}:=\{\mathbf{x}_j \in \T^d:\,j=0,\hdots,M-1\}$ is drawn from the
+$d$-dimensional torus $\mathbb{T}^d \cong [-\tfrac{1}{2},\tfrac{1}{2})^d$
+with the number of nodes equal to $|\mathcal{X}| = M$.
+
+For each dimension $t = 0,\ldots,d-1$, the bandwidth $N_{t} \in 2\N$ is
+defined as a fixed even number. These bandwidths are collected in the
+vector $\mathbf{N} := \left({N_0},\ldots,N_{d-1}\right)^{\top}$.
+Let us define the multi-index set
+\begin{equation*}
+  I_{\mathbf{N}} :=
+  \mathbb{Z}^d \cap \prod_{t=0}^{d-1} \left[-\tfrac{N_t\rule[-0.4ex]{0ex}{1ex}}{2},
+\tfrac{\rule[-0.4ex]{0ex}{1ex}N_t}{2}\right)
+=\left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in
+  \Z^d: - \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\}.
+\end{equation*}
+Then the set $I_{\mathbf{N}}$ is a representation of all possible frequencies
+in a transform. For simplicity, we use the convention that a multi-index
+$\mathbf{k}$ can also reference elements in vectors or rows and columns of matrices
+as if it were linearized to $k:=\sum_{t=0}^{d-1}
+(k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1} N_{t'}$.
+
+The inner product between a frequency index $\mathbf{k}$ and a node $\mathbf{x}$
+is defined as usual, $\mathbf{k} \mathbf{x}:=k_0 x_0 +\hdots+
+k_{d-1} x_{d-1}$.
+Furthermore, we define the component-wise vector product $\mathbf{\sigma} \odot
+\mathbf{N}:=\left(\sigma_0 N_0, \hdots, \sigma_{d-1} N_{d-1}, \right)^{\top}$,
+and the reciprocal of a vector $\mathbf{N}$ with nonzero components, $\mathbf{N}^{-1}:=
+\left({N_0}^{-1},\ldots,{N_{d-1}^{-1}}\right)^{\top}$.
+
+The class of functions $f: \T^d \rightarrow \C$ that is naturally associated
+with an index set $I_{\mathbf{N}}$ is the space of $d$-variate, one-periodic
+trigonometric polynomials of degree at most $N_t$ along each dimension $t$,
+$
+  T_{\mathbf{N}}:={\rm
+span}\left(\eim{\mathbf{k}\,\mathbf{\cdot}\,}:\,\mathbf{k}
+  \in I_{\mathbf{N}}\right)
+$.
+This space has dimension $\dim T_{\mathbf{N}} = |I_{\mathbf{N}}| = N_{0} \cdot
+\ldots \cdot N_{d-1}$.
+
+%-------------------------------------------------------------------------------
+\subsection{Definition}
+\label{subsect.definition}
+%-------------------------------------------------------------------------------
+We are now ready to define the \emph{nonequispaced discrete Fourier transform (NDFT)}
+as a generalization of the forward DFT \eqref{eq.dft} to arbitrary nodes.
+Given Fourier coefficients $\hat f_{\mathbf{k}} \in \C$,
+$\mathbf{k}\in I_{\mathbf{N}}$, as input, the NDFT is defined as the evaluation
+of the corresponding trigonometric polynomial $f \in T_{\mathbf{N}}$ at the
+set of $M$ arbitrary nodes $\mathcal{X}$, i.e., the calculation of the sums
+\begin{equation}
+  \label{eq:nfft}
+  f_j = \sum_{\mathbf{k}\in I_{\mathbf{N}}} \hat{f}_{\mathbf{k}}
+  \eim{\mathbf{k}\mathbf{x}_j} \qquad (j=0,\hdots,M-1).
+\end{equation}
+To see how this compares with the definition of the DFT, take
+$\mathbf{N}=(N,\hdots,N)^{\top}$, $N\in 2\N$, and $N^d$
+equispaced nodes $\mathbf{x}_{\mathbf{j}}={\frac{1}{N}}\mathbf{j}$,
+$\mathbf{j} \in I_{\mathbf{N}}$. Then \eqref{eq:nfft}
+reduces (up to an index shift) to a usual multidimensional forward
+DFT.
+
+The NDFT \eqref{eq:nfft} too can be written as a matrix-vector product,
+\begin{equation*}
+  \mathbf{f} = \mathbf{A} \mathbf{\hat{f}},
+\end{equation*}
+with the vectors $\mathbf{f} := \left(f_j\right)_{j=0,\hdots,M-1}$,
+$\mathbf{\hat{f}} :=(\hat{f}_{\mathbf{k}})_{\mathbf{k}\in
+I_{\mathbf{N}}}$, and the nonequispaced Fourier matrix $\mathbf{A}
+:= \left(\eim{\mathbf{k}\mathbf{x}_j}\right)_{j=0,\hdots,M-1;\;\mathbf{k}\in
+I_{\mathbf{N}}}$.
+Typically, the matrix $\mathbf{A}$ is not square. Even if this should be the case,
+it is usually neither orthogonal nor has an inverse. Therefore,
+the definition of an inverse NDFT transform is not canonical.
+Instead, it is customary to define the \emph{adjoint NDFT} by
+the matrix-vector product
+\[
+  \mathbf{\hat{h}} = \mathbf{A}^{\adj} \mathbf{f}.
+\]
+This is equivalent to the sums
+\begin{equation}
+  \label{eq:nfftH}
+  \hat{h}_{\mathbf{k}}  = \sum_{j=0}^{M-1} \hat{f}_{ j} \eip{\mathbf{k}
+  \mathbf{x}_j} \qquad (\mathbf{k}\in I_{\mathbf{N}}).
+\end{equation}
+
+The NFFT algorithm, implemented in our library, is a fast approximate algorithm
+to compute the sums in \eqref{eq:nfft}. It contains also a fast algorithm to
+compute the adjoint transform \eqref{eq:nfftH}.
+
+%-------------------------------------------------------------------------------
+\subsection{Key features}
+%-------------------------------------------------------------------------------
+A $d$-dimensional DFT of degree $N$ along each dimension has $N^d$
+input and output coefficients. This generally requires $\mathcal{O}(N^{d+1})$
+to compute the transform. FFTs reduce this to $\mathcal{O}(N^{d} \log N)$.
+
+The cost for nonequispaced fast transforms is similar. However, it is important
+to note that there the number of nodes as well as their configuration are arbitrary.
+This generally implies $M \neq |I_{\mathbf{N}}|$.
+The direct calculation of the sums in \eqref{eq:nfft}, an algorithm which we
+also denote NDFT, requires $\cO(M |I_{\mathbf{N}}|)$ floating point operations.
+%and uses no additional scratch memory.
+Since the number of nodes $M$ is typically of order $|I_{\mathbf{N}}|$, this cost
+is considered too expensive for most applications.
+The NFFT~3 library implements a fast approximate algorithm, called
+NFFT, which computes the same result using only
+${\cal O}\left(|I_{\mathbf{N}}| \log |I_{\mathbf{N}}|  + |\log \varepsilon|^d
+M\right)$ operations.
+Here, $\varepsilon$ is the desired accuracy of the computation. The
+constant contained in this notation depends on the amount of extra
+memory spent for precomputation; see Appendix \ref{sect:windows}.
+
+Let us briefly compare NDFT/NFFT and classical DFT/FFT to observe some
+key features and differences:
+While a multidimensional DFT/FFT is uniquely defined by the bandwidth
+vector $\mathbf{N}$ alone, i.e., the sampling set $\mathcal{X}$ is fixed,
+the NDFT/NFFT also depend on the actual choice of $\mathcal{X}$;
+see Subsection \ref{subsect.definition}.
+FFT algorithms are usually exact algorithms with small errors in the result
+caused only by limitations of floating point arithmetic.
+The NFFT algorithm purposely introduces a systematic error in the computation
+to achieve its favorable arithmetic cost.
+This additional error can be controlled, and, if deemed necessary, can be
+reduced to the order of machine precision.
+To this end, the NFFT uses an \emph{oversampled} FFT internally (in our case
+we use routines from FFTW) together with a pre- and post-processing step.
+%While the pre-processing step is exact, the post-processing step contains a
+%\emph{truncated} approximation scheme.
+This introduces two additional parameters,
+an \emph{oversampling factor} and a \emph{truncation parameter}, that
+control the accuracy of the NFFT. More details are found in Appendix
+\ref{appendix.nfft}.
+
+%\textbf{Dem ersten Referee folgend, koennten hier mehr Details zum Algorithmus
+%stehen, insbesondere welche zusaetzlichen Parameter der Benutzer jetzt
+%einstellen kann. Gut waeren sicher Verweise auf Stellen weiter hinten, die auf
+%einzelne Punkte genauer eingehen. Ich denke, eine gute Erklaerung der
+%zusaetzlichen Freiheitsgrade und Parameter ist sehr wichtig fuer das
+%Verstaendnis.}
+%For now, it suffices to note that the NFFT algorithm has a similar complexity
+%than the classical FFT algorithm but that it is an approximate algorithm whose
+%accuracy is controlled by the user.
+
+%===============================================================================
+\section{Guidelines for using the library} \label{sect:lib}
+%===============================================================================
+NFFT~3 is a free software library completely written in C.
+The downloadable source code comes as a GNU-style package and follows standard
+conventions. Brief installation instructions and a source tree can be found in
+Appendix \ref{sect:inst}.
+To compile and link programmes that use NFFT~3, you also need the FFTW library
+\cite{fftw} in version 3.0.0 or better.
+
+%-------------------------------------------------------------------------------
+\subsection{Interface} \label{sect:general_proc}
+%-------------------------------------------------------------------------------
+The interface of NFFT~3 resembles that of FFTW 3. A transform is
+specified by creating a \emph{plan} -- a data structure that contains the
+information to determine the characteristics of a transform. In contrast to
+FFTW 3, it is also necessary to call a precomputation routine, once the
+nodes $\cal X$ have been provided. After these initial steps, transforms are
+executed on input data by invoking an execution routine.
+At the end of its lifetime, a plan is finalized and all associated data
+structures are destroyed.
+
+%-------------------------------------------------------------------------------
+\subsection{Typical workflow} \label{sect:general_ex}
+%-------------------------------------------------------------------------------
+This brief example is to illustrate the basic principles. It shows how to
+compute a one-dimensional NFFT.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Creating a plan}
+%-------------------------------------------------------------------------------
+An NFFT plan \verb"p" is declared by
+\begin{verbatim}
+  nfft_plan p;
+\end{verbatim}
+The simplest way to initialize the plan for a one-dimensional transform is to
+call
+\begin{verbatim}
+  nfft_init_1d(&p,N0,M);
+\end{verbatim}
+The arguments to \verb"nfft_init_1d" are the pointer \verb"&p" to the yet
+uninitialized plan, the number of Fourier
+coefficients \verb"N0", and the number of nodes \verb"M".
+This creates and initializes all data structures inside the
+plan. Memory for Fourier coefficients, nodes, and
+function values is allocated automatically.
+
+%But to completely specify the transform, we also have to provide the
+%nodes.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Providing the nodes}
+%-------------------------------------------------------------------------------
+The nodes have to be stored in the member array \verb"p.x".
+In one dimension, the coordinate of the $j$th node is a number in
+$[-\tfrac{1}{2},\tfrac{1}{2})$ that is stored at the index $j$, i.e.,\\[2ex]
+%\begin{verbatim}
+\verb"  p.x[j] = "\textsl{your choice in [-0.5,0.5)}\verb";"
+%\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Precomputation}
+%-------------------------------------------------------------------------------
+The precomputation procedure for the plan is invoked (conditionally) by
+\begin{verbatim}
+  if (p.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&p);
+\end{verbatim}
+NFFT~3 uses different strategies here which are free of choice by the user via
+passing the appropriate flag to one of the more advanced plan initialization
+routines. A default strategy is chosen by the simple initialization routines.
+For convenience, the flag \verb+PRE_ONE_PSI+ indicates that precomputation
+is necessary; see Appendix \ref{sect:windows} for details.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Providing the Fourier coefficients}
+%-------------------------------------------------------------------------------
+Fourier coefficients are stored in the one-dimensional member array
+\verb"p.f_hat". In the one-dimensional case this array contains the Fourier
+coefficients in the order $\hat{f}_{-N/2},\hdots,\hat{f}_{N/2-1}$.
+They are accessed by\\[2ex]
+%\begin{verbatim}
+\verb"  p.f_hat[k] = "\textsl{your choice in the complex numbers}\verb";"
+%\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Execution}
+%-------------------------------------------------------------------------------
+To compute \eqref{eq:nfft} with the NFFT algorithm, invoke
+\begin{verbatim}
+  nfft_trafo(&p);
+\end{verbatim}
+The $M$ output values $f_j$ are stored in the one-dimensional member array
+\verb"p.f". To compute a second NFFT with different input data, simply
+update the Fourier coefficients in \verb"p.f_hat" and invoke \verb"nfft_trafo"
+a second time.
+
+The adjoint transform \eqref{eq:nfftH} is computed by \verb+nfft_adjoint+. Here,
+the input is put in \verb"p.f" and the output is written to \verb"p.f_hat".
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Finalization}
+%-------------------------------------------------------------------------------
+Since the initialization routine for the plan has allocated memory, it is
+essential to finalize the plan, once it is no longer
+needed. This is done by
+\begin{verbatim}
+  nfft_finalize(&p);
+\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Example}
+%-------------------------------------------------------------------------------
+Here is a brief example that computes a one-dimensional NFFT with 14
+Fourier coefficients and 19 nodes. The routine is part of the example program
+\verb"simple_test.c" which is found under \verb"examples/nfft/" in the
+software package. It uses some auxilliary routines from the NFFT~3 header
+\verb"util.h" to initialize vectors with random entries and to write them
+to the standard output.
+\begin{verbatim}
+  void simple_test_nfft_1d()
+  {
+    nfft_plan p; int N=14; int M=19;
+    nfft_init_1d(&p,N,M);
+    nfft_vrand_shifted_unit_double(p.x,p.M_total);
+    if(p.nfft_flags & PRE_ONE_PSI) nfft_precompute_one_psi(&p);
+    nfft_vrand_unit_complex(p.f_hat,p.N_total);
+    nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, f_hat");
+    ndft_trafo(&p);
+    nfft_vpr_complex(p.f,p.M_total,"ndft, f");
+    nfft_trafo(&p);
+    nfft_vpr_complex(p.f,p.M_total,"nfft, f");
+    nfft_finalize(&p);
+  }
+\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsection{Multivariate transforms}
+%-------------------------------------------------------------------------------
+In $d$ dimensions, the nodes $\mathbf{x}_j$ in the sampling set
+$\mathcal{X}$, as well as the frequency indices $\mathbf{k}$ in the set
+$I_{\mathbf{N}}$ are $d$-dimensional vectors. This affects the storage layout of
+the arrays \verb"x" and \verb"f_hat". Generally, both remain
+one-dimensional and all $d$-dimensional quantities are linearized.
+For \verb"x" this means that the $t$th coordinate of the $j$th node
+($t=0,\ldots,d-1$; $j = 0,\ldots,M-1$) is defined via\\[\parskip]
+
+\noindent\verb"  p.x[d*j+t] = "\textsl{your choice in [-0.5,0.5)}\verb";"\\[\parskip]
+
+\noindent This linear ordering has been chosen because the node configuration
+may be completely unstructured.
+Analogously, the Fourier coefficient $\hat{f}_{\mathbf{k}}$ is stored in
+\verb"f_hat[k]" at the linearized index \verb"k"$ = \sum_{t=0}^{d-1}
+(k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1} N_{t'}$.
+
+Due to software engineering considerations, we do not offer alternative data
+layouts, even if the nodes belong to a multidimensional structure, e.g. a
+tensor product grid. Moreover, NFFT~3 does currently not offer support for strided
+data or even more general FFTW-style i/o-tensors.
+
+%-------------------------------------------------------------------------------
+\subsection{Programming interface and data structures}
+%-------------------------------------------------------------------------------
+The programming interface for the NFFT module is summarized in
+Table \ref{table:nfft_user_fun}. To allow for a comparison with the NDFT algorithm,
+the routine \verb"ndft_trafo" computes the transform via direct
+evaluation of \eqref{eq:nfft}. The routines \verb"ndft_adjoint"
+and \verb"nfft_adjoint" compute adjoint transforms \eqref{eq:nfftH},
+respectively. The Initialization routines \verb"nfft_init_1d",
+\verb"nfft_init_2d", \verb"nfft_init_3d" allow for convenient initialization
+of plans for one-, two-, and three-dimensional transforms with default
+parameters. Plans for general multivariate transforms are created using
+\verb"nfft_init". For the experienced user, the function \verb"nfft_init_guru"
+allows control over all relevant parameters.
+
+The most important members of the \verb"nfft_plan" data type are listed in Table
+\ref{table:nfft_members}. Only \verb"f_hat", \verb"f", and
+\verb"x" are to be modified by the user.
+
+\begin{acmtable}{0.72\textwidth}
+  \centering%
+    \vspace{1.3ex}%
+    \begin{tabular}{l}
+      \verb"void ndft_trafo(nfft_plan* p)" \\
+      \verb"void ndft_adjoint(nfft_plan* p)" \\
+      \verb"void nfft_trafo(nfft_plan* p)" \\
+      \verb"void nfft_adjoint(nfft_plan* p)" \\
+      \verb"void nfft_init_1d(nfft_plan* p, int N0, int M)" \\
+      \verb"void nfft_init_2d(nfft_plan* p, int N0, int N1, int M)" \\
+      \verb"void nfft_init_3d(nfft_plan* p, int N0, int N1, int N2, int M)" \\
+      \verb"void nfft_init(nfft_plan* p, int d, int* N, int M)" \\
+      \verb"void nfft_init_guru(nfft_plan* p, int d, int* N, int M, int* n," \\
+      \verb"                    int m, unsigned nfft_flags, unsigned fftw_flags)" \\
+      \verb"void nfft_precompute_one_psi(nfft_plan* p)" \\
+      \verb"void nfft_check(nfft_plan* p)" \\
+      \verb"void nfft_finalize(nfft_plan* p)"
+    \end{tabular}%
+    \vspace{0.5ex}%
+  \caption{Interface to NDFT/NFFT transforms in NFFT~3.}%
+  \label{table:nfft_user_fun}%
+\end{acmtable}
+
+\begin{acmtable}{0.72\textwidth}
+  \centering%
+    \vspace{1.3ex}%
+    \begin{tabular}{r|l|l|l}%
+      Type & Name & Size & Description
+      \\
+      \hline
+      \verb"int" & \verb"d" & 1 & Spatial dimension $d$
+      \\
+      \verb"int*" & \verb"N" & $d$ & Multibandwidth $\mathbf{N}$
+      \\
+      \verb"int" & \verb"N_total" & 1 & Number of coefficients $|I_{\mathbf{N}}|$
+      \\
+      \verb"int" & \verb"M_total" & 1 & Number of nodes $M$
+      \\
+      \verb"double complex*" & \verb"f_hat" & $|I_{\mathbf{N}}|$ & Fourier coefficients $\mathbf{\hat{f}}$ or
+      \\
+      & & & adjoint coefficients $\mathbf{\hat{h}}$
+      \\
+      \verb"double complex*"& \verb"f" & $M$ & Samples $\mathbf{f}$
+      \\
+      \verb"double*" & \verb"x" & $dM$ & Sampling set ${\cal X}$
+    \end{tabular}%
+    \vspace{0.5ex}%
+  \caption{Most important members of the structure \texttt{nfft\_plan}.}
+  \label{table:nfft_members}
+\end{acmtable}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
+%\pagebreak
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
+
+%===============================================================================
+\section{Generalizations} \label{sect:gen}
+%===============================================================================
+
+This section surveys further generalizations of the NFFT algorithm that are
+implemented by the NFFT~3 library. The interfaces resemble that of the NFFT
+module described above, with the prefix \verb+nfft_+ replaced by the
+acronym related to the specific transform in all names. Details can be found in
+the API documentation accompanying the library. All algorithms, with exception of
+the discrete polynomial transform, are based on the same computational procedure
+as the NFFT.
+
+%-------------------------------------------------------------------------------
+\subsection{NFST/NFCT - Nonequispaced fast sine/cosine transforms}
+%-------------------------------------------------------------------------------
+Discrete (co)sine transforms (DCT/DST) are closely related real variants of the
+discrete Fourier transform DFT. In the same way, nonequispaced discrete (co)sine
+transforms (NDCT/NDST) are real transforms related to the NDFT. They are
+parameterised by arbitrary nodes $\mathbf{x}_j \in [0,\frac{1}{2}]^d$.
+Frequencies $\mathbf{k}$ are taken from one of the index sets
+\begin{align*}
+  I_{\mathbf{N}}^C &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1}
+    \in \Z^d: 0 \le k_t < N_t ,\;t=0,\hdots,d-1\right\}, \\
+  I_{\mathbf{N}}^S &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in
+    \Z^d: 1 \le k_t < N_t ,\;t=0,\hdots,d-1\right\},
+\end{align*}
+where $I_{\mathbf{N}}^C$ corresponds to the NDCT and $I_{\mathbf{N}}^S$ to the
+NDST, respectively. For given real Fourier coefficients
+$\hat f_{\mathbf{k}} \in \R$, NDCT and NDST are defined by
+\begin{equation*}
+  f_j  = \sum_{\mathbf{k}\in I_{\mathbf{N}}^C}
+\hat{f}_{\mathbf{k}}
+  \cos(2\pi(\mathbf{k}\odot\mathbf{x}_j))\quad
+  (j=0,\hdots,M-1),
+  \qquad
+  f_j  = \sum_{\mathbf{k}\in I_{\mathbf{N}}^S}
+\hat{f}_{\mathbf{k}}
+  \sin(2\pi(\mathbf{k}\odot\mathbf{x}_j)),
+\end{equation*}
+respectively. Here, for notational convenience, we have defined
+$\cos(\mathbf{x}) := \cos(x_0) \cdot \hdots \cdot \cos(x_{d-1})$ and
+$\sin(\mathbf{x}) := \sin(x_0) \cdot \hdots \cdot \sin(x_{d-1})$.
+
+Straightforward algorithms for these transforms need $\cO(M
+|I_{\mathbf{N}}^C|)$ and $\cO(M |I_{\mathbf{N}}^S|)$ arithmetic operations.
+The fast algorithms (NFST/NFCT) need $\cO(|I_{\mathbf{N}}^S| \log
+|I_{\mathbf{N}}^S| + |\log \varepsilon|^d M)$ and $\cO(|I_{\mathbf{N}}^C| \log
+|I_{\mathbf{N}}^C| + |\log \varepsilon|^d M)$ operations, respectively.
+Note that for these real transforms, the adjoint variants coincide with the
+transposed versions. Details about the implemented algorithms can be found in
+\cite{tili00,po01,fepo02}.
+
+%-------------------------------------------------------------------------------
+\subsection{NSFFT - Nonequispaced sparse fast Fourier transform}
+%-------------------------------------------------------------------------------
+In higher dimensions, the so-called ``curse of dimensionality''
+\cite{Zeng91,Spr00,BuZe04} often requires the use of Fourier series where
+frequency indices are restricted to the hyperbolic cross
+\begin{equation*}
+  H_N^d := \bigcup_{\mathbf{N}\in\N^d,\, |I_{\mathbf{N}}| = N} I_{\mathbf{N}},
+  \qquad N=2^{J+2},\;J\in\NZ,
+\end{equation*}
+which has only $\cO(N \log^{d-1} N)$ degrees of freedom compared to
+$\cO(N^d)$ in the plain case. If compared to ordinary Fourier series,
+the approximation error commited, which is typically measured in a norm of
+dominated mixed smoothness, can be shown to get worse by a factor of only
+$\log^{d-1} N$ (see \cite{Spr00}).
+The \emph{nonequispaced sparse discrete Fourier transform (NSDFT)} is defined as
+the evaluation of
+\begin{equation*}
+  f_j  = \sum_{\mathbf{k}\in H_N^d}
+  \hat f_{\mathbf{k}} \eim{\mathbf{k} \mathbf{x}_j} \qquad (j=0,\ldots,M-1)
+\end{equation*}
+with given nodes $\mathbf{x}_j\in \T^d$ and Fourier coefficients
+$\hat f_{\mathbf{k}}\in\C$. The algorithms implemented in NFFT~3 reduce the
+number of arithmetic operations from $\cO(M N\log^{d-1}N)$ to
+$\cO(N\log^2 N+|\log \varepsilon|^2 M)$ in two dimensions ($d = 2$), and to
+$\cO(N^{3/2} \log N+ |\log \varepsilon|^3 M)$ in three dimensions ($d = 3$).
+Details are found in \cite{FeKuPo} for details.
+
+%-------------------------------------------------------------------------------
+\subsection{NNFFT - fast Fourier
+transform for nonequispaced data in space and frequency domain}
+%-------------------------------------------------------------------------------
+The NNFFT is a variant of the NFFT where also frequencies are no
+longer equispaced integer multi-indices.
+The transform is defined by
+\begin{equation*}
+  f_j  = \sum_{l=0}^{L-1} \hat f_l \eim{\left(\mathbf{v}_l \odot
+  \mathbf{N}\right)\mathbf{x}_j} \qquad (j =0,\hdots,M-1)
+\end{equation*}
+with Fourier coefficients $\hat{f}_l \in\C$, and arbitrary frequencies
+$\mathbf{v}_l \in \T^d$ and nodes $\mathbf{x}_j \in \T^d$.
+Here, $\mathbf{N}\in \N^d$ is called the \emph{nonharmonic
+bandwidth}. This transform is known as \textit{fast Fourier
+transform for nonequispaced data in space and frequency domain (NNFFT)}
+\cite{duro93,elst,postta01} or as \emph{type 3 nonuniform FFT} \cite{LeGr05}
+and takes $\cO(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}| + |\log
+\varepsilon|^d(L+M))$ arithmetic operations to compute.
+
+%------------------------------------------------------------------------------
+\subsection{NFSFT - nonequispaced fast spherical Fourier transform}
+\label{sect:gen:nfsft}
+%------------------------------------------------------------------------------
+Denote by $\S^2:= \big\{\mathbf{x} \in \R^{3}:\;\|\mathbf{x}\|_2=
+1\big\}$ the two-dimensional unit sphere.
+In spherical cordinates, any point on $\S^2$ is identified with a pair of
+angles $(\vartheta,\varphi)^{\top}\in  [0,\pi]\times [0,2\pi)$.
+Hence, a sampling set on the sphere can be defined by
+$
+  \mathcal{X}: = \left\{\left(\vartheta_{j},\varphi_{j}\right)
+  %\in \mathbb{S}^2
+  :\,j=0,\hdots,M-1\right\}.
+$
+A convenient basis of orthogonal functions on $\S^2$ are spherical harmonics
+$Y_k^n : \S^2 \rightarrow \C$, $k \in \mathbb{N}_{0}$, $|n| \le k$,
+defined by
+\begin{equation*}
+  Y_k^n(\vartheta,\varphi) := P_k^{|n|}(\cos\vartheta)
+  \, \mathrm{e}^{\mathrm{i} n \varphi}.
+\end{equation*}
+Here, $P_k^{|n|}$ are the associated Legendre
+functions of degree $k$ and order $|n|$ (see \cite[pp. 331]{abst}).
+Frequencies for a finite transform up to bandwidth $N$ are collected in the
+index set
+\[
+J_{N} := \{(k,n)\in\Z^2:\,k=0,\ldots,N;\; n=-k,\ldots,k\}.
+\]
+The \emph{nonequispaced discrete spherical Fourier transform (NDSFT)} is
+defined as the calculation of
+\begin{equation*}
+  f_j  =  \sum_{(k,n) \in \, J_{N}} \hat{f}_k^n \,
+  Y_k^n\left(\vartheta_{j},\varphi_{j}\right) \qquad (j=0,\ldots,M-1).
+\end{equation*}
+
+The direct method (NDSFT) clearly needs $\cO(M N^2)$ arithmetic operations.
+The approximate $\cO(N^2 \log^2 N + |\log{\varepsilon}|^2M)$ algorithm
+implemented in the NFFT~3 library (\emph{NFSFT}) is a combination of the
+fast polynomial transform (FPT; see next subsection) and the NFFT.
+%, and are given in Algorithms \ref{alg:NFSFT} and
+%\ref{alg:adjointNFSFT}.
+It was introduced in \cite{kupo02} while the adjoint variant was
+developed in \cite{KePo06}. Other algorithms, mostly for particular
+sampling sets, exist (e.g. \cite{drhe,SuTa01,roty}).
+
+%\begin{algorithm}[tb]
+%  \caption[NFSFT]{Nonequispaced fast spherical Fourier transform (NFSFT).}
+%  \label{alg:NFSFT}
+%  \begin{tabbing}
+%    Input: \= \kill
+%    Input: \> $M, N \in \mathbb{N}$, $\left(\vartheta_{j},
+%      \varphi_{j} \right) \in [0,\pi]\times [0,2\pi)$, $j=0,\ldots,M-1$,
+%      $\hat{f}_{k}^n \in \mathbb{C}$, $(k,n) \in J_{N}$.
+%  \end{tabbing}
+%  \begin{algorithmic}[1]
+%    \itemsep=1.1ex
+%    \STATE For $n=-N,\hdots,N$ convert $\sum_{k=|n|}^N \hat{f}_k^n
+%    P_k^{n}(\cos\vartheta_j)$ into $\sum_{k=-N}^N \hat{g}_k^n \, \mathrm{e}^{k
+%    \vartheta_{j}}$ by FPTs.
+%    \STATE For $j=0,\hdots,M-1$ compute $f_j=\sum_{n=-N}^N\sum_{k=-N}^N
+%    \hat{g}_k^n \, \mathrm{e}^{n\varphi_j+k \vartheta_{j}}$ by an NFFT.\\[2ex]
+%  \end{algorithmic}
+%  Output: Approximated function values $f_j$, $j=0,\ldots,M-1$.\\
+%  Complexity: $\mathcal{O}\left(N^2 \log^2 N + M\right)$.
+%\end{algorithm}
+
+%\begin{algorithm}[tb]
+%  \caption[Adjoint NFSFT]{Adjoint nonequispaced fast spherical Fourier
+%    transform (adjoint NFSFT).}
+%  \label{alg:adjointNFSFT}
+%  \begin{tabbing}
+%    Input: \= \kill
+%    Input: \> $M, N \in \mathbb{N}$, $\left(\vartheta_{j},
+%      \varphi_{j} \right) \in [0,\pi]\times [0,2\pi)$, $f_j \in\C$,
+%      $j=0,\ldots,M-1$.
+%  \end{tabbing}
+%  \begin{algorithmic}[1]
+%    \itemsep=1.1ex
+%    \STATE For $k,n = -N,\hdots,N$ compute $\tilde{h}_{k}^n=\sum_{j=0}^{M-1}
+%      f_j \mathrm{e}^{n\varphi_j+k \vartheta_{j}}$ by an adjoint NFFT.
+%    \STATE
+%      For $n=-N,\hdots,N$ convert $\sum_{k=-N}^N \tilde{h}_{k}^n \,
+%      \mathrm{e}^{k \vartheta_{j}}$ into $\sum_{k=|n|}^N \hat{h}_k^n
+%    P_k^{n}(\cos\vartheta_j)$ by adjoint FPTs.\\[2ex]
+%  \end{algorithmic}
+%  Output: Approximated coefficients $\hat{h}_{k}^n$, $(k,n) \in J_N$.\\
+%  Complexity: $\mathcal{O}\left(N^2 \log^2 N + M\right)$.
+%\end{algorithm}
+
+%-------------------------------------------------------------------------------
+\subsection{FPT - fast polynomial transform} \label{sect:fpt}
+%-------------------------------------------------------------------------------
+A \emph{discrete polynomial transform} (DPT) is a generalization of the DFT
+from complex exponentials $\mathrm{e}^{\mathrm{i} k x}$ to
+systems of algebraic polynomials that satisfy a three-term recurrence;
+see \cite[pp. 773]{abst}.
+More precisely, let $p_{0},p_{1},\hdots:[-1,1]\rightarrow\R$ be a sequence of
+polynomials satisfying the recurrence
+\begin{align}
+  \label{eq.threeterm}
+  p_{k+1}(x) & = (\alpha_{k} x  + \beta_{k})p_{k}(x) + \gamma_{k} p_{k-1}(x) &
+  (k \ge 0),
+\end{align}
+where $p_{-1}(x) := 0$, $p_{0}(x) := 1$, and $\alpha_{k} \neq 0$, $k\ge 0$.
+Then every $p_{k}$ is a degree-$k$ polynomial. Typical examples are the
+Legendre polynomials $P_k(x)$ or the Chebyshev polynomials of first
+kind $T_{k}(x) := \cos(k \arccos x)$. Let a finite linear expansion of the form
+\begin{equation*}
+  f(x) = \sum_{k=0}^{N} a_{k} p_{k}(x)
+\end{equation*}
+be given. The DPT in our sense is defined as the
+computation of the coefficients $b_{k}$ in the expansion
+\[
+  f(x) = \sum_{k=0}^N b_{k} T_{k}(x).
+\]
+Implemented directly, this computation takes $\cO(N^2)$ arithmetic operations.
+The \emph{fast polynomial transform (FPT)} is an $\cO(N \log^2 N)$
+algorithm to compute the same result. It is implemented in the
+NFFT~3 library following the approach in \cite{postta98}. This is based on using
+the three-term-recurrence relation \eqref{eq.threeterm} repeatedly, together
+with a fast method for polynomial multiplication in the Chebyshev
+basis, and a cascade-like summation process. More details can be found in
+\cite{drhe,drhero,postta98,po01} and references therein.
+
+%------------------------------------------------------------------------------
+\subsection{Inversion and solver module} \label{sect:general_proc_infft}
+%------------------------------------------------------------------------------
+The NDFT differs from the DFT also in that an inversion formula similar to
+\eqref{eq.idft} generally does not exist; see Section \ref{subsect.definition}.
+A more general view is at order to define what should be an inverse NDFT/NFFT
+transform. This section is devoted to explain our approach for the NFFT. But
+everything also applies to the mentioned NFFT variants.
+
+Inversion of the NDFT means the computation of Fourier coefficients
+$\hat{f}_{\mathbf{k}}$, $\mathbf{k} \in I_{\mathbf{N}}$, from given function
+samples $y_{j}$ at nodes $\mathbf{x}_j$, $j = 0,\ldots,M-1$.
+In matrix-vector notation, this is equivalent to solving the linear system
+\begin{equation}\label{eq:infft}
+  \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{y}.
+\end{equation}
+%for the vector $\mathbf{\hat{f}}\in\C^{|I_{\mathbf{N}}|}$.
+This can be either and overdetermined system if $|I_{\mathbf{N}}| \le
+M$ (this includes the quadratic case) or an underdetermined system
+if $|I_{\mathbf{N}}| > M$.
+Generally, this compels us to look for a pseudo-inverse solution
+$\mathbf{\hat{f}}^{\dagger}$ (see e.g. \cite[p. 15]{Bj96}).
+For this, we also require that the nonequispaced Fourier matrix $\mathbf{A}$
+have full rank. Eigenvalue estimates in \cite{FeGrSt95,BaGr03,KuPo04} indeed assert that this
+condition is satisfied if the sampling set $\cal X$ is uniformly dense or uniformly
+separated with respect to the inverse bandwidth $\mathbf{N}^{-1}$.
+
+For the overdetermined case, we now consider a weighted least squares problem,
+while for the consistent underdetermined case, we look for a solution of an
+interpolation problem. Both can be solved by iterative algorithms using
+NFFT and adjoint NFFT to realize fast matrix-vector multiplications
+involving $\mathbf{A}$ and $\mathbf{A}^{\adj}$, respectively.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Weighted least squares problem}
+%-------------------------------------------------------------------------------
+If $|I_{\mathbf{N}}|\le M$, the linear system \eqref{eq:infft} is overdetermined
+which typically implies that the given data $y_j\in \C,\;j=0,\hdots,M-1,$ can
+only be approximated up to a residual $\mathbf{r}:=\mathbf{y}-\mathbf{A}
+\mathbf{\hat{f}}$. Therefore, we consider the \emph{weighted least squares problem}
+\begin{equation*}
+\sum_{j=0}^{M-1} w_j |y_j-f(x_j)|^2
+  \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min
+\end{equation*}
+with weights $w_j> 0$, $\mathbf{W}:=\diag(w_j)_{j=0,\hdots,M-1}$. This weights
+might be used to compensate for clusters in the sampling set ${\cal X}$.
+The weighted least squares problem is equivalent to solving
+the \emph{weighted normal equation of first kind},
+$
+\mathbf{A}^{\adj} \mathbf{W} \mathbf{A} \mathbf{\hat{f}} = \mathbf{A}^{\adj}
+\mathbf{W} \mathbf{y}.
+$
+This can be done, e.g., by using the Landweber (or Richardson) iteration,
+the steepest descent method, or the conjugate gradient method for least
+squares problems. The latter method is given in pseudo-code in Algorithm
+\ref{algo:wCGNR(E)} (left). The NFFT~3 library nevertheless implements
+all three algorithms.
+
+\setlength{\columnseprule}{0.5pt}
+
+\begin{algorithm}[tp]
+  \hrule
+  \footnotesize
+  \rule[-1.5ex]{0ex}{5ex}Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in
+    \mathbb{C}^{|I_{\mathbf{N}}|}$.
+    \begin{multicols}{2}
+      \begin{algorithmic}%[1]
+      \topsep=1.1ex
+      \itemsep=1.1ex
+      \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+      \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+      \STATE $\mathbf{\hat{p}}_0=\mathbf{\hat{z}}_0$
+      \FOR{$l=0,\hdots$}
+        \topsep=1.1ex
+        \itemsep=1.1ex
+        \STATE $\mathbf{v}_l=\mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+        \STATE $\alpha_l=\frac{\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}}
+          \mathbf{\hat{z}}_l} {\mathbf{v}_l^{\adj} \mathbf{W} \mathbf{v}_l}$
+        \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l} +
+          \alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+        \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{v}_l$
+        \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W}
+          \mathbf{r}_{l+1}$
+        \STATE $\beta_l=\frac{\mathbf{\hat{z}}_{l+1}^{\adj}
+          \mathbf{\hat{W}}\mathbf{\hat{z}}_{l+1}}
+          {\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}}\mathbf{\hat{z}}_l}$
+        \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l +
+          \mathbf{\hat{z}}_{l+1}$
+      \ENDFOR
+    \end{algorithmic}
+\columnbreak
+      \begin{algorithmic}
+      \topsep=1.1ex
+      \itemsep=1.1ex
+    \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+    \STATE $\mathbf{\hat{p}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+    \FOR{$l=0,\hdots$}
+    \topsep=1.1ex
+    \itemsep=1.1ex
+    \STATE $\alpha_l=\frac{\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}
+           {\mathbf{\hat{p}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{p}}_l}$
+           \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+           +\alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+           \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{A}
+\mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+           \STATE $\beta_l=\frac{\mathbf{r}_{l+1}^{\adj} \mathbf{W}
+\mathbf{r}_{l+1}}
+                  {\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}$
+
+                  \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l +
+\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+                  \ENDFOR
+    \end{algorithmic}
+\end{multicols}
+    Output: The $l$th approximation to the solution vector
+    $\mathbf{\hat{f}}_{l}\in\mathbb{C}^{|I_{\mathbf{N}}|}$.\rule[-1.5ex]{0ex}{3ex}
+  \hrule
+  \caption{Variants of the conjugate gradient method for normal equations of first
+  (CGNR = residual minimization; left) and second kind (CGNE = error minimization;
+  right).}
+  \label{algo:wCGNR(E)}
+\end{algorithm}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Interpolation problem}
+%-------------------------------------------------------------------------------
+If $|I_{\mathbf{N}}|>M$, and if the linear system \eqref{eq:infft} is
+consistent, the data $y_j\in \C,\;j=0,\hdots,M-1,$ can be interpolated exactly.
+But since there exist multiple solutions, we consider the
+\emph{constrained minimization problem}
+\begin{equation*}
+  \label{eq:ip}
+  \sum_{\mathbf{k}\in I_{\mathbf{N}}} \frac{|\hat f_{\mathbf{k}}|^2}{\hat
+  w_{\mathbf{k}}} \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min \quad
+  \text{subject to} \quad \mathbf{A} \mathbf{\hat{f}} = \mathbf{y},
+\end{equation*}
+which incorporates ``damping factors'' $\hat w_{\mathbf{k}}> 0$,
+$\mathbf{\hat{W}}:= \diag(\hat w_{\mathbf{k}})_{\mathbf{k}\in
+I_{\mathbf{N}}}$. A smooth solution, i.e., a solution with rapid decay of
+Fourier coefficients $\hat{f}_{\mathbf{k}}$, is favored if the damping
+factors $\hat{w}_{\mathbf{k}}$ are decreasing themselves.
+The interpolation problem is equivalent to the
+\emph{damped normal equation of second kind}
+$
+  \mathbf{A} \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}
+  = \mathbf{y}
+$,
+$\mathbf{\hat{f}} =
+  \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}
+$.
+The conjugate gradient method applied to this linear system is given in
+Algorithm \ref{algo:wCGNR(E)} (right). Of course, the NFFT~3 library also
+implements this scheme.
+
+%==============================================================================
+\section{Summary and performance analysis}\label{sect:sum}
+%==============================================================================
+
+This section is to provide a performance analysis of the NFFT algorithm.
+The asymptotic bounds on the number of floating point operations for the
+nonequispaced fast Fourier transform (NFFT) and its variant on the sphere
+(NFSFT) are compared to those for the discrete/fast Fourier transform in
+Table \ref{table:bigO}.
+\begin{acmtable}{0.85\textwidth}
+  \centering%
+  \vspace{1.3ex}%
+  \begin{tabular}{r|cc|cc}
+    & \multicolumn{2}{c|}{\rule[-1.5ex]{0ex}{4.25ex}$M={\mathcal{O}}\left(N^d\right)$, $\cal X$ grid}
+    & \multicolumn{2}{c}{$M$, $\cal X$ arbitrary}
+    \\
+    \hline
+    & DFT & FFT & NDFT & NFFT
+    \\
+    \hline
+    \rule[-1.5ex]{0ex}{4.25ex}%
+    Torus $\T^d$ &
+    ${\mathcal{O}}\left(N^{d+1}\right)$ &
+    ${\mathcal{O}}\left(N^d \log N\right)$ &
+    ${\mathcal{O}}\left(M N^d\right)$ &
+    ${\mathcal{O}}\left(N^d \log N +|\log \varepsilon|^d M\right)$\\
+    \rule[-1.5ex]{0ex}{4.25ex}%
+    Sphere $\S^2$ &
+    ${\mathcal{O}}\left(N^3\right)$ &
+    ${\mathcal{O}}\left(N^2 \log^2 N\right)$ &
+    ${\mathcal{O}}\left(M N^2\right)$ &
+    ${\mathcal{O}}\left(N^2 \log^2 N +|\log \varepsilon|^2 M\right)$
+  \end{tabular}
+  \vspace{0.5ex}%
+  \caption{Asymptotic number of floating point operations with respect to the
+  polynomial degree $N$ (so that $\mathbf{N}=(N,\hdots,N)^{\top}$), the number of nodes
+  $M$, spatial dimension $d$, and target accuracy $\varepsilon$ for different transforms.}
+  \label{table:bigO}
+\end{acmtable}
+The rest of the section is to provide results of actual performance
+measurements for our implementation of the NFFT in spatial
+dimensions $d=1,2,3$. Computation time measurements and a numerical
+confirmation of the error estimates for the window functions
+(\ref{gaussian}-\ref{kaiser}) with respect to the so-called cut-off
+parameter are given.
+
+For our tests, we used a computer system with an AMD
+$\text{Athlon}^{\text{\texttrademark}}$ XP 2700+ processor, 1GB memory,
+SuSE Linux with kernel 2.4.20-4GB-athlon, and the GCC 3.3 compiler.
+All computations were carried out in double precision using the compiler
+option \verb"-O3". For all tests with random input, the nodes
+$\mathbf{x}_j$ and the Fourier coefficients $\hat f_{\mathbf{k}}$ were
+drawn from a uniform pseudo-random distribution in the respective domains,
+i.e., $\mathbf{x}_j \in \mathbb{T}^d$ and
+$\hat f_{\mathbf{k}} \in [0,1] \times [0,1]{\rm i}$. The code for these
+and more examples and applications can be found in the directories
+\verb"examples/" and \verb"applications/" of the NFFT~3 package.
+
+%------------------------------------------------------------------------------
+\subsection{Computation time with respect to problem size}
+%------------------------------------------------------------------------------
+We compared computation times for ordinary FFTs (using FFTW
+3.0.0 \cite{FFTW05,fftw} in double precision with the flag
+\texttt{FFTW\_MEASURE}),
+direct nonequispaced discrete Fourier transforms (NDFTs), and nonequispaced fast
+Fourier transforms (NFFTs) for different problem sizes
+$|I_{\mathbf{N}}|$ in dimensions $d=1,2,3$.
+The multibandwidth $\mathbf{N}$ was chosen to
+$\mathbf{N}=(N,\hdots,N)^{\top},\;N\in 2\N$.
+The nodes for FFTs are fixed and restricted to the lattice $\mathbf{N}^{-1}\odot
+I_{\mathbf{N}}$.
+For NDFTs and NFFTs, we chose $M = N^d$ random nodes and used an oversampling
+factor $\sigma=2$, cut-off parameters $m = 2$ and $m = 4$, and the
+Kaiser-Bessel window function (precomputation flags \verb"PRE_PSI" and
+\verb"PRE_PHI_HUT").
+With these options, the accuracy measured by
+\begin{equation}\label{Einf}
+E_{\infty}:={\max_{0\le
+    j<M}|f_j-s_j|} / {\sum_{\mathbf{k} \in I_{\mathbf{N}}} |\hat
+  f_{\mathbf{k}}|}
+\end{equation}
+is approximately $E_{\infty}\approx 10^{-4}$ ($m=2$) and
+$E_{\infty}\approx 10^{-8}$ ($m=4$) for $d=1,2,3$.
+Here, $s_j$ denotes the NFFT-approximation to $f_j$; see the Appendix for
+details. The corresponding example program can be found under
+\verb"examples/nfft/nfft_times".
+As a byproduct of the measurements shown in Table \ref{tab:TimeSpace_1}, we
+also obtain a performance index measured in million floating point operations
+per second (MFLOPS). We assume that the number of floating point operations are
+\begin{equation*}
+  5 |I_{\mathbf{N}}|\log_2|I_{\mathbf{N}}|, \quad \text{and} \quad
+  |I_{\mathbf{N}}| + 5\cdot 2^d |I_{\mathbf{N}}|\log(2^d|I_{\mathbf{N}}|) +
+  4(2m+1)^d |I_{\mathbf{N}}|
+\end{equation*}
+for the FFT and the NFFT ($M = |I_{\mathbf{N}}|$ nodes, oversampling factor
+$\sigma=2$, and precomputation flags \verb"PRE_PSI" and \verb"PRE_PHI_HUT"),
+respectively. More details are given in the Appendix.
+
+\begin{acmtable}{0.85\textwidth}
+  \centering%
+  \vspace{1.3ex}%
+    \begin{tabular}{r|r|r|r|r r|r r}
+    & & & & \multicolumn{2}{|c|}{$m=4$, $E_{\infty} \approx 10^{-8}$} & \multicolumn{2}{|c}{$m=2$, $E_{\infty}\approx 10^{-4}$}
+    \\
+    \hline
+    & \rule[-1.8ex]{0ex}{4.5ex}
+    $l_N$ & FFT & NDFT & NFFT & \parbox[c]{1cm}{\scriptsize\centering penalty\\factor}
+    & NFFT & \parbox[c]{1cm}{\scriptsize\centering penalty\\factor}
+    \\
+    \hline
+    \multirow{20}{*}{$d=1$}
+& \verb"3"&       \verb"1.3e-07" &        \verb"8.6e-06" &        \verb"1.3e-06" & \verb"(10.0)"  &        \verb"1.1e-06" & \verb"(8.6)"\\
+& \verb"4"&       \verb"2.1e-07" &        \verb"3.5e-05" &        \verb"2.7e-06" & \verb"(12.9)"  &        \verb"2.2e-06" & \verb"(10.5)"\\
+& \verb"5"&       \verb"4.2e-07" &        \verb"1.4e-04" &        \verb"5.2e-06" & \verb"(12.3)"  &        \verb"4.2e-06" & \verb"(11.4)"\\
+& \verb"6"&       \verb"9.2e-07" &        \verb"5.7e-04" &        \verb"1.1e-05" & \verb"(11.5)"  &        \verb"9.1e-06" & \verb"(9.8)"\\
+& \verb"7"&       \verb"2.2e-06" &        \verb"2.3e-03" &        \verb"2.1e-05" & \verb"(9.5)"   &        \verb"1.9e-05" & \verb"(9.0)"\\
+& \verb"8"&       \verb"5.3e-06" &        \verb"9.2e-03" &        \verb"4.4e-05" & \verb"(8.3)"   &        \verb"3.9e-05" & \verb"(7.7)"\\
+& \verb"9"&       \verb"1.1e-05" &        \verb"3.7e-02" &        \verb"9.8e-05" & \verb"(8.8)"   &        \verb"8.3e-05" & \verb"(7.4)"\\
+& \verb"10"&      \verb"2.5e-05" &        \verb"1.5e-01" &        \verb"2.0e-04" & \verb"(8.1)"   &        \verb"1.8e-04" & \verb"(7.1)"\\
+& \verb"11"&      \verb"6.0e-05" &        \verb"6.0e-01" &        \verb"6.5e-04" & \verb"(10.8)"  &        \verb"5.4e-04" & \verb"(8.9)"\\
+& \verb"12"&      \verb"1.5e-04" &        \verb"2.4e+00" &        \verb"1.5e-03" & \verb"(9.8)"   &        \verb"1.4e-03" & \verb"(8.9)"\\
+& \verb"13"&      \verb"5.5e-04" &        \verb"9.6e+00" &        \verb"3.5e-03" & \verb"(6.4)"   &        \verb"3.3e-03" & \verb"(5.6)"\\
+& \verb"14"&      \verb"1.7e-03" &        \verb"4.0e+01" &        \verb"7.8e-03" & \verb"(4.6)"   &        \verb"7.1e-03" & \verb"(4.3)"\\
+& \verb"15"&      \verb"4.0e-03" &        \verb"1.6e+02" &        \verb"1.6e-02" & \verb"(4.1)"   &        \verb"1.5e-02" & \verb"(3.7)"\\
+& \verb"16"&      \verb"8.4e-03" &        \verb"*"        &       \verb"3.4e-02" & \verb"(4.1)"   &       \verb"3.2e-02" & \verb"(3.8)"\\
+& \verb"17"&      \verb"2.0e-02" &        \verb"*"        &       \verb"7.5e-02" & \verb"(3.8)"   &       \verb"7.2e-02" & \verb"(3.6)"\\
+& \verb"18"&      \verb"4.6e-02" &        \verb"*"        &       \verb"1.6e-01" & \verb"(3.4)"   &       \verb"1.5e-01" & \verb"(3.2)"\\
+& \verb"19"&      \verb"9.5e-02" &        \verb"*"        &       \verb"3.2e-01" & \verb"(3.4)"   &       \verb"3.0e-01" & \verb"(3.1)"\\
+& \verb"20"&      \verb"2.1e-01" &        \verb"*"        &       \verb"6.9e-01" & \verb"(3.3)"   &       \verb"6.4e-01" & \verb"(3.3)"\\
+& \verb"21"&      \verb"4.3e-01" &        \verb"*"        &       \verb"1.5e+00" & \verb"(3.5)"   &       \verb"1.4e+00" & \verb"(3.2)"\\
+& \verb"22"&      \verb"1.0e+00" &        \verb"*"        &       \verb"3.2e+00" & \verb"(3.1)"   &       \verb"3.0e+00" & \verb"(2.9)"\\
+      \hline
+%      \hline \multicolumn{3}{|l|}{$d=2$} & \multicolumn{2}{|c|}{$m=4$, $E_{\infty}\approx
+%  10^{-8}$} & \multicolumn{2}{|c|}{$m=2$, $E_{\infty}\approx 10^{-4}$} \\
+% \hline $l_N$ & FFT & NDFT & NFFT & (/FFT) & NFFT & (/FFT)\\
+    \multirow{9}{*}{$d=2$}
+& \verb"6"&       \verb"9.0e-07" &        \verb"6.0e-04" &        \verb"6.3e-05"  & \verb"(70.4)" &        \verb"3.2e-05" & \verb"(33.2)"\\
+& \verb"8"&       \verb"4.4e-06" &        \verb"9.5e-03" &        \verb"2.5e-04"  & \verb"(58.0)" &        \verb"1.3e-04" & \verb"(29.0)"\\
+& \verb"10"&      \verb"2.2e-05" &        \verb"1.5e-01" &        \verb"1.2e-03"  & \verb"(55.0)" &        \verb"6.0e-04" & \verb"(27.4)"\\
+& \verb"12"&      \verb"1.2e-04" &        \verb"2.4e+00" &        \verb"6.4e-03"  & \verb"(52.5)" &        \verb"4.0e-03" & \verb"(32.2)"\\
+& \verb"14"&      \verb"1.7e-03" &        \verb"4.0e+01" &        \verb"4.0e-02"  & \verb"(23.4)" &        \verb"3.1e-02" & \verb"(18.1)"\\
+& \verb"16"&      \verb"2.2e-02" &        \verb"*"        &       \verb"1.7e-01"  & \verb"(7.8)"  &       \verb"1.3e-01" & \verb"(6.1)"\\
+& \verb"18"&      \verb"8.7e-02" &        \verb"*"        &       \verb"6.7e-01"  & \verb"(7.7)"  &       \verb"5.0e-01" & \verb"(5.8)"\\
+& \verb"20"&      \verb"3.3e-01" &        \verb"*"        &       \verb"3.0e+00"  & \verb"(9.1)"  &       \verb"2.1e+00" & \verb"(6.4)"\\
+& \verb"22"&      \verb"1.4e+00" &        \verb"*"        &       \verb"1.4e+01"  & \verb"(10.1)" &       \verb"1.1e+01" & \verb"(7.9)"\\
+      \hline
+ %     \hline \multicolumn{3}{|l|}{$d=3$} & \multicolumn{2}{|c|}{$m=4$, $E_{\infty}\approx
+ % 10^{-8}$} & \multicolumn{2}{|c|}{$m=2$, $E_{\infty}\approx 10^{-4}$} \\
+ % \hline $l_N$ & FFT & NDFT & NFFT & (/FFT) & NFFT & (/FFT)\\
+    \multirow{5}{*}{$d=3$}
+& \verb"9"&       \verb"1.0e-05" &        \verb"3.8e-02" &        \verb"4.4e-03" & \verb"(423.4)"  &        \verb"1.1e-03" & \verb"(109.5)"\\
+& \verb"12"&      \verb"1.1e-04" &        \verb"2.4e+00" &        \verb"4.2e-02" & \verb"(369.1)"  &        \verb"1.4e-02" & \verb"(115.8)"\\
+& \verb"15"&      \verb"3.5e-03" &        \verb"1.6e+02" &        \verb"3.9e-01" & \verb"(110.8)"  &        \verb"1.5e-01" & \verb"(41.8)"\\
+& \verb"18"&      \verb"3.9e-02" &        \verb"*"        &       \verb"3.9e+00" & \verb"(99.3)"   &       \verb"1.7e+00" & \verb"(42.4)"\\
+& \verb"21"&      \verb"9.4e-01" &        \verb"*"        &       \verb"8.4e+01" & \verb"(89.0)"   &       \verb"1.8e+01" & \verb"(19.6)"\\
+    \end{tabular}
+  \vspace{0.5ex}%
+  \caption{Computation times in seconds with respect to the problem size $l_N=\log_2|I_{\mathbf{N}}|$.
+    Numbers in parentheses give the penalty factor, i.e., the quotient of computation times
+    for NFFT and FFT.
+    Times for small $l_N$ have been averaged over a series of transforms. An
+    asterisk (\texttt{*}) indicates values not calculated due to excessive computation
+    time.}
+  \label{tab:TimeSpace_1}
+\end{acmtable}
+
+Some conclusions can be drawn from Table \ref{tab:TimeSpace_1}:
+Both, FFT and NFFT, require a computation time of order
+$\cO(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}|)$ as expected.
+Doubling $|I_{\mathbf{N}}|$ indeed results in only slightly more
+than twice the computation time. The NDFT also scales as the expected
+$\cO(|I_{\mathbf{N}}|^2)$.
+For FFT and NDFT, the constant in the $\cO$-notation is independent of the
+space dimension $d$, whereas the computation time of the NFFT increases
+considerably with $d$ fixing $|I_{\mathbf{N}}|$.
+Moreover, Figure \ref{fig:flops} shows a relative performance gain of the FFT
+for small and moderate sized problems.
+In contrast, the overhead contained in the approximation scheme of the NFFT algorithm
+seems to attenuate this effect for the NFFT.
+
+\goodbreak
+
+%-------------------------------------------------------------------------------
+\subsection{Accuracy}
+%-------------------------------------------------------------------------------
+The actual choice of the window function and the cut-off parameter $m$ (cf.
+Appendix) have direct influence on the accuracy achieved by the NFFT algorithm.
+To confirm this, we compare values $f_j$ in \eqref{eq:nfft} computed by the
+NDFT with approximations $s_{j}$ computed using an NFFT with different
+choices of the window function and the cut-off parameter $m$.
+The error is measure is again \eqref{Einf}.
+Figure \ref{fig:accuracy} shows results for $1$, $2$, and $3$-dimensional
+transforms with equal total numbers of Fourier coefficients $|I_{\mathbf{N}}|$.
+
+\begin{figure}[tp]
+  \centering
+  \includegraphics[width=0.9\textwidth]{images/nfft_times_flops}
+  \caption{Performance measured in MFLOPS achieved by the NFFT~3 library
+    with respect to the logarithm of the total problem size $l_N=\log_2|I_{\mathbf{N}}|$.
+    Shown are results for $d=1$ (solid), $d=2$ (dotted), and $d=3$ (dashed).
+    The tested algorithms are the FFT ($\circ$), the NFFT with $m=4$ ($\times$),
+    and the NFFT with $m=2$ ($+$).}
+  \label{fig:flops}
+\end{figure}
+
+\begin{figure}[tp]
+  \subfigure[$d = 1$, $N =
+2^{12}$.]{\includegraphics[width=0.3\textwidth]{images/accuracy4}}
+  \hfill
+  \subfigure[$d = 2$, $N =
+2^{6}$.]{\includegraphics[width=0.3\textwidth]{images/accuracy5}}
+  \hfill
+  \subfigure[$d = 3$, $N =
+2^{4}$.]{\includegraphics[width=0.3\textwidth]{images/accuracy6}}
+  \caption{Error $E_{\infty}$ for increasing cut-off parameter $m=0,\hdots,14$ and
+    $d=1,2,3$. In each case, the degree $N$ was chosen to be equal
+    along each dimension such that $|I_{\mathbf{N}}| = 2^{12}$. We fixed
+    $\sigma = 2$ (cf. Appendix) and $M = 10000$. Shown are results for
+    the Kaiser Bessel ($\circ$), the Sinc ($\times$), the B-spline ($+$), and
+    the Gaussian window function ($\triangle$). \label{fig:accuracy}}
+ \end{figure}
+
+%==============================================================================
+\section{Applications}\label{sect:exap}
+%==============================================================================
+
+The rest of this tutorial is devoted to illustrating the usage of the NFFT~3
+library for more advanced applications.
+We start with two small problems from scattered data approximation which
+use the solver module and the NFFT and NFSFT routines.
+Then we briefly sketch some more important applications - fast
+summation schemes and medical imaging.
+These and more examples and applications can be found in the directories
+\verb"examples/" and \verb"applications/" of the package.
+
+
+%-------------------------------------------------------------------------------
+\subsection{Scattered data approximation - computing an inverse
+transform}\label{sect:rec_example}
+%-------------------------------------------------------------------------------
+
+Our first example demonstrates the reconstruction of the surface of a glacier
+from data available on level sets. %\cite{Franke.Daten}
+This is done by solving a damped optimal interpolation problem.
+Figure \ref{fig:glacier} shows the result using
+the $M = 8345$ available data points and bandwidths $N_0 = N_1 = 256$ for
+the two dimensions after $40$ iterations of the CGNE method.
+The corresponding example program \verb+glacier+ can be found in
+\verb+examples/solver/+. There is also a simple test program called
+\verb"simple_test" to illustrate basic principles.
+\begin{figure}[tp]
+  \centering
+  \subfigure[Surface plot.]{\includegraphics[width=0.45\textwidth]{images/glacier1}}
+  \hfill
+  \subfigure[Contour plot.]{\includegraphics[width=0.45\textwidth]{images/glacier2}}
+ \caption{Reconstruction of the glacier from data on level sets at $M=8345$%, cf.
+%\cite[\texttt{vol87.dat}]{Franke.Daten},
+with $N_0=N_1=256$ after $40$ iterations. \label{fig:glacier}}
+\end{figure}
+
+The second example uses a map from the NASA AMSU mission \cite{NASA_AIRS}
+containing global atmospheric temperature data of the earth from 5 November 2006.
+The map contains empty strips not covered by the trajectory of the satellite
+used to take the measurements. To fill these gaps, we solve a weighted linear least
+squares problem to obtain a spherical harmonics
+approximation of degree $N = 128$ to the given data (see \cite{KeKuPo06b}).
+We then use the values of the approximation to fill the gaps. Figure
+\ref{fig:temperature} shows the original data and the map with the gaps filled.
+
+\begin{figure}[tp]
+  \centering
+  \subfigure[Given data.]
+    {\includegraphics[width=0.45\textwidth]{images/temperaturemap_gaps} } \hfill
+  \subfigure[Approximation.]
+    {\includegraphics[width=0.45\textwidth]{images/temperaturemap_filled}}
+  \caption{Original atmospheric temperature data in Kelvin (a) and the same
+    data with values filled in from the least squares approximation at degree
+    $N = 128$.\label{fig:temperature}}
+\end{figure}
+
+The following subsections are devoted to the demonstration of further important
+applications of NFFT~3 routines. The source code is available in
+the directory \verb"applications/" in the package.
+
+%-------------------------------------------------------------------------------
+\subsection{Fast summation}
+%-------------------------------------------------------------------------------
+An important task in many applications is to efficiently evaluate a linear
+combinations of radial functions, i.e.,
+\begin{align*}
+  g\left(\mathbf{y}_j\right) & := \sum_{l=0}^{L-1} \alpha_l
+K\left(\left\|\mathbf{y}_j-
+  \mathbf{x}_l\right\|_2\right) & (j=0,\ldots,M-1)
+\end{align*}
+with source and target nodes $\mathbf{x}_l, \mathbf{y}_j \in \R^d$,
+and real coefficients $\alpha_l \in \R$.
+
+For kernels $K$ with a certain smoothness, e.g. the Gaussian
+$K(x)=\e^{-x^2/c^2}$, the multiquadric $K(x)=\sqrt{x^2+c^2}$, or the inverse
+multiquadric $K(x)=1/\sqrt{x^2+c^2}$, all with a parameter $c>0$,
+our algorithm requires $\cO(L+M)$ arithmetic operations instead of
+$\mathcal{O}(LM)$ via direct calculation.
+For singular kernels $K$, e.g.
+\begin{equation*}
+  \frac{1}{x^2},\; \frac{1}{|x|}, \; \log |x|, \;
+  x^2 \log |x|, \; \frac{1}{x}, \;
+  \frac{\sin(c x)}{x},\; \frac{\cos(c x)}{x}, \; \cot(cx)
+\end{equation*}
+it is imperative to apply an additional regularization procedure. The cost then
+becomes $\cO(L \log L +M)$ or $\cO(M\log M + L)$ provided that
+either the source nodes $\mathbf{x}_l$ or the target nodes $\mathbf{y}_j$ are
+uniformly distributed to a reasonable degree.
+This fast method, which was proposed in \cite{post02,postni04,FeSt03},
+generalizes the diagonalization of convolution matrices by Fourier matrices to
+settings with arbitrary nodes.
+Also, our method yields nearly the same cost as the FMM \cite{beatgreen97}
+while allowing for an easy exchange of the kernel $K$.
+A recent application in particle simulation is given in \cite{popori05}.
+The directory \texttt{applications/fastsum} contains C and {\sc MatLab} programs
+showing how to use the fast summation method.
+
+%-------------------------------------------------------------------------------
+%\subsection{Fast Gauss transform}
+%-------------------------------------------------------------------------------
+As a special case, let us consider the fast Gauss transform. This is the calculation of sums of the form
+\begin{align*}
+  g\left(y_j\right) & :=\sum_{l=0}^{L-1} \alpha_l {\rm e}^{-\sigma|y_j-x_l|^2} &
+  (j=0,\ldots,M-1)
+\end{align*}
+for source and target nodes $x_l,y_{j}\in[-\frac{1}{4},\frac{1}{4}]$,
+complex coefficients $\alpha_l \in \C$, and a complex parameter
+$\sigma =a +{\rm i} b$, $a>0$, $b\in\R$ with $\mathcal{O}(L + M)$ operations.
+For details see \cite{AnBe04,KuPoSt06}.
+Numerical examples found in \cite{KuPoSt06} can be reproduced with the programs
+found in the directory \texttt{applications/fastgauss}.
+
+%-------------------------------------------------------------------------------
+%\subsection{Summation of zonal functions on the sphere}
+%-------------------------------------------------------------------------------
+On the sphere $\mathbb{S}^2$, the equivalent of radial functions are \emph{zonal
+functions}. Fast summation of zonal functions on the sphere is the computation
+of
+sums of the form
+\begin{equation*}
+  g\left(\mathbf{\xi}_j\right) := \sum_{l = 0}^{L-1} \alpha_l K\left(\mathbf{\eta}_l
+  \cdot \mathbf{\xi}_j\right) \qquad (j=0,\ldots,M-1)
+\end{equation*}
+for source and target nodes $\mathbf{\eta}_l,\mathbf{\xi}_j \in \S^2$, and real
+coefficients $\alpha_l \in \R$ with $\cO(L+M)$ operations.
+Our algorithm is based on the nonequispaced fast spherical Fourier
+transform. It and can be easily adapted to different kernels $K$, e.g. the
+Poisson kernel, smooth locally supported kernels, or the spherical Gaussian
+kernel. For details see \cite{KeKuPo06}. Numerical examples
+are found under \verb+applications/fastsumS2/+.
+
+
+%-------------------------------------------------------------------------------
+\subsection{Applications in medical imaging}
+%-------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------
+%\subsection{Iterative reconstruction in magnetic resonance imaging}
+%-------------------------------------------------------------------------------
+In magnetic resonance imaging (MRI), raw data is measured in \emph{k-space}, the
+domain of spatial frequencies. Methods that use non-Cartesian sampling grids
+in k-space, e.g. a spiral, have received increasing attention recently.
+Reconstruction is usually done by resampling the data onto a Cartesian
+grid to use the standard FFT. This is often called \emph{gridding}.
+A so-called inverse model is based on an implicit discretization and both
+methods can be implemented efficiently using the NFFT and the inverse NFFT,
+respectively (see \cite{KnKuPo} and references therein).
+Furthermore, approaches to field inhomogeneity correction have been proposed
+in \cite{SuNoFe03,EgKnPo06}.
+Numerical tests are found in \verb+applications/mri/+.
+
+%-------------------------------------------------------------------------------
+%\subsection{Radon transform, computer tomography, and ridgelet transform}
+%-------------------------------------------------------------------------------
+In computerized tomography (CT) an $N \times N$ (medical) image is to be
+reconstructed from its Radon transform.
+The standard reconstruction algorithm, the filtered backprojection, yields
+reasonably good images at the expense of $\cO( N^3 )$ arithmetic operations.
+Fourier reconstruction methods reduce the number of arithmetic operations to
+${\cal O}( N^2 \log N )$.
+Unfortunately, straightforward Fourier reconstruction algorithms suffer
+from unacceptable artifacts making them useless in practice. Better quality of
+the reconstructed images can be achieved by our algorithm which is based on
+NFFTs. For details see \cite{PoSt01IMA,PoSt00SPIE,PoSt02JFAA} and references
+therein, for examples we refer to \verb+applications/radon/+.
+
+Another application of the discrete Radon transform is the \emph{discrete
+ridgelet transform}, see e.g. \cite{CaDeDoYi} and the references therein.
+A simple test program for denoising images by applying hard thresholding to
+ridgelet coefficients \cite{FeMa05} can be found in \texttt{applications/radon}.
+It uses the NFFT-based discrete Radon transform and the translation-invariant
+discrete Wavelet transform from the \textsc{MatLab} toolbox WaveLab850
+\cite{WaveLab}.
+
+%-------------------------------------------------------------------------------
+%\subsection{Computation of the polar FFT}
+%-------------------------------------------------------------------------------
+Our last example to be mentioned here is the \emph{polar FFT}, which is a special case
+of the NFFT for a particular set of nodes.
+Of course, the polar as well as a so-called pseudo-polar FFT can be calculated
+efficiently accurately with the NFFT.
+Furthermore, the reconstruction of a $2d$ signal from its Fourier transform
+samples on a (pseudo-)polar grid by means of the inverse nonequispaced FFT is
+possible under certain density assumptions.
+For details see \cite{AvCoDoElIs,FeKuPo06,BeKuMo07}. Numerical tests can be
+found in the directory \verb+applications/polarFFT/+.
+
+\appendix
+\section*{APPENDIX}
+
+%-------------------------------------------------------------------------------
+\section{Installation} \label{sect:inst}
+%-------------------------------------------------------------------------------
+
+The installation of the NFFT~3 software library follows the usual GNU
+principles.
+Download the most recent version from
+\verb"http://www.tu-chemnitz.de/~potts/nfft".
+We assume that you use a \verb"bash" compatible shell. Uncompress the archive
+and
+change to the newly created directory:
+\begin{verbatim}
+  tar xfvz nfft3.x.x.tar.gz
+  cd nfft3.x.x
+\end{verbatim}
+%Before you compile and install the library, you might want to adjust the
+%environment variables \verb"CPPFLAGS" and \verb"LDFLAGS" so that NFFT~3 can find
+%the FFTW library if it has been installed in a non-standard location and/or if
+%the NFFT~3 library shall be compiled with specific compiler flags. Leave this
+%step
+%out, if you are unsure what to do. Return to this step if the configure script,
+%the compiler or the linker complain about missing files or libraries. Here is
+%an example that adds the compiler flag \verb"-O3" for optimisations and
+%adds a path to include files and libraries in a non-standard location:
+%\begin{itemize}
+%  \itemsep-1ex
+%  \item
+%    \verb+export CPPFLAGS="$(CPPFLAGS) -O3 -I/path/to/include/files"+
+%  \item \verb+export LDFLAGS="$(LDFLAGS) -L/path/to/libraries"+
+%\end{itemize}
+Figure \ref{nfft:fig:svn} gives an overview over the directory structure of
+the NFFT~3 package.
+\begin{figure}[tp]%tb!]
+  \centering
+  \input{tree}
+  \caption{Directory structure of the NFFT~3 package.
+    \label{nfft:fig:svn}}
+\end{figure}
+The package is now ready to be configured. To this end, run the configure script
+\verb"configure" which will adapt the build process to your computer system.
+After that, compile the library by invoking the \verb"make" utility:
+\begin{verbatim}
+  ./configure
+  make
+\end{verbatim}
+When the build process has finished, you can run \verb"make install" to install the
+library permanently on your system.
+%If for example \verb"/usr" is your default installation directory,
+%\verb"make install"
+%will copy the NFFT~3 library to \verb+/usr/lib+, the C header files to
+%\verb+/usr/include/nfft+ and the documentation together with all examples and
+%applications to \verb+/usr/share/nfft+.
+
+For more information about options offered by the \verb"configure" script,
+run the script with the option \verb+--help+. For example, to change the
+installation location you can use the \verb"--prefix".
+Here is a short list of some important options:
+By default, NFFT~3 uses the Kaiser-Bessel window function
+(see Appendix \ref{appendix.nfft}). This can be changed
+by passing the option \verb"--with-window=ARG",
+where \verb"ARG" is replaced by one of \verb"kaiserbessel" (Kaiser-Bessel),
+\verb"gaussian" (Gaussian), \verb"bspline" (B-spline), or
+\verb"sinc" (sinc power). This makes all routines use the
+respective window function.
+NFFT~3 routines can also be configured to measure the computation time for
+several steps during execution. You can enable this behavior with
+the options
+\verb"--enable-measure-time" and/or \verb"--enable-measure-time-fftw".
+
+%-------------------------------------------------------------------------------
+\section{NFFT - nonequispaced fast Fourier transform}
+\label{appendix.nfft}
+%-------------------------------------------------------------------------------
+In this section, we describe the approximate NFFT algorithm in more detail.
+To illustrate the principles, we restrict ourselves to the one-dimensional
+case, hence the computation of
+\begin{align}
+  \label{trigPoly1d}
+  f\left(x\right) & = \sum_{k\in I_{N}} \hat{f}_k \eim{k x} &
+  (j=0,\hdots,M-1)
+\end{align}
+for nonequispaced nodes $x_j \in \T$.
+In this case, the NFFT has cost
+${\cal O}\left(N \log N  + |\log \varepsilon|
+M\right)$, where $\varepsilon$ is the desired accuracy.
+The chief idea of the NFFT algorithm is to use standard FFTs in combination with
+an approximation scheme that is based on a window function $\varphi$. This function needs to
+be mutually well localized in time/spatial and frequency domain.
+%$\mathbb{R}$ and at the same time also in the frequency domain $\mathbb{R}$.
+Several such window functions have been proposed in
+\cite{duro93,bey95,st97,Fou02,fesu02}.
+
+\subsection*{The ansatz}
+The first step is to approximate the trigonometric polynomial $f$ of degree
+$N$ in \eqref{trigPoly1d} by a linear combination $s_{1}$ of shifted
+one-periodic window functions $\tilde \varphi$,
+\begin{equation}\label{s1}
+  s_1\left(x\right) := \sum_{l \in I_n} g_{l} \; \tilde \varphi\left(x -
+  \frac{l}{n}\right) \,,
+\end{equation}
+where $n:=\sigma N$ for some oversampling factor $\sigma >1$. The value of $n$ determines the
+length of the ordinary FFT used below.
+
+\subsection*{The window function}
+The window function $\varphi:\R\rightarrow\R$ is chosen so that
+the one-periodic version
+$
+  \tilde \varphi\left(x\right):=\sum_{r \in \Z} \varphi\left(x+r\right)
+$
+has a uniformly convergent Fourier series
+$
+  \tilde \varphi\left(x\right)=
+  \sum_{k\in \Z} c_k\left(\tilde\varphi\right) \eim{k x},
+$
+and at the same time is well localized in the time/spatial domain $\T$
+and in the frequency domain $\mathbb{Z}$.
+The Fourier coefficients $c_k\left( \tilde \varphi \right)$ of this one-periodic version are samples
+of the Fourier transform $\hat \varphi$ of the original window function at integers
+points, i.e.,
+\begin{align*}
+  c_k\left( \tilde \varphi \right)
+  & :=\int\limits_{\T} \tilde \varphi \left(x\right) \eip{k x} \, {\rm d} x
+  = \int\limits_{\mathbb{R}} \varphi \left(x\right) \eip{k x} \, {\rm d} x
+  =: \hat \varphi \left(k\right) & (k\in\Z).
+\end{align*}
+An example is shown in Figure \ref{fig:window_fun}.
+\begin{figure}[tp]
+  \centering
+   \subfigure[Window function.]{
+     \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct1}}
+   \qquad
+     %\includegraphics[width=4.8cm,height=3.8cm]{images/window_fct2} &
+   \subfigure[Fourier transform.]{
+     \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct3}}
+   \caption{Example for a suitable window function, in this case the
+     Gaussian window function $\varphi$ (left)
+     %its one-periodic version $\tilde \varphi$ (center),
+     and the sampled integral Fourier-transform $\hat \varphi$ (right) with
+     pass, transition, and stop band for $N=24,\,\sigma=\frac{4}{3},\,n=32$.}
+   \label{fig:window_fun}
+ \end{figure}
+
+\subsection*{The first approximation - cut-off in frequency domain}
+If we take the definition in \eqref{s1} and switch to the frequency domain, we obtain
+\begin{equation*}
+  s_1\left(x\right)
+  =\sum_{k \in I_n} \hat g_k \, c_k\left(\tilde \varphi\right) \, \eim{k x}
+  +\sum_{r \in \Z \backslash \left\{0\right\}} \sum_{k \in I_n} \hat g_k \,
+  c_{k + n r} \left(\tilde \varphi\right) \, \eim{(k + n r)x }
+\end{equation*}
+with discrete Fourier coefficients
+\begin{equation} \label{coeff}
+  \hat g_k = \sum_{l \in I_n} g_l \, \eip{\frac{k l}{n}}.
+\end{equation}
+A comparison of \eqref{trigPoly1d} and \eqref{s1} suggests to
+define
+\begin{equation} \label{coeff2}
+  \hat g_k :=
+    \begin{cases}
+      \frac{\hat f_k}{c_k \left(\tilde \varphi\right)} & \text{for $k \in I_N$},
+      \\[1ex]
+      0 & \text{for $k \in I_n \backslash I_N$},
+    \end{cases}
+\end{equation}
+assuming that $c_k\left(\tilde\varphi\right)$ is small for $|k| \ge n-\frac{N}{2}$.
+The values $g_l$ can now be computed by applying the Fourier inversion theorem
+to \eqref{coeff}. This step can be realized by an FFT of length $n$.
+This first approximation causes an aliasing error.
+
+\subsection*{The second approximation - cut-off in time/spatial domain}
+If the window function $\varphi$ is well localized in time/spatial domain then it can be
+approximated by a truncated version
+\begin{equation*}
+  \psi\left(x\right):=\varphi\left(x\right) \chi_{[-{\frac{m}{n}},
+  {\frac{m}{n}}]}\left(x\right),
+\end{equation*}
+with ${\rm supp} \, \psi = \left[-{\frac{m}{n}},{\frac{m}{n}}\right], \;m \ll
+n,\; m\in \N$.
+Here too, we can define a one periodic version $\tilde \psi$ with compact support
+in $\T$ by
+$
+  \tilde \psi\left(x\right)=\sum_{r \in \Z} \psi\left(x+r\right).
+$
+With the help of the index set
+$
+  I_{n,m} \left(x_j\right) := \left\{ l \in I_n : n x_j - m \le l \le n x_j +
+    m \right\}
+$
+a further approximation to the first approximation $s_1$ at the nodes $x_{j}$ can be defined by
+\begin{equation} \label{approx}
+  s\left(x_j\right) :=
+  \sum_{l \in I_{n,m}\left(x_j\right) } g_l \,
+  \tilde\varphi\left(x_j - {\frac{l}{n}}\right) =
+  \sum_{l \in I_n } g_l \,
+  \tilde\psi\left(x_j - {\frac{l}{n}}\right) \, .
+\end{equation}
+Note, that for fixed $x_j\in \T$, the above sum contains at most
+$(2m+1)$ nonzero summands.
+This second approximation causes a truncation error.
+
+\subsection*{The case $d>1$}
+The described approximation method can be generalized to arbitrary dimensions.
+But first, a few generalizations have to be introduced.
+A multivariate window function is now defined by
+$\varphi\left(\mathbf{x}\right):=\prod_{t=0}^{d-1} \varphi_t\left(x_t\right)$
+with a univariate window function $\varphi_t$.
+A simple consequence is that the Fourier coefficients have the form $c_{\mathbf{k}}\left(\tilde \varphi\right)  =
+\prod_{t=0}^{d-1} c_{k_t}\left(\tilde \varphi_t\right)$.
+The ansatz function $s_{1}$ reads now
+\begin{equation*}
+  s_1\left(\mathbf{x}\right) := \sum_{\mathbf{l} \in I_{\mathbf{n}}}
+ g_{\mathbf{l}} \; \tilde
+  \varphi\left(\mathbf{x} - \mathbf{n}^{-1}\odot\mathbf{l}\right).
+\end{equation*}
+The size of the FFT size is determined to $\mathbf{n}:=\mathbf{\sigma} \odot
+\mathbf{N}$, and the oversampling factor is
+$\mathbf{\sigma}=\left(\sigma_0,\hdots,\sigma_{d-1}\right)^{\top}$.
+Following \eqref{coeff2} we define
+\begin{equation*}
+  \hat g_{\mathbf{k}} := \left\{
+    \begin{array}{ll}
+      \frac{\hat f_{\mathbf{k}}}{c_{\mathbf{k}} \left(\tilde \varphi\right)}
+ & \text{for
+      } \mathbf{k} \in I_{\mathbf{N}} , \\[1ex]
+      0 & \text{for } \mathbf{k} \in I_{\mathbf{n}} \backslash I_{\mathbf{N}}.
+    \\
+    \end{array}
+  \right.
+\end{equation*}
+The values $g_{\mathbf{l}}$ are obtained by a (multivariate) FFT of size
+$n_0\times n_1 \times \hdots \times n_{d-1}$.
+Using the compactly supported function $\psi\left(\mathbf{x}\right)=\varphi
+\left(\mathbf{x}\right)\chi_{[-{\frac{m}{n}},{\frac{m}{n}}]^d} \left(\mathbf{x}
+\right)$ gives the final form,
+\begin{equation*}
+  s\left(\mathbf{x}_j\right) := \sum_{\mathbf{l} \in I_{\mathbf{n},m}
+ \left(\mathbf{x}_j\right) }
+  g_{\mathbf{l}} \, \tilde\varphi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot
+ \mathbf{l}\right) =
+\sum_{\mathbf{l} \in I_{\mathbf{n}} }
+g_{\mathbf{l}} \, \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot
+    \mathbf{l}\right)\,.
+\end{equation*}
+Again, $\tilde \psi$ denotes the one-periodic version of $\psi$.
+Note that the multi-index set
+$
+  I_{\mathbf{n},m} \left(\mathbf{x}_j\right) := \left\{ \mathbf{l} \in
+ I_{\mathbf{n}} : \mathbf{n}
+  \odot \mathbf{x}_j - m \mathbf{1} \le \mathbf{l} \le \mathbf{n} \odot
+ \mathbf{x}_j + m
+  \mathbf{1}\right\}
+$
+has at most $(2m+1)^d$ entries for every $\mathbf{x}_j$.
+
+\subsection*{The final algorithm}
+The NFFT algorithm is given in pseudo-code in Algorithm~\ref{algo:nfft}. In
+addition to the evaluation of the window functions, it requires roughly
+$|I_{\mathbf{N}}|+|I_{\mathbf{n}}| \log |I_{\mathbf{n}}| + 2(2m+1)^d M$
+floating point operations.
+In matrix-vector notation, Algorithm~\ref{algo:nfft} can be written as
+$
+  \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{D} \mathbf{F} \mathbf{B}
+  \mathbf{\hat{f}},
+$
+where $\mathbf{B}$ denotes the sparse real $M \times
+\left|I_{\mathbf{n}}\right|$
+matrix
+\begin{equation*} \label{spB}
+  \mathbf{B} := \left( \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot
+  \mathbf{l}\right)
+  \right)_{j=0,\hdots,M-1;\, \mathbf{l}\in I_{\mathbf{n}}}.
+\end{equation*}
+The matrix
+$\mathbf{F}:=(\eim{\mathbf{k}(\mathbf{N^{-1}}\odot\mathbf{j})})_{\mathbf{j},
+  \mathbf{k}\in I_{\mathbf{n}}}$ is the ordinary Fourier matrix of size
+$\left|I_{\mathbf{n}}
+\right| \times
+\left|I_{\mathbf{n}}\right|$ and $\mathbf{D}$ is a real $\left|I_{\mathbf{n}}
+\right|
+\times |I_{\mathbf{N}}|$ ``diagonal'' matrix defined by
+\begin{equation*}
+  \mathbf{D} := \bigotimes_{t=0}^{d-1} \left(\mathbf{O}_t \, | \, \mbox{diag}
+  \left(1/\,
+      c_{k_t}\left(\tilde \varphi_t\right)\right)_{k_t\in I_{N_t}} \, | \,
+      \mathbf{O}_t \right)^{\top}
+\end{equation*}
+with zero matrices $\mathbf{O}_t$ of size $N_t \times \frac{n_t-N_t}{2}$.
+The corresponding adjoint matrix-vector product is given by
+$
+  \mathbf{A}^{\adj} \mathbf{\hat{f}} \approx \mathbf{B}^{\top}
+\mathbf{F}^{\adj}
+    \mathbf{D}^{\top} \mathbf{\hat{f}}
+$.
+With the help of the transposed index set
+$
+  I_{\mathbf{n},m}^{\top}(\mathbf{l}) := \{j=0,\hdots,M-1 :
+  \mathbf{l}-m
+  \mathbf{1} \le \mathbf{n} \odot \mathbf{x}_j \le \mathbf{l}+m \mathbf{1}
+  \}
+$,
+one obtains Algorithm~\ref{algo:nfftH} for the adjoint NFFT.
+\begin{algorithm}[tp]
+  \hrule
+  \footnotesize
+  \rule[-1.5ex]{0ex}{5ex}\raggedright Input: $d$, $M \in \N$, $\mathbf{N} \in 2\N^d$,
+      ${\mathbf{x}}_j \in [-\frac{1}{2},\frac{1}{2})^d$, $j=0,\ldots,M-1$, and
+      $\hat  f_{\mathbf{k}}\in \C$, $\mathbf{k} \in I_{\mathbf{N}}$.
+  \begin{algorithmic}[1]
+    \itemsep=1.1ex
+    \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+      $\hat g_{\mathbf{k}} :=
+      |I_{\mathbf{n}}|^{-1} \cdot \hat f_{\mathbf{k}}/
+       c_{\mathbf{k}}(\tilde \varphi)$.
+
+    \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute
+    $g_{\mathbf{l}} := \sum_{\mathbf{k} \in I_{\mathbf{N}}} \hat
+    g_{\mathbf{k}} \, \eim{\mathbf{k} (\mathbf{n}^{-1} \odot \mathbf{l})}$
+    by a $d$-variate FFT.
+
+    \STATE For $j=0,\hdots,M-1$ compute
+    $f_j := \sum_{\mathbf{l} \in I_{\mathbf{n},m}
+      ({\mathbf{x}}_j)} g_{\mathbf{l}} \,
+      \tilde\varphi({\mathbf{x}}_j - \mathbf{n}^{-1}\odot
+      \mathbf{l})$.\\[2ex]
+  \end{algorithmic}
+
+  Output: Approximate function values $f_j,\;j=0,\hdots,M-1$.\\
+  Arithmetic cost: $|I_{\mathbf{N}}|+|I_{\mathbf{n}}| \log |I_{\mathbf{n}}| +
+  2(2m+1)^d M$ + evaluations of the window function.\rule[-1.5ex]{0ex}{3ex}
+  \hrule
+  \caption{Nonequispaced fast Fourier transform (NFFT).\label{algo:nfft}}
+\end{algorithm}
+\begin{algorithm}[tp]
+  \hrule
+  \footnotesize
+  \rule[-1.5ex]{0ex}{5ex}\raggedright Input: $d$, $M \in \N$, $\mathbf{N}\in 2\N^d$,
+      ${\mathbf{x}}_j\in [-\frac{1}{2},\frac{1}{2})^d$,
+      and $f_j\in \C$, $j=0,\hdots,M-1$.\\[\baselineskip]
+  \begin{algorithmic}[1]
+    \itemsep=1.1ex
+    \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute
+      $g_{\mathbf{l}} := \sum\limits_{j \in
+      I_{\mathbf{n},m}^{\top} (\mathbf{l}) } f_j \,
+      \tilde\varphi({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l})$.
+    \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+    $\hat g_{\mathbf{k}} := \sum\limits_{\mathbf{l} \in
+      I_{\mathbf{n}}} g_{\mathbf{l}} \, {\rm e}^{+2 \pi {\rm i} \mathbf{k}
+      (\mathbf{n}^{-1} \odot \mathbf{l})}$
+    by $d$-variate (backward) FFT.
+    \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+      $\hat h_{\mathbf{k}} := |I_{\mathbf{n}}|^{-1} \cdot
+      \hat{g}_{\mathbf{k}} / c_{\mathbf{k}}(\tilde \varphi)$.\\[2ex]
+  \end{algorithmic}
+
+  Output: Approximate coefficients $\hat h_{\mathbf{k}},\;\mathbf{k} \in
+    I_{\mathbf{N}}$.\\
+ Arithmetic cost: $|I_{\mathbf{N}}|+|I_{\mathbf{n}}| \log |I_{\mathbf{n}}| +
+  2(2m+1)^d M$ + evaluation of the window function.\rule[-1.5ex]{0ex}{3ex}
+  \hrule
+  \caption{Adjoint nonequispaced fast Fourier transform (adjoint NFFT).}
+  \label{algo:nfftH}
+\end{algorithm}
+
+%Owing to the characterization of the nonzero elements in the matrix $\mathbf{B}$
+%by
+%$
+%  \bigcup_{j=0}^{M-1} \{j\} \times I_{\mathbf{n},m}({\mathbf{x}}_j)
+%  =
+%  \bigcup_{\mathbf{l} \in I_{\mathbf{n}}} I_{\mathbf{n},m}^{\top}(\mathbf{l})
+%  \times \{\mathbf{l}\},
+%$
+%the multiplication with $\mathbf{B}^{\top}$ is implemented in
+%a ``transposed'' way in the library with summation as outer loop and only using
+%the multi-index sets $I_{\mathbf{n},m} ({\mathbf{x}}_j)$.
+
+%-------------------------------------------------------------------------------
+\section{Available window functions and evaluation techniques}
+\label{sect:windows}
+%-------------------------------------------------------------------------------
+For clarity of the presentation, we restrict ourselves to the case $d=1$, again.
+To keep the aliasing error and the truncation error small, several functions
+$\varphi$ with good localization in time and frequency domain have been
+proposed,
+e.g. the (dilated) \emph{Gaussian} \cite{duro93,st97,DuSc} (with shape
+parameter $b := \frac{2\sigma}{2 \sigma -1} \frac{m}{\pi}$),
+\begin{align}
+\label{gaussian}
+\varphi\left(x\right)
+& =
+\left(\pi b\right)^{-1/2} \,
+{\rm e}^{-\frac{\left(nx\right)^2}{b}}
+, &
+\hat \varphi \left(k\right)
+& =
+\frac{1}{n} \, {\rm e}^{-b\left(\frac{\pi k}{n}\right)^2},
+\intertext{
+(dilated) \emph{cardinal central $B$--splines} \cite{bey95,st97},}
+\label{bspline}
+\varphi\left(x\right)
+& =
+M_{2m}\left(n x\right), &
+\hat \varphi \left(k\right)
+& =
+\frac{1}{n} \sinc^{2m} \left( k \pi/n\right),
+\intertext{where $M_{2m}$ denotes the centered cardinal $B$--Spline of order $2m$,
+(dilated) \emph{Sinc functions} \cite{pottshabil},}
+\label{sinc}
+\varphi\left(x\right)
+& =
+\frac{N\left(2\sigma-1\right)}{2m} \sinc^{2m} \left(\frac{\left(\pi N x
+\left(2\sigma-1\right)\right)}{2m} \right), &
+\hat \varphi \left(k\right)
+& =
+M_{2m}\left(\frac{2mk}{\left(2\sigma-1\right)N}\right),
+\end{align}
+and
+(dilated) \emph{Kaiser--Bessel functions} \cite{Ja,Fou02} (with shape
+parameter $b :=  \pi \left(2 - \frac{1}{\sigma} \right)$),
+\begin{equation}
+  \label{kaiser}
+  \begin{aligned}
+    \varphi\left(x\right)
+    & = \frac{1}{\pi}
+    \begin{cases}
+      \ds \frac{\sinh\left(b\sqrt{m^2 - n^2 x^2}\right)}{\sqrt{m^2 - n^2 x^2}},
+      & \text{for $|x| \le \frac{m}{n}$},
+      \\[4ex]
+      \ds \frac{\sin\left(b\sqrt{n^2 x^2 - m^2}\right)}{\sqrt{n^2 x^2-m^2}},
+      & \text{otherwise},
+    \end{cases}
+    \\[1ex]
+    \hat \varphi \left(k\right)
+    & = \frac{1}{n}
+    \begin{cases}
+      \ds I_0 \left(m \sqrt{b^2 - \left(2 \pi k/n \right)^2} \right),
+      & \text{for $k= -n \left(1-\frac{1}{2\sigma} \right), \ldots,n \left(1-\frac{1}{2\sigma}\right)$},
+      \\
+      0, & \text{otherwise},
+    \end{cases}
+  \end{aligned}
+\end{equation}
+where $I_0$ denotes the \emph{modified order-zero Bessel function}.
+For these functions $\varphi$ it has been proved that
+\[
+|f\left(x_j\right) - s\left(x_j\right)| \le
+C\left(\sigma,m\right) \sum_{k\in I_N} |\hat{f}_k|,
+\]
+where
+\[
+C\left(\sigma,m\right) :=
+\begin{cases}
+  4 \, \e^{-m \pi \left(1-1/\left(2\sigma-1\right)\right)}, & \text{for \eqref{gaussian}},
+  \\
+  4 \, \left(\frac{1}{2\sigma -1} \right)^{2m}, & \text{for \eqref{bspline}},
+  \\[1ex]
+  \frac{1}{m-1}\left(\frac{2}{\sigma^{2m}}+\left(\frac{\sigma}{2\sigma-1}\right)^{2m}\right), &
+    \text{for \eqref{sinc}},
+  \\[1ex]
+  4\pi\left(\sqrt{m}+m\right)\sqrt[4]{1-\frac{1}{\sigma}} \, \e^{-2 \pi m \sqrt{1-1/\sigma}}, &
+    \text{for \eqref{kaiser}}.
+\end{cases}
+\]
+Thus, for fixed $\sigma >1$ the approximation error introduced by the NFFT
+decays exponentially with the number of summands $m$ in \eqref{approx}.
+These estimates can of course be generalized to higher dimensions; see \cite{elst}.
+
+It must be noted that the cost of the NFFT also increases with $m$.
+In the following, we will suggest different methods for efficient storage and
+application of the matrix $\mathbf{B}$. These are all available in the
+NFFT~3 library by choosing particular flags during the initialization phase.
+%These methods do not yield a different asymptotic performance but rather yield
+%a lower constant in the amount of computation.
+
+\subsection*{Fully precomputed window function}
+An obvious possibility is to precompute all values $\varphi(\mathbf{x}_j -
+\mathbf{n}^{-1}\odot\mathbf{l})$ for $j=0,\hdots,M-1$ and $\mathbf{l}\in
+I_{\mathbf{n},m} (\mathbf{x}_j)$ which are needed for $\mathbf{B}$.
+This needs to store the possibly large amount of $(2m+1)^d M$ real numbers.
+On the other hand, no additional computation is required during the matrix-vector
+multiplication apart from the inevitable $2(2m+1)^d M$ floating point operations.
+%Furthermore, we store for this method explicitly the row and column index for
+%each nonzero entry of the matrix $\mathbf{B}$.
+This method, indicated by the flag \texttt{PRE\_FULL\_PSI}, is the fastest procedure
+but can only be used if enough memory for storage is available.
+
+\subsection*{Tensor product based precomputation}
+Using the fact that the window functions are represented by tensor products one can
+resort to storing only the values $\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for
+$j=0,\hdots,M-1$, $t=0,\hdots,d-1$, and $l_t\in I_{n_t,m} ((\mathbf{x}_j)_t)$,
+where $(\mathbf{x}_j)_t$ denotes the $t$th component of the $j$th node.
+This method needs to store $d(2m+1)M$ real numbers which is less than the first method needs.
+However, for each node one possibly needs up to $2(2m+1)^d$ extra multiplications to
+obtain the values of the multivariate window function
+$\varphi(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l})$ for $\mathbf{l}\in
+I_{\mathbf{n},m}(\mathbf{x}_j)$.
+This technique is available for every window function discussed
+and can be used by setting the flag \texttt{PRE\_PSI}. This is also the
+default method used in our library.
+
+\subsection*{Linear interpolation from a lookup table}
+For a large number of nodes $M$, the amount of memory can be further reduced
+by using lookup table techniques.
+For a recent example within the framework of gridding see \cite{BeNiPa05}.
+We suggest to precompute from the even window function the equidistant samples
+$\varphi_t(\frac{rm}{Kn_t})$ for $t=0,\hdots,d-1$ and $r=0,\hdots,K$,
+$K\in\N$. Then for the actual node $\mathbf{x}_j$ during the NFFT
+the values $\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for
+$t=0,\hdots,d-1$ and $l_t\in I_{n_t,m} ((\mathbf{x}_j)_t)$ are computed
+by linear interpolation from its two neighboring values.
+This method needs to store only $dK$ real numbers in total, where $K$
+depends only on the desired accuracy but neither on the number of
+nodes $M$ nor on the multibandwidth $\mathbf{N}$.
+If we choose $K$ to be a multiple of $m$, we can further reduce the computational
+costs during the interpolation step since the distance from $(\mathbf{x}_j)_t-
+\frac{l_t}{n_t}$ to the two neighboring values is the same for all
+$l_t\in I_{n_t,m}((\mathbf{x}_j)_t)$.
+During the actual multiplication with the matrix $\mathbf{B}$, this method requires
+$2(2m+1)^d$ extra multiplications per node. It can be used by setting the flag
+\texttt{PRE\_LIN\_PSI}. Error estimates for this additional
+approximation are given in \cite{KuPo06}.
+
+\subsection*{Fast Gaussian gridding}
+Two useful properties of the Gaussian window function \eqref{gaussian} that can be exploited
+within the presented framework have recently been reviewed in \cite{GrLe04}.
+Beside the tensor product structure for $d>1$, which is also valid for all other
+window functions, it is remarkable that the number of evaluations of the
+exponential function \texttt{exp()} can be reduced by a substantially.
+More precisely, for $d=1$ and a fixed node $x_j$ the evaluation of
+$\varphi(x_j-\frac{l'}{n})$, $l'\in I_{n,m}(x_j)$ can be computed more
+efficiently by writing this as
+\begin{equation*}
+  \sqrt{\pi b}\varphi\left(x_j-\frac{l'}{n}\right)
+  =\e^{-\frac{(nx_j-l')^2}{b}}
+  =\e^{-\frac{(nx_j-u)^2}{b}}
+  \left(\e^{-\frac{2(nx_j-u)}{b}}\right)^l
+  \e^{-\frac{l^2}{b}}\,,
+\end{equation*}
+where $u=\min I_{n,m}(x_j)$ and $l=0,\hdots,2m$.
+The first factor and the exponential within the brackets are a
+constant for each fixed node $x_j$.
+Once we have evaluated the second exponential, its $l$th power can be computed
+by repeated multiplications only.
+Furthermore, the last exponential is independent of $x_j$ such that these $2m+1$
+different values need to be precomputed only once -- usually a negligible amount.
+Thus, it is sufficient to store or evaluate $2M$ exponentials for $d=1$.
+The case $d>1$ needs to store or evaluate $2dM$ numbers. This follows from the
+tensor product structure.
+The described method is employed when the flags \texttt{FG\_PSI} and possibly
+\texttt{PRE\_FG\_PSI} are used.
+
+\subsection*{No precomputation of the window function}
+The last method considered does not precompute any values of the window function
+at all. Instead, all values are calculated on-line. This needs to be done at most
+$\frac{3}{2}(2m+1)^d M$ times. The computation time strongly depends on how fast
+one can evaluate the particular window function. Since this method does not need
+any additional storage, it is attractive whenever large problems are considered
+that would push the other methods beyond the memory limitations.
+
+%-------------------------------------------------------------------------------
+\section{Further NFFT approaches}\label{A.4}
+%-------------------------------------------------------------------------------
+Besides \cite{nfft3}, the {\sc MatLab} toolbox \cite{fematlab} also implements
+the NFFT.
+In several papers, approximations techniques similar to the NFFT have been
+described.
+Common names for these schemes are
+\emph{non-uniform fast Fourier transform} \cite{fesu02},
+\emph{generalized fast Fourier transform} \cite{duro93},
+\emph{unequally-spaced fast Fourier transform} \cite{bey95},
+\emph{fast approximate Fourier transforms for irregularly spaced data}
+\cite{ware98},
+\emph{non-equispaced fast Fourier transform} \cite{Fou02} or
+\emph{gridding} \cite{scsc,Ja,Pe}.
+
+Also, different window functions have been considered in various papers, e.g. a Gaussian
+pulse tapered with a Hanning window \cite{DuSc}, Gaussian kernels combined
+with Sinc kernels \cite{Pe}, and particular optimized windows \cite{Ja,DuSc}.
+Special approaches based on scaling vectors \cite{NgLi99}, minimizing
+the Frobenius norm of certain error matrices \cite{st01}, or min-max
+interpolation \cite{fesu02} have been proposed.
+While these approaches lead to better accuracy for the Gaussian or B-Spline
+windows, improvements for the Kaiser-Bessel window are marginal.
+Recently, the time consuming multiplication with the matrix $\mathbf{B}$ has
+been accelerated by using commodity graphics hardware \cite{SoScNoHa08}.
+
+The following two approaches have also been considered for the
+univariate case \hbox{$d=1$:}
+The authors of \cite{AnDa96} use for each node $x_j$ an $m$th order Taylor
+expansion of the trigonometric polynomial \eqref{trigPoly1d} around the nearest
+neighboring point on an oversampled equispaced lattice $I_n/n$. Here again we have
+$n=\sigma N,\, \sigma\gg 1$.
+This algorithm utilizes $m$ FFTs of size $n$ (compared to only one in our approach)
+and uses a fair amount of extra memory; see also \cite{KuPo06,Ku08GAMM}.
+Another approach is considered in \cite{DuRo95}. It is based on a Lagrange
+interpolation technique.
+After computing an FFT of the vector $\mathbf{\hat{f}}\in\C^N$ in \eqref{eq:nfft}
+an exact polynomial interpolation scheme is used to obtain the values of the
+trigonometric polynomial $f$ at the nonequispaced nodes $x_j$.
+This is the most time consuming part of this method. In an approximate way,
+it can however be realized with the help of the fast multipole method.
+This approach is appealing since it allows also for computing an
+inverse transform.
+Nevertheless, numerical experiments in \cite{DuRo95} indicate that this
+approach is far more time consuming than Algorithm \ref{algo:nfft}. Also, the
+inversion can only be computed in a stable way for almost equispaced nodes
+\cite{DuRo95}.
+
+For a comparison of different approaches to nonequispaced Fourier transforms, we also
+refer to \cite{ware98,st01,fesu02,KuPo06}.
+
+\begin{acks}
+We thank G.~Steidl for numerous fruitful and enlightning discussions.
+Contributions to the source code made by M. B\"ohme, M. Fenn,
+T. Knopp, and S. Klatt are gratefully acknowledged. For details, see the
+\verb"AUTHORS" file in the package directory. We also thank the anonymous
+referees and the editor for man helpful comments and valuable suggestions.
+\end{acks}
+
+\bibliographystyle{acmtrans}
+%\bibliographystyle{abbrv}
+\bibliography{../references/references}
+\begin{received}
+Received 09/2007; revised 02/2008; accepted Month Year
+\end{received}
+\end{document}
diff --git a/doc/tutorial/struct.tex b/doc/tutorial/struct.tex
new file mode 100755
index 0000000..53e7a69
--- /dev/null
+++ b/doc/tutorial/struct.tex
@@ -0,0 +1,59 @@
+% Bild Struktogramm
+\unitlength0.8cm
+
+\newsavebox{\bedzweig}
+\savebox{\bedzweig}(0,0){
+%\thicklines
+\put(0,0.5){\line(-2,-1){1.0}}
+\put(0,0.5){\line(2,-1){1.0}}
+\put(0,-0.5){\line(-2,1){1.0}}
+\put(0,-0.5){\line(2,1){1.0}}
+\put(0,0.5){\makebox(0,0)[b]
+  {\put(0,0){\line(0,1){0.5}}}}
+\put(1.0,0){\line(1,0){1.0}}
+\put(-1.0,0){\line(-1,0){1.0}}
+\put(-1.2,0,1) {\makebox(0,0)[br]{no}}
+\put(1.2,0,1) {\makebox(0,0)[bl]{yes}} }
+
+
+
+\begin{picture}(10,13)
+% setze 1 Box
+
+% setze Linien
+%\multiput(1,0)(1,0){15}{\line(0,1){1}}
+% schreibe
+%\put(0,0){\framebox(16,1)[c]}
+
+\multiput(0,0)(0,2){2}{\framebox(10,1)[c]}
+
+\multiput(0,6)(0,2){4}{\framebox(10,1)[c]}
+
+
+\put(0.2,12.2){\makebox[10cm][l]{Initialise the Fourier transform.}}
+\put(0.2,10.2){\makebox[10cm][l]{Initialise the corresponding inverse.}}
+\put(0.2,8.2){\makebox[10cm][l]{Compute residuals.}}
+\put(0.2,6.2){\makebox[10cm][l]{Compute one iteration.}}
+\put(0.2,2.2){\makebox[10cm][l]{Finalise the inverse transform.}}
+\put(0.2,0.2){\makebox[10cm][l]{Finalise the Fourier transform.}}
+
+\multiput(5,2)(0,2){1}{\vector(0,-1){1}}
+\multiput(5,6)(0,2){4}{\vector(0,-1){1}}
+
+\put(5,4.5){\usebox{\bedzweig}\makebox(0,-0.1){Stop?}}
+
+\put(7,4.5){\vector(0,-1){1.5}}
+\put(3,4.5){\line(-1,0){3.5}}
+\put(-0.5,4.5){\line(0,1){3}}
+\put(-0.5,7.5){\vector(1,0){5.5}}
+
+%\put(11.4,1){\line(0,1){0.4}}
+
+
+\end{picture}
+
+
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "main"
+%%% End: 
diff --git a/doc/tutorial/summary.tex b/doc/tutorial/summary.tex
new file mode 100644
index 0000000..86965c4
--- /dev/null
+++ b/doc/tutorial/summary.tex
@@ -0,0 +1,227 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside]{scrartcl}
+%==============================================================================
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+%\usepackage{showkeys}
+%\usepackage{psfig}
+%\usepackage{lscape}
+\usepackage{color}
+%\usepackage{graphics}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{psfrag}
+
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+\newenvironment{tablehere}
+  {\def\@captype{table}}
+  {}
+
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\Pol}{\ensuremath{\Pi}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\nfftversion}{3.0}
+
+\def\cO{{\cal O}}
+
+\def\veps{\varepsilon}
+
+\def\tT{{\mbox{\tiny{T}}}}
+\def\ti{\mbox{\scriptsize{i}}}
+\newcommand{\e}{{\,\rm {e}}}
+\newcommand{\eim}[1]{{\rm e}^{-2\pi{\ti} #1}}
+\newcommand{\eip}[1]{{\rm e}^{ 2\pi{\ti} #1}}
+\newcommand{\zb}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+
+\newcommand{\diag}{{\, \rm diag}}
+\renewcommand{\d}{\, \mbox{d}}
+\renewcommand{\Box}{\hspace*{0ex} \hfill \rule{1.5ex}{1.5ex} \\}
+\newcommand{\bend}{\hspace*{0ex} \hfill \hbox{\vrule height
+    1.5ex\vbox{\hrule width 1.4ex \vskip 1.4ex\hrule  width 1.4ex}\vrule
+    height 1.5ex}}
+
+\newtheorem{theorem}{Theorem}[section]
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{remark}[theorem]{Remark}
+%\newtheorem{algorithm}[theorem]{Algorithm}
+\newtheorem{example}[theorem]{Example}
+\newtheorem{corollary}[theorem]{Corollary}
+
+\newenvironment{Theorem}{\begin{theorem}\sl}{\end{theorem}}
+\newenvironment{Lemma}{\begin{lemma}\sl}{\end{lemma}}
+\newenvironment{Remark}{\begin{remark}\rm}{\hfill \bend \end{remark}}
+%\newenvironment{Algorithm}{\begin{algorithm}\sl}{\hfill \end{algorithm}}
+\newenvironment{Example}{\begin{example}\rm}{\hfill \bend \end{example}}
+\newenvironment{Corollary}{\begin{corollary}\rm}{\hfill \bend
+  \end{corollary}}
+\def\invisible#1{\textcolor{white}{#1}}
+
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% TITLE PAGE
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+%\title{NFFT\nfftversion\ - Summary}
+%\author{Jens Keiner
+%\thanks{keiner at math.uni-luebeck.de,University of L\"ubeck,
+%Institute of  Mathematics, 23560 L\"ubeck}
+%\and
+%  Stefan Kunis
+%\thanks{kunis at mathematik.tu-chemnitz.de, Chemnitz University of Technology,
+%Department of Mathematics, 09107 Chemnitz, Germany}
+%\and
+%  Daniel Potts
+%\thanks{potts at mathematik.tu-chemnitz.de, Chemnitz University of Technology,
+%Department of Mathematics, 09107 Chemnitz, Germany}
+%}
+%\date{}
+%\maketitle
+%\begin{center}
+%  \vspace{-8ex}
+%  {\large {\tt http://www.tu-chemnitz.de/$\sim$potts/nfft}}
+%  \vspace{8ex}
+%\end{center}
+
+\title{\vspace{-8ex}\Large NFFT\nfftversion\ - Summary}
+\date{}
+\author{\large Jens Keiner \and \large Stefan Kunis \and \large Daniel Potts}
+\maketitle
+\vspace{-8ex}
+
+Fast Fourier transforms (FFTs) belong to the ``10 algorithms with the greatest
+influence on the development and practice of science and engineering in the
+20th century'', cf.~\cite{DoSu00}.
+The classic algorithm in \cite{CoTu65} computes the discrete
+Fourier transform
+\begin{equation*}
+  f_j= \sum_{k=-\frac{N}{2}}^{\frac{N}{2}-1} \hat{f}_{k} \eim{\frac{kj}{N}}
+\end{equation*}
+for $j=-\frac{N}{2},\hdots,\frac{N}{2}-1$ and given complex coefficients
+$\hat{f}_{k}\in\C$.
+Using a divide and conquer approach, the number of floating point operations
+is reduced from $\cO(N^2)$ for a straightforward computation to only
+$\cO(N\log N)$.
+In conjunction with publicly available efficient implementations
+\cite{FFTW05}, the fast Fourier transform has become of great importance in
+scientific computing.
+Its applications include for example digital signal and image processing as
+well as the numerical solution of differential and integral equations.
+The author of \cite[p. ix]{loan} summarises ``life as we know it
+would be very different without the FFT''.
+
+However, two shortcomings of traditional schemes are the need for equispaced
+sampling and the restriction to the system of complex exponential functions.
+During the last two decades, both problems have attracted much attention.
+We refer to \cite{maro96} for an introduction to discrete Fourier analysis
+with orthogonal polynomials, spherical harmonics, and more general functions.
+The second branch of generalisations dispenses with the need for equispaced
+sampling and establishes so-called nonequispaced FFTs, see
+e.g. \cite{postta01}.
+The common concept in most generalised fast Fourier transforms - and other
+algorithms for the computation with dense matrices - is the use of
+approximation schemes.
+The functions involved, e.g. the complex exponentials, are replaced by
+approximations with prescribed accuracy that allow for the design of a fast 
+algorithm.
+We trade exactness for efficiency; instead of precise computations, the
+proposed methods guarantee a given target accuracy.
+
+The principal contribution of the present software package is a publicly
+available implementation of various fast algorithms for discrete Fourier
+transforms.
+For notational convenience let the multi-index set
+\begin{equation*}
+  I_{\zb N} = \left\{ \zb k=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: -
+    \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\},
+\end{equation*}
+with $\zb N=\left(N_t\right)_{t=0,\hdots,d-1}\in 2\N^d$ be given.
+For given Fourier coefficients $\hat f_{\zb k} \in \C$, $\zb k \in I_{\zb N}$,
+and arbitrary nodes $\zb x_j \in [-1/2,1/2)^d$, $j=0,\hdots,M-1$, we consider
+the computation of 
+\begin{equation*}
+  f\left(\zb x_j\right) = \sum_{\zb k\in I_{\zb N}} \hat{f}_{\zb k} \eim{\zb
+    k\zb x_j},\quad  j=0,\hdots,M-1.
+\end{equation*}
+Obviously, the straightforward algorithm for this task takes $\cO(M|I_{\zb
+  N}|)$ floating point operations.
+In contrast, the {\em nonequispaced fast Fourier transform} computes the above
+sums up to a user-specified accuracy in $\cO(|I_{\zb N}|\log|I_{\zb N}|+M)$
+operations.
+The implemented routines are state-of-the-art with respect to recently
+suggested improvements, see e.g. \cite{GrLe04}, and use the highly efficient
+FFTW library \cite{FFTW05}.
+
+The generalisations of the NFFT include fast algorithms for several discrete
+Fourier transforms.
+Due to its relevance in tomography, geophysics, and meteorology, we would like
+to highlight the nonequispaced fast spherical Fourier transform (NFSFT).
+In analogy to the complex exponentials $\mathrm{e}^{\mathrm{i} k x}$ on the
+torus, the spherical harmonics $Y_k^n$ form the orthogonal Fourier basis with
+respect to the usual inner product on the sphere.
+For given Fourier coefficients $\hat f_k^n \in \C$ and arbitrary nodes
+with longitude $\vartheta_j\in[0,\pi]$ and latitude $\varphi_j\in [0,2\pi)$,
+we are interested in the evaluation of
+\begin{equation*}
+  f\left(\vartheta_j,\varphi_j\right) =
+  \sum_{k=0}^N \sum_{n=-k}^k \hat f_k^n
+  Y_{k}^n\left(\vartheta_j,\varphi_j\right),\quad  j=0,\hdots,M-1.
+\end{equation*}
+Here, our implemented scheme reduces the computational costs from $\cO(MN^2)$
+operations to only $\cO(N^2\log^2 N+M)$.
+Further fast transforms include the Fourier transforms with nonequispaced data
+in time and frequency domain, real trigonometric transforms, and sparse FFTs.
+All these Fourier transforms come along with their adjoint algorithms, used in
+quadrature rules for example, and inverse transforms as used for scattered
+data approximation.
+
+The NFFT and its generalisations have found a lot of applications, where the
+current release of the library includes various fast summation methods,
+reconstruction algorithms in medical imaging, and the polar FFT as part of our
+ridgelet transform.
+We would like to highlight the fast summation method, because this problem
+arises in integral equations or potential theory.
+In particular, our method proves comparable with the celebrated fast multipole
+method \cite{greenrokh87}.
+
+The documentation of our library is split into two parts:
+The tutorial \cite{nfft3_tutorial} surveys the fast Fourier transform at
+nonequispaced nodes, its generalisations, and inversion.
+Moreover it provides an overview over the C library which allows users to
+compute their first transforms by using simple interfaces to the computational
+kernels.
+The detailed documentation (part of the source tree) of all user functions,
+options and parameters is done with Doxygen \cite{doxygen} and allows for
+further optimisation with respect to speed, accuracy, and memory usage.
+
+\begin{footnotesize}
+\bibliographystyle{abbrv}
+\bibliography{../references/references}
+\end{footnotesize}
+
+\end{document}
\ No newline at end of file
diff --git a/doc/tutorial/tree.tex b/doc/tutorial/tree.tex
new file mode 100644
index 0000000..cba8e53
--- /dev/null
+++ b/doc/tutorial/tree.tex
@@ -0,0 +1,225 @@
+%              Tree -- a macro to make aligned (horizontal) trees in TeX
+%
+%    Input is of the form
+%        \tree
+%           item
+%           \subtree
+%              \leaf{item}
+%                 .
+%                 .
+%                 .
+%           \endsubtree
+%           \subtree
+%              .
+%              .
+%              .
+%           \endsubtree
+%        \endsubtree
+%     \endtree
+%
+%    Nesting is to any level.  \leaf is defined as a subtree of one item:
+% \def\leaf#1{\subtree#1\endsubtree}.
+%
+%    A structure:
+%       \subtree
+%          item_part1
+%          item_part2
+%               .
+%               .
+%               .
+%
+% will print item_part2 directly below item_part1 as a single item
+% as if they were in a \box.
+%
+%    The macro is a 3-pass macro.  On the first pass it sets up a data
+% structure from the \subtree ... \endsubtree definitions.  On the second pass
+% it recursively calculates the width of each level of the tree.  On the third
+% pass it sets up the boxes, glue and rules.
+%
+%    By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35.
+%    Transcribed by Margaret Kromer (peg), Feb., 1986.
+%
+%             Pass 1
+% At the end of pass 1, the tree is coded as a nested collection of \hboxes
+% and \vboxes.
+\newbox\treebox\newcount\treeboxcnt
+\def\tree{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree}
+\def\subtree{\ettext \advance\treeboxcnt by 1 \boxtree}
+\def\leaf#1{\subtree#1\endsubtree}
+\def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}%
+             \ifnum\treeboxcnt=-1 \treeerrora\fi}
+\def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi%
+             \settreesizes \typesettree \message{-- end tree}}
+% Error messages for unbalanced tree
+\def\treeerrora{\errhelp=\treeerrorahelp%
+             \errmessage{Unbalanced tree -- too many endsubtrees}}
+\newhelp\treeerrorahelp{There are more subtrees closed than opened}
+\def\treeerrorb{\errhelp=\treeerrorbhelp%
+             \errmessage{Unbalanced tree -- not enough endsubtrees}}
+\newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed.
+If you continue, you'll get some mysterious secondary errors.}
+%        Set up \vbox containing root of tree
+\newif\iftreetext\treetextfalse         % Whether still aligning text
+\def\boxtree{\hbox\bgroup               % Start outer box of tree or subtree
+  \baselineskip 2.5ex                   % Narrow line spacing slightly
+  \tabskip 0pt                          % No spurious glue in alignment
+  \vbox\bgroup                          % Start inner text \vbox
+  \treetexttrue                         % Remember for \ettext
+  \let\par\crcr \obeylines              % New line breaks without explicit \cr
+  \halign\bgroup##\hfil\cr}             % Start alignment with simple template
+\def\ettext{\iftreetext                 % Are we still in inner text \vbox?
+  \crcr\egroup \egroup \fi}             % Yes, end alignment and box
+%             Pass 2
+% Recursively calculate widths of tree with \setsizes; keep results in
+% \treesizes; \treewidth contains total width calculated so far.  \treeworkbox
+% is workspace containing subtree being sized.
+\newbox\treeworkbox
+\def\cons#1#2{\edef#2{\xmark #1#2}}     % Add something to start of list
+\def\car#1{\expandafter\docar#1\docar}  % Take first element of list
+\def\docar\xmark#1\xmark#2\docar{#1}    % ..by ignoring rest in expansion
+\def\cdr#1{\expandafter\docdr#1\docdr#1}% Similarly, drop first element
+\def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}}
+\def\xmark{\noexpand\xmark}             % List separator expands to self
+\def\nil{\xmark}                        % Empty list is just separator
+\def\settreesizes{\setbox\treeworkbox=\copy\treebox%
+              \global\let\treesizes\nil \setsizes}
+\newdimen\treewidth                     % Width of this part of the tree
+\def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace
+  \unhbox\treeworkbox\unskip            % Take tree, unpack it into horiz list
+  \inittreewidth                        % Get old width at this level
+  \sizesubtrees                         % Recurse through all subtrees
+  \sizelevel                            % Now set width from remaining \vbox
+  \egroup}                              % All done, finish our \hbox
+\def\inittreewidth{\ifx\treesizes\nil   % If this is the first at this level
+    \treewidth=0pt                      % ..then we have no previous max width
+ \else \treewidth=\car\treesizes        % Otherwise take old max level width
+   \global\cdr\treesizes                % ..and advance level width storage
+   \fi}                                 % ..in preparation for next level.
+\def\sizesubtrees{\loop                 % For each box in horiz list (subtree)
+  \setbox\treeworkbox=\lastbox \unskip  % ..pull it off list and flush glue
+  \ifhbox\treeworkbox \setsizes         % If hbox, it's a subtree - recurse
+  \repeat}                              % ..and loop; end loop on tree text
+\def\sizelevel{%
+  \ifdim\treewidth<\wd\treeworkbox      % If greater than previous maximum
+  \treewidth=\wd\treeworkbox \fi        % Then set max to new high
+ \global\cons{\the\treewidth}\treesizes}% In either case, put back on list
+%             Pass 3
+% Recursively typeset tree with \maketree by adding an \hbox containing
+% a subtree (in \treebox) to the horizontal list.
+\newdimen\treeheight                    % Height of this part of the tree
+\newif\ifleaf                           % Tree has no subtrees (is a leaf)
+\newif\ifbotsub                         % Bottom subtree of parent
+\newif\iftopsub                         % Top subtree of parent
+\def\typesettree{\medskip\maketree\medskip}  % Make whole tree
+\def\maketree{\hbox{\treewidth=\car\treesizes  % Get width at this level
+  \cdr\treesizes                        % Set up width list for recursion
+  \makesubtreebox\unskip                % Set \treebox to text, make subtrees
+  \ifleaf \makeleaf                     % No subtrees, add glue
+  \else \makeparent \fi}}               % Have subtrees, stick them at right
+{\catcode`@=11                          % Be able to use \voidb at x
+\gdef\makesubtreebox{\unhbox\treebox    % Open up tree or subtree
+  \unskip\global\setbox\treebox\lastbox % Pick up very last box
+  \ifvbox\treebox                       % If we're already at the \vbox
+    \global\leaftrue \let\next\relax    % ..then this is a leaf
+  \else \botsubtrue                     % Otherwise, we have subtrees
+    \setbox\treeworkbox\box\voidb at x     % Init stack of processed subs
+    \botsubtrue \let\next\makesubtree   % ..and call \maketree on them
+  \fi \next}}                           % Finish up for whichever it was
+\def\makesubtree{\setbox1\maketree      % Call \maketree on this subtree
+  \unskip\global\setbox\treebox\lastbox % Pick up box before it
+  \treeheight=\ht1                      % Get height of subtree we made
+  \advance\treeheight 2ex               % Add some room around the edges
+  \ifhbox\treebox \topsubfalse          % If picked up box is a \vbox,
+    \else \topsubtrue \fi               % ..this is the top, otherwise not
+  \addsubtreebox                        % Stack subtree with the rest
+  \iftopsub \global\leaffalse           % If top, remember not a leaf
+    \let\next\relax \else               % ..(after recursion), set return
+    \botsubfalse \let\next\makesubtree  % Otherwise, we have more subtrees
+  \fi \next}                            % Do tail recursion or return
+\def\addsubtreebox{\setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}}
+\def\subtreebox{\hbox\bgroup            % Start \hbox of tree and lines
+  \vbox to \treeheight\bgroup           % Start \vbox for vertical rules
+    \ifbotsub \iftopsub \vfil           % If both bottom and top subtree
+        \hrule width 0.4pt              % ..vertical rule is just a dot
+     \else \treehalfrule \fi \vfil      % Bottom gets half-height rule
+    \else \iftopsub \vfil \treehalfrule % Top gets half-height the other way
+     \else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height
+    \egroup                             % Finish vertical rule \vbox
+  \treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup}
+\def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}}
+\def\treehalfrule{\dimen\treeworkbox=\treeheight   % Get total height
+  \divide\dimen\treeworkbox 2%
+  \advance\dimen\treeworkbox 0.2pt      % Divide by two, add half horiz height
+  \hrule width 0.4pt height \dimen\treeworkbox}% Make a vertical rule that high
+\def\makeleaf{\box\treebox}             % Add leaf box to horiz list
+\def\makeparent{\ifdim\ht\treebox>%
+    \ht\treeworkbox                     % If text is higher than subtrees
+    \treeheight=\ht\treebox             % ..use that height
+  \else \treeheight=\ht\treeworkbox \fi % Otherwise use height of subtrees
+  \advance\treewidth-\wd\treebox        % Take remainder of level width
+  \advance\treewidth 1em                % ..after accounting for text and glue
+  \treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection
+\treectrbox{\hrule width \treewidth}%
+  \treectrbox{\box\treeworkbox}}        % Add \hrule, subs
+% No idea what \spouse is supposed to do... wasn't included
+\def\spouse{\bf}
+
+{
+  \small %\normalsize
+  \tree %nfft
+    \subtree doc (API docs)
+    \endsubtree
+    \subtree include (C headers)
+    \endsubtree
+    \subtree util (utility functions)
+    \endsubtree
+    \subtree kernel
+      \subtree fpt (fast polynomial transform)
+      \endsubtree
+      \subtree mri (transform in magnetic resonance imaging)
+      \endsubtree
+      \subtree nfct (nonequispaced fast cosine transform)
+      \endsubtree
+      \subtree nfft (nonequispaced fast Fourier transform)
+      \endsubtree
+      \subtree nfsft (nonequispaced fast spherical Fourier transform)
+      \endsubtree
+      \subtree nfst (nonequispaced fast sine transform)
+      \endsubtree
+      \subtree nnfft (nonequispaced in space and frequency FFT)
+      \endsubtree
+      \subtree nsfft (nonequispaced sparse fast Fourier transform)
+      \endsubtree
+      \subtree solver (inverse transforms)
+      \endsubtree
+    \endsubtree
+
+    \subtree examples
+      {(for each in kernel)}
+    \endsubtree
+
+    \subtree applications
+      \subtree fastgauss (fast Gauss transform)
+      \endsubtree
+      \subtree fastsum (summation schemes)
+      \endsubtree
+      \subtree fastsumS2 (summation on the sphere)
+      \endsubtree
+      \subtree mri (reconstruction in mri)
+      \endsubtree
+      \subtree nfft\_flags (time and memory requirements)
+      \endsubtree
+      \subtree polarFFT (fast polar Fourier transform)
+      \endsubtree
+      \subtree radon (radon transform)
+      \endsubtree
+      \subtree stability (stability inverse nfft)
+      \endsubtree
+    \endsubtree
+  \endtree
+}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "thesis"
+%%% End:
diff --git a/doxygen.dox b/doxygen.dox
new file mode 100644
index 0000000..93d3027
--- /dev/null
+++ b/doxygen.dox
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** \mainpage notitle
+ * \htmlonly
+ *   <h2 class="anchor">Contents</h2>
+ * \endhtmlonly
+ * \htmlinclude toc.txt
+ *
+ * \section introduction Introduction
+ *
+ * \cite{nfft3} Fast Fourier transforms (FFTs) belong \cite{nfft3_2} to the '10 algorithms with the
+ * greatest influence on the development and practice of science and
+ * engineering \cite{nfft3} in the 20th century'.
+ * The classic algorithm computes the discrete Fourier transform
+ * \f[
+ *   f_j= \sum_{k=-\frac{N}{2}}^{\frac{N}{2}-1} \hat{f}_{k}
+ * {\rm e}^{2\pi{\rm i}\frac{kj}{N}}
+ * \f]
+ * for \f$j=-\frac{N}{2},\hdots,\frac{N}{2}-1\f$ and given complex
+ * coefficients \f$\hat{f}_{k}\in\mathbb{C}\f$.
+ * Using a divide and conquer approach, the number of floating point
+ * operations is reduced from \f${\cal O}(N^2)\f$ for a straightforward
+ * computation to only \f${\cal O}(N\log N)\f$.
+ * In conjunction with publicly available efficient implementations the fast
+ * Fourier transform has become of great importance in scientific computing.
+
+ * However, two shortcomings of traditional schemes are the need for
+ * equispaced sampling and the restriction to the system of complex
+ * exponential functions.
+ * The NFFT is a C subroutine library for computing the nonequispaced discrete
+ * Fourier transform (NDFT) and its generalisations in one or more dimensions,
+ * of arbitrary input size, and of complex data.
+ *
+ * More precisely,we collect the possible frequencies
+ * \f$\mathbf{k}\in\mathbb{Z}^d\f$ in the multi-index set
+ * \f[
+ * I_{\mathbf{N}} := \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1}
+ *  \in \mathbb{Z}^d: -
+ *   \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\},
+ * \f]
+ * where \f$\mathbf{N}=\left(N_t\right)_{t=0,\hdots,d-1}\f$ is the
+ * multibandlimit, i.e., \f$N_t\in 2\mathbb{N}\f$.
+ * For a finite number of given Fourier coefficients
+ * \f$\hat f_{\mathbf{k}} \in \mathbb{C}\f$,
+ * \f$\mathbf{k}\in I_{\mathbf{N}}\f$, we consider the
+ * fast evaluation of the trigonometric polynomial
+ * \f[
+ *  f\left(\mathbf{x}\right)
+ *  := \sum_{ \mathbf{k}\in I_{ N}} \hat{f}_{\mathbf{ k}}
+ *  {\rm e}^{-2\pi{\rm i}\mathbf{k}\mathbf{ x}}
+ * \f]
+ * at given nonequispaced nodes \f$\mathbf{x}_j \in \mathbb{T}^d\f$,
+ * \f$j=0,\ldots, M-1\f$, from the
+ * \f$ d\f$-dimensional torus as well as the
+ * adjoint problem, the fast evaluation of sums of the form
+ * \f[
+ *  \hat h_{\mathbf{k}} := \sum_{j=0}^{M-1} {f}_{j}
+ *  {\rm e}^{2\pi{\rm i}\mathbf{k}\mathbf{ x}_j}.
+ * \f]
+ *
+ * \subsection generalisations Generalisations
+ *
+ * The generalisations of the NFFT include
+ *    - NNFFT - nonequispaced in time and frequency fast Fourier transform,
+ *    - NFCT/NFST - nonequispaced fast (co)sine transform,
+ *    - NSFFT - nonequispaced sparse fast Fourier transform,
+ *    - FPT - fast polynomial transform,
+ *    - NFSFT - nonequispaced fast spherical Fourier transform.
+ *
+ * Furthermore, we consider the inversion of the above transforms by
+ * iterative methods.
+ *
+ * \section faq FAQ - Frequently Asked Questions
+ *
+ *   <ol>
+ *     <li> <em>Can NFFT be built on Windows?</em>
+ *
+ *          Since version 3.2, NFFT should build on Windows systems under MinGW.
+ *          It might be necessary to add the --disable-shared option to
+ *          configure to silence linker warnings.
+ *
+ *          Building under Cygwin does not work since NFFT relies on data types
+ *          and functions declared in complex.h. While some of them are
+ *          available as built-in functions in gcc, not all needed by NFFT are
+ *          provided.
+ *
+ *          Building NFFT with other compilers, e.g. Microsoft's Visual C++, has
+ *          no been tested. If you have successfully be able to build NFFT, you
+ *          can send us all relevant information and we will share it with
+ *          others on our website.
+ *   </ol>
+ */
diff --git a/doxygen/Makefile.am b/doxygen/Makefile.am
new file mode 100644
index 0000000..9ef2033
--- /dev/null
+++ b/doxygen/Makefile.am
@@ -0,0 +1,3 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+EXTRA_DIST = doxygen.css doxygen.Doxyfile doxygen.Doxyfile.in footer.html header.html
\ No newline at end of file
diff --git a/doxygen/Makefile.in b/doxygen/Makefile.in
new file mode 100644
index 0000000..fd63545
--- /dev/null
+++ b/doxygen/Makefile.in
@@ -0,0 +1,426 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doxygen
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/doxygen.Doxyfile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = doxygen.Doxyfile
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = doxygen.css doxygen.Doxyfile doxygen.Doxyfile.in footer.html header.html
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doxygen/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu doxygen/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+doxygen.Doxyfile: $(top_builddir)/config.status $(srcdir)/doxygen.Doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doxygen/doxygen.Doxyfile b/doxygen/doxygen.Doxyfile
new file mode 100644
index 0000000..07a5abc
--- /dev/null
+++ b/doxygen/doxygen.Doxyfile
@@ -0,0 +1,1143 @@
+# Doxyfile 1.3.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = NFFT
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = 3.2.3
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/../doc/api
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 2 levels of 10 sub-directories under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of source
+# files, where putting all generated files in the same directory would otherwise
+# cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is used
+# as the annotated text. Otherwise, the brief description is used as-is. If left
+# blank, the following values are used ("$name" is automatically replaced with the
+# name of the entity): "The $name class" "The $name widget" "The $name file"
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 2
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = YES
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST = NO
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = doxygen.c include kernel util examples applications
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS = *.h *.c *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = 3rdparty applications/texture
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = doc/api/html
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH = doc/api/html/images doc/api/latex/images
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES = amsmath amssymb
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.  This is useful
+# if you want to understand what is going on.  On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED = MACRO_MV_PLAN
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#   TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#   TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
diff --git a/doxygen/doxygen.Doxyfile.in b/doxygen/doxygen.Doxyfile.in
new file mode 100644
index 0000000..c2e28ea
--- /dev/null
+++ b/doxygen/doxygen.Doxyfile.in
@@ -0,0 +1,1143 @@
+# Doxyfile 1.3.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = @PACKAGE_NAME@
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = @PACKAGE_VERSION@
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = @abs_srcdir@/../doc/api
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 2 levels of 10 sub-directories under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of source
+# files, where putting all generated files in the same directory would otherwise
+# cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is used
+# as the annotated text. Otherwise, the brief description is used as-is. If left
+# blank, the following values are used ("$name" is automatically replaced with the
+# name of the entity): "The $name class" "The $name widget" "The $name file"
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 2
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = YES
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST = NO
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = doxygen.c include kernel util examples applications
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS = *.h *.c *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = 3rdparty applications/texture
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = doc/api/html
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH = doc/api/html/images doc/api/latex/images
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = @abs_srcdir@/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = @abs_srcdir@/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = @abs_srcdir@/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES = amsmath amssymb
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.  This is useful
+# if you want to understand what is going on.  On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED = MACRO_MV_PLAN
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#   TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#   TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
diff --git a/doxygen/doxygen.css b/doxygen/doxygen.css
new file mode 100644
index 0000000..c023715
--- /dev/null
+++ b/doxygen/doxygen.css
@@ -0,0 +1,360 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV 
+{
+	font-family: Geneva, Arial, Helvetica, sans-serif;	
+	color: #000000;
+}
+
+BODY,TD 
+{
+       font-size: 90%;
+}
+
+H1 
+{
+	text-align: center;
+  font-size: 160%;
+}
+
+H1nc 
+{
+       font-size: 210%;
+}
+
+H2 
+{
+       font-size: 120%;
+}
+
+H3 
+{
+       font-size: 100%;
+}
+
+CAPTION 
+{ 
+  font-weight: bold 
+}
+
+a
+{
+  color: #000000;
+  text-decoration: none;
+}
+
+div.qindex {
+	width: 97%;
+	color: #FFFFFF;
+	background-color: #177665;
+  border-left: 20px solid #7FACA2;	
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+
+DIV.nav {
+	width: 100%;
+	background-color: #177665;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navtab {
+       background-color: #177665;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+
+a.qindex:link 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindex:visited 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindex:focus 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindex:hover 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindex:active 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+
+a.qindexHL:link 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindexHL:visited 
+{
+	color: #FFFFFF;
+	background-color: #177665;
+}
+a.qindexHL:focus 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindexHL:hover 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+a.qindexHL:active 
+{
+	color: #7FACA2;
+	background-color: #177665;
+}
+
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: Fixed, monospace;
+       font-size: 95%;
+}
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+       background-color: #F4F4FB;
+       color: #606060;
+	font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #BFDCD2;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #7FACA2;
+}
+TD.indexvalue {
+	background-color: #BFDCD2;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #7FACA2;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplParams {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+       color: #606060;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #eeeeff;
+}
+TD.tiny      { font-size: 75%;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #b0b0b0;
+}
+TH.dirtab { background: #eeeeff;
+            font-weight: bold;
+}
+HR { height: 1px;
+     border: none;
+     border-top: 1px solid black;
+}
+
+ul {
+  padding-top:0px;
+  padding-bottom:0px;
+  margin:0px;
+}
diff --git a/doxygen/footer.html b/doxygen/footer.html
new file mode 100644
index 0000000..be7deaa
--- /dev/null
+++ b/doxygen/footer.html
@@ -0,0 +1,4 @@
+    <hr size="1"/>
+    Generated on $date by Doxygen $doxygenversion
+  </body>
+</html>
diff --git a/doxygen/header.html b/doxygen/header.html
new file mode 100644
index 0000000..624b1a3
--- /dev/null
+++ b/doxygen/header.html
@@ -0,0 +1,20 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+    <title>
+      $projectname $projectnumber API Reference - $title
+    </title>
+    <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+    <link href="tabs.css" rel="stylesheet" type="text/css"/>
+  </head>
+  <body>
+    <table>
+      <tr>
+        <td align="left" valign="top">
+          <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+        </td>
+        <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+          $projectnumber
+        </td>
+      </tr>
+    </table>  
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 0000000..e391d39
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,52 @@
+if HAVE_NFCT
+  DIR_NFCT=nfct
+else
+  LIB_NFCT=
+endif
+
+if HAVE_NFST
+  DIR_NFST=nfst
+else
+  DIR_NFST=
+endif
+
+if HAVE_NFSFT
+  DIR_NFSFT=nfsft
+else
+  DIR_NFSFT=
+endif
+
+if HAVE_NFSOFT
+  DIR_NFSOFT=nfsoft
+else
+  DIR_NFSOFT=
+endif
+
+if HAVE_NNFFT
+  DIR_NNFFT=nnfft
+else
+  DIR_NNFFT=
+endif
+
+if HAVE_NSFFT
+  DIR_NSFFT=nsfft
+else
+  DIR_NSFFT=
+endif
+
+if HAVE_MRI
+  DIR_MRI=mri
+else
+  DIR_MRI=
+endif
+
+if HAVE_FPT
+  DIR_FPT=fpt
+else
+  DIR_FPT=
+endif
+
+SUBDIRS = $(DIR_FPT) $(DIR_MRI) $(DIR_NFCT) nfft $(DIR_NFSFT) $(DIR_NFSOFT) $(DIR_NFST) \
+  $(DIR_NNFFT) $(DIR_NSFFT) solver
+ 
+EXTRA_DIST = doxygen.c
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644
index 0000000..ce371a8
--- /dev/null
+++ b/examples/Makefile.in
@@ -0,0 +1,656 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = fpt mri nfct nfft nfsft nfsoft nfst nnfft nsfft solver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFCT_TRUE@DIR_NFCT = nfct
+ at HAVE_NFCT_FALSE@LIB_NFCT = 
+ at HAVE_NFST_FALSE@DIR_NFST = 
+ at HAVE_NFST_TRUE@DIR_NFST = nfst
+ at HAVE_NFSFT_FALSE@DIR_NFSFT = 
+ at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
+ at HAVE_NFSOFT_FALSE@DIR_NFSOFT = 
+ at HAVE_NFSOFT_TRUE@DIR_NFSOFT = nfsoft
+ at HAVE_NNFFT_FALSE@DIR_NNFFT = 
+ at HAVE_NNFFT_TRUE@DIR_NNFFT = nnfft
+ at HAVE_NSFFT_FALSE@DIR_NSFFT = 
+ at HAVE_NSFFT_TRUE@DIR_NSFFT = nsfft
+ at HAVE_MRI_FALSE@DIR_MRI = 
+ at HAVE_MRI_TRUE@DIR_MRI = mri
+ at HAVE_FPT_FALSE@DIR_FPT = 
+ at HAVE_FPT_TRUE@DIR_FPT = fpt
+SUBDIRS = $(DIR_FPT) $(DIR_MRI) $(DIR_NFCT) nfft $(DIR_NFSFT) $(DIR_NFSOFT) $(DIR_NFST) \
+  $(DIR_NNFFT) $(DIR_NSFFT) solver
+
+EXTRA_DIST = doxygen.c
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist cscopelist-recursive ctags ctags-recursive \
+	distclean distclean-generic distclean-libtool distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/doxygen.c b/examples/doxygen.c
new file mode 100644
index 0000000..f10e24e
--- /dev/null
+++ b/examples/doxygen.c
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \defgroup examples Examples
+ */
diff --git a/examples/fpt/Makefile.am b/examples/fpt/Makefile.am
new file mode 100644
index 0000000..caf41a8
--- /dev/null
+++ b/examples/fpt/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+# programs
+noinst_PROGRAMS = simple_test
+
+# sources
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
diff --git a/examples/fpt/Makefile.in b/examples/fpt/Makefile.in
new file mode 100644
index 0000000..449a27e
--- /dev/null
+++ b/examples/fpt/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/fpt
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+# sources
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/fpt/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/fpt/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/fpt/simple_test.c b/examples/fpt/simple_test.c
new file mode 100644
index 0000000..e883896
--- /dev/null
+++ b/examples/fpt/simple_test.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+/* standard headers */
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+/* It is important to include complex.h before nfft3.h. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include <fftw3.h>
+
+/* NFFT3 header */
+#include "nfft3.h"
+#include "nfft3util.h"
+
+/* Two times Pi */
+#define KPI2 6.2831853071795864769252867665590057683943387987502
+
+int main(void)
+{
+  /* This example shows the use of the fast polynomial transform to evaluate a
+   * finite expansion in Legendre polynomials,
+   *
+   *   f(x) = a_0 P_0(x) + a_1 P_1(x) + ... + a_N P_N(x)                     (1)
+   *
+   * at the Chebyshev nodes x_j = cos(j*pi/N), j=0,1,...,N. */
+  const int N = 8;
+
+  /* An fpt_set is a data structure that contains precomputed data for a number
+   * of different polynomial transforms. Here, we need only one transform. the
+   * second parameter (t) is the exponent of the maximum transform size desired
+   * (2^t), i.e., t = 3 means that N in (1) can be at most N = 8. */
+  fpt_set set = fpt_init(1,lrint(ceil(log2((double)N))),0U);
+
+  /* Three-term recurrence coefficients for Legendre polynomials */
+  double *alpha = malloc((N+2)*sizeof(double)),
+    *beta = malloc((N+2)*sizeof(double)),
+    *gamma = malloc((N+2)*sizeof(double));
+
+  /* alpha[0] and beta[0] are not referenced. */
+  alpha[0] = beta[0] = 0.0;
+  /* gamma[0] contains the value of P_0(x) (which is a constant). */
+  gamma[0] = 1.0;
+
+  /* Actual three-term recurrence coefficients for Legendre polynomials */
+  {
+    int k;
+    for (k = 0; k <= N; k++)
+    {
+      alpha[k+1] = ((double)(2*k+1))/((double)(k+1));
+      beta[k+1] = 0.0;
+      gamma[k+1] = -((double)(k))/((double)(k+1));
+    }
+  }
+
+  printf(
+    "Computing a fast polynomial transform (FPT) and a fast discrete cosine \n"
+    "transform (DCT) to evaluate\n\n"
+    "  f_j = a_0 P_0(x_j) + a_1 P_1(x_j) + ... + a_N P_N(x_j), j=0,1,...,N,\n\n"
+    "with N=%d, x_j = cos(j*pi/N), j=0,1,...N, the Chebyshev nodes, a_k,\n"
+    "k=0,1,...,N, random Fourier coefficients in [-1,1]x[-1,1]*I, and P_k,\n"
+    "k=0,1,...,N, the Legendre polynomials.",N
+  );
+
+  /* Random seed, makes things reproducible. */
+  nfft_srand48(314);
+
+  /* The function fpt_repcompute actually does the precomputation for a single
+   * transform. It needs arrays alpha, beta, and gamma, containing the three-
+   * term recurrence coefficients, here of the Legendre polynomials. The format
+   * is explained above. The sixth parameter (k_start) is where the index in the
+   * linear combination (1) starts, here k_start=0. The seventh parameter
+   * (kappa) is the threshold which has an influence on the accuracy of the fast
+   * polynomial transform. Usually, kappa = 1000 is a good choice. */
+  fpt_precompute(set,0,alpha,beta,gamma,0,1000.0);
+
+
+  {
+    /* Arrays for Fourier coefficients and function values. */
+    double _Complex *a = malloc((N+1)*sizeof(double _Complex));
+    double _Complex *b = malloc((N+1)*sizeof(double _Complex));
+    double *f = malloc((N+1)*sizeof(double _Complex));
+
+    /* Plan for discrete cosine transform */
+    const int NP1 = N + 1;
+    fftw_r2r_kind kind = FFTW_REDFT00;
+    fftw_plan p = fftw_plan_many_r2r(1, &NP1, 1, (double*)b, NULL, 2, 1,
+      (double*)f, NULL, 1, 1, &kind, 0U);
+
+    /* random Fourier coefficients */
+    {
+      int k;
+      printf("\n2) Random Fourier coefficients a_k, k=0,1,...,N:\n");
+      for (k = 0; k <= N; k++)
+      {
+        a[k] = 2.0*nfft_drand48() - 1.0; /* for debugging: use k+1 */
+        printf("   a_%-2d = %+5.3lE\n",k,creal(a[k]));
+      }
+    }
+
+    /* fast polynomial transform */
+    fpt_trafo(set,0,a,b,N,0U);
+
+    /* Renormalize coefficients b_j, j=1,2,...,N-1 owing to how FFTW defines a
+     * DCT-I; see
+     * http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html
+     * for details */
+    {
+      int j;
+      for (j = 1; j < N; j++)
+        b[j] *= 0.5;
+    }
+
+    /* discrete cosine transform */
+    fftw_execute(p);
+
+    {
+      int j;
+      printf("\n3) Function values f_j, j=1,1,...,M:\n");
+      for (j = 0; j <= N; j++)
+        printf("   f_%-2d = %+5.3lE\n",j,f[j]);
+    }
+
+    /* cleanup */
+    free(a);
+    free(b);
+    free(f);
+
+    /* cleanup */
+    fftw_destroy_plan(p);
+  }
+
+  /* cleanup */
+  fpt_finalize(set);
+  free(alpha);
+  free(beta);
+  free(gamma);
+
+  return EXIT_SUCCESS;
+}
diff --git a/examples/mri/Makefile.am b/examples/mri/Makefile.am
new file mode 100644
index 0000000..454ceff
--- /dev/null
+++ b/examples/mri/Makefile.am
@@ -0,0 +1,2 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
diff --git a/examples/mri/Makefile.in b/examples/mri/Makefile.in
new file mode 100644
index 0000000..834407d
--- /dev/null
+++ b/examples/mri/Makefile.in
@@ -0,0 +1,422 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples/mri
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/mri/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/mri/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfct/Makefile.am b/examples/nfct/Makefile.am
new file mode 100644
index 0000000..fc85794
--- /dev/null
+++ b/examples/nfct/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nfct/Makefile.in b/examples/nfct/Makefile.in
new file mode 100644
index 0000000..16a715d
--- /dev/null
+++ b/examples/nfct/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/nfct
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfct/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nfct/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfct/README b/examples/nfct/README
new file mode 100644
index 0000000..77f8d61
--- /dev/null
+++ b/examples/nfct/README
@@ -0,0 +1,17 @@
+Examples to the nonequispaced fast cosine transform
+
+Author
+
+  Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+  Steffen Klatt <heracleum.mantegazziani at web.de>
+
+List of files and purpose
+
+  README            this file
+  simple_test.c     introductory example how to use the nfct
+
+References
+
+  M. Fenn and D. Potts.
+  Fast summation based on fast trigonometric transforms at nonequispaced nodes.
+  Numer. Linear Algebra Appl., 12:161--169, 2005.
diff --git a/examples/nfct/simple_test.c b/examples/nfct/simple_test.c
new file mode 100644
index 0000000..aba4dbf
--- /dev/null
+++ b/examples/nfct/simple_test.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+static void simple_test_nfct_1d(void)
+{
+  int j,k;
+  nfct_plan p;
+
+  int N=14;
+  int M=19;
+
+  /** init an one dimensional plan */
+  nfct_init_1d(&p,N,M);
+
+  /** init pseudo random nodes */
+  for(j = 0; j < p.d*p.M_total; j++)
+    p.x[j] = 0.5 * ((double)rand()) / RAND_MAX;
+
+  /** precompute psi, the entries of the matrix B */
+  if( p.nfct_flags & PRE_PSI)
+    nfct_precompute_psi( &p);
+
+  /** init pseudo random Fourier coefficients and show them */
+  for(k = 0; k < p.N_total; k++)
+    p.f_hat[k] = (double)rand() / RAND_MAX;
+
+  nfft_vpr_double(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+
+  /** direct trafo and show the result */
+  nfct_trafo_direct(&p);
+  nfft_vpr_double(p.f,p.M_total,"ndct, vector f");
+
+  /** approx. trafo and show the result */
+  nfct_trafo(&p);
+  nfft_vpr_double(p.f,p.M_total,"nfct, vector f");
+
+  /** approx. adjoint and show the result */
+  nfct_adjoint(&p);
+  nfft_vpr_double(p.f_hat,p.N_total,"adjoint ndct, vector f_hat");
+
+  /** approx. adjoint and show the result */
+  nfct_adjoint_direct(&p);
+  nfft_vpr_double(p.f_hat,p.N_total,"adjoint nfct, vector f_hat");
+
+  /** finalise the one dimensional plan */
+  nfct_finalize(&p);
+}
+
+int main(void)
+{
+  system("clear");
+  printf("computing one dimensional ndct, nfct and adjoint ndct, nfct\n\n");
+  simple_test_nfct_1d();
+  printf("\n\n");
+
+  return 1;
+}
diff --git a/examples/nfft/Makefile.am b/examples/nfft/Makefile.am
new file mode 100644
index 0000000..dc1c490
--- /dev/null
+++ b/examples/nfft/Makefile.am
@@ -0,0 +1,61 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+  SIMPLE_TEST_THREADS=simple_test_threads
+else
+  SIMPLE_TEST_THREADS=
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  NFFT_BENCHOMP_PROGS=nfft_benchomp nfft_benchomp_createdataset nfft_benchomp_detail_single nfft_benchomp_detail_threads
+else
+  NFFT_BENCHOMP_PROGS=
+endif
+else
+  NFFT_BENCHOMP_PROGS=
+endif
+
+noinst_PROGRAMS = simple_test $(SIMPLE_TEST_THREADS) ndft_fast taylor_nfft flags nfft_times $(NFFT_BENCHOMP_PROGS)
+
+if HAVE_THREADS
+  simple_test_threads_SOURCES = simple_test_threads.c
+  simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+endif
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ndft_fast_SOURCES = ndft_fast.c
+ndft_fast_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+taylor_nfft_SOURCES = taylor_nfft.c
+taylor_nfft_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+flags_SOURCES = flags.c
+flags_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+nfft_times_SOURCES = nfft_times.c
+nfft_times_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  nfft_benchomp_SOURCES = nfft_benchomp.c
+  nfft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  nfft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+
+  nfft_benchomp_createdataset_SOURCES = nfft_benchomp_createdataset.c
+  nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+  nfft_benchomp_detail_single_SOURCES = nfft_benchomp_detail.c
+  nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+  nfft_benchomp_detail_threads_SOURCES = nfft_benchomp_detail.c
+  nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  nfft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+EXTRA_DIST = flags.m ndft_fast.m taylor_nfft.m README
diff --git a/examples/nfft/Makefile.in b/examples/nfft/Makefile.in
new file mode 100644
index 0000000..d9bb05f
--- /dev/null
+++ b/examples/nfft/Makefile.in
@@ -0,0 +1,710 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) $(am__EXEEXT_1) \
+	ndft_fast$(EXEEXT) taylor_nfft$(EXEEXT) flags$(EXEEXT) \
+	nfft_times$(EXEEXT) $(am__EXEEXT_2)
+subdir = examples/nfft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAVE_THREADS_TRUE@am__EXEEXT_1 = simple_test_threads$(EXEEXT)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 =  \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp_createdataset$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp_detail_single$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp_detail_threads$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am_flags_OBJECTS = flags.$(OBJEXT)
+flags_OBJECTS = $(am_flags_OBJECTS)
+flags_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_ndft_fast_OBJECTS = ndft_fast.$(OBJEXT)
+ndft_fast_OBJECTS = $(am_ndft_fast_OBJECTS)
+ndft_fast_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfft_benchomp_SOURCES_DIST = nfft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_OBJECTS = nfft_benchomp-nfft_benchomp.$(OBJEXT)
+nfft_benchomp_OBJECTS = $(am_nfft_benchomp_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfft_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(nfft_benchomp_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__nfft_benchomp_createdataset_SOURCES_DIST =  \
+	nfft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_createdataset_OBJECTS = nfft_benchomp_createdataset.$(OBJEXT)
+nfft_benchomp_createdataset_OBJECTS =  \
+	$(am_nfft_benchomp_createdataset_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfft_benchomp_detail_single_SOURCES_DIST = nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_detail_single_OBJECTS = nfft_benchomp_detail.$(OBJEXT)
+nfft_benchomp_detail_single_OBJECTS =  \
+	$(am_nfft_benchomp_detail_single_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfft_benchomp_detail_threads_SOURCES_DIST =  \
+	nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_detail_threads_OBJECTS = nfft_benchomp_detail_threads-nfft_benchomp_detail.$(OBJEXT)
+nfft_benchomp_detail_threads_OBJECTS =  \
+	$(am_nfft_benchomp_detail_threads_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfft_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_nfft_times_OBJECTS = nfft_times.$(OBJEXT)
+nfft_times_OBJECTS = $(am_nfft_times_OBJECTS)
+nfft_times_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__simple_test_threads_SOURCES_DIST = simple_test_threads.c
+ at HAVE_THREADS_TRUE@am_simple_test_threads_OBJECTS =  \
+ at HAVE_THREADS_TRUE@	simple_test_threads.$(OBJEXT)
+simple_test_threads_OBJECTS = $(am_simple_test_threads_OBJECTS)
+ at HAVE_THREADS_TRUE@simple_test_threads_DEPENDENCIES =  \
+ at HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
+am_taylor_nfft_OBJECTS = taylor_nfft.$(OBJEXT)
+taylor_nfft_OBJECTS = $(am_taylor_nfft_OBJECTS)
+taylor_nfft_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(flags_SOURCES) $(ndft_fast_SOURCES) \
+	$(nfft_benchomp_SOURCES) \
+	$(nfft_benchomp_createdataset_SOURCES) \
+	$(nfft_benchomp_detail_single_SOURCES) \
+	$(nfft_benchomp_detail_threads_SOURCES) $(nfft_times_SOURCES) \
+	$(simple_test_SOURCES) $(simple_test_threads_SOURCES) \
+	$(taylor_nfft_SOURCES)
+DIST_SOURCES = $(flags_SOURCES) $(ndft_fast_SOURCES) \
+	$(am__nfft_benchomp_SOURCES_DIST) \
+	$(am__nfft_benchomp_createdataset_SOURCES_DIST) \
+	$(am__nfft_benchomp_detail_single_SOURCES_DIST) \
+	$(am__nfft_benchomp_detail_threads_SOURCES_DIST) \
+	$(nfft_times_SOURCES) $(simple_test_SOURCES) \
+	$(am__simple_test_threads_SOURCES_DIST) $(taylor_nfft_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@SIMPLE_TEST_THREADS = 
+ at HAVE_THREADS_TRUE@SIMPLE_TEST_THREADS = simple_test_threads
+ at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at NFFT_BENCHOMP_PROGS = 
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at NFFT_BENCHOMP_PROGS = nfft_benchomp nfft_benchomp_createdataset nfft_benchomp_detail_single nfft_benchomp_detail_threads
+ at HAVE_THREADS_FALSE@NFFT_BENCHOMP_PROGS = 
+ at HAVE_THREADS_TRUE@simple_test_threads_SOURCES = simple_test_threads.c
+ at HAVE_THREADS_TRUE@simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ndft_fast_SOURCES = ndft_fast.c
+ndft_fast_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+taylor_nfft_SOURCES = taylor_nfft.c
+taylor_nfft_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+flags_SOURCES = flags.c
+flags_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+nfft_times_SOURCES = nfft_times.c
+nfft_times_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_SOURCES = nfft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_SOURCES = nfft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_SOURCES = nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_SOURCES = nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+EXTRA_DIST = flags.m ndft_fast.m taylor_nfft.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+flags$(EXEEXT): $(flags_OBJECTS) $(flags_DEPENDENCIES) $(EXTRA_flags_DEPENDENCIES) 
+	@rm -f flags$(EXEEXT)
+	$(LINK) $(flags_OBJECTS) $(flags_LDADD) $(LIBS)
+ndft_fast$(EXEEXT): $(ndft_fast_OBJECTS) $(ndft_fast_DEPENDENCIES) $(EXTRA_ndft_fast_DEPENDENCIES) 
+	@rm -f ndft_fast$(EXEEXT)
+	$(LINK) $(ndft_fast_OBJECTS) $(ndft_fast_LDADD) $(LIBS)
+nfft_benchomp$(EXEEXT): $(nfft_benchomp_OBJECTS) $(nfft_benchomp_DEPENDENCIES) $(EXTRA_nfft_benchomp_DEPENDENCIES) 
+	@rm -f nfft_benchomp$(EXEEXT)
+	$(nfft_benchomp_LINK) $(nfft_benchomp_OBJECTS) $(nfft_benchomp_LDADD) $(LIBS)
+nfft_benchomp_createdataset$(EXEEXT): $(nfft_benchomp_createdataset_OBJECTS) $(nfft_benchomp_createdataset_DEPENDENCIES) $(EXTRA_nfft_benchomp_createdataset_DEPENDENCIES) 
+	@rm -f nfft_benchomp_createdataset$(EXEEXT)
+	$(LINK) $(nfft_benchomp_createdataset_OBJECTS) $(nfft_benchomp_createdataset_LDADD) $(LIBS)
+nfft_benchomp_detail_single$(EXEEXT): $(nfft_benchomp_detail_single_OBJECTS) $(nfft_benchomp_detail_single_DEPENDENCIES) $(EXTRA_nfft_benchomp_detail_single_DEPENDENCIES) 
+	@rm -f nfft_benchomp_detail_single$(EXEEXT)
+	$(LINK) $(nfft_benchomp_detail_single_OBJECTS) $(nfft_benchomp_detail_single_LDADD) $(LIBS)
+nfft_benchomp_detail_threads$(EXEEXT): $(nfft_benchomp_detail_threads_OBJECTS) $(nfft_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_nfft_benchomp_detail_threads_DEPENDENCIES) 
+	@rm -f nfft_benchomp_detail_threads$(EXEEXT)
+	$(nfft_benchomp_detail_threads_LINK) $(nfft_benchomp_detail_threads_OBJECTS) $(nfft_benchomp_detail_threads_LDADD) $(LIBS)
+nfft_times$(EXEEXT): $(nfft_times_OBJECTS) $(nfft_times_DEPENDENCIES) $(EXTRA_nfft_times_DEPENDENCIES) 
+	@rm -f nfft_times$(EXEEXT)
+	$(LINK) $(nfft_times_OBJECTS) $(nfft_times_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+simple_test_threads$(EXEEXT): $(simple_test_threads_OBJECTS) $(simple_test_threads_DEPENDENCIES) $(EXTRA_simple_test_threads_DEPENDENCIES) 
+	@rm -f simple_test_threads$(EXEEXT)
+	$(LINK) $(simple_test_threads_OBJECTS) $(simple_test_threads_LDADD) $(LIBS)
+taylor_nfft$(EXEEXT): $(taylor_nfft_OBJECTS) $(taylor_nfft_DEPENDENCIES) $(EXTRA_taylor_nfft_DEPENDENCIES) 
+	@rm -f taylor_nfft$(EXEEXT)
+	$(LINK) $(taylor_nfft_OBJECTS) $(taylor_nfft_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flags.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ndft_fast.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp-nfft_benchomp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_createdataset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_times.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test_threads.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/taylor_nfft.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+nfft_benchomp-nfft_benchomp.o: nfft_benchomp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -MT nfft_benchomp-nfft_benchomp.o -MD -MP -MF $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo -c -o nfft_benchomp-nfft_benchomp.o `test -f 'nfft_benchomp.c' || echo '$(srcdir)/'`nfft_benchomp.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo $(DEPDIR)/nfft_benchomp-nfft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp.c' object='nfft_benchomp-nfft_benchomp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -c -o nfft_benchomp-nfft_benchomp.o `test -f 'nfft_benchomp.c' || echo '$(srcdir)/'`nfft_benchomp.c
+
+nfft_benchomp-nfft_benchomp.obj: nfft_benchomp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -MT nfft_benchomp-nfft_benchomp.obj -MD -MP -MF $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo -c -o nfft_benchomp-nfft_benchomp.obj `if test -f 'nfft_benchomp.c'; then $(CYGPATH_W) 'nfft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo $(DEPDIR)/nfft_benchomp-nfft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp.c' object='nfft_benchomp-nfft_benchomp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -c -o nfft_benchomp-nfft_benchomp.obj `if test -f 'nfft_benchomp.c'; then $(CYGPATH_W) 'nfft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp.c'; fi`
+
+nfft_benchomp_detail_threads-nfft_benchomp_detail.o: nfft_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfft_benchomp_detail_threads-nfft_benchomp_detail.o -MD -MP -MF $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.o `test -f 'nfft_benchomp_detail.c' || echo '$(srcdir)/'`nfft_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp_detail.c' object='nfft_benchomp_detail_threads-nfft_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.o `test -f 'nfft_benchomp_detail.c' || echo '$(srcdir)/'`nfft_benchomp_detail.c
+
+nfft_benchomp_detail_threads-nfft_benchomp_detail.obj: nfft_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfft_benchomp_detail_threads-nfft_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.obj `if test -f 'nfft_benchomp_detail.c'; then $(CYGPATH_W) 'nfft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp_detail.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp_detail.c' object='nfft_benchomp_detail_threads-nfft_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.obj `if test -f 'nfft_benchomp_detail.c'; then $(CYGPATH_W) 'nfft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp_detail.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfft/README b/examples/nfft/README
new file mode 100644
index 0000000..338fdfd
--- /dev/null
+++ b/examples/nfft/README
@@ -0,0 +1,30 @@
+Examples to the nonequispaced FFT
+
+Author
+
+  Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+
+List of files and purpose
+
+  README            this file
+  simple_test.c     introductory example how to use the nfft
+  flags.c           compares different precomputation strategies for the nfft
+  flags.m           visualisation with MATLAB, loads data files
+                    'flags.data0.gaussian', ... (previously computed by the
+                    executable flags (where the window function has to be set
+                    and the whole library needs recompilation); calls also the
+                    executable taylor_nfft
+  ndft_fast.c       compares different precomputation strategies for the ndft
+  ndft_fast.m       visualisation with MATLAB, calls the executable ndft_fast
+  nfft_benchomp.c   runs benchmarks for nfft OpenMP code and writes results as
+                    pgfplots to nfft_benchomp_results_plots.tex, uses
+		    nfft_benchomp_createdataset.c and nfft_benchomp_detail.c
+  nfft_times.c      compares 1d, 2d, and 3d times to compute nffts and ffts,
+                    outputs a latex-table
+  taylor_nfft.c     compares the nfft with a taylor expansion based one
+  taylor_nfft.m     visualisation with MATLAB, calls the executable taylor_nfft
+
+References
+
+  Kunis, S. and Potts, D. Time and memory requirements of the nonequispaced FFT
+  Preprint 2006-1, Chemnitz University of Technology, Faculty of Mathematics
diff --git a/examples/nfft/flags.c b/examples/nfft/flags.c
new file mode 100644
index 0000000..8c21691
--- /dev/null
+++ b/examples/nfft/flags.c
@@ -0,0 +1,349 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: flags.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file flags.c
+ *
+ * \brief Testing the nfft.
+ *
+ * \author Stefan Kunis
+ *
+ * References: Time and Memory Requirements of the Nonequispaced FFT
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#ifdef GAUSSIAN
+  unsigned test_fg=1;
+#else
+  unsigned test_fg=0;
+#endif
+
+#ifdef MEASURE_TIME_FFTW
+  unsigned test_fftw=1;
+#else
+  unsigned test_fftw=0;
+#endif
+
+#ifdef MEASURE_TIME
+  unsigned test=1;
+#else
+  unsigned test=0;
+#endif
+
+static void flags_cp(nfft_plan *dst, nfft_plan *src)
+{
+  dst->x=src->x;
+  dst->f_hat=src->f_hat;
+  dst->f=src->f;
+  dst->g1=src->g1;
+  dst->g2=src->g2;
+  dst->my_fftw_plan1=src->my_fftw_plan1;
+  dst->my_fftw_plan2=src->my_fftw_plan2;
+}
+
+static void time_accuracy(int d, int N, int M, int n, int m, unsigned test_ndft,
+                   unsigned test_pre_full_psi)
+{
+  int r, NN[d], nn[d];
+  double t_ndft, t, e;
+  double _Complex *swapndft = NULL;
+  ticks t0, t1;
+
+  nfft_plan p;
+  nfft_plan p_pre_phi_hut;
+  nfft_plan p_fg_psi;
+  nfft_plan p_pre_lin_psi;
+  nfft_plan p_pre_fg_psi;
+  nfft_plan p_pre_psi;
+  nfft_plan p_pre_full_psi;
+
+  printf("%d\t%d\t", d, N);
+
+  for(r=0; r<d; r++)
+    {
+      NN[r]=N;
+      nn[r]=n;
+    }
+
+  /** output vector ndft */
+  if(test_ndft)
+    swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+  nfft_init_guru(&p, d, NN, M, nn, m,
+                 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  nfft_init_guru(&p_pre_phi_hut, d, NN, M, nn, m, PRE_PHI_HUT,0);
+  flags_cp(&p_pre_phi_hut, &p);
+  nfft_precompute_one_psi(&p_pre_phi_hut);
+
+  if(test_fg)
+    {
+      nfft_init_guru(&p_fg_psi, d, NN, M, nn, m, FG_PSI,0);
+      flags_cp(&p_fg_psi, &p);
+      nfft_precompute_one_psi(&p_fg_psi);
+    }
+
+  nfft_init_guru(&p_pre_lin_psi, d, NN, M, nn, m, PRE_LIN_PSI,0);
+  flags_cp(&p_pre_lin_psi, &p);
+  nfft_precompute_one_psi(&p_pre_lin_psi);
+
+  if(test_fg)
+    {
+      nfft_init_guru(&p_pre_fg_psi, d, NN, M, nn, m, PRE_FG_PSI,0);
+      flags_cp(&p_pre_fg_psi, &p);
+      nfft_precompute_one_psi(&p_pre_fg_psi);
+    }
+
+  nfft_init_guru(&p_pre_psi, d, NN, M, nn, m, PRE_PSI,0);
+  flags_cp(&p_pre_psi, &p);
+  nfft_precompute_one_psi(&p_pre_psi);
+
+  if(test_pre_full_psi)
+    {
+      nfft_init_guru(&p_pre_full_psi, d, NN, M, nn, m, PRE_FULL_PSI,0);
+      flags_cp(&p_pre_full_psi, &p);
+      nfft_precompute_one_psi(&p_pre_full_psi);
+    }
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f,swapndft);
+
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.01)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&p);
+          t1 = getticks();
+          t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+
+      NFFT_SWAP_complex(p.f,swapndft);
+    }
+  else
+    t_ndft=nan("");
+
+  /** NFFTs */
+  nfft_trafo(&p);
+  nfft_trafo(&p_pre_phi_hut);
+  if(test_fg)
+    nfft_trafo(&p_fg_psi);
+  else
+    p_fg_psi.MEASURE_TIME_t[2]=nan("");
+  nfft_trafo(&p_pre_lin_psi);
+  if(test_fg)
+    nfft_trafo(&p_pre_fg_psi);
+  else
+    p_pre_fg_psi.MEASURE_TIME_t[2]=nan("");
+  nfft_trafo(&p_pre_psi);
+  if(test_pre_full_psi)
+    nfft_trafo(&p_pre_full_psi);
+  else
+    p_pre_full_psi.MEASURE_TIME_t[2]=nan("");
+
+  if(test_fftw==0)
+    p.MEASURE_TIME_t[1]=nan("");
+
+  if(test_ndft)
+    e=X(error_l_2_complex)(swapndft, p.f, p.M_total);
+  else
+    e=nan("");
+
+  printf("%.2e\t%d\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
+         t_ndft,
+         m,
+         e,
+         p.MEASURE_TIME_t[0],
+         p_pre_phi_hut.MEASURE_TIME_t[0],
+
+         p.MEASURE_TIME_t[1],
+
+         p.MEASURE_TIME_t[2],
+         p_fg_psi.MEASURE_TIME_t[2],
+         p_pre_lin_psi.MEASURE_TIME_t[2],
+         p_pre_fg_psi.MEASURE_TIME_t[2],
+         p_pre_psi.MEASURE_TIME_t[2],
+         p_pre_full_psi.MEASURE_TIME_t[2]);
+
+  fflush(stdout);
+
+  /** finalise */
+  if(test_pre_full_psi)
+    nfft_finalize(&p_pre_full_psi);
+  nfft_finalize(&p_pre_psi);
+  if(test_fg)
+    nfft_finalize(&p_pre_fg_psi);
+  nfft_finalize(&p_pre_lin_psi);
+  if(test_fg)
+    nfft_finalize(&p_fg_psi);
+  nfft_finalize(&p_pre_phi_hut);
+  nfft_finalize(&p);
+
+  if(test_ndft)
+    nfft_free(swapndft);
+}
+
+static void accuracy_pre_lin_psi(int d, int N, int M, int n, int m, int K)
+{
+  int r, NN[d], nn[d];
+  double e;
+  double _Complex *swapndft;
+
+  nfft_plan p;
+
+  for(r=0; r<d; r++)
+    {
+      NN[r]=N;
+      nn[r]=n;
+    }
+
+  /** output vector ndft */
+  swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+  nfft_init_guru(&p, d, NN, M, nn, m,
+                 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+                 PRE_PHI_HUT| PRE_LIN_PSI|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /** realloc psi */
+  nfft_free(p.psi);
+  p.K=K;
+  p.psi=(double*) nfft_malloc((p.K+1)*p.d*sizeof(double));
+
+  /** precomputation can be done before the nodes are initialised */
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** compute exact result */
+  NFFT_SWAP_complex(p.f,swapndft);
+  nfft_trafo_direct(&p);
+  NFFT_SWAP_complex(p.f,swapndft);
+
+  /** NFFT */
+  nfft_trafo(&p);
+  e=X(error_l_2_complex)(swapndft, p.f, p.M_total);
+
+  //  printf("%d\t%d\t%d\t%d\t%.2e\n",d,N,m,K,e);
+  printf("$%.1e$&\t",e);
+
+  fflush(stdout);
+
+  /** finalise */
+  nfft_finalize(&p);
+  nfft_free(swapndft);
+}
+
+
+int main(int argc,char **argv)
+{
+  int l,m,d,trial,N;
+
+  if(argc<=2)
+    {
+      fprintf(stderr,"flags type first last trials d m\n");
+      return -1;
+    }
+
+  if((test==0)&&(atoi(argv[1])<2))
+    {
+      fprintf(stderr,"MEASURE_TIME in nfft3util.h not set\n");
+      return -1;
+    }
+
+  fprintf(stderr,"Testing different precomputation schemes for the nfft.\n");
+  fprintf(stderr,"Columns: d, N=M, t_ndft, e_nfft, t_D, t_pre_phi_hut, ");
+  fprintf(stderr,"t_fftw, t_B, t_fg_psi, t_pre_lin_psi, t_pre_fg_psi, ");
+  fprintf(stderr,"t_pre_psi, t_pre_full_psi\n\n");
+
+  d=atoi(argv[5]);
+  m=atoi(argv[6]);
+
+  /* time vs. N=M */
+  if(atoi(argv[1])==0)
+    for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+      for(trial=0; trial<atoi(argv[4]); trial++)
+	{
+	  if(l<=20)
+	    time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);
+	  else
+	    time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);
+	}
+
+  d=atoi(argv[5]);
+  N=atoi(argv[6]);
+
+  /* accuracy vs. time */
+  if(atoi(argv[1])==1)
+    for(m=atoi(argv[2]); m<=atoi(argv[3]); m++)
+      for(trial=0; trial<atoi(argv[4]); trial++)
+        time_accuracy(d, N, (int)pow(N,d), 2*N, m, 1, 1);
+
+  d=atoi(argv[5]);
+  N=atoi(argv[6]);
+  m=atoi(argv[7]);
+
+  /* accuracy vs. K for linear interpolation, assumes (m+1)|K */
+  if(atoi(argv[1])==2)
+    {
+      printf("$\\log_2(K/(m+1))$&\t");
+      for(l=atoi(argv[2]); l<atoi(argv[3]); l++)
+	printf("$%d$&\t",l);
+
+      printf("$%d$\\\\\n",atoi(argv[3]));
+
+      printf("$\\tilde E_2$&\t");
+      for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+	accuracy_pre_lin_psi(d, N, (int)pow(N,d), 2*N, m, (m+1)*(1U<< l));
+
+      printf("\n");
+    }
+
+  return 1;
+}
diff --git a/examples/nfft/flags.m b/examples/nfft/flags.m
new file mode 100644
index 0000000..ca67140
--- /dev/null
+++ b/examples/nfft/flags.m
@@ -0,0 +1,152 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: flags.m 3776 2012-06-03 13:29:25Z keiner $
+
+%% File: flags1.m
+%%
+%% Testing different precomputation schemes for the nfft.
+%% 1. Computation time vs. problem size
+%%
+%% Author Stefan Kunis
+%%
+%% References: Time and memory requirements of the Nonequispaced FFT
+%%
+%% Loads flags.data0.gaussian, ...
+
+% see flags.readme
+trials=10;
+first=4;
+last=20;
+
+% load already computed data, times for precomputed D/B differ only negligible
+dg=load('flags.data0.gaussian');
+dk=load('flags.data0.kaiser_bessel');
+ds=load('flags.data0.sinc_power');
+db=load('flags.data0.b_spline');
+
+N=dg(1:trials:end,2);
+
+t_Dg=(mean(reshape(dg(:,6),trials,last-first+1)))';
+t_Dk=(mean(reshape(dk(:,6),trials,last-first+1)))';
+t_Ds=(mean(reshape(ds(:,6),trials,last-first+1)))';
+t_Db=(mean(reshape(db(:,6),trials,last-first+1)))';
+t_pre_phi_hut=(mean(reshape(dg(:,7),trials,last-first+1)))';
+
+t_fftw=(mean(reshape(dg(:,8),trials,last-first+1)))';
+
+t_Bg=(mean(reshape(dg(:,9),trials,last-first+1)))';
+t_Bk=(mean(reshape(dk(:,9),trials,last-first+1)))';
+t_Bs=(mean(reshape(ds(:,9),trials,last-first+1)))';
+t_Bb=(mean(reshape(db(:,9),trials,last-first+1)))';
+
+t_fg_psi=(mean(reshape(dg(:,10),trials,last-first+1)))';
+t_pre_lin_psi=(mean(reshape(dg(:,11),trials,last-first+1)))';
+t_pre_fg_psi=(mean(reshape(dg(:,12),trials,last-first+1)))';
+t_pre_psi=(mean(reshape(dg(:,13),trials,last-first+1)))';
+t_pre_full_psi=(mean(reshape(dg(:,14),trials,last-first+1)))';
+
+h=loglog(N,t_Dg,'k',...
+         N,t_Dk,'k--',...
+         N,t_Ds,'k-.',...
+         N,t_Db,'k:',...
+         N,t_pre_phi_hut,'k.');
+  
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-6,10^-4,10^-2,1,10^2]);
+set(gca,'XTick',[10^2,10^3,10^4,10^5,10^6]);
+set(gca,'FontSize',20);
+axis([N(1),N(end),10^-6,10^1]);
+
+if(to_pdf)
+  !ps2pdf temp.eps flags1.pdf 
+  !rm temp.eps
+else
+  !mv temp.eps flags1.eps
+end;
+
+return
+
+%%
+%% Testing accuracy vs. cut-off/Taylor degree m.
+%%
+trials=20;
+first=1;
+last=20;
+sigma_nfft=2;
+sigma_taylor=4;
+sigma_nfft1=1.25;
+sigma_taylor1=1.5;
+sigma_nfft2=8;
+sigma_taylor2=16;
+
+% typical sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft2a.dat',1,first,...
+	       last,trials,sigma_nfft,sigma_taylor));
+data=load('taylor_nfft2a.dat');
+
+m_nfft=data(:,5);
+e_nfft=data(:,7);
+max_e_nfft=(max(reshape(e_nfft,trials,last-first+1)))';
+
+m_taylor=data(:,9);
+e_taylor=data(:,11);
+max_e_taylor=(max(reshape(e_taylor,trials,last-first+1)))';
+
+% small sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft2b.dat',1,first,...
+	       last,trials,sigma_nfft1,sigma_taylor1));
+data1=load('taylor_nfft2b.dat');
+max_e_nfft_sigma=(max(reshape(data1(:,7),trials,last-first+1)))';
+max_e_taylor_sigma=(max(reshape(data1(:,11),trials,last-first+1)))';
+
+% large sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft2c.dat',1,first,...
+	       last,trials,sigma_nfft2,sigma_taylor2));
+data2=load('taylor_nfft2c.dat');
+max_e_nfft_sigma2=(max(reshape(data2(:,7),trials,last-first+1)))';
+max_e_taylor_sigma2=(max(reshape(data2(:,11),trials,last-first+1)))';
+
+h=semilogy(m_nfft,e_nfft,'k+',first:last,max_e_nfft,'k--',first:last,...
+	   max_e_nfft_sigma,'k:',first:last,max_e_nfft_sigma2,'k:',...
+	   m_taylor,e_taylor,'kx',first:last,max_e_taylor,'k',first:last,...
+	   max_e_taylor_sigma,'k-.',first:last,max_e_taylor_sigma2,'k-.');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([first,last,10^-16,1]);
+
+print temp.eps -deps
+!ps2pdf temp.eps taylor_nfft2.pdf 
+!rm temp.eps
+
+
+%%
+%% Testing accuracy vs. time.
+%%
+t_nfft=data(:,6);
+t_taylor=data(:,10);
+
+h=semilogy(t_nfft,e_nfft,'k+',t_taylor,e_taylor,'kx');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([min([t_nfft;t_taylor]),max([t_nfft;t_taylor]),10^-16,1]);
+
+print temp.eps -deps
+!ps2pdf temp.eps taylor_nfft3.pdf 
+!rm temp.eps
+
diff --git a/examples/nfft/ndft_fast.c b/examples/nfft/ndft_fast.c
new file mode 100644
index 0000000..dbe3320
--- /dev/null
+++ b/examples/nfft/ndft_fast.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: ndft_fast.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file ndft_fast.c
+ *
+ * \brief Testing ndft, Horner-like ndft, and fully precomputed ndft.
+ *
+ * \author Stefan Kunis
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void ndft_horner_trafo(nfft_plan *ths)
+{
+  int j,k;
+  double _Complex *f_hat_k, *f_j;
+  double _Complex exp_omega_0;
+
+  for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+    (*f_j) =0;
+
+  for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+    {
+      exp_omega_0 = cexp(+2*PI*_Complex_I*ths->x[j]);
+      for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++)
+        {
+          (*f_j)+=(*f_hat_k);
+          (*f_j)*=exp_omega_0;
+	}
+      (*f_j)*=cexp(-PI*_Complex_I*ths->N[0]*ths->x[j]);
+    }
+} /* ndft_horner_trafo */
+
+static void ndft_pre_full_trafo(nfft_plan *ths, double _Complex *A)
+{
+  int j,k;
+  double _Complex *f_hat_k, *f_j;
+  double _Complex *A_local;
+
+  for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+    (*f_j) =0;
+
+  for(j=0, f_j=ths->f, A_local=A; j<ths->M_total; j++, f_j++)
+    for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++, A_local++)
+      (*f_j) += (*f_hat_k)*(*A_local);
+} /* ndft_pre_full_trafo */
+
+static void ndft_pre_full_init(nfft_plan *ths, double _Complex *A)
+{
+  int j,k;
+  double _Complex *f_hat_k, *f_j, *A_local;
+
+  for(j=0, f_j=ths->f, A_local=A; j<ths->M_total; j++, f_j++)
+    for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++, A_local++)
+      (*A_local) = cexp(-2*PI*_Complex_I*(k-ths->N[0]/2)*ths->x[j]);
+
+} /* ndft_pre_full_init */
+
+static void ndft_time(int N, int M, unsigned test_ndft, unsigned test_pre_full)
+{
+  int r;
+  double t, t_ndft, t_horner, t_pre_full, t_nfft;
+  double _Complex *A = NULL;
+  ticks t0, t1;
+
+  nfft_plan np;
+
+  printf("%d\t%d\t",N, M);
+
+  nfft_init_1d(&np, N, M);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(np.x, np.M_total);
+
+  if(test_pre_full)
+   {
+     A=(double _Complex*)nfft_malloc(N*M*sizeof(double _Complex));
+     ndft_pre_full_init(&np, A);
+   }
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(np.f_hat, np.N_total);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&np);
+          t1 = getticks();
+          t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+
+      printf("%.2e\t",t_ndft);
+    }
+  else
+    printf("nan\t\t");
+
+  /** Horner NDFT */
+  t_horner=0;
+  r=0;
+  while(t_horner<0.1)
+    {
+      r++;
+      t0 = getticks();
+      ndft_horner_trafo(&np);
+      t1 = getticks();
+      t = nfft_elapsed_seconds(t1,t0);
+      t_horner+=t;
+    }
+  t_horner/=r;
+
+  printf("%.2e\t", t_horner);
+
+  /** Fully precomputed NDFT */
+  if(test_pre_full)
+    {
+      t_pre_full=0;
+      r=0;
+      while(t_pre_full<0.1)
+        {
+          r++;
+          t0 = getticks();
+          ndft_pre_full_trafo(&np,A);
+          t1 = getticks();
+          t = nfft_elapsed_seconds(t1,t0);
+          t_pre_full+=t;
+        }
+      t_pre_full/=r;
+
+      printf("%.2e\t", t_pre_full);
+    }
+  else
+    printf("nan\t\t");
+
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo(&np);
+      t1 = getticks();
+      t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+
+  printf("%.2e\n", t_nfft);
+
+  fflush(stdout);
+
+  if(test_pre_full)
+    nfft_free(A);
+
+  nfft_finalize(&np);
+}
+
+int main(int argc,char **argv)
+{
+  int l,trial;
+
+  if(argc<=2)
+    {
+      fprintf(stderr,"ndft_fast type first last trials\n");
+      return -1;
+    }
+
+  fprintf(stderr,"Testing ndft, Horner-like ndft, fully precomputed ndft.\n");
+  fprintf(stderr,"Columns: N, M, t_ndft, t_horner, t_pre_full, t_nfft\n\n");
+
+  /* time vs. N=M */
+  if(atoi(argv[1])==0)
+    {
+      for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+        for(trial=0; trial<atoi(argv[4]); trial++)
+          if(l<=13)
+            ndft_time((1U<< l), (1U<< l), 1, 1);
+          else
+            if(l<=15)
+              ndft_time((1U<< l), (1U<< l), 1, 0);
+            else
+              ndft_time((1U<< l), (1U<< l), 0, 0);
+    }
+
+  return 1;
+}
diff --git a/examples/nfft/ndft_fast.m b/examples/nfft/ndft_fast.m
new file mode 100644
index 0000000..4003bb9
--- /dev/null
+++ b/examples/nfft/ndft_fast.m
@@ -0,0 +1,61 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndft_fast.m 3776 2012-06-03 13:29:25Z keiner $
+
+%% File: ndft_fast.m
+%%
+%% Testing ndft, Horner-like ndft, fully precomputed ndft and nfft.
+%% Testing time vs. problem size.
+%%
+%% Author Stefan Kunis
+%%
+%% References: Time and memory requirements of the Nonequispaced FFT
+%%
+%% Calls repeatedly the executable ndft_fast.
+
+to_pdf=0;
+
+trials=10;
+first=4;
+last=17;
+%system(sprintf('./ndft_fast %d %d %d %d > ndft_fast.data',0,first,last,trials));
+data=load('ndft_fast.data');
+
+N=data(1:trials:end,1);
+t_ndft=(mean(reshape(data(:,3),trials,last-first+1)))';
+t_horner=(mean(reshape(data(:,4),trials,last-first+1)))';
+t_pre_full=(mean(reshape(data(:,5),trials,last-first+1)))';
+t_nfft=(mean(reshape(data(:,6),trials,last-first+1)))';
+
+h=loglog(N,t_ndft,'k',...
+         N,t_horner,'k--',...
+         N,t_pre_full,'k-.',...
+         N,10^-8*N.^2,'k:',...
+         N,t_nfft,'kd');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-6,10^-4,10^-2,1,10^2]);
+set(gca,'XTick',[10^2,10^3,10^4,10^5,10^6]);
+set(gca,'FontSize',20);
+axis([N(1),N(end),10^-6,10^2]);
+
+print temp.eps -deps
+if(to_pdf)
+  !ps2pdf temp.eps ndft_fast.pdf 
+  !rm temp.eps
+else
+  !mv temp.eps ndft_fast.eps
+end;
diff --git a/examples/nfft/nfft_benchomp.c b/examples/nfft/nfft_benchomp.c
new file mode 100644
index 0000000..2c85d7d
--- /dev/null
+++ b/examples/nfft/nfft_benchomp.c
@@ -0,0 +1,590 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include <nfft3.h>
+#include <nfft3util.h>
+
+#define NREPEAT 5
+
+static FILE* file_out_tex = NULL;
+
+int get_nthreads_array(int **arr)
+{
+  int max_threads = nfft_get_omp_num_threads();
+  int alloc_num = 2;
+  int k;
+  int ret_number = 0;
+  int max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;
+
+  if (max_threads <= 5)
+  {
+    *arr = (int*) malloc(max_threads*sizeof(int));
+    for (k = 0; k < max_threads; k++)
+      *(*arr + k) = k+1;
+    return max_threads;
+  }
+
+  for (k = 1; k <= max_threads; k*=2, alloc_num++);
+
+  *arr = (int*) malloc(alloc_num*sizeof(int));
+
+  for (k = 1; k <= max_threads; k*=2)
+  {
+    if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+    {
+      *(*arr + ret_number) = max_threads/2;
+      ret_number++;
+    }
+
+    *(*arr + ret_number) = k;
+    ret_number++;
+
+    if (k != max_threads && 2*k > max_threads)
+    {
+      *(*arr + ret_number) = max_threads;
+      ret_number++;
+      break;
+    }
+  }
+
+  return ret_number;
+} 
+  
+
+void check_result_value(const int val, const int ok, const char *msg)
+{
+  if (val != ok)
+  {
+    fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
+
+    exit(1);
+  }
+}
+
+void run_test_create(int d, int trafo_adjoint, int N, int M, double sigma)
+{
+  char cmd[1025];
+
+  if (d==1)
+    snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, M, sigma);
+  else if (d==2)  
+    snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, N, M, sigma);
+  else if (d==3)  
+    snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, N, N, M, sigma);
+  else if (d==4)  
+    snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, N, N, N, M, sigma);
+  else
+    exit(1);
+  fprintf(stderr, "%s\n", cmd);
+  check_result_value(system(cmd), 0, "createdataset");
+}
+
+void run_test_init_output()
+{
+  FILE *f = fopen("nfft_benchomp_test.result", "w");
+  if (f!= NULL)
+    fclose(f);
+}
+
+typedef struct
+{
+  int d;
+  int trafo_adjoint;
+  int N;
+  int M;
+  double sigma;
+  int m;
+  int flags;
+} s_param;
+
+typedef struct
+{
+  double avg;
+  double min;
+  double max;
+} s_resval;
+
+typedef struct
+{
+  int nthreads;
+  s_resval resval[6];
+} s_result;
+
+typedef struct
+{
+  s_param param;
+  s_result *results;
+  int nresults;
+} s_testset;
+
+void run_test(s_resval *res, int nrepeat, int m, int flags, int nthreads)
+{
+  char cmd[1025];
+  int r,t;
+  
+  for (t = 0; t < 6; t++)
+  {
+    res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+  }
+
+  if (nthreads < 2)
+    snprintf(cmd, 1024, "./nfft_benchomp_detail_single %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out", m, flags);
+  else
+    snprintf(cmd, 1024, "./nfft_benchomp_detail_threads %d %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out", m, flags, nthreads);
+  fprintf(stderr, "%s\n", cmd);
+  check_result_value(system(cmd), 0, cmd);
+
+  for (r = 0; r < nrepeat; r++)
+  {
+    int retval;
+    double v[6];
+    FILE *f;
+    check_result_value(system(cmd), 0, cmd);
+    f = fopen("nfft_benchomp_test.out", "r");
+    retval = fscanf(f, "%lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5);
+    check_result_value(retval, 6, "read nfft_benchomp_test.out");
+    fclose(f);
+
+    for (t = 0; t < 6; t++)
+    {
+      res[t].avg += v[t];
+      if (res[t].min > v[t])
+        res[t].min = v[t];
+      if (res[t].max < v[t])
+        res[t].max = v[t];
+    }
+  }
+
+  for (t = 0; t < 6; t++)
+    res[t].avg /= nrepeat;
+
+  fprintf(stderr, "%d %d: ", nthreads, nrepeat);
+  for (t = 0; t < 6; t++)
+    fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+  fprintf(stderr, "\n");
+}
+
+const char *get_psi_string(int flags)
+{
+  if (flags & PRE_ONE_PSI)
+    return "unknownPSI";
+
+  return "nopsi";
+}
+const char *get_sort_string(int flags)
+{
+  if (flags & NFFT_SORT_NODES)
+    return "sorted";
+
+    return "unsorted";
+}
+
+const char *get_adjoint_omp_string(int flags)
+{
+  if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    return "blockwise";
+
+    return "";
+}
+
+#define MASK_D (1U<<0)
+#define MASK_TA (1U<<1)
+#define MASK_N (1U<<2)
+#define MASK_SIGMA (1U<<3)
+#define MASK_M (1U<<4)
+#define MASK_WINM (1U<<5)
+#define MASK_FLAGS_PSI (1U<<6)
+#define MASK_FLAGS_SORT (1U<<7)
+#define MASK_FLAGS_BW (1U<<8)
+
+unsigned int determine_different_parameters(s_testset *testsets, int ntestsets)
+{
+  int t;
+  unsigned int mask = 0;
+
+  if (ntestsets < 2)
+    return 0;
+
+  for (t = 1; t < ntestsets; t++)
+  {
+    if (testsets[t-1].param.d != testsets[t].param.d)
+      mask |= MASK_D;
+    if (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)
+      mask |= MASK_TA;
+    if (testsets[t-1].param.N != testsets[t].param.N)
+      mask |= MASK_N;
+    if (testsets[t-1].param.sigma != testsets[t].param.sigma)
+      mask |= MASK_SIGMA;
+    if (testsets[t-1].param.M != testsets[t].param.M)
+      mask |= MASK_M;
+    if (testsets[t-1].param.m != testsets[t].param.m)
+      mask |= MASK_WINM;
+    if ((testsets[t-1].param.flags & PRE_ONE_PSI) != (testsets[t].param.flags & PRE_ONE_PSI))
+      mask |= MASK_FLAGS_PSI;
+    if ((testsets[t-1].param.flags & NFFT_SORT_NODES) != (testsets[t].param.flags & NFFT_SORT_NODES))
+      mask |= MASK_FLAGS_SORT;
+    if ((testsets[t-1].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT))
+      mask |= MASK_FLAGS_BW;
+  }
+
+  return mask;
+}
+
+void get_plot_title(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+{
+  unsigned int mask = ~diff_mask;
+  int offset = 0;
+  int len;
+
+  len = snprintf(outstr, maxlen, "%s", hostname);
+  if (len < 0 || len+offset >= maxlen-1) return;
+  offset += len;
+
+  if (mask & MASK_D)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %dd", param.d);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_TA)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " $\\mathrm{NFFT}%s$", param.trafo_adjoint==0?"":"^\\top");
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_N)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " N=%d", param.N);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_SIGMA)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " N=%g", param.sigma);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_M)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_WINM)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FLAGS_PSI)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %s", get_psi_string(param.flags));
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FLAGS_SORT)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %s", get_sort_string(param.flags));
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.flags)) > 0)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %s", get_adjoint_omp_string(param.flags));
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+}
+
+void print_output_speedup_total_tref(FILE *out, s_testset *testsets, int ntestsets, double tref)
+{
+  int i, t;
+  char hostname[1025];
+  char plottitle[1025];
+  unsigned int diff_mask = determine_different_parameters(testsets, ntestsets);
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FLAGS_SORT);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+  fprintf(out, " title={%s}", plottitle);
+  fprintf(out, " ]\n");
+
+  for (t = 0; t < ntestsets; t++)
+  {
+    s_testset testset = testsets[t];
+    fprintf(stderr, "%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}", hostname, testset.param.d, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_string(testset.param.flags), get_adjoint_omp_string(testset.param.flags));
+    fprintf(stderr, "\n");
+
+    fprintf(out, "\\addplot coordinates {");
+    for (i = 0; i < testset.nresults; i++)
+      fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+    fprintf(out, "};\n");
+
+    for (i = 0; i < testset.nresults; i++)
+    {
+      fprintf(stderr, "%d:%.3f  ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+    }
+    fprintf(stderr, "\n\n");
+  }
+
+  fprintf(out, "\\legend{{");
+  for (t = 0; t < ntestsets; t++)
+  {
+    char title[256];
+    if (t > 0)
+      fprintf(out, "},{");
+    get_plot_title(title, 255, "", testsets[t].param, ~(diff_mask | MASK_FLAGS_SORT));
+    fprintf(out, "%s", title);
+  }
+  fprintf(out, "}}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void print_output_speedup_total(FILE *out, s_testset *testsets, int ntestsets)
+{
+  double tref = 1.0/0.0;
+  int t, k;
+
+  for (t = 0; t < ntestsets; t++)
+    for (k = 0; k < testsets[t].nresults; k++)
+      if (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)
+        tref = testsets[t].results[k].resval[5].avg;
+
+  print_output_speedup_total_tref(out, testsets, ntestsets, tref);
+}
+
+void print_output_histo_DFBRT(FILE *out, s_testset testset)
+{
+  int i, size = testset.nresults;
+  char hostname[1025];
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+  fprintf(out, "symbolic x coords={");
+  for (i = 0; i < size; i++)
+    if (i > 0)
+      fprintf(out, ",%d", testset.results[i].nthreads);
+    else
+      fprintf(out, "%d", testset.results[i].nthreads);
+fprintf(stderr, "FLAGS: %d\n", testset.param.flags);
+
+  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out, " title={%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}", hostname, testset.param.d, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_string(testset.param.flags), get_adjoint_omp_string(testset.param.flags));
+  fprintf(out, " ]\n");
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[5].avg);
+  fprintf(out, "};\n");
+  fprintf(out, "\\legend{D,F,B,rest,total}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void run_testset(s_testset *testset, int d, int trafo_adjoint, int N, int M, double sigma, int m, int flags, int *nthreads_array, int n_threads_array_size)
+{
+  int i;
+  testset->param.d = d;
+  testset->param.trafo_adjoint = trafo_adjoint;
+  testset->param.N = N;
+  testset->param.M = M;
+  testset->param.sigma = sigma;
+  testset->param.m = m;
+  testset->param.flags = flags;
+
+  testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+  testset->nresults = n_threads_array_size;
+
+  run_test_create(testset->param.d, testset->param.trafo_adjoint, testset->param.N, testset->param.M, testset->param.sigma);
+  for (i = 0; i < n_threads_array_size; i++)
+  {
+    testset->results[i].nthreads = nthreads_array[i];
+    run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.flags, testset->results[i].nthreads = nthreads_array[i]);
+  }
+
+}
+
+void test1(int *nthreads_array, int n_threads_array_size, int m)
+{
+  s_testset testsets[15];
+
+  run_testset(&testsets[0], 1, 0, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[0]);
+#endif
+
+  run_testset(&testsets[1], 1, 0, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[1]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets, 2);
+
+  run_testset(&testsets[2], 1, 1, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[2]);
+#endif
+
+  run_testset(&testsets[3], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[3]);
+#endif
+
+  run_testset(&testsets[4], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[4]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+2, 3);
+
+  run_testset(&testsets[5], 2, 0, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[5]);
+#endif
+
+  run_testset(&testsets[6], 2, 0, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[6]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+5, 2);
+
+  run_testset(&testsets[7], 2, 1, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[7]);
+#endif
+
+  run_testset(&testsets[8], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[8]);
+#endif
+
+  run_testset(&testsets[9], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[9]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+7, 3);
+
+  run_testset(&testsets[10], 3, 0, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[10]);
+#endif
+
+  run_testset(&testsets[11], 3, 0, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[11]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+10, 2);
+
+  run_testset(&testsets[12], 3, 1, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[12]);
+#endif
+
+  run_testset(&testsets[13], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[13]);
+#endif
+
+  run_testset(&testsets[14], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[14]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+12, 3);
+
+}
+
+int main(int argc, char** argv)
+{
+  int *nthreads_array;
+  int n_threads_array_size = get_nthreads_array(&nthreads_array);
+  int k;
+
+#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
+  fprintf(stderr, "WARNING: Detailed time measurements for NFFT are not activated.\n");
+  fprintf(stderr, "For more detailed plots, please re-run the configure script with options\n");
+  fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-openmp\n");
+  fprintf(stderr, "and run \"make clean all\"\n\n");
+#endif
+
+  for (k = 0; k < n_threads_array_size; k++)
+    fprintf(stderr, "%d ", nthreads_array[k]);
+  fprintf(stderr, "\n");
+
+  file_out_tex = fopen("nfft_benchomp_results_plots.tex", "w");
+
+  test1(nthreads_array, n_threads_array_size, 2);
+  test1(nthreads_array, n_threads_array_size, 4);
+  test1(nthreads_array, n_threads_array_size, 6);
+
+  fclose(file_out_tex);
+
+  return 0;
+}
diff --git a/examples/nfft/nfft_benchomp_createdataset.c b/examples/nfft/nfft_benchomp_createdataset.c
new file mode 100644
index 0000000..8edc466
--- /dev/null
+++ b/examples/nfft/nfft_benchomp_createdataset.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "config.h"
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void nfft_benchomp_createdataset(unsigned int d, unsigned int trafo_adjoint, int *N, int M, double sigma)
+{
+  int n[d];
+  int t, j;
+  R *x;
+  C *f, *f_hat;
+  int N_total = 1;
+
+  for (t = 0; t < d; t++)
+    N_total *= N[t];
+
+  x = (R*) nfft_malloc(d*M*sizeof(R));
+  f = (C*) nfft_malloc(M*sizeof(C));
+  f_hat = (C*) nfft_malloc(N_total*sizeof(C));
+
+  for (t=0; t<d; t++)
+    n[t] = sigma*nfft_next_power_of_2(N[t]);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(x,d*M);
+ 
+  if (trafo_adjoint==0)
+  {
+    nfft_vrand_unit_complex(f_hat,N_total);
+  }
+  else
+  {
+    nfft_vrand_unit_complex(f,M);
+  }
+
+  printf("%d %d ", d, trafo_adjoint);
+
+  for (t=0; t<d; t++)
+    printf("%d ", N[t]);
+
+  for (t=0; t<d; t++)
+    printf("%d ", n[t]);
+
+  printf("%d\n", M);
+
+  for (j=0; j < M; j++)
+  {
+    for (t=0; t < d; t++)
+      printf("%.16e ", x[d*j+t]);
+    printf("\n");
+  }
+
+  if (trafo_adjoint==0)
+  {
+    for (j=0; j < N_total; j++)
+      printf("%.16e %.16e\n", creal(f_hat[j]), cimag(f_hat[j]));
+  }
+  else
+  {
+    for (j=0; j < M; j++)
+      printf("%.16e %.16e\n", creal(f[j]), cimag(f[j]));
+  }
+
+  nfft_free(x);
+  nfft_free(f);
+  nfft_free(f_hat);
+}
+
+int main(int argc, char **argv)
+{
+  int d;
+  int *N;
+  int M;
+  int t;
+  int trafo_adjoint;
+  double sigma;
+
+  if (argc < 6) {
+    fprintf(stderr, "usage: d tr_adj N_1 ... N_d M sigma\n");
+    return -1;
+  }
+
+  d = atoi(argv[1]);
+  
+  fprintf(stderr, "d=%d", d);
+
+  if (d < 1 || argc < 5+d) {
+    fprintf(stderr, "usage: d tr_adj N_1 ... N_d M sigma\n");
+    return -1;
+  }
+
+  N = malloc(d*sizeof(int));
+
+  trafo_adjoint = atoi(argv[2]);
+  if (trafo_adjoint < 0 && trafo_adjoint > 1)
+    trafo_adjoint = 1;
+
+  fprintf(stderr, ", tr_adj=%d, N=", trafo_adjoint);
+
+  for (t=0; t<d; t++)
+    N[t] = atoi(argv[3+t]);
+
+  for (t=0; t<d; t++)
+    fprintf(stderr, "%d ",N[t]);
+
+
+  M = atoi(argv[3+d]);
+  sigma = atof(argv[4+d]);
+
+  fprintf(stderr, ", M=%d, sigma=%.16g\n", M, sigma);
+
+  nfft_benchomp_createdataset(d, trafo_adjoint, N, M, sigma);
+
+  free(N);
+
+  return 0;
+}
diff --git a/examples/nfft/nfft_benchomp_detail.c b/examples/nfft/nfft_benchomp_detail.c
new file mode 100644
index 0000000..7818550
--- /dev/null
+++ b/examples/nfft/nfft_benchomp_detail.c
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+void bench_openmp(FILE *infile, int m, int psi_flag)
+{
+  nfft_plan p;
+  int *N;
+  int *n;
+  int M, d, trafo_adjoint;
+  int t, j;
+  double re,im;
+  ticks t0, t1;
+  double tt_total, tt_preonepsi;
+
+  fscanf(infile, "%d %d", &d, &trafo_adjoint);
+
+  N = malloc(d*sizeof(int));
+  n = malloc(d*sizeof(int));
+
+  for (t=0; t<d; t++)
+    fscanf(infile, "%d", N+t);
+
+  for (t=0; t<d; t++)
+    fscanf(infile, "%d", n+t);
+
+  fscanf(infile, "%d", &M);
+
+#ifdef _OPENMP
+  fftw_import_wisdom_from_filename("nfft_benchomp_detail_threads.plan");
+#else
+  fftw_import_wisdom_from_filename("nfft_benchomp_detail_single.plan");
+#endif
+
+  /** init an d-dimensional plan */
+  nfft_init_guru(&p, d, N, M, n, m,
+                   PRE_PHI_HUT| psi_flag | MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+                   FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+#ifdef _OPENMP
+  fftw_export_wisdom_to_filename("nfft_benchomp_detail_threads.plan");
+#else
+  fftw_export_wisdom_to_filename("nfft_benchomp_detail_single.plan");
+#endif
+
+  for (j=0; j < p.M_total; j++)
+  {
+    for (t=0; t < p.d; t++)
+      fscanf(infile, "%lg", p.x+p.d*j+t);
+  }
+
+  if (trafo_adjoint==0)
+  {
+    for (j=0; j < p.N_total; j++)
+    {
+      fscanf(infile, "%lg %lg", &re, &im);
+      p.f_hat[j] = re + _Complex_I * im;
+    }
+  }
+  else
+  {
+    for (j=0; j < p.M_total; j++)
+    {
+      fscanf(infile, "%lg %lg", &re, &im);
+      p.f[j] = re + _Complex_I * im;
+    }
+  }
+
+  t0 = getticks();
+  /** precompute psi, the entries of the matrix B */
+  if(p.nfft_flags & PRE_ONE_PSI)
+      nfft_precompute_one_psi(&p);
+  t1 = getticks();
+  tt_preonepsi = nfft_elapsed_seconds(t1,t0);
+
+  if (trafo_adjoint==0)
+    nfft_trafo(&p);
+  else
+    nfft_adjoint(&p);
+  t1 = getticks();
+  tt_total = nfft_elapsed_seconds(t1,t0);
+
+#ifndef MEASURE_TIME
+  p.MEASURE_TIME_t[0] = 0.0;
+  p.MEASURE_TIME_t[2] = 0.0;
+#endif
+
+#ifndef MEASURE_TIME_FFTW
+  p.MEASURE_TIME_t[1] = 0.0;
+#endif
+
+  printf("%.6e %.6e %6e %.6e %.6e %.6e\n", tt_preonepsi, p.MEASURE_TIME_t[0], p.MEASURE_TIME_t[1], p.MEASURE_TIME_t[2], tt_total-tt_preonepsi-p.MEASURE_TIME_t[0]-p.MEASURE_TIME_t[1]-p.MEASURE_TIME_t[2], tt_total);
+//  printf("%.6e\n", tt);
+
+  free(N);
+  free(n);
+
+  /** finalise the one dimensional plan */
+  nfft_finalize(&p);
+}
+
+int main(int argc, char **argv)
+{
+  int m, psi_flag;
+#ifdef _OPENMP
+  int nthreads;
+
+  if (argc != 4)
+    return 1;
+
+  nthreads = atoi(argv[3]);
+  fftw_init_threads();
+  omp_set_num_threads(nthreads);
+#else
+  if (argc != 3)
+    return 1;
+#endif
+
+  m = atoi(argv[1]);
+  psi_flag = atoi(argv[2]);
+
+  bench_openmp(stdin, m, psi_flag);
+
+  return 0;
+}
diff --git a/examples/nfft/nfft_times.c b/examples/nfft/nfft_times.c
new file mode 100644
index 0000000..18a1496
--- /dev/null
+++ b/examples/nfft/nfft_times.c
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft_times.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+int global_n;
+int global_d;
+
+static int comp1(const void *x,const void *y)
+{
+  return ((* (double*) x)<(* (double*) y)?-1:1);
+}
+
+static int comp2(const void *x,const void *y)
+{
+  int nx0,nx1,ny0,ny1;
+  nx0=global_n*(* ((double*)x+0));
+  nx1=global_n*(* ((double*)x+1));
+  ny0=global_n*(* ((double*)y+0));
+  ny1=global_n*(* ((double*)y+1));
+
+  if(nx0<ny0)
+    return -1;
+  else
+    if(nx0==ny0)
+      if(nx1<ny1)
+	return -1;
+      else
+	return 1;
+    else
+      return 1;
+}
+
+static int comp3(const void *x,const void *y)
+{
+  int nx0,nx1,nx2,ny0,ny1,ny2;
+  nx0=global_n*(* ((double*)x+0));
+  nx1=global_n*(* ((double*)x+1));
+  nx2=global_n*(* ((double*)x+2));
+  ny0=global_n*(* ((double*)y+0));
+  ny1=global_n*(* ((double*)y+1));
+  ny2=global_n*(* ((double*)y+2));
+
+  if(nx0<ny0)
+    return -1;
+  else
+    if(nx0==ny0)
+      if(nx1<ny1)
+	return -1;
+      else
+	if(nx1==ny1)
+	  if(nx2<ny2)
+	    return -1;
+	  else
+	    return 1;
+	else
+	  return 1;
+    else
+      return 1;
+}
+
+void measure_time_nfft(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("\\verb+%d+&\t",(int)(log(N)/log(2)*d+0.5));
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 2,
+		 PRE_PHI_HUT|
+		 PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  global_n=nn[0];
+  global_d=d;
+  switch(d)
+    {
+      case 1: { qsort(p.x,p.M_total,d*sizeof(double),comp1); break; }
+      case 2: { qsort(p.x,p.M_total,d*sizeof(double),comp2); break; }
+      case 3: { qsort(p.x,p.M_total,d*sizeof(double),comp3); break; }
+    }
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  //  printf("\\verb+%.1e+ & \\verb+(%.1f)+ &\t",t_fft,t_fft/(p.N_total*(log(N)/log(2)*d))*auxC);
+  printf("\\verb+%.1e+ &\t",t_fft);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      t_ndft=0;
+      r=0;
+      while(t_ndft<1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      //printf("\\verb+%.1e+ & \\verb+(%d)+&\t",t_ndft,(int)round(t_ndft/(p.N_total*p.N_total)*auxC));
+      printf("\\verb+%.1e+ &\t",t_ndft);
+    }
+  else
+    //    printf("\\verb+*+\t&\t&\t");
+    printf("\\verb+*+\t&\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<1)
+    {
+      r++;
+      t0 = getticks();
+      switch(d)
+	{
+	  case 1: { nfft_trafo_1d(&p); break; }
+	  case 2: { nfft_trafo_2d(&p); break; }
+	  case 3: { nfft_trafo_3d(&p); break; }
+          default: nfft_trafo(&p);
+	}
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+
+  //  printf("\\verb+%.1e+ & \\verb+(%d)+ & \\verb+(%.1e)+\\\\\n",t_nfft,(int)round(t_nfft/(p.N_total*(log(N)/log(2)*d))*auxC),t_nfft/t_fft);
+  printf("\\verb+%.1e+ & \\verb+(%3.1f)+\\\\\n",t_nfft,t_nfft/t_fft);
+
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+void measure_time_nfft_XXX2(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 2,
+		 PRE_PHI_HUT|
+		 PRE_PSI|
+		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  qsort(p.x,p.M_total,d*sizeof(double),comp1);
+  //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  printf("%.1e\t",t_fft);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f,swapndft);
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      printf("%.1e\t",t_ndft);
+      NFFT_SWAP_complex(p.f,swapndft);
+    }
+  else
+    printf("\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+  /** NFFT_1d */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo_1d(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+  printf("\n");
+
+  nfft_free(swapndft);
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+void measure_time_nfft_XXX3(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 2,
+		 PRE_PHI_HUT|
+		 PRE_PSI|
+		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_BACKWARD, FFTW_MEASURE);
+
+  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  qsort(p.x,p.M_total,d*sizeof(double),comp1);
+  //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random samples */
+  nfft_vrand_unit_complex(p.f, p.N_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  printf("%.1e\t",t_fft);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f_hat,swapndft);
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_adjoint_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      printf("%.1e\t",t_ndft);
+      NFFT_SWAP_complex(p.f_hat,swapndft);
+    }
+  else
+    printf("\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_adjoint(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+  /** NFFT_1d */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_adjoint_1d(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+  printf("\n");
+
+  nfft_free(swapndft);
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+
+
+
+void measure_time_nfft_XXX4(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 4,
+		 PRE_PHI_HUT|
+		 PRE_PSI|
+		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  //for(j=0;j<2*M;j+=2)
+  //   p.x[j]=0.5*p.x[j]+0.25*(p.x[j]>=0?1:-1);
+
+  //qsort(p.x,p.M_total,d*sizeof(double),comp1);
+  //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  printf("%.1e\t",t_fft);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f,swapndft);
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      printf("%.1e\t",t_ndft);
+
+      //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+      NFFT_SWAP_complex(p.f,swapndft);
+    }
+  else
+    printf("\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+  //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+  /** NFFT_2d */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo_2d(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+  //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+  printf("\n");
+
+  nfft_free(swapndft);
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+
+void measure_time_nfft_XXX5(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 4,
+		 PRE_PHI_HUT|
+		 PRE_PSI|
+		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
+
+  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  //sort_nodes(p.x,p.d,p.M_total,
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random samples */
+  nfft_vrand_unit_complex(p.f, p.M_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  printf("%.1e\t",t_fft);
+
+  /** init pseudo random samples */
+  nfft_vrand_unit_complex(p.f, p.M_total);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f_hat,swapndft);
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_adjoint_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      printf("%.1e\t",t_ndft);
+
+      //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+      NFFT_SWAP_complex(p.f_hat,swapndft);
+    }
+  else
+    printf("\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_adjoint(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+  //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+  /** NFFT_2d */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_adjoint_2d(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+  //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+  printf("\n");
+
+  nfft_free(swapndft);
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+
+void measure_time_nfft_XXX6(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 2,
+		 PRE_PHI_HUT|
+		 FG_PSI|
+		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  //qsort(p.x,p.M_total,d*sizeof(double),comp1);
+  //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  printf("%.1e\t",t_fft);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f,swapndft);
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      printf("%.1e\t",t_ndft);
+
+      //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+      NFFT_SWAP_complex(p.f,swapndft);
+    }
+  else
+    printf("\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+  //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+  /** NFFT_3d */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo_3d(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+  //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+  printf("\n");
+
+  nfft_free(swapndft);
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+
+void measure_time_nfft_XXX7(int d, int N, unsigned test_ndft)
+{
+  int r, M, NN[d], nn[d];
+  double t, t_fft, t_ndft, t_nfft;
+  ticks t0, t1;
+
+  nfft_plan p;
+  fftw_plan p_fft;
+
+  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+  for(r=0,M=1;r<d;r++)
+    {
+      M=N*M;
+      NN[r]=N;
+      nn[r]=2*N;
+    }
+
+  nfft_init_guru(&p, d, NN, M, nn, 2,
+		 PRE_PHI_HUT|
+		 FG_PSI|
+		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
+
+  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+  //sort_nodes(p.x,p.d,p.M_total,
+
+  nfft_precompute_one_psi(&p);
+
+  /** init pseudo random samples */
+  nfft_vrand_unit_complex(p.f, p.M_total);
+
+  /** FFT */
+  t_fft=0;
+  r=0;
+  while(t_fft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      fftw_execute(p_fft);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_fft+=t;
+    }
+  t_fft/=r;
+
+  printf("%.1e\t",t_fft);
+
+  /** init pseudo random samples */
+  nfft_vrand_unit_complex(p.f, p.M_total);
+
+  /** NDFT */
+  if(test_ndft)
+    {
+      NFFT_SWAP_complex(p.f_hat,swapndft);
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.1)
+        {
+          r++;
+          t0 = getticks();
+          nfft_adjoint_direct(&p);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+      printf("%.1e\t",t_ndft);
+
+      //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+      NFFT_SWAP_complex(p.f_hat,swapndft);
+    }
+  else
+    printf("\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_adjoint(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+  //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+  /** NFFT_3d */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_adjoint_3d(&p);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+  printf("%.1e\t",t_nfft);
+  if(test_ndft)
+    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+  //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+  printf("\n");
+
+  nfft_free(swapndft);
+  fftw_destroy_plan(p_fft);
+  nfft_finalize(&p);
+}
+
+int main2(void)
+{
+  int l,d,logIN;
+
+  for(l=3;l<=6;l++)
+    {
+      d=3;
+      logIN=d*l;
+      if(logIN<=15)
+	{
+	  measure_time_nfft_XXX6(d,(1U<< (logIN/d)),1);
+	  measure_time_nfft_XXX7(d,(1U<< (logIN/d)),1);
+	}
+      else
+	{
+	  measure_time_nfft_XXX6(d,(1U<< (logIN/d)),0);
+	  measure_time_nfft_XXX7(d,(1U<< (logIN/d)),0);
+	}
+    }
+
+  exit(-1);
+
+
+  for(l=7;l<=12;l++)
+    {
+      d=2;
+      logIN=d*l;
+      if(logIN<=15)
+	{
+	  measure_time_nfft_XXX4(d,(1U<< (logIN/d)),1);
+	  measure_time_nfft_XXX5(d,(1U<< (logIN/d)),1);
+	}
+      else
+	{
+	  measure_time_nfft_XXX4(d,(1U<< (logIN/d)),0);
+	  measure_time_nfft_XXX5(d,(1U<< (logIN/d)),0);
+	}
+    }
+
+  exit(-1);
+
+  for(l=3;l<=12;l++)
+    {
+      logIN=l;
+      if(logIN<=15)
+	{
+	  measure_time_nfft_XXX2(1,(1U<< (logIN)),1);
+	  measure_time_nfft_XXX3(1,(1U<< (logIN)),1);
+	}
+      else
+	{
+	  measure_time_nfft_XXX2(1,(1U<< (logIN)),0);
+	  measure_time_nfft_XXX3(1,(1U<< (logIN)),0);
+	}
+    }
+
+  exit(-1);
+}
+
+int main(void)
+{
+  int l,d,logIN;
+
+  printf("\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
+  printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=1$} \\\\ \\hline\n");
+  for(l=3;l<=22;l++)
+    {
+      d=1;
+      logIN=l;
+      if(logIN<=15)
+	measure_time_nfft(d,(1U<< (logIN/d)),1);
+      else
+	measure_time_nfft(d,(1U<< (logIN/d)),0);
+
+      fflush(stdout);
+    }
+
+  printf("\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
+  printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=2$} \\\\ \\hline\n");
+  for(l=3;l<=11;l++)
+    {
+      d=2;
+      logIN=d*l;
+      if(logIN<=15)
+	measure_time_nfft(d,(1U<< (logIN/d)),1);
+      else
+	measure_time_nfft(d,(1U<< (logIN/d)),0);
+
+      fflush(stdout);
+    }
+
+  printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=3$} \\\\ \\hline\n");
+  for(l=3;l<=7;l++)
+    {
+      d=3;
+      logIN=d*l;
+      if(logIN<=15)
+	measure_time_nfft(d,(1U<< (logIN/d)),1);
+      else
+	measure_time_nfft(d,(1U<< (logIN/d)),0);
+
+      fflush(stdout);
+    }
+
+  return 1;
+}
diff --git a/examples/nfft/simple_test.c b/examples/nfft/simple_test.c
new file mode 100644
index 0000000..90053a7
--- /dev/null
+++ b/examples/nfft/simple_test.c
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void simple_test_nfft_1d(void)
+{
+  nfft_plan p;
+  double t;
+
+  int N=14;
+  int M=19;
+  ticks t0, t1;
+
+  /** init an one dimensional plan */
+  nfft_init_1d(&p,N,M);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+ 
+  /** precompute psi, the entries of the matrix B */
+  if(p.nfft_flags & PRE_ONE_PSI)
+      nfft_precompute_one_psi(&p);
+
+  /** init pseudo random Fourier coefficients and show them */
+  nfft_vrand_unit_complex(p.f_hat,p.N_total);
+  nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+
+  /** direct trafo and show the result */
+  t0 = getticks();
+  nfft_trafo_direct(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");
+  printf(" took %e seconds.\n",t);
+
+  /** approx. trafo and show the result */
+  nfft_trafo(&p);
+  nfft_vpr_complex(p.f,p.M_total,"nfft, vector f");
+
+  /** approx. adjoint and show the result */
+  nfft_adjoint_direct(&p);
+  nfft_vpr_complex(p.f_hat,p.N_total,"adjoint ndft, vector f_hat");
+
+  /** approx. adjoint and show the result */
+  nfft_adjoint(&p);
+  nfft_vpr_complex(p.f_hat,p.N_total,"adjoint nfft, vector f_hat");
+
+  /** finalise the one dimensional plan */
+  nfft_finalize(&p);
+}
+
+static void simple_test_nfft_2d(void)
+{
+  int K,N[2],n[2],M;
+  double t;
+  ticks t0, t1;
+
+  nfft_plan p;
+
+  N[0]=32; n[0]=64;
+  N[1]=14; n[1]=32;
+  M=N[0]*N[1];
+  K=16;
+
+  t0 = getticks();
+  /** init a two dimensional plan */
+  nfft_init_guru(&p, 2, N, M, n, 7,
+		 PRE_PHI_HUT| PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x,p.d*p.M_total);
+
+  /** precompute psi, the entries of the matrix B */
+  if(p.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&p);
+
+  /** init pseudo random Fourier coefficients and show them */
+  nfft_vrand_unit_complex(p.f_hat,p.N_total);
+
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  nfft_vpr_complex(p.f_hat,K,
+              "given Fourier coefficients, vector f_hat (first few entries)");
+  printf(" ... initialisation took %e seconds.\n",t);
+
+  /** direct trafo and show the result */
+  t0 = getticks();
+  nfft_trafo_direct(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  nfft_vpr_complex(p.f,K,"ndft, vector f (first few entries)");
+  printf(" took %e seconds.\n",t);
+
+  /** approx. trafo and show the result */
+  t0 = getticks();
+  nfft_trafo(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  nfft_vpr_complex(p.f,K,"nfft, vector f (first few entries)");
+  printf(" took %e seconds.\n",t);
+
+  /** direct adjoint and show the result */
+  t0 = getticks();
+  nfft_adjoint_direct(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  nfft_vpr_complex(p.f_hat,K,"adjoint ndft, vector f_hat (first few entries)");
+  printf(" took %e seconds.\n",t);
+
+  /** approx. adjoint and show the result */
+  t0 = getticks();
+  nfft_adjoint(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  nfft_vpr_complex(p.f_hat,K,"adjoint nfft, vector f_hat (first few entries)");
+  printf(" took %e seconds.\n",t);
+
+  /** finalise the two dimensional plan */
+  nfft_finalize(&p);
+}
+
+int main(void)
+{
+  printf("1) computing a one dimensional ndft, nfft and an adjoint nfft\n\n");
+  simple_test_nfft_1d();
+
+  getc(stdin);
+
+  printf("2) computing a two dimensional ndft, nfft and an adjoint nfft\n\n");
+  simple_test_nfft_2d();
+
+  return 1;
+}
diff --git a/examples/nfft/simple_test_threads.c b/examples/nfft/simple_test_threads.c
new file mode 100644
index 0000000..3939db2
--- /dev/null
+++ b/examples/nfft/simple_test_threads.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3198 2009-05-27 14:16:50Z keiner $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <omp.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+//#include <time.h>
+
+int main(void)
+{
+  nfft_plan p;
+  const int N = 1000000;
+  const int M = 1000000;
+  ticks t0, t1;
+  double t;
+
+  printf("nthreads = %d\n", nfft_get_num_threads());
+
+  /* init */
+  fftw_init_threads();
+  nfft_init_1d(&p,N,M);
+
+  /* pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+  /* precompute psi, that is, the entries of the matrix B */
+  t0 = getticks();
+  if(p.nfft_flags & PRE_ONE_PSI)
+      nfft_precompute_one_psi(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  fprintf(stderr,"precompute elapsed time: %.3f seconds\n",t);
+
+  /* pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(p.f_hat,p.N_total);
+
+  /* transformation */
+  t0 = getticks();
+  nfft_trafo(&p);
+  t1 = getticks();
+  t = nfft_elapsed_seconds(t1,t0);
+  fprintf(stderr,"compute    elapsed time: %.3f seconds\n",t);
+  fflush(stderr);
+//  nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");
+
+  /* cleanup */
+  nfft_finalize(&p);
+  fftw_cleanup_threads();
+
+  return EXIT_SUCCESS;
+}
diff --git a/examples/nfft/taylor_nfft.c b/examples/nfft/taylor_nfft.c
new file mode 100644
index 0000000..4849982
--- /dev/null
+++ b/examples/nfft/taylor_nfft.c
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: taylor_nfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file taylor_nfft.c
+ *
+ * \brief Testing the nfft againt a Taylor expansion based version.
+ *
+ * \author Stefan Kunis
+ *
+ * References: Time and memory requirements of the Nonequispaced FFT
+ *
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+typedef struct
+{
+  nfft_plan p;                          /**< used for fftw and data          */
+
+  int *idx0;                            /**< index of next neighbour of x_j
+                                             on the oversampled regular grid */
+  double *deltax0;                      /**< distance to the grid point      */
+} taylor_plan;
+
+/**
+ * Initialisation of a transform plan.
+ *
+ * \arg ths The pointer to a taylor plan
+ * \arg N The multi bandwidth
+ * \arg M The number of nodes
+ * \arg n The fft length
+ * \arg m The order of the Taylor expansion
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_init(taylor_plan *ths, int N, int M, int n, int m)
+{
+  /* Note: no nfft precomputation! */
+  nfft_init_guru((nfft_plan*)ths, 1, &N, M, &n, m,
+                 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_ESTIMATE| FFTW_PRESERVE_INPUT);
+
+  ths->idx0=(int*)nfft_malloc(M*sizeof(int));
+  ths->deltax0=(double*)nfft_malloc(M*sizeof(double));
+}
+
+/**
+ * Precomputation of weights and indices in Taylor expansion.
+ *
+ * \arg ths The pointer to a taylor plan
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_precompute(taylor_plan *ths)
+{
+  int j;
+
+  nfft_plan* cths=(nfft_plan*)ths;
+
+  for(j=0;j<cths->M_total;j++)
+    {
+      ths->idx0[j] = ((int)round((cths->x[j]+0.5)*cths->n[0]) +
+                                 cths->n[0]/2)%cths->n[0];
+      ths->deltax0[j] = cths->x[j] - (round((cths->x[j]+0.5)*cths->n[0]) /
+                                      cths->n[0] - 0.5);
+    }
+}
+
+/**
+ * Destroys a transform plan.
+ *
+ * \arg ths The pointer to a taylor plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+static void taylor_finalize(taylor_plan *ths)
+{
+  nfft_free(ths->deltax0);
+  nfft_free(ths->idx0);
+
+  nfft_finalize((nfft_plan*)ths);
+}
+
+/**
+ * Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and
+ * approximate by means of a Taylor expansion
+ * for j=0,...,M-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])
+ *
+ * \arg ths The pointer to a taylor plan
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_trafo(taylor_plan *ths)
+{
+  int j,k,l,ll;
+  double _Complex *f, *f_hat, *g1;
+  double *deltax;
+  int *idx;
+
+  nfft_plan *cths=(nfft_plan*)ths;
+
+  for(j=0, f=cths->f; j<cths->M_total; j++)
+    *f++ = 0;
+
+  for(k=0; k<cths->n_total; k++)
+    cths->g1[k]=0;
+
+  for(k=-cths->N_total/2, g1=cths->g1+cths->n_total-cths->N_total/2,
+      f_hat=cths->f_hat; k<0; k++)
+    (*g1++)=cpow( - 2*PI*_Complex_I*k,cths->m)* (*f_hat++);
+
+  cths->g1[0]=cths->f_hat[cths->N_total/2];
+
+  for(k=1, g1=cths->g1+1, f_hat=cths->f_hat+cths->N_total/2+1;
+      k<cths->N_total/2; k++)
+    (*g1++)=cpow( - 2*PI*_Complex_I*k,cths->m)* (*f_hat++);
+
+  for(l=cths->m-1; l>=0; l--)
+    {
+      for(k=-cths->N_total/2, g1=cths->g1+cths->n_total-cths->N_total/2;
+          k<0; k++)
+        (*g1++) /= (-2*PI*_Complex_I*k);
+
+      for(k=1, g1=cths->g1+1; k<cths->N_total/2; k++)
+        (*g1++) /= (-2*PI*_Complex_I*k);
+
+      fftw_execute(cths->my_fftw_plan1);
+
+      ll=(l==0?1:l);
+      for(j=0, f=cths->f, deltax=ths->deltax0, idx=ths->idx0; j<cths->M_total;
+          j++, f++)
+	(*f) = ((*f) * (*deltax++) + cths->g2[*idx++]) /ll;
+    }
+}
+
+/**
+ * Compares NDFT, NFFT, and Taylor-NFFT
+ *
+ * \arg N The bandwidth
+ * \arg N The number of nodes
+ * \arg n The FFT-size for the NFFT
+ * \arg m The cut-off for window function
+ * \arg n_taylor The FFT-size for the Taylor-NFFT
+ * \arg m_taylor The order of the Taylor approximation
+ * \arg test_accuracy Flag for NDFT computation
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_time_accuracy(int N, int M, int n, int m, int n_taylor,
+                          int m_taylor, unsigned test_accuracy)
+{
+  int r;
+  double t_ndft, t_nfft, t_taylor, t;
+  double _Complex *swapndft = NULL;
+  ticks t0, t1;
+
+  taylor_plan tp;
+  nfft_plan np;
+
+  printf("%d\t%d\t",N, M);
+
+  taylor_init(&tp,N,M,n_taylor,m_taylor);
+
+  nfft_init_guru(&np, 1, &N, M, &n, m,
+                 PRE_PHI_HUT| PRE_FG_PSI|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
+
+  /** share nodes, input, and output vectors */
+  np.x=tp.p.x;
+  np.f_hat=tp.p.f_hat;
+  np.f=tp.p.f;
+
+  /** output vector ndft */
+  if(test_accuracy)
+    swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(np.x, np.M_total);
+
+  /** nfft precomputation */
+  taylor_precompute(&tp);
+
+  /** nfft precomputation */
+  if(np.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&np);
+
+  /** init pseudo random Fourier coefficients */
+  nfft_vrand_unit_complex(np.f_hat, np.N_total);
+
+  /** NDFT */
+  if(test_accuracy)
+    {
+      NFFT_SWAP_complex(np.f,swapndft);
+
+      t_ndft=0;
+      r=0;
+      while(t_ndft<0.01)
+        {
+          r++;
+          t0 = getticks();
+          nfft_trafo_direct(&np);
+          t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+          t_ndft+=t;
+        }
+      t_ndft/=r;
+
+      NFFT_SWAP_complex(np.f,swapndft);
+      printf("%.2e\t",t_ndft);
+    }
+  else
+    printf("nan\t\t");
+
+  /** NFFT */
+  t_nfft=0;
+  r=0;
+  while(t_nfft<0.01)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo(&np);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+  t_nfft/=r;
+
+  printf("%.2f\t%d\t%.2e\t",((double)n)/N, m, t_nfft);
+
+  if(test_accuracy)
+    printf("%.2e\t",X(error_l_infty_complex)(swapndft, np.f, np.M_total));
+  else
+    printf("nan\t\t");
+
+  /** TAYLOR NFFT */
+  t_taylor=0;
+  r=0;
+  while(t_taylor<0.01)
+    {
+      r++;
+      t0 = getticks();
+      taylor_trafo(&tp);
+      t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+      t_taylor+=t;
+    }
+  t_taylor/=r;
+
+
+  printf("%.2f\t%d\t%.2e\t",((double)n_taylor)/N,m_taylor,t_taylor);
+
+  if(test_accuracy)
+    printf("%.2e\n",X(error_l_infty_complex)(swapndft, np.f, np.M_total));
+  else
+    printf("nan\t\n");
+
+  fflush(stdout);
+
+  /** finalise */
+  if(test_accuracy)
+    nfft_free(swapndft);
+
+  nfft_finalize(&np);
+  taylor_finalize(&tp);
+}
+
+int main(int argc,char **argv)
+{
+  int l,m,trial,N;
+
+  if(argc<=2)
+    {
+      fprintf(stderr,"taylor_nfft type first last trials sigma_nfft sigma_taylor.\n");
+      return -1;
+    }
+
+  fprintf(stderr,"Testing the Nfft & a Taylor expansion based version.\n\n");
+  fprintf(stderr,"Columns: N, M, t_ndft, sigma_nfft, m_nfft, t_nfft, e_nfft");
+  fprintf(stderr,", sigma_taylor, m_taylor, t_taylor, e_taylor\n");
+
+  /* time vs. N=M */
+  if(atoi(argv[1])==0)
+    {
+      fprintf(stderr,"Fixed target accuracy, timings.\n\n");
+      for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+        for(trial=0; trial<atoi(argv[4]); trial++)
+          if(l<=10)
+            taylor_time_accuracy((1U<< l), (1U<< l), (int)(atof(argv[5])*
+                                 (1U<< l)), 6, (int)(atof(argv[6])*(1U<< l)),
+                                 6, 1);
+          else
+            taylor_time_accuracy((1U<< l), (1U<< l), (int)(atof(argv[5])*
+                                 (1U<< l)), 6, (int)(atof(argv[6])*(1U<< l)),
+                                 6, 0);
+    }
+
+  /* error vs. m */
+  if(atoi(argv[1])==1)
+    {
+      N=atoi(argv[7]);
+      fprintf(stderr,"Fixed N=M=%d, error vs. m.\n\n",N);
+      for(m=atoi(argv[2]); m<=atoi(argv[3]); m++)
+        for(trial=0; trial<atoi(argv[4]); trial++)
+          taylor_time_accuracy(N,N, (int)(atof(argv[5])*N), m,
+                                    (int)(atof(argv[6])*N), m, 1);
+    }
+
+  return 1;
+}
diff --git a/examples/nfft/taylor_nfft.m b/examples/nfft/taylor_nfft.m
new file mode 100644
index 0000000..266a1f0
--- /dev/null
+++ b/examples/nfft/taylor_nfft.m
@@ -0,0 +1,140 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: taylor_nfft.m 3776 2012-06-03 13:29:25Z keiner $
+%% File: taylor_nfft.m
+%%
+%% Testing the nfft againt a Taylor expansion based version.
+%%
+%% Author Stefan Kunis
+%%
+%% References: Time and memory requirements of the Nonequispaced FFT
+%%
+%% Calls repeatedly the executable taylor_nfft.
+
+to_pdf=0;
+
+%%
+%% Testing time vs. problem size.
+%%
+trials=10;
+first=4;
+last=22;
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data0',0,first,last,trials,2,4));
+data=load('taylor_nfft.data0');
+
+N=data(1:trials:end,1);
+t_nfft=(mean(reshape(data(:,6),trials,last-first+1)))';
+t_taylor=(mean(reshape(data(:,10),trials,last-first+1)))';
+
+h=loglog(N,t_taylor,'k',...
+         N,t_nfft,'k--',...
+         N,10^-7*N.*log(N),'k:');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-6,10^-4,10^-2,1,10^2]);
+set(gca,'XTick',[10^2,10^3,10^4,10^5,10^6]);
+set(gca,'FontSize',20);
+axis([N(1),N(end),10^-6,10^2]);
+
+print temp.eps -deps
+if(to_pdf)
+  !ps2pdf temp.eps taylor_nfft0.pdf 
+  !rm temp.eps
+else
+  !mv temp.eps taylor_nfft0.eps
+end;
+
+return
+%%
+%% Testing accuracy vs. cut-off/Taylor degree m.
+%%
+trials=10;
+first=1;
+last=20;
+sigma_nfft_a=2;
+sigma_taylor_a=2;
+sigma_nfft_b=1.5;
+sigma_taylor_b=1.5;
+sigma_nfft_c=16;
+sigma_taylor_c=16;
+
+% typical sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data1a',1,first,...
+	       last,trials,sigma_nfft_a,sigma_taylor_a));
+data=load('taylor_nfft.data1a');
+
+m_nfft=data(1:trials:end,5);
+e_nfft_a=(max(reshape(data(:,7),trials,last-first+1)))';
+t_nfft_a=(mean(reshape(data(:,6),trials,last-first+1)))';
+
+m_taylor=data(1:trials:end,9);
+e_taylor_a=(max(reshape(data(:,11),trials,last-first+1)))';
+t_taylor_a=(mean(reshape(data(:,10),trials,last-first+1)))';
+
+% small sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data1b',1,first,...
+	       last,trials,sigma_nfft_b,sigma_taylor_b));
+data=load('taylor_nfft.data1b');
+
+e_nfft_b=(max(reshape(data1(:,7),trials,last-first+1)))';
+e_taylor_b=(max(reshape(data1(:,11),trials,last-first+1)))';
+
+% large sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data1c',1,first,...
+	       last,trials,sigma_nfft_c,sigma_taylor_c));
+data=load('taylor_nfft.data1c');
+
+e_nfft_c=(max(reshape(data2(:,7),trials,last-first+1)))';
+e_taylor_c=(max(reshape(data2(:,11),trials,last-first+1)))';
+
+h=semilogy(m_taylor,e_taylor_a,'kd',...
+	   m_nfft,e_nfft_a,'kx',...
+	   m_taylor,e_taylor_b,'k',...
+	   m_nfft,e_nfft_b,'k--',...
+	   m_taylor,e_taylor,'k-.',...
+	   m_nfft,e_nfft,'k:');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([m(1),m(end),10^-13,10^-1]);
+
+print temp.eps -deps
+if(to_pdf)
+  !ps2pdf temp.eps taylor_nfft1.pdf 
+  !rm temp.eps
+else
+  !mv temp.eps taylor_nfft1.eps
+end;
+
+%%
+%% Testing accuracy vs. time.
+%%
+
+
+h=semilogy(avg_t_taylor,max_e_taylor,'ko',...
+           avg_t_nfft,max_e_nfft,'kx');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6); 
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([min([t_nfft;t_taylor]),max([t_nfft;t_taylor]),10^-16,1]);
+
+print temp.eps -deps
+if(to_pdf)
+  !ps2pdf temp.eps taylor_nfft3.pdf 
+  !rm temp.eps
+else
+  !mv temp.eps taylor_nfft3.eps
+end;
diff --git a/examples/nfsft/Makefile.am b/examples/nfsft/Makefile.am
new file mode 100644
index 0000000..152e0fe
--- /dev/null
+++ b/examples/nfsft/Makefile.am
@@ -0,0 +1,53 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+  SIMPLE_TEST_THREADS=simple_test_threads
+else
+  SIMPLE_TEST_THREADS=
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  NFSFT_BENCHOMP_PROGS=nfsft_benchomp nfsft_benchomp_createdataset nfsft_benchomp_detail_single nfsft_benchomp_detail_threads
+else
+  NFSFT_BENCHOMP_PROGS=
+endif
+else
+  NFSFT_BENCHOMP_PROGS=
+endif
+
+## The program name
+noinst_PROGRAMS = simple_test $(SIMPLE_TEST_THREADS) $(NFSFT_BENCHOMP_PROGS)
+
+## The source files.
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+if HAVE_THREADS
+  simple_test_threads_SOURCES = simple_test_threads.c
+  simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+if HAVE_OPENMP
+  simple_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  nfsft_benchomp_SOURCES = nfsft_benchomp.c
+  nfsft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  nfsft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+
+  nfsft_benchomp_createdataset_SOURCES = nfsft_benchomp_createdataset.c
+  nfsft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+  nfsft_benchomp_detail_single_SOURCES = nfsft_benchomp_detail.c
+  nfsft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+  nfsft_benchomp_detail_threads_SOURCES = nfsft_benchomp_detail.c
+  nfsft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  nfsft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/examples/nfsft/Makefile.in b/examples/nfsft/Makefile.in
new file mode 100644
index 0000000..b1f3636
--- /dev/null
+++ b/examples/nfsft/Makefile.in
@@ -0,0 +1,686 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2)
+subdir = examples/nfsft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAVE_THREADS_TRUE@am__EXEEXT_1 = simple_test_threads$(EXEEXT)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 =  \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp_createdataset$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp_detail_single$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp_detail_threads$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am__nfsft_benchomp_SOURCES_DIST = nfsft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_OBJECTS = nfsft_benchomp-nfsft_benchomp.$(OBJEXT)
+nfsft_benchomp_OBJECTS = $(am_nfsft_benchomp_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfsft_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(nfsft_benchomp_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__nfsft_benchomp_createdataset_SOURCES_DIST =  \
+	nfsft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_createdataset_OBJECTS = nfsft_benchomp_createdataset.$(OBJEXT)
+nfsft_benchomp_createdataset_OBJECTS =  \
+	$(am_nfsft_benchomp_createdataset_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfsft_benchomp_detail_single_SOURCES_DIST =  \
+	nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_detail_single_OBJECTS = nfsft_benchomp_detail.$(OBJEXT)
+nfsft_benchomp_detail_single_OBJECTS =  \
+	$(am_nfsft_benchomp_detail_single_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfsft_benchomp_detail_threads_SOURCES_DIST =  \
+	nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_detail_threads_OBJECTS = nfsft_benchomp_detail_threads-nfsft_benchomp_detail.$(OBJEXT)
+nfsft_benchomp_detail_threads_OBJECTS =  \
+	$(am_nfsft_benchomp_detail_threads_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfsft_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__simple_test_threads_SOURCES_DIST = simple_test_threads.c
+ at HAVE_THREADS_TRUE@am_simple_test_threads_OBJECTS = simple_test_threads-simple_test_threads.$(OBJEXT)
+simple_test_threads_OBJECTS = $(am_simple_test_threads_OBJECTS)
+ at HAVE_THREADS_TRUE@simple_test_threads_DEPENDENCIES =  \
+ at HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
+simple_test_threads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(simple_test_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(nfsft_benchomp_SOURCES) \
+	$(nfsft_benchomp_createdataset_SOURCES) \
+	$(nfsft_benchomp_detail_single_SOURCES) \
+	$(nfsft_benchomp_detail_threads_SOURCES) \
+	$(simple_test_SOURCES) $(simple_test_threads_SOURCES)
+DIST_SOURCES = $(am__nfsft_benchomp_SOURCES_DIST) \
+	$(am__nfsft_benchomp_createdataset_SOURCES_DIST) \
+	$(am__nfsft_benchomp_detail_single_SOURCES_DIST) \
+	$(am__nfsft_benchomp_detail_threads_SOURCES_DIST) \
+	$(simple_test_SOURCES) $(am__simple_test_threads_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@SIMPLE_TEST_THREADS = 
+ at HAVE_THREADS_TRUE@SIMPLE_TEST_THREADS = simple_test_threads
+ at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at NFSFT_BENCHOMP_PROGS = 
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at NFSFT_BENCHOMP_PROGS = nfsft_benchomp nfsft_benchomp_createdataset nfsft_benchomp_detail_single nfsft_benchomp_detail_threads
+ at HAVE_THREADS_FALSE@NFSFT_BENCHOMP_PROGS = 
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_THREADS_TRUE@simple_test_threads_SOURCES = simple_test_threads.c
+ at HAVE_THREADS_TRUE@simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at simple_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_SOURCES = nfsft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_SOURCES = nfsft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_SOURCES = nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_SOURCES = nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfsft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nfsft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+nfsft_benchomp$(EXEEXT): $(nfsft_benchomp_OBJECTS) $(nfsft_benchomp_DEPENDENCIES) $(EXTRA_nfsft_benchomp_DEPENDENCIES) 
+	@rm -f nfsft_benchomp$(EXEEXT)
+	$(nfsft_benchomp_LINK) $(nfsft_benchomp_OBJECTS) $(nfsft_benchomp_LDADD) $(LIBS)
+nfsft_benchomp_createdataset$(EXEEXT): $(nfsft_benchomp_createdataset_OBJECTS) $(nfsft_benchomp_createdataset_DEPENDENCIES) $(EXTRA_nfsft_benchomp_createdataset_DEPENDENCIES) 
+	@rm -f nfsft_benchomp_createdataset$(EXEEXT)
+	$(LINK) $(nfsft_benchomp_createdataset_OBJECTS) $(nfsft_benchomp_createdataset_LDADD) $(LIBS)
+nfsft_benchomp_detail_single$(EXEEXT): $(nfsft_benchomp_detail_single_OBJECTS) $(nfsft_benchomp_detail_single_DEPENDENCIES) $(EXTRA_nfsft_benchomp_detail_single_DEPENDENCIES) 
+	@rm -f nfsft_benchomp_detail_single$(EXEEXT)
+	$(LINK) $(nfsft_benchomp_detail_single_OBJECTS) $(nfsft_benchomp_detail_single_LDADD) $(LIBS)
+nfsft_benchomp_detail_threads$(EXEEXT): $(nfsft_benchomp_detail_threads_OBJECTS) $(nfsft_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_nfsft_benchomp_detail_threads_DEPENDENCIES) 
+	@rm -f nfsft_benchomp_detail_threads$(EXEEXT)
+	$(nfsft_benchomp_detail_threads_LINK) $(nfsft_benchomp_detail_threads_OBJECTS) $(nfsft_benchomp_detail_threads_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+simple_test_threads$(EXEEXT): $(simple_test_threads_OBJECTS) $(simple_test_threads_DEPENDENCIES) $(EXTRA_simple_test_threads_DEPENDENCIES) 
+	@rm -f simple_test_threads$(EXEEXT)
+	$(simple_test_threads_LINK) $(simple_test_threads_OBJECTS) $(simple_test_threads_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_createdataset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test_threads-simple_test_threads.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+nfsft_benchomp-nfsft_benchomp.o: nfsft_benchomp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -MT nfsft_benchomp-nfsft_benchomp.o -MD -MP -MF $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo -c -o nfsft_benchomp-nfsft_benchomp.o `test -f 'nfsft_benchomp.c' || echo '$(srcdir)/'`nfsft_benchomp.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp.c' object='nfsft_benchomp-nfsft_benchomp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp-nfsft_benchomp.o `test -f 'nfsft_benchomp.c' || echo '$(srcdir)/'`nfsft_benchomp.c
+
+nfsft_benchomp-nfsft_benchomp.obj: nfsft_benchomp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -MT nfsft_benchomp-nfsft_benchomp.obj -MD -MP -MF $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo -c -o nfsft_benchomp-nfsft_benchomp.obj `if test -f 'nfsft_benchomp.c'; then $(CYGPATH_W) 'nfsft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp.c' object='nfsft_benchomp-nfsft_benchomp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp-nfsft_benchomp.obj `if test -f 'nfsft_benchomp.c'; then $(CYGPATH_W) 'nfsft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp.c'; fi`
+
+nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o: nfsft_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o -MD -MP -MF $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o `test -f 'nfsft_benchomp_detail.c' || echo '$(srcdir)/'`nfsft_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp_detail.c' object='nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o `test -f 'nfsft_benchomp_detail.c' || echo '$(srcdir)/'`nfsft_benchomp_detail.c
+
+nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj: nfsft_benchomp_detail.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj `if test -f 'nfsft_benchomp_detail.c'; then $(CYGPATH_W) 'nfsft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp_detail.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp_detail.c' object='nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj `if test -f 'nfsft_benchomp_detail.c'; then $(CYGPATH_W) 'nfsft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp_detail.c'; fi`
+
+simple_test_threads-simple_test_threads.o: simple_test_threads.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -MT simple_test_threads-simple_test_threads.o -MD -MP -MF $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo -c -o simple_test_threads-simple_test_threads.o `test -f 'simple_test_threads.c' || echo '$(srcdir)/'`simple_test_threads.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo $(DEPDIR)/simple_test_threads-simple_test_threads.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='simple_test_threads.c' object='simple_test_threads-simple_test_threads.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -c -o simple_test_threads-simple_test_threads.o `test -f 'simple_test_threads.c' || echo '$(srcdir)/'`simple_test_threads.c
+
+simple_test_threads-simple_test_threads.obj: simple_test_threads.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -MT simple_test_threads-simple_test_threads.obj -MD -MP -MF $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo -c -o simple_test_threads-simple_test_threads.obj `if test -f 'simple_test_threads.c'; then $(CYGPATH_W) 'simple_test_threads.c'; else $(CYGPATH_W) '$(srcdir)/simple_test_threads.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo $(DEPDIR)/simple_test_threads-simple_test_threads.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='simple_test_threads.c' object='simple_test_threads-simple_test_threads.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -c -o simple_test_threads-simple_test_threads.obj `if test -f 'simple_test_threads.c'; then $(CYGPATH_W) 'simple_test_threads.c'; else $(CYGPATH_W) '$(srcdir)/simple_test_threads.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfsft/nfsft_benchomp.c b/examples/nfsft/nfsft_benchomp.c
new file mode 100644
index 0000000..abb3408
--- /dev/null
+++ b/examples/nfsft/nfsft_benchomp.c
@@ -0,0 +1,517 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include <nfft3.h>
+#include <nfft3util.h>
+
+#define NREPEAT 5
+
+static FILE* file_out_tex = NULL;
+
+int get_nthreads_array(int **arr)
+{
+  int max_threads = nfft_get_omp_num_threads();
+  int alloc_num = 2;
+  int k;
+  int ret_number = 0;
+  int max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;
+
+  if (max_threads <= 5)
+  {
+    *arr = (int*) malloc(max_threads*sizeof(int));
+    for (k = 0; k < max_threads; k++)
+      *(*arr + k) = k+1;
+    return max_threads;
+  }
+
+  for (k = 1; k <= max_threads; k*=2, alloc_num++);
+
+  *arr = (int*) malloc(alloc_num*sizeof(int));
+
+  for (k = 1; k <= max_threads; k*=2)
+  {
+    if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+    {
+      *(*arr + ret_number) = max_threads/2;
+      ret_number++;
+    }
+
+    *(*arr + ret_number) = k;
+    ret_number++;
+
+    if (k != max_threads && 2*k > max_threads)
+    {
+      *(*arr + ret_number) = max_threads;
+      ret_number++;
+      break;
+    }
+  }
+
+  return ret_number;
+} 
+  
+
+void check_result_value(const int val, const int ok, const char *msg)
+{
+  if (val != ok)
+  {
+    fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
+
+    exit(1);
+  }
+}
+
+void run_test_create(int trafo_adjoint, int N, int M)
+{
+  char cmd[1025];
+
+  snprintf(cmd, 1024, "./nfsft_benchomp_createdataset %d %d %d > nfsft_benchomp_test.data", trafo_adjoint, N, M);
+  fprintf(stderr, "%s\n", cmd);
+  check_result_value(system(cmd), 0, "createdataset");
+}
+
+void run_test_init_output()
+{
+  FILE *f = fopen("nfsft_benchomp_test.result", "w");
+  if (f!= NULL)
+    fclose(f);
+}
+
+typedef struct
+{
+  int trafo_adjoint;
+  int N;
+  int M;
+  int m;
+  int nfsft_flags;
+  int psi_flags;
+} s_param;
+
+typedef struct
+{
+  double avg;
+  double min;
+  double max;
+} s_resval;
+
+typedef struct
+{
+  int nthreads;
+  s_resval resval[6];
+} s_result;
+
+typedef struct
+{
+  s_param param;
+  s_result *results;
+  int nresults;
+} s_testset;
+
+void run_test(s_resval *res, int nrepeat, int m, int nfsft_flags, int psi_flags, int nthreads)
+{
+  FILE *f;
+  char cmd[1025];
+  int r,t;
+  
+  for (t = 0; t < 6; t++)
+  {
+    res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+  }
+
+  if (nthreads < 2)
+    snprintf(cmd, 1024, "./nfsft_benchomp_detail_single %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out", m, nfsft_flags, psi_flags, nrepeat);
+  else
+    snprintf(cmd, 1024, "./nfsft_benchomp_detail_threads %d %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out", m, nfsft_flags, psi_flags, nrepeat, nthreads);
+  fprintf(stderr, "%s\n", cmd);
+
+  check_result_value(system(cmd), 0, cmd);
+
+  f = fopen("nfsft_benchomp_test.out", "r");
+  for (r = 0; r < nrepeat; r++)
+  {
+    int retval;
+    double v[6];
+//    FILE *f;
+//    check_result_value(system(cmd), 0, cmd);
+//    f = fopen("nfsft_benchomp_test.out", "r");
+    retval = fscanf(f, "%lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5);
+    check_result_value(retval, 6, "read nfsft_benchomp_test.out");
+//    fclose(f);
+//    fprintf(stderr, "%.3e %.3e %.3e %.3e %.3e %.3e\n", v[0], v[1], v[2], v[3], v[4], v[5]);
+    for (t = 0; t < 6; t++)
+    {
+      res[t].avg += v[t];
+      if (res[t].min > v[t])
+        res[t].min = v[t];
+      if (res[t].max < v[t])
+        res[t].max = v[t];
+    }
+  }
+  fclose(f);
+
+  for (t = 0; t < 6; t++)
+    res[t].avg /= nrepeat;
+
+  fprintf(stderr, "%d %d: ", nthreads, nrepeat);
+  for (t = 0; t < 6; t++)
+    fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+  fprintf(stderr, "\n");
+}
+
+const char *get_psi_string(int flags)
+{
+  if (flags & PRE_PSI)
+    return "prepsi";
+  else if (flags & PRE_ONE_PSI)
+    return "unknownPSI";
+
+  return "nopsi";
+}
+const char *get_sort_string(int flags)
+{
+  if (flags & NFFT_SORT_NODES)
+    return "sorted";
+
+    return "unsorted";
+}
+
+const char *get_adjoint_omp_string(int flags)
+{
+  if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    return "blockwise";
+
+    return "";
+}
+
+#define MASK_TA (1U<<1)
+#define MASK_N (1U<<2)
+#define MASK_M (1U<<4)
+#define MASK_WINM (1U<<5)
+#define MASK_FLAGS_PSI (1U<<6)
+#define MASK_FLAGS_SORT (1U<<7)
+#define MASK_FLAGS_BW (1U<<8)
+#define MASK_FLAGS_FPT (1U<<9)
+
+unsigned int determine_different_parameters(s_testset *testsets, int ntestsets)
+{
+  int t;
+  unsigned int mask = 0;
+
+  if (ntestsets < 2)
+    return 0;
+
+  for (t = 1; t < ntestsets; t++)
+  {
+    if (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)
+      mask |= MASK_TA;
+    if (testsets[t-1].param.N != testsets[t].param.N)
+      mask |= MASK_N;
+    if (testsets[t-1].param.M != testsets[t].param.M)
+      mask |= MASK_M;
+    if (testsets[t-1].param.m != testsets[t].param.m)
+      mask |= MASK_WINM;
+    if ((testsets[t-1].param.psi_flags & PRE_ONE_PSI) != (testsets[t].param.psi_flags & PRE_ONE_PSI))
+      mask |= MASK_FLAGS_PSI;
+    if ((testsets[t-1].param.psi_flags & NFFT_SORT_NODES) != (testsets[t].param.psi_flags & NFFT_SORT_NODES))
+      mask |= MASK_FLAGS_SORT;
+    if ((testsets[t-1].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT))
+      mask |= MASK_FLAGS_BW;
+    if ((testsets[t-1].param.nfsft_flags & NFSFT_USE_DPT) != (testsets[t].param.nfsft_flags & NFSFT_USE_DPT))
+      mask |= MASK_FLAGS_FPT;
+  }
+
+  return mask;
+}
+
+void get_plot_title(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+{
+  unsigned int mask = ~diff_mask;
+  int offset = 0;
+  int len;
+
+  len = snprintf(outstr, maxlen, "%s", hostname);
+  if (len < 0 || len+offset >= maxlen-1) return;
+  offset += len;
+
+  if (mask & MASK_TA)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " $\\mathrm{NFSFT}%s$", param.trafo_adjoint==0?"":"^\\top");
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_N)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " N=%d", param.N);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_M)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_WINM)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FLAGS_PSI)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %s", get_psi_string(param.psi_flags));
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FLAGS_SORT)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %s", get_sort_string(param.psi_flags));
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.psi_flags)) > 0)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, " %s", get_adjoint_omp_string(param.psi_flags));
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+  if (mask & MASK_FLAGS_FPT)
+  {
+    len = snprintf(outstr+offset, maxlen-offset, param.nfsft_flags & NFSFT_USE_DPT ? " DPT" : "");
+    if (len < 0 || len+offset >= maxlen-1) return;
+    offset += len;
+  }
+
+}
+
+void print_output_speedup_total_tref(FILE *out, s_testset *testsets, int ntestsets, int use_tref, double tref)
+{
+  int i, t;
+  char hostname[1025];
+  char plottitle[1025];
+  unsigned int diff_mask = determine_different_parameters(testsets, ntestsets);
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+  fprintf(out, " title={%s}", plottitle);
+  fprintf(out, " ]\n");
+
+  for (t = 0; t < ntestsets; t++)
+  {
+    s_testset testset = testsets[t];
+    fprintf(stderr, "%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}", hostname, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_string(testset.param.psi_flags));
+    fprintf(stderr, "\n");
+
+    fprintf(out, "\\addplot coordinates {");
+    for (i = 0; i < testset.nresults; i++)
+      if (use_tref == 1)
+        fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+      else
+        fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);
+    fprintf(out, "};\n");
+
+    for (i = 0; i < testset.nresults; i++)
+      if (use_tref == 1)
+        fprintf(stderr, "%d:%.3f  ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+      else
+        fprintf(stderr, "%d:%.3f  ", testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);
+    fprintf(stderr, "\n\n");
+  }
+
+  fprintf(out, "\\legend{{");
+  for (t = 0; t < ntestsets; t++)
+  {
+    char title[256];
+    if (t > 0)
+      fprintf(out, "},{");
+    get_plot_title(title, 255, "", testsets[t].param, ~(diff_mask));
+    fprintf(out, "%s", title);
+  }
+  fprintf(out, "}}\n");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void print_output_speedup_total(FILE *out, s_testset *testsets, int ntestsets, int use_tref)
+{
+  double tref = 1.0/0.0;
+  int t, k;
+
+  if (use_tref == 1)
+    for (t = 0; t < ntestsets; t++)
+      for (k = 0; k < testsets[t].nresults; k++)
+        if (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)
+          tref = testsets[t].results[k].resval[5].avg;
+
+  print_output_speedup_total_tref(out, testsets, ntestsets, use_tref, tref);
+}
+
+void print_output_histo_PENRT(FILE *out, s_testset testset)
+{
+  int i, size = testset.nresults;
+  char hostname[1025];
+
+  if (gethostname(hostname, 1024) != 0)
+    strncpy(hostname, "unnamed", 1024);
+
+  fprintf(out, "\\begin{tikzpicture}\n");
+  fprintf(out, "\\begin{axis}[");
+  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+  fprintf(out, "symbolic x coords={");
+  for (i = 0; i < size; i++)
+    if (i > 0)
+      fprintf(out, ",%d", testset.results[i].nthreads);
+    else
+      fprintf(out, "%d", testset.results[i].nthreads);
+
+  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out, " title={%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}", hostname, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_string(testset.param.psi_flags));
+  fprintf(out, " ]\n");
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);
+  fprintf(out, "};\n");
+
+  fprintf(out, "\\addplot coordinates {");
+  for (i = 0; i < size; i++)
+    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[5].avg);
+  fprintf(out, "};\n");
+  fprintf(out, "\\legend{%s,%s,$\\mathrm{NFFT}%s$,rest,total}\n", testset.param.nfsft_flags & NFSFT_USE_DPT ? "DPT" : "FPT", testset.param.trafo_adjoint==0?"c2e":"$\\mathrm{c2e}^\\top$", testset.param.trafo_adjoint==0?"":"^\\top");
+  fprintf(out, "\\end{axis}\n");
+  fprintf(out, "\\end{tikzpicture}\n");
+  fprintf(out, "\n\n");
+
+  fflush(out);
+}
+
+void run_testset(s_testset *testset, int trafo_adjoint, int N, int M, int m, int nfsft_flags, int psi_flags, int *nthreads_array, int n_threads_array_size)
+{
+  int i;
+  testset->param.trafo_adjoint = trafo_adjoint;
+  testset->param.N = N;
+  testset->param.M = M;
+  testset->param.m = m;
+  testset->param.nfsft_flags = nfsft_flags;
+  testset->param.psi_flags = psi_flags;
+
+  testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+  testset->nresults = n_threads_array_size;
+
+  run_test_create(testset->param.trafo_adjoint, testset->param.N, testset->param.M);
+  for (i = 0; i < n_threads_array_size; i++)
+  {
+    testset->results[i].nthreads = nthreads_array[i];
+    run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.nfsft_flags, testset->param.psi_flags, testset->results[i].nthreads = nthreads_array[i]);
+  }
+
+}
+
+void test1(int *nthreads_array, int n_threads_array_size, int m)
+{
+  s_testset testsets[4];
+
+  run_testset(&testsets[0], 0, 1024, 1000000, m, 0, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_PENRT(file_out_tex, testsets[0]);
+#endif
+
+  run_testset(&testsets[1], 1, 1024, 1000000, m, 0, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_PENRT(file_out_tex, testsets[1]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets, 2, 0);
+
+  run_testset(&testsets[2], 0, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_PENRT(file_out_tex, testsets[2]);
+#endif
+
+  run_testset(&testsets[3], 1, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_PENRT(file_out_tex, testsets[3]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+2, 2, 0);
+}
+
+int main(int argc, char** argv)
+{
+  int *nthreads_array;
+  int n_threads_array_size = get_nthreads_array(&nthreads_array);
+  int k;
+
+#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
+  fprintf(stderr, "WARNING: Detailed time measurements for NFSFT are not activated.\n");
+  fprintf(stderr, "For more detailed plots, please re-run the configure script with options\n");
+  fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-nfsft --enable-openmp\n");
+  fprintf(stderr, "and run \"make clean all\"\n\n");
+#endif
+
+  for (k = 0; k < n_threads_array_size; k++)
+    fprintf(stderr, "%d ", nthreads_array[k]);
+  fprintf(stderr, "\n");
+
+  file_out_tex = fopen("nfsft_benchomp_results_plots.tex", "w");
+
+  test1(nthreads_array, n_threads_array_size, 2);
+  test1(nthreads_array, n_threads_array_size, 4);
+  test1(nthreads_array, n_threads_array_size, 6);
+  test1(nthreads_array, n_threads_array_size, 8);
+
+  fclose(file_out_tex);
+
+  return 0;
+}
diff --git a/examples/nfsft/nfsft_benchomp_createdataset.c b/examples/nfsft/nfsft_benchomp_createdataset.c
new file mode 100644
index 0000000..72f7643
--- /dev/null
+++ b/examples/nfsft/nfsft_benchomp_createdataset.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "config.h"
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void nfsft_benchomp_createdataset(unsigned int trafo_adjoint, int N, int M)
+{
+  int t, j, k, n;
+  R *x;
+  C *f, *f_hat;
+  int N_total = (2*N+2) * (2*N+2);
+  nfsft_plan ptemp;
+
+  nfsft_init_guru(&ptemp, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+    NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+    PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+  x = (R*) nfft_malloc(2*M*sizeof(R));
+  f = (C*) nfft_malloc(M*sizeof(C));
+  f_hat = (C*) nfft_malloc(N_total*sizeof(C));
+
+  /* init pseudo-random nodes */
+  for (j = 0; j < M; j++)
+  {
+    x[2*j]= nfft_drand48() - K(0.5);
+    x[2*j+1]= K(0.5) * nfft_drand48();
+  }
+ 
+  if (trafo_adjoint==0)
+  {
+    for (k = 0; k <= N; k++)
+      for (n = -k; n <= k; n++)
+        nfft_vrand_unit_complex(f_hat+NFSFT_INDEX(k,n,&ptemp),1);
+  }
+  else
+  {
+    nfft_vrand_unit_complex(f,M);
+  }
+
+  printf("%d %d %d\n", trafo_adjoint, N, M);
+
+  for (j=0; j < M; j++)
+  {
+    for (t=0; t < 2; t++)
+      printf("%.16e ", x[2*j+t]);
+    printf("\n");
+  }
+
+  if (trafo_adjoint==0)
+  {
+    for (k = 0; k <= N; k++)
+      for (n = -k; n <= k; n++)
+        printf("%.16e %.16e\n", creal(f_hat[NFSFT_INDEX(k,n,&ptemp)]), cimag(f_hat[NFSFT_INDEX(k,n,&ptemp)]));
+  }
+  else
+  {
+    for (j=0; j < M; j++)
+      printf("%.16e %.16e\n", creal(f[j]), cimag(f[j]));
+  }
+
+  nfft_free(x);
+  nfft_free(f);
+  nfft_free(f_hat);
+}
+
+int main(int argc, char **argv)
+{
+  int trafo_adjoint;
+  int N;
+  int M;
+
+  if (argc < 4) {
+    fprintf(stderr, "usage: tr_adj N M\n");
+    return -1;
+  }
+
+  trafo_adjoint = atoi(argv[1]);
+  if (trafo_adjoint < 0 && trafo_adjoint > 1)
+    trafo_adjoint = 1;
+
+  N = atoi(argv[2]);
+  M = atoi(argv[3]);
+  fprintf(stderr, "tr_adj=%d, N=%d, M=%d\n", trafo_adjoint, N, M);
+
+  nfsft_benchomp_createdataset(trafo_adjoint, N, M);
+
+  return 0;
+}
diff --git a/examples/nfsft/nfsft_benchomp_detail.c b/examples/nfsft/nfsft_benchomp_detail.c
new file mode 100644
index 0000000..dad50d1
--- /dev/null
+++ b/examples/nfsft/nfsft_benchomp_detail.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+void bench_openmp_readfile(FILE *infile, int *trafo_adjoint, int *N, int *M, double **x, C **f_hat, C **f)
+{
+  double re,im;
+  int k, n, j, t;
+  nfsft_plan plan;
+
+  fscanf(infile, "%d %d %d", trafo_adjoint, N, M);
+  *x = (double *)nfft_malloc(2*(*M)*sizeof(double));
+  *f_hat = (C*)nfft_malloc((2*(*N)+2) * (2*(*N)+2) * sizeof(C));
+  *f = (C*)nfft_malloc((*M)*sizeof(C));
+
+  memset(*f_hat,0U,(2*(*N)+2) * (2*(*N)+2) * sizeof(C));
+  memset(*f,0U,(*M)*sizeof(C));
+
+#ifdef _OPENMP
+  fftw_import_wisdom_from_filename("nfsft_benchomp_detail_threads.plan");
+#else
+  fftw_import_wisdom_from_filename("nfsft_benchomp_detail_single.plan");
+#endif
+
+  nfsft_init_guru(&plan, *N, *M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+    NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+    PRE_PHI_HUT | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+#ifdef _OPENMP
+  fftw_export_wisdom_to_filename("nfsft_benchomp_detail_threads.plan");
+#else
+  fftw_export_wisdom_to_filename("nfsft_benchomp_detail_single.plan");
+#endif
+
+  for (j=0; j < *M; j++)
+    for (t=0; t < 2; t++)
+      fscanf(infile, "%lg", (*x)+2*j+t);
+
+  if (trafo_adjoint==0)
+  {
+    for (k = 0; k <= *N; k++)
+      for (n = -k; n <= k; n++)
+      {
+        fscanf(infile, "%lg %lg", &re, &im);
+        (*f_hat)[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;
+      }
+  }
+  else
+  {
+    for (j=0; j < *M; j++)
+    {
+      fscanf(infile, "%lg %lg", &re, &im);
+      (*f)[j] = re + _Complex_I * im;
+    }
+  }
+
+  nfsft_finalize(&plan);
+}
+
+void bench_openmp(int trafo_adjoint, int N, int M, double *x, C *f_hat, C *f, int m, int nfsft_flags, int psi_flags)
+{
+  nfsft_plan plan;
+  int k, n;
+//  int N, M, trafo_adjoint;
+  int t, j;
+  ticks t0, t1;
+  double tt_total, tt_pre;
+
+//  fscanf(infile, "%d %d %d", &trafo_adjoint, &N, &M);
+
+/*#ifdef _OPENMP
+  fftw_import_wisdom_from_filename("nfsft_benchomp_detail_threads.plan");
+#else
+  fftw_import_wisdom_from_filename("nfsft_benchomp_detail_single.plan");
+#endif*/
+
+  /* precomputation (for fast polynomial transform) */
+//  nfsft_precompute(N,1000.0,0U,0U);
+
+  /* Initialize transform plan using the guru interface. All input and output
+   * arrays are allocated by nfsft_init_guru(). Computations are performed with
+   * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical
+   * Fourier coefficients is preserved during transformations. The NFFT uses a
+   * cut-off parameter m = 6. See the NFFT 3 manual for details.
+   */
+  nfsft_init_guru(&plan, N, M, nfsft_flags | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+    NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+    PRE_PHI_HUT | psi_flags | FFTW_INIT | FFT_OUT_OF_PLACE, m);
+
+/*#ifdef _OPENMP
+  fftw_export_wisdom_to_filename("nfsft_benchomp_detail_threads.plan");
+#else
+  fftw_export_wisdom_to_filename("nfsft_benchomp_detail_single.plan");
+#endif*/
+
+  for (j=0; j < plan.M_total; j++)
+  {
+    for (t=0; t < 2; t++)
+ //     fscanf(infile, "%lg", plan.x+2*j+t);
+      plan.x[2*j+t] = x[2*j+t];
+  }
+
+  if (trafo_adjoint==0)
+  {
+    memset(plan.f_hat,0U,plan.N_total*sizeof(double _Complex));
+    for (k = 0; k <= plan.N; k++)
+      for (n = -k; n <= k; n++)
+      {
+//        fscanf(infile, "%lg %lg", &re, &im);
+//        plan.f_hat[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;
+        plan.f_hat[NFSFT_INDEX(k,n,&plan)] = f_hat[NFSFT_INDEX(k,n,&plan)];
+      }
+  }
+  else
+  {
+    for (j=0; j < plan.M_total; j++)
+    {
+//      fscanf(infile, "%lg %lg", &re, &im);
+//      plan.f[j] = re + _Complex_I * im;
+      plan.f[j] = f[j];
+    }
+
+    memset(plan.f_hat,0U,plan.N_total*sizeof(double _Complex));
+  }
+
+  t0 = getticks();
+  /* precomputation (for NFFT, node-dependent) */
+  nfsft_precompute_x(&plan);
+  t1 = getticks();
+  tt_pre = nfft_elapsed_seconds(t1,t0);
+
+  if (trafo_adjoint==0)
+    nfsft_trafo(&plan);
+  else
+    nfsft_adjoint(&plan);
+  t1 = getticks();
+  tt_total = nfft_elapsed_seconds(t1,t0);
+
+#ifndef MEASURE_TIME
+  plan.MEASURE_TIME_t[0] = 0.0;
+  plan.MEASURE_TIME_t[2] = 0.0;
+#endif
+
+#ifndef MEASURE_TIME_FFTW
+  plan.MEASURE_TIME_t[1] = 0.0;
+#endif
+
+  printf("%.6e %.6e %6e %.6e %.6e %.6e\n", tt_pre, plan.MEASURE_TIME_t[0], plan.MEASURE_TIME_t[1], plan.MEASURE_TIME_t[2], tt_total-tt_pre-plan.MEASURE_TIME_t[0]-plan.MEASURE_TIME_t[1]-plan.MEASURE_TIME_t[2], tt_total);
+
+  /** finalise the one dimensional plan */
+  nfsft_finalize(&plan);
+}
+
+int main(int argc, char **argv)
+{
+  int m, nfsft_flags, psi_flags;
+  int nrepeat;
+  int trafo_adjoint, N, M, r;
+  double *x;
+  C *f_hat, *f;
+#ifdef _OPENMP
+  int nthreads;
+
+  if (argc != 6)
+    return 1;
+
+  nthreads = atoi(argv[5]);
+  fftw_init_threads();
+  omp_set_num_threads(nthreads);
+#else
+  if (argc != 5)
+    return 1;
+#endif
+
+  m = atoi(argv[1]);
+  nfsft_flags = atoi(argv[2]);
+  psi_flags = atoi(argv[3]);
+  nrepeat = atoi(argv[4]);
+
+  bench_openmp_readfile(stdin, &trafo_adjoint, &N, &M, &x, &f_hat, &f);
+
+  /* precomputation (for fast polynomial transform) */
+  nfsft_precompute(N,1000.0,0U,0U);
+
+  for (r = 0; r < nrepeat; r++)
+    bench_openmp(trafo_adjoint, N, M, x, f_hat, f, m, nfsft_flags, psi_flags);
+
+  return 0;
+}
diff --git a/examples/nfsft/simple_test.c b/examples/nfsft/simple_test.c
new file mode 100644
index 0000000..96856be
--- /dev/null
+++ b/examples/nfsft/simple_test.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3902 2012-10-16 14:02:31Z tovo $ */
+
+#include "config.h"
+
+/* standard headers */
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+/* It is important to include complex.h before nfft3.h. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h" /* NFFT3 header */
+#include "nfft3util.h" /* NFFT3 utilities header*/
+#include "infft.h" /* NFFT3 internal header */
+
+static void simple_test_nfsft(void)
+{
+  const int N = 4; /* bandwidth/maximum degree */
+  const int M = 8; /* number of nodes */
+  nfsft_plan plan; /* transform plan */
+  int j, k, n; /* loop variables */
+
+  /* precomputation (for fast polynomial transform) */
+  nfsft_precompute(N,1000.0,0U,0U);
+
+  /* Initialize transform plan using the guru interface. All input and output
+   * arrays are allocated by nfsft_init_guru(). Computations are performed with
+   * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical
+   * Fourier coefficients is preserved during transformations. The NFFT uses a
+   * cut-off parameter m = 6. See the NFFT 3 manual for details.
+   */
+  nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+    NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+    PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+  /* pseudo-random nodes */
+  for (j = 0; j < plan.M_total; j++)
+  {
+    plan.x[2*j]= nfft_drand48() - K(0.5);
+    plan.x[2*j+1]= K(0.5) * nfft_drand48();
+  }
+
+  /* precomputation (for NFFT, node-dependent) */
+  nfsft_precompute_x(&plan);
+
+  /* pseudo-random Fourier coefficients */
+  for (k = 0; k <= plan.N; k++)
+    for (n = -k; n <= k; n++)
+      plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
+          nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));
+
+  /* Direct transformation, display result. */
+  nfsft_trafo_direct(&plan);
+  printf("Vector f (NDSFT):\n");
+  for (j = 0; j < plan.M_total; j++)
+    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+      creal(plan.f[j]), cimag(plan.f[j]));
+
+  printf("\n");
+
+  /* Fast approximate transformation, display result. */
+  nfsft_trafo(&plan);
+  printf("Vector f (NFSFT):\n");
+  for (j = 0; j < plan.M_total; j++)
+    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+      creal(plan.f[j]), cimag(plan.f[j]));
+
+  printf("\n");
+
+  /* Direct adjoint transformation, display result. */
+  nfsft_adjoint_direct(&plan);
+  printf("Vector f_hat (NDSFT):\n");
+  for (k = 0; k <= plan.N; k++)
+    for (n = -k; n <= k; n++)
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+        creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+        cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+
+  printf("\n");
+
+  /* Fast approximate adjoint transformation, display result. */
+  nfsft_adjoint(&plan);
+  printf("Vector f_hat (NFSFT):\n");
+  for (k = 0; k <= plan.N; k++)
+  {
+    for (n = -k; n <= k; n++)
+    {
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+        creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+        cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+    }
+  }
+
+  /* Finalize the plan. */
+  nfsft_finalize(&plan);
+
+  /* Destroy data precomputed for fast polynomial transform. */
+	nfsft_forget();
+}
+
+int main(void)
+{
+  printf("Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"
+    "...\n\n");
+  simple_test_nfsft();
+  return EXIT_SUCCESS;
+}
diff --git a/examples/nfsft/simple_test_threads.c b/examples/nfsft/simple_test_threads.c
new file mode 100644
index 0000000..7864358
--- /dev/null
+++ b/examples/nfsft/simple_test_threads.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3498 2010-05-07 18:46:08Z keiner $ */
+
+#include "config.h"
+
+/* standard headers */
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+/* It is important to include complex.h before nfft3.h. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <omp.h>
+
+#include "nfft3.h" /* NFFT3 header */
+#include "nfft3util.h" /* NFFT3 utilities header*/
+#include "infft.h" /* NFFT3 internal header */
+
+static void simple_test_nfsft(void)
+{
+  const int N = 4; /* bandwidth/maximum degree */
+  const int M = 8; /* number of nodes */
+  nfsft_plan plan; /* transform plan */
+  int j, k, n; /* loop variables */
+
+  /* precomputation (for fast polynomial transform) */
+  nfsft_precompute(N,1000.0,0U,0U);
+
+  /* Initialize transform plan using the guru interface. All input and output
+   * arrays are allocated by nfsft_init_guru(). Computations are performed with
+   * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical
+   * Fourier coefficients is preserved during transformations. The NFFT uses a
+   * cut-off parameter m = 6. See the NFFT 3 manual for details.
+   */
+  nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+    NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+    PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+  /* pseudo-random nodes */
+  for (j = 0; j < plan.M_total; j++)
+  {
+    plan.x[2*j]= nfft_drand48() - K(0.5);
+    plan.x[2*j+1]= K(0.5) * nfft_drand48();
+  }
+
+  /* precomputation (for NFFT, node-dependent) */
+  nfsft_precompute_x(&plan);
+
+  /* pseudo-random Fourier coefficients */
+  for (k = 0; k <= plan.N; k++)
+    for (n = -k; n <= k; n++)
+      plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
+          nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));
+
+  /* Direct transformation, display result. */
+  nfsft_trafo_direct(&plan);
+  printf("Vector f (NDSFT):\n");
+  for (j = 0; j < plan.M_total; j++)
+    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+      creal(plan.f[j]), cimag(plan.f[j]));
+
+  printf("\n");
+
+  /* Fast approximate transformation, display result. */
+  printf("Vector f (NDSFT):\n");
+  for (j = 0; j < plan.M_total; j++)
+    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+      creal(plan.f[j]), cimag(plan.f[j]));
+
+  printf("\n");
+
+  /* Direct adjoint transformation, display result. */
+  nfsft_adjoint_direct(&plan);
+  printf("Vector f_hat (NDSFT):\n");
+  for (k = 0; k <= plan.N; k++)
+    for (n = -k; n <= k; n++)
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+        creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+        cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+
+  printf("\n");
+
+  /* Fast approximate adjoint transformation, display result. */
+  nfsft_adjoint(&plan);
+  printf("Vector f_hat (NFSFT):\n");
+  for (k = 0; k <= plan.N; k++)
+  {
+    for (n = -k; n <= k; n++)
+    {
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+        creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+        cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+    }
+  }
+
+  /* Finalize the plan. */
+  nfsft_finalize(&plan);
+
+  /* Destroy data precomputed for fast polynomial transform. */
+	nfsft_forget();
+}
+
+int main(void)
+{
+  printf("nthreads = %d\n", nfft_get_omp_num_threads());
+
+  /* init */
+  fftw_init_threads();
+
+  printf("Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"
+    "...\n\n");
+  simple_test_nfsft();
+  return EXIT_SUCCESS;
+}
diff --git a/examples/nfsoft/Makefile.am b/examples/nfsoft/Makefile.am
new file mode 100644
index 0000000..7aa9ece
--- /dev/null
+++ b/examples/nfsoft/Makefile.am
@@ -0,0 +1,12 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+## The program name
+noinst_PROGRAMS = simple_test
+
+## The source files.
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nfsoft/Makefile.in b/examples/nfsoft/Makefile.in
new file mode 100644
index 0000000..811f39b
--- /dev/null
+++ b/examples/nfsoft/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/nfsoft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfsoft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nfsoft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfsoft/README b/examples/nfsoft/README
new file mode 100644
index 0000000..2bf0e97
--- /dev/null
+++ b/examples/nfsoft/README
@@ -0,0 +1,12 @@
+NDFT for nonequispaced data on the rotation group SO(3)
+
+the algorithms are written by Antje Vollrath
+
+based on the paper
+Potts, D., Prestin J., and Vollrath A.
+ A Fast Algorithm for Nonequispaced Fourier Transforms on the Rotation Group
+ to appear in Num. Alg.
+ 
+Available from:
+http://www.tu-chemnitz.de/~potts
+ 
\ No newline at end of file
diff --git a/examples/nfsoft/simple_test.c b/examples/nfsoft/simple_test.c
new file mode 100644
index 0000000..dcc0035
--- /dev/null
+++ b/examples/nfsoft/simple_test.c
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+/* Include standard C headers. */
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* Include NFFT 3 utilities headers. */
+#include "nfft3util.h"
+/* Include NFFT3 library header. */
+#include "nfft3.h"
+#include "infft.h"
+
+static void simple_test_nfsoft(int bw, int M)
+{
+  nfsoft_plan plan_nfsoft; /**< Plan for the NFSOFT   */
+  nfsoft_plan plan_ndsoft; /**< Plan for the NDSOFT   */
+
+  ticks t0, t1;
+  int j; /** just an index*/
+  int k, m; /** the two parameters controlling the accuracy of the NFSOFT*/
+  double d1, d2, d3; /** indeces for initializing the Euler angles*/
+  double time, error; /**...self-explainatory*/
+  unsigned int flags = NFSOFT_MALLOC_X | NFSOFT_MALLOC_F | NFSOFT_MALLOC_F_HAT; /**flags for memory allocation \see nfft3.h*/
+
+  /**set the accuracy controlling parameters*/
+  k = 1000; /**  k resembles the FPT kappa */
+  m = 5; /**  m the NFFT cut-off parameter*/
+
+  /** Init two transform plans using the guru interface.
+   * All arrays for input and
+   * output variables are allocated by nfsoft_init_guru(). The
+   * array of SO(3) Fourier coefficients is preserved during
+   * transformations.
+   */
+
+  nfsoft_init_guru(&plan_ndsoft, bw, M, flags | NFSOFT_USE_NDFT
+      | NFSOFT_USE_DPT, PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT
+      | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);
+
+  nfsoft_init_guru(&plan_nfsoft, bw, M, flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X
+      | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);
+
+  /** Init random nodes (for both plans, the same). */
+  for (j = 0; j < plan_nfsoft.M_total; j++)
+  {
+    d1 = ((R) rand()) / RAND_MAX - 0.5;
+    d2 = 0.5 * ((R) rand()) / RAND_MAX;
+    d3 = ((R) rand()) / RAND_MAX - 0.5;
+
+    plan_nfsoft.x[3* j ] = d1; /**alpha*/
+    plan_nfsoft.x[3* j + 1] = d2; /**beta*/
+    plan_nfsoft.x[3* j + 2] = d3; /**gamma*/
+
+    plan_ndsoft.x[3* j ] = d1; /**alpha*/
+    plan_ndsoft.x[3* j + 1] = d2; /**beta*/
+    plan_ndsoft.x[3* j + 2] = d3; /**gamma*/
+  }
+
+  /** init random Fourier coefficients (again the same for both plans) and display them*/
+  for (j = 0; j < (bw + 1) * (4* (bw +1)*(bw+1)-1)/3;j++)
+  {
+    d1=((R)rand())/RAND_MAX - 0.5;
+    d2=((R)rand())/RAND_MAX - 0.5;
+    plan_nfsoft.f_hat[j]=d1 + I*d2;
+    plan_ndsoft.f_hat[j]=d1 + I*d2;
+  }
+
+  if ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)
+  nfft_vpr_complex(plan_nfsoft.f_hat,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,"randomly generated SO(3) Fourier coefficients");
+	else
+  nfft_vpr_complex(plan_ndsoft.f_hat,20,"1st-20th randomly generated SO(3) Fourier coefficient");
+
+  printf("\n---------------------------------------------\n");
+
+  /**Do precomputation for all transforms*/
+  nfsoft_precompute(&plan_nfsoft);
+  nfsoft_precompute(&plan_ndsoft);
+
+
+  /** Compute NFSOFT and display the time needed. */
+  t0 = getticks();
+  nfsoft_trafo(&plan_nfsoft);
+  t1 = getticks();
+  time = nfft_elapsed_seconds(t1,t0);
+  if (plan_nfsoft.M_total<=20)
+    nfft_vpr_complex(plan_nfsoft.f,plan_nfsoft.M_total,"NFSOFT, function samples");
+  else
+    nfft_vpr_complex(plan_nfsoft.f,20,"NFSOFT, 1st-20th function sample");
+  printf(" computed in %11le seconds\n",time);
+
+  /** Compute NDSOFT and display the time needed. */
+  t0 = getticks();
+  nfsoft_trafo(&plan_ndsoft);
+  t1 = getticks();
+time = nfft_elapsed_seconds(t1,t0);
+  if (plan_ndsoft.M_total<=20)
+    nfft_vpr_complex(plan_ndsoft.f,plan_ndsoft.M_total,"NDSOFT, function samples");
+  else
+    nfft_vpr_complex(plan_ndsoft.f,20,"NDSOFT, 1st-20th function sample");
+  printf(" computed in %11le seconds\n",time);
+
+  /**compute the error between the NFSOFT and NDSOFT and display it*/
+  error= X(error_l_infty_complex)(plan_ndsoft.f,plan_nfsoft.f, plan_nfsoft.M_total);
+  printf("\n The NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n",bw, M,error);
+
+  printf("\n---------------------------------------------\n");
+
+  plan_nfsoft.f[0]=1.0;
+  plan_ndsoft.f[0]=1.0;
+  nfft_vpr_complex(plan_ndsoft.f,plan_ndsoft.M_total, "function samples to start adjoint trafo");
+
+  /** Compute the adjoint NFSOFT and display the time needed.*/
+  t0 = getticks();
+  nfsoft_adjoint(&plan_nfsoft);
+  t1 = getticks();
+time = nfft_elapsed_seconds(t1,t0);
+  if ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)
+     nfft_vpr_complex(plan_nfsoft.f_hat,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,"SO(3) Fourier coefficients");
+  else
+     nfft_vpr_complex(plan_nfsoft.f_hat,20,"adjoint NFSOFT, 1st-20th Fourier coefficient");
+  printf(" computed in %11le seconds\n",time);
+
+  /** Compute adjoint NDSOFT and display the time needed.*/
+  t0 = getticks();
+  nfsoft_adjoint(&plan_ndsoft);
+  t1 = getticks();
+time = nfft_elapsed_seconds(t1,t0);
+  if ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)
+	nfft_vpr_complex(plan_ndsoft.f_hat,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,"SO(3) Fourier coefficients");
+  else
+    nfft_vpr_complex(plan_ndsoft.f_hat,20,"adjoint NDSOFT, 1st-20th Fourier coefficient");
+  printf(" computed in %11le seconds\n",time);
+
+
+  /**compute the error between the adjoint NFSOFT and NDSOFT and display it*/
+  error=X(error_l_infty_complex)(plan_ndsoft.f_hat,plan_nfsoft.f_hat, (bw+1)*(4*(bw+1)*(bw+1)-1)/3);
+  printf("\n The adjoint NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n",bw, M,error);
+
+  printf("\n---------------------------------------------\n");
+
+  /**destroy the plans*/
+  nfsoft_finalize(&plan_ndsoft);
+  nfsoft_finalize(&plan_nfsoft);
+}
+
+  /**
+   * The main program.
+   *
+   * computes an NDSOFT and its adjoint as well as an NFSOFT and its adjoint
+   *
+   * \f[
+   *  f(g_q)=\sum^{N}_{l=0}\sum_{m,n=-l}^l \hat f^{mn}_l D_{mn}^l(\alpha_q,\beta_q,\gamma_q)
+   * \f]
+
+   * at the desired bandwidth N for all M random nodes (g_q) with q=0,...,M-1
+   *
+   * \arg N the bandwidth
+   * \arg M the number of nodes
+   *
+   */
+
+int main(int argc, char **argv)
+{
+  int N; /**< The bandwidth N  */
+  int M; /**< The number of nodes M */
+
+  if (argc < 2)
+  {
+    printf(
+        "This test programm computes the NFSOFT with maximum polynomial degree N at M input rotations\n");
+    printf("Usage: simple_test N M \n");
+    printf("e.g.: simple_test 8 64\n");
+    exit(0);
+  }
+
+  /**Read in bandwidth and number of nodes*/
+  N = atoi(argv[1]);
+  M = atoi(argv[2]);
+
+  printf(
+      "computing an NDSOFT, an NFSOFT, an adjoint NDSOFT, and an adjoint NFSOFT\n\n");
+
+  simple_test_nfsoft(N, M);
+
+
+
+  /* Exit the program. */
+  return EXIT_SUCCESS;
+
+}
diff --git a/examples/nfst/Makefile.am b/examples/nfst/Makefile.am
new file mode 100644
index 0000000..fc85794
--- /dev/null
+++ b/examples/nfst/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nfst/Makefile.in b/examples/nfst/Makefile.in
new file mode 100644
index 0000000..49f37ad
--- /dev/null
+++ b/examples/nfst/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/nfst
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfst/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nfst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfst/README b/examples/nfst/README
new file mode 100644
index 0000000..41312e7
--- /dev/null
+++ b/examples/nfst/README
@@ -0,0 +1,17 @@
+Examples to the nonequispaced fast sine transform
+
+Author
+
+  Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+  Steffen Klatt <heracleum.mantegazziani at web.de>
+
+List of files and purpose
+
+  README            this file
+  simple_test.c     introductory example how to use the nfst
+
+References
+
+  M. Fenn and D. Potts.
+  Fast summation based on fast trigonometric transforms at nonequispaced nodes.
+  Numer. Linear Algebra Appl., 12:161--169, 2005.
diff --git a/examples/nfst/simple_test.c b/examples/nfst/simple_test.c
new file mode 100644
index 0000000..1abb4a7
--- /dev/null
+++ b/examples/nfst/simple_test.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+static void simple_test_nfst_1d(void)
+{
+  int j,k;
+  nfst_plan p;
+
+  int N=14;
+  int M=19;
+
+  /** init an one dimensional plan */
+  nfst_init_1d(&p,N,M);
+
+  /** init pseudo random nodes */
+  for(j = 0; j < p.d*p.M_total; j++)
+    p.x[j] = 0.5 * ((double)rand()) / RAND_MAX;
+
+  /** precompute psi, the entries of the matrix B */
+  if( p.nfst_flags & PRE_PSI)
+    nfst_precompute_psi( &p);
+
+  /** init pseudo random Fourier coefficients and show them */
+  for(k = 0; k < p.N_total; k++)
+    p.f_hat[k] = (double)rand() / RAND_MAX;
+
+  nfft_vpr_double(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+
+  /** direct trafo and show the result */
+  nfst_trafo_direct(&p);
+  nfft_vpr_double(p.f,p.M_total,"ndst, vector f");
+
+  /** approx. trafo and show the result */
+  nfst_trafo(&p);
+  nfft_vpr_double(p.f,p.M_total,"nfst, vector f");
+
+  /** approx. adjoint and show the result */
+  nfst_adjoint_direct(&p);
+  nfft_vpr_double(p.f_hat,p.N_total,"adjoint ndst, vector f_hat");
+
+  /** approx. adjoint and show the result */
+  nfst_adjoint(&p);
+  nfft_vpr_double(p.f_hat,p.N_total,"adjoint nfst, vector f_hat");
+
+  /** finalise the one dimensional plan */
+  nfst_finalize(&p);
+}
+
+int main(void)
+{
+  system("clear");
+  printf("computing one dimensional ndst, nfst and adjoint ndst, nfst\n\n");
+  simple_test_nfst_1d();
+  printf("\n\n");
+
+  return 1;
+}
diff --git a/examples/nnfft/Makefile.am b/examples/nnfft/Makefile.am
new file mode 100644
index 0000000..08f5ae0
--- /dev/null
+++ b/examples/nnfft/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test accuracy
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+accuracy_SOURCES = accuracy.c
+accuracy_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = accuracy.m README
diff --git a/examples/nnfft/Makefile.in b/examples/nnfft/Makefile.in
new file mode 100644
index 0000000..d9dc7c9
--- /dev/null
+++ b/examples/nnfft/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) accuracy$(EXEEXT)
+subdir = examples/nnfft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_accuracy_OBJECTS = accuracy.$(OBJEXT)
+accuracy_OBJECTS = $(am_accuracy_OBJECTS)
+accuracy_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(accuracy_SOURCES) $(simple_test_SOURCES)
+DIST_SOURCES = $(accuracy_SOURCES) $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+accuracy_SOURCES = accuracy.c
+accuracy_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = accuracy.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nnfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nnfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+accuracy$(EXEEXT): $(accuracy_OBJECTS) $(accuracy_DEPENDENCIES) $(EXTRA_accuracy_DEPENDENCIES) 
+	@rm -f accuracy$(EXEEXT)
+	$(LINK) $(accuracy_OBJECTS) $(accuracy_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/accuracy.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nnfft/README b/examples/nnfft/README
new file mode 100644
index 0000000..a5628b7
--- /dev/null
+++ b/examples/nnfft/README
@@ -0,0 +1,12 @@
+NDFT for nonequispaced data in time and frequency domain
+
+the algorithms are written by Tobias Knopp 
+based on the paper
+Potts, D., Steidl G., and Tasche M.
+ Fast Fourier transforms for nonequispaced data: A tutorial.
+ in: Modern Sampling Theory: Mathematics and Applications, 
+ J.J. Benedetto and P. Ferreira (Eds.), Chapter 12, pages 249-274. 1998
+
+Available from:
+http://www.tu-chemnitz.de/~potts
+ 
diff --git a/examples/nnfft/accuracy.c b/examples/nnfft/accuracy.c
new file mode 100644
index 0000000..3409be4
--- /dev/null
+++ b/examples/nnfft/accuracy.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: accuracy.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void accuracy(int d)
+{
+  int m,t;
+  nnfft_plan my_plan;
+  double _Complex *slow;
+
+  int N[d],n[d];
+  int M_total,N_total;
+  M_total=10000;N_total=1;
+
+  slow=(double _Complex*)nfft_malloc(M_total*sizeof(double _Complex));
+
+  for(t=0; t<d; t++)
+    {
+      N[t]=(1<<(12/d));
+      n[t]=2*N[t];
+      N_total*=N[t];
+    }
+
+  /** init a plan */
+  for(m=0; m<10; m++)
+    {
+      nnfft_init_guru(&my_plan, d, N_total, M_total, N, n, m,
+		      PRE_PSI| PRE_PHI_HUT|
+		      MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F);
+
+
+      /** init pseudo random nodes */
+      nfft_vrand_shifted_unit_double(my_plan.x, d*my_plan.M_total);
+      nfft_vrand_shifted_unit_double(my_plan.v, d*my_plan.N_total);
+
+      /** precompute psi, the entries of the matrix B */
+      if(my_plan.nnfft_flags & PRE_PSI)
+      	nnfft_precompute_psi(&my_plan);
+
+      if(my_plan.nnfft_flags & PRE_LIN_PSI)
+        nnfft_precompute_lin_psi(&my_plan);
+
+      if(my_plan.nnfft_flags & PRE_FULL_PSI)
+        nnfft_precompute_full_psi(&my_plan);
+
+      /** precompute psi, the entries of the matrix D */
+      if(my_plan.nnfft_flags & PRE_PHI_HUT)
+        nnfft_precompute_phi_hut(&my_plan);
+
+      /** init pseudo random Fourier coefficients */
+      nfft_vrand_unit_complex(my_plan.f_hat, my_plan.N_total);
+
+      /** direct trafo and show the result */
+      nnfft_trafo_direct(&my_plan);
+
+      NFFT_SWAP_complex(my_plan.f,slow);
+
+      /** approx. trafo and show the result */
+      nnfft_trafo(&my_plan);
+
+      printf("%e, %e\n",
+	     X(error_l_infty_complex)(slow, my_plan.f, M_total),
+	     X(error_l_infty_1_complex)(slow, my_plan.f, M_total, my_plan.f_hat,
+				     my_plan.N_total));
+
+      /** finalise the one dimensional plan */
+      nnfft_finalize(&my_plan);
+    }
+}
+
+int main(void)
+{
+  int d;
+  for(d=1; d<4; d++)
+    accuracy(d);
+
+  return 1;
+}
diff --git a/examples/nnfft/accuracy.m b/examples/nnfft/accuracy.m
new file mode 100644
index 0000000..6d7bd0c
--- /dev/null
+++ b/examples/nnfft/accuracy.m
@@ -0,0 +1,64 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: accuracy.m 3776 2012-06-03 13:29:25Z keiner $
+m=0:14;
+load kaiser_bessel.dat
+load sinc_power.dat
+load b_spline.dat
+load gaussian.dat
+
+figure(1);
+h=semilogy(m,kaiser_bessel(m+1,1),'k',m,kaiser_bessel(m+1,1),'ko',...
+           m,sinc_power(m+1,1),'k',m,sinc_power(m+1,1),'kx',...
+           m,b_spline(m+1,1),'k',m,b_spline(m+1,1),'k+',...
+           m,gaussian(m+1,1),'k',m,gaussian(m+1,1),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy1.eps -deps
+
+figure(2);
+h=semilogy(m,kaiser_bessel(m+1,2),'k',m,kaiser_bessel(m+1,2),'ko',...
+           m,sinc_power(m+1,2),'k',m,sinc_power(m+1,2),'kx',...
+           m,b_spline(m+1,2),'k',m,b_spline(m+1,2),'k+',...
+           m,gaussian(m+1,2),'k',m,gaussian(m+1,2),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy2.eps -deps
+
+figure(3);
+h=semilogy(m,kaiser_bessel(m+16,1),'k',m,kaiser_bessel(m+16,1),'ko',...
+           m,sinc_power(m+16,1),'k',m,sinc_power(m+16,1),'kx',...
+           m,b_spline(m+16,1),'k',m,b_spline(m+16,1),'k+',...
+           m,gaussian(m+16,1),'k',m,gaussian(m+16,1),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy3.eps -deps
+
+figure(4);
+h=semilogy(m,kaiser_bessel(m+16,2),'k',m,kaiser_bessel(m+16,2),'ko',...
+           m,sinc_power(m+16,2),'k',m,sinc_power(m+16,2),'kx',...
+           m,b_spline(m+16,2),'k',m,b_spline(m+16,2),'k+',...
+           m,gaussian(m+16,2),'k',m,gaussian(m+16,2),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy4.eps -deps
+
+figure(5);
+h=semilogy(m,kaiser_bessel(m+31,1),'k',m,kaiser_bessel(m+31,1),'ko',...
+           m,sinc_power(m+31,1),'k',m,sinc_power(m+31,1),'kx',...
+           m,b_spline(m+31,1),'k',m,b_spline(m+31,1),'k+',...
+           m,gaussian(m+31,1),'k',m,gaussian(m+31,1),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy5.eps -deps
+
+figure(6);
+h=semilogy(m,kaiser_bessel(m+31,2),'k',m,kaiser_bessel(m+31,2),'ko',...
+           m,sinc_power(m+31,2),'k',m,sinc_power(m+31,2),'kx',...
+           m,b_spline(m+31,2),'k',m,b_spline(m+31,2),'k+',...
+           m,gaussian(m+31,2),'k',m,gaussian(m+31,2),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy6.eps -deps
diff --git a/examples/nnfft/simple_test.c b/examples/nnfft/simple_test.c
new file mode 100644
index 0000000..fcf3ac0
--- /dev/null
+++ b/examples/nnfft/simple_test.c
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void simple_test_nnfft_1d(void)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nnfft_plan my_plan;                    /**< plan for the nfft                */
+
+  int N[1];
+  N[0]=12;
+
+  /** init an one dimensional plan */
+  nnfft_init(&my_plan, 1, 3, 19, N);
+
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+  }
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.N_total;j++)
+  {
+    my_plan.v[j]=((double)rand())/((double)RAND_MAX)-0.5;
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_plan.nnfft_flags & PRE_PSI)
+    nnfft_precompute_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_FULL_PSI)
+    nnfft_precompute_full_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_LIN_PSI)
+    nnfft_precompute_lin_psi(&my_plan);
+
+  /** precompute phi_hut, the entries of the matrix D */
+  if(my_plan.nnfft_flags & PRE_PHI_HUT)
+    nnfft_precompute_phi_hut(&my_plan);
+
+  /** init pseudo random Fourier coefficients and show them */
+  for(k=0;k<my_plan.N_total;k++)
+    my_plan.f_hat[k] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+  nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat");
+
+  /** direct trafo and show the result */
+  nnfft_trafo_direct(&my_plan);
+  nfft_vpr_complex(my_plan.f,my_plan.M_total,"nndft, vector f");
+
+  /** approx. trafo and show the result */
+  nnfft_trafo(&my_plan);
+  nfft_vpr_complex(my_plan.f,my_plan.M_total,"nnfft, vector f");
+
+  /** finalise the one dimensional plan */
+  nnfft_finalize(&my_plan);
+}
+
+static void simple_test_adjoint_nnfft_1d(void)
+{
+  int j;                                 /**< index for nodes and freqencies   */
+  nnfft_plan my_plan;                    /**< plan for the nfft                */
+
+  int N[1];
+  N[0]=12;
+
+  /** init an one dimensional plan */
+  nnfft_init(&my_plan, 1, 20, 33, N);
+
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+  }
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.N_total;j++)
+  {
+    my_plan.v[j]=((double)rand())/((double)RAND_MAX)-0.5;
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_plan.nnfft_flags & PRE_PSI)
+    nnfft_precompute_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_FULL_PSI)
+    nnfft_precompute_full_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_LIN_PSI)
+    nnfft_precompute_lin_psi(&my_plan);
+
+  /** precompute phi_hut, the entries of the matrix D */
+  if(my_plan.nnfft_flags & PRE_PHI_HUT)
+    nnfft_precompute_phi_hut(&my_plan);
+
+  /** init pseudo random Fourier coefficients and show them */
+  for(j=0;j<my_plan.M_total;j++)
+    my_plan.f[j] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+  nfft_vpr_complex(my_plan.f,my_plan.M_total,"given Samples, vector f");
+
+  /** direct trafo and show the result */
+  nnfft_adjoint_direct(&my_plan);
+  nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nndft, vector f_hat");
+
+  /** approx. trafo and show the result */
+  nnfft_adjoint(&my_plan);
+  nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nnfft, vector f_hat");
+
+  /** finalise the one dimensional plan */
+  nnfft_finalize(&my_plan);
+}
+
+static void simple_test_nnfft_2d(void)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nnfft_plan my_plan;                    /**< plan for the nfft                */
+
+  int N[2];
+  N[0]=12;
+  N[1]=14;
+
+  /** init an one dimensional plan */
+  nnfft_init(&my_plan, 2,12*14,19, N);
+
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.M_total;j++)
+  {
+    my_plan.x[2*j]=((double)rand())/((double)RAND_MAX)-0.5;
+    my_plan.x[2*j+1]=((double)rand())/((double)RAND_MAX)-0.5;
+  }
+
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.N_total;j++)
+  {
+    my_plan.v[2*j]=((double)rand())/((double)RAND_MAX)-0.5;
+    my_plan.v[2*j+1]=((double)rand())/((double)RAND_MAX)-0.5;
+  }
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_plan.nnfft_flags & PRE_PSI)
+    nnfft_precompute_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_FULL_PSI)
+    nnfft_precompute_full_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_LIN_PSI)
+    nnfft_precompute_lin_psi(&my_plan);
+
+  /** precompute phi_hut, the entries of the matrix D */
+  if(my_plan.nnfft_flags & PRE_PHI_HUT)
+    nnfft_precompute_phi_hut(&my_plan);
+
+  /** init pseudo random Fourier coefficients and show them */
+  for(k=0;k<my_plan.N_total;k++)
+    my_plan.f_hat[k] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+  nfft_vpr_complex(my_plan.f_hat,12,
+        "given Fourier coefficients, vector f_hat (first 12 entries)");
+
+  /** direct trafo and show the result */
+  nnfft_trafo_direct(&my_plan);
+  nfft_vpr_complex(my_plan.f,my_plan.M_total,"ndft, vector f");
+
+  /** approx. trafo and show the result */
+  nnfft_trafo(&my_plan);
+  nfft_vpr_complex(my_plan.f,my_plan.M_total,"nfft, vector f");
+
+  /** finalise the one dimensional plan */
+  nnfft_finalize(&my_plan);
+}
+
+static void simple_test_innfft_1d(void)
+{
+  int j,k,l,N=8;                        /**< index for nodes, freqencies, iter*/
+  nnfft_plan my_plan;                   /**< plan for the nnfft               */
+  solver_plan_complex my_iplan;         /**< plan for the inverse nnfft       */
+
+  /** initialise an one dimensional plan */
+  nnfft_init(&my_plan,1 ,8 ,8 ,&N);
+
+  /** initialise my_iplan */
+  solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan),CGNR);
+
+  /** init pseudo random nodes */
+  for(j=0;j<my_plan.M_total;j++)
+    my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+
+  /** init pseudo random nodes */
+  for(k=0;k<my_plan.N_total;k++)
+    my_plan.v[k]=((double)rand())/((double)RAND_MAX)-0.5;
+
+  /** precompute psi, the entries of the matrix B */
+  if(my_plan.nnfft_flags & PRE_PSI)
+    nnfft_precompute_psi(&my_plan);
+
+  if(my_plan.nnfft_flags & PRE_FULL_PSI)
+      nnfft_precompute_full_psi(&my_plan);
+
+  /** precompute phi_hut, the entries of the matrix D */
+  if(my_plan.nnfft_flags & PRE_PHI_HUT)
+    nnfft_precompute_phi_hut(&my_plan);
+
+  /** init pseudo random samples (real) and show them */
+  for(j=0;j<my_plan.M_total;j++)
+    my_iplan.y[j] = ((double)rand())/((double)RAND_MAX);
+
+  nfft_vpr_complex(my_iplan.y,my_plan.M_total,"given data, vector given_f");
+
+  /** initialise some guess f_hat_0 */
+  for(k=0;k<my_plan.N_total;k++)
+    my_iplan.f_hat_iter[k] = 0.0;
+
+  nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
+        "approximate solution, vector f_hat_iter");
+
+  /** solve the system */
+  solver_before_loop_complex(&my_iplan);
+
+  for(l=0;l<8;l++)
+  {
+    printf("iteration l=%d\n",l);
+    solver_loop_one_step_complex(&my_iplan);
+    nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
+          "approximate solution, vector f_hat_iter");
+
+    NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
+    nnfft_trafo(&my_plan);
+    nfft_vpr_complex(my_plan.f,my_plan.M_total,"fitting the data, vector f");
+    NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
+  }
+
+  solver_finalize_complex(&my_iplan);
+  nnfft_finalize(&my_plan);
+}
+
+static void measure_time_nnfft_1d(void)
+{
+  int j,k;                              /**< index for nodes and freqencies   */
+  nnfft_plan my_plan;                    /**< plan for the nfft                */
+  int my_N,N=4;
+  double t;
+  ticks t0, t1;
+
+  for(my_N=16; my_N<=16384; my_N*=2)
+  {
+    nnfft_init(&my_plan,1,my_N,my_N,&N);
+
+    for(j=0;j<my_plan.M_total;j++)
+      my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+
+    for(j=0;j<my_plan.N_total;j++)
+      my_plan.v[j]=((double)rand())/((double)RAND_MAX)-0.5;
+
+    if(my_plan.nnfft_flags & PRE_PSI)
+      nnfft_precompute_psi(&my_plan);
+
+    if(my_plan.nnfft_flags & PRE_FULL_PSI)
+        nnfft_precompute_full_psi(&my_plan);
+
+    if(my_plan.nnfft_flags & PRE_PHI_HUT)
+      nnfft_precompute_phi_hut(&my_plan);
+
+    for(k=0;k<my_plan.N_total;k++)
+      my_plan.f_hat[k] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+    t0 = getticks();
+    nnfft_trafo_direct(&my_plan);
+    t1 = getticks();
+    t = nfft_elapsed_seconds(t1,t0);
+    printf("t_nndft=%e,\t",t);
+
+    t0 = getticks();
+    nnfft_trafo(&my_plan);
+    t1 = getticks();
+    t = nfft_elapsed_seconds(t1,t0);
+    printf("t_nnfft=%e\t",t);
+
+    printf("(N=M=%d)\n",my_N);
+
+    nnfft_finalize(&my_plan);
+  }
+}
+
+int main(void)
+{
+  system("clear");
+  printf("1) computing a one dimensional nndft, nnfft\n\n");
+  simple_test_nnfft_1d();
+
+  getc(stdin);
+
+  system("clear");
+  printf("1a) computing a one dimensional adjoint nndft, nnfft\n\n");
+  simple_test_adjoint_nnfft_1d();
+
+  getc(stdin);
+
+  system("clear");
+  printf("2) computing a two dimensional nndft, nnfft\n\n");
+  simple_test_nnfft_2d();
+
+  getc(stdin);
+
+  system("clear");
+  printf("3) computing a one dimensional innfft\n\n");
+  simple_test_innfft_1d();
+
+  getc(stdin);
+
+  system("clear");
+  printf("4) computing times for one dimensional nnfft\n\n");
+  measure_time_nnfft_1d();
+
+  return 1;
+}
diff --git a/examples/nsfft/Makefile.am b/examples/nsfft/Makefile.am
new file mode 100644
index 0000000..370c617
--- /dev/null
+++ b/examples/nsfft/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test nsfft_test
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+nsfft_test_SOURCES = nsfft_test.c
+nsfft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nsfft/Makefile.in b/examples/nsfft/Makefile.in
new file mode 100644
index 0000000..c024b65
--- /dev/null
+++ b/examples/nsfft/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) nsfft_test$(EXEEXT)
+subdir = examples/nsfft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_nsfft_test_OBJECTS = nsfft_test.$(OBJEXT)
+nsfft_test_OBJECTS = $(am_nsfft_test_OBJECTS)
+nsfft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(nsfft_test_SOURCES) $(simple_test_SOURCES)
+DIST_SOURCES = $(nsfft_test_SOURCES) $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+nsfft_test_SOURCES = nsfft_test.c
+nsfft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nsfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/nsfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+nsfft_test$(EXEEXT): $(nsfft_test_OBJECTS) $(nsfft_test_DEPENDENCIES) $(EXTRA_nsfft_test_DEPENDENCIES) 
+	@rm -f nsfft_test$(EXEEXT)
+	$(LINK) $(nsfft_test_OBJECTS) $(nsfft_test_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nsfft_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nsfft/README b/examples/nsfft/README
new file mode 100644
index 0000000..bace2d9
--- /dev/null
+++ b/examples/nsfft/README
@@ -0,0 +1,8 @@
+nsfft - nonequispaced sparse FFT or sparse NFFT
+
+Based on the research paper:
+Fast evaluation of trigonometric polynomials from hyperbolic crosses
+by Markus Fenn and Stefan Kunis and Daniel Potts
+
+Available from:
+http://www.tu-chemnitz.de/~potts
diff --git a/examples/nsfft/nsfft_test.c b/examples/nsfft/nsfft_test.c
new file mode 100644
index 0000000..7d01c9a
--- /dev/null
+++ b/examples/nsfft/nsfft_test.c
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nsfft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void accuracy_nsfft(int d, int J, int M, int m)
+{
+  nsfft_plan p;
+  double _Complex *swap_sndft_trafo, *swap_sndft_adjoint;
+
+  nsfft_init(&p, d, J, M, m, NSDFT);
+
+  swap_sndft_trafo=(double _Complex*) nfft_malloc(p.M_total*
+						 sizeof(double _Complex));
+  swap_sndft_adjoint=(double _Complex*) nfft_malloc(p.N_total*
+						   sizeof(double _Complex));
+
+  nsfft_init_random_nodes_coeffs(&p);
+
+  /** direct trafo */
+  nsfft_trafo_direct(&p);
+
+  NFFT_SWAP_complex(swap_sndft_trafo,p.f);
+
+  /** approx. trafo */
+  nsfft_trafo(&p);
+
+  printf("%5d\t %+.5E\t",J,
+         X(error_l_infty_1_complex)(swap_sndft_trafo, p.f, p.M_total,
+                                 p.f_hat, p.N_total));
+  fflush(stdout);
+
+  nfft_vrand_unit_complex(p.f, p.M_total);
+
+  /** direct adjoint */
+  nsfft_adjoint_direct(&p);
+
+  NFFT_SWAP_complex(swap_sndft_adjoint,p.f_hat);
+
+  /** approx. adjoint */
+  nsfft_adjoint(&p);
+
+  printf("%+.5E\n",
+         X(error_l_infty_1_complex)(swap_sndft_adjoint, p.f_hat,
+                                 p.N_total,
+                                 p.f, p.M_total));
+  fflush(stdout);
+
+  nfft_free(swap_sndft_adjoint);
+  nfft_free(swap_sndft_trafo);
+
+  /** finalise the one dimensional plan */
+  nsfft_finalize(&p);
+}
+
+static void time_nsfft(int d, int J, int M, unsigned test_nsdft, unsigned test_nfft)
+{
+  int r, N[d], n[d];
+  double t, t_nsdft, t_nfft, t_nsfft;
+  ticks t0, t1;
+
+  nsfft_plan p;
+  nfft_plan np;
+
+  for(r=0;r<d;r++)
+  {
+    N[r]= X(exp2i)(J+2);
+    n[r]=(3*N[r])/2;
+    /*n[r]=2*N[r];*/
+  }
+
+  /** init */
+  nsfft_init(&p, d, J, M, 4, NSDFT);
+  nsfft_init_random_nodes_coeffs(&p);
+
+  /* transforms */
+  if(test_nsdft)
+  {
+    t_nsdft=0;
+    r=0;
+    while(t_nsdft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nsfft_trafo_direct(&p);
+      t1 = getticks();
+      t = nfft_elapsed_seconds(t1,t0);
+      t_nsdft+=t;
+    }
+    t_nsdft/=r;
+  }
+  else
+    t_nsdft=nan("");
+
+  if(test_nfft)
+  {
+    nfft_init_guru(&np,d,N,M,n,6, FG_PSI| MALLOC_F_HAT| MALLOC_F| FFTW_INIT,
+      FFTW_MEASURE);
+    np.x=p.act_nfft_plan->x;
+    if(np.nfft_flags & PRE_ONE_PSI)
+      nfft_precompute_one_psi(&np);
+    nsfft_cp(&p, &np);
+
+    t_nfft=0;
+    r=0;
+    while(t_nfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nfft_trafo(&np);
+      t1 = getticks();
+      t = nfft_elapsed_seconds(t1,t0);
+      t_nfft+=t;
+    }
+    t_nfft/=r;
+
+    nfft_finalize(&np);
+  }
+  else
+  {
+    t_nfft=nan("");
+  }
+
+  t_nsfft=0;
+  r=0;
+  while(t_nsfft<0.1)
+    {
+      r++;
+      t0 = getticks();
+      nsfft_trafo(&p);
+      t1 = getticks();
+      t = nfft_elapsed_seconds(t1,t0);
+      t_nsfft+=t;
+    }
+  t_nsfft/=r;
+
+  printf("%d\t%.2e\t%.2e\t%.2e\n", J, t_nsdft, t_nfft, t_nsfft);
+
+  fflush(stdout);
+
+  /** finalise */
+  nsfft_finalize(&p);
+}
+
+
+int main(int argc,char **argv)
+{
+  int d, J, M;
+
+  if(argc<=2)
+  {
+    fprintf(stderr,"nsfft_test type d [first last trials]\n");
+    return -1;
+  }
+
+  d=atoi(argv[2]);
+  fprintf(stderr,"Testing the nfft on the hyperbolic cross (nsfft).\n");
+
+  if(atoi(argv[1])==1)
+  {
+    fprintf(stderr,"Testing the accuracy of the nsfft vs. nsdft\n");
+    fprintf(stderr,"Columns: d, E_{1,\\infty}(trafo) E_{1,\\infty}(adjoint)\n\n");
+    for(J=1; J<10; J++)
+      accuracy_nsfft(d, J, 1000, 6);
+  }
+
+  if(atoi(argv[1])==2)
+  {
+    fprintf(stderr,"Testing the computation time of the nsdft, nfft, and nsfft\n");
+    fprintf(stderr,"Columns: d, J, M, t_nsdft, t_nfft, t_nsfft\n\n");
+    for(J=atoi(argv[3]); J<=atoi(argv[4]); J++)
+    {
+      if(d==2)
+	M=(J+4)*X(exp2i)(J+1);
+      else
+	M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));
+
+      if(d*(J+2)<=24)
+	time_nsfft(d, J, M, 1, 1);
+      else
+	if(d*(J+2)<=24)
+	  time_nsfft(d, J, M, 0, 1);
+	else
+	  time_nsfft(d, J, M, 0, 0);
+    }
+  }
+
+  return 1;
+}
diff --git a/examples/nsfft/simple_test.c b/examples/nsfft/simple_test.c
new file mode 100644
index 0000000..9f4e356
--- /dev/null
+++ b/examples/nsfft/simple_test.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void simple_test_nsfft(int d, int J, int M)
+{
+  int K=12;
+  nsfft_plan p;
+
+  nsfft_init(&p, d, J, M, 6, NSDFT);
+
+  nsfft_init_random_nodes_coeffs(&p);
+
+  nfft_vpr_complex(p.f_hat, K, "frequencies, vector f_hat (first few entries)");
+
+  /** direct trafo and show the result */
+  nsfft_trafo_direct(&p);
+  nfft_vpr_complex(p.f, K, "nsdft, vector f (first few entries)");
+
+  /** approx. trafo and show the result */
+  nsfft_trafo(&p);
+  nfft_vpr_complex(p.f, K, "nsfft, vector f (first few entries)");
+
+  /** direct adjoint and show the result */
+  nsfft_adjoint_direct(&p);
+  nfft_vpr_complex(p.f_hat, K, "adjoint nsdft, vector f_hat, (first few entries)");
+
+  /** approx. adjoint and show the result */
+  nsfft_adjoint(&p);
+  nfft_vpr_complex(p.f_hat, K, "adjoint nsfft, vector f_hat, (first few entries)");
+
+  /** finalise the one dimensional plan */
+  nsfft_finalize(&p);
+}
+
+int main(int argc,char **argv)
+{
+  int d, J, M;
+
+  system("clear");
+  printf("1) computing a two dimensional nsdft, nsfft and adjoints\n\n");
+  d=2;
+  J=5;
+  M=(J+4)*X(exp2i)(J+1);
+  simple_test_nsfft(d,J,M);
+  getc(stdin);
+
+  system("clear");
+  printf("2) computing a three dimensional nsdft, nsfft and adjoints\n\n");
+  d=3;
+  J=5;
+  M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));
+  simple_test_nsfft(d,J,M);
+
+  return 1;
+}
diff --git a/examples/solver/Makefile.am b/examples/solver/Makefile.am
new file mode 100644
index 0000000..af6159c
--- /dev/null
+++ b/examples/solver/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test glacier
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+glacier_SOURCES = glacier.c doxygen.h
+glacier_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = glacier.m glacier_cv.m vol87.dat README
diff --git a/examples/solver/Makefile.in b/examples/solver/Makefile.in
new file mode 100644
index 0000000..cd17ab1
--- /dev/null
+++ b/examples/solver/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) glacier$(EXEEXT)
+subdir = examples/solver
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_glacier_OBJECTS = glacier.$(OBJEXT)
+glacier_OBJECTS = $(am_glacier_OBJECTS)
+glacier_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(glacier_SOURCES) $(simple_test_SOURCES)
+DIST_SOURCES = $(glacier_SOURCES) $(simple_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+glacier_SOURCES = glacier.c doxygen.h
+glacier_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = glacier.m glacier_cv.m vol87.dat README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/solver/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/solver/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+glacier$(EXEEXT): $(glacier_OBJECTS) $(glacier_DEPENDENCIES) $(EXTRA_glacier_DEPENDENCIES) 
+	@rm -f glacier$(EXEEXT)
+	$(LINK) $(glacier_OBJECTS) $(glacier_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
+	@rm -f simple_test$(EXEEXT)
+	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/glacier.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/solver/README b/examples/solver/README
new file mode 100644
index 0000000..7d741f7
--- /dev/null
+++ b/examples/solver/README
@@ -0,0 +1,21 @@
+Examples to the inverse NFFT
+
+Author
+
+  Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+
+List of files and purpose
+
+  README            this file
+  simple_test.c     introductory example how to use the solver component with
+                    the nfft
+  glacier.c         reconstruction of a glacier from sampled level curves
+  glacier.m         visualisation with MATLAB, calls the executable glacier
+  glacier_cv.m      cross validation test for the glacier reconstruction
+  vol87.dat         data set, see http://www.math.nps.navy.mil/~rfranke/README
+  
+References
+
+  Kunis, S. and Potts, D. Stability Results for Scattered Data Interpolation
+  by Trigonometric Polynomials, SIAM J. Sci. Comput. 29, 1403 - 1419, 2007.
+
diff --git a/examples/solver/doxygen.h b/examples/solver/doxygen.h
new file mode 100644
index 0000000..1ee7bf5
--- /dev/null
+++ b/examples/solver/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup examples_solver Solver component
+ * \ingroup examples
+ */
diff --git a/examples/solver/glacier.c b/examples/solver/glacier.c
new file mode 100644
index 0000000..feb86e7
--- /dev/null
+++ b/examples/solver/glacier.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: glacier.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup examples_solver_glacier Reconstruction of a glacier from \
+ scattered data
+ * \ingroup examples_solver
+ * \{
+ */
+
+/** Generalised Sobolev weight */
+static double my_weight(double z,double a,double b,double c)
+{
+    return pow(0.25-z*z,b)/(c+pow(fabs(z),2*a));
+}
+
+/** Reconstruction routine */
+static void glacier(int N,int M)
+{
+  int j,k,k0,k1,l,my_N[2],my_n[2];
+  double tmp_y;
+  nfft_plan p;
+  solver_plan_complex ip;
+  FILE* fp;
+
+  /* initialise p */
+  my_N[0]=N; my_n[0]=X(next_power_of_2)(N);
+  my_N[1]=N; my_n[1]=X(next_power_of_2)(N);
+  nfft_init_guru(&p, 2, my_N, M, my_n, 6,
+		 PRE_PHI_HUT| PRE_FULL_PSI|
+		 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  /* initialise ip, specific */
+  solver_init_advanced_complex(&ip,(nfft_mv_plan_complex*)(&p), CGNE| PRECOMPUTE_DAMP);
+  fprintf(stderr,"Using the generic solver!");
+
+  /* init nodes */
+  fp=fopen("input_data.dat","r");
+  for(j=0;j<p.M_total;j++)
+  {
+      fscanf(fp,"%le %le %le",&p.x[2*j+0],&p.x[2*j+1],&tmp_y);
+      ip.y[j]=tmp_y;
+  }
+  fclose(fp);
+
+  /* precompute psi */
+  if(p.nfft_flags & PRE_ONE_PSI)
+      nfft_precompute_one_psi(&p);
+
+  /* initialise damping factors */
+  if(ip.flags & PRECOMPUTE_DAMP)
+    for(k0=0;k0<p.N[0];k0++)
+      for(k1=0;k1<p.N[1];k1++)
+        ip.w_hat[k0*p.N[1]+k1]=
+	    my_weight(((double)(k0-p.N[0]/2))/p.N[0],0.5,3,0.001)*
+	    my_weight(((double)(k1-p.N[1]/2))/p.N[1],0.5,3,0.001);
+
+  /* init some guess */
+  for(k=0;k<p.N_total;k++)
+      ip.f_hat_iter[k]=0;
+
+  /* inverse trafo */
+  solver_before_loop_complex(&ip);
+  for(l=0;l<40;l++)
+    {
+      fprintf(stderr,"Residual ||r||=%e,\n",sqrt(ip.dot_r_iter));
+      solver_loop_one_step_complex(&ip);
+    }
+
+  for(k=0;k<p.N_total;k++)
+    printf("%le %le\n",creal(ip.f_hat_iter[k]),cimag(ip.f_hat_iter[k]));
+
+  solver_finalize_complex(&ip);
+  nfft_finalize(&p);
+}
+
+/** Reconstruction routine with cross validation */
+static void glacier_cv(int N,int M,int M_cv,unsigned solver_flags)
+{
+  int j,k,k0,k1,l,my_N[2],my_n[2];
+  double tmp_y,r;
+  nfft_plan p,cp;
+  solver_plan_complex ip;
+  double _Complex* cp_y;
+  FILE* fp;
+  int M_re=M-M_cv;
+
+  /* initialise p for reconstruction */
+  my_N[0]=N; my_n[0]=X(next_power_of_2)(N);
+  my_N[1]=N; my_n[1]=X(next_power_of_2)(N);
+  nfft_init_guru(&p, 2, my_N, M_re, my_n, 6,
+		 PRE_PHI_HUT| PRE_FULL_PSI|
+		 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+
+  /* initialise ip, specific */
+  solver_init_advanced_complex(&ip,(nfft_mv_plan_complex*)(&p), solver_flags);
+
+  /* initialise cp for validation */
+  cp_y = (double _Complex*) nfft_malloc(M*sizeof(double _Complex));
+  nfft_init_guru(&cp, 2, my_N, M, my_n, 6,
+		 PRE_PHI_HUT| PRE_FULL_PSI|
+		 MALLOC_X| MALLOC_F|
+		 FFTW_INIT| FFT_OUT_OF_PLACE,
+		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+  cp.f_hat=ip.f_hat_iter;
+
+  /* set up data in cp and cp_y */
+  fp=fopen("input_data.dat","r");
+  for(j=0;j<cp.M_total;j++)
+    {
+      fscanf(fp,"%le %le %le",&cp.x[2*j+0],&cp.x[2*j+1],&tmp_y);
+      cp_y[j]=tmp_y;
+    }
+  fclose(fp);
+
+  /* copy part of the data to p and ip */
+  for(j=0;j<p.M_total;j++)
+  {
+      p.x[2*j+0]=cp.x[2*j+0];
+      p.x[2*j+1]=cp.x[2*j+1];
+      ip.y[j]=tmp_y;
+  }
+
+  /* precompute psi */
+  if(p.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&p);
+
+  /* precompute psi */
+  if(cp.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&cp);
+
+  /* initialise damping factors */
+  if(ip.flags & PRECOMPUTE_DAMP)
+    for(k0=0;k0<p.N[0];k0++)
+      for(k1=0;k1<p.N[1];k1++)
+        ip.w_hat[k0*p.N[1]+k1]=
+	    my_weight(((double)(k0-p.N[0]/2))/p.N[0],0.5,3,0.001)*
+	    my_weight(((double)(k1-p.N[1]/2))/p.N[1],0.5,3,0.001);
+
+  /* init some guess */
+  for(k=0;k<p.N_total;k++)
+      ip.f_hat_iter[k]=0;
+
+  /* inverse trafo */
+  solver_before_loop_complex(&ip);
+  //  fprintf(stderr,"iteration starts,\t");
+  for(l=0;l<40;l++)
+    solver_loop_one_step_complex(&ip);
+
+  //fprintf(stderr,"r=%1.2e, ",sqrt(ip.dot_r_iter)/M_re);
+
+  NFFT_SWAP_complex(p.f_hat,ip.f_hat_iter);
+  nfft_trafo(&p);
+  NFFT_SWAP_complex(p.f_hat,ip.f_hat_iter);
+  nfft_upd_axpy_complex(p.f,-1,ip.y,M_re);
+  r=sqrt(nfft_dot_complex(p.f,M_re)/nfft_dot_complex(cp_y,M));
+  fprintf(stderr,"r=%1.2e, ",r);
+  printf("$%1.1e$ & ",r);
+
+  nfft_trafo(&cp);
+  nfft_upd_axpy_complex(&cp.f[M_re],-1,&cp_y[M_re],M_cv);
+  r=sqrt(nfft_dot_complex(&cp.f[M_re],M_cv)/nfft_dot_complex(cp_y,M));
+  fprintf(stderr,"r_1=%1.2e\t",r);
+  printf("$%1.1e$ & ",r);
+
+  nfft_finalize(&cp);
+  solver_finalize_complex(&ip);
+  nfft_finalize(&p);
+}
+
+
+/** Main routine */
+int main(int argc, char **argv)
+{
+  int M_cv;
+
+  if(argc<3)
+    {
+      fprintf(stderr,"Call this program from the Matlab script glacier.m!");
+      exit(-1);
+    }
+
+  if(argc==3)
+    glacier(atoi(argv[1]),atoi(argv[2]));
+  else
+    for(M_cv=atoi(argv[3]);M_cv<=atoi(argv[5]);M_cv+=atoi(argv[4]))
+      {
+	fprintf(stderr,"\nM_cv=%d,\t",M_cv);
+	printf("$%d$ & ",M_cv);
+	fprintf(stderr,"cgne+damp: ");
+	glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE| PRECOMPUTE_DAMP);
+	//fprintf(stderr,"cgne: ");
+	//glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE);
+	fprintf(stderr,"cgnr: ");
+	glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNR);
+	fprintf(stderr,"cgnr: ");
+	glacier_cv(atoi(argv[1])/4,atoi(argv[2]),M_cv,CGNR);
+	printf("XXX \\\\\n");
+      }
+
+  fprintf(stderr,"\n");
+
+  return 1;
+}
+/* \} */
diff --git a/examples/solver/glacier.m b/examples/solver/glacier.m
new file mode 100644
index 0000000..c55e702
--- /dev/null
+++ b/examples/solver/glacier.m
@@ -0,0 +1,63 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: glacier.m 3776 2012-06-03 13:29:25Z keiner $
+N=256;
+border_eps=0.1;
+
+M=8345;
+
+load vol87.dat -ascii
+input_data=vol87(2:end,:);
+
+x_range=max(input_data(:,1))-min(input_data(:,1));
+input_data(:,1)=(input_data(:,1)-min(input_data(:,1))) /x_range*(1-2*border_eps)-0.5+border_eps;
+
+y_range=max(input_data(:,2))-min(input_data(:,2));
+input_data(:,2)=(input_data(:,2)-min(input_data(:,2))) /y_range*(1-2*border_eps)-0.5+border_eps;
+
+save input_data.dat -ascii -double -tabs input_data
+
+system(sprintf('./glacier %d %d > output_data.dat',N,M));
+
+load output_data.dat
+f_hat=output_data(:,1)+i*output_data(:,2);
+
+figure(1);
+C=ifftshift(real(fft2(fftshift(reshape(f_hat,N,N)))));
+x=-0.5:1/N:0.5-1/N;
+[X,Y]=meshgrid(x,x);
+Border=ceil(border_eps*N);
+X=X(Border+1:N-Border,Border+1:N-Border);
+Y=Y(Border+1:N-Border,Border+1:N-Border);
+C=C(Border+1:N-Border,Border+1:N-Border);
+surfl(X,Y,C);
+axis([-0.5+border_eps,0.5-border_eps,-0.5+border_eps,0.5-border_eps,min(input_data(:,3)),max(C(:))]);
+colormap(bone);
+shading interp
+axis off
+view([30,30])
+print glacier1.eps -deps
+
+figure(2);
+contour(X,Y,C,sort(input_data(:,3)));
+axis([-0.5+border_eps,0.5-border_eps,-0.5+border_eps,0.5-border_eps]);
+axis off
+hold on
+plot(input_data(:,1),input_data(:,2),'k.');
+colormap(gray(256));
+hold off
+print glacier2.eps -deps
diff --git a/examples/solver/glacier_cv.m b/examples/solver/glacier_cv.m
new file mode 100644
index 0000000..de7716d
--- /dev/null
+++ b/examples/solver/glacier_cv.m
@@ -0,0 +1,42 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: glacier_cv.m 3776 2012-06-03 13:29:25Z keiner $
+N=256;
+border_eps=0.1;
+
+M=8345;
+
+load vol87.dat -ascii
+input_data=vol87(2:end,:);
+
+x_range=max(input_data(:,1))-min(input_data(:,1));
+input_data(:,1)=(input_data(:,1)-min(input_data(:,1))) /x_range*(1-2*border_eps)-0.5+border_eps;
+
+y_range=max(input_data(:,2))-min(input_data(:,2));
+input_data(:,2)=(input_data(:,2)-min(input_data(:,2))) /y_range*(1-2*border_eps)-0.5+border_eps;
+
+% Resort samples randomly
+P=randperm(M);
+input_data=input_data(P,:);
+
+M_cv_start=200;
+M_cv_step=200;
+M_cv_end=1000;
+
+save input_data.dat -ascii -double -tabs input_data
+
+system(sprintf('./glacier %d %d %d %d %d > output_data_cv.tex',N,M,M_cv_start,M_cv_step,M_cv_end));
diff --git a/examples/solver/simple_test.c b/examples/solver/simple_test.c
new file mode 100644
index 0000000..995a78b
--- /dev/null
+++ b/examples/solver/simple_test.c
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/* void simple_test_infft_1d(int N, int M, int iter) */
+/* { */
+/*   int k,l;                            /\**< index for nodes, freqencies,iter*\/ */
+/*   nfft_plan p;                          /\**< plan for the nfft               *\/ */
+/*   infft_plan ip;                        /\**< plan for the inverse nfft       *\/ */
+
+/*   /\** initialise an one dimensional plan *\/ */
+/*   nfft_init_1d(&p, N, M); */
+
+/*   /\** init pseudo random nodes *\/ */
+/*   nfft_vrand_shifted_unit_double(p.x,p.M_total); */
+
+/*   /\** precompute psi, the entries of the matrix B *\/ */
+/*   if(p.nfft_flags & PRE_ONE_PSI) */
+/*     nfft_precompute_one_psi(&p); */
+
+/*   /\** initialise inverse plan *\/ */
+/*   infft_init(&ip,&p); */
+
+/*   /\** init pseudo random samples and show them *\/ */
+/*   nfft_vrand_unit_complex(ip.y,p.M_total); */
+/*   nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y"); */
+
+/*   /\** initialise some guess f_hat_0 and solve *\/ */
+/*   for(k=0;k<p.N_total;k++) */
+/*       ip.f_hat_iter[k]=0; */
+
+/*   nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter"); */
+
+/*   NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/*   nfft_trafo(&p); */
+/*   nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */
+/*   NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+
+/*   infft_before_loop(&ip); */
+/*   printf("\n Residual r=%e\n",ip.dot_r_iter); */
+
+/*   for(l=0;l<iter;l++) */
+/*     { */
+/*       printf("\n********** Iteration l=%d **********\n",l); */
+/*       infft_loop_one_step(&ip); */
+/*       nfft_vpr_complex(ip.f_hat_iter,p.N_total, */
+/* 		  "Approximate solution, vector f_hat_iter"); */
+
+/*       NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/*       nfft_trafo(&p); */
+/*       nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */
+/*       NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+
+/*       printf("\n Residual r=%e\n",ip.dot_r_iter); */
+/*     } */
+
+/*   infft_finalize(&ip); */
+/*   nfft_finalize(&p); */
+/* } */
+
+/** Simple test routine for the inverse nfft */
+static void simple_test_solver_nfft_1d(int N, int M, int iter)
+{
+  int k,l;                            /**< index for nodes, freqencies,iter*/
+  nfft_plan p;                          /**< plan for the nfft               */
+  solver_plan_complex ip;                        /**< plan for the inverse nfft       */
+
+  /** initialise an one dimensional plan */
+  nfft_init_1d(&p, N, M);
+
+  /** init pseudo random nodes */
+  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+  /** precompute psi, the entries of the matrix B */
+  if(p.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&p);
+
+  /** initialise inverse plan */
+  solver_init_complex(&ip,(nfft_mv_plan_complex*)(&p));
+
+  /** init pseudo random samples and show them */
+  nfft_vrand_unit_complex(ip.y,p.M_total);
+  nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y");
+
+  /** initialise some guess f_hat_0 and solve */
+  for(k=0;k<p.N_total;k++)
+      ip.f_hat_iter[k]=0;
+
+  nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter");
+
+  NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+  nfft_trafo(&p);
+  nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f");
+  NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+
+  solver_before_loop_complex(&ip);
+  printf("\n Residual r=%e\n",ip.dot_r_iter);
+
+  for(l=0;l<iter;l++)
+    {
+      printf("\n********** Iteration l=%d **********\n",l);
+      solver_loop_one_step_complex(&ip);
+      nfft_vpr_complex(ip.f_hat_iter,p.N_total,
+		  "Approximate solution, vector f_hat_iter");
+
+      NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+      nfft_trafo(&p);
+      nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f");
+      NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+
+      printf("\n Residual r=%e\n",ip.dot_r_iter);
+    }
+
+  solver_finalize_complex(&ip);
+  nfft_finalize(&p);
+}
+
+/** Main routine */
+int main(void)
+{
+  printf("\n Computing a one dimensional inverse nfft\n");
+
+  simple_test_solver_nfft_1d(8,4,5);
+
+  return 1;
+}
+/* \} */
diff --git a/examples/solver/vol87.dat b/examples/solver/vol87.dat
new file mode 100644
index 0000000..efe2c83
--- /dev/null
+++ b/examples/solver/vol87.dat
@@ -0,0 +1,8346 @@
+3	8345	16
+13.966	3.319	1300
+13.963	3.318	1300
+13.938	3.369	1300
+13.920	3.424	1300
+13.907	3.483	1300
+13.892	3.535	1300
+13.877	3.588	1300
+13.866	3.639	1300
+13.858	3.692	1300
+13.866	3.746	1300
+13.893	3.797	1300
+13.907	3.850	1300
+13.918	3.902	1300
+13.919	3.956	1300
+13.910	4.007	1300
+13.915	4.059	1300
+13.929	4.110	1300
+13.923	4.164	1300
+13.908	4.214	1300
+13.902	4.269	1300
+13.952	4.316	1300
+13.981	4.367	1300
+13.993	4.419	1300
+14.007	4.469	1300
+14.014	4.525	1300
+14.029	4.578	1300
+14.080	4.588	1300
+14.131	4.546	1300
+14.150	4.494	1300
+14.170	4.442	1300
+14.224	4.404	1300
+14.264	4.351	1300
+14.269	4.300	1300
+14.282	4.249	1300
+14.323	4.196	1300
+14.359	4.145	1300
+14.397	4.095	1300
+14.405	4.044	1300
+14.419	3.993	1300
+14.470	3.944	1300
+14.480	3.893	1300
+14.495	3.839	1300
+14.523	3.789	1300
+14.525	3.735	1300
+14.526	3.679	1300
+14.538	3.625	1300
+14.540	3.575	1300
+14.596	3.573	1300
+14.647	3.580	1300
+14.699	3.594	1300
+14.751	3.578	1300
+14.750	3.526	1300
+14.767	3.472	1300
+14.810	3.420	1300
+14.803	3.369	1300
+14.855	3.353	1300
+14.907	3.357	1300
+14.958	3.350	1300
+15.009	3.360	1300
+15.059	3.326	1300
+13.785	3.306	1325
+13.785	3.306	1325
+13.798	3.357	1325
+13.807	3.410	1325
+13.799	3.465	1325
+13.792	3.518	1325
+13.785	3.568	1325
+13.768	3.621	1325
+13.748	3.673	1325
+13.730	3.726	1325
+13.706	3.782	1325
+13.684	3.835	1325
+13.673	3.886	1325
+13.659	3.939	1325
+13.647	3.993	1325
+13.640	4.047	1325
+13.640	4.101	1325
+13.648	4.157	1325
+13.652	4.210	1325
+13.650	4.268	1325
+13.643	4.322	1325
+13.639	4.375	1325
+13.634	4.433	1325
+13.625	4.484	1325
+13.601	4.538	1325
+13.586	4.594	1325
+13.577	4.650	1325
+13.573	4.702	1325
+13.591	4.753	1325
+13.629	4.805	1325
+13.646	4.857	1325
+13.653	4.907	1325
+13.643	4.960	1325
+13.619	5.011	1325
+13.614	5.062	1325
+13.624	5.115	1325
+13.619	5.167	1325
+13.596	5.217	1325
+13.591	5.268	1325
+13.605	5.318	1325
+13.618	5.369	1325
+13.637	5.424	1325
+13.650	5.477	1325
+13.659	5.531	1325
+13.677	5.588	1325
+13.705	5.641	1325
+13.700	5.691	1325
+13.665	5.742	1325
+13.674	5.796	1325
+13.728	5.846	1325
+13.780	5.869	1325
+13.833	5.897	1325
+13.884	5.924	1325
+13.939	5.933	1325
+13.992	5.926	1325
+14.044	5.935	1325
+14.095	5.959	1325
+14.148	5.924	1325
+14.203	5.897	1325
+14.255	5.896	1325
+14.305	5.863	1325
+14.322	5.811	1325
+14.336	5.757	1325
+14.351	5.706	1325
+14.371	5.654	1325
+14.408	5.602	1325
+14.448	5.551	1325
+14.463	5.497	1325
+14.462	5.443	1325
+14.464	5.392	1325
+14.485	5.340	1325
+14.504	5.288	1325
+14.532	5.235	1325
+14.555	5.183	1325
+14.572	5.128	1325
+14.583	5.075	1325
+14.591	5.022	1325
+14.608	4.970	1325
+14.640	4.919	1325
+14.660	4.868	1325
+14.672	4.812	1325
+14.679	4.761	1325
+14.694	4.706	1325
+14.745	4.659	1325
+14.796	4.647	1325
+14.815	4.592	1325
+14.806	4.538	1325
+14.788	4.485	1325
+14.772	4.433	1325
+14.760	4.380	1325
+14.746	4.326	1325
+14.798	4.296	1325
+14.822	4.245	1325
+14.832	4.192	1325
+14.837	4.138	1325
+14.838	4.082	1325
+14.866	4.031	1325
+14.918	4.042	1325
+14.968	4.075	1325
+15.019	4.087	1325
+15.055	4.034	1325
+15.019	3.978	1325
+15.030	3.927	1325
+15.063	3.876	1325
+15.106	3.825	1325
+15.127	3.773	1325
+15.139	3.721	1325
+15.161	3.669	1325
+15.211	3.695	1325
+15.263	3.655	1325
+15.314	3.638	1325
+15.369	3.630	1325
+15.328	3.577	1325
+15.322	3.526	1325
+15.351	3.472	1325
+15.355	3.421	1325
+15.405	3.382	1325
+15.409	3.330	1325
+13.629	3.310	1350
+13.627	3.310	1350
+13.625	3.365	1350
+13.629	3.416	1350
+13.624	3.470	1350
+13.610	3.525	1350
+13.603	3.579	1350
+13.598	3.635	1350
+13.585	3.691	1350
+13.566	3.742	1350
+13.537	3.793	1350
+13.517	3.847	1350
+13.508	3.900	1350
+13.505	3.956	1350
+13.506	4.009	1350
+13.464	4.060	1350
+13.455	4.112	1350
+13.491	4.163	1350
+13.504	4.215	1350
+13.504	4.265	1350
+13.499	4.321	1350
+13.492	4.373	1350
+13.480	4.427	1350
+13.472	4.477	1350
+13.469	4.530	1350
+13.462	4.585	1350
+13.455	4.641	1350
+13.451	4.693	1350
+13.445	4.747	1350
+13.441	4.799	1350
+13.432	4.855	1350
+13.426	4.906	1350
+13.417	4.956	1350
+13.393	5.009	1350
+13.368	5.062	1350
+13.351	5.116	1350
+13.323	5.169	1350
+13.309	5.223	1350
+13.301	5.279	1350
+13.304	5.329	1350
+13.312	5.383	1350
+13.319	5.433	1350
+13.329	5.486	1350
+13.334	5.540	1350
+13.325	5.593	1350
+13.332	5.645	1350
+13.331	5.698	1350
+13.336	5.749	1350
+13.328	5.800	1350
+13.323	5.850	1350
+13.315	5.903	1350
+13.315	5.954	1350
+13.317	6.007	1350
+13.329	6.059	1350
+13.332	6.071	1350
+13.382	6.090	1350
+13.434	6.108	1350
+13.486	6.127	1350
+13.536	6.148	1350
+13.586	6.174	1350
+13.636	6.203	1350
+13.688	6.244	1350
+13.739	6.285	1350
+13.791	6.310	1350
+13.845	6.335	1350
+13.895	6.376	1350
+13.926	6.429	1350
+13.960	6.479	1350
+13.987	6.530	1350
+14.040	6.523	1350
+14.090	6.519	1350
+14.140	6.526	1350
+14.193	6.530	1350
+14.191	6.533	1350
+14.240	6.478	1350
+14.263	6.427	1350
+14.289	6.377	1350
+14.317	6.324	1350
+14.359	6.271	1350
+14.411	6.243	1350
+14.456	6.190	1350
+14.476	6.135	1350
+14.506	6.083	1350
+14.540	6.031	1350
+14.566	5.980	1350
+14.599	5.922	1350
+14.631	5.868	1350
+14.650	5.815	1350
+14.666	5.762	1350
+14.696	5.708	1350
+14.719	5.658	1350
+14.738	5.604	1350
+14.757	5.553	1350
+14.775	5.503	1350
+14.794	5.452	1350
+14.826	5.402	1350
+14.861	5.349	1350
+14.888	5.295	1350
+14.914	5.242	1350
+14.938	5.191	1350
+14.956	5.137	1350
+14.974	5.081	1350
+14.986	5.031	1350
+14.991	4.980	1350
+15.001	4.927	1350
+15.013	4.875	1350
+15.025	4.821	1350
+15.040	4.766	1350
+15.054	4.712	1350
+15.072	4.657	1350
+15.083	4.605	1350
+15.100	4.555	1350
+15.119	4.502	1350
+15.164	4.451	1350
+15.183	4.395	1350
+15.188	4.343	1350
+15.191	4.288	1350
+15.201	4.235	1350
+15.237	4.183	1350
+15.268	4.130	1350
+15.290	4.075	1350
+15.298	4.023	1350
+15.308	3.971	1350
+15.317	3.919	1350
+15.330	3.868	1350
+15.381	3.854	1350
+15.403	3.907	1350
+15.384	3.960	1350
+15.364	4.016	1350
+15.350	4.068	1350
+15.346	4.119	1350
+15.365	4.171	1350
+15.418	4.196	1350
+15.430	4.143	1350
+15.437	4.090	1350
+15.484	4.040	1350
+15.516	3.987	1350
+15.530	3.935	1350
+15.539	3.880	1350
+15.552	3.827	1350
+15.558	3.776	1350
+15.572	3.725	1350
+15.560	3.673	1350
+15.549	3.619	1350
+15.544	3.565	1350
+15.542	3.514	1350
+15.553	3.463	1350
+15.571	3.413	1350
+15.566	3.360	1350
+15.562	3.307	1350
+13.458	3.310	1375
+13.457	3.310	1375
+13.457	3.363	1375
+13.471	3.414	1375
+13.471	3.464	1375
+13.465	3.516	1375
+13.450	3.568	1375
+13.432	3.619	1375
+13.416	3.674	1375
+13.389	3.728	1375
+13.370	3.779	1375
+13.356	3.830	1375
+13.337	3.882	1375
+13.323	3.933	1375
+13.305	3.987	1375
+13.291	4.037	1375
+13.274	4.087	1375
+13.268	4.138	1375
+13.318	4.136	1375
+13.355	4.189	1375
+13.351	4.242	1375
+13.329	4.297	1375
+13.315	4.355	1375
+13.303	4.407	1375
+13.302	4.459	1375
+13.311	4.513	1375
+13.315	4.565	1375
+13.300	4.619	1375
+13.284	4.672	1375
+13.279	4.726	1375
+13.277	4.780	1375
+13.274	4.833	1375
+13.268	4.888	1375
+13.257	4.939	1375
+13.253	4.990	1375
+13.243	5.043	1375
+13.227	5.094	1375
+13.203	5.145	1375
+13.198	5.195	1375
+13.183	5.247	1375
+13.146	5.297	1375
+13.148	5.352	1375
+13.153	5.410	1375
+13.147	5.465	1375
+13.146	5.516	1375
+13.150	5.567	1375
+13.157	5.618	1375
+13.162	5.668	1375
+13.168	5.720	1375
+13.164	5.774	1375
+13.160	5.826	1375
+13.154	5.878	1375
+13.149	5.929	1375
+13.143	5.981	1375
+13.135	6.033	1375
+13.127	6.085	1375
+13.127	6.137	1375
+13.130	6.189	1375
+13.133	6.242	1375
+13.121	6.293	1375
+13.112	6.345	1375
+13.114	6.377	1375
+13.146	6.395	1375
+13.196	6.431	1375
+13.249	6.462	1375
+13.301	6.490	1375
+13.353	6.523	1375
+13.403	6.550	1375
+13.453	6.572	1375
+13.503	6.607	1375
+13.556	6.652	1375
+13.606	6.697	1375
+13.659	6.745	1375
+13.704	6.795	1375
+13.728	6.848	1375
+13.752	6.900	1375
+13.781	6.954	1375
+13.810	7.007	1375
+13.852	7.059	1375
+13.898	7.109	1375
+13.948	7.137	1375
+13.999	7.174	1375
+14.000	7.093	1375
+14.036	7.042	1375
+14.070	6.990	1375
+14.099	6.938	1375
+14.150	6.893	1375
+14.200	6.894	1375
+14.250	6.850	1375
+14.300	6.799	1375
+14.336	6.746	1375
+14.377	6.695	1375
+14.412	6.645	1375
+14.451	6.594	1375
+14.465	6.543	1375
+14.478	6.491	1375
+14.518	6.437	1375
+14.551	6.386	1375
+14.571	6.330	1375
+14.597	6.278	1375
+14.645	6.223	1375
+14.686	6.172	1375
+14.724	6.119	1375
+14.755	6.069	1375
+14.779	6.011	1375
+14.799	5.961	1375
+14.819	5.907	1375
+14.834	5.855	1375
+14.858	5.802	1375
+14.882	5.751	1375
+14.909	5.701	1375
+14.934	5.647	1375
+14.956	5.593	1375
+14.980	5.538	1375
+15.007	5.485	1375
+15.034	5.432	1375
+15.053	5.377	1375
+15.070	5.326	1375
+15.094	5.272	1375
+15.132	5.221	1375
+15.150	5.171	1375
+15.161	5.116	1375
+15.177	5.059	1375
+15.189	5.007	1375
+15.198	4.955	1375
+15.209	4.902	1375
+15.224	4.849	1375
+15.244	4.796	1375
+15.263	4.745	1375
+15.284	4.691	1375
+15.320	4.640	1375
+15.365	4.590	1375
+15.415	4.568	1375
+15.468	4.557	1375
+15.516	4.506	1375
+15.557	4.453	1375
+15.575	4.399	1375
+15.569	4.347	1375
+15.565	4.295	1375
+15.562	4.243	1375
+15.569	4.192	1375
+15.585	4.141	1375
+15.630	4.091	1375
+15.649	4.037	1375
+15.656	3.987	1375
+15.689	3.933	1375
+15.719	3.882	1375
+15.751	3.829	1375
+15.780	3.775	1375
+15.801	3.722	1375
+15.825	3.667	1375
+15.845	3.612	1375
+15.856	3.561	1375
+15.860	3.505	1375
+15.858	3.451	1375
+15.854	3.399	1375
+15.866	3.347	1375
+13.278	3.306	1400
+13.277	3.305	1400
+13.281	3.356	1400
+13.283	3.411	1400
+13.277	3.463	1400
+13.276	3.514	1400
+13.276	3.568	1400
+13.256	3.625	1400
+13.240	3.679	1400
+13.223	3.735	1400
+13.211	3.787	1400
+13.200	3.838	1400
+13.187	3.890	1400
+13.176	3.946	1400
+13.168	3.997	1400
+13.170	4.047	1400
+13.116	4.069	1400
+13.066	4.069	1400
+13.088	4.122	1400
+13.124	4.177	1400
+13.135	4.235	1400
+13.136	4.292	1400
+13.135	4.346	1400
+13.133	4.403	1400
+13.131	4.458	1400
+13.130	4.518	1400
+13.127	4.574	1400
+13.121	4.628	1400
+13.112	4.680	1400
+13.106	4.734	1400
+13.102	4.785	1400
+13.096	4.840	1400
+13.083	4.893	1400
+13.068	4.946	1400
+13.054	4.996	1400
+13.003	5.045	1400
+12.988	5.100	1400
+13.012	5.151	1400
+13.013	5.202	1400
+12.996	5.256	1400
+12.972	5.306	1400
+12.988	5.356	1400
+13.006	5.412	1400
+13.012	5.464	1400
+13.017	5.517	1400
+13.009	5.573	1400
+12.993	5.626	1400
+13.000	5.682	1400
+13.008	5.733	1400
+12.999	5.783	1400
+12.984	5.833	1400
+12.972	5.889	1400
+12.960	5.942	1400
+12.948	5.997	1400
+12.940	6.048	1400
+12.934	6.104	1400
+12.925	6.161	1400
+12.918	6.211	1400
+12.903	6.262	1400
+12.888	6.316	1400
+12.868	6.369	1400
+12.828	6.423	1400
+12.789	6.474	1400
+12.770	6.524	1400
+13.761	7.639	1400
+13.761	7.645	1400
+13.814	7.597	1400
+13.867	7.547	1400
+13.916	7.493	1400
+13.955	7.439	1400
+13.994	7.385	1400
+14.035	7.333	1400
+14.082	7.279	1400
+14.136	7.238	1400
+14.189	7.192	1400
+14.234	7.140	1400
+14.277	7.086	1400
+14.317	7.029	1400
+14.364	6.973	1400
+14.412	6.921	1400
+14.455	6.868	1400
+14.495	6.814	1400
+14.531	6.764	1400
+14.566	6.711	1400
+14.596	6.658	1400
+14.623	6.606	1400
+14.651	6.554	1400
+14.676	6.502	1400
+14.703	6.450	1400
+14.726	6.398	1400
+14.750	6.340	1400
+14.777	6.285	1400
+14.799	6.235	1400
+14.834	6.183	1400
+14.844	6.130	1400
+14.861	6.075	1400
+14.900	6.023	1400
+14.934	5.971	1400
+14.961	5.920	1400
+14.961	5.867	1400
+14.972	5.816	1400
+15.022	5.778	1400
+15.048	5.728	1400
+15.055	5.675	1400
+15.061	5.620	1400
+15.086	5.566	1400
+15.119	5.513	1400
+15.170	5.462	1400
+15.214	5.410	1400
+15.250	5.357	1400
+15.280	5.307	1400
+15.292	5.256	1400
+15.301	5.202	1400
+15.318	5.149	1400
+15.343	5.097	1400
+15.367	5.045	1400
+15.404	4.995	1400
+15.457	4.949	1400
+15.504	4.896	1400
+15.556	4.890	1400
+15.607	4.875	1400
+15.654	4.822	1400
+15.673	4.768	1400
+15.689	4.715	1400
+15.694	4.662	1400
+15.691	4.611	1400
+15.698	4.561	1400
+15.750	4.545	1400
+15.772	4.491	1400
+15.788	4.439	1400
+15.803	4.386	1400
+15.817	4.336	1400
+15.834	4.279	1400
+15.858	4.225	1400
+15.891	4.171	1400
+15.927	4.115	1400
+15.961	4.061	1400
+16.003	4.007	1400
+16.049	3.957	1400
+16.083	3.904	1400
+16.093	3.852	1400
+16.096	3.796	1400
+16.113	3.743	1400
+16.133	3.692	1400
+16.143	3.640	1400
+16.135	3.581	1400
+16.139	3.530	1400
+16.158	3.478	1400
+16.169	3.425	1400
+16.188	3.371	1400
+16.208	3.317	1400
+12.762	6.559	1400
+12.762	6.560	1400
+12.781	6.614	1400
+12.805	6.665	1400
+12.844	6.717	1400
+12.896	6.766	1400
+12.949	6.803	1400
+12.999	6.842	1400
+13.049	6.880	1400
+13.102	6.917	1400
+13.157	6.959	1400
+13.209	7.004	1400
+13.264	7.049	1400
+13.319	7.094	1400
+13.369	7.144	1400
+13.420	7.192	1400
+13.466	7.242	1400
+13.515	7.293	1400
+13.549	7.345	1400
+13.567	7.397	1400
+13.584	7.449	1400
+13.605	7.499	1400
+13.632	7.550	1400
+13.661	7.600	1400
+13.711	7.627	1400
+13.143	3.300	1425
+13.141	3.302	1425
+13.148	3.356	1425
+13.131	3.411	1425
+13.121	3.464	1425
+13.117	3.517	1425
+13.113	3.570	1425
+13.106	3.624	1425
+13.101	3.675	1425
+13.073	3.728	1425
+13.054	3.782	1425
+13.050	3.834	1425
+13.066	3.887	1425
+13.044	3.941	1425
+13.006	3.994	1425
+12.956	4.037	1425
+12.905	4.068	1425
+12.854	4.105	1425
+12.908	4.142	1425
+12.959	4.179	1425
+13.002	4.235	1425
+13.007	4.289	1425
+13.005	4.339	1425
+12.998	4.393	1425
+12.992	4.443	1425
+12.983	4.499	1425
+12.973	4.554	1425
+12.965	4.609	1425
+12.961	4.660	1425
+12.953	4.712	1425
+12.945	4.765	1425
+12.940	4.822	1425
+12.926	4.872	1425
+12.892	4.924	1425
+12.860	4.977	1425
+12.818	5.028	1425
+12.782	5.080	1425
+12.829	5.131	1425
+12.849	5.182	1425
+12.836	5.233	1425
+12.827	5.284	1425
+12.818	5.337	1425
+12.835	5.389	1425
+12.855	5.445	1425
+12.864	5.496	1425
+12.872	5.548	1425
+12.868	5.598	1425
+12.863	5.653	1425
+12.860	5.704	1425
+12.848	5.758	1425
+12.841	5.808	1425
+12.835	5.862	1425
+12.831	5.913	1425
+12.819	5.969	1425
+12.799	6.024	1425
+12.785	6.077	1425
+12.777	6.130	1425
+12.762	6.184	1425
+12.743	6.237	1425
+12.713	6.292	1425
+12.690	6.342	1425
+12.665	6.395	1425
+12.634	6.445	1425
+12.607	6.499	1425
+12.579	6.551	1425
+12.557	6.608	1425
+12.543	6.659	1425
+12.525	6.717	1425
+12.506	6.769	1425
+12.487	6.819	1425
+12.485	6.881	1425
+12.482	6.882	1425
+12.467	6.935	1425
+12.488	6.987	1425
+12.517	7.040	1425
+12.566	7.090	1425
+12.617	7.145	1425
+12.665	7.195	1425
+12.715	7.236	1425
+12.766	7.276	1425
+12.818	7.318	1425
+12.872	7.360	1425
+12.925	7.406	1425
+12.962	7.458	1425
+12.991	7.509	1425
+13.021	7.565	1425
+13.050	7.617	1425
+13.102	7.666	1425
+13.155	7.702	1425
+13.208	7.729	1425
+13.263	7.751	1425
+13.317	7.782	1425
+13.368	7.812	1425
+13.411	7.867	1425
+13.444	7.920	1425
+13.471	7.972	1425
+13.492	8.023	1425
+13.543	8.043	1425
+13.556	8.093	1425
+13.565	8.105	1425
+13.608	8.090	1425
+13.661	8.054	1425
+13.712	8.007	1425
+13.755	7.956	1425
+13.803	7.903	1425
+13.854	7.854	1425
+13.907	7.802	1425
+13.947	7.752	1425
+13.986	7.701	1425
+14.029	7.650	1425
+14.082	7.606	1425
+14.133	7.560	1425
+14.134	7.509	1425
+14.184	7.488	1425
+14.234	7.456	1425
+14.251	7.403	1425
+14.277	7.353	1425
+14.275	7.300	1425
+14.311	7.245	1425
+14.351	7.194	1425
+14.389	7.143	1425
+14.429	7.090	1425
+14.469	7.035	1425
+14.517	6.982	1425
+14.570	6.947	1425
+14.620	6.902	1425
+14.653	6.847	1425
+14.676	6.794	1425
+14.694	6.738	1425
+14.717	6.685	1425
+14.738	6.632	1425
+14.758	6.580	1425
+14.784	6.528	1425
+14.817	6.478	1425
+14.853	6.426	1425
+14.886	6.375	1425
+14.926	6.323	1425
+14.976	6.292	1425
+15.009	6.238	1425
+15.022	6.185	1425
+15.055	6.133	1425
+15.088	6.078	1425
+15.117	6.027	1425
+15.153	5.976	1425
+15.186	5.924	1425
+15.221	5.874	1425
+15.235	5.822	1425
+15.216	5.771	1425
+15.248	5.718	1425
+15.290	5.667	1425
+15.344	5.612	1425
+15.397	5.572	1425
+15.451	5.540	1425
+15.504	5.504	1425
+15.556	5.464	1425
+15.608	5.421	1425
+15.649	5.370	1425
+15.684	5.319	1425
+15.735	5.290	1425
+15.775	5.235	1425
+15.793	5.178	1425
+15.813	5.121	1425
+15.838	5.070	1425
+15.860	5.017	1425
+15.884	4.961	1425
+15.911	4.908	1425
+15.933	4.857	1425
+15.954	4.807	1425
+15.976	4.749	1425
+16.000	4.695	1425
+16.026	4.644	1425
+16.048	4.593	1425
+16.070	4.537	1425
+16.092	4.480	1425
+16.110	4.430	1425
+16.128	4.370	1425
+16.143	4.317	1425
+16.160	4.263	1425
+16.176	4.209	1425
+16.202	4.157	1425
+16.234	4.104	1425
+16.264	4.054	1425
+16.289	4.004	1425
+16.318	3.947	1425
+16.346	3.896	1425
+16.360	3.845	1425
+16.363	3.787	1425
+16.367	3.736	1425
+16.362	3.681	1425
+16.361	3.628	1425
+16.364	3.575	1425
+16.391	3.520	1425
+16.429	3.466	1425
+16.464	3.413	1425
+16.479	3.358	1425
+12.995	3.331	1450
+12.994	3.331	1450
+12.976	3.385	1450
+12.973	3.437	1450
+12.968	3.490	1450
+12.962	3.544	1450
+12.960	3.595	1450
+12.954	3.649	1450
+12.925	3.702	1450
+12.907	3.756	1450
+12.913	3.808	1450
+12.913	3.860	1450
+12.884	3.913	1450
+12.831	3.953	1450
+12.779	3.984	1450
+12.728	4.022	1450
+12.677	4.049	1450
+12.633	4.101	1450
+12.683	4.116	1450
+12.733	4.156	1450
+12.786	4.196	1450
+12.839	4.237	1450
+12.878	4.288	1450
+12.880	4.343	1450
+12.866	4.395	1450
+12.846	4.451	1450
+12.839	4.503	1450
+12.828	4.558	1450
+12.815	4.617	1450
+12.810	4.669	1450
+12.806	4.724	1450
+12.792	4.775	1450
+12.773	4.829	1450
+12.760	4.880	1450
+12.733	4.933	1450
+12.681	4.984	1450
+12.630	5.033	1450
+12.590	5.083	1450
+12.604	5.134	1450
+12.655	5.150	1450
+12.707	5.169	1450
+12.727	5.221	1450
+12.693	5.275	1450
+12.666	5.325	1450
+12.660	5.375	1450
+12.671	5.429	1450
+12.684	5.481	1450
+12.699	5.532	1450
+12.714	5.588	1450
+12.720	5.642	1450
+12.719	5.693	1450
+12.720	5.747	1450
+12.715	5.798	1450
+12.705	5.848	1450
+12.692	5.899	1450
+12.677	5.953	1450
+12.659	6.003	1450
+12.633	6.056	1450
+12.604	6.110	1450
+12.584	6.161	1450
+12.557	6.211	1450
+12.537	6.263	1450
+12.520	6.315	1450
+12.505	6.367	1450
+12.483	6.418	1450
+12.455	6.473	1450
+12.423	6.525	1450
+12.393	6.581	1450
+12.369	6.633	1450
+12.343	6.683	1450
+12.318	6.736	1450
+12.299	6.789	1450
+12.283	6.840	1450
+12.263	6.893	1450
+12.245	6.946	1450
+12.238	6.996	1450
+12.210	7.050	1450
+12.164	7.100	1450
+12.113	7.142	1450
+12.074	7.195	1450
+12.060	7.256	1450
+12.054	7.251	1450
+12.022	7.303	1450
+12.033	7.355	1450
+12.068	7.406	1450
+12.115	7.459	1450
+12.168	7.513	1450
+12.211	7.566	1450
+12.256	7.619	1450
+12.299	7.675	1450
+12.344	7.731	1450
+12.384	7.783	1450
+12.426	7.834	1450
+12.472	7.892	1450
+12.525	7.946	1450
+12.577	7.986	1450
+12.627	8.016	1450
+12.683	8.046	1450
+12.739	8.077	1450
+12.792	8.101	1450
+12.845	8.127	1450
+12.900	8.151	1450
+12.950	8.169	1450
+13.000	8.191	1450
+13.054	8.226	1450
+13.109	8.263	1450
+13.161	8.319	1450
+13.187	8.372	1450
+13.211	8.424	1450
+13.220	8.478	1450
+13.229	8.529	1450
+13.248	8.581	1450
+13.278	8.632	1450
+13.317	8.674	1450
+13.331	8.659	1450
+13.362	8.604	1450
+13.405	8.554	1450
+13.457	8.514	1450
+13.510	8.474	1450
+13.560	8.429	1450
+13.606	8.379	1450
+13.648	8.325	1450
+13.678	8.274	1450
+13.715	8.223	1450
+13.766	8.179	1450
+13.817	8.144	1450
+13.871	8.096	1450
+13.914	8.043	1450
+13.946	7.992	1450
+13.974	7.939	1450
+14.009	7.887	1450
+14.050	7.836	1450
+14.102	7.811	1450
+14.154	7.787	1450
+14.198	7.733	1450
+14.241	7.680	1450
+14.291	7.633	1450
+14.332	7.581	1450
+14.372	7.529	1450
+14.403	7.478	1450
+14.416	7.425	1450
+14.424	7.372	1450
+14.448	7.321	1450
+14.499	7.271	1450
+14.550	7.225	1450
+14.603	7.169	1450
+14.639	7.115	1450
+14.670	7.063	1450
+14.704	7.006	1450
+14.739	6.953	1450
+14.771	6.900	1450
+14.804	6.846	1450
+14.842	6.793	1450
+14.885	6.741	1450
+14.932	6.687	1450
+14.986	6.652	1450
+15.035	6.601	1450
+15.046	6.550	1450
+15.058	6.497	1450
+15.088	6.444	1450
+15.116	6.392	1450
+15.144	6.337	1450
+15.174	6.279	1450
+15.214	6.224	1450
+15.265	6.172	1450
+15.318	6.127	1450
+15.360	6.075	1450
+15.392	6.024	1450
+15.427	5.971	1450
+15.482	5.971	1450
+15.522	5.920	1450
+15.548	5.868	1450
+15.573	5.814	1450
+15.610	5.760	1450
+15.659	5.707	1450
+15.712	5.668	1450
+15.764	5.621	1450
+15.807	5.570	1450
+15.842	5.518	1450
+15.872	5.466	1450
+15.912	5.411	1450
+15.955	5.356	1450
+15.989	5.302	1450
+16.012	5.249	1450
+16.034	5.198	1450
+16.060	5.148	1450
+16.089	5.097	1450
+16.116	5.044	1450
+16.148	4.990	1450
+16.171	4.940	1450
+16.193	4.887	1450
+16.214	4.836	1450
+16.240	4.779	1450
+16.260	4.724	1450
+16.272	4.673	1450
+16.288	4.620	1450
+16.305	4.560	1450
+16.321	4.509	1450
+16.338	4.456	1450
+16.357	4.404	1450
+16.371	4.351	1450
+16.390	4.296	1450
+16.412	4.245	1450
+16.443	4.191	1450
+16.466	4.141	1450
+16.492	4.090	1450
+16.526	4.038	1450
+16.566	3.983	1450
+16.596	3.930	1450
+16.596	3.876	1450
+16.599	3.825	1450
+16.592	3.774	1450
+16.592	3.721	1450
+16.617	3.669	1450
+16.650	3.613	1450
+16.690	3.559	1450
+16.713	3.507	1450
+16.727	3.450	1450
+16.737	3.396	1450
+16.751	3.344	1450
+12.841	3.322	1475
+12.839	3.322	1475
+12.812	3.375	1475
+12.812	3.428	1475
+12.825	3.481	1475
+12.831	3.538	1475
+12.826	3.588	1475
+12.820	3.641	1475
+12.785	3.693	1475
+12.778	3.746	1475
+12.765	3.799	1475
+12.733	3.853	1475
+12.688	3.907	1475
+12.637	3.953	1475
+12.585	3.993	1475
+12.534	4.010	1475
+12.484	4.038	1475
+12.475	4.090	1475
+12.467	4.140	1475
+12.517	4.165	1475
+12.567	4.190	1475
+12.618	4.226	1475
+12.668	4.265	1475
+12.720	4.306	1475
+12.739	4.357	1475
+12.741	4.410	1475
+12.734	4.465	1475
+12.721	4.523	1475
+12.711	4.577	1475
+12.700	4.631	1475
+12.688	4.685	1475
+12.676	4.739	1475
+12.660	4.795	1475
+12.638	4.846	1475
+12.600	4.900	1475
+12.550	4.941	1475
+12.499	4.970	1475
+12.448	5.015	1475
+12.413	5.066	1475
+12.408	5.123	1475
+12.442	5.174	1475
+12.462	5.226	1475
+12.444	5.277	1475
+12.457	5.329	1475
+12.497	5.383	1475
+12.522	5.437	1475
+12.491	5.488	1475
+12.485	5.540	1475
+12.522	5.592	1475
+12.558	5.644	1475
+12.578	5.694	1475
+12.578	5.745	1475
+12.579	5.798	1475
+12.594	5.850	1475
+12.613	5.905	1475
+12.607	5.957	1475
+12.556	6.008	1475
+12.525	6.062	1475
+12.502	6.114	1475
+12.477	6.164	1475
+12.451	6.214	1475
+12.428	6.270	1475
+12.403	6.321	1475
+12.383	6.373	1475
+12.360	6.429	1475
+12.336	6.480	1475
+12.307	6.532	1475
+12.275	6.586	1475
+12.241	6.639	1475
+12.209	6.693	1475
+12.176	6.744	1475
+12.141	6.799	1475
+12.107	6.854	1475
+12.075	6.907	1475
+12.048	6.963	1475
+12.019	7.013	1475
+11.988	7.069	1475
+11.954	7.120	1475
+11.916	7.172	1475
+11.869	7.224	1475
+11.827	7.275	1475
+11.781	7.328	1475
+11.740	7.378	1475
+11.700	7.432	1475
+11.660	7.485	1475
+11.613	7.536	1475
+11.591	7.588	1475
+11.577	7.604	1475
+11.580	7.643	1475
+11.587	7.695	1475
+11.601	7.746	1475
+11.612	7.798	1475
+11.617	7.852	1475
+11.640	7.908	1475
+11.677	7.961	1475
+11.728	8.009	1475
+11.755	8.059	1475
+11.773	8.111	1475
+11.804	8.162	1475
+11.856	8.194	1475
+11.912	8.230	1475
+11.958	8.282	1475
+12.010	8.335	1475
+12.061	8.378	1475
+12.111	8.420	1475
+12.163	8.471	1475
+12.218	8.519	1475
+12.268	8.554	1475
+12.323	8.574	1475
+12.374	8.595	1475
+12.426	8.617	1475
+12.482	8.639	1475
+12.539	8.665	1475
+12.589	8.688	1475
+12.640	8.713	1475
+12.696	8.731	1475
+12.747	8.750	1475
+12.799	8.775	1475
+12.855	8.813	1475
+12.886	8.863	1475
+12.915	8.917	1475
+12.939	8.973	1475
+12.952	9.027	1475
+12.960	9.080	1475
+12.973	9.135	1475
+12.975	9.185	1475
+12.984	9.238	1475
+12.994	9.289	1475
+13.001	9.305	1475
+13.050	9.288	1475
+13.102	9.258	1475
+13.157	9.236	1475
+13.208	9.183	1475
+13.237	9.133	1475
+13.257	9.080	1475
+13.295	9.026	1475
+13.337	8.976	1475
+13.385	8.923	1475
+13.426	8.868	1475
+13.457	8.815	1475
+13.509	8.773	1475
+13.537	8.721	1475
+13.576	8.668	1475
+13.620	8.615	1475
+13.663	8.565	1475
+13.717	8.521	1475
+13.767	8.481	1475
+13.819	8.430	1475
+13.872	8.379	1475
+13.923	8.325	1475
+13.958	8.271	1475
+13.988	8.219	1475
+14.026	8.165	1475
+14.074	8.109	1475
+14.123	8.055	1475
+14.173	8.003	1475
+14.225	7.954	1475
+14.277	7.901	1475
+14.321	7.846	1475
+14.369	7.794	1475
+14.419	7.742	1475
+14.471	7.691	1475
+14.510	7.638	1475
+14.508	7.587	1475
+14.523	7.531	1475
+14.549	7.474	1475
+14.584	7.418	1475
+14.622	7.368	1475
+14.676	7.323	1475
+14.732	7.275	1475
+14.781	7.221	1475
+14.832	7.169	1475
+14.881	7.114	1475
+14.921	7.061	1475
+14.958	7.006	1475
+15.013	6.957	1475
+15.067	6.934	1475
+15.117	6.895	1475
+15.171	6.871	1475
+15.222	6.816	1475
+15.246	6.764	1475
+15.271	6.713	1475
+15.311	6.659	1475
+15.359	6.608	1475
+15.402	6.555	1475
+15.436	6.500	1475
+15.471	6.444	1475
+15.498	6.393	1475
+15.536	6.336	1475
+15.566	6.285	1475
+15.597	6.233	1475
+15.631	6.182	1475
+15.666	6.128	1475
+15.694	6.077	1475
+15.726	6.024	1475
+15.761	5.967	1475
+15.795	5.913	1475
+15.832	5.856	1475
+15.870	5.800	1475
+15.909	5.748	1475
+15.953	5.694	1475
+15.998	5.642	1475
+16.042	5.587	1475
+16.084	5.531	1475
+16.121	5.480	1475
+16.166	5.423	1475
+16.194	5.372	1475
+16.224	5.316	1475
+16.253	5.262	1475
+16.281	5.208	1475
+16.311	5.158	1475
+16.346	5.101	1475
+16.379	5.044	1475
+16.415	4.993	1475
+16.446	4.941	1475
+16.475	4.888	1475
+16.499	4.835	1475
+16.529	4.776	1475
+16.551	4.725	1475
+16.572	4.671	1475
+16.590	4.620	1475
+16.606	4.565	1475
+16.623	4.510	1475
+16.643	4.459	1475
+16.659	4.403	1475
+16.665	4.345	1475
+16.674	4.291	1475
+16.689	4.238	1475
+16.714	4.185	1475
+16.745	4.133	1475
+16.782	4.077	1475
+16.813	4.027	1475
+16.844	3.971	1475
+16.849	3.919	1475
+16.844	3.868	1475
+16.839	3.816	1475
+16.838	3.760	1475
+16.848	3.707	1475
+16.870	3.654	1475
+16.904	3.595	1475
+16.928	3.544	1475
+16.961	3.487	1475
+16.984	3.434	1475
+16.996	3.380	1475
+17.020	3.329	1475
+12.734	3.321	1500
+12.733	3.321	1500
+12.710	3.372	1500
+12.703	3.425	1500
+12.701	3.478	1500
+12.705	3.533	1500
+12.697	3.586	1500
+12.667	3.638	1500
+12.652	3.694	1500
+12.655	3.747	1500
+12.643	3.802	1500
+12.606	3.853	1500
+12.553	3.867	1500
+12.503	3.878	1500
+12.452	3.922	1500
+12.428	3.975	1500
+12.374	3.989	1500
+12.322	4.035	1500
+12.350	4.088	1500
+12.368	4.138	1500
+12.358	4.189	1500
+12.382	4.244	1500
+12.437	4.257	1500
+12.491	4.281	1500
+12.545	4.319	1500
+12.596	4.343	1500
+12.613	4.396	1500
+12.613	4.450	1500
+12.612	4.500	1500
+12.603	4.558	1500
+12.594	4.612	1500
+12.589	4.664	1500
+12.576	4.716	1500
+12.547	4.767	1500
+12.495	4.802	1500
+12.442	4.846	1500
+12.391	4.880	1500
+12.337	4.915	1500
+12.285	4.967	1500
+12.249	5.019	1500
+12.223	5.071	1500
+12.242	5.123	1500
+12.282	5.175	1500
+12.291	5.225	1500
+12.288	5.278	1500
+12.289	5.329	1500
+12.341	5.377	1500
+12.357	5.429	1500
+12.351	5.479	1500
+12.336	5.532	1500
+12.352	5.584	1500
+12.388	5.639	1500
+12.411	5.690	1500
+12.426	5.741	1500
+12.436	5.792	1500
+12.449	5.847	1500
+12.452	5.902	1500
+12.437	5.954	1500
+12.419	6.008	1500
+12.391	6.060	1500
+12.344	6.112	1500
+12.322	6.164	1500
+12.319	6.217	1500
+12.322	6.270	1500
+12.302	6.326	1500
+12.270	6.378	1500
+12.230	6.431	1500
+12.184	6.486	1500
+12.155	6.539	1500
+12.127	6.590	1500
+12.091	6.644	1500
+12.054	6.699	1500
+12.020	6.751	1500
+11.998	6.801	1500
+11.963	6.852	1500
+11.912	6.908	1500
+11.871	6.959	1500
+11.831	7.010	1500
+11.785	7.063	1500
+11.739	7.114	1500
+11.690	7.164	1500
+11.638	7.208	1500
+11.587	7.261	1500
+11.550	7.316	1500
+11.515	7.367	1500
+11.474	7.419	1500
+11.426	7.472	1500
+11.374	7.517	1500
+11.356	7.571	1500
+11.344	7.626	1500
+11.314	7.679	1500
+11.267	7.733	1500
+11.236	7.783	1500
+11.228	7.835	1500
+11.216	7.887	1500
+11.203	7.940	1500
+11.202	7.981	1500
+11.200	7.991	1500
+11.198	8.043	1500
+11.195	8.095	1500
+11.163	8.147	1500
+11.151	8.198	1500
+11.143	8.249	1500
+11.142	8.299	1500
+11.154	8.351	1500
+11.181	8.404	1500
+11.212	8.457	1500
+11.256	8.507	1500
+11.297	8.558	1500
+11.324	8.608	1500
+11.345	8.659	1500
+11.389	8.710	1500
+11.445	8.742	1500
+11.496	8.776	1500
+11.548	8.818	1500
+11.604	8.866	1500
+11.652	8.920	1500
+11.707	8.975	1500
+11.757	9.027	1500
+11.813	9.081	1500
+11.866	9.127	1500
+11.919	9.167	1500
+11.970	9.207	1500
+12.021	9.247	1500
+12.074	9.296	1500
+12.126	9.337	1500
+12.176	9.363	1500
+12.228	9.384	1500
+12.284	9.393	1500
+12.341	9.410	1500
+12.391	9.423	1500
+12.443	9.431	1500
+12.497	9.451	1500
+12.541	9.504	1500
+12.569	9.554	1500
+12.584	9.605	1500
+12.600	9.655	1500
+12.612	9.706	1500
+12.620	9.758	1500
+12.633	9.808	1500
+12.684	9.833	1500
+12.737	9.818	1500
+12.762	9.805	1500
+12.759	9.767	1500
+12.802	9.715	1500
+12.848	9.665	1500
+12.900	9.616	1500
+12.955	9.572	1500
+13.009	9.529	1500
+13.066	9.487	1500
+13.120	9.450	1500
+13.176	9.409	1500
+13.230	9.364	1500
+13.284	9.322	1500
+13.337	9.292	1500
+13.390	9.245	1500
+13.441	9.195	1500
+13.473	9.144	1500
+13.509	9.091	1500
+13.559	9.043	1500
+13.593	8.991	1500
+13.626	8.939	1500
+13.638	8.886	1500
+13.667	8.835	1500
+13.717	8.801	1500
+13.767	8.753	1500
+13.817	8.706	1500
+13.851	8.654	1500
+13.860	8.604	1500
+13.891	8.554	1500
+13.943	8.503	1500
+13.998	8.466	1500
+14.048	8.425	1500
+14.101	8.379	1500
+14.153	8.324	1500
+14.186	8.271	1500
+14.207	8.219	1500
+14.243	8.165	1500
+14.278	8.115	1500
+14.332	8.066	1500
+14.385	8.037	1500
+14.438	8.010	1500
+14.489	7.975	1500
+14.539	7.924	1500
+14.582	7.871	1500
+14.627	7.821	1500
+14.671	7.769	1500
+14.708	7.718	1500
+14.703	7.667	1500
+14.740	7.612	1500
+14.791	7.560	1500
+14.842	7.527	1500
+14.893	7.559	1500
+14.943	7.527	1500
+14.986	7.474	1500
+15.032	7.420	1500
+15.083	7.381	1500
+15.135	7.332	1500
+15.176	7.281	1500
+15.230	7.230	1500
+15.268	7.179	1500
+15.310	7.123	1500
+15.356	7.068	1500
+15.388	7.016	1500
+15.416	6.964	1500
+15.444	6.910	1500
+15.470	6.856	1500
+15.490	6.803	1500
+15.512	6.751	1500
+15.542	6.701	1500
+15.578	6.645	1500
+15.604	6.595	1500
+15.638	6.538	1500
+15.671	6.483	1500
+15.701	6.429	1500
+15.734	6.379	1500
+15.768	6.323	1500
+15.798	6.271	1500
+15.820	6.219	1500
+15.822	6.169	1500
+15.867	6.118	1500
+15.907	6.062	1500
+15.948	6.011	1500
+15.995	5.961	1500
+16.041	5.909	1500
+16.076	5.856	1500
+16.119	5.802	1500
+16.154	5.752	1500
+16.187	5.701	1500
+16.225	5.647	1500
+16.270	5.597	1500
+16.314	5.543	1500
+16.346	5.492	1500
+16.375	5.439	1500
+16.402	5.386	1500
+16.427	5.335	1500
+16.458	5.282	1500
+16.492	5.229	1500
+16.532	5.175	1500
+16.578	5.124	1500
+16.629	5.078	1500
+16.660	5.022	1500
+16.660	4.968	1500
+16.678	4.915	1500
+16.718	4.863	1500
+16.760	4.808	1500
+16.777	4.758	1500
+16.794	4.701	1500
+16.811	4.644	1500
+16.828	4.591	1500
+16.847	4.535	1500
+16.861	4.484	1500
+16.874	4.433	1500
+16.882	4.380	1500
+16.895	4.328	1500
+16.909	4.272	1500
+16.922	4.219	1500
+16.940	4.169	1500
+16.966	4.117	1500
+16.993	4.067	1500
+17.027	4.013	1500
+17.051	3.963	1500
+17.051	3.912	1500
+17.059	3.860	1500
+17.070	3.807	1500
+17.081	3.752	1500
+17.095	3.697	1500
+17.113	3.640	1500
+17.140	3.588	1500
+17.162	3.535	1500
+17.177	3.485	1500
+17.203	3.433	1500
+12.598	3.328	1525
+12.597	3.328	1525
+12.563	3.380	1525
+12.552	3.432	1525
+12.544	3.486	1525
+12.538	3.537	1525
+12.531	3.593	1525
+12.527	3.647	1525
+12.516	3.699	1525
+12.483	3.749	1525
+12.432	3.781	1525
+12.379	3.808	1525
+12.348	3.859	1525
+12.332	3.909	1525
+12.281	3.955	1525
+12.229	3.995	1525
+12.177	4.029	1525
+12.172	4.081	1525
+12.222	4.123	1525
+12.248	4.175	1525
+12.242	4.226	1525
+12.269	4.276	1525
+12.267	4.328	1525
+12.285	4.384	1525
+12.338	4.398	1525
+12.388	4.371	1525
+12.438	4.416	1525
+12.444	4.470	1525
+12.443	4.526	1525
+12.445	4.581	1525
+12.441	4.632	1525
+12.420	4.683	1525
+12.390	4.734	1525
+12.336	4.783	1525
+12.283	4.793	1525
+12.230	4.827	1525
+12.186	4.879	1525
+12.135	4.919	1525
+12.084	4.956	1525
+12.050	5.009	1525
+12.022	5.064	1525
+12.048	5.115	1525
+12.082	5.168	1525
+12.134	5.222	1525
+12.171	5.272	1525
+12.167	5.323	1525
+12.146	5.373	1525
+12.141	5.426	1525
+12.168	5.478	1525
+12.141	5.528	1525
+12.110	5.579	1525
+12.133	5.630	1525
+12.162	5.681	1525
+12.155	5.732	1525
+12.141	5.789	1525
+12.134	5.839	1525
+12.131	5.895	1525
+12.126	5.945	1525
+12.116	6.002	1525
+12.104	6.054	1525
+12.091	6.105	1525
+12.082	6.157	1525
+12.072	6.209	1525
+12.070	6.259	1525
+12.076	6.312	1525
+12.089	6.370	1525
+12.093	6.425	1525
+12.083	6.478	1525
+12.062	6.531	1525
+12.032	6.585	1525
+11.982	6.633	1525
+11.931	6.681	1525
+11.903	6.733	1525
+11.871	6.783	1525
+11.821	6.833	1525
+11.771	6.865	1525
+11.724	6.920	1525
+11.685	6.971	1525
+11.640	7.023	1525
+11.601	7.073	1525
+11.562	7.127	1525
+11.533	7.178	1525
+11.502	7.230	1525
+11.459	7.282	1525
+11.405	7.310	1525
+11.352	7.346	1525
+11.309	7.398	1525
+11.264	7.449	1525
+11.212	7.495	1525
+11.161	7.521	1525
+11.111	7.561	1525
+11.077	7.613	1525
+11.051	7.667	1525
+11.048	7.718	1525
+11.047	7.772	1525
+11.041	7.831	1525
+11.033	7.885	1525
+11.017	7.938	1525
+10.999	7.988	1525
+10.986	8.041	1525
+10.956	8.096	1525
+10.928	8.152	1525
+10.909	8.202	1525
+10.889	8.257	1525
+10.867	8.309	1525
+10.856	8.363	1525
+10.846	8.415	1525
+10.826	8.469	1525
+10.804	8.520	1525
+10.787	8.570	1525
+10.777	8.623	1525
+10.767	8.669	1525
+10.764	8.675	1525
+10.748	8.729	1525
+10.750	8.780	1525
+10.755	8.832	1525
+10.768	8.882	1525
+10.778	8.938	1525
+10.793	8.993	1525
+10.804	9.044	1525
+10.818	9.094	1525
+10.826	9.149	1525
+10.838	9.204	1525
+10.852	9.256	1525
+10.872	9.309	1525
+10.922	9.317	1525
+10.953	9.369	1525
+10.959	9.422	1525
+10.974	9.473	1525
+11.029	9.514	1525
+11.079	9.540	1525
+11.130	9.586	1525
+11.181	9.638	1525
+11.232	9.685	1525
+11.283	9.738	1525
+11.336	9.780	1525
+11.390	9.827	1525
+11.443	9.873	1525
+11.499	9.926	1525
+11.551	9.963	1525
+11.601	9.989	1525
+11.654	10.007	1525
+11.706	10.014	1525
+11.757	10.022	1525
+11.813	10.034	1525
+11.863	10.039	1525
+11.919	10.042	1525
+11.973	10.053	1525
+12.027	10.068	1525
+12.081	10.079	1525
+12.133	10.094	1525
+12.183	10.111	1525
+12.237	10.130	1525
+12.289	10.168	1525
+12.341	10.212	1525
+12.379	10.267	1525
+12.416	10.319	1525
+12.456	10.369	1525
+12.488	10.319	1525
+12.510	10.303	1525
+12.544	10.272	1525
+12.598	10.240	1525
+12.654	10.205	1525
+12.704	10.163	1525
+12.746	10.107	1525
+12.779	10.055	1525
+12.811	10.001	1525
+12.861	9.996	1525
+12.898	9.945	1525
+12.929	9.895	1525
+12.980	9.853	1525
+13.030	9.824	1525
+13.084	9.785	1525
+13.133	9.735	1525
+13.184	9.686	1525
+13.234	9.643	1525
+13.287	9.594	1525
+13.343	9.556	1525
+13.395	9.516	1525
+13.448	9.471	1525
+13.499	9.419	1525
+13.540	9.369	1525
+13.571	9.317	1525
+13.608	9.262	1525
+13.644	9.211	1525
+13.694	9.176	1525
+13.731	9.123	1525
+13.751	9.070	1525
+13.784	9.019	1525
+13.832	8.968	1525
+13.882	8.929	1525
+13.935	8.880	1525
+13.989	8.855	1525
+14.032	8.801	1525
+14.074	8.751	1525
+14.128	8.706	1525
+14.180	8.659	1525
+14.231	8.606	1525
+14.267	8.554	1525
+14.315	8.500	1525
+14.363	8.447	1525
+14.404	8.396	1525
+14.429	8.344	1525
+14.455	8.291	1525
+14.489	8.237	1525
+14.533	8.185	1525
+14.586	8.133	1525
+14.638	8.090	1525
+14.690	8.041	1525
+14.719	7.991	1525
+14.770	7.963	1525
+14.801	7.913	1525
+14.814	7.860	1525
+14.869	7.806	1525
+14.922	7.768	1525
+14.973	7.747	1525
+15.027	7.728	1525
+15.080	7.717	1525
+15.134	7.681	1525
+15.168	7.631	1525
+15.206	7.580	1525
+15.260	7.533	1525
+15.310	7.479	1525
+15.362	7.427	1525
+15.412	7.391	1525
+15.452	7.336	1525
+15.485	7.286	1525
+15.515	7.232	1525
+15.545	7.179	1525
+15.575	7.129	1525
+15.605	7.073	1525
+15.625	7.022	1525
+15.645	6.969	1525
+15.673	6.913	1525
+15.701	6.852	1525
+15.730	6.793	1525
+15.755	6.734	1525
+15.777	6.678	1525
+15.795	6.618	1525
+15.814	6.558	1525
+15.838	6.500	1525
+15.867	6.447	1525
+15.911	6.386	1525
+15.942	6.331	1525
+15.970	6.276	1525
+16.001	6.221	1525
+16.036	6.170	1525
+16.081	6.118	1525
+16.132	6.068	1525
+16.180	6.015	1525
+16.218	5.961	1525
+16.257	5.908	1525
+16.298	5.857	1525
+16.339	5.807	1525
+16.384	5.747	1525
+16.428	5.691	1525
+16.471	5.641	1525
+16.522	5.583	1525
+16.569	5.533	1525
+16.610	5.480	1525
+16.645	5.424	1525
+16.674	5.369	1525
+16.700	5.317	1525
+16.719	5.266	1525
+16.745	5.215	1525
+16.784	5.159	1525
+16.817	5.107	1525
+16.851	5.050	1525
+16.886	4.995	1525
+16.913	4.942	1525
+16.947	4.883	1525
+16.976	4.829	1525
+17.005	4.775	1525
+17.036	4.714	1525
+17.060	4.664	1525
+17.087	4.609	1525
+17.103	4.558	1525
+17.099	4.502	1525
+17.103	4.451	1525
+17.112	4.396	1525
+17.117	4.339	1525
+17.132	4.283	1525
+17.151	4.232	1525
+17.172	4.178	1525
+17.181	4.128	1525
+17.187	4.073	1525
+17.191	4.018	1525
+17.201	3.960	1525
+17.209	3.902	1525
+17.216	3.849	1525
+17.228	3.795	1525
+17.246	3.743	1525
+17.270	3.690	1525
+17.300	3.637	1525
+17.331	3.585	1525
+17.364	3.532	1525
+17.389	3.479	1525
+12.450	3.315	1550
+12.448	3.315	1550
+12.431	3.369	1550
+12.425	3.423	1550
+12.413	3.476	1550
+12.397	3.528	1550
+12.370	3.581	1550
+12.334	3.637	1550
+12.290	3.688	1550
+12.249	3.740	1550
+12.197	3.795	1550
+12.147	3.848	1550
+12.098	3.904	1550
+12.060	3.959	1550
+12.041	4.014	1550
+12.040	4.068	1550
+12.043	4.119	1550
+12.062	4.175	1550
+12.057	4.225	1550
+12.072	4.278	1550
+12.122	4.309	1550
+12.111	4.362	1550
+12.080	4.414	1550
+12.072	4.464	1550
+12.122	4.495	1550
+12.174	4.518	1550
+12.228	4.547	1550
+12.254	4.598	1550
+12.230	4.651	1550
+12.179	4.699	1550
+12.129	4.734	1550
+12.076	4.785	1550
+12.034	4.836	1550
+11.981	4.848	1550
+11.958	4.899	1550
+11.908	4.940	1550
+11.908	4.990	1550
+11.856	5.035	1550
+11.849	5.085	1550
+11.899	5.125	1550
+11.926	5.177	1550
+11.976	5.197	1550
+12.008	5.247	1550
+12.000	5.297	1550
+11.949	5.344	1550
+11.931	5.395	1550
+11.900	5.449	1550
+11.885	5.499	1550
+11.874	5.550	1550
+11.853	5.601	1550
+11.807	5.651	1550
+11.818	5.706	1550
+11.780	5.761	1550
+11.760	5.812	1550
+11.752	5.863	1550
+11.751	5.914	1550
+11.753	5.969	1550
+11.766	6.024	1550
+11.778	6.077	1550
+11.769	6.129	1550
+11.755	6.179	1550
+11.767	6.230	1550
+11.792	6.281	1550
+11.782	6.335	1550
+11.759	6.388	1550
+11.735	6.442	1550
+11.710	6.493	1550
+11.706	6.544	1550
+11.686	6.595	1550
+11.655	6.647	1550
+11.646	6.698	1550
+11.638	6.749	1550
+11.614	6.802	1550
+11.581	6.856	1550
+11.558	6.909	1550
+11.536	6.960	1550
+11.499	7.015	1550
+11.446	7.069	1550
+11.422	7.124	1550
+11.389	7.174	1550
+11.337	7.214	1550
+11.284	7.239	1550
+11.232	7.264	1550
+11.193	7.314	1550
+11.154	7.366	1550
+11.100	7.402	1550
+11.050	7.427	1550
+10.993	7.450	1550
+10.938	7.473	1550
+10.887	7.510	1550
+10.847	7.561	1550
+10.852	7.614	1550
+10.866	7.664	1550
+10.874	7.718	1550
+10.871	7.772	1550
+10.859	7.826	1550
+10.839	7.881	1550
+10.811	7.933	1550
+10.787	7.989	1550
+10.772	8.042	1550
+10.753	8.094	1550
+10.734	8.147	1550
+10.715	8.203	1550
+10.700	8.258	1550
+10.681	8.312	1550
+10.666	8.363	1550
+10.643	8.415	1550
+10.612	8.465	1550
+10.578	8.516	1550
+10.550	8.569	1550
+10.524	8.623	1550
+10.497	8.677	1550
+10.473	8.731	1550
+10.452	8.786	1550
+10.432	8.838	1550
+10.409	8.892	1550
+10.390	8.946	1550
+10.375	8.996	1550
+10.358	9.047	1550
+10.341	9.088	1550
+10.323	9.101	1550
+10.305	9.155	1550
+10.291	9.209	1550
+10.284	9.261	1550
+10.281	9.312	1550
+10.289	9.363	1550
+10.302	9.417	1550
+10.312	9.470	1550
+10.322	9.522	1550
+10.330	9.574	1550
+10.341	9.626	1550
+10.357	9.678	1550
+10.377	9.731	1550
+10.400	9.784	1550
+10.424	9.838	1550
+10.443	9.891	1550
+10.464	9.942	1550
+10.490	9.993	1550
+10.529	10.043	1550
+10.580	10.089	1550
+10.632	10.119	1550
+10.683	10.149	1550
+10.738	10.188	1550
+10.791	10.229	1550
+10.846	10.277	1550
+10.899	10.322	1550
+10.949	10.364	1550
+11.001	10.404	1550
+11.053	10.442	1550
+11.104	10.477	1550
+11.157	10.512	1550
+11.211	10.552	1550
+11.268	10.587	1550
+11.322	10.618	1550
+11.372	10.643	1550
+11.422	10.661	1550
+11.476	10.677	1550
+11.530	10.683	1550
+11.583	10.692	1550
+11.634	10.703	1550
+11.687	10.710	1550
+11.740	10.713	1550
+11.798	10.721	1550
+11.848	10.732	1550
+11.902	10.741	1550
+11.956	10.758	1550
+12.009	10.775	1550
+12.063	10.800	1550
+12.114	10.821	1550
+12.165	10.848	1550
+12.215	10.874	1550
+12.265	10.914	1550
+12.309	10.965	1550
+12.317	10.974	1550
+12.362	10.957	1550
+12.411	10.903	1550
+12.431	10.852	1550
+12.458	10.801	1550
+12.495	10.747	1550
+12.537	10.697	1550
+12.580	10.646	1550
+12.631	10.606	1550
+12.681	10.580	1550
+12.703	10.525	1550
+12.717	10.473	1550
+12.738	10.422	1550
+12.772	10.366	1550
+12.815	10.311	1550
+12.866	10.282	1550
+12.891	10.231	1550
+12.927	10.181	1550
+12.979	10.178	1550
+13.032	10.178	1550
+13.052	10.126	1550
+13.084	10.075	1550
+13.133	10.023	1550
+13.151	9.970	1550
+13.168	9.915	1550
+13.215	9.865	1550
+13.260	9.813	1550
+13.310	9.771	1550
+13.362	9.724	1550
+13.416	9.672	1550
+13.469	9.640	1550
+13.523	9.621	1550
+13.574	9.610	1550
+13.626	9.570	1550
+13.661	9.519	1550
+13.710	9.466	1550
+13.762	9.425	1550
+13.813	9.388	1550
+13.836	9.338	1550
+13.866	9.285	1550
+13.918	9.242	1550
+13.961	9.190	1550
+13.988	9.137	1550
+14.017	9.084	1550
+14.067	9.043	1550
+14.119	9.036	1550
+14.128	8.983	1550
+14.158	8.933	1550
+14.216	8.915	1550
+14.269	8.888	1550
+14.311	8.838	1550
+14.329	8.787	1550
+14.359	8.732	1550
+14.392	8.678	1550
+14.429	8.623	1550
+14.476	8.566	1550
+14.525	8.510	1550
+14.564	8.458	1550
+14.594	8.406	1550
+14.624	8.355	1550
+14.661	8.300	1550
+14.694	8.244	1550
+14.731	8.193	1550
+14.773	8.142	1550
+14.826	8.090	1550
+14.879	8.047	1550
+14.935	8.004	1550
+14.989	7.968	1550
+15.042	7.929	1550
+15.093	7.894	1550
+15.146	7.874	1550
+15.197	7.849	1550
+15.247	7.819	1550
+15.298	7.780	1550
+15.349	7.734	1550
+15.395	7.683	1550
+15.448	7.634	1550
+15.498	7.586	1550
+15.549	7.534	1550
+15.593	7.483	1550
+15.637	7.430	1550
+15.678	7.379	1550
+15.711	7.326	1550
+15.730	7.274	1550
+15.736	7.221	1550
+15.736	7.171	1550
+15.750	7.118	1550
+15.767	7.062	1550
+15.791	7.003	1550
+15.818	6.947	1550
+15.847	6.892	1550
+15.868	6.839	1550
+15.885	6.789	1550
+15.907	6.734	1550
+15.927	6.683	1550
+15.949	6.626	1550
+15.977	6.567	1550
+16.003	6.510	1550
+16.039	6.454	1550
+16.073	6.403	1550
+16.103	6.351	1550
+16.129	6.300	1550
+16.167	6.244	1550
+16.201	6.194	1550
+16.240	6.142	1550
+16.291	6.088	1550
+16.342	6.038	1550
+16.392	5.993	1550
+16.448	5.939	1550
+16.498	5.895	1550
+16.553	5.852	1550
+16.605	5.802	1550
+16.644	5.752	1550
+16.672	5.701	1550
+16.714	5.648	1550
+16.756	5.595	1550
+16.780	5.541	1550
+16.803	5.491	1550
+16.831	5.439	1550
+16.861	5.386	1550
+16.896	5.332	1550
+16.939	5.278	1550
+16.975	5.228	1550
+17.007	5.177	1550
+17.035	5.124	1550
+17.051	5.074	1550
+17.066	5.022	1550
+17.081	4.968	1550
+17.112	4.914	1550
+17.148	4.862	1550
+17.191	4.809	1550
+17.181	4.756	1550
+17.183	4.699	1550
+17.190	4.642	1550
+17.200	4.592	1550
+17.221	4.541	1550
+17.236	4.491	1550
+17.250	4.439	1550
+17.256	4.387	1550
+17.273	4.335	1550
+17.288	4.283	1550
+17.292	4.233	1550
+17.294	4.181	1550
+17.296	4.131	1550
+17.311	4.078	1550
+17.325	4.023	1550
+17.344	3.970	1550
+17.363	3.919	1550
+17.379	3.867	1550
+17.384	3.812	1550
+17.388	3.760	1550
+17.402	3.707	1550
+12.317	3.309	1575
+12.316	3.309	1575
+12.301	3.362	1575
+12.301	3.414	1575
+12.285	3.469	1575
+12.260	3.523	1575
+12.208	3.577	1575
+12.154	3.612	1575
+12.102	3.657	1575
+12.052	3.701	1575
+12.003	3.755	1575
+11.968	3.809	1575
+11.938	3.862	1575
+11.915	3.913	1575
+11.908	3.963	1575
+11.905	4.015	1575
+11.873	4.066	1575
+11.835	4.117	1575
+11.813	4.169	1575
+11.827	4.222	1575
+11.841	4.279	1575
+11.843	4.329	1575
+11.826	4.382	1575
+11.799	4.436	1575
+11.757	4.488	1575
+11.712	4.543	1575
+11.707	4.595	1575
+11.713	4.645	1575
+11.766	4.633	1575
+11.822	4.618	1575
+11.873	4.619	1575
+11.895	4.673	1575
+11.878	4.726	1575
+11.838	4.780	1575
+11.801	4.832	1575
+11.754	4.883	1575
+11.739	4.934	1575
+11.743	4.984	1575
+11.691	4.996	1575
+11.661	5.048	1575
+11.674	5.101	1575
+11.684	5.154	1575
+11.728	5.208	1575
+11.728	5.259	1575
+11.710	5.312	1575
+11.674	5.365	1575
+11.641	5.417	1575
+11.611	5.471	1575
+11.573	5.524	1575
+11.545	5.577	1575
+11.515	5.630	1575
+11.499	5.682	1575
+11.497	5.734	1575
+11.506	5.786	1575
+11.522	5.840	1575
+11.537	5.896	1575
+11.545	5.952	1575
+11.548	6.004	1575
+11.548	6.056	1575
+11.546	6.111	1575
+11.545	6.168	1575
+11.537	6.224	1575
+11.532	6.276	1575
+11.531	6.333	1575
+11.527	6.386	1575
+11.522	6.438	1575
+11.511	6.496	1575
+11.499	6.551	1575
+11.489	6.607	1575
+11.478	6.659	1575
+11.463	6.718	1575
+11.446	6.768	1575
+11.428	6.820	1575
+11.404	6.876	1575
+11.378	6.932	1575
+11.350	6.988	1575
+11.312	7.041	1575
+11.272	7.098	1575
+11.235	7.149	1575
+11.191	7.202	1575
+11.141	7.232	1575
+11.090	7.252	1575
+11.037	7.295	1575
+10.982	7.333	1575
+10.927	7.349	1575
+10.873	7.344	1575
+10.818	7.360	1575
+10.764	7.400	1575
+10.710	7.423	1575
+10.659	7.432	1575
+10.633	7.485	1575
+10.627	7.537	1575
+10.619	7.587	1575
+10.664	7.640	1575
+10.715	7.679	1575
+10.758	7.729	1575
+10.743	7.780	1575
+10.692	7.833	1575
+10.655	7.887	1575
+10.657	7.940	1575
+10.668	7.992	1575
+10.661	8.043	1575
+10.645	8.096	1575
+10.618	8.151	1575
+10.599	8.204	1575
+10.579	8.257	1575
+10.555	8.311	1575
+10.522	8.365	1575
+10.485	8.418	1575
+10.444	8.469	1575
+10.412	8.525	1575
+10.377	8.579	1575
+10.355	8.631	1575
+10.338	8.683	1575
+10.311	8.736	1575
+10.290	8.789	1575
+10.267	8.839	1575
+10.236	8.893	1575
+10.203	8.949	1575
+10.172	9.001	1575
+10.135	9.054	1575
+10.103	9.107	1575
+10.075	9.160	1575
+10.051	9.211	1575
+10.039	9.265	1575
+10.030	9.322	1575
+10.022	9.377	1575
+10.008	9.427	1575
+9.987	9.451	1575
+9.974	9.481	1575
+9.955	9.536	1575
+9.928	9.592	1575
+9.901	9.646	1575
+9.875	9.699	1575
+9.856	9.752	1575
+9.846	9.802	1575
+9.847	9.852	1575
+9.865	9.903	1575
+9.905	9.954	1575
+9.929	10.008	1575
+9.946	10.060	1575
+9.954	10.115	1575
+9.956	10.168	1575
+9.962	10.221	1575
+9.967	10.271	1575
+9.974	10.325	1575
+9.981	10.377	1575
+9.990	10.427	1575
+10.006	10.478	1575
+10.023	10.531	1575
+10.047	10.584	1575
+10.079	10.638	1575
+10.111	10.691	1575
+10.158	10.744	1575
+10.211	10.788	1575
+10.262	10.822	1575
+10.317	10.845	1575
+10.369	10.875	1575
+10.419	10.917	1575
+10.458	10.973	1575
+10.499	11.030	1575
+10.533	11.083	1575
+10.579	11.141	1575
+10.632	11.191	1575
+10.686	11.244	1575
+10.738	11.292	1575
+10.788	11.343	1575
+10.842	11.396	1575
+10.898	11.438	1575
+10.950	11.472	1575
+11.003	11.503	1575
+11.054	11.526	1575
+11.107	11.545	1575
+11.163	11.565	1575
+11.215	11.581	1575
+11.269	11.593	1575
+11.326	11.594	1575
+11.377	11.591	1575
+11.430	11.577	1575
+11.482	11.563	1575
+11.532	11.543	1575
+11.583	11.520	1575
+11.637	11.493	1575
+11.693	11.480	1575
+11.746	11.478	1575
+11.798	11.482	1575
+11.848	11.487	1575
+11.900	11.492	1575
+11.952	11.479	1575
+12.002	11.472	1575
+12.052	11.473	1575
+12.102	11.513	1575
+12.153	11.559	1575
+12.204	11.601	1575
+12.255	11.619	1575
+12.258	11.618	1575
+12.285	11.559	1575
+12.317	11.509	1575
+12.359	11.458	1575
+12.388	11.404	1575
+12.424	11.350	1575
+12.458	11.298	1575
+12.510	11.245	1575
+12.517	11.188	1575
+12.519	11.138	1575
+12.549	11.086	1575
+12.593	11.030	1575
+12.617	10.979	1575
+12.636	10.927	1575
+12.665	10.868	1575
+12.705	10.812	1575
+12.753	10.762	1575
+12.804	10.773	1575
+12.854	10.773	1575
+12.910	10.718	1575
+12.949	10.667	1575
+12.952	10.615	1575
+12.958	10.564	1575
+12.986	10.512	1575
+13.019	10.458	1575
+13.050	10.405	1575
+13.082	10.355	1575
+13.112	10.302	1575
+13.147	10.249	1575
+13.200	10.243	1575
+13.221	10.184	1575
+13.237	10.124	1575
+13.264	10.069	1575
+13.298	10.017	1575
+13.348	9.968	1575
+13.402	9.935	1575
+13.455	9.916	1575
+13.512	9.888	1575
+13.565	9.855	1575
+13.620	9.809	1575
+13.674	9.769	1575
+13.730	9.727	1575
+13.779	9.675	1575
+13.829	9.648	1575
+13.856	9.594	1575
+13.894	9.544	1575
+13.945	9.507	1575
+13.996	9.511	1575
+14.013	9.459	1575
+14.063	9.435	1575
+14.116	9.427	1575
+14.171	9.419	1575
+14.215	9.369	1575
+14.240	9.318	1575
+14.292	9.293	1575
+14.323	9.238	1575
+14.315	9.185	1575
+14.311	9.135	1575
+14.361	9.098	1575
+14.388	9.046	1575
+14.412	8.992	1575
+14.424	8.941	1575
+14.444	8.888	1575
+14.478	8.838	1575
+14.512	8.787	1575
+14.543	8.733	1575
+14.579	8.679	1575
+14.622	8.623	1575
+14.658	8.571	1575
+14.697	8.521	1575
+14.737	8.471	1575
+14.766	8.413	1575
+14.792	8.360	1575
+14.822	8.307	1575
+14.867	8.251	1575
+14.919	8.204	1575
+14.969	8.155	1575
+15.022	8.133	1575
+15.073	8.115	1575
+15.123	8.075	1575
+15.149	8.024	1575
+15.201	8.000	1575
+15.254	7.987	1575
+15.308	7.980	1575
+15.361	7.968	1575
+15.412	7.934	1575
+15.463	7.895	1575
+15.503	7.842	1575
+15.516	7.789	1575
+15.544	7.736	1575
+15.594	7.684	1575
+15.650	7.639	1575
+15.704	7.591	1575
+15.754	7.537	1575
+15.805	7.500	1575
+15.810	7.449	1575
+15.842	7.396	1575
+15.881	7.344	1575
+15.894	7.292	1575
+15.918	7.239	1575
+15.935	7.185	1575
+15.954	7.129	1575
+15.967	7.075	1575
+15.977	7.019	1575
+15.985	6.964	1575
+16.000	6.909	1575
+16.021	6.856	1575
+16.044	6.806	1575
+16.063	6.751	1575
+16.081	6.695	1575
+16.115	6.645	1575
+16.147	6.594	1575
+16.166	6.541	1575
+16.190	6.486	1575
+16.218	6.431	1575
+16.247	6.375	1575
+16.281	6.321	1575
+16.325	6.265	1575
+16.374	6.214	1575
+16.425	6.172	1575
+16.477	6.136	1575
+16.532	6.088	1575
+16.582	6.040	1575
+16.638	5.991	1575
+16.692	5.948	1575
+16.744	5.896	1575
+16.792	5.842	1575
+16.837	5.792	1575
+16.881	5.735	1575
+16.927	5.683	1575
+16.962	5.632	1575
+16.985	5.581	1575
+17.003	5.531	1575
+17.019	5.476	1575
+17.035	5.420	1575
+17.053	5.366	1575
+17.077	5.314	1575
+17.099	5.263	1575
+17.150	5.226	1575
+17.184	5.171	1575
+17.195	5.117	1575
+17.195	5.064	1575
+17.208	5.013	1575
+17.251	4.963	1575
+17.305	4.931	1575
+17.324	4.878	1575
+17.320	4.823	1575
+17.322	4.768	1575
+17.323	4.718	1575
+17.324	4.667	1575
+17.336	4.611	1575
+17.388	4.576	1575
+17.403	4.521	1575
+17.402	4.470	1575
+17.422	4.419	1575
+12.190	3.312	1600
+12.188	3.312	1600
+12.151	3.364	1600
+12.114	3.416	1600
+12.066	3.467	1600
+12.010	3.499	1600
+11.960	3.519	1600
+11.910	3.541	1600
+11.858	3.564	1600
+11.804	3.595	1600
+11.752	3.632	1600
+11.701	3.671	1600
+11.648	3.707	1600
+11.597	3.746	1600
+11.548	3.801	1600
+11.506	3.853	1600
+11.451	3.888	1600
+11.397	3.909	1600
+11.356	3.961	1600
+11.326	4.016	1600
+11.301	4.070	1600
+11.258	4.121	1600
+11.204	4.170	1600
+11.151	4.207	1600
+11.098	4.221	1600
+11.046	4.238	1600
+10.994	4.270	1600
+10.941	4.304	1600
+10.889	4.346	1600
+10.866	4.399	1600
+10.856	4.450	1600
+10.846	4.503	1600
+10.793	4.537	1600
+10.741	4.558	1600
+10.711	4.613	1600
+10.705	4.664	1600
+10.711	4.716	1600
+10.738	4.768	1600
+10.791	4.799	1600
+10.843	4.818	1600
+10.896	4.836	1600
+10.950	4.857	1600
+11.007	4.881	1600
+11.063	4.908	1600
+11.113	4.931	1600
+11.168	4.956	1600
+11.223	4.984	1600
+11.276	5.015	1600
+11.329	5.041	1600
+11.385	5.066	1600
+11.435	5.088	1600
+11.483	5.141	1600
+11.485	5.192	1600
+11.472	5.243	1600
+11.474	5.293	1600
+11.422	5.286	1600
+11.388	5.338	1600
+11.338	5.351	1600
+11.348	5.402	1600
+11.304	5.454	1600
+11.286	5.512	1600
+11.276	5.565	1600
+11.271	5.615	1600
+11.267	5.666	1600
+11.275	5.718	1600
+11.294	5.771	1600
+11.324	5.821	1600
+11.365	5.872	1600
+11.399	5.923	1600
+11.416	5.974	1600
+11.419	6.027	1600
+11.413	6.080	1600
+11.395	6.134	1600
+11.369	6.188	1600
+11.341	6.239	1600
+11.321	6.289	1600
+11.303	6.343	1600
+11.282	6.399	1600
+11.268	6.452	1600
+11.254	6.507	1600
+11.237	6.558	1600
+11.223	6.612	1600
+11.209	6.666	1600
+11.189	6.721	1600
+11.162	6.772	1600
+11.113	6.827	1600
+11.068	6.878	1600
+11.031	6.928	1600
+11.007	6.983	1600
+11.005	7.036	1600
+10.987	7.087	1600
+10.945	7.138	1600
+10.905	7.189	1600
+10.853	7.224	1600
+10.802	7.241	1600
+10.752	7.272	1600
+10.701	7.318	1600
+10.648	7.312	1600
+10.593	7.322	1600
+10.540	7.337	1600
+10.490	7.352	1600
+10.459	7.406	1600
+10.455	7.458	1600
+10.453	7.511	1600
+10.478	7.564	1600
+10.529	7.613	1600
+10.564	7.664	1600
+10.580	7.715	1600
+10.527	7.755	1600
+10.483	7.806	1600
+10.505	7.856	1600
+10.526	7.907	1600
+10.530	7.963	1600
+10.523	8.014	1600
+10.505	8.066	1600
+10.484	8.116	1600
+10.459	8.169	1600
+10.433	8.221	1600
+10.403	8.276	1600
+10.365	8.330	1600
+10.331	8.383	1600
+10.293	8.435	1600
+10.257	8.487	1600
+10.218	8.538	1600
+10.178	8.591	1600
+10.142	8.646	1600
+10.110	8.700	1600
+10.077	8.753	1600
+10.048	8.806	1600
+10.022	8.860	1600
+9.994	8.910	1600
+9.970	8.964	1600
+9.953	9.015	1600
+9.928	9.066	1600
+9.898	9.117	1600
+9.865	9.168	1600
+9.831	9.218	1600
+9.798	9.270	1600
+9.765	9.324	1600
+9.736	9.374	1600
+9.715	9.425	1600
+9.691	9.476	1600
+9.662	9.527	1600
+9.633	9.577	1600
+9.610	9.628	1600
+9.584	9.680	1600
+9.564	9.731	1600
+9.545	9.787	1600
+9.530	9.841	1600
+9.523	9.895	1600
+9.523	9.946	1600
+9.526	9.955	1600
+9.519	9.999	1600
+9.514	10.049	1600
+9.516	10.100	1600
+9.522	10.151	1600
+9.532	10.205	1600
+9.541	10.256	1600
+9.569	10.310	1600
+9.604	10.364	1600
+9.611	10.416	1600
+9.598	10.467	1600
+9.578	10.518	1600
+9.557	10.572	1600
+9.537	10.629	1600
+9.525	10.680	1600
+9.532	10.731	1600
+9.545	10.787	1600
+9.563	10.840	1600
+9.581	10.893	1600
+9.598	10.943	1600
+9.611	10.995	1600
+9.618	11.046	1600
+9.625	11.096	1600
+9.627	11.147	1600
+9.632	11.202	1600
+9.640	11.256	1600
+9.651	11.311	1600
+9.662	11.363	1600
+9.677	11.417	1600
+9.692	11.471	1600
+9.714	11.523	1600
+9.764	11.570	1600
+9.815	11.603	1600
+9.865	11.627	1600
+9.919	11.658	1600
+9.974	11.690	1600
+10.029	11.728	1600
+10.080	11.765	1600
+10.134	11.805	1600
+10.190	11.848	1600
+10.241	11.888	1600
+10.296	11.925	1600
+10.348	11.956	1600
+10.405	11.987	1600
+10.459	12.014	1600
+10.517	12.041	1600
+10.576	12.067	1600
+10.626	12.094	1600
+10.681	12.119	1600
+10.731	12.138	1600
+10.782	12.155	1600
+10.840	12.169	1600
+10.896	12.186	1600
+10.946	12.201	1600
+10.996	12.217	1600
+11.051	12.236	1600
+11.101	12.247	1600
+11.155	12.256	1600
+11.209	12.263	1600
+11.264	12.262	1600
+11.319	12.268	1600
+11.369	12.269	1600
+11.425	12.269	1600
+11.476	12.262	1600
+11.530	12.249	1600
+11.581	12.237	1600
+11.631	12.221	1600
+11.686	12.202	1600
+11.737	12.186	1600
+11.787	12.174	1600
+11.841	12.163	1600
+11.898	12.149	1600
+11.952	12.142	1600
+12.008	12.140	1600
+12.063	12.130	1600
+12.115	12.124	1600
+12.172	12.121	1600
+12.190	12.114	1600
+12.223	12.080	1600
+12.274	12.050	1600
+12.311	11.998	1600
+12.341	11.947	1600
+12.370	11.893	1600
+12.397	11.843	1600
+12.426	11.792	1600
+12.453	11.741	1600
+12.476	11.687	1600
+12.493	11.637	1600
+12.543	11.608	1600
+12.570	11.551	1600
+12.601	11.498	1600
+12.652	11.464	1600
+12.700	11.412	1600
+12.727	11.360	1600
+12.771	11.308	1600
+12.824	11.281	1600
+12.876	11.239	1600
+12.922	11.187	1600
+12.953	11.137	1600
+12.992	11.084	1600
+13.019	11.029	1600
+13.072	10.990	1600
+13.103	10.939	1600
+13.113	10.885	1600
+13.137	10.831	1600
+13.160	10.778	1600
+13.182	10.727	1600
+13.197	10.677	1600
+13.213	10.620	1600
+13.225	10.565	1600
+13.241	10.512	1600
+13.260	10.459	1600
+13.281	10.408	1600
+13.305	10.357	1600
+13.356	10.321	1600
+13.388	10.269	1600
+13.404	10.215	1600
+13.445	10.165	1600
+13.488	10.115	1600
+13.539	10.119	1600
+13.565	10.068	1600
+13.604	10.016	1600
+13.657	9.979	1600
+13.711	9.935	1600
+13.765	9.910	1600
+13.821	9.878	1600
+13.871	9.852	1600
+13.922	9.828	1600
+13.973	9.796	1600
+14.026	9.746	1600
+14.081	9.707	1600
+14.131	9.678	1600
+14.163	9.627	1600
+14.183	9.576	1600
+14.234	9.533	1600
+14.285	9.522	1600
+14.335	9.491	1600
+14.388	9.518	1600
+14.438	9.525	1600
+14.488	9.474	1600
+14.489	9.423	1600
+14.490	9.370	1600
+14.486	9.319	1600
+14.476	9.269	1600
+14.526	9.228	1600
+14.529	9.176	1600
+14.580	9.126	1600
+14.574	9.074	1600
+14.583	9.024	1600
+14.617	8.973	1600
+14.650	8.923	1600
+14.650	8.873	1600
+14.674	8.821	1600
+14.705	8.771	1600
+14.744	8.721	1600
+14.774	8.668	1600
+14.805	8.615	1600
+14.834	8.562	1600
+14.862	8.510	1600
+14.902	8.458	1600
+14.908	8.403	1600
+14.949	8.352	1600
+14.991	8.300	1600
+15.042	8.276	1600
+15.094	8.269	1600
+15.149	8.242	1600
+15.193	8.190	1600
+15.211	8.135	1600
+15.263	8.104	1600
+15.315	8.090	1600
+15.365	8.087	1600
+15.415	8.104	1600
+15.465	8.096	1600
+15.518	8.049	1600
+15.560	7.996	1600
+15.615	7.942	1600
+15.651	7.887	1600
+15.676	7.833	1600
+15.710	7.783	1600
+15.747	7.733	1600
+15.797	7.683	1600
+15.849	7.658	1600
+15.899	7.643	1600
+15.924	7.592	1600
+15.953	7.539	1600
+15.989	7.487	1600
+16.009	7.436	1600
+16.016	7.383	1600
+16.027	7.330	1600
+16.052	7.275	1600
+16.076	7.221	1600
+16.089	7.171	1600
+16.097	7.118	1600
+16.100	7.064	1600
+16.106	7.012	1600
+16.114	6.959	1600
+16.134	6.903	1600
+16.157	6.850	1600
+16.173	6.796	1600
+16.187	6.745	1600
+16.202	6.688	1600
+16.224	6.634	1600
+16.254	6.578	1600
+16.287	6.520	1600
+16.318	6.470	1600
+16.368	6.416	1600
+16.409	6.360	1600
+16.443	6.309	1600
+16.482	6.256	1600
+16.537	6.209	1600
+16.589	6.172	1600
+16.643	6.136	1600
+16.694	6.088	1600
+16.748	6.054	1600
+16.803	6.027	1600
+16.859	5.984	1600
+16.915	5.932	1600
+16.967	5.878	1600
+17.006	5.828	1600
+17.043	5.775	1600
+17.069	5.724	1600
+17.102	5.669	1600
+17.128	5.617	1600
+17.172	5.565	1600
+17.183	5.513	1600
+17.183	5.460	1600
+17.190	5.410	1600
+17.221	5.357	1600
+17.275	5.312	1600
+17.314	5.259	1600
+17.313	5.205	1600
+17.318	5.151	1600
+17.336	5.101	1600
+17.385	5.050	1600
+17.435	5.007	1600
+12.020	3.307	1625
+12.020	3.309	1625
+11.968	3.330	1625
+11.914	3.357	1625
+11.863	3.382	1625
+11.811	3.410	1625
+11.758	3.437	1625
+11.705	3.466	1625
+11.654	3.498	1625
+11.603	3.540	1625
+11.551	3.580	1625
+11.499	3.619	1625
+11.448	3.659	1625
+11.399	3.711	1625
+11.358	3.765	1625
+11.317	3.818	1625
+11.267	3.868	1625
+11.216	3.906	1625
+11.164	3.933	1625
+11.114	3.957	1625
+11.063	3.976	1625
+11.009	3.996	1625
+10.956	4.021	1625
+10.903	4.047	1625
+10.853	4.076	1625
+10.802	4.100	1625
+10.750	4.134	1625
+10.699	4.166	1625
+10.648	4.207	1625
+10.597	4.256	1625
+10.555	4.306	1625
+10.516	4.358	1625
+10.480	4.411	1625
+10.450	4.461	1625
+10.432	4.514	1625
+10.420	4.565	1625
+10.409	4.619	1625
+10.402	4.673	1625
+10.403	4.725	1625
+10.403	4.776	1625
+10.406	4.828	1625
+10.411	4.878	1625
+10.420	4.929	1625
+10.456	4.980	1625
+10.506	5.023	1625
+10.556	5.040	1625
+10.607	5.059	1625
+10.657	5.073	1625
+10.711	5.090	1625
+10.699	5.140	1625
+10.721	5.194	1625
+10.771	5.229	1625
+10.824	5.266	1625
+10.874	5.291	1625
+10.927	5.325	1625
+10.975	5.375	1625
+10.993	5.427	1625
+11.005	5.477	1625
+11.023	5.528	1625
+11.042	5.579	1625
+11.056	5.632	1625
+11.070	5.686	1625
+11.088	5.739	1625
+11.115	5.793	1625
+11.151	5.845	1625
+11.183	5.896	1625
+11.202	5.947	1625
+11.215	5.997	1625
+11.214	6.048	1625
+11.203	6.100	1625
+11.167	6.152	1625
+11.136	6.204	1625
+11.114	6.256	1625
+11.096	6.306	1625
+11.053	6.359	1625
+11.035	6.413	1625
+11.035	6.467	1625
+11.009	6.520	1625
+10.968	6.570	1625
+10.934	6.624	1625
+10.886	6.675	1625
+10.841	6.726	1625
+10.798	6.779	1625
+10.762	6.833	1625
+10.743	6.886	1625
+10.736	6.940	1625
+10.713	6.991	1625
+10.666	7.043	1625
+10.616	7.080	1625
+10.566	7.108	1625
+10.511	7.143	1625
+10.457	7.182	1625
+10.404	7.222	1625
+10.355	7.274	1625
+10.346	7.325	1625
+10.350	7.381	1625
+10.352	7.432	1625
+10.344	7.483	1625
+10.334	7.537	1625
+10.345	7.588	1625
+10.377	7.640	1625
+10.402	7.691	1625
+10.350	7.736	1625
+10.312	7.787	1625
+10.339	7.839	1625
+10.384	7.893	1625
+10.417	7.943	1625
+10.419	7.999	1625
+10.405	8.050	1625
+10.385	8.107	1625
+10.357	8.158	1625
+10.325	8.212	1625
+10.289	8.263	1625
+10.242	8.314	1625
+10.205	8.369	1625
+10.175	8.420	1625
+10.141	8.476	1625
+10.094	8.529	1625
+10.042	8.573	1625
+9.995	8.626	1625
+9.960	8.679	1625
+9.926	8.731	1625
+9.886	8.787	1625
+9.862	8.838	1625
+9.850	8.888	1625
+9.833	8.939	1625
+9.812	8.992	1625
+9.784	9.043	1625
+9.743	9.095	1625
+9.700	9.148	1625
+9.659	9.202	1625
+9.630	9.254	1625
+9.614	9.304	1625
+9.587	9.357	1625
+9.562	9.409	1625
+9.538	9.460	1625
+9.514	9.510	1625
+9.481	9.563	1625
+9.446	9.613	1625
+9.420	9.664	1625
+9.403	9.718	1625
+9.385	9.772	1625
+9.364	9.824	1625
+9.337	9.876	1625
+9.308	9.926	1625
+9.283	9.977	1625
+9.248	10.028	1625
+9.248	10.027	1625
+9.224	10.082	1625
+9.215	10.134	1625
+9.232	10.184	1625
+9.252	10.234	1625
+9.272	10.285	1625
+9.297	10.310	1625
+9.312	10.341	1625
+9.343	10.392	1625
+9.362	10.443	1625
+9.359	10.496	1625
+9.338	10.548	1625
+9.319	10.600	1625
+9.293	10.653	1625
+9.267	10.704	1625
+9.229	10.757	1625
+9.201	10.787	1625
+9.195	10.808	1625
+9.169	10.859	1625
+9.156	10.909	1625
+9.150	10.961	1625
+9.153	11.014	1625
+9.168	11.064	1625
+9.190	11.119	1625
+9.200	11.143	1625
+9.202	11.169	1625
+9.231	11.222	1625
+9.243	11.274	1625
+9.223	11.325	1625
+9.221	11.368	1625
+9.219	11.375	1625
+9.208	11.428	1625
+9.198	11.480	1625
+9.200	11.530	1625
+9.203	11.581	1625
+9.212	11.634	1625
+9.227	11.684	1625
+9.241	11.735	1625
+9.252	11.785	1625
+9.277	11.836	1625
+9.316	11.893	1625
+9.349	11.948	1625
+9.358	12.000	1625
+9.366	12.053	1625
+9.371	12.106	1625
+9.384	12.158	1625
+9.404	12.210	1625
+9.437	12.262	1625
+9.485	12.316	1625
+9.531	12.368	1625
+9.576	12.420	1625
+9.628	12.476	1625
+9.678	12.516	1625
+9.735	12.562	1625
+9.787	12.590	1625
+9.852	12.616	1625
+9.905	12.636	1625
+9.956	12.655	1625
+10.007	12.672	1625
+10.062	12.672	1625
+10.113	12.660	1625
+10.167	12.645	1625
+10.223	12.639	1625
+10.276	12.648	1625
+10.329	12.659	1625
+10.383	12.661	1625
+10.439	12.670	1625
+10.498	12.681	1625
+10.551	12.688	1625
+10.601	12.699	1625
+10.658	12.710	1625
+10.708	12.720	1625
+10.765	12.728	1625
+10.824	12.729	1625
+10.879	12.725	1625
+10.933	12.720	1625
+10.984	12.714	1625
+11.037	12.707	1625
+11.093	12.699	1625
+11.143	12.704	1625
+11.197	12.715	1625
+11.247	12.728	1625
+11.297	12.733	1625
+11.349	12.732	1625
+11.403	12.717	1625
+11.456	12.700	1625
+11.506	12.673	1625
+11.562	12.651	1625
+11.616	12.633	1625
+11.666	12.613	1625
+11.720	12.600	1625
+11.771	12.593	1625
+11.821	12.580	1625
+11.872	12.573	1625
+11.926	12.574	1625
+11.976	12.593	1625
+12.029	12.592	1625
+12.083	12.581	1625
+12.135	12.567	1625
+12.191	12.550	1625
+12.244	12.534	1625
+12.298	12.522	1625
+12.350	12.499	1625
+12.356	12.491	1625
+12.363	12.445	1625
+12.374	12.393	1625
+12.381	12.341	1625
+12.422	12.289	1625
+12.422	12.238	1625
+12.428	12.188	1625
+12.479	12.212	1625
+12.500	12.160	1625
+12.522	12.110	1625
+12.555	12.056	1625
+12.606	12.012	1625
+12.657	11.972	1625
+12.708	11.933	1625
+12.759	11.908	1625
+12.810	11.860	1625
+12.839	11.805	1625
+12.831	11.753	1625
+12.842	11.700	1625
+12.893	11.661	1625
+12.931	11.607	1625
+12.975	11.556	1625
+13.027	11.520	1625
+13.081	11.489	1625
+13.133	11.471	1625
+13.176	11.417	1625
+13.186	11.365	1625
+13.195	11.311	1625
+13.249	11.265	1625
+13.301	11.218	1625
+13.323	11.167	1625
+13.371	11.115	1625
+13.383	11.064	1625
+13.384	11.009	1625
+13.420	10.959	1625
+13.459	10.908	1625
+13.458	10.858	1625
+13.441	10.805	1625
+13.423	10.753	1625
+13.405	10.703	1625
+13.397	10.652	1625
+13.395	10.599	1625
+13.403	10.543	1625
+13.425	10.493	1625
+13.475	10.450	1625
+13.526	10.436	1625
+13.578	10.473	1625
+13.624	10.525	1625
+13.677	10.577	1625
+13.727	10.585	1625
+13.780	10.567	1625
+13.832	10.543	1625
+13.882	10.529	1625
+13.933	10.504	1625
+13.953	10.453	1625
+13.942	10.395	1625
+13.921	10.341	1625
+13.875	10.290	1625
+13.832	10.237	1625
+13.820	10.187	1625
+13.864	10.137	1625
+13.919	10.114	1625
+13.974	10.103	1625
+14.025	10.089	1625
+14.076	10.081	1625
+14.127	10.053	1625
+14.165	10.003	1625
+14.221	9.984	1625
+14.271	9.986	1625
+14.322	9.984	1625
+14.372	9.932	1625
+14.384	9.880	1625
+14.392	9.827	1625
+14.391	9.774	1625
+14.404	9.721	1625
+14.456	9.691	1625
+14.509	9.702	1625
+14.560	9.652	1625
+14.612	9.633	1625
+14.634	9.579	1625
+14.685	9.567	1625
+14.692	9.514	1625
+14.679	9.462	1625
+14.660	9.411	1625
+14.648	9.358	1625
+14.698	9.316	1625
+14.705	9.265	1625
+14.707	9.211	1625
+14.704	9.158	1625
+14.746	9.104	1625
+14.754	9.051	1625
+14.773	8.996	1625
+14.789	8.943	1625
+14.820	8.890	1625
+14.839	8.840	1625
+14.864	8.786	1625
+14.888	8.734	1625
+14.913	8.680	1625
+14.932	8.628	1625
+14.977	8.578	1625
+15.025	8.525	1625
+15.053	8.474	1625
+15.104	8.443	1625
+15.155	8.420	1625
+15.207	8.407	1625
+15.260	8.389	1625
+15.284	8.337	1625
+15.316	8.285	1625
+15.367	8.264	1625
+15.423	8.244	1625
+15.476	8.236	1625
+15.530	8.242	1625
+15.583	8.223	1625
+15.619	8.172	1625
+15.658	8.121	1625
+15.676	8.069	1625
+15.711	8.019	1625
+15.763	7.994	1625
+15.794	7.941	1625
+15.820	7.889	1625
+15.859	7.836	1625
+15.914	7.785	1625
+15.965	7.740	1625
+16.016	7.706	1625
+16.055	7.654	1625
+16.089	7.601	1625
+16.115	7.550	1625
+16.135	7.495	1625
+16.153	7.440	1625
+16.169	7.388	1625
+16.183	7.330	1625
+16.193	7.276	1625
+16.201	7.221	1625
+16.210	7.171	1625
+16.222	7.115	1625
+16.232	7.063	1625
+16.241	7.009	1625
+16.250	6.956	1625
+16.265	6.902	1625
+16.282	6.848	1625
+16.300	6.793	1625
+16.315	6.743	1625
+16.332	6.688	1625
+16.352	6.634	1625
+16.379	6.580	1625
+16.413	6.527	1625
+16.463	6.472	1625
+16.519	6.422	1625
+16.569	6.380	1625
+16.627	6.338	1625
+16.680	6.306	1625
+16.732	6.266	1625
+16.784	6.223	1625
+16.837	6.176	1625
+16.889	6.148	1625
+16.941	6.126	1625
+16.994	6.094	1625
+17.028	6.043	1625
+17.048	5.989	1625
+17.099	5.940	1625
+17.119	5.889	1625
+17.171	5.846	1625
+17.196	5.796	1625
+17.196	5.742	1625
+17.218	5.690	1625
+17.270	5.653	1625
+17.294	5.602	1625
+17.290	5.551	1625
+17.304	5.496	1625
+17.324	5.445	1625
+17.376	5.418	1625
+17.413	5.367	1625
+17.421	5.317	1625
+17.434	5.263	1625
+17.443	5.210	1625
+11.690	3.315	1650
+11.690	3.315	1650
+11.652	3.367	1650
+11.598	3.418	1650
+11.548	3.457	1650
+11.498	3.498	1650
+11.446	3.535	1650
+11.395	3.574	1650
+11.345	3.613	1650
+11.294	3.659	1650
+11.289	3.665	1650
+11.244	3.700	1650
+11.194	3.736	1650
+11.142	3.739	1650
+11.089	3.731	1650
+11.036	3.721	1650
+10.986	3.716	1650
+10.936	3.712	1650
+10.882	3.720	1650
+10.832	3.746	1650
+10.781	3.783	1650
+10.728	3.833	1650
+10.675	3.880	1650
+10.623	3.927	1650
+10.576	3.978	1650
+10.526	4.030	1650
+10.474	4.085	1650
+10.424	4.138	1650
+10.381	4.190	1650
+10.349	4.240	1650
+10.317	4.295	1650
+10.284	4.347	1650
+10.255	4.397	1650
+10.223	4.450	1650
+10.190	4.503	1650
+10.165	4.554	1650
+10.148	4.606	1650
+10.135	4.658	1650
+10.122	4.709	1650
+10.115	4.765	1650
+10.136	4.818	1650
+10.154	4.839	1650
+10.158	4.870	1650
+10.177	4.926	1650
+10.204	4.977	1650
+10.225	5.030	1650
+10.239	5.081	1650
+10.243	5.136	1650
+10.270	5.188	1650
+10.322	5.237	1650
+10.353	5.291	1650
+10.391	5.343	1650
+10.435	5.398	1650
+10.480	5.451	1650
+10.534	5.503	1650
+10.588	5.544	1650
+10.644	5.576	1650
+10.699	5.608	1650
+10.754	5.634	1650
+10.804	5.667	1650
+10.854	5.699	1650
+10.907	5.738	1650
+10.959	5.776	1650
+11.009	5.832	1650
+11.034	5.886	1650
+11.040	5.937	1650
+11.029	5.990	1650
+11.000	6.043	1650
+10.955	6.095	1650
+10.926	6.145	1650
+10.915	6.198	1650
+10.919	6.251	1650
+10.905	6.303	1650
+10.862	6.356	1650
+10.836	6.410	1650
+10.813	6.462	1650
+10.780	6.514	1650
+10.743	6.564	1650
+10.705	6.618	1650
+10.660	6.672	1650
+10.617	6.724	1650
+10.564	6.778	1650
+10.513	6.820	1650
+10.464	6.872	1650
+10.422	6.924	1650
+10.384	6.979	1650
+10.351	7.035	1650
+10.317	7.090	1650
+10.276	7.142	1650
+10.225	7.184	1650
+10.195	7.236	1650
+10.174	7.291	1650
+10.141	7.344	1650
+10.119	7.397	1650
+10.110	7.451	1650
+10.107	7.502	1650
+10.114	7.556	1650
+10.155	7.608	1650
+10.147	7.659	1650
+10.178	7.712	1650
+10.178	7.764	1650
+10.151	7.814	1650
+10.163	7.867	1650
+10.205	7.919	1650
+10.235	7.969	1650
+10.286	7.999	1650
+10.299	8.051	1650
+10.272	8.101	1650
+10.218	8.116	1650
+10.165	8.127	1650
+10.144	8.180	1650
+10.130	8.230	1650
+10.088	8.281	1650
+10.070	8.331	1650
+10.049	8.384	1650
+10.014	8.435	1650
+9.962	8.489	1650
+9.917	8.541	1650
+9.878	8.592	1650
+9.838	8.643	1650
+9.800	8.694	1650
+9.751	8.746	1650
+9.713	8.799	1650
+9.702	8.850	1650
+9.698	8.901	1650
+9.681	8.953	1650
+9.630	9.000	1650
+9.579	9.037	1650
+9.526	9.067	1650
+9.483	9.117	1650
+9.466	9.171	1650
+9.460	9.224	1650
+9.450	9.274	1650
+9.432	9.324	1650
+9.400	9.374	1650
+9.372	9.427	1650
+9.353	9.480	1650
+9.333	9.530	1650
+9.315	9.581	1650
+9.292	9.633	1650
+9.264	9.683	1650
+9.230	9.734	1650
+9.191	9.785	1650
+9.158	9.838	1650
+9.123	9.889	1650
+9.082	9.941	1650
+9.044	9.993	1650
+9.017	10.044	1650
+8.999	10.095	1650
+8.996	10.145	1650
+9.006	10.198	1650
+9.017	10.248	1650
+9.034	10.298	1650
+9.055	10.348	1650
+9.082	10.399	1650
+9.104	10.449	1650
+9.122	10.499	1650
+9.130	10.551	1650
+9.127	10.603	1650
+9.096	10.654	1650
+9.044	10.694	1650
+9.001	10.731	1650
+8.990	10.735	1650
+8.940	10.779	1650
+8.920	10.832	1650
+8.903	10.885	1650
+8.895	10.936	1650
+8.895	10.987	1650
+8.894	10.998	1650
+8.900	11.040	1650
+8.913	11.090	1650
+8.922	11.143	1650
+8.927	11.194	1650
+8.926	11.245	1650
+8.934	11.295	1650
+8.967	11.346	1650
+8.966	11.398	1650
+8.929	11.448	1650
+8.919	11.464	1650
+8.914	11.500	1650
+8.903	11.551	1650
+8.890	11.603	1650
+8.872	11.655	1650
+8.863	11.708	1650
+8.862	11.761	1650
+8.862	11.814	1650
+8.873	11.867	1650
+8.905	11.919	1650
+8.943	11.972	1650
+8.967	12.022	1650
+8.992	12.074	1650
+9.013	12.127	1650
+9.034	12.181	1650
+9.031	12.204	1650
+9.044	12.232	1650
+9.043	12.282	1650
+9.050	12.336	1650
+9.069	12.388	1650
+9.091	12.439	1650
+9.117	12.490	1650
+9.122	12.498	1650
+9.133	12.550	1650
+9.135	12.604	1650
+9.170	12.654	1650
+9.215	12.705	1650
+9.244	12.755	1650
+9.278	12.807	1650
+9.317	12.861	1650
+9.366	12.916	1650
+9.417	12.970	1650
+9.460	13.020	1650
+9.506	13.072	1650
+9.557	13.107	1650
+9.608	13.135	1650
+9.658	13.162	1650
+9.708	13.186	1650
+9.767	13.208	1650
+9.824	13.223	1650
+9.878	13.236	1650
+9.932	13.245	1650
+9.988	13.260	1650
+10.040	13.272	1650
+10.093	13.287	1650
+10.147	13.297	1650
+10.202	13.308	1650
+10.252	13.315	1650
+10.302	13.312	1650
+10.353	13.269	1650
+10.392	13.218	1650
+10.442	13.202	1650
+10.492	13.205	1650
+10.547	13.210	1650
+10.599	13.210	1650
+10.651	13.191	1650
+10.703	13.167	1650
+10.753	13.157	1650
+10.806	13.161	1650
+10.858	13.164	1650
+10.910	13.171	1650
+10.965	13.177	1650
+11.016	13.183	1650
+11.067	13.184	1650
+11.122	13.180	1650
+11.176	13.168	1650
+11.230	13.146	1650
+11.284	13.134	1650
+11.337	13.142	1650
+11.391	13.162	1650
+11.441	13.163	1650
+11.491	13.144	1650
+11.545	13.124	1650
+11.596	13.102	1650
+11.647	13.082	1650
+11.698	13.060	1650
+11.751	13.034	1650
+11.801	13.014	1650
+11.854	12.998	1650
+11.906	12.982	1650
+11.959	12.965	1650
+12.013	12.945	1650
+12.066	12.938	1650
+12.119	12.925	1650
+12.170	12.910	1650
+12.221	12.898	1650
+12.274	12.882	1650
+12.324	12.867	1650
+12.377	12.851	1650
+12.431	12.835	1650
+12.482	12.817	1650
+12.525	12.775	1650
+12.503	12.755	1650
+12.543	12.703	1650
+12.553	12.648	1650
+12.565	12.597	1650
+12.616	12.546	1650
+12.640	12.492	1650
+12.684	12.439	1650
+12.722	12.384	1650
+12.762	12.334	1650
+12.802	12.282	1650
+12.847	12.232	1650
+12.893	12.182	1650
+12.945	12.162	1650
+12.996	12.141	1650
+13.039	12.087	1650
+13.090	12.051	1650
+13.141	12.037	1650
+13.191	12.003	1650
+13.236	11.950	1650
+13.264	11.900	1650
+13.300	11.847	1650
+13.345	11.796	1650
+13.371	11.745	1650
+13.404	11.693	1650
+13.435	11.639	1650
+13.465	11.586	1650
+13.497	11.533	1650
+13.527	11.483	1650
+13.552	11.429	1650
+13.576	11.378	1650
+13.601	11.325	1650
+13.616	11.270	1650
+13.620	11.220	1650
+13.627	11.167	1650
+13.637	11.111	1650
+13.648	11.055	1650
+13.672	11.003	1650
+13.724	10.966	1650
+13.774	10.941	1650
+13.825	10.900	1650
+13.860	10.847	1650
+13.915	10.795	1650
+13.965	10.780	1650
+14.017	10.773	1650
+14.070	10.764	1650
+14.126	10.750	1650
+14.177	10.710	1650
+14.194	10.657	1650
+14.205	10.603	1650
+14.203	10.548	1650
+14.197	10.493	1650
+14.208	10.442	1650
+14.238	10.391	1650
+14.274	10.336	1650
+14.324	10.302	1650
+14.377	10.289	1650
+14.422	10.237	1650
+14.439	10.187	1650
+14.465	10.136	1650
+14.516	10.101	1650
+14.569	10.063	1650
+14.608	10.009	1650
+14.615	9.957	1650
+14.665	9.933	1650
+14.694	9.879	1650
+14.735	9.827	1650
+14.755	9.773	1650
+14.805	9.739	1650
+14.855	9.727	1650
+14.905	9.722	1650
+14.954	9.672	1650
+14.952	9.617	1650
+14.969	9.566	1650
+15.008	9.514	1650
+15.061	9.486	1650
+15.114	9.457	1650
+15.156	9.406	1650
+15.179	9.352	1650
+15.198	9.301	1650
+15.193	9.248	1650
+15.165	9.197	1650
+15.126	9.142	1650
+15.081	9.090	1650
+15.046	9.036	1650
+15.019	8.984	1650
+15.070	8.948	1650
+15.122	8.966	1650
+15.175	9.005	1650
+15.228	9.047	1650
+15.280	9.068	1650
+15.331	9.088	1650
+15.382	9.097	1650
+15.404	9.098	1650
+15.434	9.094	1650
+15.484	9.046	1650
+15.515	8.994	1650
+15.539	8.943	1650
+15.555	8.890	1650
+15.558	8.878	1650
+15.540	8.834	1650
+15.522	8.780	1650
+15.503	8.722	1650
+15.485	8.672	1650
+15.476	8.620	1650
+15.466	8.569	1650
+15.459	8.518	1650
+15.466	8.467	1650
+15.516	8.432	1650
+15.567	8.413	1650
+15.618	8.398	1650
+15.670	8.372	1650
+15.701	8.318	1650
+15.732	8.264	1650
+15.765	8.211	1650
+15.806	8.160	1650
+15.852	8.109	1650
+15.903	8.059	1650
+15.939	8.004	1650
+15.975	7.948	1650
+16.008	7.896	1650
+16.054	7.842	1650
+16.108	7.791	1650
+16.162	7.741	1650
+16.204	7.687	1650
+16.234	7.634	1650
+16.257	7.581	1650
+16.264	7.531	1650
+16.271	7.480	1650
+16.282	7.430	1650
+16.294	7.378	1650
+16.307	7.323	1650
+16.328	7.268	1650
+16.349	7.216	1650
+16.367	7.162	1650
+16.382	7.108	1650
+16.392	7.056	1650
+16.402	7.004	1650
+16.417	6.952	1650
+16.432	6.900	1650
+16.446	6.849	1650
+16.459	6.794	1650
+16.482	6.738	1650
+16.503	6.686	1650
+16.532	6.633	1650
+16.575	6.581	1650
+16.626	6.543	1650
+16.677	6.513	1650
+16.727	6.459	1650
+16.775	6.405	1650
+16.828	6.372	1650
+16.880	6.344	1650
+16.931	6.319	1650
+16.984	6.295	1650
+17.035	6.262	1650
+17.089	6.215	1650
+17.127	6.165	1650
+17.150	6.112	1650
+17.173	6.060	1650
+17.223	6.011	1650
+17.251	5.961	1650
+17.304	5.933	1650
+17.332	5.882	1650
+17.330	5.828	1650
+17.334	5.776	1650
+17.385	5.732	1650
+11.402	3.305	1675
+11.400	3.305	1675
+11.350	3.342	1675
+11.299	3.380	1675
+11.248	3.405	1675
+11.197	3.413	1675
+11.143	3.427	1675
+11.093	3.442	1675
+11.043	3.456	1675
+10.993	3.469	1675
+10.939	3.485	1675
+10.889	3.503	1675
+10.835	3.525	1675
+10.781	3.561	1675
+10.727	3.605	1675
+10.674	3.654	1675
+10.623	3.701	1675
+10.573	3.748	1675
+10.523	3.793	1675
+10.476	3.840	1675
+10.471	3.840	1675
+10.418	3.885	1675
+10.368	3.927	1675
+10.314	3.960	1675
+10.264	4.011	1675
+10.228	4.063	1675
+10.190	4.115	1675
+10.145	4.166	1675
+10.103	4.221	1675
+10.070	4.275	1675
+10.044	4.326	1675
+10.022	4.377	1675
+10.000	4.427	1675
+9.965	4.481	1675
+9.927	4.535	1675
+9.883	4.588	1675
+9.856	4.642	1675
+9.835	4.694	1675
+9.817	4.745	1675
+9.798	4.796	1675
+9.782	4.847	1675
+9.771	4.897	1675
+9.768	4.950	1675
+9.773	4.990	1675
+9.771	5.001	1675
+9.769	5.055	1675
+9.787	5.108	1675
+9.822	5.161	1675
+9.872	5.205	1675
+9.924	5.248	1675
+9.979	5.299	1675
+10.033	5.353	1675
+10.088	5.398	1675
+10.144	5.436	1675
+10.197	5.472	1675
+10.249	5.504	1675
+10.304	5.540	1675
+10.356	5.571	1675
+10.415	5.619	1675
+10.466	5.660	1675
+10.522	5.699	1675
+10.576	5.736	1675
+10.626	5.766	1675
+10.677	5.795	1675
+10.727	5.822	1675
+10.779	5.854	1675
+10.829	5.888	1675
+10.835	5.940	1675
+10.807	5.993	1675
+10.752	6.040	1675
+10.698	6.094	1675
+10.666	6.145	1675
+10.643	6.202	1675
+10.624	6.262	1675
+10.618	6.317	1675
+10.621	6.369	1675
+10.624	6.429	1675
+10.612	6.486	1675
+10.590	6.540	1675
+10.552	6.593	1675
+10.504	6.646	1675
+10.453	6.687	1675
+10.399	6.725	1675
+10.346	6.775	1675
+10.305	6.828	1675
+10.265	6.878	1675
+10.228	6.928	1675
+10.190	6.982	1675
+10.154	7.038	1675
+10.115	7.094	1675
+10.073	7.148	1675
+10.034	7.202	1675
+10.003	7.257	1675
+9.974	7.310	1675
+9.945	7.362	1675
+9.920	7.417	1675
+9.893	7.473	1675
+9.867	7.526	1675
+9.876	7.584	1675
+9.894	7.637	1675
+9.928	7.687	1675
+9.966	7.739	1675
+9.948	7.789	1675
+9.921	7.841	1675
+9.913	7.894	1675
+9.922	7.946	1675
+9.950	7.999	1675
+9.990	8.049	1675
+10.012	8.105	1675
+9.990	8.155	1675
+9.962	8.210	1675
+9.941	8.261	1675
+9.916	8.316	1675
+9.885	8.368	1675
+9.834	8.419	1675
+9.784	8.470	1675
+9.747	8.521	1675
+9.708	8.571	1675
+9.654	8.618	1675
+9.620	8.672	1675
+9.601	8.726	1675
+9.588	8.776	1675
+9.563	8.829	1675
+9.512	8.867	1675
+9.460	8.907	1675
+9.407	8.934	1675
+9.377	8.946	1675
+9.355	8.982	1675
+9.305	9.012	1675
+9.270	9.062	1675
+9.261	9.115	1675
+9.261	9.145	1675
+9.261	9.165	1675
+9.249	9.215	1675
+9.223	9.267	1675
+9.216	9.318	1675
+9.229	9.369	1675
+9.236	9.422	1675
+9.230	9.472	1675
+9.211	9.524	1675
+9.184	9.576	1675
+9.156	9.627	1675
+9.117	9.678	1675
+9.067	9.731	1675
+9.016	9.784	1675
+8.972	9.836	1675
+8.932	9.886	1675
+8.895	9.938	1675
+8.861	9.989	1675
+8.828	10.027	1675
+8.818	10.043	1675
+8.780	10.095	1675
+8.775	10.149	1675
+8.778	10.200	1675
+8.776	10.250	1675
+8.766	10.302	1675
+8.762	10.352	1675
+8.755	10.406	1675
+8.760	10.458	1675
+8.768	10.512	1675
+8.775	10.556	1675
+8.774	10.562	1675
+8.757	10.612	1675
+8.734	10.664	1675
+8.713	10.714	1675
+8.711	10.720	1675
+8.694	10.764	1675
+8.675	10.817	1675
+8.658	10.871	1675
+8.641	10.925	1675
+8.638	10.976	1675
+8.637	11.028	1675
+8.643	11.081	1675
+8.647	11.134	1675
+8.648	11.187	1675
+8.643	11.238	1675
+8.623	11.289	1675
+8.592	11.345	1675
+8.570	11.399	1675
+8.554	11.452	1675
+8.557	11.506	1675
+8.566	11.558	1675
+8.573	11.608	1675
+8.574	11.658	1675
+8.562	11.712	1675
+8.551	11.768	1675
+8.543	11.819	1675
+8.539	11.871	1675
+8.550	11.923	1675
+8.578	11.974	1675
+8.630	12.017	1675
+8.683	12.059	1675
+8.728	12.109	1675
+8.760	12.161	1675
+8.798	12.212	1675
+8.819	12.263	1675
+8.818	12.263	1675
+8.842	12.315	1675
+8.880	12.365	1675
+8.875	12.416	1675
+8.868	12.467	1675
+8.869	12.520	1675
+8.873	12.572	1675
+8.874	12.624	1675
+8.872	12.675	1675
+8.878	12.725	1675
+8.896	12.775	1675
+8.905	12.793	1675
+8.919	12.828	1675
+8.942	12.879	1675
+8.982	12.933	1675
+9.016	12.983	1675
+9.048	13.036	1675
+9.076	13.089	1675
+9.112	13.139	1675
+9.144	13.189	1675
+9.180	13.241	1675
+9.225	13.291	1675
+9.275	13.323	1675
+9.325	13.348	1675
+9.375	13.375	1675
+9.427	13.402	1675
+9.481	13.434	1675
+9.534	13.470	1675
+9.590	13.512	1675
+9.640	13.553	1675
+9.694	13.589	1675
+9.744	13.611	1675
+9.796	13.627	1675
+9.846	13.639	1675
+9.900	13.660	1675
+9.953	13.683	1675
+10.009	13.706	1675
+10.066	13.730	1675
+10.117	13.741	1675
+10.170	13.754	1675
+10.222	13.762	1675
+10.275	13.767	1675
+10.326	13.760	1675
+10.379	13.752	1675
+10.433	13.750	1675
+10.483	13.748	1675
+10.537	13.748	1675
+10.588	13.737	1675
+10.641	13.717	1675
+10.693	13.703	1675
+10.746	13.691	1675
+10.800	13.690	1675
+10.852	13.692	1675
+10.908	13.691	1675
+10.963	13.692	1675
+11.017	13.688	1675
+11.068	13.684	1675
+11.120	13.683	1675
+11.171	13.681	1675
+11.222	13.678	1675
+11.277	13.673	1675
+11.329	13.654	1675
+11.383	13.631	1675
+11.435	13.622	1675
+11.489	13.610	1675
+11.543	13.589	1675
+11.598	13.565	1675
+11.654	13.544	1675
+11.711	13.518	1675
+11.761	13.489	1675
+11.815	13.466	1675
+11.872	13.439	1675
+11.925	13.415	1675
+11.976	13.395	1675
+12.027	13.376	1675
+12.080	13.355	1675
+12.134	13.329	1675
+12.187	13.285	1675
+12.240	13.248	1675
+12.296	13.217	1675
+12.353	13.184	1675
+12.408	13.164	1675
+12.459	13.151	1675
+12.511	13.129	1675
+12.562	13.110	1675
+12.612	13.093	1675
+12.665	13.074	1675
+12.715	13.057	1675
+12.766	13.039	1675
+12.787	13.010	1675
+12.820	12.988	1675
+12.871	12.943	1675
+12.894	12.891	1675
+12.922	12.838	1675
+12.953	12.786	1675
+12.988	12.734	1675
+13.041	12.686	1675
+13.095	12.637	1675
+13.147	12.597	1675
+13.168	12.544	1675
+13.218	12.516	1675
+13.271	12.467	1675
+13.325	12.458	1675
+13.377	12.463	1675
+13.428	12.455	1675
+13.482	12.445	1675
+13.533	12.423	1675
+13.569	12.371	1675
+13.594	12.318	1675
+13.620	12.263	1675
+13.624	12.207	1675
+13.613	12.154	1675
+13.608	12.104	1675
+13.625	12.052	1675
+13.654	12.001	1675
+13.673	11.948	1675
+13.699	11.895	1675
+13.720	11.842	1675
+13.720	11.789	1675
+13.719	11.738	1675
+13.726	11.686	1675
+13.743	11.632	1675
+13.757	11.579	1675
+13.765	11.526	1675
+13.768	11.476	1675
+13.784	11.425	1675
+13.800	11.369	1675
+13.801	11.319	1675
+13.805	11.267	1675
+13.811	11.217	1675
+13.855	11.167	1675
+13.905	11.134	1675
+13.947	11.083	1675
+13.969	11.030	1675
+14.010	10.980	1675
+14.060	10.972	1675
+14.111	10.987	1675
+14.161	10.987	1675
+14.213	10.984	1675
+14.263	10.952	1675
+14.315	10.901	1675
+14.342	10.849	1675
+14.358	10.795	1675
+14.374	10.743	1675
+14.389	10.688	1675
+14.398	10.634	1675
+14.401	10.584	1675
+14.409	10.531	1675
+14.424	10.477	1675
+14.448	10.425	1675
+14.475	10.372	1675
+14.497	10.321	1675
+14.525	10.270	1675
+14.577	10.238	1675
+14.630	10.218	1675
+14.681	10.209	1675
+14.732	10.198	1675
+14.782	10.149	1675
+14.827	10.097	1675
+14.877	10.081	1675
+14.929	10.048	1675
+14.980	10.003	1675
+15.034	9.974	1675
+15.087	9.939	1675
+15.132	9.888	1675
+15.157	9.836	1675
+15.180	9.784	1675
+15.211	9.732	1675
+15.246	9.680	1675
+15.292	9.630	1675
+15.339	9.580	1675
+15.379	9.529	1675
+15.432	9.506	1675
+15.483	9.498	1675
+15.534	9.479	1675
+15.585	9.431	1675
+15.559	9.391	1675
+15.569	9.379	1675
+15.613	9.326	1675
+15.634	9.269	1675
+15.665	9.217	1675
+15.697	9.165	1675
+15.715	9.140	1675
+15.720	9.114	1675
+15.720	9.061	1675
+15.704	9.008	1675
+15.697	8.952	1675
+15.689	8.898	1675
+15.673	8.845	1675
+15.668	8.794	1675
+15.667	8.741	1675
+15.671	8.688	1675
+15.679	8.637	1675
+15.694	8.584	1675
+15.713	8.526	1675
+15.744	8.471	1675
+15.784	8.417	1675
+15.828	8.364	1675
+15.878	8.315	1675
+15.920	8.264	1675
+15.958	8.210	1675
+15.982	8.160	1675
+16.005	8.110	1675
+16.028	8.059	1675
+16.066	8.009	1675
+16.120	7.982	1675
+16.171	7.950	1675
+16.215	7.898	1675
+16.255	7.843	1675
+16.288	7.788	1675
+16.311	7.734	1675
+16.329	7.680	1675
+16.344	7.626	1675
+16.374	7.574	1675
+16.398	7.521	1675
+16.405	7.466	1675
+16.408	7.413	1675
+16.425	7.358	1675
+16.444	7.300	1675
+16.459	7.248	1675
+16.471	7.197	1675
+16.485	7.145	1675
+16.516	7.095	1675
+16.546	7.044	1675
+16.553	6.990	1675
+16.563	6.934	1675
+16.582	6.882	1675
+16.596	6.832	1675
+16.613	6.781	1675
+16.641	6.726	1675
+16.690	6.674	1675
+16.743	6.628	1675
+16.797	6.578	1675
+16.838	6.524	1675
+16.891	6.486	1675
+16.945	6.477	1675
+17.000	6.458	1675
+17.053	6.430	1675
+17.104	6.392	1675
+17.143	6.340	1675
+17.186	6.288	1675
+17.215	6.236	1675
+17.267	6.185	1675
+17.315	6.134	1675
+17.323	6.083	1675
+17.362	6.033	1675
+17.415	6.008	1675
+11.074	3.289	1700
+11.073	3.289	1700
+11.023	3.312	1700
+10.969	3.329	1700
+10.916	3.337	1700
+10.865	3.360	1700
+10.813	3.383	1700
+10.760	3.409	1700
+10.710	3.437	1700
+10.660	3.471	1700
+10.606	3.516	1700
+10.557	3.570	1700
+10.513	3.624	1700
+10.463	3.673	1700
+10.413	3.712	1700
+10.359	3.746	1700
+10.309	3.781	1700
+10.258	3.820	1700
+10.207	3.866	1700
+10.163	3.917	1700
+10.115	3.969	1700
+10.063	4.015	1700
+10.057	4.021	1700
+10.010	4.051	1700
+9.959	4.104	1700
+9.914	4.156	1700
+9.871	4.207	1700
+9.826	4.261	1700
+9.795	4.312	1700
+9.764	4.365	1700
+9.729	4.418	1700
+9.697	4.473	1700
+9.674	4.526	1700
+9.647	4.580	1700
+9.623	4.633	1700
+9.605	4.687	1700
+9.591	4.738	1700
+9.580	4.789	1700
+9.573	4.842	1700
+9.570	4.892	1700
+9.571	4.943	1700
+9.571	4.945	1700
+9.570	4.995	1700
+9.600	5.045	1700
+9.652	5.100	1700
+9.692	5.155	1700
+9.726	5.208	1700
+9.772	5.263	1700
+9.822	5.316	1700
+9.873	5.355	1700
+9.924	5.398	1700
+9.975	5.440	1700
+10.028	5.491	1700
+10.079	5.539	1700
+10.134	5.587	1700
+10.186	5.627	1700
+10.238	5.661	1700
+10.295	5.701	1700
+10.350	5.745	1700
+10.400	5.789	1700
+10.450	5.832	1700
+10.505	5.873	1700
+10.556	5.908	1700
+10.596	5.959	1700
+10.584	6.010	1700
+10.553	6.061	1700
+10.517	6.115	1700
+10.491	6.171	1700
+10.484	6.224	1700
+10.470	6.277	1700
+10.451	6.329	1700
+10.427	6.386	1700
+10.396	6.440	1700
+10.364	6.490	1700
+10.332	6.541	1700
+10.299	6.597	1700
+10.257	6.650	1700
+10.209	6.700	1700
+10.163	6.754	1700
+10.121	6.809	1700
+10.088	6.859	1700
+10.049	6.912	1700
+10.021	6.962	1700
+9.967	7.015	1700
+9.920	7.069	1700
+9.905	7.122	1700
+9.893	7.178	1700
+9.873	7.230	1700
+9.833	7.284	1700
+9.785	7.336	1700
+9.746	7.390	1700
+9.718	7.445	1700
+9.694	7.497	1700
+9.681	7.551	1700
+9.673	7.607	1700
+9.664	7.657	1700
+9.658	7.711	1700
+9.653	7.766	1700
+9.648	7.819	1700
+9.645	7.873	1700
+9.640	7.928	1700
+9.634	7.983	1700
+9.624	8.033	1700
+9.617	8.087	1700
+9.624	8.145	1700
+9.638	8.196	1700
+9.672	8.250	1700
+9.725	8.299	1700
+9.768	8.351	1700
+9.715	8.395	1700
+9.677	8.432	1700
+9.665	8.432	1700
+9.613	8.486	1700
+9.572	8.539	1700
+9.526	8.591	1700
+9.485	8.641	1700
+9.433	8.688	1700
+9.382	8.704	1700
+9.329	8.739	1700
+9.279	8.764	1700
+9.228	8.792	1700
+9.176	8.822	1700
+9.123	8.862	1700
+9.079	8.913	1700
+9.054	8.964	1700
+9.038	9.016	1700
+9.036	9.066	1700
+9.047	9.116	1700
+9.055	9.143	1700
+9.063	9.169	1700
+9.069	9.221	1700
+9.049	9.271	1700
+9.082	9.321	1700
+9.108	9.372	1700
+9.105	9.423	1700
+9.077	9.476	1700
+9.054	9.531	1700
+9.017	9.581	1700
+8.966	9.619	1700
+8.938	9.671	1700
+8.919	9.721	1700
+8.883	9.771	1700
+8.832	9.806	1700
+8.784	9.859	1700
+8.733	9.908	1700
+8.683	9.949	1700
+8.651	10.002	1700
+8.634	10.053	1700
+8.633	10.107	1700
+8.638	10.161	1700
+8.637	10.212	1700
+8.632	10.265	1700
+8.611	10.318	1700
+8.585	10.369	1700
+8.581	10.378	1700
+8.560	10.422	1700
+8.540	10.472	1700
+8.523	10.523	1700
+8.511	10.573	1700
+8.502	10.627	1700
+8.492	10.680	1700
+8.483	10.732	1700
+8.464	10.788	1700
+8.445	10.841	1700
+8.426	10.892	1700
+8.406	10.942	1700
+8.385	10.995	1700
+8.367	11.047	1700
+8.346	11.100	1700
+8.322	11.156	1700
+8.297	11.208	1700
+8.274	11.265	1700
+8.263	11.317	1700
+8.254	11.369	1700
+8.247	11.423	1700
+8.241	11.477	1700
+8.235	11.530	1700
+8.226	11.587	1700
+8.223	11.641	1700
+8.219	11.692	1700
+8.214	11.743	1700
+8.214	11.801	1700
+8.214	11.858	1700
+8.215	11.912	1700
+8.214	11.963	1700
+8.215	12.014	1700
+8.228	12.064	1700
+8.278	12.100	1700
+8.330	12.123	1700
+8.381	12.130	1700
+8.432	12.131	1700
+8.484	12.138	1700
+8.511	12.149	1700
+8.536	12.169	1700
+8.590	12.201	1700
+8.637	12.254	1700
+8.665	12.307	1700
+8.655	12.358	1700
+8.624	12.409	1700
+8.617	12.460	1700
+8.615	12.458	1700
+8.592	12.512	1700
+8.573	12.564	1700
+8.559	12.617	1700
+8.554	12.673	1700
+8.554	12.724	1700
+8.563	12.779	1700
+8.588	12.831	1700
+8.625	12.886	1700
+8.664	12.940	1700
+8.700	12.994	1700
+8.720	13.046	1700
+8.725	13.097	1700
+8.747	13.148	1700
+8.798	13.200	1700
+8.812	13.251	1700
+8.827	13.301	1700
+8.845	13.353	1700
+8.865	13.408	1700
+8.887	13.463	1700
+8.903	13.516	1700
+8.936	13.567	1700
+8.981	13.617	1700
+9.033	13.658	1700
+9.083	13.691	1700
+9.134	13.727	1700
+9.184	13.764	1700
+9.234	13.795	1700
+9.285	13.827	1700
+9.336	13.858	1700
+9.386	13.884	1700
+9.438	13.903	1700
+9.490	13.920	1700
+9.546	13.939	1700
+9.599	13.956	1700
+9.650	13.969	1700
+9.700	13.984	1700
+9.752	14.001	1700
+9.803	14.015	1700
+9.854	14.028	1700
+9.905	14.053	1700
+9.963	14.088	1700
+10.017	14.117	1700
+10.071	14.154	1700
+10.123	14.195	1700
+10.174	14.236	1700
+10.227	14.271	1700
+10.281	14.295	1700
+10.334	14.302	1700
+10.386	14.304	1700
+10.439	14.296	1700
+10.491	14.282	1700
+10.546	14.279	1700
+10.600	14.282	1700
+10.654	14.289	1700
+10.705	14.296	1700
+10.760	14.289	1700
+10.815	14.276	1700
+10.867	14.260	1700
+10.919	14.243	1700
+10.974	14.236	1700
+11.030	14.225	1700
+11.088	14.218	1700
+11.144	14.217	1700
+11.195	14.221	1700
+11.250	14.218	1700
+11.302	14.207	1700
+11.356	14.190	1700
+11.411	14.163	1700
+11.463	14.128	1700
+11.517	14.097	1700
+11.570	14.067	1700
+11.621	14.039	1700
+11.675	14.007	1700
+11.726	13.984	1700
+11.778	13.968	1700
+11.828	13.960	1700
+11.879	13.953	1700
+11.931	13.942	1700
+11.981	13.922	1700
+12.032	13.871	1700
+12.082	13.835	1700
+12.135	13.796	1700
+12.188	13.754	1700
+12.242	13.713	1700
+12.298	13.681	1700
+12.351	13.647	1700
+12.405	13.611	1700
+12.459	13.576	1700
+12.510	13.539	1700
+12.564	13.495	1700
+12.617	13.455	1700
+12.673	13.426	1700
+12.727	13.413	1700
+12.781	13.406	1700
+12.832	13.393	1700
+12.882	13.372	1700
+12.933	13.353	1700
+12.983	13.331	1700
+13.033	13.302	1700
+13.034	13.298	1700
+13.084	13.269	1700
+13.136	13.225	1700
+13.165	13.171	1700
+13.193	13.120	1700
+13.216	13.068	1700
+13.235	13.015	1700
+13.249	12.963	1700
+13.262	12.910	1700
+13.278	12.860	1700
+13.314	12.805	1700
+13.368	12.780	1700
+13.418	12.745	1700
+13.473	12.712	1700
+13.530	12.674	1700
+13.583	12.636	1700
+13.634	12.587	1700
+13.687	12.538	1700
+13.737	12.489	1700
+13.786	12.438	1700
+13.818	12.383	1700
+13.822	12.328	1700
+13.821	12.274	1700
+13.822	12.223	1700
+13.822	12.169	1700
+13.856	12.119	1700
+13.894	12.067	1700
+13.902	12.014	1700
+13.907	11.958	1700
+13.916	11.902	1700
+13.921	11.847	1700
+13.921	11.796	1700
+13.920	11.739	1700
+13.920	11.688	1700
+13.921	11.638	1700
+13.935	11.585	1700
+13.987	11.547	1700
+14.039	11.543	1700
+14.093	11.510	1700
+14.144	11.457	1700
+14.191	11.404	1700
+14.228	11.351	1700
+14.261	11.299	1700
+14.300	11.249	1700
+14.352	11.227	1700
+14.404	11.207	1700
+14.455	11.160	1700
+14.478	11.110	1700
+14.486	11.057	1700
+14.497	11.003	1700
+14.505	10.949	1700
+14.505	10.899	1700
+14.509	10.843	1700
+14.519	10.792	1700
+14.531	10.740	1700
+14.542	10.684	1700
+14.550	10.629	1700
+14.560	10.576	1700
+14.576	10.522	1700
+14.594	10.472	1700
+14.612	10.420	1700
+14.647	10.369	1700
+14.699	10.328	1700
+14.750	10.318	1700
+14.803	10.331	1700
+14.854	10.335	1700
+14.905	10.286	1700
+14.956	10.283	1700
+15.007	10.261	1700
+15.044	10.208	1700
+15.095	10.165	1700
+15.149	10.126	1700
+15.200	10.094	1700
+15.250	10.071	1700
+15.303	10.047	1700
+15.354	10.019	1700
+15.394	9.967	1700
+15.415	9.916	1700
+15.445	9.865	1700
+15.497	9.835	1700
+15.549	9.834	1700
+15.603	9.818	1700
+15.652	9.767	1700
+15.673	9.717	1700
+15.699	9.667	1700
+15.743	9.615	1700
+15.794	9.573	1700
+15.798	9.559	1700
+15.818	9.519	1700
+15.835	9.464	1700
+15.849	9.412	1700
+15.865	9.358	1700
+15.856	9.323	1700
+15.862	9.302	1700
+15.867	9.250	1700
+15.868	9.198	1700
+15.865	9.144	1700
+15.859	9.093	1700
+15.849	9.043	1700
+15.835	8.992	1700
+15.824	8.941	1700
+15.813	8.888	1700
+15.811	8.833	1700
+15.812	8.779	1700
+15.814	8.724	1700
+15.819	8.672	1700
+15.828	8.615	1700
+15.845	8.564	1700
+15.868	8.513	1700
+15.909	8.462	1700
+15.953	8.410	1700
+16.000	8.358	1700
+16.049	8.308	1700
+16.088	8.257	1700
+16.108	8.203	1700
+16.117	8.152	1700
+16.148	8.100	1700
+16.203	8.063	1700
+16.254	8.024	1700
+16.305	7.981	1700
+16.354	7.930	1700
+16.387	7.878	1700
+16.409	7.825	1700
+16.424	7.771	1700
+16.443	7.713	1700
+16.470	7.659	1700
+16.513	7.608	1700
+16.544	7.557	1700
+16.557	7.502	1700
+16.560	7.449	1700
+16.567	7.396	1700
+16.586	7.343	1700
+16.617	7.290	1700
+16.654	7.236	1700
+16.672	7.185	1700
+16.679	7.133	1700
+16.692	7.078	1700
+16.713	7.026	1700
+16.747	6.975	1700
+16.800	6.930	1700
+16.855	6.890	1700
+16.898	6.838	1700
+16.902	6.787	1700
+16.918	6.735	1700
+16.955	6.681	1700
+17.007	6.660	1700
+17.062	6.646	1700
+17.112	6.598	1700
+17.167	6.577	1700
+17.183	6.525	1700
+17.220	6.472	1700
+17.270	6.435	1700
+17.316	6.380	1700
+17.335	6.324	1700
+17.357	6.271	1700
+17.387	6.217	1700
+17.422	6.167	1700
+10.646	3.299	1725
+10.645	3.299	1725
+10.601	3.350	1725
+10.550	3.403	1725
+10.500	3.456	1725
+10.445	3.505	1725
+10.399	3.560	1725
+10.349	3.614	1725
+10.297	3.658	1725
+10.245	3.685	1725
+10.195	3.709	1725
+10.144	3.738	1725
+10.090	3.776	1725
+10.037	3.815	1725
+9.987	3.854	1725
+9.933	3.889	1725
+9.883	3.926	1725
+9.831	3.980	1725
+9.780	4.033	1725
+9.738	4.085	1725
+9.691	4.136	1725
+9.650	4.189	1725
+9.610	4.240	1725
+9.573	4.295	1725
+9.540	4.350	1725
+9.509	4.405	1725
+9.484	4.460	1725
+9.460	4.513	1725
+9.439	4.565	1725
+9.427	4.620	1725
+9.419	4.672	1725
+9.415	4.725	1725
+9.411	4.779	1725
+9.413	4.833	1725
+9.422	4.888	1725
+9.431	4.940	1725
+9.439	4.994	1725
+9.445	5.045	1725
+9.452	5.096	1725
+9.459	5.149	1725
+9.462	5.202	1725
+9.412	5.218	1725
+9.357	5.209	1725
+9.305	5.177	1725
+9.255	5.137	1725
+9.212	5.083	1725
+9.162	5.031	1725
+9.108	4.993	1725
+9.056	4.949	1725
+9.006	4.915	1725
+8.961	4.862	1725
+8.931	4.809	1725
+8.910	4.753	1725
+8.901	4.701	1725
+8.890	4.646	1725
+8.882	4.595	1725
+8.888	4.541	1725
+8.903	4.488	1725
+8.920	4.436	1725
+8.949	4.382	1725
+8.989	4.331	1725
+9.028	4.278	1725
+9.063	4.224	1725
+9.098	4.169	1725
+9.117	4.116	1725
+9.120	4.062	1725
+9.108	4.011	1725
+9.086	3.957	1725
+9.060	3.904	1725
+9.027	3.850	1725
+8.999	3.799	1725
+8.977	3.747	1725
+8.955	3.694	1725
+8.941	3.640	1725
+8.929	3.590	1725
+10.429	3.325	1750
+10.428	3.325	1750
+10.392	3.377	1750
+10.359	3.430	1750
+10.304	3.481	1750
+10.248	3.524	1750
+10.191	3.558	1750
+10.135	3.598	1750
+10.083	3.630	1750
+10.033	3.657	1750
+9.983	3.692	1750
+9.933	3.725	1750
+9.881	3.756	1750
+9.826	3.796	1750
+9.775	3.840	1750
+9.729	3.890	1750
+9.678	3.943	1750
+9.638	3.994	1750
+9.599	4.048	1750
+9.565	4.100	1750
+9.524	4.152	1750
+9.484	4.204	1750
+9.444	4.257	1750
+9.410	4.309	1750
+9.379	4.359	1750
+9.352	4.413	1750
+9.333	4.464	1750
+9.321	4.518	1750
+9.305	4.571	1750
+9.302	4.623	1750
+9.299	4.674	1750
+9.293	4.728	1750
+9.288	4.781	1750
+9.284	4.834	1750
+9.283	4.888	1750
+9.286	4.941	1750
+9.284	4.995	1750
+9.234	4.977	1750
+9.182	4.926	1750
+9.143	4.873	1750
+9.110	4.822	1750
+9.076	4.768	1750
+9.054	4.718	1750
+9.037	4.665	1750
+9.027	4.609	1750
+9.026	4.555	1750
+9.036	4.503	1750
+9.062	4.451	1750
+9.104	4.397	1750
+9.142	4.347	1750
+9.174	4.292	1750
+9.202	4.239	1750
+9.227	4.187	1750
+9.244	4.131	1750
+9.255	4.075	1750
+9.263	4.024	1750
+9.267	3.971	1750
+9.262	3.916	1750
+9.238	3.859	1750
+9.212	3.808	1750
+9.180	3.754	1750
+9.133	3.700	1750
+9.103	3.649	1750
+9.081	3.595	1750
+9.068	3.544	1750
+9.055	3.486	1750
+9.044	3.434	1750
+9.038	3.382	1750
+9.036	3.326	1750
+10.210	3.332	1775
+10.210	3.332	1775
+10.208	3.386	1775
+10.183	3.438	1775
+10.130	3.464	1775
+10.079	3.490	1775
+10.026	3.520	1775
+9.975	3.547	1775
+9.924	3.573	1775
+9.873	3.605	1775
+9.820	3.651	1775
+9.771	3.704	1775
+9.720	3.743	1775
+9.672	3.797	1775
+9.641	3.848	1775
+9.607	3.901	1775
+9.566	3.952	1775
+9.516	3.994	1775
+9.465	4.018	1775
+9.415	3.982	1775
+9.391	3.931	1775
+9.377	3.879	1775
+9.365	3.822	1775
+9.350	3.766	1775
+9.323	3.715	1775
+9.292	3.662	1775
+9.261	3.601	1775
+9.238	3.546	1775
+9.219	3.494	1775
+9.205	3.440	1775
+9.189	3.386	1775
+9.175	3.333	1775
+9.984	3.344	1800
+9.983	3.344	1800
+9.938	3.396	1800
+9.886	3.435	1800
+9.835	3.457	1800
+9.782	3.490	1800
+9.731	3.526	1800
+9.683	3.581	1800
+9.639	3.633	1800
+9.596	3.684	1800
+9.552	3.735	1800
+9.502	3.722	1800
+9.457	3.667	1800
+9.423	3.614	1800
+9.388	3.563	1800
+9.353	3.510	1800
+9.336	3.456	1800
+9.311	3.402	1800
+9.303	3.351	1800
+9.794	3.326	1825
+9.794	3.326	1825
+9.741	3.352	1825
+9.691	3.392	1825
+9.643	3.446	1825
+9.605	3.498	1825
+9.553	3.535	1825
+9.510	3.483	1825
+9.467	3.428	1825
+9.452	3.373	1825
+8.779	3.834	1700
+8.778	3.834	1700
+8.795	3.888	1700
+8.820	3.939	1700
+8.842	3.993	1700
+8.849	4.049	1700
+8.849	4.103	1700
+8.848	4.157	1700
+8.828	4.210	1700
+8.786	4.261	1700
+8.738	4.312	1700
+8.702	4.364	1700
+8.690	4.416	1700
+8.699	4.470	1700
+8.691	4.524	1700
+8.671	4.581	1700
+8.673	4.639	1700
+8.686	4.693	1700
+8.707	4.749	1700
+8.729	4.805	1700
+8.758	4.860	1700
+8.795	4.912	1700
+8.845	4.964	1700
+8.899	5.010	1700
+8.949	5.055	1700
+9.001	5.090	1700
+9.053	5.125	1700
+9.109	5.176	1700
+9.164	5.228	1700
+9.216	5.265	1700
+9.270	5.305	1700
+9.323	5.340	1700
+9.377	5.367	1700
+9.428	5.393	1700
+9.481	5.423	1700
+9.534	5.459	1700
+9.527	5.510	1700
+9.491	5.561	1700
+9.439	5.605	1700
+9.388	5.658	1700
+9.368	5.709	1700
+9.355	5.765	1700
+9.339	5.818	1700
+9.325	5.869	1700
+9.309	5.923	1700
+9.295	5.975	1700
+9.279	6.031	1700
+9.268	6.087	1700
+9.256	6.144	1700
+9.251	6.198	1700
+9.241	6.251	1700
+9.228	6.302	1700
+9.214	6.353	1700
+9.201	6.405	1700
+9.185	6.463	1700
+9.176	6.514	1700
+9.165	6.567	1700
+9.151	6.618	1700
+9.124	6.673	1700
+9.101	6.724	1700
+9.071	6.778	1700
+9.041	6.833	1700
+9.005	6.888	1700
+8.962	6.941	1700
+8.915	6.994	1700
+8.865	7.048	1700
+8.813	7.095	1700
+8.759	7.130	1700
+8.706	7.161	1700
+8.650	7.185	1700
+8.600	7.209	1700
+8.550	7.226	1700
+8.498	7.239	1700
+8.447	7.254	1700
+8.979	5.211	1675
+8.813	5.170	1675
+8.866	5.210	1675
+8.919	5.228	1675
+8.970	5.248	1675
+9.021	5.281	1675
+9.074	5.323	1675
+9.116	5.373	1675
+9.141	5.430	1675
+9.161	5.480	1675
+9.183	5.530	1675
+9.204	5.583	1675
+9.214	5.635	1675
+9.238	5.690	1675
+9.242	5.741	1675
+9.223	5.794	1675
+9.194	5.850	1675
+9.175	5.902	1675
+9.153	5.954	1675
+9.141	6.006	1675
+9.141	6.061	1675
+9.137	6.112	1675
+9.130	6.162	1675
+9.122	6.218	1675
+9.112	6.268	1675
+9.100	6.318	1675
+9.086	6.369	1675
+9.071	6.420	1675
+9.054	6.472	1675
+9.035	6.523	1675
+9.010	6.574	1675
+8.986	6.624	1675
+8.954	6.678	1675
+8.929	6.731	1675
+8.894	6.782	1675
+8.849	6.833	1675
+8.795	6.887	1675
+8.745	6.917	1675
+8.218	7.470	1725
+8.217	7.470	1725
+8.270	7.439	1725
+8.321	7.414	1725
+8.372	7.404	1725
+8.422	7.388	1725
+8.473	7.369	1725
+8.526	7.359	1725
+8.583	7.346	1725
+8.640	7.326	1725
+8.691	7.305	1725
+8.744	7.283	1725
+8.799	7.261	1725
+8.850	7.241	1725
+8.903	7.212	1725
+8.955	7.162	1725
+9.000	7.109	1725
+9.049	7.057	1725
+9.086	7.001	1725
+9.116	6.946	1725
+9.147	6.895	1725
+9.178	6.842	1725
+9.211	6.791	1725
+9.242	6.736	1725
+9.271	6.686	1725
+9.296	6.634	1725
+9.319	6.583	1725
+9.344	6.528	1725
+9.365	6.474	1725
+9.382	6.418	1725
+9.397	6.359	1725
+9.411	6.309	1725
+9.429	6.255	1725
+9.443	6.205	1725
+9.450	6.154	1725
+9.457	6.102	1725
+9.460	6.048	1725
+9.462	5.994	1725
+9.470	5.936	1725
+9.480	5.880	1725
+9.486	5.829	1725
+9.514	5.779	1725
+9.566	5.734	1725
+9.613	5.683	1725
+9.640	5.628	1725
+9.665	5.574	1725
+9.690	5.523	1725
+9.711	5.472	1725
+9.762	5.466	1725
+9.818	5.485	1725
+9.874	5.514	1725
+9.928	5.547	1725
+9.984	5.585	1725
+10.035	5.627	1725
+10.082	5.680	1725
+10.134	5.734	1725
+10.186	5.787	1725
+10.239	5.840	1725
+10.292	5.885	1725
+10.344	5.914	1725
+10.396	5.954	1725
+10.397	6.008	1725
+10.366	6.061	1725
+10.349	6.111	1725
+10.343	6.162	1725
+10.344	6.217	1725
+10.335	6.268	1725
+10.322	6.323	1725
+10.304	6.373	1725
+10.272	6.424	1725
+10.237	6.479	1725
+10.195	6.534	1725
+10.149	6.587	1725
+10.096	6.641	1725
+10.055	6.692	1725
+10.020	6.744	1725
+9.987	6.800	1725
+9.957	6.850	1725
+9.919	6.905	1725
+9.865	6.957	1725
+9.813	7.009	1725
+9.771	7.062	1725
+9.740	7.118	1725
+9.710	7.170	1725
+9.683	7.225	1725
+9.659	7.277	1725
+9.627	7.329	1725
+9.596	7.385	1725
+9.572	7.439	1725
+9.552	7.492	1725
+9.525	7.547	1725
+9.503	7.599	1725
+9.486	7.652	1725
+9.467	7.707	1725
+9.453	7.758	1725
+9.439	7.812	1725
+9.428	7.867	1725
+9.426	7.923	1725
+9.425	7.974	1725
+9.426	8.030	1725
+9.429	8.082	1725
+9.430	8.134	1725
+9.427	8.171	1725
+9.424	8.185	1725
+9.403	8.239	1725
+9.375	8.291	1725
+9.323	8.339	1725
+9.274	8.390	1725
+9.228	8.444	1725
+9.194	8.495	1725
+9.150	8.545	1725
+9.100	8.577	1725
+9.049	8.613	1725
+8.996	8.651	1725
+8.950	8.705	1725
+8.948	8.704	1725
+8.900	8.751	1725
+8.873	8.803	1725
+8.852	8.856	1725
+8.847	8.909	1725
+8.860	8.964	1725
+8.879	9.015	1725
+8.895	9.066	1725
+8.892	9.116	1725
+8.887	9.167	1725
+8.888	9.218	1725
+8.900	9.270	1725
+8.924	9.321	1725
+8.938	9.372	1725
+8.942	9.422	1725
+8.934	9.473	1725
+8.893	9.526	1725
+8.841	9.553	1725
+8.804	9.608	1725
+8.803	9.659	1725
+8.752	9.694	1725
+8.708	9.745	1725
+8.658	9.787	1725
+8.607	9.825	1725
+8.557	9.869	1725
+8.516	9.908	1725
+8.503	9.914	1725
+8.460	9.965	1725
+8.452	10.016	1725
+8.458	10.067	1725
+8.471	10.119	1725
+8.478	10.144	1725
+8.481	10.169	1725
+8.491	10.224	1725
+8.492	10.274	1725
+8.478	10.324	1725
+8.472	10.331	1725
+8.427	10.362	1725
+8.392	10.417	1725
+8.359	10.467	1725
+8.337	10.519	1725
+8.318	10.570	1725
+8.300	10.624	1725
+8.278	10.675	1725
+8.254	10.725	1725
+8.231	10.777	1725
+8.195	10.831	1725
+8.158	10.883	1725
+8.122	10.938	1725
+8.091	10.989	1725
+8.067	11.039	1725
+8.047	11.089	1725
+8.033	11.140	1725
+8.022	11.196	1725
+8.008	11.250	1725
+7.991	11.303	1725
+7.982	11.358	1725
+7.974	11.409	1725
+7.966	11.460	1725
+7.955	11.515	1725
+7.942	11.567	1725
+7.929	11.618	1725
+7.917	11.672	1725
+7.912	11.727	1725
+7.909	11.780	1725
+7.912	11.836	1725
+7.913	11.887	1725
+7.920	11.941	1725
+7.933	11.992	1725
+7.954	12.046	1725
+7.983	12.097	1725
+8.021	12.149	1725
+8.061	12.201	1725
+8.109	12.253	1725
+8.161	12.298	1725
+8.190	12.317	1725
+8.211	12.336	1725
+8.261	12.349	1725
+8.318	12.334	1725
+8.369	12.323	1725
+8.419	12.328	1725
+8.430	12.378	1725
+8.424	12.429	1725
+8.415	12.482	1725
+8.399	12.534	1725
+8.388	12.587	1725
+8.378	12.638	1725
+8.373	12.688	1725
+8.367	12.720	1725
+8.353	12.739	1725
+8.331	12.789	1725
+8.337	12.844	1725
+8.357	12.900	1725
+8.376	12.955	1725
+8.388	13.008	1725
+8.404	13.062	1725
+8.420	13.113	1725
+8.436	13.164	1725
+8.453	13.217	1725
+8.469	13.267	1725
+8.484	13.317	1725
+8.496	13.370	1725
+8.506	13.420	1725
+8.517	13.477	1725
+8.530	13.529	1725
+8.548	13.585	1725
+8.565	13.637	1725
+8.591	13.693	1725
+8.612	13.745	1725
+8.627	13.799	1725
+8.646	13.854	1725
+8.666	13.905	1725
+8.692	13.961	1725
+8.721	14.016	1725
+8.748	14.067	1725
+8.793	14.121	1725
+8.845	14.162	1725
+8.899	14.184	1725
+8.952	14.196	1725
+9.002	14.210	1725
+9.056	14.234	1725
+9.107	14.262	1725
+9.157	14.296	1725
+9.209	14.310	1725
+9.261	14.311	1725
+9.319	14.303	1725
+9.375	14.297	1725
+9.429	14.297	1725
+9.483	14.304	1725
+9.534	14.307	1725
+9.592	14.315	1725
+9.646	14.328	1725
+9.698	14.339	1725
+9.750	14.348	1725
+9.802	14.374	1725
+9.852	14.402	1725
+9.907	14.424	1725
+9.960	14.448	1725
+10.012	14.471	1725
+10.064	14.500	1725
+10.115	14.530	1725
+10.168	14.553	1725
+10.221	14.579	1725
+10.271	14.596	1725
+10.325	14.612	1725
+10.375	14.629	1725
+10.426	14.640	1725
+10.476	14.626	1725
+10.526	14.604	1725
+10.577	14.574	1725
+10.627	14.552	1725
+10.677	14.545	1725
+10.728	14.543	1725
+10.779	14.567	1725
+10.826	14.617	1725
+10.878	14.640	1725
+10.934	14.651	1725
+10.989	14.658	1725
+11.043	14.664	1725
+11.097	14.668	1725
+11.151	14.666	1725
+11.203	14.663	1725
+11.257	14.661	1725
+11.315	14.657	1725
+11.367	14.651	1725
+11.419	14.646	1725
+11.472	14.633	1725
+11.525	14.617	1725
+11.577	14.598	1725
+11.631	14.569	1725
+11.685	14.539	1725
+11.737	14.516	1725
+11.791	14.498	1725
+11.845	14.475	1725
+11.899	14.448	1725
+11.953	14.417	1725
+12.006	14.381	1725
+12.062	14.345	1725
+12.116	14.314	1725
+12.170	14.269	1725
+12.228	14.232	1725
+12.278	14.202	1725
+12.311	14.151	1725
+12.363	14.099	1725
+12.419	14.065	1725
+12.473	14.025	1725
+12.524	13.988	1725
+12.577	13.951	1725
+12.633	13.918	1725
+12.685	13.878	1725
+12.737	13.842	1725
+12.787	13.803	1725
+12.839	13.764	1725
+12.889	13.734	1725
+12.940	13.704	1725
+12.993	13.674	1725
+13.047	13.648	1725
+13.097	13.630	1725
+13.149	13.612	1725
+13.200	13.591	1725
+13.250	13.571	1725
+13.301	13.526	1725
+13.346	13.475	1725
+13.381	13.422	1725
+13.418	13.372	1725
+13.465	13.318	1725
+13.508	13.267	1725
+13.545	13.211	1725
+13.578	13.156	1725
+13.612	13.102	1725
+13.639	13.052	1725
+13.647	13.001	1725
+13.626	12.927	1725
+13.624	12.925	1725
+13.618	12.873	1725
+13.640	12.821	1725
+13.657	12.766	1725
+13.705	12.714	1725
+13.755	12.685	1725
+13.805	12.653	1725
+13.861	12.614	1725
+13.915	12.563	1725
+13.965	12.512	1725
+13.998	12.460	1725
+14.007	12.408	1725
+14.014	12.351	1725
+14.026	12.297	1725
+14.036	12.245	1725
+14.046	12.193	1725
+14.059	12.141	1725
+14.072	12.088	1725
+14.075	12.036	1725
+14.077	11.984	1725
+14.087	11.931	1725
+14.097	11.878	1725
+14.151	11.832	1725
+14.203	11.828	1725
+14.254	11.832	1725
+14.310	11.827	1725
+14.362	11.810	1725
+14.412	11.784	1725
+14.449	11.752	1725
+14.464	11.757	1725
+14.517	11.710	1725
+14.556	11.657	1725
+14.594	11.607	1725
+14.611	11.564	1725
+14.612	11.552	1725
+14.624	11.502	1725
+14.631	11.452	1725
+14.630	11.397	1725
+14.624	11.339	1725
+14.619	11.286	1725
+14.611	11.234	1725
+14.606	11.184	1725
+14.604	11.133	1725
+14.606	11.081	1725
+14.608	11.024	1725
+14.610	10.973	1725
+14.613	10.921	1725
+14.620	10.869	1725
+14.646	10.818	1725
+14.696	10.809	1725
+14.748	10.814	1725
+14.801	10.825	1725
+14.854	10.833	1725
+14.911	10.841	1725
+14.966	10.851	1725
+15.017	10.849	1725
+15.070	10.836	1725
+15.120	10.820	1725
+15.142	10.767	1725
+15.123	10.712	1725
+15.073	10.664	1725
+15.028	10.612	1725
+14.995	10.558	1725
+14.973	10.502	1725
+15.026	10.465	1725
+15.077	10.422	1725
+15.128	10.457	1725
+15.179	10.492	1725
+15.231	10.500	1725
+15.277	10.446	1725
+15.267	10.395	1725
+15.247	10.345	1725
+15.261	10.293	1725
+15.320	10.278	1725
+15.376	10.258	1725
+15.424	10.203	1725
+15.432	10.149	1725
+15.446	10.097	1725
+15.496	10.077	1725
+15.547	10.121	1725
+15.597	10.169	1725
+15.608	10.178	1725
+15.647	10.190	1725
+15.699	10.182	1725
+15.751	10.148	1725
+15.804	10.098	1725
+15.847	10.046	1725
+15.879	9.994	1725
+15.903	9.943	1725
+15.932	9.888	1725
+15.949	9.838	1725
+15.961	9.788	1725
+15.979	9.735	1725
+15.989	9.681	1725
+15.995	9.631	1725
+16.006	9.580	1725
+16.016	9.529	1725
+16.016	9.513	1725
+16.018	9.477	1725
+16.026	9.416	1725
+16.040	9.365	1725
+16.044	9.315	1725
+16.035	9.257	1725
+16.022	9.201	1725
+16.009	9.145	1725
+15.993	9.089	1725
+15.975	9.030	1725
+15.963	8.980	1725
+15.958	8.926	1725
+15.954	8.873	1725
+15.954	8.821	1725
+15.960	8.767	1725
+15.970	8.712	1725
+15.983	8.659	1725
+15.996	8.606	1725
+16.015	8.554	1725
+16.041	8.498	1725
+16.070	8.446	1725
+16.116	8.396	1725
+16.168	8.348	1725
+16.197	8.296	1725
+16.218	8.244	1725
+16.243	8.191	1725
+16.281	8.138	1725
+16.334	8.102	1725
+16.389	8.061	1725
+16.443	8.016	1725
+16.483	7.963	1725
+16.513	7.909	1725
+16.542	7.859	1725
+16.559	7.806	1725
+16.577	7.755	1725
+16.632	7.747	1725
+16.672	7.692	1725
+16.678	7.639	1725
+16.731	7.606	1725
+16.785	7.617	1725
+16.835	7.639	1725
+16.873	7.691	1725
+16.905	7.746	1725
+16.927	7.802	1725
+16.941	7.853	1725
+16.959	7.905	1725
+16.980	7.959	1725
+16.998	7.981	1725
+17.034	8.000	1725
+17.088	8.015	1725
+17.142	8.008	1725
+17.193	7.988	1725
+17.244	7.959	1725
+17.290	7.905	1725
+17.307	7.855	1725
+17.324	7.805	1725
+17.345	7.753	1725
+17.368	7.701	1725
+17.395	7.650	1725
+17.408	7.597	1725
+17.416	7.544	1725
+17.413	7.493	1725
+17.413	7.440	1725
+17.417	7.389	1725
+17.418	7.336	1725
+17.421	7.285	1725
+17.421	7.232	1725
+17.424	7.182	1725
+17.429	7.131	1725
+17.430	7.077	1725
+17.432	7.026	1725
+17.435	6.974	1725
+17.431	6.921	1725
+17.429	6.868	1725
+17.423	6.814	1725
+17.423	6.761	1725
+17.419	6.708	1725
+17.417	6.657	1725
+17.419	6.607	1725
+17.421	6.557	1725
+17.431	6.505	1725
+17.443	6.452	1725
+8.024	7.643	1750
+8.023	7.643	1750
+8.074	7.632	1750
+8.129	7.637	1750
+8.182	7.627	1750
+8.236	7.610	1750
+8.288	7.590	1750
+8.339	7.550	1750
+8.392	7.543	1750
+8.443	7.545	1750
+8.496	7.532	1750
+8.552	7.490	1750
+8.608	7.464	1750
+8.661	7.440	1750
+8.713	7.430	1750
+8.766	7.435	1750
+8.820	7.426	1750
+8.873	7.400	1750
+8.923	7.360	1750
+8.968	7.305	1750
+9.016	7.251	1750
+9.069	7.217	1750
+9.122	7.194	1750
+9.172	7.172	1750
+9.222	7.128	1750
+9.234	7.074	1750
+9.231	7.023	1750
+9.247	6.971	1750
+9.276	6.921	1750
+9.314	6.868	1750
+9.353	6.816	1750
+9.384	6.762	1750
+9.397	6.708	1750
+9.400	6.658	1750
+9.417	6.607	1750
+9.458	6.554	1750
+9.490	6.502	1750
+9.514	6.447	1750
+9.537	6.388	1750
+9.553	6.333	1750
+9.560	6.279	1750
+9.567	6.225	1750
+9.572	6.171	1750
+9.581	6.118	1750
+9.593	6.067	1750
+9.601	6.013	1750
+9.613	5.959	1750
+9.636	5.906	1750
+9.658	5.854	1750
+9.681	5.801	1750
+9.722	5.749	1750
+9.772	5.709	1750
+9.824	5.714	1750
+9.875	5.748	1750
+9.926	5.783	1750
+9.979	5.813	1750
+10.030	5.854	1750
+10.083	5.887	1750
+10.137	5.920	1750
+10.188	5.942	1750
+10.223	5.994	1750
+10.235	6.048	1750
+10.216	6.102	1750
+10.194	6.156	1750
+10.183	6.209	1750
+10.170	6.259	1750
+10.156	6.315	1750
+10.138	6.369	1750
+10.116	6.420	1750
+10.086	6.471	1750
+10.043	6.525	1750
+10.002	6.577	1750
+9.960	6.630	1750
+9.924	6.681	1750
+9.899	6.734	1750
+9.863	6.788	1750
+9.811	6.820	1750
+9.758	6.845	1750
+9.704	6.883	1750
+9.671	6.933	1750
+9.638	6.991	1750
+9.611	7.044	1750
+9.579	7.100	1750
+9.550	7.156	1750
+9.518	7.207	1750
+9.485	7.261	1750
+9.456	7.316	1750
+9.431	7.371	1750
+9.416	7.422	1750
+9.398	7.474	1750
+9.382	7.524	1750
+9.369	7.576	1750
+9.360	7.626	1750
+9.355	7.680	1750
+9.356	7.734	1750
+9.358	7.787	1750
+9.355	7.840	1750
+9.339	7.894	1750
+9.305	7.946	1750
+9.275	8.001	1750
+9.249	8.051	1750
+9.218	8.101	1750
+9.181	8.160	1750
+9.160	8.214	1750
+9.136	8.270	1750
+9.102	8.325	1750
+9.060	8.379	1750
+9.014	8.429	1750
+8.964	8.474	1750
+8.908	8.517	1750
+8.856	8.560	1750
+8.824	8.613	1750
+8.799	8.668	1750
+8.771	8.722	1750
+8.741	8.774	1750
+8.727	8.825	1750
+8.729	8.875	1750
+8.738	8.928	1750
+8.733	8.979	1750
+8.731	9.000	1750
+8.713	9.029	1750
+8.669	9.082	1750
+8.644	9.133	1750
+8.641	9.184	1750
+8.644	9.236	1750
+8.641	9.291	1750
+8.640	9.342	1750
+8.630	9.395	1750
+8.599	9.446	1750
+8.566	9.497	1750
+8.546	9.548	1750
+8.545	9.598	1750
+8.547	9.618	1750
+8.550	9.650	1750
+8.519	9.701	1750
+8.486	9.752	1750
+8.436	9.791	1750
+8.397	9.842	1750
+8.399	9.839	1750
+8.371	9.894	1750
+8.342	9.947	1750
+8.315	10.000	1750
+8.295	10.054	1750
+8.272	10.104	1750
+8.248	10.154	1750
+8.225	10.205	1750
+8.201	10.260	1750
+8.180	10.314	1750
+8.161	10.365	1750
+8.136	10.417	1750
+8.115	10.469	1750
+8.096	10.523	1750
+8.086	10.573	1750
+8.063	10.629	1750
+8.037	10.681	1750
+8.009	10.731	1750
+7.980	10.784	1750
+7.945	10.842	1750
+7.919	10.893	1750
+7.892	10.943	1750
+7.867	10.999	1750
+7.840	11.052	1750
+7.811	11.102	1750
+7.782	11.156	1750
+7.753	11.210	1750
+7.729	11.262	1750
+7.709	11.314	1750
+7.693	11.370	1750
+7.680	11.422	1750
+7.673	11.478	1750
+7.667	11.533	1750
+7.664	11.586	1750
+7.660	11.641	1750
+7.661	11.694	1750
+7.665	11.747	1750
+7.673	11.800	1750
+7.683	11.855	1750
+7.684	11.908	1750
+7.687	11.958	1750
+7.690	12.013	1750
+7.693	12.066	1750
+7.707	12.116	1750
+7.732	12.169	1750
+7.758	12.221	1750
+7.796	12.275	1750
+7.842	12.328	1750
+7.895	12.370	1750
+7.945	12.410	1750
+7.999	12.445	1750
+8.050	12.478	1750
+8.102	12.510	1750
+8.151	12.562	1750
+8.163	12.571	1750
+8.187	12.618	1750
+8.207	12.670	1750
+8.212	12.725	1750
+8.205	12.775	1750
+8.204	12.827	1750
+8.204	12.879	1750
+8.203	12.929	1750
+8.204	12.979	1750
+8.203	13.032	1750
+8.205	13.083	1750
+8.210	13.134	1750
+8.212	13.184	1750
+8.214	13.193	1750
+8.202	13.235	1750
+8.195	13.285	1750
+8.202	13.335	1750
+8.219	13.388	1750
+8.237	13.441	1750
+8.259	13.492	1750
+8.279	13.545	1750
+8.300	13.597	1750
+8.328	13.652	1750
+8.355	13.707	1750
+8.381	13.759	1750
+8.402	13.815	1750
+8.416	13.867	1750
+8.431	13.922	1750
+8.449	13.973	1750
+8.462	14.026	1750
+8.487	14.084	1750
+8.511	14.136	1750
+8.541	14.196	1750
+8.577	14.248	1750
+8.614	14.298	1750
+8.657	14.350	1750
+8.700	14.402	1750
+8.750	14.444	1750
+8.801	14.476	1750
+8.853	14.485	1750
+8.907	14.471	1750
+8.960	14.458	1750
+9.014	14.455	1750
+9.069	14.457	1750
+9.123	14.472	1750
+9.177	14.500	1750
+9.229	14.545	1750
+9.279	14.592	1750
+9.333	14.623	1750
+9.386	14.638	1750
+9.440	14.654	1750
+9.491	14.673	1750
+9.545	14.685	1750
+9.601	14.690	1750
+9.654	14.699	1750
+9.707	14.705	1750
+9.759	14.715	1750
+9.815	14.735	1750
+9.865	14.747	1750
+9.917	14.751	1750
+9.968	14.753	1750
+10.020	14.759	1750
+10.073	14.775	1750
+10.126	14.793	1750
+10.180	14.817	1750
+10.230	14.835	1750
+10.283	14.860	1750
+10.337	14.885	1750
+10.389	14.912	1750
+10.440	14.927	1750
+10.490	14.934	1750
+10.540	14.941	1750
+10.591	14.949	1750
+10.641	14.959	1750
+10.692	14.968	1750
+10.750	14.980	1750
+10.804	14.983	1750
+10.861	14.980	1750
+10.912	14.986	1750
+10.966	14.991	1750
+11.022	14.991	1750
+11.075	14.992	1750
+11.126	14.991	1750
+11.176	14.993	1750
+11.230	14.987	1750
+11.283	14.982	1750
+11.334	14.975	1750
+11.384	14.959	1750
+11.437	14.946	1750
+11.492	14.934	1750
+11.545	14.921	1750
+11.599	14.907	1750
+11.652	14.893	1750
+11.711	14.877	1750
+11.767	14.861	1750
+11.818	14.848	1750
+11.869	14.834	1750
+11.923	14.821	1750
+11.976	14.804	1750
+12.027	14.781	1750
+12.081	14.753	1750
+12.131	14.725	1750
+12.186	14.677	1750
+12.237	14.637	1750
+12.291	14.592	1750
+12.343	14.546	1750
+12.395	14.508	1750
+12.453	14.492	1750
+12.504	14.482	1750
+12.563	14.460	1750
+12.613	14.436	1750
+12.665	14.402	1750
+12.713	14.351	1750
+12.755	14.301	1750
+12.808	14.253	1750
+12.862	14.216	1750
+12.915	14.179	1750
+12.965	14.146	1750
+13.015	14.111	1750
+13.070	14.063	1750
+13.124	14.019	1750
+13.175	13.984	1750
+13.225	13.956	1750
+13.278	13.931	1750
+13.328	13.906	1750
+13.382	13.865	1750
+13.438	13.813	1750
+13.490	13.765	1750
+13.536	13.713	1750
+13.582	13.663	1750
+13.633	13.607	1750
+13.687	13.557	1750
+13.718	13.504	1750
+13.745	13.451	1750
+13.780	13.397	1750
+13.805	13.343	1750
+13.833	13.291	1750
+13.862	13.237	1750
+13.877	13.184	1750
+13.885	13.130	1750
+13.884	13.080	1750
+13.867	13.028	1750
+13.855	13.007	1750
+13.848	12.976	1750
+13.853	12.926	1750
+13.865	12.874	1750
+13.892	12.822	1750
+13.945	12.779	1750
+13.996	12.753	1750
+14.041	12.700	1750
+14.074	12.645	1750
+14.109	12.590	1750
+14.134	12.538	1750
+14.148	12.485	1750
+14.164	12.432	1750
+14.176	12.376	1750
+14.194	12.323	1750
+14.202	12.268	1750
+14.216	12.216	1750
+14.240	12.160	1750
+14.265	12.108	1750
+14.318	12.054	1750
+14.371	12.028	1750
+14.422	12.016	1750
+14.477	12.002	1750
+14.530	11.994	1750
+14.584	11.979	1750
+14.638	11.960	1750
+14.689	11.939	1750
+14.701	11.954	1750
+14.740	11.914	1750
+14.761	11.862	1750
+14.785	11.811	1750
+14.793	11.757	1750
+14.801	11.706	1750
+14.804	11.650	1750
+14.804	11.652	1750
+14.795	11.598	1750
+14.787	11.548	1750
+14.772	11.493	1750
+14.760	11.441	1750
+14.757	11.389	1750
+14.757	11.337	1750
+14.751	11.282	1750
+14.740	11.231	1750
+14.735	11.177	1750
+14.733	11.122	1750
+14.743	11.072	1750
+14.794	11.031	1750
+14.845	11.016	1750
+14.896	11.024	1750
+14.946	11.052	1750
+14.996	11.086	1750
+15.048	11.120	1750
+15.099	11.141	1750
+15.153	11.153	1750
+15.208	11.151	1750
+15.262	11.149	1750
+15.314	11.122	1750
+15.350	11.067	1750
+15.396	11.017	1750
+15.446	10.984	1750
+15.499	10.969	1750
+15.551	10.960	1750
+15.601	10.948	1750
+15.651	10.921	1750
+15.680	10.943	1750
+15.707	10.905	1750
+15.760	10.849	1750
+15.810	10.802	1750
+15.854	10.752	1750
+15.892	10.700	1750
+15.915	10.648	1750
+15.940	10.588	1750
+15.962	10.536	1750
+15.986	10.480	1750
+16.000	10.430	1750
+16.015	10.374	1750
+16.033	10.321	1750
+16.049	10.269	1750
+16.077	10.212	1750
+16.108	10.156	1750
+16.130	10.104	1750
+16.142	10.051	1750
+16.154	10.000	1750
+16.168	9.948	1750
+16.182	9.901	1750
+16.182	9.898	1750
+16.182	9.847	1750
+16.184	9.793	1750
+16.186	9.740	1750
+16.177	9.685	1750
+16.169	9.628	1750
+16.167	9.577	1750
+16.166	9.524	1750
+16.166	9.474	1750
+16.169	9.420	1750
+16.160	9.369	1750
+16.154	9.314	1750
+16.150	9.259	1750
+16.139	9.209	1750
+16.119	9.156	1750
+16.106	9.103	1750
+16.095	9.051	1750
+16.084	8.995	1750
+16.086	8.941	1750
+16.092	8.888	1750
+16.103	8.838	1750
+16.115	8.784	1750
+16.115	8.731	1750
+16.117	8.679	1750
+16.124	8.627	1750
+16.149	8.573	1750
+16.191	8.521	1750
+16.236	8.469	1750
+16.278	8.415	1750
+16.311	8.360	1750
+16.334	8.305	1750
+16.359	8.255	1750
+16.412	8.218	1750
+16.462	8.208	1750
+16.518	8.202	1750
+16.572	8.196	1750
+16.623	8.191	1750
+16.674	8.187	1750
+16.728	8.185	1750
+16.771	8.128	1750
+16.773	8.074	1750
+16.825	8.100	1750
+16.854	8.152	1750
+16.872	8.207	1750
+16.898	8.257	1750
+16.927	8.308	1750
+16.969	8.358	1750
+17.005	8.409	1750
+17.012	8.415	1750
+17.058	8.437	1750
+17.110	8.440	1750
+17.163	8.427	1750
+17.214	8.409	1750
+17.268	8.385	1750
+17.320	8.343	1750
+17.361	8.293	1750
+17.416	8.250	1750
+9.440	7.060	1775
+9.442	7.061	1775
+9.460	7.009	1775
+9.479	6.955	1775
+9.496	6.901	1775
+9.514	6.850	1775
+9.533	6.798	1775
+9.552	6.746	1775
+9.571	6.692	1775
+9.584	6.639	1775
+9.596	6.588	1775
+9.614	6.536	1775
+9.630	6.485	1775
+9.640	6.431	1775
+9.651	6.376	1775
+9.665	6.323	1775
+9.681	6.266	1775
+9.695	6.212	1775
+9.704	6.161	1775
+9.713	6.105	1775
+9.733	6.049	1775
+9.762	5.996	1775
+9.812	5.962	1775
+9.862	5.952	1775
+9.912	5.962	1775
+9.967	5.987	1775
+10.021	6.004	1775
+10.075	6.015	1775
+10.109	6.066	1775
+10.071	6.119	1775
+10.042	6.170	1775
+10.022	6.224	1775
+10.016	6.279	1775
+10.009	6.331	1775
+9.981	6.383	1775
+9.927	6.438	1775
+9.876	6.487	1775
+9.826	6.540	1775
+9.782	6.591	1775
+9.732	6.641	1775
+9.681	6.690	1775
+9.638	6.744	1775
+9.597	6.798	1775
+9.560	6.848	1775
+9.525	6.903	1775
+9.498	6.954	1775
+9.470	7.007	1775
+9.439	7.060	1775
+7.826	7.902	1775
+7.826	7.902	1775
+7.878	7.865	1775
+7.928	7.826	1775
+7.981	7.785	1775
+8.036	7.760	1775
+8.086	7.753	1775
+8.141	7.758	1775
+8.191	7.766	1775
+8.242	7.761	1775
+8.296	7.724	1775
+8.348	7.697	1775
+8.403	7.690	1775
+8.457	7.677	1775
+8.511	7.645	1775
+8.565	7.621	1775
+8.617	7.610	1775
+8.671	7.606	1775
+8.724	7.606	1775
+8.779	7.584	1775
+8.832	7.534	1775
+8.882	7.506	1775
+8.933	7.493	1775
+8.988	7.478	1775
+9.040	7.464	1775
+9.090	7.430	1775
+9.140	7.397	1775
+9.194	7.355	1775
+9.245	7.325	1775
+9.295	7.314	1775
+9.288	7.368	1775
+9.271	7.418	1775
+9.250	7.470	1775
+9.237	7.521	1775
+9.229	7.574	1775
+9.229	7.624	1775
+9.232	7.677	1775
+9.237	7.727	1775
+9.237	7.779	1775
+9.205	7.832	1775
+9.157	7.883	1775
+9.110	7.933	1775
+9.060	7.986	1775
+9.027	8.036	1775
+9.005	8.087	1775
+8.990	8.140	1775
+8.977	8.191	1775
+8.960	8.243	1775
+8.929	8.298	1775
+8.893	8.351	1775
+8.845	8.405	1775
+8.794	8.458	1775
+8.748	8.509	1775
+8.706	8.559	1775
+8.672	8.610	1775
+8.632	8.666	1775
+8.605	8.720	1775
+8.588	8.773	1775
+8.579	8.826	1775
+8.569	8.879	1775
+8.554	8.929	1775
+8.531	8.981	1775
+8.493	9.034	1775
+8.460	9.087	1775
+8.433	9.140	1775
+8.427	9.183	1775
+8.405	9.195	1775
+8.363	9.247	1775
+8.337	9.297	1775
+8.308	9.350	1775
+8.292	9.403	1775
+8.281	9.456	1775
+8.275	9.506	1775
+8.275	9.530	1775
+8.277	9.556	1775
+8.308	9.606	1775
+8.335	9.661	1775
+8.333	9.711	1775
+8.283	9.752	1775
+8.229	9.773	1775
+8.177	9.794	1775
+8.156	9.821	1775
+8.133	9.848	1775
+8.109	9.902	1775
+8.075	9.956	1775
+8.043	10.008	1775
+8.006	10.060	1775
+7.979	10.111	1775
+7.955	10.162	1775
+7.930	10.218	1775
+7.908	10.272	1775
+7.890	10.323	1775
+7.871	10.378	1775
+7.850	10.429	1775
+7.819	10.484	1775
+7.785	10.534	1775
+7.753	10.586	1775
+7.727	10.636	1775
+7.698	10.694	1775
+7.675	10.747	1775
+7.651	10.802	1775
+7.630	10.855	1775
+7.607	10.910	1775
+7.590	10.965	1775
+7.569	11.016	1775
+7.550	11.067	1775
+7.531	11.121	1775
+7.510	11.172	1775
+7.485	11.222	1775
+7.470	11.274	1775
+7.465	11.329	1775
+7.462	11.381	1775
+7.459	11.432	1775
+7.460	11.482	1775
+7.457	11.534	1775
+7.449	11.586	1775
+7.443	11.637	1775
+7.477	11.690	1775
+7.505	11.743	1775
+7.514	11.794	1775
+7.525	11.846	1775
+7.537	11.902	1775
+7.550	11.953	1775
+7.558	12.006	1775
+7.566	12.059	1775
+7.570	12.110	1775
+7.576	12.161	1775
+7.563	12.212	1775
+7.563	12.264	1775
+7.569	12.315	1775
+7.599	12.365	1775
+7.650	12.416	1775
+7.701	12.464	1775
+7.753	12.509	1775
+7.803	12.547	1775
+7.856	12.584	1775
+7.907	12.623	1775
+7.959	12.673	1775
+7.994	12.724	1775
+8.020	12.775	1775
+8.040	12.826	1775
+8.047	12.881	1775
+8.053	12.932	1775
+8.048	12.986	1775
+8.042	13.036	1775
+8.036	13.088	1775
+8.027	13.140	1775
+8.020	13.191	1775
+8.017	13.241	1775
+8.017	13.294	1775
+8.015	13.346	1775
+8.014	13.399	1775
+8.016	13.452	1775
+8.023	13.502	1775
+8.031	13.552	1775
+8.042	13.604	1775
+8.057	13.656	1775
+8.081	13.708	1775
+8.102	13.761	1775
+8.122	13.814	1775
+8.145	13.868	1775
+8.170	13.919	1775
+8.203	13.972	1775
+8.235	14.022	1775
+8.265	14.079	1775
+8.296	14.134	1775
+8.321	14.186	1775
+8.343	14.236	1775
+8.373	14.290	1775
+8.405	14.344	1775
+8.457	14.395	1775
+8.507	14.446	1775
+8.540	14.496	1775
+8.578	14.549	1775
+8.628	14.591	1775
+8.678	14.605	1775
+8.729	14.616	1775
+8.779	14.624	1775
+8.829	14.637	1775
+8.885	14.598	1775
+8.939	14.567	1775
+8.991	14.564	1775
+9.044	14.565	1775
+9.095	14.594	1775
+9.148	14.629	1775
+9.200	14.674	1775
+9.245	14.726	1775
+9.289	14.778	1775
+9.329	14.828	1775
+9.368	14.879	1775
+9.423	14.920	1775
+9.478	14.951	1775
+9.536	14.955	1775
+9.594	14.969	1775
+9.650	14.977	1775
+9.704	14.985	1775
+9.761	14.996	1775
+9.813	15.008	1775
+9.866	15.016	1775
+9.916	15.020	1775
+9.969	15.030	1775
+10.024	15.041	1775
+10.079	15.058	1775
+10.131	15.079	1775
+10.182	15.104	1775
+10.235	15.142	1775
+10.289	15.181	1775
+10.343	15.218	1775
+10.393	15.249	1775
+10.443	15.287	1775
+10.927	15.296	1775
+10.927	15.298	1775
+10.980	15.291	1775
+11.033	15.277	1775
+11.083	15.269	1775
+11.134	15.254	1775
+11.186	15.241	1775
+11.237	15.234	1775
+11.295	15.224	1775
+11.356	15.211	1775
+11.409	15.203	1775
+11.466	15.196	1775
+11.516	15.197	1775
+11.566	15.195	1775
+11.618	15.189	1775
+11.673	15.183	1775
+11.727	15.181	1775
+11.780	15.177	1775
+11.835	15.171	1775
+11.892	15.150	1775
+11.945	15.128	1775
+11.998	15.106	1775
+12.049	15.084	1775
+12.107	15.056	1775
+12.165	15.029	1775
+12.220	14.999	1775
+12.271	14.965	1775
+12.327	14.925	1775
+12.383	14.889	1775
+12.438	14.860	1775
+12.492	14.829	1775
+12.549	14.799	1775
+12.603	14.772	1775
+12.654	14.748	1775
+12.708	14.719	1775
+12.765	14.686	1775
+12.822	14.651	1775
+12.879	14.615	1775
+12.936	14.578	1775
+12.994	14.546	1775
+13.046	14.513	1775
+13.096	14.484	1775
+13.146	14.452	1775
+13.200	14.422	1775
+13.250	14.388	1775
+13.304	14.348	1775
+13.361	14.310	1775
+13.417	14.268	1775
+13.467	14.221	1775
+13.517	14.171	1775
+13.562	14.115	1775
+13.599	14.063	1775
+13.638	14.013	1775
+13.678	13.963	1775
+13.725	13.909	1775
+13.765	13.856	1775
+13.804	13.799	1775
+13.844	13.745	1775
+13.877	13.691	1775
+13.902	13.640	1775
+13.932	13.585	1775
+13.961	13.533	1775
+13.982	13.480	1775
+14.000	13.430	1775
+14.021	13.378	1775
+14.041	13.323	1775
+14.059	13.269	1775
+14.075	13.214	1775
+14.086	13.162	1775
+14.091	13.111	1775
+14.091	13.054	1775
+14.104	13.001	1775
+14.110	12.950	1775
+14.108	12.898	1775
+14.036	12.789	1775
+14.095	12.827	1775
+14.129	12.775	1775
+14.164	12.724	1775
+14.191	12.667	1775
+14.220	12.614	1775
+14.247	12.563	1775
+14.271	12.511	1775
+14.291	12.458	1775
+14.298	12.406	1775
+14.304	12.355	1775
+14.356	12.329	1775
+14.355	12.279	1775
+14.350	12.228	1775
+14.402	12.177	1775
+14.455	12.171	1775
+14.510	12.163	1775
+14.563	12.160	1775
+14.615	12.151	1775
+14.667	12.142	1775
+14.718	12.137	1775
+14.768	12.129	1775
+14.818	12.117	1775
+14.820	12.094	1775
+14.869	12.088	1775
+14.911	12.034	1775
+14.942	11.981	1775
+14.973	11.928	1775
+14.970	11.880	1775
+14.968	11.876	1775
+14.976	11.825	1775
+14.986	11.774	1775
+14.974	11.721	1775
+14.952	11.671	1775
+14.928	11.618	1775
+14.932	11.565	1775
+14.922	11.512	1775
+14.894	11.459	1775
+14.869	11.406	1775
+14.845	11.352	1775
+14.828	11.301	1775
+14.855	11.251	1775
+14.907	11.254	1775
+14.959	11.264	1775
+15.016	11.282	1775
+15.067	11.299	1775
+15.119	11.316	1775
+15.169	11.325	1775
+15.224	11.334	1775
+15.276	11.337	1775
+15.335	11.339	1775
+15.389	11.344	1775
+15.445	11.345	1775
+15.501	11.339	1775
+15.552	11.309	1775
+15.593	11.256	1775
+15.637	11.205	1775
+15.687	11.170	1775
+15.738	11.153	1775
+15.793	11.135	1775
+15.845	11.110	1775
+15.858	11.104	1775
+15.880	11.056	1775
+15.909	10.999	1775
+15.940	10.945	1775
+15.975	10.894	1775
+16.009	10.838	1775
+16.047	10.786	1775
+16.089	10.735	1775
+16.121	10.678	1775
+16.142	10.621	1775
+16.162	10.563	1775
+16.182	10.510	1775
+16.206	10.460	1775
+16.230	10.408	1775
+16.246	10.356	1775
+16.264	10.304	1775
+16.276	10.252	1775
+16.283	10.201	1775
+16.294	10.148	1775
+16.302	10.094	1775
+16.309	10.044	1775
+16.322	9.999	1775
+16.322	9.990	1775
+16.325	9.938	1775
+16.327	9.883	1775
+16.323	9.832	1775
+16.315	9.778	1775
+16.302	9.728	1775
+16.274	9.675	1775
+16.255	9.621	1775
+16.274	9.569	1775
+16.276	9.516	1775
+16.255	9.464	1775
+16.244	9.413	1775
+16.264	9.360	1775
+16.277	9.305	1775
+16.268	9.254	1775
+16.251	9.203	1775
+16.237	9.148	1775
+16.227	9.095	1775
+16.210	9.042	1775
+16.196	8.987	1775
+16.195	8.935	1775
+16.221	8.885	1775
+16.248	8.832	1775
+16.260	8.778	1775
+16.257	8.725	1775
+16.268	8.674	1775
+16.292	8.620	1775
+16.328	8.567	1775
+16.355	8.517	1775
+16.384	8.465	1775
+16.437	8.413	1775
+16.491	8.405	1775
+16.542	8.415	1775
+16.593	8.435	1775
+16.644	8.457	1775
+16.697	8.477	1775
+16.752	8.492	1775
+16.804	8.514	1775
+16.855	8.537	1775
+16.906	8.569	1775
+16.947	8.619	1775
+16.956	8.625	1775
+17.005	8.646	1775
+17.059	8.678	1775
+17.109	8.684	1775
+17.163	8.679	1775
+17.216	8.664	1775
+17.267	8.651	1775
+17.318	8.640	1775
+17.369	8.617	1775
+17.419	8.593	1775
+7.659	8.134	1800
+7.658	8.130	1800
+7.712	8.104	1800
+7.766	8.081	1800
+7.816	8.068	1800
+7.867	8.048	1800
+7.921	8.019	1800
+7.943	7.967	1800
+7.991	7.916	1800
+8.042	7.898	1800
+8.096	7.886	1800
+8.151	7.875	1800
+8.207	7.867	1800
+8.263	7.868	1800
+8.319	7.867	1800
+8.369	7.863	1800
+8.425	7.852	1800
+8.481	7.828	1800
+8.537	7.803	1800
+8.587	7.780	1800
+8.641	7.751	1800
+8.693	7.727	1800
+8.745	7.708	1800
+8.795	7.698	1800
+8.850	7.681	1800
+8.900	7.669	1800
+8.957	7.651	1800
+9.007	7.633	1800
+9.060	7.614	1800
+9.075	7.668	1800
+9.046	7.725	1800
+9.006	7.779	1800
+8.962	7.835	1800
+8.920	7.888	1800
+8.881	7.941	1800
+8.838	7.996	1800
+8.812	8.050	1800
+8.794	8.107	1800
+8.775	8.157	1800
+8.757	8.209	1800
+8.733	8.263	1800
+8.697	8.315	1800
+8.658	8.369	1800
+8.610	8.423	1800
+8.570	8.476	1800
+8.533	8.532	1800
+8.499	8.585	1800
+8.481	8.638	1800
+8.470	8.693	1800
+8.459	8.744	1800
+8.449	8.800	1800
+8.430	8.858	1800
+8.415	8.909	1800
+8.391	8.964	1800
+8.362	9.017	1800
+8.314	9.067	1800
+8.257	9.111	1800
+8.201	9.140	1800
+8.148	9.183	1800
+8.117	9.236	1800
+8.110	9.291	1800
+8.109	9.344	1800
+8.114	9.399	1800
+8.122	9.452	1800
+8.130	9.505	1800
+8.141	9.559	1800
+8.147	9.614	1800
+8.154	9.664	1800
+8.103	9.673	1800
+8.048	9.691	1800
+7.996	9.713	1800
+7.945	9.740	1800
+7.914	9.762	1800
+7.892	9.793	1800
+7.840	9.846	1800
+7.800	9.896	1800
+7.758	9.949	1800
+7.724	10.003	1800
+7.688	10.057	1800
+7.655	10.107	1800
+7.621	10.164	1800
+7.597	10.215	1800
+7.569	10.267	1800
+7.540	10.318	1800
+7.517	10.369	1800
+7.498	10.422	1800
+7.484	10.472	1800
+7.471	10.522	1800
+7.457	12.488	1800
+7.457	12.490	1800
+7.490	12.545	1800
+7.519	12.596	1800
+7.559	12.650	1800
+7.591	12.703	1800
+7.615	12.754	1800
+7.634	12.804	1800
+7.650	12.856	1800
+7.664	12.907	1800
+7.679	12.958	1800
+7.698	13.009	1800
+7.719	13.060	1800
+7.742	13.113	1800
+7.771	13.164	1800
+7.812	13.215	1800
+7.836	13.265	1800
+7.846	13.317	1800
+7.846	13.367	1800
+7.841	13.422	1800
+7.838	13.477	1800
+7.839	13.534	1800
+7.850	13.591	1800
+7.866	13.647	1800
+7.880	13.701	1800
+7.901	13.757	1800
+7.929	13.811	1800
+7.954	13.862	1800
+7.984	13.912	1800
+8.012	13.962	1800
+8.034	14.015	1800
+8.057	14.067	1800
+8.087	14.120	1800
+8.119	14.174	1800
+8.148	14.225	1800
+8.176	14.277	1800
+8.198	14.328	1800
+8.224	14.378	1800
+8.245	14.429	1800
+8.265	14.483	1800
+8.283	14.536	1800
+8.297	14.587	1800
+8.312	14.639	1800
+8.317	14.691	1800
+8.326	14.746	1800
+8.332	14.799	1800
+8.350	14.851	1800
+8.400	14.888	1800
+8.452	14.908	1800
+8.505	14.912	1800
+8.560	14.912	1800
+8.612	14.906	1800
+8.664	14.898	1800
+8.720	14.872	1800
+8.771	14.844	1800
+8.816	14.794	1800
+8.858	14.741	1800
+8.895	14.691	1800
+8.945	14.641	1800
+8.995	14.625	1800
+9.014	14.676	1800
+9.064	14.684	1800
+9.091	14.735	1800
+9.140	14.786	1800
+9.193	14.818	1800
+9.227	14.872	1800
+9.232	14.922	1800
+9.241	14.973	1800
+9.236	15.026	1800
+9.259	15.079	1800
+9.298	15.130	1800
+9.323	15.180	1800
+9.338	15.234	1800
+9.362	15.288	1800
+12.195	15.295	1800
+12.196	15.298	1800
+12.250	15.298	1800
+12.303	15.267	1800
+12.357	15.225	1800
+12.398	15.173	1800
+12.448	15.133	1800
+12.500	15.086	1800
+12.552	15.053	1800
+12.607	15.030	1800
+12.658	15.014	1800
+12.713	14.994	1800
+12.768	14.967	1800
+12.820	14.934	1800
+12.875	14.907	1800
+12.932	14.878	1800
+12.983	14.858	1800
+13.034	14.839	1800
+13.087	14.815	1800
+13.139	14.778	1800
+13.193	14.737	1800
+13.249	14.693	1800
+13.300	14.657	1800
+13.355	14.618	1800
+13.408	14.582	1800
+13.459	14.543	1800
+13.515	14.506	1800
+13.566	14.463	1800
+13.612	14.411	1800
+13.663	14.363	1800
+13.713	14.324	1800
+13.765	14.282	1800
+13.814	14.230	1800
+13.851	14.180	1800
+13.895	14.129	1800
+13.938	14.076	1800
+13.975	14.023	1800
+14.012	13.969	1800
+14.046	13.915	1800
+14.069	13.865	1800
+14.087	13.807	1800
+14.110	13.753	1800
+14.144	13.697	1800
+14.168	13.644	1800
+14.194	13.589	1800
+14.221	13.539	1800
+14.246	13.489	1800
+14.268	13.436	1800
+14.285	13.382	1800
+14.298	13.329	1800
+14.312	13.278	1800
+14.330	13.224	1800
+14.335	13.172	1800
+14.327	13.122	1800
+14.311	13.072	1800
+14.294	13.019	1800
+14.268	12.967	1800
+14.310	13.032	1800
+14.309	13.033	1800
+14.267	12.983	1800
+14.254	12.931	1800
+14.254	12.879	1800
+14.265	12.828	1800
+14.279	12.778	1800
+14.301	12.725	1800
+14.322	12.675	1800
+14.344	12.622	1800
+14.367	12.569	1800
+14.389	12.518	1800
+14.404	12.465	1800
+14.418	12.412	1800
+14.432	12.362	1800
+14.465	12.312	1800
+14.516	12.315	1800
+14.570	12.315	1800
+14.622	12.278	1800
+14.674	12.237	1800
+14.725	12.218	1800
+14.775	12.224	1800
+14.826	12.256	1800
+14.877	12.253	1800
+14.880	12.251	1800
+14.929	12.237	1800
+14.979	12.184	1800
+15.019	12.130	1800
+15.058	12.079	1800
+15.081	12.028	1800
+15.100	11.977	1800
+15.108	11.927	1800
+15.113	11.888	1800
+15.110	11.874	1800
+15.107	11.822	1800
+15.102	11.768	1800
+15.089	11.717	1800
+15.072	11.665	1800
+15.049	11.614	1800
+15.016	11.563	1800
+14.989	11.512	1800
+14.960	11.460	1800
+14.946	11.409	1800
+14.996	11.408	1800
+15.050	11.442	1800
+15.100	11.462	1800
+15.158	11.480	1800
+15.217	11.491	1800
+15.272	11.500	1800
+15.323	11.515	1800
+15.375	11.520	1800
+15.427	11.526	1800
+15.480	11.531	1800
+15.530	11.536	1800
+15.582	11.524	1800
+15.633	11.500	1800
+15.683	11.462	1800
+15.733	11.410	1800
+15.777	11.358	1800
+15.824	11.307	1800
+15.877	11.269	1800
+15.929	11.231	1800
+15.980	11.194	1800
+16.030	11.147	1800
+16.034	11.146	1800
+16.088	11.151	1800
+16.139	11.121	1800
+16.182	11.069	1800
+16.218	11.019	1800
+16.251	10.963	1800
+16.274	10.913	1800
+16.295	10.860	1800
+16.313	10.805	1800
+16.329	10.753	1800
+16.344	10.700	1800
+16.355	10.647	1800
+16.368	10.596	1800
+16.382	10.543	1800
+16.395	10.491	1800
+16.408	10.439	1800
+16.424	10.386	1800
+16.443	10.334	1800
+16.455	10.282	1800
+16.462	10.230	1800
+16.464	10.178	1800
+16.465	10.127	1800
+16.466	10.075	1800
+16.464	10.023	1800
+16.463	10.014	1800
+16.432	9.969	1800
+16.406	9.917	1800
+16.394	9.865	1800
+16.379	9.812	1800
+16.363	9.760	1800
+16.343	9.706	1800
+16.327	9.654	1800
+16.354	9.604	1800
+16.359	9.553	1800
+16.348	9.503	1800
+16.338	9.453	1800
+16.355	9.403	1800
+16.371	9.348	1800
+16.378	9.291	1800
+16.378	9.241	1800
+16.376	9.191	1800
+16.367	9.135	1800
+16.358	9.079	1800
+16.346	9.027	1800
+16.336	8.976	1800
+16.328	8.922	1800
+16.378	8.881	1800
+16.432	8.892	1800
+16.484	8.863	1800
+16.531	8.809	1800
+16.582	8.768	1800
+16.634	8.741	1800
+16.685	8.732	1800
+16.738	8.710	1800
+16.789	8.720	1800
+16.846	8.736	1800
+16.902	8.758	1800
+16.956	8.788	1800
+17.009	8.805	1800
+17.062	8.812	1800
+17.116	8.831	1800
+17.167	8.835	1800
+17.223	8.842	1800
+17.274	8.859	1800
+17.327	8.865	1800
+17.381	8.863	1800
+17.432	8.847	1800
+7.479	8.369	1825
+7.480	8.370	1825
+7.531	8.322	1825
+7.586	8.289	1825
+7.637	8.279	1825
+7.690	8.285	1825
+7.741	8.270	1825
+7.783	8.219	1825
+7.839	8.194	1825
+7.896	8.193	1825
+7.946	8.193	1825
+7.999	8.174	1825
+8.022	8.124	1825
+8.035	8.073	1825
+8.067	8.019	1825
+8.117	8.013	1825
+8.168	8.029	1825
+8.221	8.014	1825
+8.272	7.995	1825
+8.328	7.988	1825
+8.378	7.979	1825
+8.431	7.976	1825
+8.481	7.974	1825
+8.532	7.961	1825
+8.585	7.955	1825
+8.638	7.946	1825
+8.691	7.947	1825
+8.692	8.001	1825
+8.671	8.051	1825
+8.648	8.105	1825
+8.627	8.160	1825
+8.608	8.211	1825
+8.584	8.262	1825
+8.547	8.315	1825
+8.509	8.369	1825
+8.473	8.423	1825
+8.443	8.479	1825
+8.420	8.529	1825
+8.398	8.579	1825
+8.376	8.633	1825
+8.359	8.686	1825
+8.341	8.738	1825
+8.322	8.796	1825
+8.304	8.850	1825
+8.283	8.905	1825
+8.229	8.961	1825
+8.179	8.995	1825
+8.124	9.049	1825
+8.087	9.100	1825
+8.062	9.153	1825
+8.037	9.205	1825
+8.017	9.261	1825
+8.003	9.312	1825
+7.990	9.366	1825
+7.984	9.418	1825
+7.983	9.471	1825
+7.988	9.523	1825
+7.996	9.578	1825
+7.984	9.630	1825
+7.933	9.647	1825
+7.881	9.694	1825
+7.827	9.718	1825
+7.774	9.752	1825
+7.725	9.804	1825
+7.685	9.855	1825
+7.655	9.905	1825
+7.621	9.960	1825
+7.591	10.013	1825
+7.558	10.066	1825
+7.529	10.117	1825
+7.496	10.168	1825
+7.451	8.509	1850
+7.452	8.506	1850
+7.503	8.496	1850
+7.554	8.469	1850
+7.604	8.430	1850
+7.658	8.413	1850
+7.708	8.418	1850
+7.760	8.398	1850
+7.812	8.366	1850
+7.866	8.355	1850
+7.919	8.355	1850
+7.972	8.335	1850
+8.023	8.298	1850
+8.074	8.244	1850
+8.129	8.224	1850
+8.179	8.201	1850
+8.229	8.162	1850
+8.281	8.143	1850
+8.332	8.131	1850
+8.388	8.121	1850
+8.443	8.126	1850
+8.451	8.178	1850
+8.407	8.230	1850
+8.375	8.286	1850
+8.351	8.337	1850
+8.329	8.389	1850
+8.322	8.447	1850
+8.316	8.503	1850
+8.285	8.554	1850
+8.249	8.604	1850
+8.215	8.655	1850
+8.185	8.707	1850
+8.162	8.760	1850
+8.136	8.811	1850
+8.094	8.862	1850
+8.054	8.919	1850
+8.026	8.970	1850
+7.993	9.020	1850
+7.955	9.071	1850
+7.932	9.121	1850
+7.903	9.175	1850
+7.876	9.230	1850
+7.863	9.283	1850
+7.855	9.339	1850
+7.852	9.393	1850
+7.853	9.446	1850
+7.856	9.497	1850
+7.862	9.548	1850
+7.863	9.600	1850
+7.811	9.633	1850
+7.758	9.667	1850
+7.705	9.701	1850
+7.658	9.753	1850
+7.635	9.804	1850
+7.583	9.831	1850
+7.559	9.882	1850
+7.532	9.934	1850
+7.493	9.984	1850
+7.450	8.731	1875
+7.449	8.731	1875
+7.500	8.683	1875
+7.552	8.647	1875
+7.605	8.611	1875
+7.655	8.579	1875
+7.711	8.564	1875
+7.767	8.553	1875
+7.821	8.526	1875
+7.871	8.497	1875
+7.929	8.490	1875
+7.980	8.483	1875
+8.033	8.463	1875
+8.086	8.431	1875
+8.140	8.399	1875
+8.167	8.450	1875
+8.149	8.505	1875
+8.126	8.562	1875
+8.101	8.615	1875
+8.068	8.671	1875
+8.033	8.727	1875
+7.999	8.781	1875
+7.969	8.834	1875
+7.936	8.886	1875
+7.899	8.939	1875
+7.865	8.991	1875
+7.827	9.047	1875
+7.793	9.101	1875
+7.764	9.154	1875
+7.740	9.204	1875
+7.726	9.255	1875
+7.727	9.305	1875
+7.733	9.355	1875
+7.732	9.406	1875
+7.740	9.460	1875
+7.757	9.510	1875
+7.715	9.563	1875
+7.665	9.600	1875
+7.614	9.621	1875
+7.567	9.672	1875
+7.513	9.719	1875
+7.462	9.766	1875
+7.456	8.988	1900
+7.455	8.987	1900
+7.493	8.934	1900
+7.533	8.873	1900
+7.559	8.822	1900
+7.611	8.776	1900
+7.665	8.731	1900
+7.715	8.722	1900
+7.766	8.705	1900
+7.816	8.675	1900
+7.867	8.655	1900
+7.919	8.639	1900
+7.972	8.617	1900
+7.961	8.673	1900
+7.934	8.726	1900
+7.901	8.782	1900
+7.865	8.835	1900
+7.831	8.885	1900
+7.794	8.938	1900
+7.755	8.994	1900
+7.733	9.046	1900
+7.704	9.098	1900
+7.669	9.153	1900
+7.640	9.204	1900
+7.621	9.258	1900
+7.615	9.311	1900
+7.613	9.363	1900
+7.612	9.415	1900
+7.603	9.470	1900
+7.566	9.520	1900
+7.516	9.558	1900
+7.467	13.055	1825
+7.484	13.054	1825
+7.518	13.115	1825
+7.556	13.170	1825
+7.597	13.221	1825
+7.632	13.274	1825
+7.667	13.328	1825
+7.694	13.381	1825
+7.704	13.434	1825
+7.706	13.488	1825
+7.701	13.543	1825
+7.709	13.594	1825
+7.720	13.646	1825
+7.726	13.697	1825
+7.744	13.748	1825
+7.779	13.799	1825
+7.824	13.854	1825
+7.867	13.907	1825
+7.867	13.958	1825
+7.894	14.012	1825
+7.946	14.049	1825
+7.987	14.101	1825
+7.999	14.154	1825
+8.001	14.208	1825
+8.029	14.260	1825
+8.081	14.290	1825
+8.083	14.341	1825
+8.102	14.392	1825
+8.154	14.424	1825
+8.175	14.477	1825
+8.191	14.530	1825
+8.223	14.583	1825
+8.249	14.636	1825
+8.254	14.690	1825
+8.247	14.740	1825
+8.239	14.792	1825
+8.223	14.844	1825
+8.208	14.896	1825
+8.208	14.949	1825
+8.201	14.999	1825
+8.150	15.035	1825
+8.131	14.985	1825
+8.080	14.970	1825
+8.029	14.921	1825
+7.979	14.889	1825
+7.929	14.858	1825
+7.922	14.807	1825
+7.872	14.766	1825
+7.845	14.715	1825
+7.849	14.664	1825
+7.816	14.611	1825
+7.833	14.558	1825
+7.843	14.506	1825
+7.818	14.453	1825
+7.767	14.411	1825
+7.715	14.372	1825
+7.718	14.322	1825
+7.705	14.271	1825
+7.654	14.231	1825
+7.671	14.177	1825
+7.674	14.126	1825
+7.644	14.076	1825
+7.628	14.025	1825
+7.624	13.975	1825
+7.613	13.925	1825
+7.583	13.872	1825
+7.551	13.822	1825
+7.497	13.777	1825
+7.713	13.908	1850
+7.712	13.907	1850
+7.764	13.925	1850
+7.780	13.979	1850
+7.785	14.029	1850
+7.786	14.079	1850
+7.842	14.116	1850
+7.878	14.167	1850
+7.883	14.221	1850
+7.908	14.272	1850
+7.948	14.325	1850
+7.986	14.375	1850
+8.036	14.395	1850
+8.055	14.449	1850
+8.077	14.502	1850
+8.117	14.553	1850
+8.127	14.606	1850
+8.130	14.660	1850
+8.126	14.710	1850
+8.124	14.760	1850
+8.134	14.813	1850
+8.082	14.860	1850
+8.031	14.827	1850
+8.009	14.775	1850
+7.955	14.727	1850
+7.913	14.677	1850
+7.910	14.627	1850
+7.901	14.573	1850
+7.909	14.523	1850
+7.933	14.471	1850
+7.930	14.419	1850
+7.878	14.401	1850
+7.836	14.351	1850
+7.821	14.301	1850
+7.793	14.243	1850
+7.741	14.191	1850
+7.722	14.137	1850
+7.722	14.083	1850
+7.715	14.033	1850
+7.697	13.982	1850
+7.455	13.956	1800
+7.453	13.955	1800
+7.497	14.007	1800
+7.534	14.060	1800
+7.543	14.111	1800
+7.558	14.164	1800
+7.543	14.217	1800
+7.532	14.267	1800
+7.585	14.310	1800
+7.617	14.361	1800
+7.619	14.411	1800
+7.671	14.446	1800
+7.722	14.466	1800
+7.774	14.516	1800
+7.793	14.570	1800
+7.779	14.620	1800
+7.751	14.670	1800
+7.754	14.721	1800
+7.745	14.771	1800
+7.799	14.798	1800
+7.850	14.825	1800
+7.835	14.877	1800
+7.834	14.929	1800
+7.888	14.954	1800
+7.942	14.970	1800
+7.995	14.993	1800
+8.028	15.044	1800
+8.033	15.094	1800
+8.083	15.116	1800
+8.136	15.133	1800
+8.188	15.165	1800
+8.235	15.215	1800
+8.267	15.269	1800
+12.754	15.297	1825
+12.754	15.298	1825
+12.794	15.247	1825
+12.846	15.214	1825
+12.900	15.204	1825
+12.953	15.191	1825
+13.008	15.168	1825
+13.061	15.134	1825
+13.107	15.083	1825
+13.154	15.033	1825
+13.191	14.983	1825
+13.242	14.943	1825
+13.296	14.918	1825
+13.346	14.902	1825
+13.398	14.885	1825
+13.449	14.862	1825
+13.500	14.831	1825
+13.556	14.787	1825
+13.608	14.739	1825
+13.658	14.692	1825
+13.711	14.644	1825
+13.762	14.603	1825
+13.812	14.562	1825
+13.866	14.518	1825
+13.916	14.483	1825
+13.968	14.441	1825
+14.021	14.397	1825
+14.075	14.361	1825
+14.128	14.309	1825
+14.167	14.253	1825
+14.188	14.202	1825
+14.203	14.149	1825
+14.227	14.094	1825
+14.249	14.044	1825
+14.272	13.992	1825
+14.289	13.940	1825
+14.303	13.886	1825
+14.317	13.831	1825
+14.338	13.777	1825
+14.361	13.725	1825
+14.382	13.673	1825
+14.404	13.622	1825
+14.425	13.572	1825
+14.445	13.519	1825
+14.469	13.465	1825
+14.486	13.413	1825
+14.493	13.361	1825
+14.506	13.311	1825
+14.509	13.258	1825
+14.512	13.207	1825
+14.504	13.157	1825
+14.488	13.107	1825
+14.489	13.102	1825
+14.459	13.054	1825
+14.429	13.002	1825
+14.409	12.949	1825
+14.402	12.899	1825
+14.401	12.848	1825
+14.418	12.796	1825
+14.442	12.745	1825
+14.470	12.693	1825
+14.488	12.640	1825
+14.490	12.590	1825
+14.538	12.540	1825
+14.560	12.489	1825
+14.611	12.446	1825
+14.661	12.415	1825
+14.712	12.419	1825
+14.763	12.424	1825
+14.813	12.413	1825
+14.821	12.416	1825
+14.867	12.410	1825
+14.918	12.393	1825
+14.969	12.349	1825
+15.023	12.309	1825
+15.075	12.277	1825
+15.122	12.223	1825
+15.162	12.170	1825
+15.187	12.120	1825
+15.208	12.068	1825
+15.218	12.017	1825
+15.222	11.967	1825
+15.223	11.916	1825
+15.220	11.863	1825
+15.216	11.815	1825
+15.211	11.813	1825
+15.197	11.762	1825
+15.176	11.711	1825
+15.140	11.661	1825
+15.097	11.610	1825
+15.067	11.558	1825
+15.121	11.544	1825
+15.174	11.571	1825
+15.225	11.591	1825
+15.282	11.605	1825
+15.343	11.620	1825
+15.396	11.636	1825
+15.449	11.660	1825
+15.499	11.684	1825
+15.550	11.698	1825
+15.604	11.706	1825
+15.654	11.693	1825
+15.705	11.667	1825
+15.757	11.630	1825
+15.808	11.586	1825
+15.859	11.539	1825
+15.912	11.497	1825
+15.960	11.446	1825
+15.985	11.396	1825
+16.037	11.364	1825
+16.087	11.383	1825
+16.110	11.397	1825
+16.144	11.398	1825
+16.195	11.390	1825
+16.248	11.355	1825
+16.302	11.315	1825
+16.345	11.261	1825
+16.381	11.209	1825
+16.410	11.155	1825
+16.431	11.103	1825
+16.457	11.051	1825
+16.478	10.996	1825
+16.496	10.946	1825
+16.515	10.892	1825
+16.531	10.841	1825
+16.552	10.786	1825
+16.570	10.735	1825
+16.585	10.681	1825
+16.600	10.629	1825
+16.612	10.577	1825
+16.624	10.524	1825
+16.629	10.471	1825
+16.630	10.417	1825
+16.641	10.365	1825
+16.641	10.311	1825
+16.636	10.258	1825
+16.618	10.207	1825
+16.601	10.164	1825
+16.598	10.157	1825
+16.598	10.102	1825
+16.591	10.051	1825
+16.564	10.001	1825
+16.548	9.949	1825
+16.530	9.893	1825
+16.517	9.843	1825
+16.503	9.789	1825
+16.489	9.739	1825
+16.471	9.687	1825
+16.480	9.636	1825
+16.497	9.580	1825
+16.473	9.527	1825
+16.466	9.473	1825
+16.501	9.423	1825
+16.516	9.369	1825
+16.515	9.314	1825
+16.510	9.259	1825
+16.499	9.205	1825
+16.503	9.153	1825
+16.539	9.103	1825
+16.593	9.068	1825
+16.644	9.048	1825
+16.696	9.008	1825
+16.740	8.956	1825
+16.791	8.915	1825
+16.844	8.885	1825
+16.902	8.892	1825
+16.960	8.906	1825
+17.012	8.921	1825
+17.070	8.941	1825
+17.128	8.961	1825
+17.181	8.976	1825
+17.232	8.983	1825
+17.285	8.993	1825
+17.341	8.990	1825
+17.394	8.984	1825
+17.444	8.983	1825
+13.279	15.298	1850
+13.272	15.292	1850
+13.327	15.255	1850
+13.379	15.217	1850
+13.430	15.182	1850
+13.482	15.160	1850
+13.533	15.129	1850
+13.586	15.101	1850
+13.637	15.070	1850
+13.690	15.039	1850
+13.740	15.009	1850
+13.791	14.977	1850
+13.833	14.927	1850
+13.865	14.868	1850
+13.889	14.817	1850
+13.920	14.766	1850
+13.948	14.715	1850
+13.983	14.665	1850
+14.036	14.611	1850
+14.088	14.563	1850
+14.140	14.527	1850
+14.191	14.495	1850
+14.241	14.470	1850
+14.292	14.445	1850
+14.339	14.392	1850
+14.361	14.338	1850
+14.376	14.285	1850
+14.391	14.234	1850
+14.408	14.183	1850
+14.425	14.130	1850
+14.438	14.079	1850
+14.449	14.028	1850
+14.471	13.972	1850
+14.488	13.918	1850
+14.512	13.866	1850
+14.540	13.813	1850
+14.574	13.762	1850
+14.593	13.710	1850
+14.620	13.660	1850
+14.641	13.608	1850
+14.685	13.552	1850
+14.718	13.500	1850
+14.736	13.450	1850
+14.733	13.396	1850
+14.735	13.345	1850
+14.719	13.299	1850
+14.714	13.288	1850
+14.705	13.237	1850
+14.692	13.183	1850
+14.673	13.129	1850
+14.651	13.076	1850
+14.608	13.022	1850
+14.566	12.969	1850
+14.579	12.919	1850
+14.560	12.867	1850
+14.558	12.811	1850
+14.553	12.758	1850
+14.577	12.707	1850
+14.629	12.676	1850
+14.680	12.692	1850
+14.730	12.719	1850
+14.780	12.738	1850
+14.791	12.743	1850
+14.832	12.740	1850
+14.869	12.690	1850
+14.909	12.638	1850
+14.962	12.599	1850
+15.015	12.570	1850
+15.066	12.525	1850
+15.117	12.475	1850
+15.154	12.425	1850
+15.180	12.372	1850
+15.222	12.322	1850
+15.269	12.271	1850
+15.301	12.216	1850
+15.309	12.164	1850
+15.322	12.114	1850
+15.329	12.062	1850
+15.315	12.012	1850
+15.300	11.960	1850
+15.292	11.908	1850
+15.284	11.858	1850
+15.278	11.852	1850
+15.271	11.806	1850
+15.321	11.766	1850
+15.372	11.777	1850
+15.422	11.792	1850
+15.476	11.807	1850
+15.527	11.822	1850
+15.577	11.833	1850
+15.630	11.840	1850
+15.683	11.841	1850
+15.735	11.826	1850
+15.788	11.802	1850
+15.839	11.767	1850
+15.891	11.722	1850
+15.944	11.683	1850
+15.995	11.655	1850
+16.035	11.636	1850
+16.046	11.643	1850
+16.097	11.664	1850
+16.147	11.676	1850
+16.201	11.677	1850
+16.256	11.670	1850
+16.308	11.663	1850
+16.362	11.646	1850
+16.417	11.634	1850
+16.468	11.614	1850
+16.518	11.562	1850
+16.549	11.510	1850
+16.569	11.456	1850
+16.584	11.402	1850
+16.601	11.345	1850
+16.625	11.292	1850
+16.650	11.236	1850
+16.670	11.183	1850
+16.685	11.133	1850
+16.703	11.079	1850
+16.715	11.028	1850
+16.727	10.975	1850
+16.734	10.921	1850
+16.739	10.869	1850
+16.737	10.818	1850
+16.734	10.794	1850
+16.730	10.768	1850
+16.731	10.718	1850
+16.736	10.665	1850
+16.744	10.612	1850
+16.745	10.557	1850
+16.739	10.505	1850
+16.732	10.453	1850
+16.730	10.398	1850
+16.739	10.345	1850
+16.731	10.290	1850
+16.705	10.240	1850
+16.687	10.186	1850
+16.686	10.133	1850
+16.684	10.080	1850
+16.684	10.023	1850
+16.677	9.970	1850
+16.665	9.917	1850
+16.653	9.863	1850
+16.634	9.811	1850
+16.618	9.757	1850
+16.620	9.706	1850
+16.630	9.651	1850
+16.619	9.599	1850
+16.592	9.548	1850
+16.594	9.493	1850
+16.623	9.438	1850
+16.650	9.381	1850
+16.651	9.328	1850
+16.670	9.275	1850
+16.723	9.230	1850
+16.774	9.207	1850
+16.824	9.189	1850
+16.875	9.167	1850
+16.907	9.115	1850
+16.961	9.077	1850
+17.012	9.075	1850
+17.063	9.084	1850
+17.115	9.087	1850
+17.169	9.093	1850
+17.221	9.103	1850
+17.273	9.109	1850
+17.324	9.111	1850
+17.377	9.109	1850
+17.427	9.108	1850
+13.589	15.298	1875
+13.589	15.298	1875
+13.643	15.253	1875
+13.687	15.202	1875
+13.725	15.151	1875
+13.775	15.111	1875
+13.826	15.089	1875
+13.879	15.063	1875
+13.920	15.010	1875
+13.972	15.003	1875
+14.022	14.972	1875
+14.074	14.921	1875
+14.114	14.869	1875
+14.165	14.826	1875
+14.217	14.773	1875
+14.255	14.722	1875
+14.288	14.672	1875
+14.302	14.620	1875
+14.301	14.569	1875
+14.308	14.518	1875
+14.331	14.466	1875
+14.365	14.415	1875
+14.410	14.363	1875
+14.459	14.312	1875
+14.502	14.258	1875
+14.526	14.204	1875
+14.565	14.151	1875
+14.611	14.100	1875
+14.639	14.049	1875
+14.676	13.998	1875
+14.705	13.948	1875
+14.726	13.895	1875
+14.744	13.844	1875
+14.791	13.793	1875
+14.812	13.740	1875
+14.840	13.688	1875
+14.845	13.638	1875
+14.853	13.584	1875
+14.856	13.530	1875
+14.851	13.480	1875
+14.848	13.429	1875
+14.847	13.377	1875
+14.848	13.325	1875
+14.846	13.270	1875
+14.841	13.220	1875
+14.855	13.169	1875
+14.868	13.119	1875
+14.896	13.068	1875
+14.925	13.014	1875
+14.955	12.963	1875
+14.993	12.912	1875
+15.037	12.861	1875
+15.080	12.810	1875
+15.129	12.759	1875
+15.179	12.705	1875
+15.230	12.658	1875
+15.282	12.607	1875
+15.324	12.556	1875
+15.360	12.506	1875
+15.384	12.455	1875
+15.411	12.402	1875
+15.429	12.351	1875
+15.458	12.301	1875
+15.499	12.251	1875
+15.520	12.200	1875
+15.531	12.148	1875
+15.542	12.096	1875
+15.542	12.046	1875
+15.540	12.044	1875
+15.593	12.028	1875
+15.645	12.021	1875
+15.697	12.009	1875
+15.750	12.002	1875
+15.805	11.996	1875
+15.855	11.992	1875
+15.882	11.989	1875
+15.906	11.994	1875
+15.958	12.003	1875
+16.012	11.994	1875
+16.063	11.963	1875
+16.114	11.949	1875
+16.164	11.943	1875
+16.224	11.949	1875
+16.280	11.955	1875
+16.334	11.956	1875
+16.387	11.954	1875
+16.439	11.960	1875
+16.491	11.965	1875
+16.544	11.965	1875
+16.597	11.958	1875
+16.650	11.931	1875
+16.703	11.882	1875
+16.736	11.827	1875
+16.757	11.771	1875
+16.773	11.715	1875
+16.792	11.665	1875
+16.808	11.614	1875
+16.824	11.553	1875
+16.839	11.497	1875
+16.859	11.444	1875
+16.874	11.391	1875
+16.892	11.339	1875
+16.913	11.289	1875
+16.915	11.238	1875
+16.918	11.184	1875
+16.914	11.131	1875
+16.907	11.074	1875
+16.904	11.024	1875
+16.891	10.970	1875
+16.882	10.917	1875
+16.880	10.866	1875
+16.867	10.814	1875
+16.839	10.719	1875
+16.837	10.719	1875
+16.825	10.667	1875
+16.854	10.616	1875
+16.859	10.566	1875
+16.840	10.514	1875
+16.830	10.464	1875
+16.826	10.411	1875
+16.835	10.360	1875
+16.839	10.308	1875
+16.824	10.258	1875
+16.804	10.202	1875
+16.788	10.148	1875
+16.782	10.094	1875
+16.777	10.043	1875
+16.764	9.992	1875
+16.771	9.942	1875
+16.757	9.886	1875
+16.751	9.834	1875
+16.738	9.781	1875
+16.712	9.725	1875
+16.707	9.674	1875
+16.712	9.623	1875
+16.707	9.572	1875
+16.761	9.526	1875
+16.814	9.503	1875
+16.870	9.478	1875
+16.922	9.463	1875
+16.974	9.420	1875
+17.021	9.366	1875
+17.058	9.315	1875
+17.109	9.279	1875
+17.163	9.257	1875
+17.215	9.248	1875
+17.267	9.242	1875
+17.322	9.238	1875
+17.377	9.232	1875
+17.427	9.219	1875
+13.932	15.305	1900
+13.931	15.305	1900
+13.961	15.253	1900
+13.992	15.203	1900
+14.025	15.151	1900
+14.049	15.100	1900
+14.087	15.050	1900
+14.140	15.008	1900
+14.195	14.979	1900
+14.248	14.946	1900
+14.299	14.907	1900
+14.335	14.854	1900
+14.353	14.803	1900
+14.356	14.753	1900
+14.351	14.699	1900
+14.346	14.648	1900
+14.344	14.596	1900
+14.350	14.545	1900
+14.365	14.492	1900
+14.392	14.442	1900
+14.442	14.404	1900
+14.492	14.376	1900
+14.544	14.355	1900
+14.597	14.336	1900
+14.645	14.284	1900
+14.681	14.231	1900
+14.708	14.180	1900
+14.743	14.127	1900
+14.779	14.077	1900
+14.822	14.025	1900
+14.861	13.973	1900
+14.898	13.923	1900
+14.915	13.871	1900
+14.916	13.846	1900
+14.926	13.812	1900
+14.936	13.760	1900
+14.941	13.707	1900
+14.952	13.657	1900
+14.965	13.607	1900
+14.986	13.555	1900
+15.037	13.512	1900
+15.042	13.512	1900
+15.068	13.460	1900
+15.102	13.406	1900
+15.120	13.350	1900
+15.144	13.298	1900
+15.175	13.245	1900
+15.208	13.189	1900
+15.238	13.133	1900
+15.271	13.077	1900
+15.303	13.020	1900
+15.339	12.969	1900
+15.375	12.912	1900
+15.411	12.862	1900
+15.452	12.812	1900
+15.485	12.760	1900
+15.519	12.706	1900
+15.549	12.652	1900
+15.580	12.600	1900
+15.633	12.574	1900
+15.685	12.552	1900
+15.717	12.500	1900
+15.721	12.478	1900
+15.726	12.450	1900
+15.723	12.397	1900
+15.707	12.344	1900
+15.689	12.294	1900
+15.670	12.241	1900
+15.667	12.190	1900
+15.719	12.143	1900
+15.770	12.137	1900
+15.821	12.147	1900
+15.871	12.165	1900
+15.922	12.193	1900
+15.973	12.214	1900
+16.028	12.232	1900
+16.079	12.243	1900
+16.080	12.324	1900
+16.080	12.325	1900
+16.132	12.324	1900
+16.187	12.310	1900
+16.239	12.303	1900
+16.292	12.302	1900
+16.344	12.291	1900
+16.398	12.283	1900
+16.450	12.282	1900
+16.506	12.276	1900
+16.557	12.258	1900
+16.609	12.237	1900
+16.666	12.208	1900
+16.718	12.171	1900
+16.772	12.121	1900
+16.825	12.075	1900
+16.866	12.024	1900
+16.913	11.970	1900
+16.946	11.915	1900
+16.979	11.863	1900
+16.999	11.808	1900
+17.008	11.754	1900
+17.013	11.701	1900
+17.027	11.647	1900
+17.046	11.594	1900
+17.048	11.538	1900
+17.056	11.484	1900
+17.062	11.426	1900
+17.069	11.375	1900
+17.073	11.319	1900
+17.074	11.268	1900
+17.073	11.218	1900
+17.074	11.165	1900
+17.073	11.114	1900
+17.066	11.061	1900
+17.055	11.006	1900
+17.043	10.955	1900
+17.021	10.899	1900
+17.007	10.847	1900
+17.009	10.795	1900
+16.988	10.744	1900
+16.976	10.692	1900
+16.967	10.638	1900
+16.959	10.585	1900
+16.963	10.532	1900
+16.962	10.532	1900
+16.938	10.482	1900
+16.932	10.432	1900
+16.961	10.376	1900
+16.970	10.325	1900
+16.966	10.270	1900
+16.952	10.216	1900
+16.955	10.165	1900
+16.942	10.111	1900
+16.924	10.057	1900
+16.874	10.033	1900
+16.875	9.982	1900
+16.906	9.931	1900
+16.896	9.881	1900
+16.844	9.843	1900
+16.822	9.793	1900
+16.818	9.738	1900
+16.837	9.686	1900
+16.881	9.633	1900
+16.933	9.613	1900
+16.988	9.580	1900
+17.044	9.578	1900
+17.099	9.563	1900
+17.153	9.534	1900
+17.207	9.487	1900
+17.261	9.465	1900
+17.313	9.432	1900
+17.365	9.385	1900
+17.416	9.358	1900
+14.160	15.307	1925
+14.162	15.315	1925
+14.208	15.264	1925
+14.238	15.210	1925
+14.285	15.158	1925
+14.329	15.107	1925
+14.361	15.056	1925
+14.367	15.006	1925
+14.368	14.955	1925
+14.363	14.936	1925
+14.363	14.901	1925
+14.415	14.855	1925
+14.432	14.805	1925
+14.391	14.753	1925
+14.382	14.701	1925
+14.382	14.650	1925
+14.394	14.599	1925
+14.405	14.547	1925
+14.436	14.497	1925
+14.486	14.449	1925
+14.537	14.422	1925
+14.587	14.406	1925
+14.639	14.391	1925
+14.689	14.369	1925
+14.737	14.318	1925
+14.777	14.267	1925
+14.822	14.215	1925
+14.871	14.163	1925
+14.909	14.110	1925
+14.939	14.057	1925
+14.965	14.005	1925
+14.989	13.953	1925
+15.000	13.903	1925
+15.020	13.849	1925
+15.052	13.796	1925
+15.081	13.745	1925
+15.093	13.691	1925
+15.097	13.641	1925
+15.135	13.591	1925
+15.187	13.597	1925
+15.209	13.518	1925
+15.216	13.539	1925
+15.268	13.518	1925
+15.318	13.488	1925
+15.370	13.437	1925
+15.422	13.384	1925
+15.473	13.334	1925
+15.524	13.284	1925
+15.575	13.232	1925
+15.617	13.182	1925
+15.659	13.130	1925
+15.703	13.079	1925
+15.738	13.026	1925
+15.771	12.972	1925
+15.797	12.922	1925
+15.820	12.871	1925
+15.841	12.820	1925
+15.861	12.767	1925
+15.872	12.714	1925
+15.874	12.664	1925
+15.872	12.614	1925
+15.856	12.558	1925
+15.855	12.557	1925
+15.827	12.506	1925
+15.806	12.453	1925
+15.792	12.397	1925
+15.808	12.346	1925
+15.858	12.343	1925
+15.912	12.376	1925
+15.966	12.399	1925
+16.020	12.416	1925
+16.079	12.426	1925
+16.130	12.436	1925
+16.183	12.438	1925
+16.239	12.436	1925
+16.294	12.437	1925
+16.348	12.441	1925
+16.399	12.439	1925
+16.449	12.439	1925
+16.504	12.435	1925
+16.557	12.426	1925
+16.607	12.410	1925
+16.658	12.379	1925
+16.713	12.341	1925
+16.765	12.303	1925
+16.818	12.270	1925
+16.871	12.244	1925
+16.922	12.217	1925
+16.974	12.182	1925
+17.026	12.130	1925
+17.046	12.076	1925
+17.043	12.075	1925
+17.087	12.022	1925
+17.109	11.969	1925
+17.119	11.919	1925
+17.126	11.868	1925
+17.136	11.817	1925
+17.151	11.762	1925
+17.161	11.706	1925
+17.171	11.653	1925
+17.176	11.597	1925
+17.181	11.547	1925
+17.187	11.495	1925
+17.190	11.445	1925
+17.190	11.391	1925
+17.193	11.341	1925
+17.196	11.285	1925
+17.202	11.234	1925
+17.199	11.182	1925
+17.190	11.131	1925
+17.183	11.075	1925
+17.175	11.020	1925
+17.171	10.967	1925
+17.170	10.914	1925
+17.163	10.862	1925
+17.153	10.808	1925
+17.144	10.752	1925
+17.135	10.693	1925
+17.126	10.636	1925
+17.117	10.584	1925
+17.107	10.533	1925
+17.095	10.483	1925
+17.096	10.486	1925
+17.073	10.432	1925
+17.086	10.381	1925
+17.108	10.330	1925
+17.106	10.279	1925
+17.094	10.229	1925
+17.068	10.178	1925
+17.076	10.128	1925
+17.065	10.077	1925
+17.040	10.023	1925
+17.019	9.968	1925
+16.999	9.915	1925
+16.986	9.865	1925
+16.981	9.814	1925
+17.033	9.766	1925
+17.087	9.721	1925
+17.133	9.670	1925
+17.186	9.628	1925
+17.240	9.614	1925
+17.292	9.601	1925
+17.343	9.579	1925
+17.394	9.539	1925
+17.431	9.489	1925
+14.411	15.289	1950
+14.415	15.295	1950
+14.431	15.243	1950
+14.459	15.191	1950
+14.489	15.139	1950
+14.496	15.088	1950
+14.492	15.036	1950
+14.486	15.013	1950
+14.480	14.986	1950
+14.530	14.949	1950
+14.526	14.899	1950
+14.540	14.849	1950
+14.558	14.798	1950
+14.508	14.757	1950
+14.468	14.706	1950
+14.466	14.656	1950
+14.484	14.604	1950
+14.516	14.552	1950
+14.566	14.518	1950
+14.617	14.515	1950
+14.668	14.506	1950
+14.706	14.456	1950
+14.757	14.424	1950
+14.795	14.374	1950
+14.847	14.342	1950
+14.898	14.318	1950
+14.933	14.268	1950
+14.948	14.217	1950
+14.962	14.164	1950
+14.985	14.113	1950
+14.994	14.063	1950
+15.025	14.013	1950
+15.061	13.962	1950
+15.106	13.912	1950
+15.134	13.861	1950
+15.153	13.811	1950
+15.168	13.759	1950
+15.220	13.717	1950
+15.271	13.701	1950
+15.322	13.647	1950
+15.375	13.636	1950
+15.428	13.638	1950
+15.482	13.626	1950
+15.532	13.604	1950
+15.582	13.574	1950
+15.634	13.540	1950
+15.684	13.506	1950
+15.734	13.464	1950
+15.781	13.411	1950
+15.820	13.358	1950
+15.852	13.305	1950
+15.874	13.255	1950
+15.895	13.205	1950
+15.926	13.154	1950
+15.936	13.104	1950
+15.941	13.054	1950
+15.945	13.003	1950
+15.944	12.953	1950
+15.940	12.902	1950
+15.936	12.849	1950
+15.948	12.798	1950
+15.960	12.746	1950
+15.955	12.696	1950
+15.942	12.645	1950
+15.949	12.594	1950
+15.999	12.562	1950
+16.049	12.569	1950
+16.102	12.585	1950
+16.156	12.591	1950
+16.213	12.603	1950
+16.267	12.600	1950
+16.321	12.597	1950
+16.375	12.591	1950
+16.430	12.576	1950
+16.484	12.573	1950
+16.539	12.570	1950
+16.590	12.544	1950
+16.641	12.513	1950
+16.693	12.485	1950
+16.746	12.452	1950
+16.798	12.424	1950
+16.849	12.393	1950
+16.902	12.349	1950
+16.946	12.298	1950
+16.995	12.248	1950
+17.046	12.217	1950
+17.096	12.174	1950
+17.121	12.124	1950
+17.147	12.074	1950
+17.181	12.023	1950
+17.224	11.970	1950
+17.246	11.922	1950
+17.244	11.919	1950
+17.253	11.866	1950
+17.262	11.815	1950
+17.276	11.759	1950
+17.291	11.707	1950
+17.309	11.654	1950
+17.310	11.599	1950
+17.317	11.546	1950
+17.327	11.495	1950
+17.318	11.445	1950
+17.305	11.393	1950
+17.296	11.341	1950
+17.291	11.288	1950
+17.294	11.237	1950
+17.290	11.187	1950
+17.269	11.130	1950
+17.263	11.079	1950
+17.280	11.027	1950
+17.290	10.972	1950
+17.291	10.920	1950
+17.287	10.866	1950
+17.281	10.811	1950
+17.270	10.757	1950
+17.263	10.707	1950
+17.247	10.653	1950
+17.236	10.601	1950
+17.234	10.548	1950
+17.247	10.497	1950
+17.249	10.445	1950
+17.229	10.393	1950
+17.216	10.343	1950
+17.228	10.290	1950
+17.223	10.236	1950
+17.211	10.186	1950
+17.199	10.135	1950
+17.180	10.074	1950
+17.180	10.077	1950
+17.130	10.069	1950
+17.096	10.010	1950
+17.093	9.959	1950
+17.109	9.906	1950
+17.153	9.852	1950
+17.204	9.813	1950
+17.257	9.780	1950
+17.308	9.747	1950
+17.360	9.705	1950
+17.411	9.665	1950
+14.626	15.289	1975
+14.626	15.289	1975
+14.660	15.238	1975
+14.659	15.188	1975
+14.661	15.135	1975
+14.673	15.083	1975
+14.663	15.033	1975
+14.644	14.983	1975
+14.648	14.952	1975
+14.638	14.932	1975
+14.654	14.880	1975
+14.622	14.825	1975
+14.630	14.771	1975
+14.591	14.720	1975
+14.583	14.668	1975
+14.637	14.630	1975
+14.687	14.612	1975
+14.726	14.560	1975
+14.778	14.513	1975
+14.828	14.469	1975
+14.879	14.460	1975
+14.932	14.441	1975
+14.956	14.390	1975
+14.969	14.338	1975
+15.010	14.288	1975
+15.041	14.236	1975
+15.069	14.186	1975
+15.065	14.134	1975
+15.053	14.084	1975
+15.055	14.030	1975
+15.094	13.980	1975
+15.146	13.965	1975
+15.197	13.941	1975
+15.242	13.888	1975
+15.272	13.838	1975
+15.317	13.787	1975
+15.368	13.753	1975
+15.418	13.737	1975
+15.471	13.719	1975
+15.522	13.692	1975
+15.576	13.656	1975
+15.626	13.624	1975
+15.679	13.597	1975
+15.731	13.565	1975
+15.784	13.530	1975
+15.806	13.480	1975
+15.837	13.429	1975
+15.888	13.383	1975
+15.939	13.351	1975
+15.970	13.300	1975
+15.985	13.249	1975
+16.003	13.198	1975
+16.018	13.144	1975
+16.028	13.087	1975
+16.035	13.035	1975
+16.041	12.981	1975
+16.047	12.927	1975
+16.049	12.872	1975
+16.042	12.820	1975
+16.047	12.765	1975
+16.072	12.715	1975
+16.123	12.705	1975
+16.176	12.705	1975
+16.229	12.710	1975
+16.282	12.712	1975
+16.332	12.711	1975
+16.385	12.706	1975
+16.437	12.699	1975
+16.493	12.686	1975
+16.546	12.676	1975
+16.598	12.668	1975
+16.653	12.657	1975
+16.705	12.641	1975
+16.759	12.620	1975
+16.812	12.591	1975
+16.862	12.537	1975
+16.902	12.486	1975
+16.945	12.431	1975
+16.988	12.378	1975
+17.037	12.325	1975
+17.089	12.274	1975
+17.136	12.224	1975
+17.179	12.170	1975
+17.213	12.117	1975
+17.243	12.064	1975
+17.274	12.013	1975
+17.304	11.962	1975
+17.337	11.909	1975
+17.364	11.855	1975
+17.383	11.805	1975
+17.398	11.755	1975
+17.413	11.704	1975
+17.450	11.591	1975
+17.446	11.589	1975
+17.443	11.534	1975
+17.439	11.483	1975
+17.434	11.431	1975
+17.425	11.377	1975
+17.418	11.325	1975
+17.412	11.274	1975
+17.408	11.221	1975
+17.405	11.169	1975
+17.401	11.119	1975
+17.402	11.066	1975
+17.416	11.015	1975
+17.427	10.963	1975
+17.434	10.908	1975
+17.430	10.858	1975
+17.424	10.808	1975
+17.416	10.757	1975
+17.401	10.698	1975
+17.383	10.643	1975
+17.370	10.592	1975
+17.356	10.541	1975
+17.349	10.490	1975
+17.351	10.439	1975
+17.357	10.388	1975
+17.358	10.337	1975
+17.357	10.283	1975
+17.349	10.223	1975
+17.337	10.171	1975
+17.316	10.119	1975
+17.289	10.068	1975
+17.257	10.017	1975
+14.804	15.269	2000
+14.803	15.271	2000
+14.806	15.217	2000
+14.803	15.167	2000
+14.794	15.116	2000
+14.772	15.050	2000
+14.771	15.052	2000
+14.767	15.001	2000
+14.741	14.951	2000
+14.730	14.898	2000
+14.720	14.846	2000
+14.715	14.795	2000
+14.750	14.744	2000
+14.788	14.694	2000
+14.785	14.644	2000
+14.805	14.592	2000
+14.855	14.563	2000
+14.907	14.582	2000
+14.959	14.565	2000
+15.008	14.512	2000
+15.008	14.458	2000
+15.007	14.405	2000
+15.005	14.355	2000
+15.056	14.302	2000
+15.107	14.288	2000
+15.157	14.264	2000
+15.202	14.211	2000
+15.158	14.160	2000
+15.153	14.109	2000
+15.203	14.088	2000
+15.229	14.035	2000
+15.237	13.981	2000
+15.256	13.929	2000
+15.309	13.906	2000
+15.360	13.900	2000
+15.392	13.848	2000
+15.444	13.803	2000
+15.495	13.785	2000
+15.546	13.784	2000
+15.596	13.771	2000
+15.631	13.720	2000
+15.683	13.701	2000
+15.736	13.691	2000
+15.787	13.661	2000
+15.839	13.613	2000
+15.889	13.576	2000
+15.939	13.537	2000
+15.991	13.489	2000
+16.040	13.434	2000
+16.080	13.384	2000
+16.102	13.331	2000
+16.123	13.278	2000
+16.141	13.228	2000
+16.153	13.176	2000
+16.155	13.121	2000
+16.162	13.066	2000
+16.164	13.012	2000
+16.166	12.960	2000
+16.167	12.908	2000
+16.176	12.858	2000
+16.227	12.881	2000
+16.281	12.896	2000
+16.335	12.891	2000
+16.390	12.880	2000
+16.441	12.863	2000
+16.492	12.852	2000
+16.545	12.845	2000
+16.546	12.898	2000
+16.496	12.949	2000
+16.456	13.000	2000
+16.424	13.053	2000
+16.403	13.108	2000
+16.379	13.160	2000
+16.323	13.207	2000
+16.272	13.236	2000
+16.227	13.289	2000
+16.203	13.341	2000
+16.181	13.392	2000
+16.156	13.443	2000
+16.126	13.496	2000
+16.095	13.549	2000
+16.066	13.600	2000
+16.041	13.652	2000
+16.015	13.706	2000
+15.995	13.758	2000
+15.975	13.813	2000
+15.963	13.864	2000
+15.960	13.915	2000
+15.956	13.965	2000
+15.952	14.019	2000
+15.944	14.069	2000
+15.932	14.121	2000
+15.922	14.175	2000
+15.915	14.227	2000
+15.905	14.282	2000
+15.895	14.335	2000
+15.891	14.385	2000
+15.894	14.436	2000
+15.945	14.486	2000
+15.215	15.242	2100
+15.211	15.242	2100
+15.160	15.210	2100
+15.149	15.156	2100
+15.155	15.103	2100
+15.155	15.050	2100
+15.114	14.999	2100
+15.101	14.946	2100
+15.151	14.907	2100
+15.160	14.856	2100
+15.210	14.832	2100
+15.260	14.789	2100
+15.311	14.755	2100
+15.336	14.808	2100
+15.321	14.858	2100
+15.316	14.911	2100
+15.320	14.962	2100
+15.321	15.013	2100
+15.328	15.067	2100
+15.329	15.117	2100
+15.300	15.169	2100
+15.249	15.208	2100
+15.198	15.230	2100
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..b5fb86b
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,3 @@
+include_HEADERS = nfft3.h nfft3util.h nfft3conf.h
+
+EXTRA_DIST = infft.h cycle.h api.h
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..0ad727d
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,560 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include
+DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/nfft3conf.h.in $(srcdir)/ticks.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = nfft3conf.h ticks.h
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+include_HEADERS = nfft3.h nfft3util.h nfft3conf.h
+EXTRA_DIST = infft.h cycle.h api.h
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+nfft3conf.h: $(top_builddir)/config.status $(srcdir)/nfft3conf.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ticks.h: $(top_builddir)/config.status $(srcdir)/ticks.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-includeHEADERS: $(include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+	done
+
+uninstall-includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS) config.h
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-includeHEADERS
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool cscopelist ctags distclean distclean-generic \
+	distclean-hdr distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-includeHEADERS install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/api.h b/include/api.h
new file mode 100644
index 0000000..4eb2476
--- /dev/null
+++ b/include/api.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: infft.h 3483 2010-04-23 19:02:34Z keiner $ */
+
+#ifndef __API_H__
+#define __API_H__
+
+#include "nfft3.h"
+#include "infft.h"
+
+#endif /* __API_H__ */
diff --git a/include/config.h.in b/include/config.h.in
new file mode 100644
index 0000000..e02b17d
--- /dev/null
+++ b/include/config.h.in
@@ -0,0 +1,2067 @@
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to enable Dirac delta window function. */
+#undef B_SPLINE
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to enable Gaussian window function. */
+#undef GAUSSIAN
+
+/* Define to 1 if you have the `abort' function. */
+#undef HAVE_ABORT
+
+/* Define to 1 if you have the `acos' function. */
+#undef HAVE_ACOS
+
+/* Define to 1 if you have the `acosf' function. */
+#undef HAVE_ACOSF
+
+/* Define to 1 if you have the `acosh' function. */
+#undef HAVE_ACOSH
+
+/* Define to 1 if you have the `acoshf' function. */
+#undef HAVE_ACOSHF
+
+/* Define to 1 if you have the `acoshl' function. */
+#undef HAVE_ACOSHL
+
+/* Define to 1 if you have the `acosl' function. */
+#undef HAVE_ACOSL
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `asin' function. */
+#undef HAVE_ASIN
+
+/* Define to 1 if you have the `asinf' function. */
+#undef HAVE_ASINF
+
+/* Define to 1 if you have the `asinh' function. */
+#undef HAVE_ASINH
+
+/* Define to 1 if you have the `asinhf' function. */
+#undef HAVE_ASINHF
+
+/* Define to 1 if you have the `asinhl' function. */
+#undef HAVE_ASINHL
+
+/* Define to 1 if you have the `asinl' function. */
+#undef HAVE_ASINL
+
+/* Define to 1 if you have the `atan' function. */
+#undef HAVE_ATAN
+
+/* Define to 1 if you have the `atan2' function. */
+#undef HAVE_ATAN2
+
+/* Define to 1 if you have the `atan2f' function. */
+#undef HAVE_ATAN2F
+
+/* Define to 1 if you have the `atan2l' function. */
+#undef HAVE_ATAN2L
+
+/* Define to 1 if you have the `atanf' function. */
+#undef HAVE_ATANF
+
+/* Define to 1 if you have the `atanh' function. */
+#undef HAVE_ATANH
+
+/* Define to 1 if you have the `atanhf' function. */
+#undef HAVE_ATANHF
+
+/* Define to 1 if you have the `atanhl' function. */
+#undef HAVE_ATANHL
+
+/* Define to 1 if you have the `atanl' function. */
+#undef HAVE_ATANL
+
+/* Define to 1 if you have the `cabs' function. */
+#undef HAVE_CABS
+
+/* Define to 1 if you have the `cabsf' function. */
+#undef HAVE_CABSF
+
+/* Define to 1 if you have the `cabsl' function. */
+#undef HAVE_CABSL
+
+/* Define to 1 if you have the `cacos' function. */
+#undef HAVE_CACOS
+
+/* Define to 1 if you have the `cacosf' function. */
+#undef HAVE_CACOSF
+
+/* Define to 1 if you have the `cacosh' function. */
+#undef HAVE_CACOSH
+
+/* Define to 1 if you have the `cacoshf' function. */
+#undef HAVE_CACOSHF
+
+/* Define to 1 if you have the `cacoshl' function. */
+#undef HAVE_CACOSHL
+
+/* Define to 1 if you have the `cacosl' function. */
+#undef HAVE_CACOSL
+
+/* Define to 1 if you have the `carg' function. */
+#undef HAVE_CARG
+
+/* Define to 1 if you have the `cargf' function. */
+#undef HAVE_CARGF
+
+/* Define to 1 if you have the `cargl' function. */
+#undef HAVE_CARGL
+
+/* Define to 1 if you have the `casin' function. */
+#undef HAVE_CASIN
+
+/* Define to 1 if you have the `casinf' function. */
+#undef HAVE_CASINF
+
+/* Define to 1 if you have the `casinh' function. */
+#undef HAVE_CASINH
+
+/* Define to 1 if you have the `casinhf' function. */
+#undef HAVE_CASINHF
+
+/* Define to 1 if you have the `casinhl' function. */
+#undef HAVE_CASINHL
+
+/* Define to 1 if you have the `casinl' function. */
+#undef HAVE_CASINL
+
+/* Define to 1 if you have the `catan' function. */
+#undef HAVE_CATAN
+
+/* Define to 1 if you have the `catanf' function. */
+#undef HAVE_CATANF
+
+/* Define to 1 if you have the `catanh' function. */
+#undef HAVE_CATANH
+
+/* Define to 1 if you have the `catanhf' function. */
+#undef HAVE_CATANHF
+
+/* Define to 1 if you have the `catanhl' function. */
+#undef HAVE_CATANHL
+
+/* Define to 1 if you have the `catanl' function. */
+#undef HAVE_CATANL
+
+/* Define to 1 if you have the `cbrt' function. */
+#undef HAVE_CBRT
+
+/* Define to 1 if you have the `cbrtf' function. */
+#undef HAVE_CBRTF
+
+/* Define to 1 if you have the `cbrtl' function. */
+#undef HAVE_CBRTL
+
+/* Define to 1 if you have the `ccos' function. */
+#undef HAVE_CCOS
+
+/* Define to 1 if you have the `ccosf' function. */
+#undef HAVE_CCOSF
+
+/* Define to 1 if you have the `ccosh' function. */
+#undef HAVE_CCOSH
+
+/* Define to 1 if you have the `ccoshf' function. */
+#undef HAVE_CCOSHF
+
+/* Define to 1 if you have the `ccoshl' function. */
+#undef HAVE_CCOSHL
+
+/* Define to 1 if you have the `ccosl' function. */
+#undef HAVE_CCOSL
+
+/* Define to 1 if you have the `ceil' function. */
+#undef HAVE_CEIL
+
+/* Define to 1 if you have the `ceilf' function. */
+#undef HAVE_CEILF
+
+/* Define to 1 if you have the `ceill' function. */
+#undef HAVE_CEILL
+
+/* Define to 1 if you have the `cexp' function. */
+#undef HAVE_CEXP
+
+/* Define to 1 if you have the `cexpf' function. */
+#undef HAVE_CEXPF
+
+/* Define to 1 if you have the `cexpl' function. */
+#undef HAVE_CEXPL
+
+/* Define to 1 if you have the `cimag' function. */
+#undef HAVE_CIMAG
+
+/* Define to 1 if you have the `cimagf' function. */
+#undef HAVE_CIMAGF
+
+/* Define to 1 if you have the `cimagl' function. */
+#undef HAVE_CIMAGL
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the `clog' function. */
+#undef HAVE_CLOG
+
+/* Define to 1 if you have the `clogf' function. */
+#undef HAVE_CLOGF
+
+/* Define to 1 if you have the `clogl' function. */
+#undef HAVE_CLOGL
+
+/* Define to 1 if you have the <complex.h> header file. */
+#undef HAVE_COMPLEX_H
+
+/* Define to 1 if you have the `conj' function. */
+#undef HAVE_CONJ
+
+/* Define to 1 if you have the `conjf' function. */
+#undef HAVE_CONJF
+
+/* Define to 1 if you have the `conjl' function. */
+#undef HAVE_CONJL
+
+/* Define to 1 if you have the `copysign' function. */
+#undef HAVE_COPYSIGN
+
+/* Define to 1 if you have the `copysignf' function. */
+#undef HAVE_COPYSIGNF
+
+/* Define to 1 if you have the `copysignl' function. */
+#undef HAVE_COPYSIGNL
+
+/* Define to 1 if you have the `cos' function. */
+#undef HAVE_COS
+
+/* Define to 1 if you have the `cosf' function. */
+#undef HAVE_COSF
+
+/* Define to 1 if you have the `cosh' function. */
+#undef HAVE_COSH
+
+/* Define to 1 if you have the `coshf' function. */
+#undef HAVE_COSHF
+
+/* Define to 1 if you have the `coshl' function. */
+#undef HAVE_COSHL
+
+/* Define to 1 if you have the `cosl' function. */
+#undef HAVE_COSL
+
+/* Define to 1 if you have the `cpow' function. */
+#undef HAVE_CPOW
+
+/* Define to 1 if you have the `cpowf' function. */
+#undef HAVE_CPOWF
+
+/* Define to 1 if you have the `cpowl' function. */
+#undef HAVE_CPOWL
+
+/* Define to 1 if you have the `cproj' function. */
+#undef HAVE_CPROJ
+
+/* Define to 1 if you have the `cprojf' function. */
+#undef HAVE_CPROJF
+
+/* Define to 1 if you have the `cprojl' function. */
+#undef HAVE_CPROJL
+
+/* Define to 1 if you have the `creal' function. */
+#undef HAVE_CREAL
+
+/* Define to 1 if you have the `crealf' function. */
+#undef HAVE_CREALF
+
+/* Define to 1 if you have the `creall' function. */
+#undef HAVE_CREALL
+
+/* Define to 1 if you have the `csin' function. */
+#undef HAVE_CSIN
+
+/* Define to 1 if you have the `csinf' function. */
+#undef HAVE_CSINF
+
+/* Define to 1 if you have the `csinh' function. */
+#undef HAVE_CSINH
+
+/* Define to 1 if you have the `csinhf' function. */
+#undef HAVE_CSINHF
+
+/* Define to 1 if you have the `csinhl' function. */
+#undef HAVE_CSINHL
+
+/* Define to 1 if you have the `csinl' function. */
+#undef HAVE_CSINL
+
+/* Define to 1 if you have the `csqrt' function. */
+#undef HAVE_CSQRT
+
+/* Define to 1 if you have the `csqrtf' function. */
+#undef HAVE_CSQRTF
+
+/* Define to 1 if you have the `csqrtl' function. */
+#undef HAVE_CSQRTL
+
+/* Define to 1 if you have the `ctan' function. */
+#undef HAVE_CTAN
+
+/* Define to 1 if you have the `ctanf' function. */
+#undef HAVE_CTANF
+
+/* Define to 1 if you have the `ctanh' function. */
+#undef HAVE_CTANH
+
+/* Define to 1 if you have the `ctanhf' function. */
+#undef HAVE_CTANHF
+
+/* Define to 1 if you have the `ctanhl' function. */
+#undef HAVE_CTANHL
+
+/* Define to 1 if you have the `ctanl' function. */
+#undef HAVE_CTANL
+
+/* Define to 1 if you have the <c_asm.h> header file. */
+#undef HAVE_C_ASM_H
+
+/* Define to 1 if you have the declaration of `acos', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ACOS
+
+/* Define to 1 if you have the declaration of `acosf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ACOSF
+
+/* Define to 1 if you have the declaration of `acosh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ACOSH
+
+/* Define to 1 if you have the declaration of `acoshf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ACOSHF
+
+/* Define to 1 if you have the declaration of `acoshl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ACOSHL
+
+/* Define to 1 if you have the declaration of `acosl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ACOSL
+
+/* Define to 1 if you have the declaration of `asin', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ASIN
+
+/* Define to 1 if you have the declaration of `asinf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ASINF
+
+/* Define to 1 if you have the declaration of `asinh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ASINH
+
+/* Define to 1 if you have the declaration of `asinhf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ASINHF
+
+/* Define to 1 if you have the declaration of `asinhl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ASINHL
+
+/* Define to 1 if you have the declaration of `asinl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ASINL
+
+/* Define to 1 if you have the declaration of `atan', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATAN
+
+/* Define to 1 if you have the declaration of `atan2', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATAN2
+
+/* Define to 1 if you have the declaration of `atan2f', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATAN2F
+
+/* Define to 1 if you have the declaration of `atan2l', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATAN2L
+
+/* Define to 1 if you have the declaration of `atanf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATANF
+
+/* Define to 1 if you have the declaration of `atanh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATANH
+
+/* Define to 1 if you have the declaration of `atanhf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATANHF
+
+/* Define to 1 if you have the declaration of `atanhl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATANHL
+
+/* Define to 1 if you have the declaration of `atanl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ATANL
+
+/* Define to 1 if you have the declaration of `cabs', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CABS
+
+/* Define to 1 if you have the declaration of `cabsl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CABSL
+
+/* Define to 1 if you have the declaration of `cacos', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CACOS
+
+/* Define to 1 if you have the declaration of `cacosf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CACOSF
+
+/* Define to 1 if you have the declaration of `cacosh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CACOSH
+
+/* Define to 1 if you have the declaration of `cacoshf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_CACOSHF
+
+/* Define to 1 if you have the declaration of `cacoshl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_CACOSHL
+
+/* Define to 1 if you have the declaration of `cacosl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CACOSL
+
+/* Define to 1 if you have the declaration of `carg', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CARG
+
+/* Define to 1 if you have the declaration of `cargf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CARGF
+
+/* Define to 1 if you have the declaration of `cargl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CARGL
+
+/* Define to 1 if you have the declaration of `casin', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CASIN
+
+/* Define to 1 if you have the declaration of `casinf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CASINF
+
+/* Define to 1 if you have the declaration of `casinh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CASINH
+
+/* Define to 1 if you have the declaration of `casinhf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_CASINHF
+
+/* Define to 1 if you have the declaration of `casinhl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_CASINHL
+
+/* Define to 1 if you have the declaration of `casinl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CASINL
+
+/* Define to 1 if you have the declaration of `catan', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CATAN
+
+/* Define to 1 if you have the declaration of `catanf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CATANF
+
+/* Define to 1 if you have the declaration of `catanh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CATANH
+
+/* Define to 1 if you have the declaration of `catanhf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_CATANHF
+
+/* Define to 1 if you have the declaration of `catanhl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_CATANHL
+
+/* Define to 1 if you have the declaration of `catanl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CATANL
+
+/* Define to 1 if you have the declaration of `cbrt', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CBRT
+
+/* Define to 1 if you have the declaration of `cbrtf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CBRTF
+
+/* Define to 1 if you have the declaration of `cbrtl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CBRTL
+
+/* Define to 1 if you have the declaration of `ccos', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CCOS
+
+/* Define to 1 if you have the declaration of `ccosf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CCOSF
+
+/* Define to 1 if you have the declaration of `ccosh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CCOSH
+
+/* Define to 1 if you have the declaration of `ccoshf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CCOSHF
+
+/* Define to 1 if you have the declaration of `ccoshl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CCOSHL
+
+/* Define to 1 if you have the declaration of `ccosl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CCOSL
+
+/* Define to 1 if you have the declaration of `ceil', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CEIL
+
+/* Define to 1 if you have the declaration of `ceilf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CEILF
+
+/* Define to 1 if you have the declaration of `ceill', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CEILL
+
+/* Define to 1 if you have the declaration of `cexp', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CEXP
+
+/* Define to 1 if you have the declaration of `cexpf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CEXPF
+
+/* Define to 1 if you have the declaration of `cexpl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CEXPL
+
+/* Define to 1 if you have the declaration of `cimag', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CIMAG
+
+/* Define to 1 if you have the declaration of `cimagf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CIMAGF
+
+/* Define to 1 if you have the declaration of `cimagl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CIMAGL
+
+/* Define to 1 if you have the declaration of `clog', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CLOG
+
+/* Define to 1 if you have the declaration of `clogf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CLOGF
+
+/* Define to 1 if you have the declaration of `clogl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CLOGL
+
+/* Define to 1 if you have the declaration of `conj', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CONJ
+
+/* Define to 1 if you have the declaration of `conjf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CONJF
+
+/* Define to 1 if you have the declaration of `conjl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CONJL
+
+/* Define to 1 if you have the declaration of `copysign', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGN
+
+/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGNF
+
+/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGNL
+
+/* Define to 1 if you have the declaration of `cos', and to 0 if you don't. */
+#undef HAVE_DECL_COS
+
+/* Define to 1 if you have the declaration of `cosf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_COSF
+
+/* Define to 1 if you have the declaration of `cosh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_COSH
+
+/* Define to 1 if you have the declaration of `coshf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_COSHF
+
+/* Define to 1 if you have the declaration of `coshl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_COSHL
+
+/* Define to 1 if you have the declaration of `cosl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_COSL
+
+/* Define to 1 if you have the declaration of `cpow', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CPOW
+
+/* Define to 1 if you have the declaration of `cpowf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CPOWF
+
+/* Define to 1 if you have the declaration of `cpowl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CPOWL
+
+/* Define to 1 if you have the declaration of `cproj', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CPROJ
+
+/* Define to 1 if you have the declaration of `cprojf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CPROJF
+
+/* Define to 1 if you have the declaration of `cprojl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CPROJL
+
+/* Define to 1 if you have the declaration of `creal', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CREAL
+
+/* Define to 1 if you have the declaration of `crealf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CREALF
+
+/* Define to 1 if you have the declaration of `creall', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CREALL
+
+/* Define to 1 if you have the declaration of `csin', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSIN
+
+/* Define to 1 if you have the declaration of `csinf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSINF
+
+/* Define to 1 if you have the declaration of `csinh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSINH
+
+/* Define to 1 if you have the declaration of `csinhf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSINHF
+
+/* Define to 1 if you have the declaration of `csinhl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSINHL
+
+/* Define to 1 if you have the declaration of `csinl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSINL
+
+/* Define to 1 if you have the declaration of `csqrt', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSQRT
+
+/* Define to 1 if you have the declaration of `csqrtf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSQRTF
+
+/* Define to 1 if you have the declaration of `csqrtl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CSQRTL
+
+/* Define to 1 if you have the declaration of `ctan', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CTAN
+
+/* Define to 1 if you have the declaration of `ctanf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CTANF
+
+/* Define to 1 if you have the declaration of `ctanh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CTANH
+
+/* Define to 1 if you have the declaration of `ctanhf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CTANHF
+
+/* Define to 1 if you have the declaration of `ctanhl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CTANHL
+
+/* Define to 1 if you have the declaration of `ctanl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_CTANL
+
+/* Define to 1 if you have the declaration of `drand48', and to 0 if you
+   don't. */
+#undef HAVE_DECL_DRAND48
+
+/* Define to 1 if you have the declaration of `erf', and to 0 if you don't. */
+#undef HAVE_DECL_ERF
+
+/* Define to 1 if you have the declaration of `erfc', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ERFC
+
+/* Define to 1 if you have the declaration of `erfcf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ERFCF
+
+/* Define to 1 if you have the declaration of `erfcl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ERFCL
+
+/* Define to 1 if you have the declaration of `erff', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ERFF
+
+/* Define to 1 if you have the declaration of `erfl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ERFL
+
+/* Define to 1 if you have the declaration of `exp', and to 0 if you don't. */
+#undef HAVE_DECL_EXP
+
+/* Define to 1 if you have the declaration of `exp2', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXP2
+
+/* Define to 1 if you have the declaration of `exp2f', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXP2F
+
+/* Define to 1 if you have the declaration of `exp2l', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXP2L
+
+/* Define to 1 if you have the declaration of `expf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXPF
+
+/* Define to 1 if you have the declaration of `expl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXPL
+
+/* Define to 1 if you have the declaration of `expm1', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXPM1
+
+/* Define to 1 if you have the declaration of `expm1f', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXPM1F
+
+/* Define to 1 if you have the declaration of `expm1l', and to 0 if you don't.
+   */
+#undef HAVE_DECL_EXPM1L
+
+/* Define to 1 if you have the declaration of `fabs', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FABS
+
+/* Define to 1 if you have the declaration of `fabsf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FABSF
+
+/* Define to 1 if you have the declaration of `fabsl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FABSL
+
+/* Define to 1 if you have the declaration of `fdim', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FDIM
+
+/* Define to 1 if you have the declaration of `fdimf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FDIMF
+
+/* Define to 1 if you have the declaration of `fdiml', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FDIML
+
+/* Define to 1 if you have the declaration of `floor', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FLOOR
+
+/* Define to 1 if you have the declaration of `floorf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FLOORF
+
+/* Define to 1 if you have the declaration of `floorl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FLOORL
+
+/* Define to 1 if you have the declaration of `fma', and to 0 if you don't. */
+#undef HAVE_DECL_FMA
+
+/* Define to 1 if you have the declaration of `fmaf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMAF
+
+/* Define to 1 if you have the declaration of `fmal', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMAL
+
+/* Define to 1 if you have the declaration of `fmax', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMAX
+
+/* Define to 1 if you have the declaration of `fmaxf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMAXF
+
+/* Define to 1 if you have the declaration of `fmaxl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMAXL
+
+/* Define to 1 if you have the declaration of `fmin', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMIN
+
+/* Define to 1 if you have the declaration of `fminf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMINF
+
+/* Define to 1 if you have the declaration of `fminl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMINL
+
+/* Define to 1 if you have the declaration of `fmod', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMOD
+
+/* Define to 1 if you have the declaration of `fmodf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMODF
+
+/* Define to 1 if you have the declaration of `fmodl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FMODL
+
+/* Define to 1 if you have the declaration of `frexp', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FREXP
+
+/* Define to 1 if you have the declaration of `frexpf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FREXPF
+
+/* Define to 1 if you have the declaration of `frexpl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_FREXPL
+
+/* Define to 1 if you have the declaration of `hypot', and to 0 if you don't.
+   */
+#undef HAVE_DECL_HYPOT
+
+/* Define to 1 if you have the declaration of `hypotf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_HYPOTF
+
+/* Define to 1 if you have the declaration of `hypotl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_HYPOTL
+
+/* Define to 1 if you have the declaration of `ilogb', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ILOGB
+
+/* Define to 1 if you have the declaration of `ilogbf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ILOGBF
+
+/* Define to 1 if you have the declaration of `ilogbl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ILOGBL
+
+/* Define to 1 if you have the declaration of `j0', and to 0 if you don't. */
+#undef HAVE_DECL_J0
+
+/* Define to 1 if you have the declaration of `j0f', and to 0 if you don't. */
+#undef HAVE_DECL_J0F
+
+/* Define to 1 if you have the declaration of `j0l', and to 0 if you don't. */
+#undef HAVE_DECL_J0L
+
+/* Define to 1 if you have the declaration of `j1', and to 0 if you don't. */
+#undef HAVE_DECL_J1
+
+/* Define to 1 if you have the declaration of `j1f', and to 0 if you don't. */
+#undef HAVE_DECL_J1F
+
+/* Define to 1 if you have the declaration of `j1l', and to 0 if you don't. */
+#undef HAVE_DECL_J1L
+
+/* Define to 1 if you have the declaration of `jn', and to 0 if you don't. */
+#undef HAVE_DECL_JN
+
+/* Define to 1 if you have the declaration of `jnf', and to 0 if you don't. */
+#undef HAVE_DECL_JNF
+
+/* Define to 1 if you have the declaration of `jnl', and to 0 if you don't. */
+#undef HAVE_DECL_JNL
+
+/* Define to 1 if you have the declaration of `ldexp', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LDEXP
+
+/* Define to 1 if you have the declaration of `ldexpf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LDEXPF
+
+/* Define to 1 if you have the declaration of `ldexpl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LDEXPL
+
+/* Define to 1 if you have the declaration of `lgamma', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LGAMMA
+
+/* Define to 1 if you have the declaration of `lgammaf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LGAMMAF
+
+/* Define to 1 if you have the declaration of `lgammal', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LGAMMAL
+
+/* Define to 1 if you have the declaration of `llrint', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LLRINT
+
+/* Define to 1 if you have the declaration of `llrintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LLRINTF
+
+/* Define to 1 if you have the declaration of `llrintl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LLRINTL
+
+/* Define to 1 if you have the declaration of `llround', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LLROUND
+
+/* Define to 1 if you have the declaration of `llroundf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LLROUNDF
+
+/* Define to 1 if you have the declaration of `llroundl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LLROUNDL
+
+/* Define to 1 if you have the declaration of `log', and to 0 if you don't. */
+#undef HAVE_DECL_LOG
+
+/* Define to 1 if you have the declaration of `log10', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG10
+
+/* Define to 1 if you have the declaration of `log10f', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG10F
+
+/* Define to 1 if you have the declaration of `log10l', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG10L
+
+/* Define to 1 if you have the declaration of `log1p', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG1P
+
+/* Define to 1 if you have the declaration of `log1pf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG1PF
+
+/* Define to 1 if you have the declaration of `log1pl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG1PL
+
+/* Define to 1 if you have the declaration of `log2', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG2
+
+/* Define to 1 if you have the declaration of `log2f', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG2F
+
+/* Define to 1 if you have the declaration of `log2l', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOG2L
+
+/* Define to 1 if you have the declaration of `logb', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOGB
+
+/* Define to 1 if you have the declaration of `logbf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOGBF
+
+/* Define to 1 if you have the declaration of `logbl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOGBL
+
+/* Define to 1 if you have the declaration of `logf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOGF
+
+/* Define to 1 if you have the declaration of `logl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LOGL
+
+/* Define to 1 if you have the declaration of `lrint', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LRINT
+
+/* Define to 1 if you have the declaration of `lrintf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LRINTF
+
+/* Define to 1 if you have the declaration of `lrintl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LRINTL
+
+/* Define to 1 if you have the declaration of `lround', and to 0 if you don't.
+   */
+#undef HAVE_DECL_LROUND
+
+/* Define to 1 if you have the declaration of `lroundf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LROUNDF
+
+/* Define to 1 if you have the declaration of `lroundl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LROUNDL
+
+/* Define to 1 if you have the declaration of `memalign', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MEMALIGN
+
+/* Define to 1 if you have the declaration of `modf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_MODF
+
+/* Define to 1 if you have the declaration of `modff', and to 0 if you don't.
+   */
+#undef HAVE_DECL_MODFF
+
+/* Define to 1 if you have the declaration of `modfl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_MODFL
+
+/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */
+#undef HAVE_DECL_NAN
+
+/* Define to 1 if you have the declaration of `nanf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_NANF
+
+/* Define to 1 if you have the declaration of `nanl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_NANL
+
+/* Define to 1 if you have the declaration of `nanosleep', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NANOSLEEP
+
+/* Define to 1 if you have the declaration of `nearbyint', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NEARBYINT
+
+/* Define to 1 if you have the declaration of `nearbyintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NEARBYINTF
+
+/* Define to 1 if you have the declaration of `nearbyintl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NEARBYINTL
+
+/* Define to 1 if you have the declaration of `nextafter', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NEXTAFTER
+
+/* Define to 1 if you have the declaration of `nextafterf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NEXTAFTERF
+
+/* Define to 1 if you have the declaration of `nextafterl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_NEXTAFTERL
+
+/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if
+   you don't. */
+#undef HAVE_DECL_POSIX_MEMALIGN
+
+/* Define to 1 if you have the declaration of `pow', and to 0 if you don't. */
+#undef HAVE_DECL_POW
+
+/* Define to 1 if you have the declaration of `powf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_POWF
+
+/* Define to 1 if you have the declaration of `powl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_POWL
+
+/* Define to 1 if you have the declaration of `remainder', and to 0 if you
+   don't. */
+#undef HAVE_DECL_REMAINDER
+
+/* Define to 1 if you have the declaration of `remainderf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_REMAINDERF
+
+/* Define to 1 if you have the declaration of `remainderl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_REMAINDERL
+
+/* Define to 1 if you have the declaration of `remquo', and to 0 if you don't.
+   */
+#undef HAVE_DECL_REMQUO
+
+/* Define to 1 if you have the declaration of `remquof', and to 0 if you
+   don't. */
+#undef HAVE_DECL_REMQUOF
+
+/* Define to 1 if you have the declaration of `remquol', and to 0 if you
+   don't. */
+#undef HAVE_DECL_REMQUOL
+
+/* Define to 1 if you have the declaration of `rint', and to 0 if you don't.
+   */
+#undef HAVE_DECL_RINT
+
+/* Define to 1 if you have the declaration of `rintf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_RINTF
+
+/* Define to 1 if you have the declaration of `rintl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_RINTL
+
+/* Define to 1 if you have the declaration of `round', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ROUND
+
+/* Define to 1 if you have the declaration of `roundf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ROUNDF
+
+/* Define to 1 if you have the declaration of `roundl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ROUNDL
+
+/* Define to 1 if you have the declaration of `scalbln', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SCALBLN
+
+/* Define to 1 if you have the declaration of `scalblnf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SCALBLNF
+
+/* Define to 1 if you have the declaration of `scalblnl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SCALBLNL
+
+/* Define to 1 if you have the declaration of `scalbn', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SCALBN
+
+/* Define to 1 if you have the declaration of `scalbnf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SCALBNF
+
+/* Define to 1 if you have the declaration of `scalbnl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SCALBNL
+
+/* Define to 1 if you have the declaration of `sin', and to 0 if you don't. */
+#undef HAVE_DECL_SIN
+
+/* Define to 1 if you have the declaration of `sinf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SINF
+
+/* Define to 1 if you have the declaration of `sinh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SINH
+
+/* Define to 1 if you have the declaration of `sinhf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SINHF
+
+/* Define to 1 if you have the declaration of `sinhl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SINHL
+
+/* Define to 1 if you have the declaration of `sinl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SINL
+
+/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SLEEP
+
+/* Define to 1 if you have the declaration of `sqrt', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SQRT
+
+/* Define to 1 if you have the declaration of `sqrtf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SQRTF
+
+/* Define to 1 if you have the declaration of `sqrtl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SQRTL
+
+/* Define to 1 if you have the declaration of `srand48', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SRAND48
+
+/* Define to 1 if you have the declaration of `tan', and to 0 if you don't. */
+#undef HAVE_DECL_TAN
+
+/* Define to 1 if you have the declaration of `tanf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TANF
+
+/* Define to 1 if you have the declaration of `tanh', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TANH
+
+/* Define to 1 if you have the declaration of `tanhf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TANHF
+
+/* Define to 1 if you have the declaration of `tanhl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TANHL
+
+/* Define to 1 if you have the declaration of `tanl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TANL
+
+/* Define to 1 if you have the declaration of `tgamma', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TGAMMA
+
+/* Define to 1 if you have the declaration of `tgammaf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_TGAMMAF
+
+/* Define to 1 if you have the declaration of `tgammal', and to 0 if you
+   don't. */
+#undef HAVE_DECL_TGAMMAL
+
+/* Define to 1 if you have the declaration of `trunc', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TRUNC
+
+/* Define to 1 if you have the declaration of `truncf', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TRUNCF
+
+/* Define to 1 if you have the declaration of `truncl', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TRUNCL
+
+/* Define to 1 if you have the declaration of `y0', and to 0 if you don't. */
+#undef HAVE_DECL_Y0
+
+/* Define to 1 if you have the declaration of `y0f', and to 0 if you don't. */
+#undef HAVE_DECL_Y0F
+
+/* Define to 1 if you have the declaration of `y0l', and to 0 if you don't. */
+#undef HAVE_DECL_Y0L
+
+/* Define to 1 if you have the declaration of `y1', and to 0 if you don't. */
+#undef HAVE_DECL_Y1
+
+/* Define to 1 if you have the declaration of `y1f', and to 0 if you don't. */
+#undef HAVE_DECL_Y1F
+
+/* Define to 1 if you have the declaration of `y1l', and to 0 if you don't. */
+#undef HAVE_DECL_Y1L
+
+/* Define to 1 if you have the declaration of `yn', and to 0 if you don't. */
+#undef HAVE_DECL_YN
+
+/* Define to 1 if you have the declaration of `ynf', and to 0 if you don't. */
+#undef HAVE_DECL_YNF
+
+/* Define to 1 if you have the declaration of `ynl', and to 0 if you don't. */
+#undef HAVE_DECL_YNL
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define to 1 if you have the `drand48' function. */
+#undef HAVE_DRAND48
+
+/* Define to 1 if you have the `erf' function. */
+#undef HAVE_ERF
+
+/* Define to 1 if you have the `erfc' function. */
+#undef HAVE_ERFC
+
+/* Define to 1 if you have the `erfcf' function. */
+#undef HAVE_ERFCF
+
+/* Define to 1 if you have the `erfcl' function. */
+#undef HAVE_ERFCL
+
+/* Define to 1 if you have the `erff' function. */
+#undef HAVE_ERFF
+
+/* Define to 1 if you have the `erfl' function. */
+#undef HAVE_ERFL
+
+/* Define to 1 if you have the `exp' function. */
+#undef HAVE_EXP
+
+/* Define to 1 if you have the `exp2' function. */
+#undef HAVE_EXP2
+
+/* Define to 1 if you have the `exp2f' function. */
+#undef HAVE_EXP2F
+
+/* Define to 1 if you have the `exp2l' function. */
+#undef HAVE_EXP2L
+
+/* Define to 1 if you have the `expf' function. */
+#undef HAVE_EXPF
+
+/* Define to 1 if you have the `expl' function. */
+#undef HAVE_EXPL
+
+/* Define to 1 if you have the `expm1' function. */
+#undef HAVE_EXPM1
+
+/* Define to 1 if you have the `expm1f' function. */
+#undef HAVE_EXPM1F
+
+/* Define to 1 if you have the `expm1l' function. */
+#undef HAVE_EXPM1L
+
+/* Define to 1 if you have the `fabs' function. */
+#undef HAVE_FABS
+
+/* Define to 1 if you have the `fabsf' function. */
+#undef HAVE_FABSF
+
+/* Define to 1 if you have the `fabsl' function. */
+#undef HAVE_FABSL
+
+/* Define to 1 if you have the `fdim' function. */
+#undef HAVE_FDIM
+
+/* Define to 1 if you have the `fdimf' function. */
+#undef HAVE_FDIMF
+
+/* Define to 1 if you have the `fdiml' function. */
+#undef HAVE_FDIML
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the `floor' function. */
+#undef HAVE_FLOOR
+
+/* Define to 1 if you have the `floorf' function. */
+#undef HAVE_FLOORF
+
+/* Define to 1 if you have the `floorl' function. */
+#undef HAVE_FLOORL
+
+/* Define to 1 if you have the `fma' function. */
+#undef HAVE_FMA
+
+/* Define to 1 if you have the `fmaf' function. */
+#undef HAVE_FMAF
+
+/* Define to 1 if you have the `fmal' function. */
+#undef HAVE_FMAL
+
+/* Define to 1 if you have the `fmax' function. */
+#undef HAVE_FMAX
+
+/* Define to 1 if you have the `fmaxf' function. */
+#undef HAVE_FMAXF
+
+/* Define to 1 if you have the `fmaxl' function. */
+#undef HAVE_FMAXL
+
+/* Define to 1 if you have the `fmin' function. */
+#undef HAVE_FMIN
+
+/* Define to 1 if you have the `fminf' function. */
+#undef HAVE_FMINF
+
+/* Define to 1 if you have the `fminl' function. */
+#undef HAVE_FMINL
+
+/* Define to 1 if you have the `fmod' function. */
+#undef HAVE_FMOD
+
+/* Define to 1 if you have the `fmodf' function. */
+#undef HAVE_FMODF
+
+/* Define to 1 if you have the `fmodl' function. */
+#undef HAVE_FMODL
+
+/* Define to 1 if you have the `frexp' function. */
+#undef HAVE_FREXP
+
+/* Define to 1 if you have the `frexpf' function. */
+#undef HAVE_FREXPF
+
+/* Define to 1 if you have the `frexpl' function. */
+#undef HAVE_FREXPL
+
+/* Define to 1 if you have the `gethrtime' function. */
+#undef HAVE_GETHRTIME
+
+/* Define to 1 if hrtime_t is defined in <sys/time.h> */
+#undef HAVE_HRTIME_T
+
+/* Define to 1 if you have the `hypot' function. */
+#undef HAVE_HYPOT
+
+/* Define to 1 if you have the `hypotf' function. */
+#undef HAVE_HYPOTF
+
+/* Define to 1 if you have the `hypotl' function. */
+#undef HAVE_HYPOTL
+
+/* Define to 1 if you have the `ilogb' function. */
+#undef HAVE_ILOGB
+
+/* Define to 1 if you have the `ilogbf' function. */
+#undef HAVE_ILOGBF
+
+/* Define to 1 if you have the `ilogbl' function. */
+#undef HAVE_ILOGBL
+
+/* Define to 1 if you have the <intrinsics.h> header file. */
+#undef HAVE_INTRINSICS_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `j0' function. */
+#undef HAVE_J0
+
+/* Define to 1 if you have the `j0f' function. */
+#undef HAVE_J0F
+
+/* Define to 1 if you have the `j0l' function. */
+#undef HAVE_J0L
+
+/* Define to 1 if you have the `j1' function. */
+#undef HAVE_J1
+
+/* Define to 1 if you have the `j1f' function. */
+#undef HAVE_J1F
+
+/* Define to 1 if you have the `j1l' function. */
+#undef HAVE_J1L
+
+/* Define to 1 if you have the `jn' function. */
+#undef HAVE_JN
+
+/* Define to 1 if you have the `jnf' function. */
+#undef HAVE_JNF
+
+/* Define to 1 if you have the `jnl' function. */
+#undef HAVE_JNL
+
+/* Define to 1 if you have the `ldexp' function. */
+#undef HAVE_LDEXP
+
+/* Define to 1 if you have the `ldexpf' function. */
+#undef HAVE_LDEXPF
+
+/* Define to 1 if you have the `ldexpl' function. */
+#undef HAVE_LDEXPL
+
+/* Define to 1 if you have the `lgamma' function. */
+#undef HAVE_LGAMMA
+
+/* Define to 1 if you have the `lgammaf' function. */
+#undef HAVE_LGAMMAF
+
+/* Define to 1 if you have the `lgammal' function. */
+#undef HAVE_LGAMMAL
+
+/* Define to 1 if you have the `fftw3' library (-lfftw3). */
+#undef HAVE_LIBFFTW3
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the `llrint' function. */
+#undef HAVE_LLRINT
+
+/* Define to 1 if you have the `llrintf' function. */
+#undef HAVE_LLRINTF
+
+/* Define to 1 if you have the `llrintl' function. */
+#undef HAVE_LLRINTL
+
+/* Define to 1 if you have the `llround' function. */
+#undef HAVE_LLROUND
+
+/* Define to 1 if you have the `llroundf' function. */
+#undef HAVE_LLROUNDF
+
+/* Define to 1 if you have the `llroundl' function. */
+#undef HAVE_LLROUNDL
+
+/* Define to 1 if you have the `log' function. */
+#undef HAVE_LOG
+
+/* Define to 1 if you have the `log10' function. */
+#undef HAVE_LOG10
+
+/* Define to 1 if you have the `log10f' function. */
+#undef HAVE_LOG10F
+
+/* Define to 1 if you have the `log10l' function. */
+#undef HAVE_LOG10L
+
+/* Define to 1 if you have the `log1p' function. */
+#undef HAVE_LOG1P
+
+/* Define to 1 if you have the `log1pf' function. */
+#undef HAVE_LOG1PF
+
+/* Define to 1 if you have the `log1pl' function. */
+#undef HAVE_LOG1PL
+
+/* Define to 1 if you have the `log2' function. */
+#undef HAVE_LOG2
+
+/* Define to 1 if you have the `log2f' function. */
+#undef HAVE_LOG2F
+
+/* Define to 1 if you have the `log2l' function. */
+#undef HAVE_LOG2L
+
+/* Define to 1 if you have the `logb' function. */
+#undef HAVE_LOGB
+
+/* Define to 1 if you have the `logbf' function. */
+#undef HAVE_LOGBF
+
+/* Define to 1 if you have the `logbl' function. */
+#undef HAVE_LOGBL
+
+/* Define to 1 if you have the `logf' function. */
+#undef HAVE_LOGF
+
+/* Define to 1 if you have the `logl' function. */
+#undef HAVE_LOGL
+
+/* Define to 1 if the compiler supports 'long double' */
+#undef HAVE_LONG_DOUBLE
+
+/* Define to 1 if you have the `lrint' function. */
+#undef HAVE_LRINT
+
+/* Define to 1 if you have the `lrintf' function. */
+#undef HAVE_LRINTF
+
+/* Define to 1 if you have the `lrintl' function. */
+#undef HAVE_LRINTL
+
+/* Define to 1 if you have the `lround' function. */
+#undef HAVE_LROUND
+
+/* Define to 1 if you have the `lroundf' function. */
+#undef HAVE_LROUNDF
+
+/* Define to 1 if you have the `lroundl' function. */
+#undef HAVE_LROUNDL
+
+/* Define to 1 if you have the `mach_absolute_time' function. */
+#undef HAVE_MACH_ABSOLUTE_TIME
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+#undef HAVE_MACH_MACH_TIME_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define to 1 if compilation of Matlab interface only succeeds when macro
+   __STDC_UTF_16__ not defined. */
+#undef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
+
+/* Define to 1 if you have the `memalign' function. */
+#undef HAVE_MEMALIGN
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to have the file mexversion.c */
+#undef HAVE_MEXVERSION_C
+
+/* Define to enable use of MIPS ZBus cycle-counter. */
+#undef HAVE_MIPS_ZBUS_TIMER
+
+/* Define to 1 if you have the `modf' function. */
+#undef HAVE_MODF
+
+/* Define to 1 if you have the `modff' function. */
+#undef HAVE_MODFF
+
+/* Define to 1 if you have the `modfl' function. */
+#undef HAVE_MODFL
+
+/* Define to 1 if you have the `nan' function. */
+#undef HAVE_NAN
+
+/* Define to 1 if you have the `nanf' function. */
+#undef HAVE_NANF
+
+/* Define to 1 if you have the `nanl' function. */
+#undef HAVE_NANL
+
+/* Define to 1 if you have the `nanosleep' function. */
+#undef HAVE_NANOSLEEP
+
+/* Define to 1 if you have the `nearbyint' function. */
+#undef HAVE_NEARBYINT
+
+/* Define to 1 if you have the `nearbyintf' function. */
+#undef HAVE_NEARBYINTF
+
+/* Define to 1 if you have the `nearbyintl' function. */
+#undef HAVE_NEARBYINTL
+
+/* Define to 1 if you have the `nextafter' function. */
+#undef HAVE_NEXTAFTER
+
+/* Define to 1 if you have the `nextafterf' function. */
+#undef HAVE_NEXTAFTERF
+
+/* Define to 1 if you have the `nextafterl' function. */
+#undef HAVE_NEXTAFTERL
+
+/* Define if OpenMP is enabled */
+#undef HAVE_OPENMP
+
+/* Define to 1 if you have the `posix_memalign' function. */
+#undef HAVE_POSIX_MEMALIGN
+
+/* Define to 1 if you have the `pow' function. */
+#undef HAVE_POW
+
+/* Define to 1 if you have the `powf' function. */
+#undef HAVE_POWF
+
+/* Define to 1 if you have the `powl' function. */
+#undef HAVE_POWL
+
+/* Define to 1 if you have the `read_real_time' function. */
+#undef HAVE_READ_REAL_TIME
+
+/* Define to 1 if you have the `remainder' function. */
+#undef HAVE_REMAINDER
+
+/* Define to 1 if you have the `remainderf' function. */
+#undef HAVE_REMAINDERF
+
+/* Define to 1 if you have the `remainderl' function. */
+#undef HAVE_REMAINDERL
+
+/* Define to 1 if you have the `remquo' function. */
+#undef HAVE_REMQUO
+
+/* Define to 1 if you have the `remquof' function. */
+#undef HAVE_REMQUOF
+
+/* Define to 1 if you have the `remquol' function. */
+#undef HAVE_REMQUOL
+
+/* Define to 1 if you have the `rint' function. */
+#undef HAVE_RINT
+
+/* Define to 1 if you have the `rintf' function. */
+#undef HAVE_RINTF
+
+/* Define to 1 if you have the `rintl' function. */
+#undef HAVE_RINTL
+
+/* Define to 1 if you have the `round' function. */
+#undef HAVE_ROUND
+
+/* Define to 1 if you have the `roundf' function. */
+#undef HAVE_ROUNDF
+
+/* Define to 1 if you have the `roundl' function. */
+#undef HAVE_ROUNDL
+
+/* Define to 1 if you have the `scalbln' function. */
+#undef HAVE_SCALBLN
+
+/* Define to 1 if you have the `scalblnf' function. */
+#undef HAVE_SCALBLNF
+
+/* Define to 1 if you have the `scalblnl' function. */
+#undef HAVE_SCALBLNL
+
+/* Define to 1 if you have the `scalbn' function. */
+#undef HAVE_SCALBN
+
+/* Define to 1 if you have the `scalbnf' function. */
+#undef HAVE_SCALBNF
+
+/* Define to 1 if you have the `scalbnl' function. */
+#undef HAVE_SCALBNL
+
+/* Define to 1 if you have the `sin' function. */
+#undef HAVE_SIN
+
+/* Define to 1 if you have the `sinf' function. */
+#undef HAVE_SINF
+
+/* Define to 1 if you have the `sinh' function. */
+#undef HAVE_SINH
+
+/* Define to 1 if you have the `sinhf' function. */
+#undef HAVE_SINHF
+
+/* Define to 1 if you have the `sinhl' function. */
+#undef HAVE_SINHL
+
+/* Define to 1 if you have the `sinl' function. */
+#undef HAVE_SINL
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `sqrt' function. */
+#undef HAVE_SQRT
+
+/* Define to 1 if you have the `sqrtf' function. */
+#undef HAVE_SQRTF
+
+/* Define to 1 if you have the `sqrtl' function. */
+#undef HAVE_SQRTL
+
+/* Define to 1 if you have the `srand48' function. */
+#undef HAVE_SRAND48
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `sysctl' function. */
+#undef HAVE_SYSCTL
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the `tan' function. */
+#undef HAVE_TAN
+
+/* Define to 1 if you have the `tanf' function. */
+#undef HAVE_TANF
+
+/* Define to 1 if you have the `tanh' function. */
+#undef HAVE_TANH
+
+/* Define to 1 if you have the `tanhf' function. */
+#undef HAVE_TANHF
+
+/* Define to 1 if you have the `tanhl' function. */
+#undef HAVE_TANHL
+
+/* Define to 1 if you have the `tanl' function. */
+#undef HAVE_TANL
+
+/* Define to 1 if you have the `tgamma' function. */
+#undef HAVE_TGAMMA
+
+/* Define to 1 if you have the `tgammaf' function. */
+#undef HAVE_TGAMMAF
+
+/* Define to 1 if you have the `tgammal' function. */
+#undef HAVE_TGAMMAL
+
+/* Define to 1 if you have the `time_base_to_time' function. */
+#undef HAVE_TIME_BASE_TO_TIME
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the `trunc' function. */
+#undef HAVE_TRUNC
+
+/* Define to 1 if you have the `truncf' function. */
+#undef HAVE_TRUNCF
+
+/* Define to 1 if you have the `truncl' function. */
+#undef HAVE_TRUNCL
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#undef HAVE_UINTPTR_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define to 1 if you have the `y0' function. */
+#undef HAVE_Y0
+
+/* Define to 1 if you have the `y0f' function. */
+#undef HAVE_Y0F
+
+/* Define to 1 if you have the `y0l' function. */
+#undef HAVE_Y0L
+
+/* Define to 1 if you have the `y1' function. */
+#undef HAVE_Y1
+
+/* Define to 1 if you have the `y1f' function. */
+#undef HAVE_Y1F
+
+/* Define to 1 if you have the `y1l' function. */
+#undef HAVE_Y1L
+
+/* Define to 1 if you have the `yn' function. */
+#undef HAVE_YN
+
+/* Define to 1 if you have the `ynf' function. */
+#undef HAVE_YNF
+
+/* Define to 1 if you have the `ynl' function. */
+#undef HAVE_YNL
+
+/* Define to 1 if you have the `_mm_free' function. */
+#undef HAVE__MM_FREE
+
+/* Define to 1 if you have the `_mm_malloc' function. */
+#undef HAVE__MM_MALLOC
+
+/* Define if you have the UNICOS _rtc() intrinsic. */
+#undef HAVE__RTC
+
+/* Define to enable Kaiser-Bessel window function. */
+#undef KAISER_BESSEL
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Define to enable Matlab argument checks. */
+#undef MATLAB_ARGCHECKS
+
+/* Define to enable runtime time measurements. */
+#undef MEASURE_TIME
+
+/* Define to enable time measurements for FFTW transforms. */
+#undef MEASURE_TIME_FFTW
+
+/* Define to enable extra debugging code. */
+#undef NFFT_DEBUG
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to enable sinc power window function. */
+#undef SINC_POWER
+
+/* The size of `double', as computed by sizeof. */
+#undef SIZEOF_DOUBLE
+
+/* The size of `float', as computed by sizeof. */
+#undef SIZEOF_FLOAT
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `long double', as computed by sizeof. */
+#undef SIZEOF_LONG_DOUBLE
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `ptrdiff_t', as computed by sizeof. */
+#undef SIZEOF_PTRDIFF_T
+
+/* The size of `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of `unsigned int', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_INT
+
+/* The size of `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* The size of `unsigned long long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG_LONG
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/include/cycle.h b/include/cycle.h
new file mode 100644
index 0000000..82867f8
--- /dev/null
+++ b/include/cycle.h
@@ -0,0 +1,518 @@
+/*
+ * Copyright (c) 2003, 2007-8 Matteo Frigo
+ * Copyright (c) 2003, 2007-8 Massachusetts Institute of Technology
+ *
+ * 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.
+ *
+ */
+
+
+/* machine-dependent cycle counters code. Needs to be inlined. */
+
+/***************************************************************************/
+/* To use the cycle counters in your code, simply #include "cycle.h" (this
+   file), and then use the functions/macros:
+
+                 ticks getticks(void);
+
+   ticks is an opaque typedef defined below, representing the current time.
+   You extract the elapsed time between two calls to gettick() via:
+
+                 double elapsed(ticks t1, ticks t0);
+
+   which returns a double-precision variable in arbitrary units.  You
+   are not expected to convert this into human units like seconds; it
+   is intended only for *comparisons* of time intervals.
+
+   (In order to use some of the OS-dependent timer routines like
+   Solaris' gethrtime, you need to paste the autoconf snippet below
+   into your configure.ac file and #include "config.h" before cycle.h,
+   or define the relevant macros manually if you are not using autoconf.)
+*/
+
+/***************************************************************************/
+/* This file uses macros like HAVE_GETHRTIME that are assumed to be
+   defined according to whether the corresponding function/type/header
+   is available on your system.  The necessary macros are most
+   conveniently defined if you are using GNU autoconf, via the tests:
+   
+   dnl ---------------------------------------------------------------------
+
+   AC_C_INLINE
+   AC_HEADER_TIME
+   AC_CHECK_HEADERS([sys/time.h c_asm.h intrinsics.h mach/mach_time.h])
+
+   AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t is defined in <sys/time.h>])],,[#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif])
+
+   AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time])
+
+   dnl Cray UNICOS _rtc() (real-time clock) intrinsic
+   AC_MSG_CHECKING([for _rtc intrinsic])
+   rtc_ok=yes
+   AC_TRY_LINK([#ifdef HAVE_INTRINSICS_H
+#include <intrinsics.h>
+#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no])
+   AC_MSG_RESULT($rtc_ok)
+
+   dnl ---------------------------------------------------------------------
+*/
+
+/***************************************************************************/
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
+#define INLINE_ELAPSED(INL) static INL double elapsed(ticks t1, ticks t0) \
+{									  \
+     return (double)t1 - (double)t0;					  \
+}
+
+#if 1 == 0
+#else
+
+/*----------------------------------------------------------------*/
+/* Solaris */
+#if defined(HAVE_GETHRTIME) && defined(HAVE_HRTIME_T) && !defined(HAVE_TICK_COUNTER)
+typedef hrtime_t ticks;
+
+#define getticks gethrtime
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* AIX v. 4+ routines to read the real-time clock or time-base register */
+#if defined(HAVE_READ_REAL_TIME) && defined(HAVE_TIME_BASE_TO_TIME) && !defined(HAVE_TICK_COUNTER)
+typedef timebasestruct_t ticks;
+
+static __inline ticks getticks(void)
+{
+     ticks t;
+     read_real_time(&t, TIMEBASE_SZ);
+     return t;
+}
+
+static __inline double elapsed(ticks t1, ticks t0) /* time in nanoseconds */
+{
+     time_base_to_time(&t1, TIMEBASE_SZ);
+     time_base_to_time(&t0, TIMEBASE_SZ);
+     return (((double)t1.tb_high - (double)t0.tb_high) * 1.0e9 + 
+	     ((double)t1.tb_low - (double)t0.tb_low));
+}
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * PowerPC ``cycle'' counter using the time base register.
+ */
+#if ((((defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))) || (defined(__MWERKS__) && defined(macintosh)))) || (defined(__IBM_GCC_ASM) && (defined(__powerpc__) || defined(__ppc__))))  && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+     unsigned int tbl, tbu0, tbu1;
+
+     do {
+	  __asm__ __volatile__ ("mftbu %0" : "=r"(tbu0));
+	  __asm__ __volatile__ ("mftb %0" : "=r"(tbl));
+	  __asm__ __volatile__ ("mftbu %0" : "=r"(tbu1));
+     } while (tbu0 != tbu1);
+
+     return (((unsigned long long)tbu0) << 32) | tbl;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* MacOS/Mach (Darwin) time-base register interface (unlike UpTime,
+   from Carbon, requires no additional libraries to be linked). */
+#if defined(HAVE_MACH_ABSOLUTE_TIME) && defined(HAVE_MACH_MACH_TIME_H) && !defined(HAVE_TICK_COUNTER)
+#include <mach/mach_time.h>
+typedef uint64_t ticks;
+#define getticks mach_absolute_time
+INLINE_ELAPSED(__inline__)
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * Pentium cycle counter 
+ */
+#if (defined(__GNUC__) || defined(__ICC)) && defined(__i386__)  && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+     ticks ret;
+
+     __asm__ __volatile__("rdtsc": "=A" (ret));
+     /* no input, nothing else clobbered */
+     return ret;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0   /* unreliable pentium IV cycle counter */
+#endif
+
+/* Visual C++ -- thanks to Morten Nissov for his help with this */
+#if defined(_MSC_VER) && _MSC_VER >= 1200 && _M_IX86 >= 500 && !defined(HAVE_TICK_COUNTER)
+#include <windows.h>
+typedef LARGE_INTEGER ticks;
+#define RDTSC __asm __emit 0fh __asm __emit 031h /* hack for VC++ 5.0 */
+
+static __inline ticks getticks(void)
+{
+     ticks retval;
+
+     __asm {
+	  RDTSC
+	  mov retval.HighPart, edx
+	  mov retval.LowPart, eax
+     }
+     return retval;
+}
+
+static __inline double elapsed(ticks t1, ticks t0)
+{  
+     return (double)t1.QuadPart - (double)t0.QuadPart;
+}  
+
+#define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0   /* unreliable pentium IV cycle counter */
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * X86-64 cycle counter
+ */
+#if (defined(__GNUC__) || defined(__ICC) || defined(__SUNPRO_C)) && defined(__x86_64__)  && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+     unsigned a, d; 
+     asm volatile("rdtsc" : "=a" (a), "=d" (d)); 
+     return ((ticks)a) | (((ticks)d) << 32); 
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* PGI compiler, courtesy Cristiano Calonaci, Andrea Tarsi, & Roberto Gori.
+   NOTE: this code will fail to link unless you use the -Masmkeyword compiler
+   option (grrr). */
+#if defined(__PGI) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER) 
+typedef unsigned long long ticks;
+static ticks getticks(void)
+{
+    asm(" rdtsc; shl    $0x20,%rdx; mov    %eax,%eax; or     %rdx,%rax;    ");
+}
+INLINE_ELAPSED(__inline__)
+#define HAVE_TICK_COUNTER
+#endif
+
+/* Visual C++, courtesy of Dirk Michaelis */
+#if defined(_MSC_VER) && _MSC_VER >= 1400 && (defined(_M_AMD64) || defined(_M_X64)) && !defined(HAVE_TICK_COUNTER)
+
+#include <intrin.h>
+#pragma intrinsic(__rdtsc)
+typedef unsigned __int64 ticks;
+#define getticks __rdtsc
+INLINE_ELAPSED(__inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * IA64 cycle counter
+ */
+
+/* intel's icc/ecc compiler */
+#if (defined(__EDG_VERSION) || defined(__ECC)) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+#include <ia64intrin.h>
+
+static __inline__ ticks getticks(void)
+{
+     return __getReg(_IA64_REG_AR_ITC);
+}
+ 
+INLINE_ELAPSED(__inline__)
+ 
+#define HAVE_TICK_COUNTER
+#endif
+
+/* gcc */
+#if defined(__GNUC__) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+
+static __inline__ ticks getticks(void)
+{
+     ticks ret;
+
+     __asm__ __volatile__ ("mov %0=ar.itc" : "=r"(ret));
+     return ret;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* HP/UX IA64 compiler, courtesy Teresa L. Johnson: */
+#if defined(__hpux) && defined(__ia64) && !defined(HAVE_TICK_COUNTER)
+#include <machine/sys/inline.h>
+typedef unsigned long ticks;
+
+static inline ticks getticks(void)
+{
+     ticks ret;
+
+     ret = _Asm_mov_from_ar (_AREG_ITC);
+     return ret;
+}
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* Microsoft Visual C++ */
+#if defined(_MSC_VER) && defined(_M_IA64) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned __int64 ticks;
+
+#  ifdef __cplusplus
+extern "C"
+#  endif
+ticks __getReg(int whichReg);
+#pragma intrinsic(__getReg)
+
+static __inline ticks getticks(void)
+{
+     volatile ticks temp;
+     temp = __getReg(3116);
+     return temp;
+}
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * PA-RISC cycle counter 
+ */
+#if defined(__hppa__) || defined(__hppa) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+
+#  ifdef __GNUC__
+static __inline__ ticks getticks(void)
+{
+     ticks ret;
+
+     __asm__ __volatile__("mfctl 16, %0": "=r" (ret));
+     /* no input, nothing else clobbered */
+     return ret;
+}
+#  else
+#  include <machine/inline.h>
+static inline unsigned long getticks(void)
+{
+     register ticks ret;
+     _MFCTL(16, ret);
+     return ret;
+}
+#  endif
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* S390, courtesy of James Treacy */
+#if defined(__GNUC__) && defined(__s390__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+     ticks cycles;
+     __asm__("stck 0(%0)" : : "a" (&(cycles)) : "memory", "cc");
+     return cycles;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+/*----------------------------------------------------------------*/
+#if defined(__GNUC__) && defined(__alpha__) && !defined(HAVE_TICK_COUNTER)
+/*
+ * The 32-bit cycle counter on alpha overflows pretty quickly, 
+ * unfortunately.  A 1GHz machine overflows in 4 seconds.
+ */
+typedef unsigned int ticks;
+
+static __inline__ ticks getticks(void)
+{
+     unsigned long cc;
+     __asm__ __volatile__ ("rpcc %0" : "=r"(cc));
+     return (cc & 0xFFFFFFFF);
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+#if defined(__GNUC__) && defined(__sparc_v9__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+
+static __inline__ ticks getticks(void)
+{
+     ticks ret;
+     __asm__ __volatile__("rd %%tick, %0" : "=r" (ret));
+     return ret;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+#if (defined(__DECC) || defined(__DECCXX)) && defined(__alpha) && defined(HAVE_C_ASM_H) && !defined(HAVE_TICK_COUNTER)
+#  include <c_asm.h>
+typedef unsigned int ticks;
+
+static __inline ticks getticks(void)
+{
+     unsigned long cc;
+     cc = asm("rpcc %v0");
+     return (cc & 0xFFFFFFFF);
+}
+
+INLINE_ELAPSED(__inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+/*----------------------------------------------------------------*/
+/* SGI/Irix */
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) && !defined(HAVE_TICK_COUNTER)
+typedef struct timespec ticks;
+
+static inline ticks getticks(void)
+{
+     struct timespec t;
+     clock_gettime(CLOCK_SGI_CYCLE, &t);
+     return t;
+}
+
+static inline double elapsed(ticks t1, ticks t0)
+{
+     return ((double)t1.tv_sec - (double)t0.tv_sec) * 1.0E9 +
+	  ((double)t1.tv_nsec - (double)t0.tv_nsec);
+}
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* Cray UNICOS _rtc() intrinsic function */
+#if defined(HAVE__RTC) && !defined(HAVE_TICK_COUNTER)
+#ifdef HAVE_INTRINSICS_H
+#  include <intrinsics.h>
+#endif
+
+typedef long long ticks;
+
+#define getticks _rtc
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* MIPS ZBus */
+#if defined(HAVE_MIPS_ZBUS_TIMER) && HAVE_MIPS_ZBUS_TIMER
+#if defined(__mips__) && !defined(HAVE_TICK_COUNTER)
+#include <sys/mman.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+typedef uint64_t ticks;
+
+static inline ticks getticks(void)
+{
+  static uint64_t* addr = 0;
+
+  if (addr == 0)
+  {
+    uint32_t rq_addr = 0x10030000;
+    int fd;
+    int pgsize;
+
+    pgsize = getpagesize();
+    fd = open ("/dev/mem", O_RDONLY | O_SYNC, 0);
+    if (fd < 0) {
+      perror("open");
+      return NULL;
+    }
+    addr = mmap(0, pgsize, PROT_READ, MAP_SHARED, fd, rq_addr);
+    close(fd);
+    if (addr == (uint64_t *)-1) {
+      perror("mmap");
+      return NULL;
+    }
+  }
+
+  return *addr;
+}
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+#endif /* HAVE_MIPS_ZBUS_TIMER */
+
+#endif
diff --git a/include/infft.h b/include/infft.h
new file mode 100644
index 0000000..9f298ee
--- /dev/null
+++ b/include/infft.h
@@ -0,0 +1,1389 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: infft.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* NFFT internal header file */
+#ifndef __INFFT_H__
+#define __INFFT_H__
+
+#include "config.h"
+
+#include <math.h>
+#include <float.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <stdio.h>
+#include <string.h>
+
+#include <stdlib.h> /* size_t */
+#include <stdarg.h> /* va_list */
+#include <stddef.h> /* ptrdiff_t */
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#if HAVE_STDINT_H
+#include <stdint.h> /* uintptr_t, maybe */
+#endif
+
+#if HAVE_INTTYPES_H
+#include <inttypes.h> /* uintptr_t, maybe */
+#endif
+
+#include <fftw3.h>
+
+#include "ticks.h"
+
+/* Determine precision and name-mangling scheme. */
+#define CONCAT(prefix, name) prefix ## name
+#if defined(NFFT_SINGLE)
+typedef float R;
+typedef float _Complex C;
+#define Y(name) CONCAT(nfftf_,name)
+#define Z(name) CONCAT(fftwf_,name)
+#define NFSFT(name) CONCAT(nfsftf_,name)
+#elif defined(NFFT_LDOUBLE)
+typedef long double R;
+typedef long double _Complex C;
+#define Y(name) CONCAT(nfftl_,name)
+#define Z(name) CONCAT(fftwl_,name)
+#define NFSFT(name) CONCAT(nfsftl_,name)
+#else
+typedef double R;
+typedef double _Complex C;
+#define Y(name) CONCAT(nfft_,name)
+#define Z(name) CONCAT(fftw_,name)
+#define NFSFT(name) CONCAT(nfsft_,name)
+#endif
+#define X(name) Y(name)
+
+#define STRINGIZEx(x) #x
+#define STRINGIZE(x) STRINGIZEx(x)
+
+#ifdef NFFT_LDOUBLE
+#  define K(x) ((R) x##L)
+#else
+#  define K(x) ((R) x)
+#endif
+#define DK(name, value) const R name = K(value)
+
+/* Integral type large enough to contain a stride (what ``int'' should have been
+ * in the first place) */
+typedef ptrdiff_t INT;
+
+#define KPI K(3.1415926535897932384626433832795028841971693993751)
+#define K2PI K(6.2831853071795864769252867665590057683943387987502)
+#define KE K(2.7182818284590452353602874713526624977572470937000)
+
+#define IF(x,a,b) ((x)?(a):(b))
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#define ABS(x) (((x)>K(0.0))?(x):(-(x)))
+#define SIGN(a) (((a)>=0)?1:-1)
+#define SIGN(a) (((a)>=0)?1:-1)
+#define SIGNF(a) IF((a)<K(0.0),K(-1.0),K(1.0))
+
+/* macros for window functions */
+
+#if defined(DIRAC_DELTA)
+  #define PHI_HUT(k,d) K(1.0)
+  #define PHI(x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))
+  #define WINDOW_HELP_INIT(d)
+  #define WINDOW_HELP_FINALIZE
+  #define WINDOW_HELP_ESTIMATE_m 0
+#elif defined(GAUSSIAN)
+  #define PHI_HUT(k,d) ((R)EXP(-(POW(KPI*(k)/ths->n[d],K(2.0))*ths->b[d])))
+  #define PHI(x,d) ((R)EXP(-POW((x)*((R)ths->n[d]),K(2.0)) / \
+    ths->b[d])/SQRT(KPI*ths->b[d]))
+  #define WINDOW_HELP_INIT \
+    { \
+      int WINDOW_idx; \
+      ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \
+      for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
+        ths->b[WINDOW_idx]=(K(2.0)*ths->sigma[WINDOW_idx]) / \
+          (K(2.0)*ths->sigma[WINDOW_idx] - K(1.0)) * (((R)ths->m) / KPI); \
+    }
+  #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
+  #define WINDOW_HELP_ESTIMATE_m 12
+#elif defined(B_SPLINE)
+  #define PHI_HUT(k,d) ((R)(((k) == 0) ? K(1.0) / ths->n[(d)] : \
+    POW(SIN((k) * KPI / ths->n[(d)]) / ((k) * KPI / ths->n[(d)]), \
+      K(2.0) * ths->m)/ths->n[(d)]))
+  #define PHI(x,d) (Y(bspline)(2*ths->m,((x)*ths->n[(d)]) + \
+    (R)ths->m,ths->spline_coeffs) / ths->n[(d)])
+  #define WINDOW_HELP_INIT \
+    { \
+      ths->spline_coeffs= (R*)Y(malloc)(2*ths->m*sizeof(R)); \
+    }
+  #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}
+  #define WINDOW_HELP_ESTIMATE_m 11
+#elif defined(SINC_POWER)
+  #define PHI_HUT(k,d) (Y(bspline)(2 * ths->m, (K(2.0) * ths->m*(k)) / \
+    ((K(2.0) * ths->sigma[(d)] - 1) * ths->n[(d)] / \
+      ths->sigma[(d)]) + (R)ths->m, ths->spline_coeffs))
+  #define PHI(x,d) ((R)(ths->n[(d)] / ths->sigma[(d)] * \
+    (K(2.0) * ths->sigma[(d)] - K(1.0))/ (K(2.0)*ths->m) * \
+    POW(Y(sinc)(KPI * ths->n[(d)] / ths->sigma[(d)] * (x) * \
+    (K(2.0) * ths->sigma[(d)] - K(1.0)) / (K(2.0)*ths->m)) , 2*ths->m) / \
+    ths->n[(d)]))
+  #define WINDOW_HELP_INIT \
+    { \
+      ths->spline_coeffs= (R*)Y(malloc)(2 * ths->m * sizeof(R)); \
+    }
+  #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}
+  #define WINDOW_HELP_ESTIMATE_m 9
+#else /* Kaiser-Bessel is the default. */
+  #define PHI_HUT(k,d) ((R)Y(bessel_i0)(ths->m * SQRT(\
+    POW((R)(ths->b[d]), K(2.0)) - POW(K(2.0) * KPI * (k) / ths->n[d], K(2.0)))))
+  #define PHI(x,d) ((R)((POW((R)(ths->m), K(2.0))\
+    -POW((x)*ths->n[d],K(2.0))) > 0)? \
+    SINH(ths->b[d] * SQRT(POW((R)(ths->m),K(2.0)) - \
+    POW((x)*ths->n[d],K(2.0))))/(KPI*SQRT(POW((R)(ths->m),K(2.0)) - \
+    POW((x)*ths->n[d],K(2.0)))) : (((POW((R)(ths->m),K(2.0)) - \
+    POW((x)*ths->n[d],K(2.0))) < 0)? SIN(ths->b[d] * \
+    SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m), K(2.0)))) / \
+    (KPI*SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m),K(2.0)))):K(1.0)))
+  #define WINDOW_HELP_INIT \
+    { \
+      int WINDOW_idx; \
+      ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \
+      for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
+        ths->b[WINDOW_idx] = ((R)KPI*(K(2.0)-K(1.0) / ths->sigma[WINDOW_idx])); \
+  }
+  #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
+  #define WINDOW_HELP_ESTIMATE_m 6
+#endif
+
+#if defined(NFFT_LDOUBLE)
+#if HAVE_DECL_COPYSIGNL == 0
+extern long double copysignl(long double, long double);
+#endif
+#if HAVE_DECL_NEXTAFTERL == 0
+extern long double nextafterl(long double, long double);
+#endif
+#if HAVE_DECL_NANL == 0
+extern long double nanl(const char *tag);
+#endif
+#if HAVE_DECL_CEILL == 0
+extern long double ceill(long double);
+#endif
+#if HAVE_DECL_FLOORL == 0
+extern long double floorl(long double);
+#endif
+#if HAVE_DECL_NEARBYINTL == 0
+extern long double nearbyintl(long double);
+#endif
+#if HAVE_DECL_RINTL == 0
+extern long double rintl(long double);
+#endif
+#if HAVE_DECL_ROUNDL == 0
+extern long double roundl(long double);
+#endif
+#if HAVE_DECL_LRINTL == 0
+extern long int lrintl(long double);
+#endif
+#if HAVE_DECL_LROUNDL == 0
+extern long int lroundl(long double);
+#endif
+#if HAVE_DECL_LLRINTL == 0
+extern long long int llrintl(long double);
+#endif
+#if HAVE_DECL_LLROUNDL == 0
+extern long long int llroundl(long double);
+#endif
+#if HAVE_DECL_TRUNCL == 0
+extern long double truncl(long double);
+#endif
+#if HAVE_DECL_FMODL == 0
+extern long double fmodl(long double, long double);
+#endif
+#if HAVE_DECL_REMAINDERL == 0
+extern long double remainderl(long double, long double);
+#endif
+#if HAVE_DECL_REMQUOL == 0
+extern long double remquol(long double x, long double y, int *);
+#endif
+#if HAVE_DECL_FDIML == 0
+extern long double fdiml(long double, long double);
+#endif
+#if HAVE_DECL_FMAXL == 0
+extern long double fmaxl(long double, long double);
+#endif
+#if HAVE_DECL_FMINL == 0
+extern long double fminl(long double, long double);
+#endif
+#if HAVE_DECL_FMAL == 0
+extern long double fmal(long double x, long double y, long double z);
+#endif
+#if HAVE_DECL_FABSL == 0
+extern long double fabsl(long double);
+#endif
+#if HAVE_DECL_SQRTL == 0
+extern long double sqrtl(long double);
+#endif
+#if HAVE_DECL_CBRTL == 0
+extern long double cbrtl(long double);
+#endif
+#if HAVE_DECL_HYPOTL == 0
+extern long double hypotl(long double, long double);
+#endif
+#if HAVE_DECL_EXPL == 0
+extern long double expl(long double);
+#endif
+#if HAVE_DECL_EXP2L == 0
+extern long double exp2l(long double);
+#endif
+#if HAVE_DECL_EXPM1L == 0
+extern long double expm1l(long double);
+#endif
+#if HAVE_DECL_LOGL == 0
+extern long double logl(long double);
+#endif
+#if HAVE_DECL_LOG2L == 0
+extern long double log2l(long double);
+#endif
+#if HAVE_DECL_LOG10L == 0
+extern long double log10l(long double);
+#endif
+#if HAVE_DECL_LOG1PL == 0
+extern long double log1pl(long double);
+#endif
+#if HAVE_DECL_LOGBL == 0
+extern long double logbl(long double);
+#endif
+#if HAVE_DECL_ILOGBL == 0
+extern int ilogbl(long double);
+#endif
+#if HAVE_DECL_MODFL == 0
+extern long double modfl(long double, long double *);
+#endif
+#if HAVE_DECL_FREXPL == 0
+extern long double frexpl(long double, int *);
+#endif
+#if HAVE_DECL_LDEXPL == 0
+extern long double ldexpl(long double, int);
+#endif
+#if HAVE_DECL_SCALBNL == 0
+extern long double scalbnl(long double, int);
+#endif
+#if HAVE_DECL_SCALBLNL == 0
+extern long double scalblnl(long double, long int);
+#endif
+#if HAVE_DECL_POWL == 0
+extern long double powl(long double, long double);
+#endif
+#if HAVE_DECL_COSL == 0
+extern long double cosl(long double);
+#endif
+#if HAVE_DECL_SINL == 0
+extern long double sinl(long double);
+#endif
+#if HAVE_DECL_TANL == 0
+extern long double tanl(long double);
+#endif
+#if HAVE_DECL_COSHL == 0
+extern long double coshl(long double);
+#endif
+#if HAVE_DECL_SINHL == 0
+extern long double sinhl(long double);
+#endif
+#if HAVE_DECL_TANHL == 0
+extern long double tanhl(long double);
+#endif
+#if HAVE_DECL_ACOSL == 0
+extern long double acosl(long double);
+#endif
+#if HAVE_DECL_ASINL == 0
+extern long double asinl(long double);
+#endif
+#if HAVE_DECL_ATANL == 0
+extern long double atanl(long double);
+#endif
+#if HAVE_DECL_ATAN2L == 0
+extern long double atan2l(long double, long double);
+#endif
+#if HAVE_DECL_ACOSHL == 0
+extern long double acoshl(long double);
+#endif
+#if HAVE_DECL_ASINHL == 0
+extern long double asinhl(long double);
+#endif
+#if HAVE_DECL_ATANHL == 0
+extern long double atanhl(long double);
+#endif
+#if HAVE_DECL_TGAMMAL == 0
+extern long double tgammal(long double);
+#endif
+#if HAVE_DECL_LGAMMAL == 0
+extern long double lgammal(long double);
+#endif
+#if HAVE_DECL_J0L == 0
+extern long double j0l(long double);
+#endif
+#if HAVE_DECL_J1L == 0
+extern long double j1l(long double);
+#endif
+#if HAVE_DECL_JNL == 0
+extern long double jnl(int, long double);
+#endif
+#if HAVE_DECL_Y0L == 0
+extern long double y0l(long double);
+#endif
+#if HAVE_DECL_Y1L == 0
+extern long double y1l(long double);
+#endif
+#if HAVE_DECL_YNL == 0
+extern long double ynl(int, long double);
+#endif
+#if HAVE_DECL_ERFL == 0
+extern long double erfl(long double);
+#endif
+#if HAVE_DECL_ERFCL == 0
+extern long double erfcl(long double);
+#endif
+#if HAVE_DECL_CREALL == 0
+extern long double creall(long double _Complex z);
+#endif
+#if HAVE_DECL_CIMAGL == 0
+extern long double cimagl(long double _Complex z);
+#endif
+#if HAVE_DECL_CABSL == 0
+extern long double cabsl(long double _Complex z);
+#endif
+#if HAVE_DECL_CARGL == 0
+extern long double cargl(long double _Complex z);
+#endif
+#if HAVE_DECL_CONJL == 0
+extern long double _Complex conjl(long double _Complex z);
+#endif
+#if HAVE_DECL_CPROJL == 0
+extern long double _Complex cprojl(long double _Complex z);
+#endif
+#if HAVE_DECL_CSQRTL == 0
+extern long double _Complex csqrtl(long double _Complex z);
+#endif
+#if HAVE_DECL_CEXPL == 0
+extern long double _Complex cexpl(long double _Complex z);
+#endif
+#if HAVE_DECL_CLOGL == 0
+extern long double _Complex clogl(long double _Complex z);
+#endif
+#if HAVE_DECL_CPOWL == 0
+extern long double _Complex cpowl(long double _Complex z, long double _Complex w);
+#endif
+#if HAVE_DECL_CSINL == 0
+extern long double _Complex csinl(long double _Complex z);
+#endif
+#if HAVE_DECL_CCOSL == 0
+extern long double _Complex ccosl(long double _Complex z);
+#endif
+#if HAVE_DECL_CTANL == 0
+extern long double _Complex ctanl(long double _Complex z);
+#endif
+#if HAVE_DECL_CASINL == 0
+extern long double _Complex casinl(long double _Complex z);
+#endif
+#if HAVE_DECL_CACOSL == 0
+extern long double _Complex cacosl(long double _Complex z);
+#endif
+#if HAVE_DECL_CATANL == 0
+extern long double _Complex catanl(long double _Complex z);
+#endif
+#if HAVE_DECL_CSINHL == 0
+extern long double _Complex csinhl(long double _Complex z);
+#endif
+#if HAVE_DECL_CCOSHL == 0
+extern long double _Complex ccoshl(long double _Complex z);
+#endif
+#if HAVE_DECL_CTANHL == 0
+extern long double _Complex ctanhl(long double _Complex z);
+#endif
+#if HAVE_DECL_CASINHL == 0
+extern long double _Complex casinhl(long double _Complex z);
+#endif
+#if HAVE_DECL_CACOSHL == 0
+extern long double _Complex cacoshl(long double _Complex z);
+#endif
+#if HAVE_DECL_CATANHL == 0
+extern long double _Complex catanhl(long double _Complex z);
+#endif
+#define COPYSIGN copysignl
+#define NEXTAFTER  nextafterl
+#define MKNAN nanl
+#define CEIL ceill
+#define FLOOR floorl
+#define NEARBYINT nearbyintl
+#define RINT rintl
+#define ROUND roundl
+#define LRINT lrintl
+#define LROUND lroundl
+#define LLRINT llrintl
+#define LLROUND llroundl
+#define TRUNC truncl
+#define FMOD fmodl
+#define REMAINDER remainderl
+#define REMQUO remquol
+#define FDIM fdiml
+#define FMAX fmaxl
+#define FMIN fminl
+#define FFMA fmal
+#define FABS fabsl
+#define SQRT sqrtl
+#define CBRT cbrtl
+#define HYPOT hypotl
+#define EXP expl
+#define EXP2 exp2l
+#define EXPM1 expm1l
+#define LOG logl
+#define LOG2 log2l
+#define LOG10 log10l
+#define LOG1P log1pl
+#define LOGB logbl
+#define ILOGB ilogbl
+#define MODF modfl
+#define FREXP frexpl
+#define LDEXP ldexpl
+#define SCALBN scalbnl
+#define SCALBLN scalblnl
+#define POW powl
+#define COS cosl
+#define SIN sinl
+#define TAN tanl
+#define COSH coshl
+#define SINH sinhl
+#define TANH tanhl
+#define ACOS acosl
+#define ASIN asinl
+#define ATAN atanl
+#define ATAN2 atan2l
+#define ACOSH acoshl
+#define ASINH asinhl
+#define ATANH atanhl
+#define TGAMMA tgammal
+#define LGAMMA lgammal
+#define J0 j0l
+#define J1 j1l
+#define JN jnl
+#define Y0 y0l
+#define Y1 y1l
+#define YN ynl
+#define ERF erfl
+#define ERFC erfcl
+#define CREAL creall
+#define CIMAG cimagl
+#define CABS cabsl
+#define CARG cargl
+#define CONJ conjl
+#define CPROJ cprojl
+#define CSQRT csqrtl
+#define CEXP cexpl
+#define CLOG clogl
+#define CPOW cpowl
+#define CSIN csinl
+#define CCOS ccosl
+#define CTAN ctanl
+#define CASIN casinl
+#define CACOS cacosl
+#define CATAN catanl
+#define CSINH csinhl
+#define CCOSH ccoshl
+#define CTANH ctanhl
+#define CASINH casinhl
+#define CACOSH cacoshl
+#define CATANH catanhl
+#elif defined(NFFT_SINGLE)
+#if HAVE_DECL_COPYSIGNF == 0
+extern float copysignf(float, float);
+#endif
+#if HAVE_DECL_NEXTAFTERF == 0
+extern float nextafterf(float, float);
+#endif
+#if HAVE_DECL_NANF == 0
+extern float nanf(const char *tag);
+#endif
+#if HAVE_DECL_CEILF == 0
+extern float ceilf(float);
+#endif
+#if HAVE_DECL_FLOORF == 0
+extern float floorf(float);
+#endif
+#if HAVE_DECL_NEARBYINTF == 0
+extern float nearbyintf(float);
+#endif
+#if HAVE_DECL_RINTF == 0
+extern float rintf(float);
+#endif
+#if HAVE_DECL_ROUNDF == 0
+extern float roundf(float);
+#endif
+#if HAVE_DECL_LRINTF == 0
+extern long int lrintf(float);
+#endif
+#if HAVE_DECL_LROUNDF == 0
+extern long int lroundf(float);
+#endif
+#if HAVE_DECL_LLRINTF == 0
+extern long long int llrintf(float);
+#endif
+#if HAVE_DECL_LLROUNDF == 0
+extern long long int llroundf(float);
+#endif
+#if HAVE_DECL_TRUNCF == 0
+extern float truncf(float);
+#endif
+#if HAVE_DECL_FMODF == 0
+extern float fmodf(float, float);
+#endif
+#if HAVE_DECL_REMAINDERF == 0
+extern float remainderf(float, float);
+#endif
+#if HAVE_DECL_REMQUOF == 0
+extern float remquof(float x, float y, int *);
+#endif
+#if HAVE_DECL_FDIMF == 0
+extern float fdimf(float, float);
+#endif
+#if HAVE_DECL_FMAXF == 0
+extern float fmaxf(float, float);
+#endif
+#if HAVE_DECL_FMINF == 0
+extern float fminf(float, float);
+#endif
+#if HAVE_DECL_FMAF == 0
+extern float fmaf(float x, float y, float z);
+#endif
+#if HAVE_DECL_FABSF == 0
+extern float fabsf(float);
+#endif
+#if HAVE_DECL_SQRTF == 0
+extern float sqrtf(float);
+#endif
+#if HAVE_DECL_CBRTF == 0
+extern float cbrtf(float);
+#endif
+#if HAVE_DECL_HYPOTF == 0
+extern float hypotf(float, float);
+#endif
+#if HAVE_DECL_EXPF == 0
+extern float expf(float);
+#endif
+#if HAVE_DECL_EXP2F == 0
+extern float exp2f(float);
+#endif
+#if HAVE_DECL_EXPM1F == 0
+extern float expm1f(float);
+#endif
+#if HAVE_DECL_LOGF == 0
+extern float logf(float);
+#endif
+#if HAVE_DECL_LOG2F == 0
+extern float log2f(float);
+#endif
+#if HAVE_DECL_LOG10F == 0
+extern float log10f(float);
+#endif
+#if HAVE_DECL_LOG1PF == 0
+extern float log1pf(float);
+#endif
+#if HAVE_DECL_LOGBF == 0
+extern float logbf(float);
+#endif
+#if HAVE_DECL_ILOGBF == 0
+extern int ilogbf(float);
+#endif
+#if HAVE_DECL_MODFF == 0
+extern float modff(float, float *);
+#endif
+#if HAVE_DECL_FREXPF == 0
+extern float frexpf(float, int *);
+#endif
+#if HAVE_DECL_LDEXPF == 0
+extern float ldexpf(float, int);
+#endif
+#if HAVE_DECL_SCALBNF == 0
+extern float scalbnf(float, int);
+#endif
+#if HAVE_DECL_SCALBLNF == 0
+extern float scalblnf(float, long int);
+#endif
+#if HAVE_DECL_POWF == 0
+extern float powf(float, float);
+#endif
+#if HAVE_DECL_COSF == 0
+extern float cosf(float);
+#endif
+#if HAVE_DECL_SINF == 0
+extern float sinf(float);
+#endif
+#if HAVE_DECL_TANF == 0
+extern float tanf(float);
+#endif
+#if HAVE_DECL_COSHF == 0
+extern float coshf(float);
+#endif
+#if HAVE_DECL_SINHF == 0
+extern float sinhf(float);
+#endif
+#if HAVE_DECL_TANHF == 0
+extern float tanhf(float);
+#endif
+#if HAVE_DECL_ACOSF == 0
+extern float acosf(float);
+#endif
+#if HAVE_DECL_ASINF == 0
+extern float asinf(float);
+#endif
+#if HAVE_DECL_ATANF == 0
+extern float atanf(float);
+#endif
+#if HAVE_DECL_ATAN2F == 0
+extern float atan2f(float, float);
+#endif
+#if HAVE_DECL_ACOSHF == 0
+extern float acoshf(float);
+#endif
+#if HAVE_DECL_ASINHF == 0
+extern float asinhf(float);
+#endif
+#if HAVE_DECL_ATANHF == 0
+extern float atanhf(float);
+#endif
+#if HAVE_DECL_TGAMMAF == 0
+extern float tgammaf(float);
+#endif
+#if HAVE_DECL_LGAMMAF == 0
+extern float lgammaf(float);
+#endif
+#if HAVE_DECL_J0F == 0
+extern float j0f(float);
+#endif
+#if HAVE_DECL_J1F == 0
+extern float j1f(float);
+#endif
+#if HAVE_DECL_JNF == 0
+extern float jnf(int, float);
+#endif
+#if HAVE_DECL_Y0F == 0
+extern float y0f(float);
+#endif
+#if HAVE_DECL_Y1F == 0
+extern float y1f(float);
+#endif
+#if HAVE_DECL_YNF == 0
+extern float ynf(int, float);
+#endif
+#if HAVE_DECL_ERFF == 0
+extern float erff(float);
+#endif
+#if HAVE_DECL_ERFCF == 0
+extern float erfcf(float);
+#endif
+#if HAVE_DECL_CREALF == 0
+extern float crealf(float _Complex z);
+#endif
+#if HAVE_DECL_CIMAGF == 0
+extern float cimagf(float _Complex z);
+#endif
+#if HAVE_DECL_CABSF == 0
+extern float cabsf(float _Complex z);
+#endif
+#if HAVE_DECL_CARGF == 0
+extern float cargf(float _Complex z);
+#endif
+#if HAVE_DECL_CONJF == 0
+extern float _Complex conjf(float _Complex z);
+#endif
+#if HAVE_DECL_CPROJF == 0
+extern float _Complex cprojf(float _Complex z);
+#endif
+#if HAVE_DECL_CSQRTF == 0
+extern float _Complex csqrtf(float _Complex z);
+#endif
+#if HAVE_DECL_CEXPF == 0
+extern float _Complex cexpf(float _Complex z);
+#endif
+#if HAVE_DECL_CLOGF == 0
+extern float _Complex clogf(float _Complex z);
+#endif
+#if HAVE_DECL_CPOWF == 0
+extern float _Complex cpowf(float _Complex z, float _Complex w);
+#endif
+#if HAVE_DECL_CSINF == 0
+extern float _Complex csinf(float _Complex z);
+#endif
+#if HAVE_DECL_CCOSF == 0
+extern float _Complex ccosf(float _Complex z);
+#endif
+#if HAVE_DECL_CTANF == 0
+extern float _Complex ctanf(float _Complex z);
+#endif
+#if HAVE_DECL_CASINF == 0
+extern float _Complex casinf(float _Complex z);
+#endif
+#if HAVE_DECL_CACOSF == 0
+extern float _Complex cacosf(float _Complex z);
+#endif
+#if HAVE_DECL_CATANF == 0
+extern float _Complex catanf(float _Complex z);
+#endif
+#if HAVE_DECL_CSINHF == 0
+extern float _Complex csinhf(float _Complex z);
+#endif
+#if HAVE_DECL_CCOSHF == 0
+extern float _Complex ccoshf(float _Complex z);
+#endif
+#if HAVE_DECL_CTANHF == 0
+extern float _Complex ctanhf(float _Complex z);
+#endif
+#if HAVE_DECL_CASINHF == 0
+extern float _Complex casinhf(float _Complex z);
+#endif
+#if HAVE_DECL_CACOSHF == 0
+extern float _Complex cacoshf(float _Complex z);
+#endif
+#if HAVE_DECL_CATANHF == 0
+extern float _Complex catanhf(float _Complex z);
+#endif
+#define COPYSIGN copysignf
+#define NEXTAFTER  nextafterf
+#define MKNAN nanf
+#define CEIL ceilf
+#define FLOOR floorf
+#define NEARBYINT nearbyintf
+#define RINT rintf
+#define ROUND roundf
+#define LRINT lrintf
+#define LROUND lroundf
+#define LLRINT llrintf
+#define LLROUND llroundf
+#define TRUNC truncf
+#define FMOD fmodf
+#define REMAINDER remainderf
+#define REMQUO remquof
+#define FDIM fdimf
+#define FMAX fmaxf
+#define FMIN fminf
+#define FFMA fmaf
+#define FABS fabsf
+#define SQRT sqrtf
+#define CBRT cbrtf
+#define HYPOT hypotf
+#define EXP expf
+#define EXP2 exp2f
+#define EXPM1 expm1f
+#define LOG logf
+#define LOG2 log2f
+#define LOG10 log10f
+#define LOG1P log1pf
+#define LOGB logbf
+#define ILOGB ilogbf
+#define MODF modff
+#define FREXP frexpf
+#define LDEXP ldexpf
+#define SCALBN scalbnf
+#define SCALBLN scalblnf
+#define POW powf
+#define COS cosf
+#define SIN sinf
+#define TAN tanf
+#define COSH coshf
+#define SINH sinhf
+#define TANH tanhf
+#define ACOS acosf
+#define ASIN asinf
+#define ATAN atanf
+#define ATAN2 atan2f
+#define ACOSH acoshf
+#define ASINH asinhf
+#define ATANH atanhf
+#define TGAMMA tgammaf
+#define LGAMMA lgammaf
+#define J0 j0f
+#define J1 j1f
+#define JN jnf
+#define Y0 y0f
+#define Y1 y1f
+#define YN ynf
+#define ERF erff
+#define ERFC erfcf
+#define CREAL crealf
+#define CIMAG cimagf
+#define CABS cabsf
+#define CARG cargf
+#define CONJ conjf
+#define CPROJ cprojf
+#define CSQRT csqrtf
+#define CEXP cexpf
+#define CLOG clogf
+#define CPOW cpowf
+#define CSIN csinf
+#define CCOS ccosf
+#define CTAN ctanf
+#define CASIN casinf
+#define CACOS cacosf
+#define CATAN catanf
+#define CSINH csinhf
+#define CCOSH ccoshf
+#define CTANH ctanhf
+#define CASINH casinhf
+#define CACOSH cacoshf
+#define CATANH catanhf
+#else
+#if HAVE_DECL_COPYSIGN == 0
+extern double copysign(double, double);
+#endif
+#if HAVE_DECL_NEXTAFTER == 0
+extern double nextafter(double, double);
+#endif
+#if HAVE_DECL_NAN == 0
+extern double nan(const char *tag);
+#endif
+#if HAVE_DECL_CEIL == 0
+extern double ceil(double);
+#endif
+#if HAVE_DECL_FLOOR == 0
+extern double floor(double);
+#endif
+#if HAVE_DECL_NEARBYINT == 0
+extern double nearbyint(double);
+#endif
+#if HAVE_DECL_RINT == 0
+extern double rint(double);
+#endif
+#if HAVE_DECL_ROUND == 0
+extern double round(double);
+#endif
+#if HAVE_DECL_LRINT == 0
+extern long int lrint(double);
+#endif
+#if HAVE_DECL_LROUND == 0
+extern long int lround(double);
+#endif
+#if HAVE_DECL_LLRINT == 0
+extern long long int llrint(double);
+#endif
+#if HAVE_DECL_LLROUND == 0
+extern long long int llround(double);
+#endif
+#if HAVE_DECL_TRUNC == 0
+extern double trunc(double);
+#endif
+#if HAVE_DECL_FMOD == 0
+extern double fmod(double, double);
+#endif
+#if HAVE_DECL_REMAINDER == 0
+extern double remainder(double, double);
+#endif
+#if HAVE_DECL_REMQUO == 0
+extern double remquo(double x, double y, int *);
+#endif
+#if HAVE_DECL_FDIM == 0
+extern double fdim(double, double);
+#endif
+#if HAVE_DECL_FMAX == 0
+extern double fmax(double, double);
+#endif
+#if HAVE_DECL_FMIN == 0
+extern double fmin(double, double);
+#endif
+#if HAVE_DECL_FMA == 0
+extern double fma(double x, double y, double z);
+#endif
+#if HAVE_DECL_FABS == 0
+extern double fabs(double);
+#endif
+#if HAVE_DECL_SQRT == 0
+extern double sqrt(double);
+#endif
+#if HAVE_DECL_CBRT == 0
+extern double cbrt(double);
+#endif
+#if HAVE_DECL_HYPOT == 0
+extern double hypot(double, double);
+#endif
+#if HAVE_DECL_EXP == 0
+extern double exp(double);
+#endif
+#if HAVE_DECL_EXP2 == 0
+extern double exp2(double);
+#endif
+#if HAVE_DECL_EXPM1 == 0
+extern double expm1(double);
+#endif
+#if HAVE_DECL_LOG == 0
+extern double log(double);
+#endif
+#if HAVE_DECL_LOG2 == 0
+extern double log2(double);
+#endif
+#if HAVE_DECL_LOG10 == 0
+extern double log10(double);
+#endif
+#if HAVE_DECL_LOG1P == 0
+extern double log1p(double);
+#endif
+#if HAVE_DECL_LOGB == 0
+extern double logb(double);
+#endif
+#if HAVE_DECL_ILOGB == 0
+extern int ilogb(double);
+#endif
+#if HAVE_DECL_MODF == 0
+extern double modf(double, double *);
+#endif
+#if HAVE_DECL_FREXP == 0
+extern double frexp(double, int *);
+#endif
+#if HAVE_DECL_LDEXP == 0
+extern double ldexp(double, int);
+#endif
+#if HAVE_DECL_SCALBN == 0
+extern double scalbn(double, int);
+#endif
+#if HAVE_DECL_SCALBLN == 0
+extern double scalbln(double, long int);
+#endif
+#if HAVE_DECL_POW == 0
+extern double pow(double, double);
+#endif
+#if HAVE_DECL_COS == 0
+extern double cos(double);
+#endif
+#if HAVE_DECL_SIN == 0
+extern double sin(double);
+#endif
+#if HAVE_DECL_TAN == 0
+extern double tan(double);
+#endif
+#if HAVE_DECL_COSH == 0
+extern double cosh(double);
+#endif
+#if HAVE_DECL_SINH == 0
+extern double sinh(double);
+#endif
+#if HAVE_DECL_TANH == 0
+extern double tanh(double);
+#endif
+#if HAVE_DECL_ACOS == 0
+extern double acos(double);
+#endif
+#if HAVE_DECL_ASIN == 0
+extern double asin(double);
+#endif
+#if HAVE_DECL_ATAN == 0
+extern double atan(double);
+#endif
+#if HAVE_DECL_ATAN2 == 0
+extern double atan2(double, double);
+#endif
+#if HAVE_DECL_ACOSH == 0
+extern double acosh(double);
+#endif
+#if HAVE_DECL_ASINH == 0
+extern double asinh(double);
+#endif
+#if HAVE_DECL_ATANH == 0
+extern double atanh(double);
+#endif
+#if HAVE_DECL_TGAMMA == 0
+extern double tgamma(double);
+#endif
+#if HAVE_DECL_LGAMMA == 0
+extern double lgamma(double);
+#endif
+#if HAVE_DECL_J0 == 0
+extern double j0(double);
+#endif
+#if HAVE_DECL_J1 == 0
+extern double j1(double);
+#endif
+#if HAVE_DECL_JN == 0
+extern double jn(int, double);
+#endif
+#if HAVE_DECL_Y0 == 0
+extern double y0(double);
+#endif
+#if HAVE_DECL_Y1 == 0
+extern double y1(double);
+#endif
+#if HAVE_DECL_YN == 0
+extern double yn(int, double);
+#endif
+#if HAVE_DECL_ERF == 0
+extern double erf(double);
+#endif
+#if HAVE_DECL_ERFC == 0
+extern double erfc(double);
+#endif
+#if HAVE_DECL_CREAL == 0
+extern double creal(double _Complex z);
+#endif
+#if HAVE_DECL_CIMAG == 0
+extern double cimag(double _Complex z);
+#endif
+#if HAVE_DECL_CABS == 0
+extern double cabs(double _Complex z);
+#endif
+#if HAVE_DECL_CARG == 0
+extern double carg(double _Complex z);
+#endif
+#if HAVE_DECL_CONJ == 0
+extern double _Complex conj(double _Complex z);
+#endif
+#if HAVE_DECL_CPROJ == 0
+extern double _Complex cproj(double _Complex z);
+#endif
+#if HAVE_DECL_CSQRT == 0
+extern double _Complex csqrt(double _Complex z);
+#endif
+#if HAVE_DECL_CEXP == 0
+extern double _Complex cexp(double _Complex z);
+#endif
+#if HAVE_DECL_CLOG == 0
+extern double _Complex clog(double _Complex z);
+#endif
+#if HAVE_DECL_CPOW == 0
+extern double _Complex cpow(double _Complex z, double _Complex w);
+#endif
+#if HAVE_DECL_CSIN == 0
+extern double _Complex csin(double _Complex z);
+#endif
+#if HAVE_DECL_CCOS == 0
+extern double _Complex ccos(double _Complex z);
+#endif
+#if HAVE_DECL_CTAN == 0
+extern double _Complex ctan(double _Complex z);
+#endif
+#if HAVE_DECL_CASIN == 0
+extern double _Complex casin(double _Complex z);
+#endif
+#if HAVE_DECL_CACOS == 0
+extern double _Complex cacos(double _Complex z);
+#endif
+#if HAVE_DECL_CATAN == 0
+extern double _Complex catan(double _Complex z);
+#endif
+#if HAVE_DECL_CSINH == 0
+extern double _Complex csinh(double _Complex z);
+#endif
+#if HAVE_DECL_CCOSH == 0
+extern double _Complex ccosh(double _Complex z);
+#endif
+#if HAVE_DECL_CTANH == 0
+extern double _Complex ctanh(double _Complex z);
+#endif
+#if HAVE_DECL_CASINH == 0
+extern double _Complex casinh(double _Complex z);
+#endif
+#if HAVE_DECL_CACOSH == 0
+extern double _Complex cacosh(double _Complex z);
+#endif
+#if HAVE_DECL_CATANH == 0
+extern double _Complex catanh(double _Complex z);
+#endif
+#define COPYSIGN copysign
+#define NEXTAFTER  nextafter
+#define MKNAN nan
+#define CEIL ceil
+#define FLOOR floor
+#define NEARBYINT nearbyint
+#define RINT rint
+#define ROUND round
+#define LRINT lrint
+#define LROUND lround
+#define LLRINT llrint
+#define LLROUND llround
+#define TRUNC trunc
+#define FMOD fmod
+#define REMAINDER remainder
+#define REMQUO remquo
+#define FDIM fdim
+#define FMAX fmax
+#define FMIN fmin
+#define FFMA fma
+#define FABS fabs
+#define SQRT sqrt
+#define CBRT cbrt
+#define HYPOT hypot
+#define EXP exp
+#define EXP2 exp2
+#define EXPM1 expm1
+#define LOG log
+#define LOG2 log2
+#define LOG10 log10
+#define LOG1P log1p
+#define LOGB logb
+#define ILOGB ilogb
+#define MODF modf
+#define FREXP frexp
+#define LDEXP ldexp
+#define SCALBN scalbn
+#define SCALBLN scalbln
+#define POW pow
+#define COS cos
+#define SIN sin
+#define TAN tan
+#define COSH cosh
+#define SINH sinh
+#define TANH tanh
+#define ACOS acos
+#define ASIN asin
+#define ATAN atan
+#define ATAN2 atan2
+#define ACOSH acosh
+#define ASINH asinh
+#define ATANH atanh
+#define TGAMMA tgamma
+#define LGAMMA lgamma
+#define J0 j0
+#define J1 j1
+#define JN jn
+#define Y0 y0
+#define Y1 y1
+#define YN yn
+#define ERF erf
+#define ERFC erfc
+#define CREAL creal
+#define CIMAG cimag
+#define CABS cabs
+#define CARG carg
+#define CONJ conj
+#define CPROJ cproj
+#define CSQRT csqrt
+#define CEXP cexp
+#define CLOG clog
+#define CPOW cpow
+#define CSIN csin
+#define CCOS ccos
+#define CTAN ctan
+#define CASIN casin
+#define CACOS cacos
+#define CATAN catan
+#define CSINH csinh
+#define CCOSH ccosh
+#define CTANH ctanh
+#define CASINH casinh
+#define CACOSH cacosh
+#define CATANH catanh
+#endif
+
+#if defined(NFFT_LDOUBLE)
+  #define EPSILON LDBL_EPSILON//4.0E-31L
+  #define MANT_DIG LDBL_MANT_DIG
+  #define MIN_EXP LDBL_MIN_EXP
+  #define MAX_EXP LDBL_MAX_EXP
+#elif defined(NFFT_SINGLE)
+  #define EPSILON FLT_EPSILON
+  #define MANT_DIG FLT_MANT_DIG
+  #define MIN_EXP FLT_MIN_EXP
+  #define MAX_EXP FLT_MAX_EXP
+#else
+  #define EPSILON DBL_EPSILON
+  #define MANT_DIG DBL_MANT_DIG
+  #define MIN_EXP DBL_MIN_EXP
+  #define MAX_EXP DBL_MAX_EXP
+#endif
+
+#if defined(FLT_ROUND)
+  #if FLT_ROUND != -1
+    #define FLTROUND 1.0
+  #else
+    #define FLTROUND 0.0
+  #endif
+#else
+  #define FLTROUND 0.0
+#endif
+
+#if HAVE_DECL_DRAND48 == 0
+  extern double drand48(void);
+#endif
+#if HAVE_DECL_SRAND48 == 0
+  extern void srand48(long int);
+#endif
+#define R_RADIX FLT_RADIX
+#define II _Complex_I
+
+/* format strings */
+#if defined(NFFT_LDOUBLE)
+#  define FE "LE"
+#  define FE_ "% 36.32LE"
+#  define FFI "%Lf"
+#elif defined(NFFT_SINGLE)
+#  define FE "E"
+#  define FE_ "% 12.8E"
+#  define FFI "%f"
+#else
+#  define FE "lE"
+#  define FE_ "% 20.16lE"
+#  define FFI "%lf"
+#endif
+
+#define TRUE 1
+#define FALSE 0
+
+/** Dummy use of unused parameters to silence compiler warnings */
+#define UNUSED(x) (void)x
+
+extern void nfft_assertion_failed(const char *s, int line, const char *file);
+
+/* always check */
+#define CK(ex) \
+  (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))
+
+#ifdef NFFT_DEBUG
+  /* check only if debug enabled */
+  #define A(ex) \
+    (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))
+#else
+  #define A(ex) /* nothing */
+#endif
+
+#ifdef HAVE_ALLOCA
+  /* Use alloca if available. */
+  #ifndef alloca
+    #ifdef __GNUC__
+      /* No alloca defined but can use GCC's builtin version. */
+      #define alloca __builtin_alloca
+    #else
+      /* No alloca defined and not using GCC. */
+      #ifdef _MSC_VER
+        /* Using Microsoft's C compiler. Include header file and use _alloca
+         * defined therein. */
+        #include <malloc.h>
+        #define alloca _alloca
+      #else
+        /* Also not using Microsoft's C compiler. */
+        #if HAVE_ALLOCA_H
+          /* Alloca header is available. */
+          #include <alloca.h>
+        #else
+          /* No alloca header available. */
+          #ifdef _AIX
+            /* We're using the AIX C compiler. Use pragma. */
+            #pragma alloca
+          #else
+            /* Not using AIX compiler. */
+            #ifndef alloca /* HP's cc +Olibcalls predefines alloca. */
+              void *alloca(size_t);
+            #endif
+          #endif
+        #endif
+      #endif
+    #endif
+  #endif
+  /* So we have alloca. */
+  #define STACK_MALLOC(T, p, x) p = (T)alloca(x)
+  #define STACK_FREE(x) /* Nothing. Cleanup done automatically. */
+#else /* ! HAVE_ALLOCA */
+  /* Use malloc instead of alloca. So we allocate memory on the heap instead of
+   * on the stack which is slower. */
+  #define STACK_MALLOC(T, p, x) p = (T)nfft_malloc(x)
+  #define STACK_FREE(x) nfft_free(x)
+#endif /* ! HAVE_ALLOCA */
+
+/** Return number of elapsed seconds between two time points. */
+double nfft_elapsed_seconds(ticks t1, ticks t0);
+
+/** Dummy use of unused parameters to silence compiler warnings */
+#define UNUSED(x) (void)x
+
+/** Timing, method works since the inaccurate timer is updated mostly in the
+ *  measured function. For small times not every call of the measured function
+ *  will also produce a 'unit' time step.
+ *  Measuring the fftw might cause a wrong output vector due to the repeated
+ *  ffts.
+ */
+#ifdef MEASURE_TIME
+ int MEASURE_TIME_r;
+ double MEASURE_TIME_tt;
+ ticks MEASURE_TIME_t0, MEASURE_TIME_t1;
+
+#define TIC(a)                                                                \
+  ths->MEASURE_TIME_t[(a)]=0;                                                 \
+  MEASURE_TIME_r=0;                                                           \
+  /* DISABLED LOOP due to code blocks causing segfault when repeatedly run */ \
+  /*while(ths->MEASURE_TIME_t[(a)]<0.01)*/                                    \
+    {                                                                         \
+      MEASURE_TIME_r++;                                                       \
+      MEASURE_TIME_t0 = getticks();                                           \
+
+/* THE MEASURED FUNCTION IS CALLED REPEATEDLY */
+
+#define TOC(a)                                                                \
+      MEASURE_TIME_t1 = getticks();                                           \
+      MEASURE_TIME_tt = nfft_elapsed_seconds(MEASURE_TIME_t1,MEASURE_TIME_t0);\
+      ths->MEASURE_TIME_t[(a)]+=MEASURE_TIME_tt;                              \
+    }                                                                         \
+  ths->MEASURE_TIME_t[(a)]/=MEASURE_TIME_r;                                   \
+
+#else
+#define TIC(a)
+#define TOC(a)
+#endif
+
+#ifdef MEASURE_TIME_FFTW
+#define TIC_FFTW(a) TIC(a)
+#define TOC_FFTW(a) TOC(a)
+#else
+#define TIC_FFTW(a)
+#define TOC_FFTW(a)
+#endif
+
+/* sinc.c: */
+
+/* Sinus cardinalis. */
+R X(sinc)(R x);
+
+/* lambda.c: */
+
+/* lambda(z, eps) = gamma(z + eps) / gamma(z + 1) */
+R X(lambda)(R z, R eps);
+
+/* lambda2(mu, nu) = sqrt(gamma(mu + nu + 1) / (gamma(mu + 1) * gamma(nu + 1))) */
+R X(lambda2)(R mu, R nu);
+
+/* bessel_i0.c: */
+R X(bessel_i0)(R x);
+
+/* float.c: */
+typedef enum {NFFT_EPSILON = 0, NFFT_SAFE_MIN = 1, NFFT_BASE = 2,
+  NFFT_PRECISION = 3, NFFT_MANT_DIG = 4, NFFT_FLTROUND = 5, NFFT_E_MIN = 6,
+  NFFT_R_MIN = 7, NFFT_E_MAX = 8, NFFT_R_MAX = 9} float_property;
+
+R X(float_property)(float_property);
+
+/* int.c: */
+int X(exp2i)(const int a);
+int X(log2i)(const int m);
+int X(next_power_of_2)(const int N);
+void X(next_power_of_2_exp)(const int N, int *N2, int *t);
+
+/* error.c: */
+R X(error_l_infty_complex)(const C *x, const C *y, const INT n);
+/* not used */ R X(error_l_infty_double)(const R *x, const R *y, const INT n);
+R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
+  const C *z, const INT m);
+/* not used */ R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
+  const INT m);
+R X(error_l_2_complex)(const C *x, const C *y, const INT n);
+/* not used */ R X(error_l_2_double)(const R *x, const R *y, const INT n);
+
+#endif
diff --git a/include/nfft3.h b/include/nfft3.h
new file mode 100644
index 0000000..713389b
--- /dev/null
+++ b/include/nfft3.h
@@ -0,0 +1,826 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft3.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+#ifndef __NFFT3_H__
+#define __NFFT3_H__
+
+/* module configuration */
+#include "nfft3conf.h"
+
+/* fftw_complex */
+#include <fftw3.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#define NFFT_CONCAT(prefix, name) prefix ## name
+
+/* IMPORTANT: for Windows compilers, you should add a line
+ *   #define FFTW_DLL
+ * here and in kernel/infft.h if you are compiling/using NFFT as a DLL, in order
+ * to do the proper importing/exporting, or alternatively compile with
+ * -DNFFT_DLL or the equivalent command-line flag. This is not necessary under
+ * MinGW/Cygwin, where libtool does the imports/exports automatically. */
+#if defined(NFFT_DLL) && (defined(_WIN32) || defined(__WIN32__))
+  /* annoying Windows syntax for shared-library declarations */
+#  if defined(COMPILING_NFFT) /* defined in api.h when compiling NFFT */
+#    define NFFT_EXTERN extern __declspec(dllexport)
+#  else /* user is calling NFFT; import symbol */
+#    define NFFT_EXTERN extern __declspec(dllimport)
+#  endif
+#else
+#  define NFFT_EXTERN extern
+#endif
+
+/* our own memory allocation and exit functions */
+NFFT_EXTERN void *nfft_malloc(size_t n);
+NFFT_EXTERN void nfft_free(void *p);
+NFFT_EXTERN void nfft_die(char *s);
+
+/* You can replace the hooks with your own, functions if necessary. We need this
+ * for the Matlab interfaces etc. */
+typedef void *(*nfft_malloc_type_function) (size_t n);
+typedef void  (*nfft_free_type_function) (void *p);
+typedef void  (*nfft_die_type_function) (const char *errString);
+NFFT_EXTERN nfft_malloc_type_function nfft_malloc_hook;
+NFFT_EXTERN nfft_free_type_function nfft_free_hook;
+NFFT_EXTERN nfft_die_type_function nfft_die_hook;
+
+/* members inherited by all plans */
+#define MACRO_MV_PLAN(RC) \
+  int N_total; /**< Total number of Fourier coefficients */\
+  int M_total; /**< Total number of samples */\
+  RC *f_hat; /**< Vector of Fourier coefficients, size is N_total * sizeof(RC) */\
+  RC *f; /**< Vector of samples, size is M_total * sizeof(RC) */\
+  void (*mv_trafo)(void*); /**< Pointer to the own transform */\
+  void (*mv_adjoint)(void*); /**< Pointer to the own adjoint */
+
+/* nfft */
+
+/* name mangling macros */
+#define NFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfft_, name)
+#define NFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfftf_, name)
+#define NFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfft API functions.
+ * We expand this macro for each supported precision.
+ *   X: nfft name-mangling macro
+ *   Y: fftw name-mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NFFT_DEFINE_API(X,Y,R,C) \
+\
+typedef struct \
+{ \
+  MACRO_MV_PLAN(C) \
+} X(mv_plan_complex); \
+\
+typedef struct \
+{ \
+  MACRO_MV_PLAN(R) \
+} X(mv_plan_double); \
+\
+typedef struct\
+{\
+  MACRO_MV_PLAN(C)\
+\
+  int d; /**< dimension aka rank */\
+  int *N; /**< multi-bandwidth */\
+  R *sigma; /**< oversampling-factor */\
+  int *n; /**< FFTW length, equal to sigma*N, default is the power of 2 such
+               that \f$2\le\sigma<4\f$ */\
+  int n_total; /**< Total size of FFTW */\
+  int m; /**< Cut-off parameter of the window function, default value is
+               6 (KAISER_BESSEL),
+               9 (SINC_POWER),
+               11 (B_SPLINE),
+               12 (GAUSSIAN) */\
+  R *b; /**< Shape parameter of the window function */\
+  int K; /**< Number of equispaced samples of the window function for \ref
+              PRE_LIN_PSI */\
+\
+  unsigned nfft_flags; /**< Flags for precomputation, (de)allocation, and FFTW
+                            usage, default setting is
+                            PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT |
+                            MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE */\
+\
+  unsigned fftw_flags; /**< Flags for the FFTW, default is
+                            FFTW_ESTIMATE | FFTW_DESTROY_INPUT */\
+\
+  R *x; /**< Nodes in time/spatial domain, size is \f$dM\f$ doubles */\
+\
+  double MEASURE_TIME_t[3]; /**< Measured time for each step if MEASURE_TIME is
+    set */\
+\
+  /* internal use only */\
+  Y(plan)  my_fftw_plan1; /**< Forward FFTW plan */\
+  Y(plan)  my_fftw_plan2; /**< Backward FFTW plan */\
+\
+  R **c_phi_inv; /**< Precomputed data for the diagonal matrix \f$D\f$, size \
+    is \f$N_0+\hdots+N_{d-1}\f$ doubles*/\
+  R *psi; /**< Precomputed data for the sparse matrix \f$B\f$, size depends
+                    on precomputation scheme */\
+  int *psi_index_g; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
+  int *psi_index_f; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
+\
+  C *g; /**< Oversampled vector of samples, size is \ref n_total double complex */\
+  C *g_hat; /**< Zero-padded vector of Fourier coefficients, size is \ref n_total fftw_complex */\
+  C *g1; /**< Input of fftw */\
+  C *g2; /**< Output of fftw */\
+\
+  R *spline_coeffs; /**< Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined */\
+\
+  int *index_x; /**< Index array for nodes x used when flag \ref NFFT_SORT_NODES is set */\
+} X(plan); \
+\
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_1d)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_2d)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_3d)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_1d)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_2d)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_3d)(X(plan) *ths);\
+NFFT_EXTERN void X(init_1d)(X(plan) *ths, int N1, int M);\
+NFFT_EXTERN void X(init_2d)(X(plan) *ths, int N1, int N2, int M);\
+NFFT_EXTERN void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M);\
+NFFT_EXTERN void X(init)(X(plan) *ths, int d, int *N, int M);\
+NFFT_EXTERN void X(init_guru)(X(plan) *ths, int d, int *N, int M, int *n, \
+  int m, unsigned nfft_flags, unsigned fftw_flags);\
+NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\
+NFFT_EXTERN const char* X(check)(X(plan) *ths);\
+NFFT_EXTERN void X(finalize)(X(plan) *ths);
+
+/* nfft api */
+NFFT_DEFINE_API(NFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+NFFT_DEFINE_API(NFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+NFFT_DEFINE_API(NFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* flags for init */
+#define PRE_PHI_HUT      (1U<< 0)
+#define FG_PSI           (1U<< 1)
+#define PRE_LIN_PSI      (1U<< 2)
+#define PRE_FG_PSI       (1U<< 3)
+#define PRE_PSI          (1U<< 4)
+#define PRE_FULL_PSI     (1U<< 5)
+#define MALLOC_X         (1U<< 6)
+#define MALLOC_F_HAT     (1U<< 7)
+#define MALLOC_F         (1U<< 8)
+#define FFT_OUT_OF_PLACE (1U<< 9)
+#define FFTW_INIT        (1U<< 10)
+#define NFFT_SORT_NODES  (1U<< 11)
+#define NFFT_OMP_BLOCKWISE_ADJOINT (1U<<12)
+#define PRE_ONE_PSI (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)
+
+
+/* nfct */
+
+/* name mangling macros */
+#define NFCT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfct_, name)
+#define NFCT_MANGLE_FLOAT(name) NFFT_CONCAT(nfctf_, name)
+#define NFCT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfctl_, name)
+
+/* huge second-order macro that defines prototypes for all nfct API functions.
+ * We expand this macro for each supported precision.
+ *   X: nfct name-mangling macro
+ *   Y: fftw name-mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NFCT_DEFINE_API(X,Y,R,C) \
+typedef struct\
+{\
+  /* api */\
+  MACRO_MV_PLAN(R)\
+\
+  int d; /**< dimension, rank */\
+  int *N; /**< cut-off-frequencies (kernel) */\
+  int *n; /**< length of DCT-I */\
+  R *sigma; /**< oversampling-factor */\
+  int m; /**< cut-off parameter in time-domain */\
+\
+  R nfct_full_psi_eps;\
+  R *b; /**< shape parameters */\
+\
+  unsigned nfct_flags; /**< flags for precomputation, malloc */\
+  unsigned fftw_flags; /**< flags for the fftw */\
+\
+  R *x; /**< nodes (in time/spatial domain)   */\
+\
+  double MEASURE_TIME_t[3]; /**< measured time for each step */\
+\
+  /* internal use only */\
+  Y(plan)  my_fftw_r2r_plan; /**< fftw_plan */\
+  Y(r2r_kind) *r2r_kind; /**< r2r transform type (DCT-I) */\
+\
+  R **c_phi_inv; /**< precomputed data, matrix D */\
+  R *psi; /**< precomputed data, matrix B */\
+  int size_psi; /**< only for thin B */\
+  int *psi_index_g; /**< only for thin B */\
+  int *psi_index_f; /**< only for thin B */\
+\
+  R *g;\
+  R *g_hat;\
+  R *g1; /**< input of fftw */\
+  R *g2; /**< output of fftw */\
+\
+  R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined   */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \
+NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \
+NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \
+NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \
+NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \
+  int m, unsigned nfct_flags, unsigned fftw_flags); \
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \
+NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \
+NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d);
+
+#if defined(HAVE_NFCT)
+/* nfct api */
+NFCT_DEFINE_API(NFCT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+NFCT_DEFINE_API(NFCT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+NFCT_DEFINE_API(NFCT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* nfst */
+
+/* name mangling macros */
+#define NFST_MANGLE_DOUBLE(name) NFFT_CONCAT(nfst_, name)
+#define NFST_MANGLE_FLOAT(name) NFFT_CONCAT(nfstf_, name)
+#define NFST_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfstl_, name)
+
+/* huge second-order macro that defines prototypes for all nfct API functions.
+ * We expand this macro for each supported precision.
+ *   X: nfst name-mangling macro
+ *   Y: fftw name-mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NFST_DEFINE_API(X,Y,R,C) \
+typedef struct\
+{\
+  /* api */\
+  MACRO_MV_PLAN(R)\
+\
+  int d; /**< dimension, rank */\
+  int *N; /**< bandwidth */\
+  int *n; /**< length of DST-1 */\
+  R *sigma; /**< oversampling-factor */\
+  int m; /**< cut-off parameter in time-domain */\
+\
+  R nfst_full_psi_eps;\
+  R *b; /**< shape parameters */\
+\
+  unsigned nfst_flags; /**< flags for precomputation, malloc */\
+  unsigned fftw_flags; /**< flags for the fftw */\
+\
+  R *x; /**< nodes (in time/spatial domain) */\
+\
+  double MEASURE_TIME_t[3]; /**< measured time for each step */\
+\
+  /* internal use only */\
+  Y(plan)  my_fftw_r2r_plan; /**< fftw_plan forward */\
+  Y(r2r_kind) *r2r_kind; /**< r2r transform type (dct-i) */\
+\
+  R **c_phi_inv; /**< precomputed data, matrix D */\
+  R *psi; /**< precomputed data, matrix B */\
+  int size_psi; /**< only for thin B */\
+  int *psi_index_g; /**< only for thin B */\
+  int *psi_index_f; /**< only for thin B */\
+\
+  R *g;\
+  R *g_hat;\
+  R *g1; /**< input of fftw */\
+  R *g2; /**< output of fftw */\
+\
+  R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \
+NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \
+NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \
+NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \
+NFFT_EXTERN void X(init_m)(X(plan) *ths_plan, int d, int *N, int M_total, int m);\
+NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \
+  int m, unsigned nfst_flags, unsigned fftw_flags); \
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(full_psi)(X(plan) *ths_plan, R eps); \
+NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \
+NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d); \
+NFFT_EXTERN int X(fftw_2N)(int n); \
+NFFT_EXTERN int X(fftw_2N_rev)(int n);
+
+#ifdef HAVE_NFST
+/* nfst api */
+NFST_DEFINE_API(NFST_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+NFST_DEFINE_API(NFST_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+NFST_DEFINE_API(NFST_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* nnfft */
+
+/* name mangling macros */
+#define NNFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nnfft_, name)
+#define NNFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nnfftf_, name)
+#define NNFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nnfftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfst API functions.
+ * We expand this macro for each supported precision.
+ *   X: nnfft name-mangling macro
+ *   Y: fftw name-mangling macro
+ *   Z: nfft name mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NNFFT_DEFINE_API(X,Y,Z,R,C) \
+typedef struct\
+{\
+  /* api */\
+  MACRO_MV_PLAN(C)\
+\
+  int d; /**< dimension, rank */\
+  R *sigma; /**< oversampling-factor */\
+  R *a; /**< 1 + 2*m/N1 */\
+  int *N; /**< cut-off-frequencies */\
+  int *N1; /**< sigma*N */\
+  int *aN1; /**< sigma*a*N */\
+  int m; /**< cut-off parameter in time-domain*/\
+  R *b; /**< shape parameters */\
+  int K; /**< number of precomp. uniform psi */\
+  int aN1_total; /**< aN1_total=aN1[0]* ... *aN1[d-1] */\
+  Z(plan) *direct_plan; /**< plan for the nfft */\
+  unsigned nnfft_flags; /**< flags for precomputation, malloc*/\
+  int *n; /**< n=N1, for the window function */\
+  R *x; /**< nodes (in time/spatial domain) */\
+  R *v; /**< nodes (in fourier domain) */\
+  R *c_phi_inv; /**< precomputed data, matrix D */\
+  R *psi; /**< precomputed data, matrix B */\
+  int size_psi; /**< only for thin B */\
+  int *psi_index_g; /**< only for thin B */\
+  int *psi_index_f; /**< only for thin B */\
+  C *F;\
+  R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int N_total, int M_total, int *N); \
+NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int N_total, int M_total, \
+  int *N, int *N1, int m, unsigned nnfft_flags); \
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_phi_hut)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths_plan);
+
+#ifdef HAVE_NNFFT
+/* nnfft api */
+NNFFT_DEFINE_API(NNFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+NNFFT_DEFINE_API(NNFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+NNFFT_DEFINE_API(NNFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* additional init flags */
+#define MALLOC_V         (1U<< 11)
+
+/* nsfft */
+
+#define NSFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nsfft_, name)
+#define NSFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nsfftf_, name)
+#define NSFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nsfftl_, name)
+
+/* huge second-order macro that defines prototypes for all nnfft API functions.
+ * We expand this macro for each supported precision.
+ *   X: nnfft name-mangling macro
+ *   Y: fftw name-mangling macro
+ *   Z: nfft name mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NSFFT_DEFINE_API(X,Y,Z,R,C) \
+typedef struct\
+{\
+  MACRO_MV_PLAN(C)\
+\
+  int d; /**< dimension, rank; d = 2, 3 */\
+  int J; /**< problem size, i.e.,
+                d=2: N_total=(J+4) 2^(J+1)
+                d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) */\
+  int sigma; /**< oversampling-factor */\
+  unsigned flags; /**< flags for precomputation, malloc*/\
+  int *index_sparse_to_full; /**< index conversation, overflow for d=3, J=9! */\
+  int r_act_nfft_plan; /**< index of current nfft block */\
+  Z(plan) *act_nfft_plan; /**< current nfft block */\
+  Z(plan) *center_nfft_plan; /**< central nfft block */\
+  Y(plan) *set_fftw_plan1; /**< fftw plan for the nfft blocks */\
+  Y(plan) *set_fftw_plan2; /**< fftw plan for the nfft blocks */\
+  Z(plan) *set_nfft_plan_1d; /**< nfft plans for short nffts */\
+  Z(plan) *set_nfft_plan_2d; /**< nfft plans for short nffts */\
+  R *x_transposed; /**< coordinate exchanged nodes, d = 2 */\
+  R *x_102,*x_201,*x_120,*x_021; /**< coordinate exchanged nodes, d=3 */\
+} X(plan);\
+\
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths); \
+NFFT_EXTERN void X(cp)(X(plan) *ths, Z(plan) *ths_nfft); \
+NFFT_EXTERN void X(init_random_nodes_coeffs)(X(plan) *ths); \
+NFFT_EXTERN void X(init)(X(plan) *ths, int d, int J, int M, int m, unsigned flags); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths);
+
+#ifdef HAVE_NSFFT
+/* nsfft api */
+NSFFT_DEFINE_API(NSFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+NSFFT_DEFINE_API(NSFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+NSFFT_DEFINE_API(NSFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* additional init flags */
+#define NSDFT            (1U<< 12)
+
+/* mri */
+
+/* name mangling macros */
+#define MRI_MANGLE_DOUBLE(name) NFFT_CONCAT(mri_, name)
+#define MRI_MANGLE_FLOAT(name) NFFT_CONCAT(mrif_, name)
+#define MRI_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(mril_, name)
+
+/* huge second-order macro that defines prototypes for all mri API functions.
+ * We expand this macro for each supported precision.
+ *   X: mri name-mangling macro
+ *   Z: nfft name mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define MRI_DEFINE_API(X,Z,R,C) \
+typedef struct\
+{\
+  MACRO_MV_PLAN(C)\
+  Z(plan) plan;\
+  int N3;\
+  R sigma3;\
+  R *t;\
+  R *w;\
+} X(inh_2d1d_plan);\
+\
+typedef struct\
+{\
+  MACRO_MV_PLAN(C)\
+  Z(plan) plan;\
+  int N3;\
+  R sigma3;\
+  R *t;\
+  R *w;\
+} X(inh_3d_plan);\
+\
+void X(inh_2d1d_trafo)(X(inh_2d1d_plan) *ths); \
+void X(inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths); \
+void X(inh_2d1d_init_guru)(X(inh_2d1d_plan) *ths, int *N, int M, int *n, \
+  int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \
+void X(inh_2d1d_finalize)(X(inh_2d1d_plan) *ths); \
+void X(inh_3d_trafo)(X(inh_3d_plan) *ths); \
+void X(inh_3d_adjoint)(X(inh_3d_plan) *ths); \
+void X(inh_3d_init_guru)(X(inh_3d_plan) *ths, int *N, int M, int *n, \
+  int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \
+void X(inh_3d_finalize)(X(inh_3d_plan) *ths);
+
+#ifdef HAVE_MRI
+  /* mri api */
+MRI_DEFINE_API(MRI_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+MRI_DEFINE_API(MRI_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+MRI_DEFINE_API(MRI_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* nfsft */
+
+/* name mangling macros */
+#define NFSFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsft_, name)
+#define NFSFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsftf_, name)
+#define NFSFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfsft API functions.
+ * We expand this macro for each supported precision.
+ *   X: nfsft name-mangling macro
+ *   Z: nfft name mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NFSFT_DEFINE_API(X,Z,R,C) \
+typedef struct\
+{\
+  MACRO_MV_PLAN(C)\
+  int N; /**< the bandwidth \f$N\f$ */\
+  R *x; /**< the nodes \f$\mathbf{x}(m) = \left(x_1,x_2\right) \in
+    [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]\f$ for \f$m=0,\ldots,
+    M-1\f$,\f$M \in \mathbb{N},\f$ */\
+  /* internal use only */\
+  int t; /**< the logarithm of NPT with respect to the basis 2 */\
+  unsigned int flags; /**< the planner flags */\
+  Z(plan) plan_nfft; /**< the internal NFFT plan */\
+  C *f_hat_intern; /**< Internally used pointer to spherical Fourier
+    coefficients */\
+  double MEASURE_TIME_t[3]; /**< Measured time for each step if MEASURE_TIME is
+    set */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \
+NFFT_EXTERN void X(init_advanced)(X(plan)* plan, int N, int M, unsigned int \
+  nfsft_flags); \
+NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M, \
+  unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff); \
+NFFT_EXTERN void X(precompute)(int N, R kappa, unsigned int nfsft_flags, \
+  unsigned int fpt_flags); \
+NFFT_EXTERN void X(forget)(void); \
+NFFT_EXTERN void X(trafo_direct)(X(plan)* plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan)* plan); \
+NFFT_EXTERN void X(trafo)(X(plan)* plan); \
+NFFT_EXTERN void X(adjoint)(X(plan)* plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *plan); \
+NFFT_EXTERN void X(precompute_x)(X(plan) *plan);
+
+#ifdef HAVE_NFSFT
+/* nfsft api */
+NFSFT_DEFINE_API(NFSFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+NFSFT_DEFINE_API(NFSFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+NFSFT_DEFINE_API(NFSFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* init flags */
+#define NFSFT_NORMALIZED     (1U << 0)
+#define NFSFT_USE_NDFT       (1U << 1)
+#define NFSFT_USE_DPT        (1U << 2)
+#define NFSFT_MALLOC_X       (1U << 3)
+#define NFSFT_MALLOC_F_HAT   (1U << 5)
+#define NFSFT_MALLOC_F       (1U << 6)
+#define NFSFT_PRESERVE_F_HAT (1U << 7)
+#define NFSFT_PRESERVE_X     (1U << 8)
+#define NFSFT_PRESERVE_F     (1U << 9)
+#define NFSFT_DESTROY_F_HAT  (1U << 10)
+#define NFSFT_DESTROY_X      (1U << 11)
+#define NFSFT_DESTROY_F      (1U << 12)
+
+/* precompute flags */
+#define NFSFT_NO_DIRECT_ALGORITHM (1U << 13)
+#define NFSFT_NO_FAST_ALGORITHM   (1U << 14)
+#define NFSFT_ZERO_F_HAT          (1U << 16)
+
+/* helper macros */
+#define NFSFT_INDEX(k,n,plan) ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)
+#define NFSFT_F_HAT_SIZE(N) ((2*N+2)*(2*N+2))
+
+/* fpt */
+
+/* name mangling macros */
+#define FPT_MANGLE_DOUBLE(name) NFFT_CONCAT(fpt_, name)
+#define FPT_MANGLE_FLOAT(name) NFFT_CONCAT(fptf_, name)
+#define FPT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(fptl_, name)
+
+/* huge second-order macro that defines prototypes for all fpt API functions.
+ * We expand this macro for each supported precision.
+ *   X: fpt name-mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define FPT_DEFINE_API(X,Y,R,C) \
+typedef struct X(set_s_) *X(set); /**< A set of precomputed data for a set of
+  DPT transforms of equal maximum length. */\
+\
+NFFT_EXTERN X(set) X(init)(const int M, const int t, const unsigned int flags); \
+NFFT_EXTERN void X(precompute)(X(set) set, const int m, R *alpha, R *beta, \
+  R *gam, int k_start, const R threshold); \
+NFFT_EXTERN void X(trafo_direct)(X(set) set, const int m, const C *x, C *y, \
+  const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(trafo)(X(set) set, const int m, const C *x, C *y, \
+  const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(transposed_direct)(X(set) set, const int m, C *x, \
+  C *y, const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(transposed)(X(set) set, const int m, C *x, \
+  C *y, const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(finalize)(X(set) set);
+
+#ifdef HAVE_FPT
+/* fpt api */
+FPT_DEFINE_API(FPT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+FPT_DEFINE_API(FPT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+FPT_DEFINE_API(FPT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* init flags */
+#define FPT_NO_STABILIZATION    (1U << 0)
+#define FPT_NO_FAST_ALGORITHM   (1U << 2)
+#define FPT_NO_DIRECT_ALGORITHM (1U << 3)
+#define FPT_PERSISTENT_DATA     (1U << 4)
+
+/* transform flags */
+#define FPT_FUNCTION_VALUES     (1U << 5)
+#define FPT_AL_SYMMETRY         (1U << 6)
+#endif
+
+/* nfsoft*/
+
+/* name mangling macros */
+#define NFSOFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsoft_, name)
+#define NFSOFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsoftf_, name)
+#define NFSOFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsoftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfsoft API functions.
+ * We expand this macro for each supported precision.
+ *   X: nfsoft name-mangling macro
+ *   Y: nfft name-mangling macro
+ *   Z: fpt name-mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define NFSOFT_DEFINE_API(X,Y,Z,R,C) \
+typedef struct X(plan_)\
+{\
+  MACRO_MV_PLAN(C) \
+  R *x; /**< input nodes */\
+  C *wig_coeffs; /**< contains a set of SO(3) Fourier coefficients for fixed
+    orders m and n*/\
+  C *cheby; /**< contains a set of Chebychev coefficients for fixed orders m
+    and n*/\
+  C *aux; /**< used when converting Chebychev to Fourier coeffcients*/\
+  /* internal use only */\
+  int t; /**< the logaritm of NPT with respect to the basis 2 */\
+  unsigned int flags; /**< the planner flags  */\
+  Y(plan) p_nfft; /**< the internal NFFT plan */\
+  Z(set) internal_fpt_set; /**< the internal FPT plan */\
+  int fpt_kappa; /**a parameter controlling the accuracy of the FPT*/\
+} X(plan);\
+\
+NFFT_EXTERN void X(precompute)(X(plan) *plan); \
+NFFT_EXTERN Z(set) X(SO3_single_fpt_init)(int l, int k, int m, unsigned int flags, int kappa); \
+NFFT_EXTERN void X(SO3_fpt)(C *coeffs, Z(set) set, int l, int k, int m, unsigned int nfsoft_flags); \
+NFFT_EXTERN void X(SO3_fpt_transposed)(C *coeffs, Z(set) set,int l, int k, int m,unsigned int nfsoft_flags); \
+NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \
+NFFT_EXTERN void X(init_advanced)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags); \
+NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags,unsigned int nfft_flags,int nfft_cutoff,int fpt_kappa); \
+NFFT_EXTERN void X(trafo)(X(plan) *plan_nfsoft); \
+NFFT_EXTERN void X(adjoint)(X(plan) *plan_nfsoft); \
+NFFT_EXTERN void X(finalize)(X(plan) *plan); \
+NFFT_EXTERN int X(posN)(int n,int m, int B);
+
+#ifdef HAVE_NFSOFT
+/* nfsoft api */
+NFSOFT_DEFINE_API(NFSOFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,FPT_MANGLE_FLOAT,float,fftwf_complex)
+NFSOFT_DEFINE_API(NFSOFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,FPT_MANGLE_DOUBLE,double,fftw_complex)
+NFSOFT_DEFINE_API(NFSOFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,FPT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* init flags */
+#define NFSOFT_NORMALIZED     (1U << 0)
+#define NFSOFT_USE_NDFT       (1U << 1)
+#define NFSOFT_USE_DPT        (1U << 2)
+#define NFSOFT_MALLOC_X       (1U << 3)
+#define NFSOFT_REPRESENT      (1U << 4)
+#define NFSOFT_MALLOC_F_HAT   (1U << 5)
+#define NFSOFT_MALLOC_F       (1U << 6)
+#define NFSOFT_PRESERVE_F_HAT (1U << 7)
+#define NFSOFT_PRESERVE_X     (1U << 8)
+#define NFSOFT_PRESERVE_F     (1U << 9)
+#define NFSOFT_DESTROY_F_HAT  (1U << 10)
+#define NFSOFT_DESTROY_X      (1U << 11)
+#define NFSOFT_DESTROY_F      (1U << 12)
+
+/* precompute flags */
+#define NFSOFT_NO_STABILIZATION (1U << 13)
+#define NFSOFT_CHOOSE_DPT       (1U << 14)
+#define NFSOFT_SOFT             (1U << 15)
+#define NFSOFT_ZERO_F_HAT       (1U << 16)
+
+/* helper macros */
+#define NFSOFT_INDEX(m,n,l,B) (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))
+#define NFSOFT_INDEX_TWO(m,n,l,B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))
+#define NFSOFT_F_HAT_SIZE(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)
+
+#endif
+
+/*solver */
+
+/* name mangling macros */
+#define SOLVER_MANGLE_DOUBLE(name) NFFT_CONCAT(solver_, name)
+#define SOLVER_MANGLE_FLOAT(name) NFFT_CONCAT(solverf_, name)
+#define SOLVER_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(solverl_, name)
+
+/* huge second-order macro that defines prototypes for all nfsoft API functions.
+ * We expand this macro for each supported precision.
+ *   X: nfsoft name-mangling macro
+ *   Y: nfft name-mangling macro
+ *   R: real data type
+ *   C: complex data type
+ */
+#define SOLVER_DEFINE_API(X,Y,R,C)\
+typedef struct\
+{\
+  Y(mv_plan_complex) *mv; /**< matrix vector multiplication   */\
+  unsigned flags; /**< iteration type */\
+  R *w; /**< weighting factors */\
+  R *w_hat; /**< damping factors */\
+  C *y; /**< right hand side, samples */\
+  C *f_hat_iter; /**< iterative solution */\
+  C *r_iter; /**< iterated residual vector */\
+  C *z_hat_iter; /**< residual of normal equation of first kind */\
+  C *p_hat_iter; /**< search direction */\
+  C *v_iter; /**< residual vector update */\
+  R alpha_iter; /**< step size for search direction */\
+  R beta_iter; /**< step size for search correction*/\
+  R dot_r_iter; /**< weighted dotproduct of r_iter */\
+  R dot_r_iter_old; /**< previous dot_r_iter */\
+  R dot_z_hat_iter; /**< weighted dotproduct of z_hat_iter */\
+  R dot_z_hat_iter_old; /**< previous dot_z_hat_iter */\
+  R dot_p_hat_iter; /**< weighted dotproduct of p_hat_iter */\
+  R dot_v_iter; /**< weighted dotproduct of v_iter */\
+} X(plan_complex);\
+\
+NFFT_EXTERN void X(init_advanced_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv, unsigned flags);\
+NFFT_EXTERN void X(init_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv);\
+NFFT_EXTERN void X(before_loop_complex)(X(plan_complex)* ths);\
+NFFT_EXTERN void X(loop_one_step_complex)(X(plan_complex) *ths);\
+NFFT_EXTERN void X(finalize_complex)(X(plan_complex) *ths);\
+\
+typedef struct\
+{\
+  Y(mv_plan_double) *mv; /**< matrix vector multiplication   */\
+  unsigned flags; /**< iteration type */\
+  R *w; /**< weighting factors */\
+  R *w_hat; /**< damping factors */\
+  R *y; /**< right hand side, samples */\
+  R *f_hat_iter; /**< iterative solution */\
+  R *r_iter; /**< iterated residual vector */\
+  R *z_hat_iter; /**< residual of normal equation of first kind */\
+  R *p_hat_iter; /**< search direction */\
+  R *v_iter; /**< residual vector update */\
+  R alpha_iter; /**< step size for search direction */\
+  R beta_iter; /**< step size for search correction */\
+  R dot_r_iter; /**< weighted dotproduct of r_iter */\
+  R dot_r_iter_old; /**< previous dot_r_iter */\
+  R dot_z_hat_iter; /**< weighted dotproduct of z_hat_iter */\
+  R dot_z_hat_iter_old; /**< previous dot_z_hat_iter */\
+  R dot_p_hat_iter; /**< weighted dotproduct of p_hat_iter */\
+  R dot_v_iter; /**< weighted dotproduct of v_iter */\
+} X(plan_double);\
+\
+NFFT_EXTERN void X(init_advanced_double)(X(plan_double)* ths, Y(mv_plan_double) *mv, unsigned flags);\
+NFFT_EXTERN void X(solver_init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv);\
+NFFT_EXTERN void X(solver_before_loop_double)(X(plan_double)* ths);\
+NFFT_EXTERN void X(solver_loop_one_step_double)(X(plan_double) *ths);\
+NFFT_EXTERN void X(solver_finalize_double)(X(plan_double) *ths);
+
+/* solver api */
+SOLVER_DEFINE_API(SOLVER_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+SOLVER_DEFINE_API(SOLVER_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+SOLVER_DEFINE_API(SOLVER_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* init flags */
+#define LANDWEBER             (1U<< 0)
+#define STEEPEST_DESCENT      (1U<< 1)
+#define CGNR                  (1U<< 2)
+#define CGNE                  (1U<< 3)
+#define NORMS_FOR_LANDWEBER   (1U<< 4)
+#define PRECOMPUTE_WEIGHT     (1U<< 5)
+#define PRECOMPUTE_DAMP       (1U<< 6)
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* defined(__NFFT3_H__) */
diff --git a/include/nfft3conf.h b/include/nfft3conf.h
new file mode 100644
index 0000000..6eac835
--- /dev/null
+++ b/include/nfft3conf.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id$ */
+
+/* include/nfftconf.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to enable FPT module. */
+#define HAVE_FPT 1
+
+/* Define to enable MRI module. */
+#define HAVE_MRI 1
+
+/* Define to enable NFCT module. */
+#define HAVE_NFCT 1
+
+/* Define to enable NFSFT module. */
+#define HAVE_NFSFT 1
+
+/* Define to enable NFSOFT module. */
+#define HAVE_NFSOFT 1
+
+/* Define to enable NFST module. */
+#define HAVE_NFST 1
+
+/* Define to enable NNFFT module. */
+#define HAVE_NNFFT 1
+
+/* Define to enable NSFFT module. */
+#define HAVE_NSFFT 1
diff --git a/include/nfft3conf.h.in b/include/nfft3conf.h.in
new file mode 100644
index 0000000..4522e0a
--- /dev/null
+++ b/include/nfft3conf.h.in
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id$ */
+
+/* include/nfftconf.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to enable FPT module. */
+ at HAVE_FPT@
+
+/* Define to enable MRI module. */
+ at HAVE_MRI@
+
+/* Define to enable NFCT module. */
+ at HAVE_NFCT@
+
+/* Define to enable NFSFT module. */
+ at HAVE_NFSFT@
+
+/* Define to enable NFSOFT module. */
+ at HAVE_NFSOFT@
+
+/* Define to enable NFST module. */
+ at HAVE_NFST@
+
+/* Define to enable NNFFT module. */
+ at HAVE_NNFFT@
+
+/* Define to enable NSFFT module. */
+ at HAVE_NSFFT@
diff --git a/include/nfft3util.h b/include/nfft3util.h
new file mode 100644
index 0000000..4a5855c
--- /dev/null
+++ b/include/nfft3util.h
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft3util.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file nfft3util.h
+ *  \brief Header file for utility functions used by the nfft3 library.
+ */
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+/** Include header for FFTW3 library for its complex type. */
+#include <fftw3.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/*###########################################################################*/
+/*###########################################################################*/
+/*###########################################################################*/
+
+/**
+ * @defgroup nfftutil Util - Auxilliary functions
+ * @{
+ *
+ * This module implements frequently used utility functions.
+ * In particular, this includes simple measurement of resources, evaluation of
+ * window functions, vector routines for basic linear algebra tasks, and
+ * computation of weights for the inverse transforms.
+ *
+ */
+
+/** Swapping of two vectors.
+ */
+#define NFFT_SWAP_complex(x,y) {fftw_complex* NFFT_SWAP_temp__; \
+  NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}
+
+/** Swapping of two vectors.
+ */
+#define NFFT_SWAP_double(x,y) {double* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \
+  (x)=(y); (y)=NFFT_SWAP_temp__;}
+
+/** Formerly known to be an irrational number.
+ */
+#define PI 3.141592653589793238462643383279502884197169399375105820974944592
+#define PI2 6.283185307179586476925286766559005768394338798750211641949889185
+#define PI4 12.56637061435917295385057353311801153678867759750042328389977837
+
+/** Maximum of its two arguments.
+ */
+#define NFFT_MAX(a,b) ((a)>(b)? (a) : (b))
+
+/** Mimimum of its two arguments.
+ */
+#define NFFT_MIN(a,b) ((a)<(b)? (a) : (b))
+
+/* ######################################################################### */
+/* ########## Window function related ###################################### */
+/* ######################################################################### */
+
+/** To test the new one
+ */
+double nfft_bspline_old(int k,double x,double *A);
+
+/** Computes the B-spline \f$M_{k,0}\left(x\right)\f$,
+    scratch is used for de Boor's scheme
+ */
+double nfft_bspline(int k, double x, double *scratch);
+
+/* ######################################################################### */
+/* ########## Vector routines ############################################## */
+/* ######################################################################### */
+
+/** Computes integer \f$\prod_{t=0}^{d-1} v_t\f$.
+ */
+int nfft_prod_int(int *vec, int d);
+
+/** Computes integer \f$\prod_{t=0}^{d-1} v_t-a\f$.
+ */
+int nfst_prod_minus_a_int(int *vec, int a, int d);
+
+/** Computes \f$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}\f$.
+ */
+int nfft_plain_loop(int *idx,int *N,int d);
+
+/** Computes double \f$\prod_{t=0}^{d-1} v_t\f$.
+ */
+double nfft_prod_real(double *vec,int d);
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_complex(fftw_complex* x, int n);
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_double( double*  x, int n);
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_complex(fftw_complex* x, double* w, int n);
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_double( double*  x, double* w, int n);
+
+/** Computes the weighted inner/dot product
+    \f$x^H (w1\odot w2\odot w2 \odot x)\f$.
+*/
+double nfft_dot_w_w2_complex(fftw_complex* x, double* w, double* w2, int n);
+
+/** Computes the weighted inner/dot product
+    \f$x^H (w2\odot w2 \odot x)\f$.
+ */
+double nfft_dot_w2_complex(fftw_complex* x, double* w2, int n);
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_complex(fftw_complex* x, fftw_complex* y, int n);
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_double( double*  x, double*  y, int n);
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_complex(fftw_complex* x, double a, fftw_complex* y, int n);
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_double(double *x, double a, double *y, int n);
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_complex(fftw_complex* x, double* w, fftw_complex* y, int n);
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_double( double*  x, double* w, double*  y, int n);
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_complex(fftw_complex* x, double a, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_double( double*  x, double a, double*  y, int n);
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_complex(fftw_complex* x, double a, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_double( double*  x, double a, double*  y, int n);
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_complex(fftw_complex* x, double a, fftw_complex* y, double b, int n);
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_double(  double* x, double a, double*  y, double b, int n);
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_complex(fftw_complex* x, double a, double* w, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_double( double*  x, double a, double* w, double*  y, int n);
+
+/** Updates \f$x \leftarrow a x +  w\odot y\f$.
+ */
+void nfft_upd_axpwy_complex(fftw_complex* x, double a, double* w, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow a x +  w\odot y\f$.
+ */
+void nfft_upd_axpwy_double( double*  x, double a, double* w, double*  y, int n);
+
+/** Swaps each half over N[d]/2.
+ */
+void nfft_fftshift_complex(fftw_complex *x, int d, int* N);
+
+/** Prints a vector of integer numbers.
+ */
+void nfft_vpr_int(int *x, int n, char *text);
+
+/** Prints a vector of doubles numbers.
+ */
+void nfft_vpr_double(double *x, int n, const char *text);
+
+/** Prints a vector of complex numbers.
+ */
+void nfft_vpr_complex(fftw_complex *x, int n, const char *text);
+
+/** Inits a vector of random complex numbers in \f$[0,1]\times[0,1]{\rm i}\f$.
+ */
+void nfft_vrand_unit_complex(fftw_complex *x, int n);
+
+/** Inits a vector of random double numbers in \f$[-1/2,1/2]\f$.
+ */
+void nfft_vrand_shifted_unit_double(double *x, int n);
+
+/* ######################################################################### */
+/* ########## Helpers for inverse transforms ############################### */
+/* ######################################################################### */
+
+/** Computes non periodic voronoi weights, assumes ordered nodes \f$x_j\f$ */
+void nfft_voronoi_weights_1d(double *w, double *x, int M);
+
+/** Computes voronoi weights for nodes on the sphere S^2. */
+void nfft_voronoi_weights_S2(double *w, double *xi, int M);
+
+/** Computes the damping factor for the modified Fejer kernel, ie
+    \f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)\f$
+ */
+double nfft_modified_fejer(int N,int kk);
+
+/** Computes the damping factor for the modified Jackson kernel.
+ */
+double nfft_modified_jackson2(int N,int kk);
+
+/** Computes the damping factor for the modified generalised Jackson kernel.
+ */
+double nfft_modified_jackson4(int N,int kk);
+
+/** Computes the damping factor for the modified Sobolev kernel.
+ */
+double nfft_modified_sobolev(double mu,int kk);
+
+/** Computes the damping factor for the modified multiquadric kernel.
+ */
+double nfft_modified_multiquadric(double mu,double c,int kk);
+
+int nfft_smbi(const double x, const double alpha, const int nb, const int ize,
+  double *b);
+
+double nfft_drand48(void);
+
+void nfft_srand48(long int seed);
+
+/** Radix sort for node indices.
+ */
+void nfft_sort_node_indices_radix_lsdf(int n, int *keys0, int *keys1, int rhigh);
+
+/** Radix sort for node indices.
+ */
+void nfft_sort_node_indices_radix_msdf(int n, int *keys0, int *keys1, int rhigh);
+
+int nfft_get_num_threads(void);
+
+#ifdef _OPENMP
+int nfft_get_omp_num_threads(void);
+#endif
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif /* __cplusplus */
+
+/** @}
+ */
+#endif
diff --git a/include/ticks.h.in b/include/ticks.h.in
new file mode 100644
index 0000000..292e677
--- /dev/null
+++ b/include/ticks.h.in
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: infft.h 3471 2010-04-08 21:43:41Z keiner $ */
+
+#ifndef TICKS_H_
+#define TICKS_H_
+
+#include "cycle.h"
+
+#define TICKS_PER_SECOND @TICKS_PER_SECOND@
+
+#ifndef HAVE_TICK_COUNTER
+  typedef unsigned ticks;
+  #define getticks() 0U;
+  INLINE_ELAPSED(__inline__)
+#endif
+
+#endif /* TICKS_H_ */
diff --git a/kernel/Makefile.am b/kernel/Makefile.am
new file mode 100644
index 0000000..6d45fa4
--- /dev/null
+++ b/kernel/Makefile.am
@@ -0,0 +1,104 @@
+if HAVE_NFCT
+  LIB_NFCT=nfct/libnfct.la
+  DIR_NFCT=nfct
+else
+  LIB_NFCT=
+endif
+
+if HAVE_NFST
+  LIB_NFST=nfst/libnfst.la
+  DIR_NFST=nfst
+else
+  LIB_NFST=
+  DIR_NFST=
+endif
+
+if HAVE_NFSFT
+  LIB_NFSFT=nfsft/libnfsft.la
+  DIR_NFSFT=nfsft
+if HAVE_THREADS
+  LIB_NFSFT_THREADS=nfsft/libnfsft_threads.la
+else
+  LIB_NFSFT_THREADS=
+endif
+else
+  LIB_NFSFT=
+  DIR_NFSFT=
+  LIB_NFSFT_THREADS=
+endif
+
+if HAVE_NFSOFT
+  LIB_NFSOFT=nfsoft/libnfsoft.la
+  DIR_NFSOFT=nfsoft
+else
+  LIB_NFSOFT=
+  DIR_NFSOFT=
+endif
+
+if HAVE_NNFFT
+  LIB_NNFFT=nnfft/libnnfft.la
+  DIR_NNFFT=nnfft
+else
+  LIB_NNFFT=
+  DIR_NNFFT=
+endif
+
+if HAVE_NSFFT
+  LIB_NSFFT=nsfft/libnsfft.la
+  DIR_NSFFT=nsfft
+else
+  LIB_NSFFT=
+  DIR_NSFFT=
+endif
+
+if HAVE_MRI
+  LIB_MRI=mri/libmri.la
+  DIR_MRI=mri
+else
+  LIB_MRI=
+  DIR_MRI=
+endif
+
+if HAVE_FPT
+  LIB_FPT=fpt/libfpt.la
+  DIR_FPT=fpt
+if HAVE_THREADS
+  LIB_FPT_THREADS=fpt/libfpt_threads.la
+else
+  LIB_FPT_THREADS=
+endif
+else
+  LIB_FPT=
+  DIR_FPT=
+  LIB_FPT_THREADS=
+endif
+
+SUBDIRS = util nfft $(DIR_NFCT) $(DIR_NFST) $(DIR_NNFFT) $(DIR_NSFFT) \
+  $(DIR_MRI) $(DIR_FPT) $(DIR_NFSFT) $(DIR_NFSOFT) solver .
+
+if HAVE_THREADS
+  LIBKERNEL_THREADS_LA = libkernel_threads.la
+else
+  LIBKERNEL_THREADS_LA =
+endif
+
+
+noinst_LTLIBRARIES = libkernel.la $(LIBKERNEL_THREADS_LA)
+
+libkernel_la_SOURCES =
+
+libkernel_la_LIBADD = util/libutil.la nfft/libnfft.la $(LIB_NFCT) $(LIB_NFST) \
+  $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT) $(LIB_NFSFT) $(LIB_NFSOFT) \
+  solver/libsolver.la
+
+if HAVE_THREADS
+  libkernel_threads_la_SOURCES =
+
+  libkernel_threads_la_LIBADD = util/libutil.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
+    $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT_THREADS) $(LIB_NFSFT_THREADS) $(LIB_NFSOFT) \
+    solver/libsolver.la
+
+if HAVE_OPENMP
+  libkernel_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
diff --git a/kernel/Makefile.in b/kernel/Makefile.in
new file mode 100644
index 0000000..ca66153
--- /dev/null
+++ b/kernel/Makefile.in
@@ -0,0 +1,762 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+ at HAVE_NFCT_TRUE@am__DEPENDENCIES_1 = nfct/libnfct.la
+ at HAVE_NFST_TRUE@am__DEPENDENCIES_2 = nfst/libnfst.la
+ at HAVE_NNFFT_TRUE@am__DEPENDENCIES_3 = nnfft/libnnfft.la
+ at HAVE_NSFFT_TRUE@am__DEPENDENCIES_4 = nsfft/libnsfft.la
+ at HAVE_MRI_TRUE@am__DEPENDENCIES_5 = mri/libmri.la
+ at HAVE_FPT_TRUE@am__DEPENDENCIES_6 = fpt/libfpt.la
+ at HAVE_NFSFT_TRUE@am__DEPENDENCIES_7 = nfsft/libnfsft.la
+ at HAVE_NFSOFT_TRUE@am__DEPENDENCIES_8 = nfsoft/libnfsoft.la
+libkernel_la_DEPENDENCIES = util/libutil.la nfft/libnfft.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+	$(am__DEPENDENCIES_5) $(am__DEPENDENCIES_6) \
+	$(am__DEPENDENCIES_7) $(am__DEPENDENCIES_8) \
+	solver/libsolver.la
+am_libkernel_la_OBJECTS =
+libkernel_la_OBJECTS = $(am_libkernel_la_OBJECTS)
+ at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE at am__DEPENDENCIES_9 =  \
+ at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE@	fpt/libfpt_threads.la
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE at am__DEPENDENCIES_10 =  \
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE@	nfsft/libnfsft_threads.la
+ at HAVE_THREADS_TRUE@libkernel_threads_la_DEPENDENCIES =  \
+ at HAVE_THREADS_TRUE@	util/libutil.la nfft/libnfft_threads.la \
+ at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+ at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+ at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_5) $(am__DEPENDENCIES_9) \
+ at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_10) \
+ at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_8) solver/libsolver.la
+am_libkernel_threads_la_OBJECTS =
+libkernel_threads_la_OBJECTS = $(am_libkernel_threads_la_OBJECTS)
+libkernel_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libkernel_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libkernel_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libkernel_la_SOURCES) $(libkernel_threads_la_SOURCES)
+DIST_SOURCES = $(libkernel_la_SOURCES) $(libkernel_threads_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = util nfft nfct nfst nnfft nsfft mri fpt nfsft nfsoft \
+	solver .
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFCT_FALSE@LIB_NFCT = 
+ at HAVE_NFCT_TRUE@LIB_NFCT = nfct/libnfct.la
+ at HAVE_NFCT_TRUE@DIR_NFCT = nfct
+ at HAVE_NFST_FALSE@LIB_NFST = 
+ at HAVE_NFST_TRUE@LIB_NFST = nfst/libnfst.la
+ at HAVE_NFST_FALSE@DIR_NFST = 
+ at HAVE_NFST_TRUE@DIR_NFST = nfst
+ at HAVE_NFSFT_FALSE@LIB_NFSFT = 
+ at HAVE_NFSFT_TRUE@LIB_NFSFT = nfsft/libnfsft.la
+ at HAVE_NFSFT_FALSE@DIR_NFSFT = 
+ at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
+ at HAVE_NFSFT_FALSE@LIB_NFSFT_THREADS = 
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_FALSE at LIB_NFSFT_THREADS = 
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE at LIB_NFSFT_THREADS = nfsft/libnfsft_threads.la
+ at HAVE_NFSOFT_FALSE@LIB_NFSOFT = 
+ at HAVE_NFSOFT_TRUE@LIB_NFSOFT = nfsoft/libnfsoft.la
+ at HAVE_NFSOFT_FALSE@DIR_NFSOFT = 
+ at HAVE_NFSOFT_TRUE@DIR_NFSOFT = nfsoft
+ at HAVE_NNFFT_FALSE@LIB_NNFFT = 
+ at HAVE_NNFFT_TRUE@LIB_NNFFT = nnfft/libnnfft.la
+ at HAVE_NNFFT_FALSE@DIR_NNFFT = 
+ at HAVE_NNFFT_TRUE@DIR_NNFFT = nnfft
+ at HAVE_NSFFT_FALSE@LIB_NSFFT = 
+ at HAVE_NSFFT_TRUE@LIB_NSFFT = nsfft/libnsfft.la
+ at HAVE_NSFFT_FALSE@DIR_NSFFT = 
+ at HAVE_NSFFT_TRUE@DIR_NSFFT = nsfft
+ at HAVE_MRI_FALSE@LIB_MRI = 
+ at HAVE_MRI_TRUE@LIB_MRI = mri/libmri.la
+ at HAVE_MRI_FALSE@DIR_MRI = 
+ at HAVE_MRI_TRUE@DIR_MRI = mri
+ at HAVE_FPT_FALSE@LIB_FPT = 
+ at HAVE_FPT_TRUE@LIB_FPT = fpt/libfpt.la
+ at HAVE_FPT_FALSE@DIR_FPT = 
+ at HAVE_FPT_TRUE@DIR_FPT = fpt
+ at HAVE_FPT_FALSE@LIB_FPT_THREADS = 
+ at HAVE_FPT_TRUE@@HAVE_THREADS_FALSE at LIB_FPT_THREADS = 
+ at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE at LIB_FPT_THREADS = fpt/libfpt_threads.la
+SUBDIRS = util nfft $(DIR_NFCT) $(DIR_NFST) $(DIR_NNFFT) $(DIR_NSFFT) \
+  $(DIR_MRI) $(DIR_FPT) $(DIR_NFSFT) $(DIR_NFSOFT) solver .
+
+ at HAVE_THREADS_FALSE@LIBKERNEL_THREADS_LA = 
+ at HAVE_THREADS_TRUE@LIBKERNEL_THREADS_LA = libkernel_threads.la
+noinst_LTLIBRARIES = libkernel.la $(LIBKERNEL_THREADS_LA)
+libkernel_la_SOURCES = 
+libkernel_la_LIBADD = util/libutil.la nfft/libnfft.la $(LIB_NFCT) $(LIB_NFST) \
+  $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT) $(LIB_NFSFT) $(LIB_NFSOFT) \
+  solver/libsolver.la
+
+ at HAVE_THREADS_TRUE@libkernel_threads_la_SOURCES = 
+ at HAVE_THREADS_TRUE@libkernel_threads_la_LIBADD = util/libutil.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
+ at HAVE_THREADS_TRUE@    $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT_THREADS) $(LIB_NFSFT_THREADS) $(LIB_NFSOFT) \
+ at HAVE_THREADS_TRUE@    solver/libsolver.la
+
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libkernel_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libkernel.la: $(libkernel_la_OBJECTS) $(libkernel_la_DEPENDENCIES) $(EXTRA_libkernel_la_DEPENDENCIES) 
+	$(LINK)  $(libkernel_la_OBJECTS) $(libkernel_la_LIBADD) $(LIBS)
+libkernel_threads.la: $(libkernel_threads_la_OBJECTS) $(libkernel_threads_la_DEPENDENCIES) $(EXTRA_libkernel_threads_la_DEPENDENCIES) 
+	$(libkernel_threads_la_LINK) $(am_libkernel_threads_la_rpath) $(libkernel_threads_la_OBJECTS) $(libkernel_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
+	ctags-recursive distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/fpt/Makefile.am b/kernel/fpt/Makefile.am
new file mode 100644
index 0000000..e011d08
--- /dev/null
+++ b/kernel/fpt/Makefile.am
@@ -0,0 +1,23 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+  LIBFPT_THREADS_LA = libfpt_threads.la
+else
+  LIBFPT_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libfpt.la $(LIBFPT_THREADS_LA)
+
+libfpt_la_SOURCES = fpt.c
+
+noinst_HEADERS = fpt.h
+
+if HAVE_THREADS
+  libfpt_threads_la_SOURCES = fpt.c
+if HAVE_OPENMP
+  libfpt_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/kernel/fpt/Makefile.in b/kernel/fpt/Makefile.in
new file mode 100644
index 0000000..0360ca1
--- /dev/null
+++ b/kernel/fpt/Makefile.in
@@ -0,0 +1,583 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/fpt
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libfpt_la_LIBADD =
+am_libfpt_la_OBJECTS = fpt.lo
+libfpt_la_OBJECTS = $(am_libfpt_la_OBJECTS)
+libfpt_threads_la_LIBADD =
+am__libfpt_threads_la_SOURCES_DIST = fpt.c
+ at HAVE_THREADS_TRUE@am_libfpt_threads_la_OBJECTS =  \
+ at HAVE_THREADS_TRUE@	libfpt_threads_la-fpt.lo
+libfpt_threads_la_OBJECTS = $(am_libfpt_threads_la_OBJECTS)
+libfpt_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libfpt_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+ at HAVE_THREADS_TRUE@am_libfpt_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libfpt_la_SOURCES) $(libfpt_threads_la_SOURCES)
+DIST_SOURCES = $(libfpt_la_SOURCES) \
+	$(am__libfpt_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@LIBFPT_THREADS_LA = 
+ at HAVE_THREADS_TRUE@LIBFPT_THREADS_LA = libfpt_threads.la
+noinst_LTLIBRARIES = libfpt.la $(LIBFPT_THREADS_LA)
+libfpt_la_SOURCES = fpt.c
+noinst_HEADERS = fpt.h
+ at HAVE_THREADS_TRUE@libfpt_threads_la_SOURCES = fpt.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libfpt_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/fpt/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/fpt/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libfpt.la: $(libfpt_la_OBJECTS) $(libfpt_la_DEPENDENCIES) $(EXTRA_libfpt_la_DEPENDENCIES) 
+	$(LINK)  $(libfpt_la_OBJECTS) $(libfpt_la_LIBADD) $(LIBS)
+libfpt_threads.la: $(libfpt_threads_la_OBJECTS) $(libfpt_threads_la_DEPENDENCIES) $(EXTRA_libfpt_threads_la_DEPENDENCIES) 
+	$(libfpt_threads_la_LINK) $(am_libfpt_threads_la_rpath) $(libfpt_threads_la_OBJECTS) $(libfpt_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fpt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libfpt_threads_la-fpt.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libfpt_threads_la-fpt.lo: fpt.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfpt_threads_la_CFLAGS) $(CFLAGS) -MT libfpt_threads_la-fpt.lo -MD -MP -MF $(DEPDIR)/libfpt_threads_la-fpt.Tpo -c -o libfpt_threads_la-fpt.lo `test -f 'fpt.c' || echo '$(srcdir)/'`fpt.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfpt_threads_la-fpt.Tpo $(DEPDIR)/libfpt_threads_la-fpt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpt.c' object='libfpt_threads_la-fpt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfpt_threads_la_CFLAGS) $(CFLAGS) -c -o libfpt_threads_la-fpt.lo `test -f 'fpt.c' || echo '$(srcdir)/'`fpt.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/fpt/fpt.c b/kernel/fpt/fpt.c
new file mode 100644
index 0000000..13d179a
--- /dev/null
+++ b/kernel/fpt/fpt.c
@@ -0,0 +1,1923 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fpt.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file fpt.c
+ * \brief Implementation file for the FPT module
+ * \author Jens Keiner
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/* Macros for index calculation. */
+
+/** Minimum degree at top of a cascade */
+#define K_START_TILDE(x,y) (NFFT_MAX(NFFT_MIN(x,y-2),0))
+
+/** Maximum degree at top of a cascade */
+#define K_END_TILDE(x,y) NFFT_MIN(x,y-1)
+
+/** Index of first block of four functions at level */
+#define FIRST_L(x,y) (LRINT(floor((x)/(double)y)))
+
+/** Index of last block of four functions at level */
+#define LAST_L(x,y) (LRINT(ceil(((x)+1)/(double)y))-1)
+
+#define N_TILDE(y) (y-1)
+
+#define IS_SYMMETRIC(x,y,z) (x >= ((y-1.0)/z))
+
+#define FPT_BREAK_EVEN 4
+
+/**
+ * Holds data for a single multiplication step in the cascade summation.
+ */
+typedef struct fpt_step_
+{
+  bool stable;                            /**< Indicates if the values
+                                               contained represent a fast or
+                                               a slow stabilized step.        */
+  int Ns;                                 /**< TODO Add comment here.         */
+  int ts;                                 /**< TODO Add comment here.         */
+  double **a11,**a12,**a21,**a22;         /**< The matrix components          */
+  double *g;                              /**<                                */
+} fpt_step;
+
+/**
+ * Holds data for a single cascade summation.
+ */
+typedef struct fpt_data_
+{
+  fpt_step **steps;                       /**< The cascade summation steps    */
+  int k_start;                            /**< TODO Add comment here.         */
+  double *alphaN;                         /**< TODO Add comment here.         */
+  double *betaN;                          /**< TODO Add comment here.         */
+  double *gammaN;                         /**< TODO Add comment here.         */
+  double alpha_0;                         /**< TODO Add comment here.         */
+  double beta_0;                          /**< TODO Add comment here.         */
+  double gamma_m1;                        /**< TODO Add comment here.         */
+  /* Data for direct transform. */        /**< TODO Add comment here.         */
+  double *_alpha;                          /**< TODO Add comment here.         */
+  double *_beta;                           /**< TODO Add comment here.         */
+  double *_gamma;                          /**< TODO Add comment here.         */
+} fpt_data;
+
+/**
+ * Holds data for a set of cascade summations.
+ */
+typedef struct fpt_set_s_
+{
+  int flags;                              /**< The flags                     */
+  int M;                                  /**< The number of DPT transforms  */
+  int N;                                  /**< The transform length. Must be
+                                               a power of two.               */
+  int t;                                  /**< The exponent of N             */
+  fpt_data *dpt;                          /**< The DPT transform data        */
+  double **xcvecs;                        /**< Array of pointers to arrays
+                                               containing the Chebyshev
+                                               nodes                         */
+  double *xc;                             /**< Array for Chebychev-nodes.    */
+  double _Complex *temp;                          /**< */
+  double _Complex *work;                          /**< */
+  double _Complex *result;                        /**< */
+  double _Complex *vec3;
+  double _Complex *vec4;
+  double _Complex *z;
+  fftw_plan *plans_dct3;                  /**< Transform plans for the fftw
+                                               library                       */
+  fftw_plan *plans_dct2;                  /**< Transform plans for the fftw
+                                               library                       */
+  fftw_r2r_kind *kinds;                   /**< Transform kinds for fftw
+                                               library                       */
+  fftw_r2r_kind *kindsr;                  /**< Transform kinds for fftw
+                                               library                       */
+
+  int *lengths; /**< Transform lengths for fftw library */
+
+  /* Data for slow transforms. */
+  double *xc_slow;
+} fpt_set_s;
+
+static inline void abuvxpwy(double a, double b, double _Complex* u, double _Complex* x,
+  double* v, double _Complex* y, double* w, int n)
+{
+  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+  double *v_ptr = v, *w_ptr = w;
+  for (l = 0; l < n; l++)
+    *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));
+}
+
+#define ABUVXPWY_SYMMETRIC(NAME,S1,S2) \
+static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \
+  double* v, double _Complex* y, double* w, int n) \
+{ \
+  const int n2 = n>>1; \
+  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \
+  double *v_ptr = v, *w_ptr = w; \
+  for (l = 0; l < n2; l++) \
+    *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++)); \
+  v_ptr--; w_ptr--; \
+  for (l = 0; l < n2; l++) \
+    *u_ptr++ = a * (b * S1 * (*v_ptr--) * (*x_ptr++) + S2 * (*w_ptr--) * (*y_ptr++)); \
+}
+
+ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric1,1.0,-1.0)
+ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric2,-1.0,1.0)
+
+#define ABUVXPWY_SYMMETRIC_1(NAME,S1) \
+static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \
+  double* v, double _Complex* y, int n, double *xx) \
+{ \
+  const int n2 = n>>1; \
+  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \
+  double *v_ptr = v, *xx_ptr = xx; \
+  for (l = 0; l < n2; l++, v_ptr++) \
+    *u_ptr++ = a * (b * (*v_ptr) * (*x_ptr++) + ((*v_ptr)*(1.0+*xx_ptr++)) * (*y_ptr++)); \
+  v_ptr--; \
+  for (l = 0; l < n2; l++, v_ptr--) \
+    *u_ptr++ = a * (b * S1 * (*v_ptr) * (*x_ptr++) + (S1 * (*v_ptr) * (1.0+*xx_ptr++)) * (*y_ptr++)); \
+}
+
+ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_1,1.0)
+ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_2,-1.0)
+
+#define ABUVXPWY_SYMMETRIC_2(NAME,S1) \
+static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \
+  double _Complex* y, double* w, int n, double *xx) \
+{ \
+  const int n2 = n>>1; \
+  int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \
+  double *w_ptr = w, *xx_ptr = xx; \
+  for (l = 0; l < n2; l++, w_ptr++) \
+    *u_ptr++ = a * (b * (*w_ptr/(1.0+*xx_ptr++)) * (*x_ptr++) + (*w_ptr) * (*y_ptr++)); \
+  w_ptr--; \
+  for (l = 0; l < n2; l++, w_ptr--) \
+    *u_ptr++ = a * (b * (S1 * (*w_ptr)/(1.0+*xx_ptr++) ) * (*x_ptr++) + S1 * (*w_ptr) * (*y_ptr++)); \
+}
+
+ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_1,1.0)
+ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_2,-1.0)
+
+static inline void auvxpwy(double a, double _Complex* u, double _Complex* x, double* v,
+  double _Complex* y, double* w, int n)
+{
+  int l;
+  double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+  double *v_ptr = v, *w_ptr = w;
+  for (l = n; l > 0; l--)
+    *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));
+}
+
+static inline void auvxpwy_symmetric(double a, double _Complex* u, double _Complex* x,
+  double* v, double _Complex* y, double* w, int n)
+{
+  const int n2 = n>>1; \
+  int l;
+  double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+  double *v_ptr = v, *w_ptr = w;
+  for (l = n2; l > 0; l--)
+    *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));
+  v_ptr--; w_ptr--;
+  for (l = n2; l > 0; l--)
+    *u_ptr++ = a * ((*v_ptr--) * (*x_ptr++) - (*w_ptr--) * (*y_ptr++));
+}
+
+static inline void auvxpwy_symmetric_1(double a, double _Complex* u, double _Complex* x,
+  double* v, double _Complex* y, double* w, int n, double *xx)
+{
+  const int n2 = n>>1; \
+  int l;
+  double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+  double *v_ptr = v, *w_ptr = w, *xx_ptr = xx;
+  for (l = n2; l > 0; l--, xx_ptr++)
+    *u_ptr++ = a * (((*v_ptr++)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)*(1.0+*xx_ptr)) * (*y_ptr++));
+  v_ptr--; w_ptr--;
+  for (l = n2; l > 0; l--, xx_ptr++)
+    *u_ptr++ = a * (-((*v_ptr--)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)*(1.0+*xx_ptr)) * (*y_ptr++));
+}
+
+static inline void auvxpwy_symmetric_2(double a, double _Complex* u, double _Complex* x,
+  double* v, double _Complex* y, double* w, int n, double *xx)
+{
+  const int n2 = n>>1; \
+  int l;
+  double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+  double *v_ptr = v, *w_ptr = w, *xx_ptr = xx;
+  for (l = n2; l > 0; l--, xx_ptr++)
+    *u_ptr++ = a * (((*v_ptr++)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)/(1.0+*xx_ptr)) * (*y_ptr++));
+  v_ptr--; w_ptr--;
+  for (l = n2; l > 0; l--, xx_ptr++)
+    *u_ptr++ = a * (-((*v_ptr--)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)/(1.0+*xx_ptr)) * (*y_ptr++));
+}
+
+#define FPT_DO_STEP(NAME,M1_FUNCTION,M2_FUNCTION) \
+static inline void NAME(double _Complex  *a, double _Complex *b, double *a11, double *a12, \
+  double *a21, double *a22, double g, int tau, fpt_set set) \
+{ \
+  /** The length of the coefficient arrays. */ \
+  int length = 1<<(tau+1); \
+  /** Twice the length of the coefficient arrays. */ \
+  double norm = 1.0/(length<<1); \
+  \
+  /* Compensate for factors introduced by a raw DCT-III. */ \
+  a[0] *= 2.0; \
+  b[0] *= 2.0; \
+  \
+  /* Compute function values from Chebyshev-coefficients using a DCT-III. */ \
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \
+  \
+  /*for (k = 0; k < length; k++)*/ \
+  /*{*/ \
+    /*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/ \
+    /*  a11[k],a12[k],a21[k],a22[k]);*/ \
+  /*}*/ \
+  \
+  /* Check, if gamma is zero. */ \
+  if (g == 0.0) \
+  { \
+    /*fprintf(stderr,"gamma == 0!\n");*/ \
+    /* Perform multiplication only for second row. */ \
+    M2_FUNCTION(norm,b,b,a22,a,a21,length); \
+  } \
+  else \
+  { \
+    /*fprintf(stderr,"gamma != 0!\n");*/ \
+    /* Perform multiplication for both rows. */ \
+    M2_FUNCTION(norm,set->z,b,a22,a,a21,length); \
+    M1_FUNCTION(norm*g,a,a,a11,b,a12,length); \
+    memcpy(b,set->z,length*sizeof(double _Complex)); \
+    /* Compute Chebyshev-coefficients using a DCT-II. */ \
+    fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \
+    /* Compensate for factors introduced by a raw DCT-II. */ \
+    a[0] *= 0.5; \
+  } \
+  \
+  /* Compute Chebyshev-coefficients using a DCT-II. */ \
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \
+  /* Compensate for factors introduced by a raw DCT-II. */ \
+  b[0] *= 0.5; \
+}
+
+FPT_DO_STEP(fpt_do_step,auvxpwy,auvxpwy)
+FPT_DO_STEP(fpt_do_step_symmetric,auvxpwy_symmetric,auvxpwy_symmetric)
+/*FPT_DO_STEP(fpt_do_step_symmetric_u,auvxpwy_symmetric,auvxpwy)
+FPT_DO_STEP(fpt_do_step_symmetric_l,auvxpwy,auvxpwy_symmetric)*/
+
+static inline void fpt_do_step_symmetric_u(double _Complex *a, double _Complex *b,
+  double *a11, double *a12, double *a21, double *a22, double *x,
+  double gam, int tau, fpt_set set)
+{
+  /** The length of the coefficient arrays. */
+  int length = 1<<(tau+1);
+  /** Twice the length of the coefficient arrays. */
+  double norm = 1.0/(length<<1);
+
+  UNUSED(a21); UNUSED(a22);
+
+  /* Compensate for factors introduced by a raw DCT-III. */
+  a[0] *= 2.0;
+  b[0] *= 2.0;
+
+  /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+  /*for (k = 0; k < length; k++)*/
+  /*{*/
+    /*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/
+    /*  a11[k],a12[k],a21[k],a22[k]);*/
+  /*}*/
+
+  /* Check, if gamma is zero. */
+  if (gam == 0.0)
+  {
+    /*fprintf(stderr,"gamma == 0!\n");*/
+    /* Perform multiplication only for second row. */
+    auvxpwy_symmetric_1(norm,b,b,a12,a,a11,length,x);
+  }
+  else
+  {
+    /*fprintf(stderr,"gamma != 0!\n");*/
+    /* Perform multiplication for both rows. */
+    auvxpwy_symmetric_1(norm,set->z,b,a12,a,a11,length,x);
+    auvxpwy_symmetric(norm*gam,a,a,a11,b,a12,length);
+    memcpy(b,set->z,length*sizeof(double _Complex));
+    /* Compute Chebyshev-coefficients using a DCT-II. */
+    fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+    /* Compensate for factors introduced by a raw DCT-II. */
+    a[0] *= 0.5;
+  }
+
+  /* Compute Chebyshev-coefficients using a DCT-II. */
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+  /* Compensate for factors introduced by a raw DCT-II. */
+  b[0] *= 0.5;
+}
+
+static inline void fpt_do_step_symmetric_l(double _Complex  *a, double _Complex *b,
+  double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, fpt_set set)
+{
+  /** The length of the coefficient arrays. */
+  int length = 1<<(tau+1);
+  /** Twice the length of the coefficient arrays. */
+  double norm = 1.0/(length<<1);
+
+  /* Compensate for factors introduced by a raw DCT-III. */
+  a[0] *= 2.0;
+  b[0] *= 2.0;
+
+  UNUSED(a11); UNUSED(a12);
+
+  /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+  /*for (k = 0; k < length; k++)*/
+  /*{*/
+    /*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/
+    /*  a11[k],a12[k],a21[k],a22[k]);*/
+  /*}*/
+
+  /* Check, if gamma is zero. */
+  if (gam == 0.0)
+  {
+    /*fprintf(stderr,"gamma == 0!\n");*/
+    /* Perform multiplication only for second row. */
+    auvxpwy_symmetric(norm,b,b,a22,a,a21,length);
+  }
+  else
+  {
+    /*fprintf(stderr,"gamma != 0!\n");*/
+    /* Perform multiplication for both rows. */
+    auvxpwy_symmetric(norm,set->z,b,a22,a,a21,length);
+    auvxpwy_symmetric_2(norm*gam,a,a,a21,b,a22,length,x);
+    memcpy(b,set->z,length*sizeof(double _Complex));
+    /* Compute Chebyshev-coefficients using a DCT-II. */
+    fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+    /* Compensate for factors introduced by a raw DCT-II. */
+    a[0] *= 0.5;
+  }
+
+  /* Compute Chebyshev-coefficients using a DCT-II. */
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+  /* Compensate for factors introduced by a raw DCT-II. */
+  b[0] *= 0.5;
+}
+
+#define FPT_DO_STEP_TRANSPOSED(NAME,M1_FUNCTION,M2_FUNCTION) \
+static inline void NAME(double _Complex  *a, double _Complex *b, double *a11, \
+  double *a12, double *a21, double *a22, double g, int tau, fpt_set set) \
+{ \
+  /** The length of the coefficient arrays. */ \
+  int length = 1<<(tau+1); \
+  /** Twice the length of the coefficient arrays. */ \
+  double norm = 1.0/(length<<1); \
+  \
+  /* Compute function values from Chebyshev-coefficients using a DCT-III. */ \
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \
+  \
+  /* Perform matrix multiplication. */ \
+  M1_FUNCTION(norm,g,set->z,a,a11,b,a21,length); \
+  M2_FUNCTION(norm,g,b,a,a12,b,a22,length); \
+  memcpy(a,set->z,length*sizeof(double _Complex)); \
+  \
+  /* Compute Chebyshev-coefficients using a DCT-II. */ \
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \
+}
+
+FPT_DO_STEP_TRANSPOSED(fpt_do_step_t,abuvxpwy,abuvxpwy)
+FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric,abuvxpwy_symmetric1,abuvxpwy_symmetric2)
+/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_u,abuvxpwy_symmetric1_1,abuvxpwy_symmetric1_2)*/
+/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_l,abuvxpwy_symmetric2_2,abuvxpwy_symmetric2_1)*/
+
+
+static inline void fpt_do_step_t_symmetric_u(double _Complex  *a,
+  double _Complex *b, double *a11, double *a12, double *x,
+  double gam, int tau, fpt_set set)
+{
+  /** The length of the coefficient arrays. */
+  int length = 1<<(tau+1);
+  /** Twice the length of the coefficient arrays. */
+  double norm = 1.0/(length<<1);
+
+  /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+  /* Perform matrix multiplication. */
+  abuvxpwy_symmetric1_1(norm,gam,set->z,a,a11,b,length,x);
+  abuvxpwy_symmetric1_2(norm,gam,b,a,a12,b,length,x);
+  memcpy(a,set->z,length*sizeof(double _Complex));
+
+  /* Compute Chebyshev-coefficients using a DCT-II. */
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+}
+
+static inline void fpt_do_step_t_symmetric_l(double _Complex  *a,
+  double _Complex *b, double *a21, double *a22,
+  double *x, double gam, int tau, fpt_set set)
+{
+  /** The length of the coefficient arrays. */
+  int length = 1<<(tau+1);
+  /** Twice the length of the coefficient arrays. */
+  double norm = 1.0/(length<<1);
+
+  /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+  fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+  /* Perform matrix multiplication. */
+  abuvxpwy_symmetric2_2(norm,gam,set->z,a,b,a21,length,x);
+  abuvxpwy_symmetric2_1(norm,gam,b,a,b,a22,length,x);
+  memcpy(a,set->z,length*sizeof(double _Complex));
+
+  /* Compute Chebyshev-coefficients using a DCT-II. */
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+  fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+}
+
+
+static void eval_clenshaw(const double *x, double *y, int size, int k, const double *alpha,
+  const double *beta, const double *gam)
+{
+  /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm
+   */
+  int i,j;
+  double a,b,x_val_act,a_old;
+  const double *x_act;
+  double *y_act;
+  const double *alpha_act, *beta_act, *gamma_act;
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+      *y_act = 1.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gam[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+         b = a_old*(*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+    }
+    x_act++;
+    y_act++;
+  }
+}
+
+static void eval_clenshaw2(const double *x, double *z, double *y, int size1, int size, int k, const double *alpha,
+  const double *beta, const double *gam)
+{
+  /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm
+   */
+  int i,j;
+  double a,b,x_val_act,a_old;
+  const double *x_act;
+  double *y_act, *z_act;
+  const double *alpha_act, *beta_act, *gamma_act;
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  z_act = z;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+      *y_act = 1.0;
+      *z_act = 0.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gam[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+        b = a_old*(*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      if (i < size1)
+        *z_act = a;
+      *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+    }
+
+    x_act++;
+    y_act++;
+    z_act++;
+  }
+  /*gamma_act++;
+  FILE *f = fopen("/Users/keiner/Desktop/nfsft_debug.txt","a");
+  fprintf(f,"size1: %10d, size: %10d\n",size1,size);
+  fclose(f);*/
+}
+
+static int eval_clenshaw_thresh2(const double *x, double *z, double *y, int size, int k,
+  const double *alpha, const double *beta, const double *gam, const
+  double threshold)
+{
+  /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm
+   */
+  int i,j;
+  double a,b,x_val_act,a_old;
+  const double *x_act;
+  double *y_act, *z_act;
+  const double *alpha_act, *beta_act, *gamma_act;
+  R max = -nfft_float_property(NFFT_R_MAX);
+  const R t = LOG10(FABS(threshold));
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  z_act = z;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+     *y_act = 1.0;
+     *z_act = 0.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gam[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+         b = a_old*(*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      *z_act = a;
+      *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+      max = FMAX(max,LOG10(FABS(*y_act)));
+      if (max > t)
+        return 1;
+    }
+    x_act++;
+    y_act++;
+    z_act++;
+  }
+  return 0;
+}
+
+static inline void eval_sum_clenshaw_fast(const int N, const int M,
+  const double _Complex *a, const double *x, double _Complex *y,
+  const double *alpha, const double *beta, const double *gam,
+  const double lambda)
+{
+  int j,k;
+  double _Complex tmp1, tmp2, tmp3;
+  double xc;
+  
+  /*fprintf(stderr, "Executing eval_sum_clenshaw_fast.\n");  
+  fprintf(stderr, "Before transform:\n");  
+  for (j = 0; j < N; j++)
+    fprintf(stderr, "a[%4d] = %e.\n", j, a[j]);  
+  for (j = 0; j <= M; j++)
+    fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]);*/
+
+  if (N == 0)
+    for (j = 0; j <= M; j++)
+      y[j] = a[0];
+  else
+  {
+    for (j = 0; j <= M; j++)
+    {
+#if 0
+      xc = x[j];
+      tmp2 = a[N];
+      tmp1 = a[N-1] + (alpha[N-1] * xc + beta[N-1])*tmp2;
+      for (k = N-1; k > 0; k--)
+      {
+        tmp3 =   a[k-1]
+               + (alpha[k-1] * xc + beta[k-1]) * tmp1
+               + gam[k] * tmp2;
+        tmp2 = tmp1;
+        tmp1 = tmp3;
+      }
+      y[j] = lambda * tmp1;
+#else
+      xc = x[j];
+      tmp1 = a[N-1];
+      tmp2 = a[N];
+      for (k = N-1; k > 0; k--)
+      {
+        tmp3 = a[k-1] + tmp2 * gam[k];
+        tmp2 *= (alpha[k] * xc + beta[k]);
+        tmp2 += tmp1;
+        tmp1 = tmp3;
+        /*if (j == 1515) 
+        {
+          fprintf(stderr, "k = %d, tmp1 = %e, tmp2 = %e.\n", k, tmp1, tmp2);  
+        }*/
+      }
+      tmp2 *= (alpha[0] * xc + beta[0]);
+        //fprintf(stderr, "alpha[0] = %e, beta[0] = %e.\n", alpha[0], beta[0]);  
+      y[j] = lambda * (tmp2 + tmp1);
+        //fprintf(stderr, "lambda = %e.\n", lambda);  
+#endif
+    }
+  }
+  /*fprintf(stderr, "Before transform:\n");  
+  for (j = 0; j < N; j++)
+    fprintf(stderr, "a[%4d] = %e.\n", j, a[j]);  
+  for (j = 0; j <= M; j++)
+    fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]);  */
+}
+
+/**
+ * Clenshaw algorithm
+ *
+ * Evaluates a sum of real-valued functions \f$P_k : \mathbb{R} \rightarrow
+ * \mathbb{R}\f$
+ * \f[
+ *   f(x) = \sum_{k=0}^N a_k P_k(x) \quad (N \in \mathbb{N}_0)
+ * \f]
+ * obeying a three-term recurrence relation
+ * \f[
+ *   P_{k+1}(x) = (alpha_k * x + beta_k)*P_{k}(x) + gamma_k P_{k-1}(x) \quad
+ *   (alpha_k, beta_k, gamma_k \in \mathbb{R},\; k \ge 0)
+ * \f]
+ * with initial conditions \f$P_{-1}(x) := 0\f$, \f$P_0(x) := \lambda\f$
+ * for given double _Complex coefficients \f$\left(a_k\right)_{k=0}^N \in
+ * \mathbb{C}^{N+1}\f$ at given nodes \f$\left(x_j\right)_{j=0}^M \in
+ * \mathbb{R}^{M+1}\f$, \f$M \in \mathbb{N}_0\f$.
+ */
+static void eval_sum_clenshaw_transposed(int N, int M, double _Complex* a, double *x,
+  double _Complex *y, double _Complex *temp, double *alpha, double *beta, double *gam,
+  double lambda)
+{
+  int j,k;
+  double _Complex* it1 = temp;
+  double _Complex* it2 = y;
+  double _Complex aux;
+
+  /* Compute final result by multiplying with the constant lambda */
+  a[0] = 0.0;
+  for (j = 0; j <= M; j++)
+  {
+    it2[j] = lambda * y[j];
+    a[0] += it2[j];
+  }
+
+  if (N > 0)
+  {
+    /* Compute final step. */
+    a[1] = 0.0;
+    for (j = 0; j <= M; j++)
+    {
+      it1[j] = it2[j];
+      it2[j] = it2[j] * (alpha[0] * x[j] + beta[0]);
+      a[1] += it2[j];
+    }
+
+    for (k = 2; k <= N; k++)
+    {
+      a[k] = 0.0;
+      for (j = 0; j <= M; j++)
+      {
+        aux = it1[j];
+        it1[j] = it2[j];
+        it2[j] = it2[j]*(alpha[k-1] * x[j] + beta[k-1]) + gam[k-1] * aux;
+        a[k] += it2[j];
+      }
+    }
+  }
+}
+
+
+fpt_set fpt_init(const int M, const int t, const unsigned int flags)
+{
+  /** Polynomial length */
+  int plength;
+  /** Cascade level */
+  int tau;
+  /** Index m */
+  int m;
+  int k;
+#ifdef _OPENMP
+  int nthreads = nfft_get_omp_num_threads();
+#endif
+
+  /* Allocate memory for new DPT set. */
+  fpt_set_s *set = (fpt_set_s*)nfft_malloc(sizeof(fpt_set_s));
+
+  /* Save parameters in structure. */
+  set->flags = flags;
+
+  set->M = M;
+  set->t = t;
+  set->N = 1<<t;
+
+  /* Allocate memory for M transforms. */
+  set->dpt = (fpt_data*) nfft_malloc(M*sizeof(fpt_data));
+
+  /* Initialize with NULL pointer. */
+  for (m = 0; m < set->M; m++)
+    set->dpt[m].steps = 0;
+
+  /* Create arrays with Chebyshev nodes. */
+
+  /* Initialize array with Chebyshev coefficients for the polynomial x. This
+   * would be trivially an array containing a 1 as second entry with all other
+   * coefficients set to zero. In order to compensate for the multiplicative
+   * factor 2 introduced by the DCT-III, we set this coefficient to 0.5 here. */
+
+  /* Allocate memory for array of pointers to node arrays. */
+  set->xcvecs = (double**) nfft_malloc((set->t)*sizeof(double*));
+  /* For each polynomial length starting with 4, compute the Chebyshev nodes
+   * using a DCT-III. */
+  plength = 4;
+  for (tau = 1; tau < t+1; tau++)
+  {
+    /* Allocate memory for current array. */
+    set->xcvecs[tau-1] = (double*) nfft_malloc(plength*sizeof(double));
+    for (k = 0; k < plength; k++)
+    {
+      set->xcvecs[tau-1][k] = cos(((k+0.5)*PI)/plength);
+    }
+    plength = plength << 1;
+  }
+
+  /** Allocate memory for auxilliary arrays. */
+  set->work = (double _Complex*) nfft_malloc((2*set->N)*sizeof(double _Complex));
+  set->result = (double _Complex*) nfft_malloc((2*set->N)*sizeof(double _Complex));
+
+  set->lengths = (int*) nfft_malloc((set->t/*-1*/)*sizeof(int));
+  set->plans_dct2 = (fftw_plan*) nfft_malloc(sizeof(fftw_plan)*(set->t/*-1*/));
+  set->kindsr     = (fftw_r2r_kind*) nfft_malloc(2*sizeof(fftw_r2r_kind));
+  set->kindsr[0]  = FFTW_REDFT10;
+  set->kindsr[1]  = FFTW_REDFT10;
+  for (tau = 0, plength = 4; tau < set->t/*-1*/; tau++, plength<<=1)
+  {
+    set->lengths[tau] = plength;
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+    fftw_plan_with_nthreads(nthreads);
+#endif
+    set->plans_dct2[tau] =
+      fftw_plan_many_r2r(1, &set->lengths[tau], 2, (double*)set->work, NULL,
+                         2, 1, (double*)set->result, NULL, 2, 1,set->kindsr,
+                         0);
+#ifdef _OPENMP
+}
+#endif
+  }
+
+  /* Check if fast transform is activated. */
+  if (!(set->flags & FPT_NO_FAST_ALGORITHM))
+  {
+    /** Allocate memory for auxilliary arrays. */
+    set->vec3 = (double _Complex*) nfft_malloc(set->N*sizeof(double _Complex));
+    set->vec4 = (double _Complex*) nfft_malloc(set->N*sizeof(double _Complex));
+    set->z = (double _Complex*) nfft_malloc(set->N*sizeof(double _Complex));
+
+    /** Initialize FFTW plans. */
+    set->plans_dct3 = (fftw_plan*) nfft_malloc(sizeof(fftw_plan)*(set->t/*-1*/));
+    set->kinds      = (fftw_r2r_kind*) nfft_malloc(2*sizeof(fftw_r2r_kind));
+    set->kinds[0]   = FFTW_REDFT01;
+    set->kinds[1]   = FFTW_REDFT01;
+    for (tau = 0, plength = 4; tau < set->t/*-1*/; tau++, plength<<=1)
+    {
+      set->lengths[tau] = plength;
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+    fftw_plan_with_nthreads(nthreads);
+#endif
+      set->plans_dct3[tau] =
+        fftw_plan_many_r2r(1, &set->lengths[tau], 2, (double*)set->work, NULL,
+                           2, 1, (double*)set->result, NULL, 2, 1, set->kinds,
+                           0);
+#ifdef _OPENMP
+}
+#endif
+    }
+    nfft_free(set->lengths);
+    nfft_free(set->kinds);
+    nfft_free(set->kindsr);
+    set->lengths = NULL;
+    set->kinds = NULL;
+    set->kindsr = NULL;
+  }
+
+  if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+  {
+    set->xc_slow = (double*) nfft_malloc((set->N+1)*sizeof(double));
+    set->temp = (double _Complex*) nfft_malloc((set->N+1)*sizeof(double _Complex));
+  }
+
+  /* Return the newly created DPT set. */
+  return set;
+}
+
+void fpt_precompute(fpt_set set, const int m, double *alpha, double *beta,
+  double *gam, int k_start, const double threshold)
+{
+
+  int tau;          /**< Cascade level                                       */
+  int l;            /**< Level index                                         */
+  int plength;      /**< Length of polynomials for the next level in the
+                         cascade                                             */
+  int degree;       /**< Degree of polynomials for the current level in the
+                         cascade                                             */
+  int firstl;       /**< First index l for current cascade level             */
+  int lastl;        /**< Last index l for current cascade level and current  */
+  int plength_stab; /**< Length of polynomials for the next level in the
+                         cascade for stabilization                           */
+  int degree_stab;  /**< Degree of polynomials for the current level in the
+                         cascade for stabilization                           */
+  double *a11;      /**< Array containing function values of the
+                         (1,1)-component of U_k^n.                           */
+  double *a12;      /**< Array containing function values of the
+                         (1,2)-component of U_k^n.                           */
+  double *a21;      /**< Array containing function values of the
+                         (2,1)-component of U_k^n.                           */
+  double *a22;      /**< Array containing function values of the
+                         (2,2)-component of U_k^n.                           */
+  const double *calpha;
+  const double *cbeta;
+  const double *cgamma;
+  int needstab = 0; /**< Used to indicate that stabilization is neccessary.  */
+  int k_start_tilde;
+  int N_tilde;
+  int clength;
+  int clength_1;
+  int clength_2;
+  int t_stab, N_stab;
+  fpt_data *data;
+
+  /* Get pointer to DPT data. */
+  data = &(set->dpt[m]);
+
+  /* Check, if already precomputed. */
+  if (data->steps != NULL)
+    return;
+
+  /* Save k_start. */
+  data->k_start = k_start;
+
+  data->gamma_m1 = gam[0];
+
+  /* Check if fast transform is activated. */
+  if (!(set->flags & FPT_NO_FAST_ALGORITHM))
+  {
+    /* Save recursion coefficients. */
+    data->alphaN = (double*) nfft_malloc((set->t-1)*sizeof(double _Complex));
+    data->betaN = (double*) nfft_malloc((set->t-1)*sizeof(double _Complex));
+    data->gammaN = (double*) nfft_malloc((set->t-1)*sizeof(double _Complex));
+
+    for (tau = 2; tau <= set->t; tau++)
+    {
+
+      data->alphaN[tau-2] = alpha[1<<tau];
+      data->betaN[tau-2] = beta[1<<tau];
+      data->gammaN[tau-2] = gam[1<<tau];
+    }
+
+    data->alpha_0 = alpha[1];
+    data->beta_0 = beta[1];
+
+    k_start_tilde = K_START_TILDE(data->k_start,X(next_power_of_2)(data->k_start)
+      /*set->N*/);
+    N_tilde = N_TILDE(set->N);
+
+    /* Allocate memory for the cascade with t = log_2(N) many levels. */
+    data->steps = (fpt_step**) nfft_malloc(sizeof(fpt_step*)*set->t);
+
+    /* For tau = 1,...t compute the matrices U_{n,tau,l}. */
+    plength = 4;
+    for (tau = 1; tau < set->t; tau++)
+    {
+      /* Compute auxilliary values. */
+      degree = plength>>1;
+      /* Compute first l. */
+      firstl = FIRST_L(k_start_tilde,plength);
+      /* Compute last l. */
+      lastl = LAST_L(N_tilde,plength);
+
+      /* Allocate memory for current level. This level will contain 2^{t-tau-1}
+       * many matrices. */
+      data->steps[tau] = (fpt_step*) nfft_malloc(sizeof(fpt_step)
+                         * (lastl+1));
+
+      /* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */
+      for (l = firstl; l <= lastl; l++)
+      {
+        if (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))
+        {
+          //fprintf(stderr,"fpt_precompute(%d): symmetric step\n",m);
+          //fflush(stderr);
+          clength = plength/2;
+        }
+        else
+        {
+          clength = plength;
+        }
+
+        /* Allocate memory for the components of U_{n,tau,l}. */
+        a11 = (double*) nfft_malloc(sizeof(double)*clength);
+        a12 = (double*) nfft_malloc(sizeof(double)*clength);
+        a21 = (double*) nfft_malloc(sizeof(double)*clength);
+        a22 = (double*) nfft_malloc(sizeof(double)*clength);
+
+        /* Evaluate the associated polynomials at the 2^{tau+1} Chebyshev
+         * nodes. */
+
+        /* Get the pointers to the three-term recurrence coeffcients. */
+        calpha = &(alpha[plength*l+1+1]);
+        cbeta = &(beta[plength*l+1+1]);
+        cgamma = &(gam[plength*l+1+1]);
+
+        if (set->flags & FPT_NO_STABILIZATION)
+        {
+          /* Evaluate P_{2^{tau}-2}^n(\cdot,2^{tau+1}l+2). */
+          calpha--;
+          cbeta--;
+          cgamma--;
+          eval_clenshaw2(set->xcvecs[tau-1], a11, a21, clength, clength, degree-1, calpha, cbeta,
+            cgamma);
+          eval_clenshaw2(set->xcvecs[tau-1], a12, a22, clength, clength, degree, calpha, cbeta,
+            cgamma);
+          needstab = 0;
+        }
+        else
+        {
+          calpha--;
+          cbeta--;
+          cgamma--;
+          /* Evaluate P_{2^{tau}-1}^n(\cdot,2^{tau+1}l+1). */
+          needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a11, a21, clength,
+            degree-1, calpha, cbeta, cgamma, threshold);
+          if (needstab == 0)
+          {
+            /* Evaluate P_{2^{tau}}^n(\cdot,2^{tau+1}l+1). */
+            needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a12, a22, clength,
+              degree, calpha, cbeta, cgamma, threshold);
+          }
+        }
+        
+
+        /* Check if stabilization needed. */
+        if (needstab == 0)
+        {
+          data->steps[tau][l].a11 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].a12 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].a21 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].a22 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].g = (double*) nfft_malloc(sizeof(double));
+          /* No stabilization needed. */
+          data->steps[tau][l].a11[0] = a11;
+          data->steps[tau][l].a12[0] = a12;
+          data->steps[tau][l].a21[0] = a21;
+          data->steps[tau][l].a22[0] = a22;
+          data->steps[tau][l].g[0] = gam[plength*l+1+1];
+          data->steps[tau][l].stable = true;
+        }
+        else
+        {
+          /* Stabilize. */
+          degree_stab = degree*(2*l+1);
+          X(next_power_of_2_exp)((l+1)*(1<<(tau+1)),&N_stab,&t_stab);
+
+          /* Old arrays are to small. */
+          nfft_free(a11);
+          nfft_free(a12);
+          nfft_free(a21);
+          nfft_free(a22);
+
+          data->steps[tau][l].a11 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].a12 = (double**)nfft_malloc(sizeof(double*));
+          data->steps[tau][l].a21 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].a22 = (double**) nfft_malloc(sizeof(double*));
+          data->steps[tau][l].g = (double*) nfft_malloc(sizeof(double));
+
+          plength_stab = N_stab;
+
+          if (set->flags & FPT_AL_SYMMETRY)
+          {
+            if (m <= 1)
+            {
+              /* This should never be executed */
+              clength_1 = plength_stab;
+              clength_2 = plength_stab;
+              /* Allocate memory for arrays. */
+              a11 = (double*) nfft_malloc(sizeof(double)*clength_1);
+              a12 = (double*) nfft_malloc(sizeof(double)*clength_1);
+              a21 = (double*) nfft_malloc(sizeof(double)*clength_2);
+              a22 = (double*) nfft_malloc(sizeof(double)*clength_2);
+              /* Get the pointers to the three-term recurrence coeffcients. */
+              calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);
+              eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1,
+                clength_2, degree_stab-1, calpha, cbeta, cgamma);
+              eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1,
+                clength_2, degree_stab+0, calpha, cbeta, cgamma);
+            }
+            else
+            {
+              clength = plength_stab/2;
+              if (m%2 == 0)
+              {
+                a11 = (double*) nfft_malloc(sizeof(double)*clength);
+                a12 = (double*) nfft_malloc(sizeof(double)*clength);
+                a21 = 0;
+                a22 = 0;
+                calpha = &(alpha[2]); cbeta = &(beta[2]); cgamma = &(gam[2]);
+                eval_clenshaw(set->xcvecs[t_stab-2], a11, clength,
+                  degree_stab-2, calpha, cbeta, cgamma);
+                eval_clenshaw(set->xcvecs[t_stab-2], a12, clength,
+                  degree_stab-1, calpha, cbeta, cgamma);
+              }
+              else
+              {
+                a11 = 0;
+                a12 = 0;
+                a21 = (double*) nfft_malloc(sizeof(double)*clength);
+                a22 = (double*) nfft_malloc(sizeof(double)*clength);
+                calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);
+                eval_clenshaw(set->xcvecs[t_stab-2], a21, clength,
+                  degree_stab-1,calpha, cbeta, cgamma);
+                eval_clenshaw(set->xcvecs[t_stab-2], a22, clength,
+                  degree_stab+0, calpha, cbeta, cgamma);
+              }
+            }
+          }
+          else
+          {
+            clength_1 = plength_stab;
+            clength_2 = plength_stab;
+            a11 = (double*) nfft_malloc(sizeof(double)*clength_1);
+            a12 = (double*) nfft_malloc(sizeof(double)*clength_1);
+            a21 = (double*) nfft_malloc(sizeof(double)*clength_2);
+            a22 = (double*) nfft_malloc(sizeof(double)*clength_2);
+            calpha = &(alpha[2]);
+            cbeta = &(beta[2]);
+            cgamma = &(gam[2]);
+            calpha--;
+            cbeta--;
+            cgamma--;
+            eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1, clength_2, degree_stab-1,
+              calpha, cbeta, cgamma);
+            eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1, clength_2, degree_stab+0,
+              calpha, cbeta, cgamma);
+
+          }
+          data->steps[tau][l].a11[0] = a11;
+          data->steps[tau][l].a12[0] = a12;
+          data->steps[tau][l].a21[0] = a21;
+          data->steps[tau][l].a22[0] = a22;
+
+          data->steps[tau][l].g[0] =  gam[1+1];
+          data->steps[tau][l].stable = false;
+          data->steps[tau][l].ts = t_stab;
+          data->steps[tau][l].Ns = N_stab;
+        }
+      }
+      /** Increase polynomial degree to next power of two. */
+      plength = plength << 1;
+    }
+  }
+
+  if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+  {
+    /* Check, if recurrence coefficients must be copied. */
+    if (set->flags & FPT_PERSISTENT_DATA)
+    {
+      data->_alpha = (double*) alpha;
+      data->_beta = (double*) beta;
+      data->_gamma = (double*) gam;
+    }
+    else
+    {
+      data->_alpha = (double*) nfft_malloc((set->N+1)*sizeof(double));
+      data->_beta = (double*) nfft_malloc((set->N+1)*sizeof(double));
+      data->_gamma = (double*) nfft_malloc((set->N+1)*sizeof(double));
+      memcpy(data->_alpha,alpha,(set->N+1)*sizeof(double));
+      memcpy(data->_beta,beta,(set->N+1)*sizeof(double));
+      memcpy(data->_gamma,gam,(set->N+1)*sizeof(double));
+    }
+  }
+}
+
+void fpt_trafo_direct(fpt_set set, const int m, const double _Complex *x, double _Complex *y,
+  const int k_end, const unsigned int flags)
+{
+  int j;
+  fpt_data *data = &(set->dpt[m]);
+  int Nk;
+  int tk;
+  double norm;
+  
+    //fprintf(stderr, "Executing dpt.\n");  
+
+  X(next_power_of_2_exp)(k_end+1,&Nk,&tk);
+  norm = 2.0/(Nk<<1);
+
+    //fprintf(stderr, "Norm = %e.\n", norm);  
+
+  if (set->flags & FPT_NO_DIRECT_ALGORITHM)
+  {
+    return;
+  }
+
+  if (flags & FPT_FUNCTION_VALUES)
+  {
+    /* Fill array with Chebyshev nodes. */
+    for (j = 0; j <= k_end; j++)
+    {
+      set->xc_slow[j] = cos((PI*(j+0.5))/(k_end+1));
+        //fprintf(stderr, "x[%4d] = %e.\n", j, set->xc_slow[j]);  
+    }
+
+    memset(set->result,0U,data->k_start*sizeof(double _Complex));
+    memcpy(&set->result[data->k_start],x,(k_end-data->k_start+1)*sizeof(double _Complex));
+
+    /*eval_sum_clenshaw(k_end, k_end, set->result, set->xc_slow,
+      y, set->work, &data->alpha[1], &data->beta[1], &data->gamma[1],
+      data->gamma_m1);*/
+    eval_sum_clenshaw_fast(k_end, k_end, set->result, set->xc_slow,
+      y, &data->_alpha[1], &data->_beta[1], &data->_gamma[1], data->gamma_m1);
+  }
+  else
+  {
+    memset(set->temp,0U,data->k_start*sizeof(double _Complex));
+    memcpy(&set->temp[data->k_start],x,(k_end-data->k_start+1)*sizeof(double _Complex));
+
+    eval_sum_clenshaw_fast(k_end, Nk-1, set->temp, set->xcvecs[tk-2],
+      set->result, &data->_alpha[1], &data->_beta[1], &data->_gamma[1],
+      data->gamma_m1);
+
+    fftw_execute_r2r(set->plans_dct2[tk-2],(double*)set->result,
+      (double*)set->result);
+
+    set->result[0] *= 0.5;
+    for (j = 0; j < Nk; j++)
+    {
+      set->result[j] *= norm;
+    }
+
+    memcpy(y,set->result,(k_end+1)*sizeof(double _Complex));
+  }
+}
+
+void fpt_trafo(fpt_set set, const int m, const double _Complex *x, double _Complex *y,
+  const int k_end, const unsigned int flags)
+{
+  /* Get transformation data. */
+  fpt_data *data = &(set->dpt[m]);
+  /** */
+  int Nk;
+  /** */
+  int tk;
+  /** */
+  int k_start_tilde;
+  /** */
+  int k_end_tilde;
+
+  /** Level index \f$tau\f$ */
+  int tau;
+  /** Index of first block at current level */
+  int firstl;
+  /** Index of last block at current level */
+  int lastl;
+  /** Block index \f$l\f$ */
+  int l;
+  /** Length of polynomial coefficient arrays at next level */
+  int plength;
+  /** Polynomial array length for stabilization */
+  int plength_stab;
+  int t_stab;
+  /** Current matrix \f$U_{n,tau,l}\f$ */
+  fpt_step *step;
+  /** */
+  fftw_plan plan = 0;
+  int length = k_end+1;
+  fftw_r2r_kind kinds[2] = {FFTW_REDFT01,FFTW_REDFT01};
+
+  /** Loop counter */
+  int k;
+
+  double _Complex *work_ptr;
+  const double _Complex *x_ptr;
+
+  /* Check, if slow transformation should be used due to small bandwidth. */
+  if (k_end < FPT_BREAK_EVEN)
+  {
+    /* Use NDSFT. */
+    fpt_trafo_direct(set, m, x, y, k_end, flags);
+    return;
+  }
+
+  X(next_power_of_2_exp)(k_end,&Nk,&tk);
+  k_start_tilde = K_START_TILDE(data->k_start,Nk);
+  k_end_tilde = K_END_TILDE(k_end,Nk);
+
+  /* Check if fast transform is activated. */
+  if (set->flags & FPT_NO_FAST_ALGORITHM)
+    return;
+
+  if (flags & FPT_FUNCTION_VALUES)
+  {
+#ifdef _OPENMP
+    int nthreads = nfft_get_omp_num_threads();
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+    fftw_plan_with_nthreads(nthreads);
+#endif
+    plan = fftw_plan_many_r2r(1, &length, 2, (double*)set->work, NULL, 2, 1,
+      (double*)set->work, NULL, 2, 1, kinds, 0U);
+#ifdef _OPENMP
+}
+#endif
+  }
+
+  /* Initialize working arrays. */
+  memset(set->result,0U,2*Nk*sizeof(double _Complex));
+
+  /* The first step. */
+
+  /* Set the first 2*data->k_start coefficients to zero. */
+  memset(set->work,0U,2*data->k_start*sizeof(double _Complex));
+
+  work_ptr = &set->work[2*data->k_start];
+  x_ptr = x;
+
+  for (k = 0; k <= k_end_tilde-data->k_start; k++)
+  {
+    *work_ptr++ = *x_ptr++;
+    *work_ptr++ = K(0.0);
+  }
+
+  /* Set the last 2*(set->N-1-k_end_tilde) coefficients to zero. */
+  memset(&set->work[2*(k_end_tilde+1)],0U,2*(Nk-1-k_end_tilde)*sizeof(double _Complex));
+
+  /* If k_end == Nk, use three-term recurrence to map last coefficient x_{Nk} to
+   * x_{Nk-1} and x_{Nk-2}. */
+  if (k_end == Nk)
+  {
+    set->work[2*(Nk-2)] += data->gammaN[tk-2]*x[Nk-data->k_start];
+    set->work[2*(Nk-1)] += data->betaN[tk-2]*x[Nk-data->k_start];
+    set->work[2*(Nk-1)+1] = data->alphaN[tk-2]*x[Nk-data->k_start];
+  }
+
+  /* Compute the remaining steps. */
+  plength = 4;
+  for (tau = 1; tau < tk; tau++)
+  {
+    /* Compute first l. */
+    firstl = FIRST_L(k_start_tilde,plength);
+    /* Compute last l. */
+    lastl = LAST_L(k_end_tilde,plength);
+
+    /* Compute the multiplication steps. */
+    for (l = firstl; l <= lastl; l++)
+    {
+      /* Copy vectors to multiply into working arrays zero-padded to twice the length. */
+      memcpy(set->vec3,&(set->work[(plength/2)*(4*l+2)]),(plength/2)*sizeof(double _Complex));
+      memcpy(set->vec4,&(set->work[(plength/2)*(4*l+3)]),(plength/2)*sizeof(double _Complex));
+      memset(&set->vec3[plength/2],0U,(plength/2)*sizeof(double _Complex));
+      memset(&set->vec4[plength/2],0U,(plength/2)*sizeof(double _Complex));
+
+      /* Copy coefficients into first half. */
+      memcpy(&(set->work[(plength/2)*(4*l+2)]),&(set->work[(plength/2)*(4*l+1)]),(plength/2)*sizeof(double _Complex));
+      memset(&(set->work[(plength/2)*(4*l+1)]),0U,(plength/2)*sizeof(double _Complex));
+      memset(&(set->work[(plength/2)*(4*l+3)]),0U,(plength/2)*sizeof(double _Complex));
+
+      /* Get matrix U_{n,tau,l} */
+      step = &(data->steps[tau][l]);
+
+      /* Check if step is stable. */
+      if (step->stable)
+      {
+        /* Check, if we should do a symmetrizised step. */
+        if (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))
+        {
+          /*for (k = 0; k < plength; k++)
+          {
+            fprintf(stderr,"fpt_trafo: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",
+              step->a11[0][k],step->a12[0][k],step->a21[0][k],step->a22[0][k]);
+          }*/
+          /* Multiply third and fourth polynomial with matrix U. */
+          //fprintf(stderr,"\nhallo\n");
+          fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0],
+            step->a12[0], step->a21[0], step->a22[0], step->g[0], tau, set);
+        }
+        else
+        {
+          /* Multiply third and fourth polynomial with matrix U. */
+          fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+            step->a21[0], step->a22[0], step->g[0], tau, set);
+        }
+
+        if (step->g[0] != 0.0)
+        {
+          for (k = 0; k < plength; k++)
+          {
+            set->work[plength*2*l+k] += set->vec3[k];
+          }
+        }
+        for (k = 0; k < plength; k++)
+        {
+          set->work[plength*(2*l+1)+k] += set->vec4[k];
+        }
+      }
+      else
+      {
+        /* Stabilize. */
+
+        /* The lengh of the polynomials */
+        plength_stab = step->Ns;
+        t_stab = step->ts;
+
+        /*---------*/
+        /*fprintf(stderr,"\nfpt_trafo: stabilizing at tau = %d, l = %d.\n",tau,l);
+        fprintf(stderr,"\nfpt_trafo: plength_stab = %d.\n",plength_stab);
+        fprintf(stderr,"\nfpt_trafo: tk = %d.\n",tk);
+        fprintf(stderr,"\nfpt_trafo: index = %d.\n",tk-tau-1);*/
+        /*---------*/
+
+        /* Set rest of vectors explicitely to zero */
+        /*fprintf(stderr,"fpt_trafo: stabilizing: plength = %d, plength_stab = %d\n",
+          plength, plength_stab);*/
+        memset(&set->vec3[plength/2],0U,(plength_stab-plength/2)*sizeof(double _Complex));
+        memset(&set->vec4[plength/2],0U,(plength_stab-plength/2)*sizeof(double _Complex));
+
+        /* Multiply third and fourth polynomial with matrix U. */
+        /* Check for symmetry. */
+        if (set->flags & FPT_AL_SYMMETRY)
+        {
+          if (m <= 1)
+          {
+            fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+          }
+          else if (m%2 == 0)
+          {
+            /*fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+            fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0],
+              set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+            /*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+          }
+          else
+          {
+            /*fpt_do_step_symmetric_l(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+            fpt_do_step_symmetric_l(set->vec3, set->vec4,
+              step->a11[0], step->a12[0],
+              step->a21[0],
+              step->a22[0], set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+            /*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+          }
+        }
+        else
+        {
+            fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+        }
+
+        if (step->g[0] != 0.0)
+        {
+          for (k = 0; k < plength_stab; k++)
+          {
+            set->result[k] += set->vec3[k];
+          }
+        }
+
+        for (k = 0; k < plength_stab; k++)
+        {
+          set->result[Nk+k] += set->vec4[k];
+        }
+      }
+    }
+    /* Double length of polynomials. */
+    plength = plength<<1;
+
+    /*--------*/
+    /*for (k = 0; k < 2*Nk; k++)
+    {
+      fprintf(stderr,"work[%2d] = %le + I*%le\tresult[%2d] = %le + I*%le\n",
+        k,creal(set->work[k]),cimag(set->work[k]),k,creal(set->result[k]),
+        cimag(set->result[k]));
+    }*/
+    /*--------*/
+  }
+
+  /* Add the resulting cascade coeffcients to the coeffcients accumulated from
+   * the stabilization steps. */
+  for (k = 0; k < 2*Nk; k++)
+  {
+    set->result[k] += set->work[k];
+  }
+
+  /* The last step. Compute the Chebyshev coeffcients c_k^n from the
+   * polynomials in front of P_0^n and P_1^n. */
+  y[0] = data->gamma_m1*(set->result[0] + data->beta_0*set->result[Nk] +
+    data->alpha_0*set->result[Nk+1]*0.5);
+  y[1] = data->gamma_m1*(set->result[1] + data->beta_0*set->result[Nk+1]+
+    data->alpha_0*(set->result[Nk]+set->result[Nk+2]*0.5));
+  y[k_end-1] = data->gamma_m1*(set->result[k_end-1] +
+    data->beta_0*set->result[Nk+k_end-1] +
+    data->alpha_0*set->result[Nk+k_end-2]*0.5);
+  y[k_end] = data->gamma_m1*(0.5*data->alpha_0*set->result[Nk+k_end-1]);
+  for (k = 2; k <= k_end-2; k++)
+  {
+    y[k] = data->gamma_m1*(set->result[k] + data->beta_0*set->result[Nk+k] +
+      data->alpha_0*0.5*(set->result[Nk+k-1]+set->result[Nk+k+1]));
+  }
+
+  if (flags & FPT_FUNCTION_VALUES)
+  {
+    y[0] *= 2.0;
+    fftw_execute_r2r(plan,(double*)y,(double*)y);
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+    fftw_destroy_plan(plan);
+    for (k = 0; k <= k_end; k++)
+    {
+      y[k] *= 0.5;
+    }
+  }
+}
+
+void fpt_transposed_direct(fpt_set set, const int m, double _Complex *x,
+  double _Complex *y, const int k_end, const unsigned int flags)
+{
+  int j;
+  fpt_data *data = &(set->dpt[m]);
+  int Nk;
+  int tk;
+  double norm;
+
+  X(next_power_of_2_exp)(k_end+1,&Nk,&tk);
+  norm = 2.0/(Nk<<1);
+
+  if (set->flags & FPT_NO_DIRECT_ALGORITHM)
+  {
+    return;
+  }
+
+  if (flags & FPT_FUNCTION_VALUES)
+  {
+    for (j = 0; j <= k_end; j++)
+    {
+      set->xc_slow[j] = cos((PI*(j+0.5))/(k_end+1));
+    }
+
+    eval_sum_clenshaw_transposed(k_end, k_end, set->result, set->xc_slow,
+      y, set->work, &data->_alpha[1], &data->_beta[1], &data->_gamma[1],
+      data->gamma_m1);
+
+    memcpy(x,&set->result[data->k_start],(k_end-data->k_start+1)*
+      sizeof(double _Complex));
+  }
+  else
+  {
+    memcpy(set->result,y,(k_end+1)*sizeof(double _Complex));
+    memset(&set->result[k_end+1],0U,(Nk-k_end-1)*sizeof(double _Complex));
+
+    for (j = 0; j < Nk; j++)
+    {
+      set->result[j] *= norm;
+    }
+
+    fftw_execute_r2r(set->plans_dct3[tk-2],(double*)set->result,
+      (double*)set->result);
+
+    eval_sum_clenshaw_transposed(k_end, Nk-1, set->temp, set->xcvecs[tk-2],
+      set->result, set->work, &data->_alpha[1], &data->_beta[1], &data->_gamma[1],
+      data->gamma_m1);
+
+    memcpy(x,&set->temp[data->k_start],(k_end-data->k_start+1)*sizeof(double _Complex));
+  }
+}
+
+void fpt_transposed(fpt_set set, const int m, double _Complex *x,
+  double _Complex *y, const int k_end, const unsigned int flags)
+{
+  /* Get transformation data. */
+  fpt_data *data = &(set->dpt[m]);
+  /** */
+  int Nk;
+  /** */
+  int tk;
+  /** */
+  int k_start_tilde;
+  /** */
+  int k_end_tilde;
+
+  /** Level index \f$tau\f$ */
+  int tau;
+  /** Index of first block at current level */
+  int firstl;
+  /** Index of last block at current level */
+  int lastl;
+  /** Block index \f$l\f$ */
+  int l;
+  /** Length of polynomial coefficient arrays at next level */
+  int plength;
+  /** Polynomial array length for stabilization */
+  int plength_stab;
+  /** Current matrix \f$U_{n,tau,l}\f$ */
+  fpt_step *step;
+  /** */
+  fftw_plan plan;
+  int length = k_end+1;
+  fftw_r2r_kind kinds[2] = {FFTW_REDFT10,FFTW_REDFT10};
+  /** Loop counter */
+  int k;
+  int t_stab;
+
+  /* Check, if slow transformation should be used due to small bandwidth. */
+  if (k_end < FPT_BREAK_EVEN)
+  {
+    /* Use NDSFT. */
+    fpt_transposed_direct(set, m, x, y, k_end, flags);
+    return;
+  }
+
+  X(next_power_of_2_exp)(k_end,&Nk,&tk);
+  k_start_tilde = K_START_TILDE(data->k_start,Nk);
+  k_end_tilde = K_END_TILDE(k_end,Nk);
+
+  /* Check if fast transform is activated. */
+  if (set->flags & FPT_NO_FAST_ALGORITHM)
+  {
+    return;
+  }
+
+  if (flags & FPT_FUNCTION_VALUES)
+  {
+#ifdef _OPENMP
+    int nthreads = nfft_get_omp_num_threads();
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+    fftw_plan_with_nthreads(nthreads);
+#endif
+    plan = fftw_plan_many_r2r(1, &length, 2, (double*)set->work, NULL, 2, 1,
+      (double*)set->work, NULL, 2, 1, kinds, 0U);
+#ifdef _OPENMP
+}
+#endif
+    fftw_execute_r2r(plan,(double*)y,(double*)set->result);
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+    fftw_destroy_plan(plan);
+    for (k = 0; k <= k_end; k++)
+    {
+      set->result[k] *= 0.5;
+    }
+  }
+  else
+  {
+    memcpy(set->result,y,(k_end+1)*sizeof(double _Complex));
+  }
+
+  /* Initialize working arrays. */
+  memset(set->work,0U,2*Nk*sizeof(double _Complex));
+
+  /* The last step is now the first step. */
+  for (k = 0; k <= k_end; k++)
+  {
+    set->work[k] = data->gamma_m1*set->result[k];
+  }
+  //memset(&set->work[k_end+1],0U,(Nk+1-k_end)*sizeof(double _Complex));
+
+  set->work[Nk] = data->gamma_m1*(data->beta_0*set->result[0] +
+    data->alpha_0*set->result[1]);
+  for (k = 1; k < k_end; k++)
+  {
+    set->work[Nk+k] = data->gamma_m1*(data->beta_0*set->result[k] +
+      data->alpha_0*0.5*(set->result[k-1]+set->result[k+1]));
+  }
+  if (k_end<Nk)
+  {
+    memset(&set->work[k_end],0U,(Nk-k_end)*sizeof(double _Complex));
+  }
+
+  /** Save copy of inpute data for stabilization steps. */
+  memcpy(set->result,set->work,2*Nk*sizeof(double _Complex));
+
+  /* Compute the remaining steps. */
+  plength = Nk;
+  for (tau = tk-1; tau >= 1; tau--)
+  {
+    /* Compute first l. */
+    firstl = FIRST_L(k_start_tilde,plength);
+    /* Compute last l. */
+    lastl = LAST_L(k_end_tilde,plength);
+
+    /* Compute the multiplication steps. */
+    for (l = firstl; l <= lastl; l++)
+    {
+      /* Initialize second half of coefficient arrays with zeros. */
+      memcpy(set->vec3,&(set->work[(plength/2)*(4*l+0)]),plength*sizeof(double _Complex));
+      memcpy(set->vec4,&(set->work[(plength/2)*(4*l+2)]),plength*sizeof(double _Complex));
+
+      memcpy(&set->work[(plength/2)*(4*l+1)],&(set->work[(plength/2)*(4*l+2)]),
+        (plength/2)*sizeof(double _Complex));
+
+      /* Get matrix U_{n,tau,l} */
+      step = &(data->steps[tau][l]);
+
+      /* Check if step is stable. */
+      if (step->stable)
+      {
+        if (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))
+        {
+          /* Multiply third and fourth polynomial with matrix U. */
+          fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],
+            step->a21[0], step->a22[0], step->g[0], tau, set);
+        }
+        else
+        {
+          /* Multiply third and fourth polynomial with matrix U. */
+          fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],
+            step->a21[0], step->a22[0], step->g[0], tau, set);
+        }
+        memcpy(&(set->vec3[plength/2]), set->vec4,(plength/2)*sizeof(double _Complex));
+
+        for (k = 0; k < plength; k++)
+        {
+          set->work[plength*(4*l+2)/2+k] = set->vec3[k];
+        }
+      }
+      else
+      {
+        /* Stabilize. */
+        plength_stab = step->Ns;
+        t_stab = step->ts;
+
+        memcpy(set->vec3,set->result,plength_stab*sizeof(double _Complex));
+        memcpy(set->vec4,&(set->result[Nk]),plength_stab*sizeof(double _Complex));
+
+        /* Multiply third and fourth polynomial with matrix U. */
+        if (set->flags & FPT_AL_SYMMETRY)
+        {
+          if (m <= 1)
+          {
+            fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+          }
+          else if (m%2 == 0)
+          {
+            fpt_do_step_t_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+          }
+          else
+          {
+            fpt_do_step_t_symmetric_l(set->vec3, set->vec4,
+              step->a21[0], step->a22[0], set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+          }
+        }
+        else
+        {
+            fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],
+              step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+        }
+
+        memcpy(&(set->vec3[plength/2]),set->vec4,(plength/2)*sizeof(double _Complex));
+
+        for (k = 0; k < plength; k++)
+        {
+          set->work[(plength/2)*(4*l+2)+k] = set->vec3[k];
+        }
+       }
+    }
+    /* Half the length of polynomial arrays. */
+    plength = plength>>1;
+  }
+
+  /* First step */
+  for (k = 0; k <= k_end_tilde-data->k_start; k++)
+  {
+    x[k] = set->work[2*(data->k_start+k)];
+  }
+  if (k_end == Nk)
+  {
+    x[Nk-data->k_start] =
+        data->gammaN[tk-2]*set->work[2*(Nk-2)]
+      + data->betaN[tk-2] *set->work[2*(Nk-1)]
+      + data->alphaN[tk-2]*set->work[2*(Nk-1)+1];
+  }
+}
+
+void fpt_finalize(fpt_set set)
+{
+  int tau;
+  int l;
+  int m;
+  fpt_data *data;
+  int k_start_tilde;
+  int N_tilde;
+  int firstl, lastl;
+  int plength;
+  const int M = set->M;
+
+  /* TODO Clean up DPT transform data structures. */
+  for (m = 0; m < M; m++)
+  {
+    /* Check if precomputed. */
+    data = &set->dpt[m];
+    if (data->steps != (fpt_step**)NULL)
+    {
+      nfft_free(data->alphaN);
+      nfft_free(data->betaN);
+      nfft_free(data->gammaN);
+      data->alphaN = NULL;
+      data->betaN = NULL;
+      data->gammaN = NULL;
+
+      /* Free precomputed data. */
+      k_start_tilde = K_START_TILDE(data->k_start,X(next_power_of_2)(data->k_start)
+        /*set->N*/);
+      N_tilde = N_TILDE(set->N);
+      plength = 4;
+      for (tau = 1; tau < set->t; tau++)
+      {
+        /* Compute first l. */
+        firstl = FIRST_L(k_start_tilde,plength);
+        /* Compute last l. */
+        lastl = LAST_L(N_tilde,plength);
+
+        /* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */
+        for (l = firstl; l <= lastl; l++)
+        {
+          /* Free components. */
+          nfft_free(data->steps[tau][l].a11[0]);
+          nfft_free(data->steps[tau][l].a12[0]);
+          nfft_free(data->steps[tau][l].a21[0]);
+          nfft_free(data->steps[tau][l].a22[0]);
+          data->steps[tau][l].a11[0] = NULL;
+          data->steps[tau][l].a12[0] = NULL;
+          data->steps[tau][l].a21[0] = NULL;
+          data->steps[tau][l].a22[0] = NULL;
+          /* Free components. */
+          nfft_free(data->steps[tau][l].a11);
+          nfft_free(data->steps[tau][l].a12);
+          nfft_free(data->steps[tau][l].a21);
+          nfft_free(data->steps[tau][l].a22);
+          nfft_free(data->steps[tau][l].g);
+          data->steps[tau][l].a11 = NULL;
+          data->steps[tau][l].a12 = NULL;
+          data->steps[tau][l].a21 = NULL;
+          data->steps[tau][l].a22 = NULL;
+          data->steps[tau][l].g = NULL;
+        }
+        /* Free pointers for current level. */
+        nfft_free(data->steps[tau]);
+        data->steps[tau] = NULL;
+        /* Double length of polynomials. */
+        plength = plength<<1;
+      }
+      /* Free steps. */
+      nfft_free(data->steps);
+      data->steps = NULL;
+    }
+
+    if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+    {
+      /* Check, if recurrence coefficients must be copied. */
+      //fprintf(stderr,"\nfpt_finalize: %d\n",set->flags & FPT_PERSISTENT_DATA);
+      if (!(set->flags & FPT_PERSISTENT_DATA))
+      {
+        nfft_free(data->_alpha);
+        nfft_free(data->_beta);
+        nfft_free(data->_gamma);
+      }
+      data->_alpha = NULL;
+      data->_beta = NULL;
+      data->_gamma = NULL;
+    }
+  }
+
+  /* Delete array of DPT transform data. */
+  nfft_free(set->dpt);
+  set->dpt = NULL;
+
+  for (tau = 1; tau < set->t+1; tau++)
+  {
+    nfft_free(set->xcvecs[tau-1]);
+    set->xcvecs[tau-1] = NULL;
+  }
+  nfft_free(set->xcvecs);
+  set->xcvecs = NULL;
+
+  /* Free auxilliary arrays. */
+  nfft_free(set->work);
+  nfft_free(set->result);
+
+  /* Check if fast transform is activated. */
+  if (!(set->flags & FPT_NO_FAST_ALGORITHM))
+  {
+    /* Free auxilliary arrays. */
+    nfft_free(set->vec3);
+    nfft_free(set->vec4);
+    nfft_free(set->z);
+    set->work = NULL;
+    set->result = NULL;
+    set->vec3 = NULL;
+    set->vec4 = NULL;
+    set->z = NULL;
+
+    /* Free FFTW plans. */
+    for(tau = 0; tau < set->t/*-1*/; tau++)
+    {
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+      fftw_destroy_plan(set->plans_dct3[tau]);
+      fftw_destroy_plan(set->plans_dct2[tau]);
+}
+      set->plans_dct3[tau] = NULL;
+      set->plans_dct2[tau] = NULL;
+    }
+
+    nfft_free(set->plans_dct3);
+    nfft_free(set->plans_dct2);
+    set->plans_dct3 = NULL;
+    set->plans_dct2 = NULL;
+  }
+
+  if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+  {
+    /* Delete arrays of Chebyshev nodes. */
+    nfft_free(set->xc_slow);
+    set->xc_slow = NULL;
+    nfft_free(set->temp);
+    set->temp = NULL;
+  }
+
+  /* Free DPT set structure. */
+  nfft_free(set);
+}
diff --git a/kernel/fpt/fpt.h b/kernel/fpt/fpt.h
new file mode 100644
index 0000000..fdb5d04
--- /dev/null
+++ b/kernel/fpt/fpt.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fpt.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+#ifndef _FPT_H_
+#define _FPT_H_
+
+/**
+ * Holds data for a single multiplication step in the cascade summation.
+ */
+typedef struct fpt_step_
+{
+  bool stable;                            /**< Indicates if the values
+                                               contained represent a fast or
+                                               a slow stabilized step.        */
+  int Ns;                                 /**< TODO Add comment here.         */
+  int ts;                                 /**< TODO Add comment here.         */
+  double **a11,**a12,**a21,**a22;         /**< The matrix components          */
+  double *g;                              /**<                                */
+} fpt_step;
+
+/**
+ * Holds data for a single cascade summation.
+ */
+typedef struct fpt_data_
+{
+  fpt_step **steps;                       /**< The cascade summation steps    */
+  int k_start;                            /**< TODO Add comment here.         */
+  double *alphaN;                         /**< TODO Add comment here.         */
+  double *betaN;                          /**< TODO Add comment here.         */
+  double *gammaN;                         /**< TODO Add comment here.         */
+  double alpha_0;                         /**< TODO Add comment here.         */
+  double beta_0;                          /**< TODO Add comment here.         */
+  double gamma_m1;                        /**< TODO Add comment here.         */
+  /* Data for direct transform. */        /**< TODO Add comment here.         */
+  double *alpha;                          /**< TODO Add comment here.         */
+  double *beta;                           /**< TODO Add comment here.         */
+  double *gamma;                          /**< TODO Add comment here.         */
+} fpt_data;
+
+/**
+ * Holds data for a set of cascade summations.
+ */
+typedef struct fpt_set_s_
+{
+  unsigned int flags;                     /**< The flags                     */
+  int M;                                  /**< The number of DPT transforms  */
+  int N;                                  /**< The transform length. Must be
+                                               a power of two.               */
+  int t;                                  /**< The exponent of N             */
+  fpt_data *dpt;                          /**< The DPT transform data        */
+  double **xcvecs;                        /**< Array of pointers to arrays
+                                               containing the Chebyshev
+                                               nodes                         */
+  double *xc;                             /**< Array for Chebychev-nodes.    */
+  double _Complex *temp;                          /**< */
+  double _Complex *work;                          /**< */
+  double _Complex *result;                        /**< */
+  double _Complex *vec3;
+  double _Complex *vec4;
+  double _Complex *z;
+  fftw_plan *plans_dct3;                  /**< Transform plans for the fftw
+                                               library                       */
+  fftw_plan *plans_dct2;                  /**< Transform plans for the fftw
+                                               library                       */
+  fftw_r2r_kind *kinds;                   /**< Transform kinds for fftw
+                                               library                       */
+  fftw_r2r_kind *kindsr;                  /**< Transform kinds for fftw
+                                               library                       */
+
+  int *lengths; /**< Transform lengths for fftw library */
+
+  /* Data for slow transforms. */
+  double *xc_slow;
+} fpt_set_s;
+
+#endif /*_FPT_H_*/
diff --git a/kernel/mri/Makefile.am b/kernel/mri/Makefile.am
new file mode 100644
index 0000000..e747e6c
--- /dev/null
+++ b/kernel/mri/Makefile.am
@@ -0,0 +1,5 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libmri.la
+
+libmri_la_SOURCES = mri.c 
diff --git a/kernel/mri/Makefile.in b/kernel/mri/Makefile.in
new file mode 100644
index 0000000..9b3b6d8
--- /dev/null
+++ b/kernel/mri/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/mri
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmri_la_LIBADD =
+am_libmri_la_OBJECTS = mri.lo
+libmri_la_OBJECTS = $(am_libmri_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libmri_la_SOURCES)
+DIST_SOURCES = $(libmri_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libmri.la
+libmri_la_SOURCES = mri.c 
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/mri/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/mri/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libmri.la: $(libmri_la_OBJECTS) $(libmri_la_DEPENDENCIES) $(EXTRA_libmri_la_DEPENDENCIES) 
+	$(LINK)  $(libmri_la_OBJECTS) $(libmri_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mri.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/mri/mri.c b/kernel/mri/mri.c
new file mode 100644
index 0000000..2cdbab3
--- /dev/null
+++ b/kernel/mri/mri.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: mri.c 3965 2013-04-22 12:12:31Z tovo $ */
+
+#include "config.h"
+
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * window_funct_plan is a plan to use the window functions
+ * independent of the nfft
+ */
+
+typedef struct window_funct_plan_ {
+  int d;
+	int m;
+	int n[1];
+	double sigma[1];
+	double *b;
+  double *spline_coeffs;                /**< input for de Boor algorithm, if
+                                             B_SPLINE or SINC_2m is defined   */
+} window_funct_plan;
+
+/**
+ * init the window_funct_plan
+ */
+static void window_funct_init(window_funct_plan* ths, int m, int n, double sigma) {
+	ths->d=1;
+	ths->m=m;
+	ths->n[0]=n;
+	ths->sigma[0]=sigma;
+  WINDOW_HELP_INIT
+}
+
+/*
+ * mri_inh_2d1d
+ */
+
+void mri_inh_2d1d_trafo(mri_inh_2d1d_plan *that) {
+  int l,j;
+  double _Complex *f = (double _Complex*) nfft_malloc(that->M_total*sizeof(double _Complex));
+  double _Complex *f_hat = (double _Complex*) nfft_malloc(that->N_total*sizeof(double _Complex));
+
+  window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+	window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+	/* the pointers that->f and that->f_hat have been modified by the solver */
+	that->plan.f = that->f;
+  that->plan.f_hat = that->f_hat;
+
+
+	memset(f,0,that->M_total*sizeof(double _Complex));
+  for(j=0;j<that->N_total;j++)
+  {
+    f_hat[j]=that->f_hat[j];
+  }
+
+  for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
+    for(j=0;j<that->N_total;j++)
+      that->f_hat[j]*=cexp(-2*PI*_Complex_I*that->w[j]*((double)l))/PHI_HUT(ths->n[0]*that->w[j],0);
+    nfft_trafo(&that->plan);
+    for(j=0;j<that->M_total;j++){
+      /* PHI has compact support */
+			if(fabs(that->t[j]-((double)l)/((double)ths->n[0]))<that->plan.m/((double)ths->n[0]))
+      {
+        double phi_val = PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+        f[j]+=that->f[j]*phi_val;
+// the line below causes internal compiler error for gcc 4.7.1
+//        f[j]+=that->f[j]*PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+      }
+    }
+    for(j=0;j<that->N_total;j++)
+      that->f_hat[j]=f_hat[j];
+  }
+
+  nfft_free(that->plan.f);
+  that->f=f;
+  that->plan.f = that->f;
+
+  nfft_free(f_hat);
+
+  WINDOW_HELP_FINALIZE
+  nfft_free(ths);
+}
+
+void mri_inh_2d1d_adjoint(mri_inh_2d1d_plan *that) {
+  int l,j;
+  double _Complex *f = (double _Complex*) nfft_malloc(that->M_total*sizeof(double _Complex));
+  double _Complex *f_hat = (double _Complex*) nfft_malloc(that->N_total*sizeof(double _Complex));
+
+  window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+	window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+	memset(f_hat,0,that->N_total*sizeof(double _Complex));
+
+	/* the pointers that->f and that->f_hat have been modified by the solver */
+	that->plan.f = that->f;
+  that->plan.f_hat = that->f_hat;
+
+	for(j=0;j<that->M_total;j++)
+  {
+    f[j]=that->f[j];
+  }
+
+
+
+  for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
+
+    for(j=0;j<that->M_total;j++) {
+      /* PHI has compact support */
+      if(fabs(that->t[j]-((double)l)/((double)ths->n[0]))<that->plan.m/((double)ths->n[0]))
+        that->f[j]*=PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+      else
+      	that->f[j]=0.0;
+    }
+    nfft_adjoint(&that->plan);
+    for(j=0;j<that->N_total;j++)
+      f_hat[j]+=that->f_hat[j]*cexp(2*PI*_Complex_I*that->w[j]*((double)l));
+    for(j=0;j<that->M_total;j++)
+      that->f[j]=f[j];
+  }
+
+  for(j=0;j<that->N_total;j++)
+  {
+    f_hat[j] /= PHI_HUT(ths->n[0]*that->w[j],0);
+  }
+
+  nfft_free(that->plan.f_hat);
+  that->f_hat=f_hat;
+  that->plan.f_hat = that->f_hat;
+
+	nfft_free(f);
+
+	WINDOW_HELP_FINALIZE
+  nfft_free(ths);
+}
+
+void mri_inh_2d1d_init_guru(mri_inh_2d1d_plan *ths, int *N, int M, int *n,
+                    int m, double sigma, unsigned nfft_flags, unsigned fftw_flags) {
+
+  nfft_init_guru(&ths->plan,2,N,M,n,m,nfft_flags,fftw_flags);
+  ths->N3=N[2];
+	ths->sigma3=sigma;
+  ths->N_total = ths->plan.N_total;
+  ths->M_total = ths->plan.M_total;
+  ths->f = ths->plan.f;
+  ths->f_hat = ths->plan.f_hat;
+
+  ths->t = (double*) nfft_malloc(ths->M_total*sizeof(double));
+  ths->w = (double*) nfft_malloc(ths->N_total*sizeof(double));
+
+  ths->mv_trafo = (void (*) (void* ))mri_inh_2d1d_trafo;
+  ths->mv_adjoint = (void (*) (void* ))mri_inh_2d1d_adjoint;
+}
+
+void mri_inh_2d1d_finalize(mri_inh_2d1d_plan *ths) {
+  nfft_free(ths->t);
+  nfft_free(ths->w);
+
+	/* the pointers ths->f and ths->f_hat have been modified by the solver */
+	ths->plan.f = ths->f;
+  ths->plan.f_hat = ths->f_hat;
+
+	nfft_finalize(&ths->plan);
+}
+
+/*
+ * mri_inh_3d
+ */
+
+void mri_inh_3d_trafo(mri_inh_3d_plan *that) {
+  int l,j;
+  window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+	window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+	/* the pointers that->f has been modified by the solver */
+  that->plan.f =that->f ;
+
+
+
+  for(j=0;j<that->N_total;j++) {
+    for(l=-ths->n[0]/2;l<ths->n[0]/2;l++)
+    {
+      /* PHI has compact support */
+      if(fabs(that->w[j]-((double)l)/((double)ths->n[0]))<ths->m/((double)ths->n[0]))
+        that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]= that->f_hat[j]*PHI(that->w[j]-((double)l)/((double)ths->n[0]),0);
+      else
+	      that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]=0.0;
+    }
+  }
+
+  nfft_trafo(&that->plan);
+
+  for(j=0;j<that->M_total;j++)
+  {
+    that->f[j] /= PHI_HUT(ths->n[0]*that->plan.x[3*j+2],0);
+  }
+
+	WINDOW_HELP_FINALIZE
+  nfft_free(ths);
+}
+
+void mri_inh_3d_adjoint(mri_inh_3d_plan *that) {
+  int l,j;
+  window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+	window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+	/* the pointers that->f has been modified by the solver */
+  that->plan.f =that->f ;
+
+  for(j=0;j<that->M_total;j++)
+  {
+    that->f[j] /= PHI_HUT(ths->n[0]*that->plan.x[3*j+2],0);
+  }
+
+  nfft_adjoint(&that->plan);
+
+  for(j=0;j<that->N_total;j++) {
+    that->f_hat[j]=0.0;
+    for(l=-ths->n[0]/2;l<ths->n[0]/2;l++)
+    {
+      /* PHI has compact support */
+      if(fabs(that->w[j]-((double)l)/((double)ths->n[0]))<ths->m/((double)ths->n[0]))
+        that->f_hat[j]+= that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]*PHI(that->w[j]-((double)l)/((double)ths->n[0]),0);
+    }
+  }
+
+
+	WINDOW_HELP_FINALIZE
+  nfft_free(ths);
+}
+
+void mri_inh_3d_init_guru(mri_inh_3d_plan *ths, int *N, int M, int *n,
+                    int m, double sigma, unsigned nfft_flags, unsigned fftw_flags) {
+  ths->N3=N[2];
+	ths->sigma3=sigma;
+  nfft_init_guru(&ths->plan,3,N,M,n,m,nfft_flags,fftw_flags);
+  ths->N_total = N[0]*N[1];
+  ths->M_total = ths->plan.M_total;
+  ths->f = ths->plan.f;
+  ths->f_hat = (double _Complex*) nfft_malloc(ths->N_total*sizeof(double _Complex));
+  ths->w = (double*) nfft_malloc(ths->N_total*sizeof(double));
+
+  ths->mv_trafo = (void (*) (void* ))mri_inh_3d_trafo;
+  ths->mv_adjoint = (void (*) (void* ))mri_inh_3d_adjoint;
+}
+
+void mri_inh_3d_finalize(mri_inh_3d_plan *ths) {
+  nfft_free(ths->w);
+  nfft_free(ths->f_hat);
+  nfft_finalize(&ths->plan);
+}
diff --git a/kernel/nfct/Makefile.am b/kernel/nfct/Makefile.am
new file mode 100644
index 0000000..ac3fe30
--- /dev/null
+++ b/kernel/nfct/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnfct.la
+
+libnfct_la_SOURCES = nfct.c 
+
diff --git a/kernel/nfct/Makefile.in b/kernel/nfct/Makefile.in
new file mode 100644
index 0000000..b9fc453
--- /dev/null
+++ b/kernel/nfct/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfct
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfct_la_LIBADD =
+am_libnfct_la_OBJECTS = nfct.lo
+libnfct_la_OBJECTS = $(am_libnfct_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfct_la_SOURCES)
+DIST_SOURCES = $(libnfct_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnfct.la
+libnfct_la_SOURCES = nfct.c 
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfct/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nfct/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfct.la: $(libnfct_la_OBJECTS) $(libnfct_la_DEPENDENCIES) $(EXTRA_libnfct_la_DEPENDENCIES) 
+	$(LINK)  $(libnfct_la_OBJECTS) $(libnfct_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfct.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfct/nfct.c b/kernel/nfct/nfct.c
new file mode 100644
index 0000000..a6fc00d
--- /dev/null
+++ b/kernel/nfct/nfct.c
@@ -0,0 +1,926 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfct.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* Nonequispaced fast cosine transform
+ * Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#undef X
+#if defined(NFFT_SINGLE)
+#define X(name) CONCAT(nfctf_, name)
+#elif defined(NFFT_LDOUBLE)
+#define X(name) CONCAT(nfctl_, name)
+#else
+#define X(name) CONCAT(nfct_, name)
+#endif
+
+static inline int fftw_2N(int n)
+{
+  return 2 * (n - 1);
+}
+
+static inline int fftw_2N_rev(int n)
+{
+  return (LRINT(K(0.5) * n) + 1);
+}
+
+static inline int prod_int(int *vec, int d)
+{
+  int t, prod = 1;
+
+  for (t = 0; t < d; t++)
+    prod *= vec[t];
+
+  return prod;
+}
+
+/* handy shortcuts */
+#define NFCT_DEFAULT_FLAGS PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | \
+  MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE
+
+#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+#define NFCT_SUMMANDS (2 * ths->m + 2)
+#define NODE(p,r) (ths->x[(p) * ths->d + (r)])
+
+#define MACRO_ndct_init_result_trafo \
+  memset(f, 0, ths->M_total * sizeof(R));
+#define MACRO_ndct_init_result_adjoint \
+  memset(f_hat, 0, ths->N_total * sizeof(R));
+
+#define MACRO_nfct_D_init_result_A \
+  memset(g_hat, 0, prod_int(ths->n, ths->d) * sizeof(R));
+#define MACRO_nfct_D_init_result_T \
+  memset(f_hat, 0, ths->N_total * sizeof(R));
+
+#define MACRO_nfct_B_init_result_A \
+  memset(f, 0, ths->M_total * sizeof(R));
+#define MACRO_nfct_B_init_result_T \
+  memset(g, 0, prod_int(ths->n, ths->d) * sizeof(R));
+
+#define NFCT_PRE_WINFUN(d) ths->N[d] = 2 * ths->N[d]; \
+  ths->n[d] = fftw_2N(ths->n[d]);
+
+#define NFCT_POST_WINFUN(d) ths->N[d] = LRINT(K(0.5) * ths->N[d]); \
+  ths->n[d] = fftw_2N_rev(ths->n[d]);
+
+#define NFCT_WINDOW_HELP_INIT WINDOW_HELP_INIT
+
+R X(phi_hut)(X(plan) *ths, int k, int d)
+{
+  NFCT_PRE_WINFUN(d);
+  R phi_hut_tmp = PHI_HUT(k, d);
+  NFCT_POST_WINFUN(d);
+
+  return phi_hut_tmp;
+}
+
+R X(phi)(X(plan) *ths, R x, int d)
+{
+  NFCT_PRE_WINFUN(d);
+  R phi_tmp = PHI(x, d);
+  NFCT_POST_WINFUN(d);
+
+  return phi_tmp;
+}
+
+#define MACRO_with_cos_vec cos_vec[t][ka[t]]
+#define MACRO_without_cos_vec COS(K(2.0) * KPI * ka[t] * NODE(j,t))
+
+#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];
+#define MACRO_compute_PHI_HUT_INV (K(1.0) / (X(phi_hut)(ths, kg[t], t)))
+
+#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]]
+#define MACRO_compute_PSI X(phi)(ths, NODE(j,t) - ((R)(lc[t] + lb[t])) / (K(2.0)*((R)(ths->n[t])-K(1.0))/*(R)(fftw_2N(ths->n[t]))*/), t)
+
+/** direct computation of non equispaced cosine transforms
+ *  nfct_trafo_direct,  nfct_adjoint_direct
+ *  require O(M N^d) arithemtical operations
+ *
+ * direct computation of the nfct_trafo_direct, formula (1.1)
+ * nfct_trafo_direct:
+ * for j=0,...,M-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * cos(2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint_direct, formula (1.2)
+ * nfct_adjoint_direct:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
+ */
+
+#define MACRO_ndct_malloc__cos_vec \
+  R **cos_vec; \
+  cos_vec = (R**)Y(malloc)(ths->d * sizeof(R*)); \
+  for (t = 0; t < ths->d; t++) \
+    cos_vec[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));
+
+#define MACRO_ndct_free__cos_vec \
+{ \
+  /* free allocated memory */ \
+  for (t = 0; t < ths->d; t++) \
+    Y(free)(cos_vec[t]); \
+  Y(free)(cos_vec); \
+}
+
+#define MACRO_ndct_init__cos_vec \
+{ \
+  for(t = 0; t < ths->d; t++) \
+  { \
+    cos_vec[t][0] = K(1.0); \
+    cos_vec[t][1] = COS(K(2.0) * KPI * NODE(j,t)); \
+    for (k = 2; k < ths->N[t]; k++) \
+      cos_vec[t][k] = K(2.0) * cos_vec[t][1] * cos_vec[t][k-1] - \
+        cos_vec[t][k-2]; \
+  } \
+}
+
+#define MACRO_ndct_init__k__cos_k(which_one) \
+{ \
+  cos_k[0] = K(1.0); \
+  for (t = 0; t < ths->d; t++) \
+    ka[t] = 0; \
+\
+  for (t = 0; t < ths->d; t++) \
+  { \
+    cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \
+  } \
+}
+
+#define MACRO_ndct_count__k__cos_k(which_one) \
+{ \
+  ka[ths->d-1]++; \
+  i = ths->d - 1; \
+  while ((ka[i] == ths->N[i]) && (i > 0)) \
+  { \
+    ka[i - 1]++; \
+    ka[i] = 0; \
+    i--; \
+  } \
+  for (t = i; t < ths->d; t++) \
+    cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \
+}
+
+#define MACRO_ndct_compute__trafo \
+{ \
+  f[j] += f_hat[k] * cos_k[ths->d]; \
+}
+
+#define MACRO_ndct_compute__adjoint \
+{ \
+  f_hat[k] += f[j] * cos_k[ths->d]; \
+}
+
+/* slow (trafo) transform */
+#define MACRO_ndct(which_one) \
+  void X(which_one ## _direct) (X(plan) *ths) \
+  { \
+    int j, k, t, i; \
+    int ka[ths->d]; \
+    R cos_k[ths->d+1]; \
+    R *f = ths->f; \
+    R *f_hat = ths->f_hat; \
+\
+    MACRO_ndct_init_result_ ## which_one; \
+    if (ths->d == 1) \
+      for (j = 0; j < ths->M_total; j++) \
+      { \
+        for (k = 0; k < ths->N[0]; k++) \
+        { \
+          cos_k[ths->d] = COS(K(2.0) * KPI * k * NODE(j,0)); \
+          MACRO_ndct_compute__ ## which_one; \
+        } \
+      } \
+    else \
+    { \
+      /* fast nfct_trafo_direct */ \
+      MACRO_ndct_malloc__cos_vec; \
+\
+      for (j = 0; j < ths->M_total; j++) \
+      { \
+        MACRO_ndct_init__cos_vec; \
+        MACRO_ndct_init__k__cos_k(with_cos_vec); \
+\
+        for (k = 0; k < ths->N_total; k++) \
+        { \
+          MACRO_ndct_compute__ ## which_one; \
+          MACRO_ndct_count__k__cos_k(with_cos_vec); \
+        } \
+      } \
+      MACRO_ndct_free__cos_vec; \
+    } \
+} /* ndct_{trafo, adjoint} */
+
+MACRO_ndct(trafo)
+MACRO_ndct(adjoint)
+
+/** fast computation of non equispaced cosine transforms
+*  require O(N^d log(N) + M) arithemtical operations
+*
+* fast computation of the nfct_trafo, formula (1.1)
+* nfct_trafo:
+* for j=0,...,M-1
+*  f[j] = sum_{k in I_N^d} f_hat[k] * cos(2 (pi) k x[j])
+*
+* direct computation of the nfct_adjoint, formula (1.2)
+* nfct_adjoint:
+* for k in I_N^d
+*  f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
+*/
+
+#define MACRO_nfct__lower_boundary(j,act_dim) \
+{ \
+  lb[(act_dim)] = \
+    LRINT(NODE((j),(act_dim)) * fftw_2N(ths->n[(act_dim)])) - ths->m; \
+}
+
+#define MACRO_nfct_D_compute_A \
+{ \
+  g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_nfct_D_compute_T \
+{ \
+  f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_init__kg \
+{ \
+  for (t = 0; t < ths->d; t++) \
+    kg[t] = 0; \
+  i = 0; \
+}
+
+#define MACRO_count__kg \
+{ \
+\
+  kg[ths->d - 1]++; \
+  i = ths->d - 1; \
+  while ((kg[i] == ths->N[i]) && (i > 0)) \
+  { \
+    kg[i - 1]++; \
+    kg[i] = 0; \
+    i--; \
+  } \
+}
+
+#define MACRO_update__phi_inv_k__kg_plain(what_kind, which_phi) \
+{ \
+  for (t = i; t < ths->d; t++) \
+  { \
+    MACRO__c_phi_inv_k__ ## what_kind(which_phi); \
+    kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \
+  } \
+}
+
+#define MACRO__c_phi_inv_k__A(which_phi) \
+{ \
+  if (kg[t] == 0) \
+  { \
+    c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \
+  } \
+  else \
+  { \
+    c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \
+  } \
+}
+
+#define MACRO__c_phi_inv_k__T(which_phi) \
+{ \
+  c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \
+}
+
+#define MACRO_nfct_D(which_one) \
+static inline void D_ ## which_one (X(plan) *ths) \
+{ \
+  int k_L; /* plain index */ \
+  int i, t; \
+  int kg[ths->d]; /* multi index in g_hat,c_phi */ \
+  R c_phi_inv_k[ths->d+1]; /* postfix product of PHI_HUT_INV */ \
+  int kg_plain[ths->d+1]; /* postfix plain index */ \
+  R *g_hat, *f_hat; /* local copy */ \
+\
+  g_hat = ths->g_hat; \
+  f_hat = ths->f_hat; \
+\
+  MACRO_nfct_D_init_result_ ## which_one \
+\
+  c_phi_inv_k[0] = K(1.0); \
+  kg_plain[0] = 0; \
+\
+  MACRO_init__kg; \
+\
+  if (ths->nfct_flags & PRE_PHI_HUT) \
+    for (k_L = 0; k_L < ths->N_total; k_L++) \
+    { \
+      MACRO_update__phi_inv_k__kg_plain(which_one, with_PRE_PHI_HUT); \
+      MACRO_nfct_D_compute_ ## which_one; \
+      MACRO_count__kg; \
+    } /* for (k_L) */ \
+  else \
+    for (k_L = 0; k_L < ths->N_total; k_L++) \
+    { \
+      MACRO_update__phi_inv_k__kg_plain(which_one,compute_PHI_HUT_INV); \
+      MACRO_nfct_D_compute_ ## which_one; \
+      MACRO_count__kg; \
+    } /* for(k_L) */ \
+} /* nfct_D */
+
+MACRO_nfct_D(A)
+MACRO_nfct_D(T)
+
+/** sub routines for the fast transforms
+*  matrix vector multiplication with \f$B, B^{\rm T}\f$
+*/
+#define MACRO_nfct_B_PRE_FULL_PSI_compute_A \
+{ \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
+}
+
+#define MACRO_nfct_B_PRE_FULL_PSI_compute_T \
+{ \
+  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
+}
+
+#define MACRO_nfct_B_compute_A \
+{ \
+  (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \
+}
+
+#define MACRO_nfct_B_compute_T \
+{ \
+  g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \
+}
+
+#define MACRO_compute_lg_offset__count_lg(i0) \
+{ \
+  /* determine index in g-array corresponding to lb[(i0)] */ \
+  if (lb[(i0)] < 0) \
+    lg_offset[(i0)] = \
+      (lb[(i0)] % fftw_2N(ths->n[(i0)])) + fftw_2N(ths->n[(i0)]); \
+  else \
+    lg_offset[(i0)] = lb[(i0)] % (fftw_2N(ths->n[(i0)])); \
+    if (lg_offset[(i0)] >= ths->n[(i0)]) \
+      lg_offset[(i0)] = -(fftw_2N(ths->n[(i0)]) - lg_offset[(i0)]); \
+}
+
+#define MACRO_set__lg__to__lg_offset \
+{ \
+  if (lg_offset[i] <= 0) \
+  { \
+    lg[i] = -lg_offset[i]; \
+    count_lg[i] = -1; \
+  } \
+  else \
+  { \
+    lg[i] = +lg_offset[i]; \
+    count_lg[i] = +1; \
+  } \
+}
+
+#define MACRO_count__lg(dim) \
+{ \
+  /* turn around if we hit one of the boundaries */ \
+  if ((lg[(dim)] == 0) || (lg[(dim)] == ths->n[(dim)]-1)) \
+    count_lg[(dim)] *= -1; \
+  /* move array index */ \
+  lg[(dim)] += count_lg[(dim)]; \
+}
+
+#define MACRO_init_lb_lg_lc \
+{ \
+  for (i = 0; i < ths->d; i++) \
+  { \
+    MACRO_nfct__lower_boundary(j, i); \
+    MACRO_compute_lg_offset__count_lg(i); \
+    MACRO_set__lg__to__lg_offset; \
+    /* counter for lg */ \
+    lc[i] = 0; \
+   } \
+   i = 0; \
+}
+
+#define MACRO_count__lg_lc \
+{ \
+  MACRO_count__lg(ths->d-1); \
+  lc[ths->d - 1]++; \
+  i = ths->d - 1; \
+  while ((lc[i] == NFCT_SUMMANDS) && (i > 0)) \
+  { \
+    lc[i - 1]++; \
+    lc[i] = 0; \
+    /* ansonsten lg[i-1] verschieben */ \
+    MACRO_count__lg(i - 1); \
+    /* lg[i] = anfangswert */ \
+    MACRO_set__lg__to__lg_offset; \
+    i--; \
+  } \
+}
+
+#define  MACRO_update_phi_tilde_lg_plain(which_one, which_psi) \
+{ \
+  for (t = i; t < ths->d; t++) \
+  { \
+    MACRO__phi_tilde__ ## which_one(which_psi); \
+    lg_plain[t+1]  = lg_plain[t]  * ths->n[t] + lg[t]; \
+  } \
+}
+
+#define MACRO__phi_tilde__A(which_psi) \
+{ \
+  phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \
+}
+
+#define MACRO__phi_tilde__T(which_psi) \
+{ \
+  if(lg[t] == 0 || lg[t] == ths->n[t] - 1) \
+  { \
+    phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \
+  } \
+  else \
+  { \
+    phi_tilde[t+1] = K(0.5) * phi_tilde[t] * MACRO_ ## which_psi; \
+  } \
+}
+
+#define MACRO_nfct_B(which_one) \
+static inline void B_ ## which_one (nfct_plan *ths) \
+{ /* MACRO_nfct_B */ \
+  int lb[ths->d]; /* multi band with respect to x_j */ \
+  int j, t, i; /* index nodes, help vars */ \
+  int lprod, l_L, ix; /* index one row of B */ \
+  int lc[ths->d]; /* multi index 0<=lc<2m+2 */ \
+  int lg[ths->d]; /* real index of g in array */ \
+  int lg_offset[ths->d]; /* offset in g according to u */ \
+  int count_lg[ths->d]; /* count summands (2m+2) */ \
+  int lg_plain[ths->d+1]; /* index of g in multi_array */ \
+  R *f, *g; /* local copy */ \
+  R phi_tilde[ths->d+1]; /* holds values for psi */ \
+  R *fj; /* pointer to final result */ \
+\
+  f = ths->f; g = ths->g; \
+\
+  MACRO_nfct_B_init_result_ ## which_one \
+\
+  /* both flags are set */ \
+  if ((ths->nfct_flags & PRE_PSI)&&(ths->nfct_flags & PRE_FULL_PSI)) \
+  { \
+    for (ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
+      { \
+        MACRO_nfct_B_PRE_FULL_PSI_compute_ ## which_one; \
+      } \
+  } \
+  else \
+  { \
+    phi_tilde[0] = K(1.0); \
+    lg_plain[0]  = 0; \
+\
+    for (t = 0, lprod = 1; t < ths->d; t++) \
+      lprod *= NFCT_SUMMANDS; \
+\
+    /* PRE_PSI flag is set */ \
+    if (ths->nfct_flags & PRE_PSI) \
+      for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+        { \
+          MACRO_init_lb_lg_lc; \
+          for (l_L = 0; l_L < lprod; l_L++) \
+          { \
+            MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \
+            MACRO_nfct_B_compute_ ## which_one; \
+            MACRO_count__lg_lc; \
+          } /* for(l_L) */ \
+        } /* for(j) */ \
+\
+    /* no PSI flag is set */ \
+    else \
+      for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+      { \
+        MACRO_init_lb_lg_lc; \
+        for (l_L = 0; l_L < lprod; l_L++) \
+        { \
+          MACRO_update_phi_tilde_lg_plain(which_one,compute_PSI); \
+          MACRO_nfct_B_compute_ ## which_one; \
+          MACRO_count__lg_lc; \
+        } /* for (l_L) */ \
+      } /* for (j) */ \
+  } /* else (PRE_PSI && FULL_PRE_PSI) */ \
+} /* nfct_B */
+
+MACRO_nfct_B(A)
+MACRO_nfct_B(T)
+
+/* more memory, but faster */
+#define MACRO_nfct_full_psi(which_one) \
+static inline void full_psi__ ## which_one(nfct_plan *ths) \
+{ \
+  int t, i; /* index over all dimensions */ \
+  int j; /* node index */ \
+  int l_L; /* plain index 0 <= l_L < lprod */ \
+  int lc[ths->d]; /* multi index 0<=lj<u+o+1 */ \
+  int lg_plain[ths->d+1]; /* postfix plain index */ \
+  int count_lg[ths->d]; \
+  int lg_offset[ths->d]; \
+  int lg[ths->d]; \
+  int lprod; /* 'bandwidth' of matrix B */ \
+  int lb[ths->d]; /* depends on x_j */ \
+\
+  R phi_tilde[ths->d+1]; \
+  R eps = ths->nfct_full_psi_eps; \
+\
+  int *index_g, *index_f; \
+  R *new_psi; \
+  int ix, ix_old, size_psi; \
+\
+  phi_tilde[0] = K(1.0); \
+  lg_plain[0]  =   0; \
+ \
+  if (ths->nfct_flags & PRE_PSI) \
+  { \
+    size_psi = ths->M_total; \
+    index_f = (int*)Y(malloc)(ths->M_total  * sizeof(int)); \
+    index_g = (int*)Y(malloc)(size_psi * sizeof(int)); \
+    new_psi = (R*)Y(malloc)(size_psi * sizeof(R)); \
+\
+    for (t = 0,lprod = 1; t < ths->d; t++) \
+    { \
+      lprod *= NFCT_SUMMANDS; \
+      eps *= nfct_phi(ths, K(0.0), t); \
+    } \
+\
+    for (ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++) \
+    { \
+      MACRO_init_lb_lg_lc; \
+\
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \
+\
+        if (phi_tilde[ths->d] > eps) \
+        { \
+          index_g[ix] = lg_plain[ths->d]; \
+          new_psi[ix] = phi_tilde[ths->d]; \
+\
+          ix++; \
+          if (ix == size_psi) \
+          { \
+            size_psi += ths->M_total; \
+            index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \
+            new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \
+          } \
+        } \
+\
+        MACRO_count__lg_lc; \
+\
+      } /* for (l_L) */ \
+\
+      index_f[j] = ix - ix_old; \
+      ix_old = ix; \
+\
+    } /* for(j) */ \
+\
+    Y(free)(ths->psi); \
+    size_psi = ix; \
+    ths->size_psi = size_psi; \
+\
+    index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \
+    new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \
+\
+    ths->psi = new_psi; \
+    ths->psi_index_g = index_g; \
+    ths->psi_index_f = index_f; \
+\
+  } /* if(PRE_PSI) */ \
+}
+
+MACRO_nfct_full_psi(A)
+MACRO_nfct_full_psi(T)
+
+/* user routines */
+
+void X(trafo)(X(plan) *ths)
+{
+  /* use ths->my_fftw_r2r_plan */
+  ths->g_hat = ths->g1;
+  ths->g = ths->g2;
+
+  /* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+   * k \in I_N \f$ */
+  TIC(0)
+  D_A(ths);
+  TOC(0)
+
+  /* Compute by d-variate discrete Fourier transform
+   * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+   * \text{ for } l \in I_n \f$ */
+  TIC(1)
+  Z(execute)(ths->my_fftw_r2r_plan);
+  TOC(1)
+
+  if (ths->nfct_flags & PRE_FULL_PSI)
+    full_psi__A(ths);
+
+  /* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+   * \text{ for } j=0,\hdots,M-1 \f$ */
+  TIC(2)
+  B_A(ths);
+  TOC(2)
+
+  if (ths->nfct_flags & PRE_FULL_PSI)
+  {
+    Y(free)(ths->psi_index_g);
+    Y(free)(ths->psi_index_f);
+  }
+} /* nfct_trafo */
+
+void X(adjoint)(X(plan) *ths)
+{
+  /* use ths->my_fftw_plan */
+  ths->g_hat = ths->g2;
+  ths->g = ths->g1;
+
+  if (ths->nfct_flags & PRE_FULL_PSI)
+    full_psi__T(ths);
+
+  /* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+   * \text{ for } l \in I_n,m(x_j) \f$ */
+  TIC(2)
+  B_T(ths);
+  TOC(2)
+
+  if (ths->nfct_flags & PRE_FULL_PSI)
+  {
+    Y(free)(ths->psi_index_g);
+    Y(free)(ths->psi_index_f);
+  }
+
+  /* Compute by d-variate discrete cosine transform
+   * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+   * \text{ for }  k \in I_N\f$ */
+  TIC(1)
+  Z(execute)(ths->my_fftw_r2r_plan);
+  TOC(1)
+
+  /* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+   * k \in I_N \f$ */
+  TIC(0)
+  D_T(ths);
+  TOC(0)
+
+} /* nfct_adjoint */
+
+static inline void precompute_phi_hut(X(plan) *ths)
+{
+  int kg[ths->d]; /* index over all frequencies */
+  int t; /* index over all dimensions */
+
+  ths->c_phi_inv = (R**)Y(malloc)(ths->d * sizeof(R*));
+
+  for (t = 0; t < ths->d; t++)
+  {
+    ths->c_phi_inv[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));
+
+    for (kg[t] = 0; kg[t] < ths->N[t]; kg[t]++)
+    {
+      ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;
+    }
+  }
+} /* nfct_phi_hut */
+
+void X(precompute_psi)(X(plan) *ths)
+{
+  int t; /* index over all dimensions */
+  int j; /* index over all nodes */
+  int lc[ths->d]; /* index 0<=lj<u+o+1 */
+  int lb[ths->d]; /* depends on x_j */
+
+  for (t = 0; t < ths->d; t++)
+  {
+    for (j = 0; j < ths->M_total; j++)
+    {
+      MACRO_nfct__lower_boundary(j, t);
+      for(lc[t] = 0; lc[t] < NFCT_SUMMANDS; lc[t]++)
+	      ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]] = MACRO_compute_PSI;
+    } /* for (j) */
+  } /* for (t) */
+} /* nfct_precompute_psi */
+
+static inline void init_help(X(plan) *ths)
+{
+  int t; /* index over all dimensions */
+
+  ths->N_total = prod_int(ths->N, ths->d);
+  ths->sigma = (R*)Y(malloc)(ths->d * sizeof(R));
+
+  for (t = 0; t < ths->d; t++)
+    ths->sigma[t] = ((R)(ths->n[t] - 1)) / ths->N[t];
+
+  /* Assign r2r transform kinds for each dimension */
+  ths->r2r_kind = (Z(r2r_kind)*)Y(malloc)(ths->d * sizeof (Z(r2r_kind)));
+  for (t = 0; t < ths->d; t++)
+    ths->r2r_kind[t] = FFTW_REDFT00;
+
+  NFCT_WINDOW_HELP_INIT;
+
+  if (ths->nfct_flags & MALLOC_X)
+    ths->x = (R*)Y(malloc)(ths->d * ths->M_total * sizeof(R));
+
+  if (ths->nfct_flags & MALLOC_F_HAT)
+    ths->f_hat = (R*)Y(malloc)(ths->N_total * sizeof(R));
+
+  if (ths->nfct_flags & MALLOC_F)
+    ths->f = (R*)Y(malloc)(ths->M_total * sizeof(R));
+
+  if (ths->nfct_flags & PRE_PHI_HUT)
+    precompute_phi_hut(ths);
+
+  /* NO FFTW_MALLOC HERE */
+  if (ths->nfct_flags & PRE_PSI)
+  {
+    ths->psi =
+      (R*)Y(malloc)(ths->M_total * ths->d * NFCT_SUMMANDS * sizeof(R));
+
+    /* Set default for full_psi_eps */
+    ths->nfct_full_psi_eps = POW(K(10.0), K(-10.0));
+  }
+
+  if (ths->nfct_flags & FFTW_INIT)
+  {
+    ths->g1 =
+      (R*)Y(malloc)(prod_int(ths->n, ths->d) * sizeof(R));
+
+    if (ths->nfct_flags & FFT_OUT_OF_PLACE)
+      ths->g2 =
+	      (R*) Y(malloc)(prod_int(ths->n, ths->d) * sizeof(R));
+    else
+      ths->g2 = ths->g1;
+
+    ths->my_fftw_r2r_plan =
+      Z(plan_r2r)(ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind,
+        ths->fftw_flags);
+  }
+
+  ths->mv_trafo = (void (*) (void* ))X(trafo);
+  ths->mv_adjoint = (void (*) (void* ))X(adjoint);
+}
+
+void X(init)(X(plan) *ths, int d, int *N, int M_total)
+{
+  int t;
+
+  ths->d = d;
+  ths->M_total = M_total;
+  ths->N = (int*) Y(malloc)(ths->d * sizeof(int));
+
+  for (t = 0;t < d; t++)
+    ths->N[t] = N[t];
+
+  ths->n = (int*) Y(malloc)(ths->d * sizeof(int));
+
+  for (t = 0; t < d; t++)
+    ths->n[t] = fftw_2N(Y(next_power_of_2)(ths->N[t]));
+
+/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+
+  WINDOW_HELP_ESTIMATE_m;
+*/
+  ths->nfct_flags = NFCT_DEFAULT_FLAGS;
+  ths->fftw_flags = FFTW_DEFAULT_FLAGS;
+
+  init_help(ths);
+}
+
+/* Was macht diese Funktion. Wird sie gebraucht? Bei NFST ist sie auch in
+ * nfft3.h deklariert.
+void nfct_init_m(nfct_plan *ths, int d, int *N, int M_total, int m)
+{
+  int t, n[d];
+
+  for(t = 0; t < d; t++)
+    n[t] = fftw_2N(X(next_power_of_2)(N[t]));
+
+  nfct_init_guru(ths, d, N, M_total, n, m, NFCT_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);
+}
+*/
+
+void X(init_guru)(X(plan) *ths, int d, int *N, int M_total, int *n, int m,
+  unsigned nfct_flags, unsigned fftw_flags)
+{
+  int t; /* index over all dimensions */
+
+  ths->d = d;
+  ths->M_total = M_total;
+
+  ths->N = (int*)Y(malloc)(ths->d * sizeof(int));
+
+  for (t = 0; t < d; t++)
+    ths->N[t] = N[t];
+
+  ths->n = (int*)Y(malloc)(ths->d * sizeof(int));
+
+  for (t = 0; t < d; t++)
+    ths->n[t] = n[t];
+
+  ths->m = m;
+
+  ths->nfct_flags = nfct_flags;
+  ths->fftw_flags = fftw_flags;
+
+  init_help(ths);
+}
+
+void X(init_1d)(X(plan) *ths, int N0, int M_total)
+{
+  int N[1];
+
+  N[0] = N0;
+  X(init)(ths, 1, N, M_total);
+}
+
+void X(init_2d)(X(plan) *ths, int N0, int N1, int M_total)
+{
+  int N[2];
+
+  N[0] = N0;
+  N[1] = N1;
+  X(init)(ths, 2, N, M_total);
+}
+
+void X(init_3d)(X(plan) *ths, int N0, int N1, int N2, int M_total)
+{
+  int N[3];
+
+  N[0] = N0;
+  N[1] = N1;
+  N[2] = N2;
+  X(init)(ths, 3, N, M_total);
+}
+
+void X(finalize)(X(plan) *ths)
+{
+  int t; /* dimension index*/
+
+  if (ths->nfct_flags & FFTW_INIT)
+  {
+    Z(destroy_plan)(ths->my_fftw_r2r_plan);
+
+    if (ths->nfct_flags & FFT_OUT_OF_PLACE)
+      Y(free)(ths->g2);
+
+    Y(free)(ths->g1);
+  }
+
+  /* NO FFTW_FREE HERE */
+  if (ths->nfct_flags & PRE_PSI)
+  {
+    Y(free)(ths->psi);
+  }
+
+  if (ths->nfct_flags & PRE_PHI_HUT)
+  {
+    for (t = 0; t < ths->d; t++)
+      Y(free)(ths->c_phi_inv[t]);
+    Y(free)(ths->c_phi_inv);
+  }
+
+  if (ths->nfct_flags & MALLOC_F)
+    Y(free)(ths->f);
+
+  if(ths->nfct_flags & MALLOC_F_HAT)
+    Y(free)(ths->f_hat);
+
+  if (ths->nfct_flags & MALLOC_X)
+    Y(free)(ths->x);
+
+  WINDOW_HELP_FINALIZE;
+
+  Y(free)(ths->N);
+  Y(free)(ths->n);
+  Y(free)(ths->sigma);
+
+  Y(free)(ths->r2r_kind);
+} /* nfct_finalize */
diff --git a/kernel/nfft/Makefile.am b/kernel/nfft/Makefile.am
new file mode 100644
index 0000000..3cedb5f
--- /dev/null
+++ b/kernel/nfft/Makefile.am
@@ -0,0 +1,17 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+  LIBNFFT_THREADS_LA = libnfft_threads.la
+else
+  LIBNFFT_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libnfft.la $(LIBNFFT_THREADS_LA)
+libnfft_la_SOURCES = nfft.c 
+
+if HAVE_THREADS
+  libnfft_threads_la_SOURCES = nfft.c
+if HAVE_OPENMP
+  libnfft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
diff --git a/kernel/nfft/Makefile.in b/kernel/nfft/Makefile.in
new file mode 100644
index 0000000..1ed75b0
--- /dev/null
+++ b/kernel/nfft/Makefile.in
@@ -0,0 +1,578 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfft_la_LIBADD =
+am_libnfft_la_OBJECTS = nfft.lo
+libnfft_la_OBJECTS = $(am_libnfft_la_OBJECTS)
+libnfft_threads_la_LIBADD =
+am__libnfft_threads_la_SOURCES_DIST = nfft.c
+ at HAVE_THREADS_TRUE@am_libnfft_threads_la_OBJECTS =  \
+ at HAVE_THREADS_TRUE@	libnfft_threads_la-nfft.lo
+libnfft_threads_la_OBJECTS = $(am_libnfft_threads_la_OBJECTS)
+libnfft_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libnfft_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libnfft_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfft_la_SOURCES) $(libnfft_threads_la_SOURCES)
+DIST_SOURCES = $(libnfft_la_SOURCES) \
+	$(am__libnfft_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@LIBNFFT_THREADS_LA = 
+ at HAVE_THREADS_TRUE@LIBNFFT_THREADS_LA = libnfft_threads.la
+noinst_LTLIBRARIES = libnfft.la $(LIBNFFT_THREADS_LA)
+libnfft_la_SOURCES = nfft.c 
+ at HAVE_THREADS_TRUE@libnfft_threads_la_SOURCES = nfft.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfft.la: $(libnfft_la_OBJECTS) $(libnfft_la_DEPENDENCIES) $(EXTRA_libnfft_la_DEPENDENCIES) 
+	$(LINK)  $(libnfft_la_OBJECTS) $(libnfft_la_LIBADD) $(LIBS)
+libnfft_threads.la: $(libnfft_threads_la_OBJECTS) $(libnfft_threads_la_DEPENDENCIES) $(EXTRA_libnfft_threads_la_DEPENDENCIES) 
+	$(libnfft_threads_la_LINK) $(am_libnfft_threads_la_rpath) $(libnfft_threads_la_OBJECTS) $(libnfft_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfft_threads_la-nfft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libnfft_threads_la-nfft.lo: nfft.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_threads_la_CFLAGS) $(CFLAGS) -MT libnfft_threads_la-nfft.lo -MD -MP -MF $(DEPDIR)/libnfft_threads_la-nfft.Tpo -c -o libnfft_threads_la-nfft.lo `test -f 'nfft.c' || echo '$(srcdir)/'`nfft.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfft_threads_la-nfft.Tpo $(DEPDIR)/libnfft_threads_la-nfft.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft.c' object='libnfft_threads_la-nfft.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfft_threads_la-nfft.lo `test -f 'nfft.c' || echo '$(srcdir)/'`nfft.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfft/nfft.c b/kernel/nfft/nfft.c
new file mode 100644
index 0000000..517b83c
--- /dev/null
+++ b/kernel/nfft/nfft.c
@@ -0,0 +1,5878 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* Nonequispaced FFT */
+
+/* Authors: D. Potts, S. Kunis 2002-2009, Jens Keiner 2009, Toni Volkmer 2012 */
+
+/* configure header */
+#include "config.h"
+
+/* complex datatype (maybe) */
+#ifdef HAVE_COMPLEX_H
+#include<complex.h>
+#endif
+
+/* NFFT headers */
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#ifdef OMP_ASSERT
+#include <assert.h>
+#endif
+
+
+/**
+ * Sort nodes (index) to get better cache utilization during multiplication
+ * with matrix B.
+ * The resulting index set is written to ar[2*j+1], the nodes array remains
+ * unchanged.
+ *
+ * \arg n FFTW length (number of oversampled in each dimension)
+ * \arg m window length
+ * \arg local_x_num number of nodes
+ * \arg local_x nodes array
+ * \arg ar_x resulting index array
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_sort_nodes_for_better_cache_handle(int d,
+    const int *n, int m, int local_x_num, const R *local_x, int *ar_x)
+{
+  int u_j[d], i, j, help, rhigh;
+  int *ar_x_temp;
+  int nprod;
+
+  for(i = 0; i < local_x_num; i++) {
+    ar_x[2*i] = 0;
+    ar_x[2*i+1] = i;
+    for(j = 0; j < d; j++) {
+      help = (int) floor( n[j]*local_x[d*i+j] - m);
+      u_j[j] = (help%n[j]+n[j])%n[j];
+
+      ar_x[2*i] += u_j[j];
+      if (j+1 < d)
+        ar_x[2*i] *= n[j+1];
+    }
+  }
+
+  for (j = 0, nprod = 1; j < d; j++)
+    nprod *= n[j];
+
+  rhigh = (int) ceil(log2(nprod)) - 1;
+
+  ar_x_temp = (int *) nfft_malloc(2*local_x_num*sizeof(int));
+  nfft_sort_node_indices_radix_lsdf(local_x_num, ar_x, ar_x_temp, rhigh);
+#ifdef OMP_ASSERT
+  for (i = 1; i < local_x_num; i++)
+    assert(ar_x[2*(i-1)] <= ar_x[2*i]);
+#endif
+  nfft_free(ar_x_temp);
+}
+
+/**
+ * Sort nodes (index) to get better cache utilization during multiplication
+ * with matrix B.
+ * The resulting index set is written to ths->index_x[2*j+1], the nodes array
+ * remains unchanged.
+ *
+ * \arg ths nfft_plan
+ */
+static void nfft_sort_nodes(const nfft_plan *ths)
+{
+  if (ths->nfft_flags & NFFT_SORT_NODES)
+    nfft_sort_nodes_for_better_cache_handle(ths->d, ths->n, ths->m, ths->M_total, ths->x, ths->index_x);
+}
+
+/** direct computation of non equispaced fourier transforms
+ *  nfft_trafo_direct, ndft_conjugated, nfft_adjoint_direct, ndft_transposed
+ *  require O(M_total N^d) arithemtical operations
+ *
+ * direct computation of the nfft_trafo_direct and ndft_conjugated, formula (1.1)
+ * nfft_trafo_direct:
+ * for j=0,...,M_total-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])
+ * ndft_conjugated:
+ * for j=0,...,M_total-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * exp(+2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint_direct and ndft_transposed, formula (1.2)
+ * nfft_adjoint_direct:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(+2(pi) k x[j])
+ * ndft_transposed:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(-2(pi) k x[j])
+ */
+
+/* some macros to initialize arrays before executing a transformation */
+#define MACRO_ndft_init_result_trafo memset(f,0,ths->M_total*sizeof(C));
+#define MACRO_ndft_init_result_conjugated MACRO_ndft_init_result_trafo
+#define MACRO_ndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(C));
+#define MACRO_ndft_init_result_transposed MACRO_ndft_init_result_adjoint
+
+/* exponent of complex exponentials */
+#define MACRO_ndft_sign_trafo K2PI*ths->x[j*ths->d+t]
+#define MACRO_ndft_sign_conjugated -K2PI*ths->x[j*ths->d+t]
+#define MACRO_ndft_sign_adjoint K2PI*ths->x[j*ths->d+t]
+#define MACRO_ndft_sign_transposed -K2PI*ths->x[j*ths->d+t]
+
+#define MACRO_init_k_N_Omega_x(which_one)                                     \
+{                                                                             \
+  for (t = 0; t < ths->d; t++)                                                \
+  {                                                                           \
+    k[t] = -ths->N[t]/2;                                                      \
+    x[t] = MACRO_ndft_sign_ ## which_one;                                     \
+    Omega[t+1] = k[t]*x[t] + Omega[t];                                        \
+  }                                                                           \
+  omega = Omega[ths->d];                                                      \
+}                                                                             \
+
+#define MACRO_count_k_N_Omega                                                 \
+{                                                                             \
+  for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)                \
+    k[t]-= ths->N[t]-1;                                                       \
+                                                                              \
+  k[t]++;                                                                     \
+\
+  for (t2 = t; t2 < ths->d; t2++)                                             \
+    Omega[t2+1] = k[t2]*x[t2] + Omega[t2];                                    \
+                                                                              \
+  omega = Omega[ths->d];                                                      \
+}
+
+#define MACRO_ndft_compute_trafo f[j] += f_hat[k_L]*CEXP(-II*omega);
+#define MACRO_ndft_compute_conjugated MACRO_ndft_compute_trafo
+#define MACRO_ndft_compute_adjoint f_hat[k_L] += f[j]*CEXP(+II*omega);
+#define MACRO_ndft_compute_transposed MACRO_ndft_compute_adjoint
+
+#define MACRO_ndft(which_one)                                                 \
+void nfft_ ## which_one ## _direct (nfft_plan *ths)                           \
+{                                                                             \
+  C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;                                 \
+                                                                              \
+  MACRO_ndft_init_result_ ## which_one                                        \
+                                                                              \
+  if (ths->d == 1)                                                            \
+  {                                                                           \
+    /* specialize for univariate case, rationale: faster */                   \
+    const int t = 0;                                                          \
+    int j;                                                                    \
+    for (j = 0; j < ths->M_total; j++)                                        \
+    {                                                                         \
+      int k_L;                                                                \
+      for(k_L = 0; k_L < ths->N_total; k_L++)                                 \
+      {                                                                       \
+        R omega = (k_L - (ths->N_total/2)) * MACRO_ndft_sign_ ## which_one;   \
+        MACRO_ndft_compute_ ## which_one;                                     \
+      }                                                                       \
+    }                                                                         \
+  }                                                                           \
+  else                                                                        \
+  {                                                                           \
+    /* multivariate case */                                                   \
+    int j;                                                                    \
+    for (j = 0; j < ths->M_total; j++)                                        \
+    {                                                                         \
+      R x[ths->d], omega, Omega[ths->d+1];                                    \
+      int t, t2, k_L, k[ths->d];                                              \
+      Omega[0] = K(0.0);                                                      \
+      MACRO_init_k_N_Omega_x(which_one);                                      \
+      for(k_L = 0; k_L < ths->N_total; k_L++)                                 \
+      {                                                                       \
+        MACRO_ndft_compute_ ## which_one;                                     \
+        MACRO_count_k_N_Omega;                                                \
+      }                                                                       \
+    }                                                                         \
+  }                                                                           \
+}
+
+// macro expanded for OpenMP parallelization
+//MACRO_ndft(trafo)
+void nfft_trafo_direct (nfft_plan *ths)
+{
+  C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;
+
+  memset(f,0,ths->M_total*sizeof(C));
+
+  if (ths->d == 1)
+  {
+    /* specialize for univariate case, rationale: faster */
+    int j;
+    #pragma omp parallel for default(shared) private(j)
+    for (j = 0; j < ths->M_total; j++)
+    {
+      int k_L;
+      for(k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        R omega = (k_L - ths->N_total/2) * K2PI * ths->x[j];
+        f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);
+      }
+    }
+  }
+  else
+  {
+    /* multivariate case */
+    int j;
+    #pragma omp parallel for default(shared) private(j)
+    for (j = 0; j < ths->M_total; j++)
+    {
+      R x[ths->d], omega, Omega[ths->d+1];
+      int t, t2, k_L, k[ths->d];
+      Omega[0] = ((R) 0.0);
+      for (t = 0; t < ths->d; t++)
+      {
+        k[t] = -ths->N[t]/2;
+        x[t] = K2PI*ths->x[j*ths->d+t];
+        Omega[t+1] = k[t]*x[t] + Omega[t];
+      }
+      omega = Omega[ths->d];
+
+      for(k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);
+        {
+          for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)
+            k[t]-= ths->N[t]-1;
+
+          k[t]++;
+
+          for (t2 = t; t2 < ths->d; t2++)
+            Omega[t2+1] = k[t2]*x[t2] + Omega[t2];
+
+          omega = Omega[ths->d];
+        }
+      }
+    }
+  }
+}
+
+// macro expanded for OpenMP parallelization since parallel calculation
+// requires outer loop over frequencies and inner loop over nodes.
+//MACRO_ndft(adjoint)
+void nfft_adjoint_direct (nfft_plan *ths)
+{
+  C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;
+
+  memset(f_hat,0,ths->N_total*sizeof(C));
+
+  if (ths->d == 1)
+  {
+    /* specialize for univariate case, rationale: faster */
+#ifdef _OPENMP
+      int k_L;
+      #pragma omp parallel for default(shared) private(k_L)
+      for(k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        int j;
+        for (j = 0; j < ths->M_total; j++)
+        {
+          R omega = (k_L - (ths->N_total/2)) * K2PI * ths->x[j];
+          f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+        }
+      }
+#else
+      int j;
+      for (j = 0; j < ths->M_total; j++)
+      {
+        int k_L;
+        for(k_L = 0; k_L < ths->N_total; k_L++)
+        {
+          R omega = (k_L - (ths->N_total/2)) * K2PI * ths->x[j];
+          f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+        }
+      }
+#endif
+  }
+  else
+  {
+    /* multivariate case */
+    int j, k_L;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j, k_L)
+    for(k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      int k[ths->d], k_temp, t;
+
+      k_temp = k_L;
+
+      for (t = ths->d-1; t >= 0; t--)
+      {
+        k[t] = k_temp % ths->N[t] - ths->N[t]/2;
+        k_temp /= ths->N[t];
+      }
+
+      for (j = 0; j < ths->M_total; j++)
+      {
+        R omega = 0.0;
+        for (t = 0; t < ths->d; t++)
+          omega += k[t] * K2PI * ths->x[j*ths->d+t];
+        f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+      }
+    }
+#else
+    for (j = 0; j < ths->M_total; j++)
+    {
+      R x[ths->d], omega, Omega[ths->d+1];
+      int t, t2, k[ths->d];
+      Omega[0] = ((R) 0.0);
+      for (t = 0; t < ths->d; t++)
+      {
+        k[t] = -ths->N[t]/2;
+        x[t] = K2PI * ths->x[j*ths->d+t];
+        Omega[t+1] = k[t]*x[t] + Omega[t];
+      }
+      omega = Omega[ths->d];
+      for(k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+
+        for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)
+          k[t]-= ths->N[t]-1;
+
+        k[t]++;
+
+        for (t2 = t; t2 < ths->d; t2++)
+          Omega[t2+1] = k[t2]*x[t2] + Omega[t2];
+
+        omega = Omega[ths->d];
+      }
+    }
+#endif
+  }
+}
+
+/** fast computation of non equispaced fourier transforms
+ *  require O(N^d log(N) + M_total) arithmetical operations
+ *
+ * fast computation of the nfft_trafo and nfft_conjugated, formula (1.1)
+ * nfft_trafo:
+ * for j=0,...,M_total-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])
+ * nfft_conjugated:
+ * for j=0,...,M_total-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * exp(+2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint and nfft_transposed, formula (1.2)
+ * nfft_adjoint:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(+2(pi) k x[j])
+ * nfft_transposed:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(-2(pi) k x[j])
+ */
+
+/** macros and small sub routines for the fast transforms
+ */
+
+/** computes 2m+2 indices for the matrix B
+ */
+static inline void nfft_uo(const nfft_plan *ths, const int j, int *up, int *op,
+  const int act_dim)
+{
+  const R xj = ths->x[j * ths->d + act_dim];
+  int c = LRINT(FLOOR(xj * ths->n[act_dim]));
+
+  (*up) = c - (ths->m);
+  (*op) = c + 1 + (ths->m);
+}
+
+static inline void nfft_uo2(int *u, int *o, const R x, const int n, const int m)
+{
+  int c = LRINT(FLOOR(x * n));
+
+  *u = (c - m + n) % n;
+  *o = (c + 1 + m + n) % n;
+}
+
+#define MACRO_nfft_D_compute_A                                                \
+{                                                                             \
+  g_hat[k_plain[ths->d]] = f_hat[ks_plain[ths->d]] * c_phi_inv_k[ths->d];     \
+}
+
+#define MACRO_nfft_D_compute_T                                                \
+{                                                                             \
+  f_hat[ks_plain[ths->d]] = g_hat[k_plain[ths->d]] * c_phi_inv_k[ths->d];     \
+}
+
+#define MACRO_nfft_D_init_result_A memset(g_hat,0,ths->n_total*sizeof(C));
+
+#define MACRO_nfft_D_init_result_T memset(f_hat,0,ths->N_total*sizeof(C));
+
+#define MACRO_with_PRE_PHI_HUT * ths->c_phi_inv[t2][ks[t2]];
+
+#define MACRO_without_PRE_PHI_HUT / (PHI_HUT(ks[t2]-(ths->N[t2]/2),t2));
+
+#define MACRO_init_k_ks                                                       \
+{                                                                             \
+  for (t = ths->d-1; 0 <= t; t--)                                             \
+  {                                                                           \
+    kp[t] = k[t] = 0;                                                         \
+    ks[t] = ths->N[t]/2;                                                      \
+  }                                                                           \
+  t++;                                                                        \
+}
+
+#define MACRO_update_c_phi_inv_k(which_one) \
+{                                                                             \
+  for (t2 = t; t2 < ths->d; t2++)                                             \
+  {                                                                           \
+    c_phi_inv_k[t2+1] = c_phi_inv_k[t2] MACRO_ ##which_one;                   \
+    ks_plain[t2+1] = ks_plain[t2]*ths->N[t2] + ks[t2];                        \
+    k_plain[t2+1] = k_plain[t2]*ths->n[t2] + k[t2];                           \
+  }                                                                           \
+}
+
+#define MACRO_count_k_ks                                                      \
+{                                                                             \
+  for (t = ths->d-1; (t > 0) && (kp[t] == ths->N[t]-1); t--)                  \
+  {                                                                           \
+    kp[t] = k[t] = 0;                                                         \
+    ks[t]= ths->N[t]/2;                                                       \
+  }                                                                           \
+                                                                              \
+  kp[t]++; k[t]++; ks[t]++;                                                   \
+  if(kp[t] == ths->N[t]/2)                                                    \
+  {                                                                           \
+    k[t] = ths->n[t] - ths->N[t]/2;                                           \
+    ks[t] = 0;                                                                \
+  }                                                                           \
+}                                                                             \
+
+
+/** sub routines for the fast transforms
+ *  matrix vector multiplication with \f$D, D^T\f$
+ */
+#define MACRO_nfft_D(which_one)                                               \
+static inline void nfft_D_serial_ ## which_one (nfft_plan *ths)               \
+{                                                                             \
+  C *f_hat, *g_hat;                     /**< local copy                     */\
+  R c_phi_inv_k[ths->d+1];              /**< postfix product of PHI_HUT     */\
+  int t, t2;                            /**< index dimensions               */\
+  int k_L;                              /**< plain index                    */\
+  int kp[ths->d];                       /**< multi index (simple)           */\
+  int k[ths->d];                        /**< multi index in g_hat           */\
+  int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/\
+  int k_plain[ths->d+1];                /**< postfix plain index            */\
+  int ks_plain[ths->d+1];               /**< postfix plain index            */\
+                                                                              \
+  f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;                             \
+  MACRO_nfft_D_init_result_ ## which_one;                                     \
+                                                                              \
+  c_phi_inv_k[0] = K(1.0);                                                    \
+  k_plain[0] = 0;                                                             \
+  ks_plain[0] = 0;                                                            \
+                                                                              \
+  if (ths->nfft_flags & PRE_PHI_HUT)                                          \
+  {                                                                           \
+    MACRO_init_k_ks;                                                          \
+                                                                              \
+    for (k_L = 0; k_L < ths->N_total; k_L++)                                  \
+    {                                                                         \
+      MACRO_update_c_phi_inv_k(with_PRE_PHI_HUT);                             \
+      MACRO_nfft_D_compute_ ## which_one;                                     \
+      MACRO_count_k_ks;                                                       \
+    } /* for(k_L) */                                                          \
+  } /* if(PRE_PHI_HUT) */                                                     \
+  else                                                                        \
+  {                                                                           \
+    MACRO_init_k_ks;                                                          \
+    for (k_L = 0; k_L < ths->N_total; k_L++)                                  \
+    {                                                                         \
+      MACRO_update_c_phi_inv_k(without_PRE_PHI_HUT);                          \
+      MACRO_nfft_D_compute_ ## which_one;                                     \
+      MACRO_count_k_ks;                                                       \
+    } /* for(k_L) */                                                          \
+  } /* else(PRE_PHI_HUT) */                                                   \
+} /* nfft_D */
+
+#ifdef _OPENMP
+static void nfft_D_openmp_A(nfft_plan *ths)
+{
+  C *f_hat, *g_hat;                     /**< local copy                     */
+  int k_L;                              /**< plain index                    */
+
+  f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;
+  memset(g_hat,0,ths->n_total*sizeof(C));
+
+  if (ths->nfft_flags & PRE_PHI_HUT)
+  {
+    #pragma omp parallel for default(shared) private(k_L)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      int k[ths->d];                        /**< multi index in g_hat           */
+      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      R c_phi_inv_k_val = K(1.0);
+      int k_plain_val = 0;
+      int ks_plain_val = 0;
+      int t;
+      int k_temp = k_L;
+
+      for (t = ths->d-1; t >= 0; t--)
+      {
+        kp[t] = k_temp % ths->N[t];
+        if (kp[t] >= ths->N[t]/2)
+          k[t] = ths->n[t] - ths->N[t] + kp[t];
+        else
+          k[t] = kp[t];
+        ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+        k_temp /= ths->N[t];
+      }
+
+      for (t = 0; t < ths->d; t++)
+      {
+        c_phi_inv_k_val *= ths->c_phi_inv[t][ks[t]];
+        ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+        k_plain_val = k_plain_val*ths->n[t] + k[t];
+      }
+
+      g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;
+    } /* for(k_L) */
+  } /* if(PRE_PHI_HUT) */
+  else
+  {
+    #pragma omp parallel for default(shared) private(k_L)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      int k[ths->d];                        /**< multi index in g_hat           */
+      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      R c_phi_inv_k_val = K(1.0);
+      int k_plain_val = 0;
+      int ks_plain_val = 0;
+      int t;
+      int k_temp = k_L;
+
+      for (t = ths->d-1; t >= 0; t--)
+      {
+        kp[t] = k_temp % ths->N[t];
+        if (kp[t] >= ths->N[t]/2)
+          k[t] = ths->n[t] - ths->N[t] + kp[t];
+        else
+          k[t] = kp[t];
+        ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+        k_temp /= ths->N[t];
+      }
+
+      for (t = 0; t < ths->d; t++)
+      {
+        c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths->N[t]/2),t));
+        ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+        k_plain_val = k_plain_val*ths->n[t] + k[t];
+      }
+
+      g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;
+    } /* for(k_L) */
+  } /* else(PRE_PHI_HUT) */
+}
+#endif
+
+#ifndef _OPENMP
+MACRO_nfft_D(A)
+#endif
+
+static void nfft_D_A(nfft_plan *ths)
+{
+#ifdef _OPENMP
+  nfft_D_openmp_A(ths);
+#else
+  nfft_D_serial_A(ths);
+#endif
+}
+
+#ifdef _OPENMP
+static void nfft_D_openmp_T(nfft_plan *ths)
+{
+  C *f_hat, *g_hat;                     /**< local copy                     */
+  int k_L;                              /**< plain index                    */
+
+  f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;
+  memset(f_hat,0,ths->N_total*sizeof(C));
+
+  if (ths->nfft_flags & PRE_PHI_HUT)
+  {
+    #pragma omp parallel for default(shared) private(k_L)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      int k[ths->d];                        /**< multi index in g_hat           */
+      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      R c_phi_inv_k_val = K(1.0);
+      int k_plain_val = 0;
+      int ks_plain_val = 0;
+      int t;
+      int k_temp = k_L;
+
+      for (t = ths->d-1; t >= 0; t--)
+      {
+        kp[t] = k_temp % ths->N[t];
+        if (kp[t] >= ths->N[t]/2)
+          k[t] = ths->n[t] - ths->N[t] + kp[t];
+        else
+          k[t] = kp[t];
+        ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+        k_temp /= ths->N[t];
+      }
+
+      for (t = 0; t < ths->d; t++)
+      {
+        c_phi_inv_k_val *= ths->c_phi_inv[t][ks[t]];
+        ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+        k_plain_val = k_plain_val*ths->n[t] + k[t];
+      }
+
+      f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;
+    } /* for(k_L) */
+  } /* if(PRE_PHI_HUT) */
+  else
+  {
+    #pragma omp parallel for default(shared) private(k_L)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      int k[ths->d];                        /**< multi index in g_hat           */
+      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      R c_phi_inv_k_val = K(1.0);
+      int k_plain_val = 0;
+      int ks_plain_val = 0;
+      int t;
+      int k_temp = k_L;
+
+      for (t = ths->d-1; t >= 0; t--)
+      {
+        kp[t] = k_temp % ths->N[t];
+        if (kp[t] >= ths->N[t]/2)
+          k[t] = ths->n[t] - ths->N[t] + kp[t];
+        else
+          k[t] = kp[t];
+        ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+        k_temp /= ths->N[t];
+      }
+
+      for (t = 0; t < ths->d; t++)
+      {
+        c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths->N[t]/2),t));
+        ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+        k_plain_val = k_plain_val*ths->n[t] + k[t];
+      }
+
+      f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;
+    } /* for(k_L) */
+  } /* else(PRE_PHI_HUT) */
+}
+#endif
+
+#ifndef _OPENMP
+MACRO_nfft_D(T)
+#endif
+
+static void nfft_D_T(nfft_plan *ths)
+{
+#ifdef _OPENMP
+  nfft_D_openmp_T(ths);
+#else
+  nfft_D_serial_T(ths);
+#endif
+}
+
+/** sub routines for the fast transforms
+ *  matrix vector multiplication with \f$B, B^{\rm T}\f$
+ */
+#define MACRO_nfft_B_init_result_A  memset(f,0,ths->M_total*sizeof(C));
+#define MACRO_nfft_B_init_result_T memset(g,0,ths->n_total*sizeof(C));
+
+#define MACRO_nfft_B_PRE_FULL_PSI_compute_A                                   \
+{                                                                             \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                            \
+}
+
+#define MACRO_nfft_B_PRE_FULL_PSI_compute_T                                   \
+{                                                                             \
+  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                            \
+}
+
+#define MACRO_nfft_B_compute_A                                                \
+{                                                                             \
+  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]];                            \
+}
+
+#define MACRO_nfft_B_compute_T                                                \
+{                                                                             \
+  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj);                            \
+}
+
+#define MACRO_with_FG_PSI fg_psi[t2][lj[t2]]
+
+#define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2) * (2*ths->m+2)+lj[t2]]
+
+#define MACRO_without_PRE_PSI  PHI(ths->x[j*ths->d+t2]                        \
+  - ((R)l[t2])/((R)ths->n[t2]), t2)
+
+#define MACRO_init_uo_l_lj_t                                                  \
+{                                                                             \
+  for (t = ths->d-1; t >= 0; t--)                                             \
+  {                                                                           \
+    nfft_uo(ths,j,&u[t],&o[t],t);                                             \
+    l[t] = u[t];                                                              \
+    lj[t] = 0;                                                                \
+  } /* for(t) */                                                              \
+  t++;                                                                        \
+}
+
+#define MACRO_update_phi_prod_ll_plain(which_one) {                           \
+  for(t2=t; t2<ths->d; t2++)                                                  \
+    {                                                                         \
+      phi_prod[t2+1] = phi_prod[t2]* MACRO_ ## which_one;                     \
+      ll_plain[t2+1] = ll_plain[t2]*ths->n[t2] +(l[t2]+ths->n[t2])%ths->n[t2];\
+    } /* for(t2) */                                                           \
+}
+
+#define MACRO_count_uo_l_lj_t {                                               \
+  for(t = ths->d-1; (t > 0) && (l[t] == o[t]); t--)                           \
+    {                                                                         \
+      l[t] = u[t];                                                            \
+      lj[t] = 0;                                                              \
+    } /* for(t) */                                                            \
+                                                                              \
+  l[t]++;                                                                     \
+  lj[t]++;                                                                    \
+}
+
+#define MACRO_nfft_B(which_one)                                               \
+static inline void nfft_B_serial_ ## which_one (nfft_plan *ths)               \
+{                                                                             \
+  int lprod; /* 'regular bandwidth' of matrix B  */                           \
+  int u[ths->d], o[ths->d]; /* multi band with respect to x_j */              \
+  int t, t2; /* index dimensions */                                           \
+  int j; /* index nodes */                                                    \
+  int l_L, ix; /* index one row of B */                                       \
+  int l[ths->d]; /* multi index u<=l<=o */                                    \
+  int lj[ths->d]; /* multi index 0<=lj<u+o+1 */                               \
+  int ll_plain[ths->d+1]; /* postfix plain index in g */                      \
+  R phi_prod[ths->d+1]; /* postfix product of PHI */                          \
+  C *f, *g; /* local copy */                                                  \
+  C *fj; /* local copy */                                                     \
+  R y[ths->d];                                                                \
+  R fg_psi[ths->d][2*ths->m+2];                                               \
+  R fg_exp_l[ths->d][2*ths->m+2];                                             \
+  int l_fg,lj_fg;                                                             \
+  R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3;                            \
+  R ip_w;                                                                     \
+  int ip_u;                                                                   \
+  int ip_s = ths->K/(ths->m+2);                                               \
+                                                                              \
+  f = (C*)ths->f; g = (C*)ths->g;                                             \
+                                                                              \
+  MACRO_nfft_B_init_result_ ## which_one;                                     \
+                                                                              \
+  if (ths->nfft_flags & PRE_FULL_PSI)                                         \
+  {                                                                           \
+    for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++)                  \
+      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++)                   \
+        MACRO_nfft_B_PRE_FULL_PSI_compute_ ## which_one;                      \
+    return;                                                                   \
+  }                                                                           \
+                                                                              \
+  phi_prod[0] = K(1.0);                                                       \
+  ll_plain[0] = 0;                                                            \
+                                                                              \
+  for (t = 0, lprod = 1; t < ths->d; t++)                                     \
+    lprod *= (2*ths->m+2);                                                    \
+                                                                              \
+  if (ths->nfft_flags & PRE_PSI)                                              \
+  {                                                                           \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \
+    {                                                                         \
+      MACRO_init_uo_l_lj_t;                                                   \
+                                                                              \
+      for (l_L = 0; l_L < lprod; l_L++)                                       \
+      {                                                                       \
+        MACRO_update_phi_prod_ll_plain(with_PRE_PSI);                         \
+                                                                              \
+        MACRO_nfft_B_compute_ ## which_one;                                   \
+                                                                              \
+        MACRO_count_uo_l_lj_t;                                                \
+      } /* for(l_L) */                                                        \
+    } /* for(j) */                                                            \
+    return;                                                                   \
+  } /* if(PRE_PSI) */                                                         \
+                                                                              \
+  if (ths->nfft_flags & PRE_FG_PSI)                                           \
+  {                                                                           \
+    for(t2 = 0; t2 < ths->d; t2++)                                            \
+    {                                                                         \
+      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);                                      \
+      tmpEXP2sq = tmpEXP2*tmpEXP2;                                            \
+      tmp2 = K(1.0);                                                          \
+      tmp3 = K(1.0);                                                          \
+      fg_exp_l[t2][0] = K(1.0);                                               \
+      for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)                          \
+      {                                                                       \
+        tmp3 = tmp2*tmpEXP2;                                                  \
+        tmp2 *= tmpEXP2sq;                                                    \
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;                     \
+      }                                                                       \
+    }                                                                         \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \
+    {                                                                         \
+      MACRO_init_uo_l_lj_t;                                                   \
+                                                                              \
+      for (t2 = 0; t2 < ths->d; t2++)                                         \
+      {                                                                       \
+        fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];                            \
+        tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];                                \
+        tmp1 = K(1.0);                                                        \
+        for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)       \
+        {                                                                     \
+          tmp1 *= tmpEXP1;                                                    \
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];         \
+        }                                                                     \
+      }                                                                       \
+                                                                              \
+      for (l_L= 0; l_L < lprod; l_L++)                                        \
+      {                                                                       \
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \
+                                                                              \
+        MACRO_nfft_B_compute_ ## which_one;                                   \
+                                                                              \
+        MACRO_count_uo_l_lj_t;                                                \
+      } /* for(l_L) */                                                        \
+    } /* for(j) */                                                            \
+    return;                                                                   \
+  } /* if(PRE_FG_PSI) */                                                      \
+                                                                              \
+  if (ths->nfft_flags & FG_PSI)                                               \
+  {                                                                           \
+    for (t2 = 0; t2 < ths->d; t2++)                                           \
+    {                                                                         \
+      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);                                      \
+      tmpEXP2sq = tmpEXP2*tmpEXP2;                                            \
+      tmp2 = K(1.0);                                                          \
+      tmp3 = K(1.0);                                                          \
+      fg_exp_l[t2][0] = K(1.0);                                               \
+      for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)                         \
+      {                                                                       \
+        tmp3 = tmp2*tmpEXP2;                                                  \
+        tmp2 *= tmpEXP2sq;                                                    \
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;                     \
+      }                                                                       \
+    }                                                                         \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \
+    {                                                                         \
+      MACRO_init_uo_l_lj_t;                                                   \
+                                                                              \
+      for (t2 = 0; t2 < ths->d; t2++)                                         \
+      {                                                                       \
+        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));\
+                                                                              \
+        tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])         \
+          /ths->b[t2]);                                                       \
+        tmp1 = K(1.0);                                                        \
+        for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)     \
+        {                                                                     \
+          tmp1 *= tmpEXP1;                                                    \
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];         \
+        }                                                                     \
+      }                                                                       \
+                                                                              \
+      for (l_L = 0; l_L < lprod; l_L++)                                       \
+      {                                                                       \
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \
+                                                                              \
+        MACRO_nfft_B_compute_ ## which_one;                                   \
+                                                                              \
+        MACRO_count_uo_l_lj_t;                                                \
+      } /* for(l_L) */                                                        \
+    } /* for(j) */                                                            \
+    return;                                                                   \
+  } /* if(FG_PSI) */                                                          \
+                                                                              \
+  if (ths->nfft_flags & PRE_LIN_PSI)                                          \
+  {                                                                           \
+    for (j = 0, fj=f; j<ths->M_total; j++, fj++)                              \
+    {                                                                         \
+      MACRO_init_uo_l_lj_t;                                                   \
+                                                                              \
+      for (t2 = 0; t2 < ths->d; t2++)                                         \
+      {                                                                       \
+        y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])                    \
+          * ((R)ths->K))/(ths->m+2);                                          \
+        ip_u  = LRINT(FLOOR(y[t2]));                                          \
+        ip_w  = y[t2]-ip_u;                                                   \
+        for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)         \
+        {                                                                     \
+          fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]  \
+            * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]     \
+            * (ip_w);                                                         \
+        }                                                                     \
+      }                                                                       \
+                                                                              \
+      for (l_L = 0; l_L < lprod; l_L++)                                       \
+      {                                                                       \
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \
+                                                                              \
+        MACRO_nfft_B_compute_ ## which_one;                                   \
+                                                                              \
+        MACRO_count_uo_l_lj_t;                                                \
+      } /* for(l_L) */                                                        \
+    } /* for(j) */                                                            \
+    return;                                                                   \
+  } /* if(PRE_LIN_PSI) */                                                     \
+                                                                              \
+  /* no precomputed psi at all */                                             \
+  for (j = 0, fj = f; j < ths->M_total; j++, fj++)                            \
+  {                                                                           \
+    MACRO_init_uo_l_lj_t;                                                     \
+                                                                              \
+    for (l_L = 0; l_L < lprod; l_L++)                                         \
+    {                                                                         \
+      MACRO_update_phi_prod_ll_plain(without_PRE_PSI);                        \
+                                                                              \
+      MACRO_nfft_B_compute_ ## which_one;                                     \
+                                                                              \
+      MACRO_count_uo_l_lj_t;                                                  \
+    } /* for(l_L) */                                                          \
+  } /* for(j) */                                                              \
+} /* nfft_B */                                                                \
+
+#ifndef _OPENMP
+MACRO_nfft_B(A)
+#endif
+
+#ifdef _OPENMP
+static inline void nfft_B_openmp_A (nfft_plan *ths)
+{
+  int lprod; /* 'regular bandwidth' of matrix B  */
+  int k;
+
+  memset(ths->f,0,ths->M_total*sizeof(C));
+
+  for (k = 0, lprod = 1; k < ths->d; k++)
+    lprod *= (2*ths->m+2);
+
+  if (ths->nfft_flags & PRE_FULL_PSI)
+  {
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int l;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      ths->f[j] = K(0.0);
+      for (l = 0; l < lprod; l++)
+        ths->f[j] += ths->psi[j*lprod+l] * ths->g[ths->psi_index_g[j*lprod+l]];
+    }
+    return;
+  }
+
+  if (ths->nfft_flags & PRE_PSI)
+  {
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int t, t2; /* index dimensions */
+      int l_L; /* index one row of B */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (l_L = 0; l_L < lprod; l_L++)
+      {
+        MACRO_update_phi_prod_ll_plain(with_PRE_PSI);
+
+        ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(PRE_PSI) */
+
+  if (ths->nfft_flags & PRE_FG_PSI)
+  {
+    int t, t2; /* index dimensions */
+    R fg_exp_l[ths->d][2*ths->m+2];
+
+    for(t2 = 0; t2 < ths->d; t2++)
+    {
+      int lj_fg;
+      R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+      R tmpEXP2sq = tmpEXP2*tmpEXP2;
+      R tmp2 = K(1.0);
+      R tmp3 = K(1.0);
+      fg_exp_l[t2][0] = K(1.0);
+      for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+      {
+        tmp3 = tmp2*tmpEXP2;
+        tmp2 *= tmpEXP2sq;
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+      }
+    }
+
+    #pragma omp parallel for default(shared) private(k,t,t2)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      R fg_psi[ths->d][2*ths->m+2];
+      R tmpEXP1, tmp1;
+      int l_fg,lj_fg;
+      int l_L;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (t2 = 0; t2 < ths->d; t2++)
+      {
+        fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];
+        tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];
+        tmp1 = K(1.0);
+        for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+        {
+          tmp1 *= tmpEXP1;
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+        }
+      }
+
+      for (l_L= 0; l_L < lprod; l_L++)
+      {
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+        ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if (ths->nfft_flags & FG_PSI)
+  {
+    int t, t2; /* index dimensions */
+    R fg_exp_l[ths->d][2*ths->m+2];
+
+    nfft_sort_nodes(ths);
+
+    for (t2 = 0; t2 < ths->d; t2++)
+    {
+      int lj_fg;
+      R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+      R tmpEXP2sq = tmpEXP2*tmpEXP2;
+      R tmp2 = K(1.0);
+      R tmp3 = K(1.0);
+      fg_exp_l[t2][0] = K(1.0);
+      for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+      {
+        tmp3 = tmp2*tmpEXP2;
+        tmp2 *= tmpEXP2sq;
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+      }
+    }
+
+    #pragma omp parallel for default(shared) private(k,t,t2)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      R fg_psi[ths->d][2*ths->m+2];
+      R tmpEXP1, tmp1;
+      int l_fg,lj_fg;
+      int l_L;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (t2 = 0; t2 < ths->d; t2++)
+      {
+        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
+
+        tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])
+          /ths->b[t2]);
+        tmp1 = K(1.0);
+        for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+        {
+          tmp1 *= tmpEXP1;
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+        }
+      }
+
+      for (l_L = 0; l_L < lprod; l_L++)
+      {
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+        ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(FG_PSI) */
+
+  if (ths->nfft_flags & PRE_LIN_PSI)
+  {
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k<ths->M_total; k++)
+    {
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int t, t2; /* index dimensions */
+      int l_L; /* index one row of B */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      R y[ths->d];
+      R fg_psi[ths->d][2*ths->m+2];
+      int l_fg,lj_fg;
+      R ip_w;
+      int ip_u;
+      int ip_s = ths->K/(ths->m+2);
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (t2 = 0; t2 < ths->d; t2++)
+      {
+        y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])
+          * ((R)ths->K))/(ths->m+2);
+        ip_u  = LRINT(FLOOR(y[t2]));
+        ip_w  = y[t2]-ip_u;
+        for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)
+        {
+          fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]
+            * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]
+            * (ip_w);
+        }
+      }
+
+      for (l_L = 0; l_L < lprod; l_L++)
+      {
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+        ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+  nfft_sort_nodes(ths);
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < ths->M_total; k++)
+  {
+    int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+    int t, t2; /* index dimensions */
+    int l_L; /* index one row of B */
+    int l[ths->d]; /* multi index u<=l<=o */
+    int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+    int ll_plain[ths->d+1]; /* postfix plain index in g */
+    R phi_prod[ths->d+1]; /* postfix product of PHI */
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    phi_prod[0] = K(1.0);
+    ll_plain[0] = 0;
+
+    MACRO_init_uo_l_lj_t;
+
+    for (l_L = 0; l_L < lprod; l_L++)
+    {
+      MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+      ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+      MACRO_count_uo_l_lj_t;
+    } /* for(l_L) */
+  } /* for(j) */
+}
+#endif
+
+static void nfft_B_A(nfft_plan *ths)
+{
+#ifdef _OPENMP
+  nfft_B_openmp_A(ths);
+#else
+  nfft_B_serial_A(ths);
+#endif
+}
+
+#ifdef _OPENMP
+/**
+ * Performs binary search in sorted index array and returns the offset of the
+ * specified key.
+ * If the key is not unique, the index of the left-most element with the
+ * requested key is returned.
+ * If the index array does not contain the key, the index of the next-largest
+ * element is returned.
+ *
+ * \arg ar_x sorted index array containing the key at offset 2*k
+ * and the nodes index at offset 2*k+1
+ * \arg len number of nodes x
+ * \arg key the key value
+ *
+ * \author Toni Volkmer
+ */
+static inline int index_x_binary_search(const int *ar_x, const int len, const int key)
+{
+  int left = 0, right = len - 1;
+
+  if (len == 1)
+    return 0;
+
+  while (left < right - 1)
+  {
+    int i = (left + right) / 2;
+    if (ar_x[2*i] >= key)
+      right = i;
+    else if (ar_x[2*i] < key)
+      left = i;
+  }
+
+  if (ar_x[2*left] < key && left != len-1)
+    return left+1;
+
+  return left;
+}
+#endif
+
+#ifdef _OPENMP
+/**
+ * Determines the blocks of vector g the current thread is responsible for.
+ *
+ * \arg my_u0 lowest index (first component) the current threads writes to in g
+ * \arg my_o0 highest index (first component) the current threads writes to in g
+ * \arg min_u_a lowest (linearized) index u which could lead to writing to g
+ * \arg max_u_a highest (linearized) index u which could lead to writing to g
+ * \arg min_u_b lowest (linearized) index u which could lead to writing to g
+ * \arg max_u_b highest (linearized) index u which could lead to writing to g
+ * \arg d dimensionality
+ * \arg n FFTW length
+ * \arg m window length
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_B_omp_blockwise_init(int *my_u0, int *my_o0, int *min_u_a, int *max_u_a, int *min_u_b, int *max_u_b, const int d, const int *n, const int m)
+{
+  const int n0 = n[0];
+  int k;
+  int nthreads = omp_get_num_threads();
+  int nthreads_used = MIN(nthreads, n0);
+  int size_per_thread = n0 / nthreads_used;
+  int size_left = n0 - size_per_thread * nthreads_used;
+  int size_g[nthreads_used];
+  int offset_g[nthreads_used];
+  int my_id = omp_get_thread_num();
+  int n_prod_rest = 1;
+
+  for (k = 1; k < d; k++)
+    n_prod_rest *= n[k];
+
+  *min_u_a = -1;
+  *max_u_a = -1;
+  *min_u_b = -1;
+  *max_u_b = -1;
+  *my_u0 = -1;
+  *my_o0 = -1;
+
+  if (my_id < nthreads_used)
+  {
+    const int m22 = 2 * m + 2;
+
+    offset_g[0] = 0;
+    for (k = 0; k < nthreads_used; k++)
+    {
+      if (k > 0)
+        offset_g[k] = offset_g[k-1] + size_g[k-1];
+      size_g[k] = size_per_thread;
+      if (size_left > 0)
+      {
+        size_g[k]++;
+        size_left--;
+      }
+    }
+
+    *my_u0 = offset_g[my_id];
+    *my_o0 = offset_g[my_id] + size_g[my_id] - 1;
+
+    if (nthreads_used > 1)
+    {
+      *max_u_a = n_prod_rest*(offset_g[my_id] + size_g[my_id]) - 1;
+      *min_u_a = n_prod_rest*(offset_g[my_id] - m22 + 1);
+    }
+    else
+    {
+      *min_u_a = 0;
+      *max_u_a = n_prod_rest * n0 - 1;
+    }
+
+    if (*min_u_a < 0)
+    {
+      *min_u_b = n_prod_rest * (offset_g[my_id] - m22 + 1 + n0);
+      *max_u_b = n_prod_rest * n0 - 1;
+      *min_u_a = 0;
+    }
+
+    if (*min_u_b != -1 && *min_u_b <= *max_u_a)
+    {
+      *max_u_a = *max_u_b;
+      *min_u_b = -1;
+      *max_u_b = -1;
+    }
+#ifdef OMP_ASSERT
+    assert(*min_u_a <= *max_u_a);
+    assert(*min_u_b <= *max_u_b);
+    assert(*min_u_b == -1 || *max_u_a < *min_u_b);
+#endif
+  }
+}
+#endif
+
+/**
+ * Calculates adjoint NFFT for flag PRE_FULL_PSI.
+ * Parallel calculation (OpenMP) with and without atomic operations.
+ *
+ * \arg lprod stride (2*m+2)^d
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_B_compute_full_psi(
+    C *g, const int *psi_index_g, const R *psi, const C *f,
+    const int M, const int d, const int *n, const int m, const int nfft_flags, const int *index_x)
+{
+  int k;
+  int lprod, lprod_m1;
+  {
+    int t;
+    for(t = 0, lprod = 1; t < d; t++)
+        lprod *= 2 * m + 2;
+  }
+  lprod_m1 = lprod / (2 * m + 2);
+
+#ifdef _OPENMP
+  if (nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+  {
+    #pragma omp parallel private(k)
+    {
+      int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;
+      const int *ar_x = index_x;
+      int n_prod_rest = 1;
+
+      for (k = 1; k < d; k++)
+        n_prod_rest *= n[k];
+
+      nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, &min_u_b, &max_u_b, d, n, m);
+
+      if (min_u_a != -1)
+      {
+        k = index_x_binary_search(ar_x, M, min_u_a);
+#ifdef OMP_ASSERT
+        assert(ar_x[2*k] >= min_u_a || k == M-1);
+        if (k > 0)
+          assert(ar_x[2*k-2] < min_u_a);
+#endif
+        while (k < M)
+        {
+          int l0, lrest;
+          int u_prod = ar_x[2*k];
+          int j = ar_x[2*k+1];
+
+          if (u_prod < min_u_a || u_prod > max_u_a)
+            break;
+
+          for (l0 = 0; l0 < 2 * m + 2; l0++)
+          {
+            const int start_index = psi_index_g[j * lprod + l0 * lprod_m1];
+
+            if (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)
+              continue;
+
+            for (lrest = 0; lrest < lprod_m1; lrest++)
+            {
+              const int l = l0 * lprod_m1 + lrest;
+              g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
+            }
+          }
+
+          k++;
+        }
+      }
+
+      if (min_u_b != -1)
+      {
+        k = index_x_binary_search(ar_x, M, min_u_b);
+#ifdef OMP_ASSERT
+        assert(ar_x[2*k] >= min_u_b || k == M-1);
+        if (k > 0)
+          assert(ar_x[2*k-2] < min_u_b);
+#endif
+        while (k < M)
+        {
+          int l0, lrest;
+          int u_prod = ar_x[2*k];
+          int j = ar_x[2*k+1];
+
+          if (u_prod < min_u_b || u_prod > max_u_b)
+            break;
+
+          for (l0 = 0; l0 < 2 * m + 2; l0++)
+          {
+            const int start_index = psi_index_g[j * lprod + l0 * lprod_m1];
+
+            if (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)
+              continue;
+            for (lrest = 0; lrest < lprod_m1; lrest++)
+            {
+              const int l = l0 * lprod_m1 + lrest;
+              g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
+            }
+          }
+
+          k++;
+        }
+      }
+    } /* omp parallel */
+    return;
+  } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */
+#endif
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < M; k++)
+  {
+    int l;
+    int j = (nfft_flags & NFFT_SORT_NODES) ? index_x[2*k+1] : k;
+
+    for (l = 0; l < lprod; l++)
+    {
+#ifdef _OPENMP
+      C val = psi[j * lprod + l] * f[j];
+      C *gref = g + psi_index_g[j * lprod + l];
+      R *gref_real = (R*) gref;
+
+      #pragma omp atomic
+      gref_real[0] += creal(val);
+
+      #pragma omp atomic
+      gref_real[1] += cimag(val);
+#else
+      g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
+#endif
+    }
+  }
+}
+
+#ifndef _OPENMP
+MACRO_nfft_B(T)
+#endif
+
+#ifdef _OPENMP
+static inline void nfft_B_openmp_T(nfft_plan *ths)
+{
+  int lprod; /* 'regular bandwidth' of matrix B  */
+  int k;
+
+  memset(ths->g,0,ths->n_total*sizeof(C));
+
+  for (k = 0, lprod = 1; k < ths->d; k++)
+    lprod *= (2*ths->m+2);
+
+  if (ths->nfft_flags & PRE_FULL_PSI)
+  {
+    nfft_adjoint_B_compute_full_psi(ths->g, ths->psi_index_g, ths->psi, ths->f, ths->M_total,
+            ths->d, ths->n, ths->m, ths->nfft_flags, ths->index_x);
+    return;
+  }
+
+  if (ths->nfft_flags & PRE_PSI)
+  {
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int t, t2; /* index dimensions */
+      int l_L; /* index one row of B */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (l_L = 0; l_L < lprod; l_L++)
+      {
+        C *lhs;
+        R *lhs_real;
+        C val;
+
+        MACRO_update_phi_prod_ll_plain(with_PRE_PSI);
+
+        lhs = ths->g + ll_plain[ths->d];
+        lhs_real = (R*)lhs;
+        val = phi_prod[ths->d] * ths->f[j];
+
+        #pragma omp atomic
+        lhs_real[0] += creal(val);
+
+        #pragma omp atomic
+        lhs_real[1] += cimag(val);
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(PRE_PSI) */
+
+  if (ths->nfft_flags & PRE_FG_PSI)
+  {
+    int t, t2; /* index dimensions */
+    R fg_exp_l[ths->d][2*ths->m+2];
+    for(t2 = 0; t2 < ths->d; t2++)
+    {
+      int lj_fg;
+      R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+      R tmpEXP2sq = tmpEXP2*tmpEXP2;
+      R tmp2 = K(1.0);
+      R tmp3 = K(1.0);
+      fg_exp_l[t2][0] = K(1.0);
+      for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+      {
+        tmp3 = tmp2*tmpEXP2;
+        tmp2 *= tmpEXP2sq;
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+      }
+    }
+
+    #pragma omp parallel for default(shared) private(k,t,t2)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      R fg_psi[ths->d][2*ths->m+2];
+      R tmpEXP1, tmp1;
+      int l_fg,lj_fg;
+      int l_L;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (t2 = 0; t2 < ths->d; t2++)
+      {
+        fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];
+        tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];
+        tmp1 = K(1.0);
+        for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+        {
+          tmp1 *= tmpEXP1;
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+        }
+      }
+
+      for (l_L= 0; l_L < lprod; l_L++)
+      {
+        C *lhs;
+        R *lhs_real;
+        C val;
+
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+        lhs = ths->g + ll_plain[ths->d];
+        lhs_real = (R*)lhs;
+        val = phi_prod[ths->d] * ths->f[j];
+
+        #pragma omp atomic
+        lhs_real[0] += creal(val);
+
+        #pragma omp atomic
+        lhs_real[1] += cimag(val);
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if (ths->nfft_flags & FG_PSI)
+  {
+    int t, t2; /* index dimensions */
+    R fg_exp_l[ths->d][2*ths->m+2];
+
+    nfft_sort_nodes(ths);
+
+    for (t2 = 0; t2 < ths->d; t2++)
+    {
+      int lj_fg;
+      R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+      R tmpEXP2sq = tmpEXP2*tmpEXP2;
+      R tmp2 = K(1.0);
+      R tmp3 = K(1.0);
+      fg_exp_l[t2][0] = K(1.0);
+      for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+      {
+        tmp3 = tmp2*tmpEXP2;
+        tmp2 *= tmpEXP2sq;
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+      }
+    }
+
+    #pragma omp parallel for default(shared) private(k,t,t2)
+    for (k = 0; k < ths->M_total; k++)
+    {
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      R fg_psi[ths->d][2*ths->m+2];
+      R tmpEXP1, tmp1;
+      int l_fg,lj_fg;
+      int l_L;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (t2 = 0; t2 < ths->d; t2++)
+      {
+        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
+
+        tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])
+          /ths->b[t2]);
+        tmp1 = K(1.0);
+        for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+        {
+          tmp1 *= tmpEXP1;
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+        }
+      }
+
+      for (l_L = 0; l_L < lprod; l_L++)
+      {
+        C *lhs;
+        R *lhs_real;
+        C val;
+
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+        lhs = ths->g + ll_plain[ths->d];
+        lhs_real = (R*)lhs;
+        val = phi_prod[ths->d] * ths->f[j];
+
+        #pragma omp atomic
+        lhs_real[0] += creal(val);
+
+        #pragma omp atomic
+        lhs_real[1] += cimag(val);
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(FG_PSI) */
+
+  if (ths->nfft_flags & PRE_LIN_PSI)
+  {
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k<ths->M_total; k++)
+    {
+      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      int t, t2; /* index dimensions */
+      int l_L; /* index one row of B */
+      int l[ths->d]; /* multi index u<=l<=o */
+      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      R phi_prod[ths->d+1]; /* postfix product of PHI */
+      R y[ths->d];
+      R fg_psi[ths->d][2*ths->m+2];
+      int l_fg,lj_fg;
+      R ip_w;
+      int ip_u;
+      int ip_s = ths->K/(ths->m+2);
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      phi_prod[0] = K(1.0);
+      ll_plain[0] = 0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for (t2 = 0; t2 < ths->d; t2++)
+      {
+        y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])
+          * ((R)ths->K))/(ths->m+2);
+        ip_u  = LRINT(FLOOR(y[t2]));
+        ip_w  = y[t2]-ip_u;
+        for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)
+        {
+          fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]
+            * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]
+            * (ip_w);
+        }
+      }
+
+      for (l_L = 0; l_L < lprod; l_L++)
+      {
+        C *lhs;
+        R *lhs_real;
+        C val;
+
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+        lhs = ths->g + ll_plain[ths->d];
+        lhs_real = (R*)lhs;
+        val = phi_prod[ths->d] * ths->f[j];
+
+        #pragma omp atomic
+        lhs_real[0] += creal(val);
+
+        #pragma omp atomic
+        lhs_real[1] += cimag(val);
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+    } /* for(j) */
+    return;
+  } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+  nfft_sort_nodes(ths);
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < ths->M_total; k++)
+  {
+    int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+    int t, t2; /* index dimensions */
+    int l_L; /* index one row of B */
+    int l[ths->d]; /* multi index u<=l<=o */
+    int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+    int ll_plain[ths->d+1]; /* postfix plain index in g */
+    R phi_prod[ths->d+1]; /* postfix product of PHI */
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    phi_prod[0] = K(1.0);
+    ll_plain[0] = 0;
+
+    MACRO_init_uo_l_lj_t;
+
+    for (l_L = 0; l_L < lprod; l_L++)
+    {
+      C *lhs;
+      R *lhs_real;
+      C val;
+
+      MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+      lhs = ths->g + ll_plain[ths->d];
+      lhs_real = (R*)lhs;
+      val = phi_prod[ths->d] * ths->f[j];
+
+      #pragma omp atomic
+      lhs_real[0] += creal(val);
+
+      #pragma omp atomic
+      lhs_real[1] += cimag(val);
+
+      MACRO_count_uo_l_lj_t;
+    } /* for(l_L) */
+  } /* for(j) */
+}
+#endif
+
+static void nfft_B_T(nfft_plan *ths)
+{
+#ifdef _OPENMP
+  nfft_B_openmp_T(ths);
+#else
+  nfft_B_serial_T(ths);
+#endif
+}
+
+/* ## specialized version for d=1  ########################################### */
+
+static void nfft_1d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+{
+  const int tmp2 = 2*m+2;
+  int l;
+  R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
+
+  fg_exp_b0 = EXP(K(-1.0)/b);
+  fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
+  fg_exp_b1 = fg_exp_b2 =fg_exp_l[0] = K(1.0);
+
+  for (l = 1; l < tmp2; l++)
+  {
+    fg_exp_b2 = fg_exp_b1*fg_exp_b0;
+    fg_exp_b1 *= fg_exp_b0_sq;
+    fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;
+  }
+}
+
+
+static void nfft_trafo_1d_compute(C *fj, const C *g,const R *psij_const,
+  const R *xj, const int n, const int m)
+{
+  int u, o, l;
+  const C *gj;
+  const R *psij;
+  psij = psij_const;
+
+  nfft_uo2(&u, &o, *xj, n, m);
+
+  if (u < o)
+  {
+    for (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l <= 2*m+1; l++)
+      (*fj) += (*psij++) * (*gj++);
+  }
+  else
+  {
+    for (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l < 2*m+1 - o; l++)
+      (*fj) += (*psij++) * (*gj++);
+    for (l = 0, gj = g; l <= o; l++)
+      (*fj) += (*psij++) * (*gj++);
+  }
+}
+
+#ifndef _OPENMP
+static void nfft_adjoint_1d_compute_serial(const C *fj, C *g,const R *psij_const,
+  const R *xj, const int n, const int m)
+{
+  int u,o,l;
+  C *gj;
+  const R *psij;
+  psij=psij_const;
+
+  nfft_uo2(&u,&o,*xj, n, m);
+
+  if(u<o)
+  {
+    for (l = 0, gj = g+u; l <= 2*m+1; l++)
+      (*gj++) += (*psij++) * (*fj);
+  }
+  else
+  {
+    for (l = 0, gj = g+u; l < 2*m+1-o; l++)
+      (*gj++) += (*psij++) * (*fj);
+    for (l = 0, gj = g; l <= o; l++)
+      (*gj++) += (*psij++) * (*fj);
+  }
+}
+#endif
+
+#ifdef _OPENMP
+/* adjoint NFFT one-dimensional case with OpenMP atomic operations */
+static void nfft_adjoint_1d_compute_omp_atomic(const C f, C *g,const R *psij_const,
+  const R *xj, const int n, const int m)
+{
+  int u,o,l;
+  C *gj;
+  int index_temp[2*m+2];
+
+  nfft_uo2(&u,&o,*xj, n, m);
+
+  for (l=0; l<=2*m+1; l++)
+    index_temp[l] = (l+u)%n;
+
+  for (l = 0, gj = g+u; l <= 2*m+1; l++)
+  {
+    int i = index_temp[l];
+    C *lhs = g+i;
+    R *lhs_real = (R*)lhs;
+    C val = psij_const[l] * f;
+    #pragma omp atomic
+    lhs_real[0] += creal(val);
+
+    #pragma omp atomic
+    lhs_real[1] += cimag(val);
+  }
+}
+#endif
+
+#ifdef _OPENMP
+/**
+ * Adjoint NFFT for one-dimensional case updating only a specified range of
+ * vector g.
+ *
+ * \arg f input coefficient f[j]
+ * \arg g output vector g
+ * \arg psij_const vector of window function values
+ * \arg xj node x[j]
+ * \arg n FFTW length (number oversampled Fourier coefficients)
+ * \arg m window length
+ * \arg my_u0 lowest index the current thread writes to in g
+ * \arg my_o0 highest index the current thread writes to in g
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,const R *psij_const,
+  const R *xj, const int n, const int m, const int my_u0, const int my_o0)
+{
+  int ar_u,ar_o,l;
+
+  nfft_uo2(&ar_u,&ar_o,*xj, n, m);
+
+  if(ar_u<ar_o)
+  {
+    int u = MAX(my_u0,ar_u);
+    int o = MIN(my_o0,ar_o);
+    int offset_psij = u-ar_u;
+#ifdef OMP_ASSERT
+    assert(offset_psij >= 0);
+    assert(o-u <= 2*m+1);
+    assert(offset_psij+o-u <= 2*m+1);
+#endif
+
+    for (l = 0; l <= o-u; l++)
+      g[u+l] += psij_const[offset_psij+l] * f;
+  }
+  else
+  {
+    int u = MAX(my_u0,ar_u);
+    int o = my_o0;
+    int offset_psij = u-ar_u;
+#ifdef OMP_ASSERT
+    assert(offset_psij >= 0);
+    assert(o-u <= 2*m+1);
+    assert(offset_psij+o-u <= 2*m+1);
+#endif
+
+    for (l = 0; l <= o-u; l++)
+      g[u+l] += psij_const[offset_psij+l] * f;
+
+    u = my_u0;
+    o = MIN(my_o0,ar_o);
+    offset_psij += my_u0-ar_u+n;
+
+#ifdef OMP_ASSERT
+    if (u<=o)
+    {
+      assert(o-u <= 2*m+1);
+      if (offset_psij+o-u > 2*m+1)
+      {
+        fprintf(stderr, "ERR: %d %d %d %d %d %d %d\n", ar_u, ar_o, my_u0, my_o0, u, o, offset_psij);
+      }
+      assert(offset_psij+o-u <= 2*m+1);
+    }
+#endif
+    for (l = 0; l <= o-u; l++)
+      g[u+l] += psij_const[offset_psij+l] * f;
+  }
+}
+#endif
+
+static void nfft_trafo_1d_B(nfft_plan *ths)
+{
+  const int n = ths->n[0], M = ths->M_total, m = ths->m, m2p2 = 2*m+2;
+  const C *g = (C*)ths->g;
+
+  if (ths->nfft_flags & PRE_FULL_PSI)
+  {
+    int k;
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int l;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      ths->f[j] = K(0.0);
+      for (l = 0; l < m2p2; l++)
+        ths->f[j] += ths->psi[j*m2p2+l] * g[ths->psi_index_g[j*m2p2+l]];
+    }
+    return;
+  } /* if(PRE_FULL_PSI) */
+
+  if (ths->nfft_flags & PRE_PSI)
+  {
+    int k;
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      nfft_trafo_1d_compute(&ths->f[j], g, ths->psi + j * (2 * m + 2),
+        &ths->x[j], n, m);
+    }
+    return;
+  } /* if(PRE_PSI) */
+
+  if (ths->nfft_flags & PRE_FG_PSI)
+  {
+    int k;
+    R fg_exp_l[m2p2];
+
+    nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      const R fg_psij0 = ths->psi[2 * j], fg_psij1 = ths->psi[2 * j + 1];
+      R fg_psij2 = K(1.0);
+      R psij_const[m2p2];
+      int l;
+
+      psij_const[0] = fg_psij0;
+
+      for (l = 1; l < m2p2; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+      }
+
+      nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+    }
+
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if (ths->nfft_flags & FG_PSI)
+  {
+    int k;
+    R fg_exp_l[m2p2];
+
+    nfft_sort_nodes(ths);
+
+    nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int u, o, l;
+      R fg_psij0, fg_psij1, fg_psij2;
+      R psij_const[m2p2];
+
+      nfft_uo(ths, (int)j, &u, &o, 0);
+      fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));
+      fg_psij1 = EXP(K(2.0) * (n * ths->x[j] - u) / ths->b[0]);
+      fg_psij2  = K(1.0);
+
+      psij_const[0] = fg_psij0;
+
+      for (l = 1; l < m2p2; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+      }
+
+      nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+    }
+    return;
+  } /* if(FG_PSI) */
+
+  if (ths->nfft_flags & PRE_LIN_PSI)
+  {
+    const int K = ths->K, ip_s = K / (m + 2);
+    int k;
+
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u, o, l;
+      R ip_y, ip_w;
+      int ip_u;
+      R psij_const[m2p2];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths, (int)j, &u, &o, 0);
+
+      ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y - ip_u;
+
+      for (l = 0; l < m2p2; l++)
+        psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)
+          + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);
+
+      nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+    }
+    return;
+  } /* if(PRE_LIN_PSI) */
+  else
+  {
+    /* no precomputed psi at all */
+    int k;
+
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      R psij_const[m2p2];
+      int u, o, l;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths, (int)j, &u, &o, 0);
+
+      for (l = 0; l < m2p2; l++)
+        psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));
+
+      nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+    }
+  }
+}
+
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A                        \
+{                                                                             \
+          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \
+          if (k > 0)                                                          \
+            assert(ar_x[2*k-2] < min_u_a);                                    \
+}
+#else
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A
+#endif
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B                        \
+{                                                                             \
+          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \
+          if (k > 0)                                                          \
+            assert(ar_x[2*k-2] < min_u_b);                                    \
+}
+#else
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B
+#endif
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \
+{                                                                             \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g,               \
+                ths->psi + j * (2 * m + 2), ths->x + j, n, m, my_u0, my_o0);  \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \
+{                                                                             \
+            R psij_const[2 * m + 2];                                          \
+            int u, o, l;                                                      \
+            R fg_psij0 = ths->psi[2 * j];                                     \
+            R fg_psij1 = ths->psi[2 * j + 1];                                 \
+            R fg_psij2 = K(1.0);                                              \
+                                                                              \
+            psij_const[0] = fg_psij0;                                         \
+            for (l = 1; l <= 2 * m + 1; l++)                                  \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];              \
+            }                                                                 \
+                                                                              \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
+                ths->x + j, n, m, my_u0, my_o0);                              \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \
+{                                                                             \
+            R psij_const[2 * m + 2];                                          \
+            R fg_psij0, fg_psij1, fg_psij2;                                   \
+            int u, o, l;                                                      \
+                                                                              \
+            nfft_uo(ths, j, &u, &o, 0);                                       \
+            fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));                           \
+            fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]);       \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[0] = fg_psij0;                                         \
+            for (l = 1; l <= 2 * m + 1; l++)                                  \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];              \
+            }                                                                 \
+                                                                              \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
+                ths->x + j, n, m, my_u0, my_o0);                              \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \
+{                                                                             \
+            R psij_const[2 * m + 2];                                          \
+            int ip_u;                                                         \
+            R ip_y, ip_w;                                                     \
+            int u, o, l;                                                      \
+                                                                              \
+            nfft_uo(ths, j, &u, &o, 0);                                       \
+                                                                              \
+            ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);                       \
+            ip_u = LRINT(FLOOR(ip_y));                                        \
+            ip_w = ip_y - ip_u;                                               \
+            for (l = 0; l < 2 * m + 2; l++)                                   \
+              psij_const[l]                                                   \
+                  = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)              \
+                      + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);                \
+                                                                              \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
+                ths->x + j, n, m, my_u0, my_o0);                              \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \
+{                                                                             \
+            R psij_const[2 * m + 2];                                          \
+            int u, o, l;                                                      \
+                                                                              \
+            nfft_uo(ths, j, &u, &o, 0);                                       \
+                                                                              \
+            for (l = 0; l <= 2 * m + 1; l++)                                  \
+              psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));              \
+                                                                              \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
+                ths->x + j, n, m, my_u0, my_o0);                              \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(whichone)                       \
+{                                                                             \
+    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \
+    {                                                                         \
+      _Pragma("omp parallel private(k)")                                      \
+      {                                                                       \
+        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \
+        int *ar_x = ths->index_x;                                             \
+                                                                              \
+        nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
+        		                          &min_u_b, &max_u_b, 1, &n, m);      \
+                                                                              \
+        if (min_u_a != -1)                                                    \
+        {                                                                     \
+          k = index_x_binary_search(ar_x, M, min_u_a);                        \
+                                                                              \
+          MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A                      \
+                                                                              \
+          while (k < M)                                                       \
+          {                                                                   \
+            int u_prod = ar_x[2*k];                                           \
+            int j = ar_x[2*k+1];                                              \
+                                                                              \
+            if (u_prod < min_u_a || u_prod > max_u_a)                         \
+              break;                                                          \
+                                                                              \
+            MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
+                                                                              \
+            k++;                                                              \
+          }                                                                   \
+        }                                                                     \
+                                                                              \
+        if (min_u_b != -1)                                                    \
+        {                                                                     \
+          k = index_x_binary_search(ar_x, M, min_u_b);                        \
+                                                                              \
+          MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B                      \
+                                                                              \
+          while (k < M)                                                       \
+          {                                                                   \
+            int u_prod = ar_x[2*k];                                           \
+            int j = ar_x[2*k+1];                                              \
+                                                                              \
+            if (u_prod < min_u_b || u_prod > max_u_b)                         \
+              break;                                                          \
+                                                                              \
+            MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
+                                                                              \
+            k++;                                                              \
+          }                                                                   \
+        }                                                                     \
+      } /* omp parallel */                                                    \
+      return;                                                                 \
+    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */                                    \
+}
+
+static void nfft_adjoint_1d_B(nfft_plan *ths)
+{
+  const int n = ths->n[0], M = ths->M_total, m = ths->m;
+  int k;
+  C *g = (C*)ths->g;
+
+  memset(g,0,ths->n_total*sizeof(C));
+
+  if (ths->nfft_flags & PRE_FULL_PSI)
+  {
+    nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
+        1, ths->n, m, ths->nfft_flags, ths->index_x);
+    return;
+  } /* if(PRE_FULL_PSI) */
+
+  if (ths->nfft_flags & PRE_PSI)
+  {
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_PSI)
+#endif
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+#ifdef _OPENMP
+      nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, ths->psi + j * (2 * m + 2), ths->x + j, n, m);
+#else
+      nfft_adjoint_1d_compute_serial(ths->f + j, g, ths->psi + j * (2 * m + 2), ths->x + j, n, m);
+#endif
+    }
+
+    return;
+  } /* if(PRE_PSI) */
+
+  if (ths->nfft_flags & PRE_FG_PSI)
+  {
+    R fg_exp_l[2 * m + 2];
+
+    nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+#endif
+
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      R psij_const[2 * m + 2];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int l;
+      R fg_psij0 = ths->psi[2 * j];
+      R fg_psij1 = ths->psi[2 * j + 1];
+      R fg_psij2 = K(1.0);
+
+      psij_const[0] = fg_psij0;
+      for (l = 1; l <= 2 * m + 1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+      }
+
+#ifdef _OPENMP
+      nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+      nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+    }
+
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if (ths->nfft_flags & FG_PSI)
+  {
+    R fg_exp_l[2 * m + 2];
+
+    nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+    nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(FG_PSI)
+#endif
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u,o,l;
+      R psij_const[2 * m + 2];
+      R fg_psij0, fg_psij1, fg_psij2;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths, j, &u, &o, 0);
+      fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));
+      fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]);
+      fg_psij2 = K(1.0);
+      psij_const[0] = fg_psij0;
+      for (l = 1; l <= 2 * m + 1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+      }
+
+#ifdef _OPENMP
+      nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+      nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+    }
+
+    return;
+  } /* if(FG_PSI) */
+
+  if (ths->nfft_flags & PRE_LIN_PSI)
+  {
+    const int K = ths->K;
+    const int ip_s = K / (m + 2);
+
+    nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+#endif
+
+    #pragma openmp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u,o,l;
+      int ip_u;
+      R ip_y, ip_w;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      R psij_const[2 * m + 2];
+
+      nfft_uo(ths, j, &u, &o, 0);
+
+      ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y - ip_u;
+      for (l = 0; l < 2 * m + 2; l++)
+        psij_const[l]
+            = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)
+                + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);
+
+#ifdef _OPENMP
+      nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+      nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+    }
+    return;
+  } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+  nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+  MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(NO_PSI)
+#endif
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < M; k++)
+  {
+    int u,o,l;
+    R psij_const[2 * m + 2];
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    nfft_uo(ths, j, &u, &o, 0);
+
+    for (l = 0; l <= 2 * m + 1; l++)
+      psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));
+
+#ifdef _OPENMP
+    nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+    nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+  }
+}
+
+void nfft_trafo_1d(nfft_plan *ths)
+{
+  const int N = ths->N[0], N2 = N/2, n = ths->n[0];
+  C *f_hat1 = (C*)ths->f_hat, *f_hat2 = (C*)&ths->f_hat[N2];
+
+  ths->g_hat = ths->g1;
+  ths->g = ths->g2;
+
+  {
+    C *g_hat1 = (C*)&ths->g_hat[n-N/2], *g_hat2 = (C*)ths->g_hat;
+    R *c_phi_inv1, *c_phi_inv2;
+
+    TIC(0)
+#ifdef _OPENMP
+    {
+      int k;
+      #pragma omp parallel for default(shared) private(k)
+      for (k = 0; k < ths->n_total; k++)
+        ths->g_hat[k] = 0.0;
+    }
+#else
+    memset(ths->g_hat, 0, ths->n_total*sizeof(C));
+#endif
+    if(ths->nfft_flags & PRE_PHI_HUT)
+    {
+      int k;
+      c_phi_inv1 = ths->c_phi_inv[0];
+      c_phi_inv2 = &ths->c_phi_inv[0][N2];
+
+      #pragma omp parallel for default(shared) private(k)
+      for (k = 0; k < N2; k++)
+      {
+        g_hat1[k] = f_hat1[k] * c_phi_inv1[k];
+        g_hat2[k] = f_hat2[k] * c_phi_inv2[k];
+      }
+    }
+    else
+    {
+      int k;
+      #pragma omp parallel for default(shared) private(k)
+      for (k = 0; k < N2; k++)
+      {
+        g_hat1[k] = f_hat1[k] / (PHI_HUT(k-N2,0));
+        g_hat2[k] = f_hat2[k] / (PHI_HUT(k,0));
+      }
+    }
+    TOC(0)
+
+    TIC_FFTW(1)
+    fftw_execute(ths->my_fftw_plan1);
+    TOC_FFTW(1);
+
+    TIC(2);
+    nfft_trafo_1d_B(ths);
+    TOC(2);
+  }
+}
+
+void nfft_adjoint_1d(nfft_plan *ths)
+{
+  int n,N;
+  C *g_hat1,*g_hat2,*f_hat1,*f_hat2;
+  R *c_phi_inv1, *c_phi_inv2;
+
+  N=ths->N[0];
+  n=ths->n[0];
+
+  ths->g_hat=ths->g1;
+  ths->g=ths->g2;
+
+  f_hat1=(C*)ths->f_hat;
+  f_hat2=(C*)&ths->f_hat[N/2];
+  g_hat1=(C*)&ths->g_hat[n-N/2];
+  g_hat2=(C*)ths->g_hat;
+
+  TIC(2)
+  nfft_adjoint_1d_B(ths);
+  TOC(2)
+
+  TIC_FFTW(1)
+  fftw_execute(ths->my_fftw_plan2);
+  TOC_FFTW(1);
+
+  TIC(0)
+  if(ths->nfft_flags & PRE_PHI_HUT)
+  {
+    int k;
+    c_phi_inv1=ths->c_phi_inv[0];
+    c_phi_inv2=&ths->c_phi_inv[0][N/2];
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < N/2; k++)
+    {
+      f_hat1[k] = g_hat1[k] * c_phi_inv1[k];
+      f_hat2[k] = g_hat2[k] * c_phi_inv2[k];
+    }
+  }
+  else
+  {
+    int k;
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < N/2; k++)
+    {
+      f_hat1[k] = g_hat1[k] / (PHI_HUT(k-N/2,0));
+      f_hat2[k] = g_hat2[k] / (PHI_HUT(k,0));
+    }
+  }
+  TOC(0)
+}
+
+
+/* ############################################################ SPECIFIC VERSIONS FOR d=2 */
+
+static void nfft_2d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+{
+  int l;
+  R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
+
+  fg_exp_b0 = EXP(K(-1.0)/b);
+  fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
+  fg_exp_b1 = K(1.0);
+  fg_exp_b2 = K(1.0);
+  fg_exp_l[0] = K(1.0);
+  for(l=1; l <= 2*m+1; l++)
+    {
+      fg_exp_b2 = fg_exp_b1*fg_exp_b0;
+      fg_exp_b1 *= fg_exp_b0_sq;
+      fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;
+    }
+}
+
+static void nfft_trafo_2d_compute(C *fj, const C *g,
+          const R *psij_const0, const R *psij_const1,
+          const R *xj0, const R *xj1,
+          const int n0, const int n1, const int m)
+{
+  int u0,o0,l0,u1,o1,l1;
+  const C *gj;
+  const R *psij0,*psij1;
+
+  psij0=psij_const0;
+  psij1=psij_const1;
+
+  nfft_uo2(&u0,&o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+  *fj=0;
+
+  if(u0<o0)
+      if(u1<o1)
+    for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<=2*m+1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+    }
+      else
+    for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<2*m+1-o1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+        gj=g+(u0+l0)*n1;
+        for(l1=0; l1<=o1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+    }
+  else
+      if(u1<o1)
+      {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<=2*m+1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+    }
+    for(l0=0; l0<=o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+l0*n1+u1;
+        for(l1=0; l1<=2*m+1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+    }
+      }
+      else
+      {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<2*m+1-o1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+        gj=g+(u0+l0)*n1;
+        for(l1=0; l1<=o1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+    }
+    for(l0=0; l0<=o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+l0*n1+u1;
+        for(l1=0; l1<2*m+1-o1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+        gj=g+l0*n1;
+        for(l1=0; l1<=o1; l1++)
+      (*fj) += (*psij0) * (*psij1++) * (*gj++);
+    }
+      }
+}
+
+#ifdef _OPENMP
+/* adjoint NFFT two-dimensional case with OpenMP atomic operations */
+static void nfft_adjoint_2d_compute_omp_atomic(const C f, C *g,
+            const R *psij_const0, const R *psij_const1,
+            const R *xj0, const R *xj1,
+            const int n0, const int n1, const int m)
+{
+  int u0,o0,l0,u1,o1,l1;
+  const int lprod = (2*m+2) * (2*m+2); 
+
+  unsigned long int index_temp0[2*m+2];
+  unsigned long int index_temp1[2*m+2];
+
+  nfft_uo2(&u0,&o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+  for (l0=0; l0<=2*m+1; l0++)
+    index_temp0[l0] = (u0+l0)%n0;
+
+  for (l1=0; l1<=2*m+1; l1++)
+    index_temp1[l1] = (u1+l1)%n1;
+
+  for(l0=0; l0<=2*m+1; l0++)
+  {
+    for(l1=0; l1<=2*m+1; l1++)
+    {
+      unsigned long int i = index_temp0[l0] * n1 + index_temp1[l1];
+      C *lhs = g+i;
+      R *lhs_real = (R*)lhs;
+      C val = psij_const0[l0] * psij_const1[l1] * f;
+
+      #pragma omp atomic
+      lhs_real[0] += creal(val);
+
+      #pragma omp atomic
+      lhs_real[1] += cimag(val);
+    }
+  }
+}
+#endif
+
+#ifdef _OPENMP
+/** 
+ * Adjoint NFFT for two-dimensional case updating only a specified range of
+ * vector g.
+ *
+ * \arg f input coefficient f[j]
+ * \arg g output vector g
+ * \arg psij_const0 vector of window function values first component
+ * \arg psij_const1 vector of window function values second component
+ * \arg xj0 node x[2*j]
+ * \arg xj1 node x[2*j+1]
+ * \arg n0 FFTW length (number oversampled Fourier coefficients) first comp.
+ * \arg n1 FFTW length (number oversampled Fourier coefficients) second comp.
+ * \arg m window length
+ * \arg my_u0 lowest index (first component) the current thread writes to
+ * \arg my_o0 highest index (second component) the current thread writes to
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
+            const R *psij_const0, const R *psij_const1,
+            const R *xj0, const R *xj1,
+            const int n0, const int n1, const int m,
+	    const int my_u0, const int my_o0)
+{
+  int ar_u0,ar_o0,l0,u1,o1,l1;
+  const int lprod = (2*m+2) * (2*m+2); 
+  unsigned long int index_temp1[2*m+2];
+
+  nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+  for (l1=0; l1<=2*m+1; l1++)
+    index_temp1[l1] = (u1+l1)%n1;
+
+  if(ar_u0<ar_o0)
+  {
+    int u0 = MAX(my_u0,ar_u0);
+    int o0 = MIN(my_o0,ar_o0);
+    int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+    assert(offset_psij >= 0);
+    assert(o0-u0 <= 2*m+1);
+    assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+    for (l0 = 0; l0 <= o0-u0; l0++)
+    {
+      unsigned long int i0 = (u0+l0) * n1;
+      const C val0 = psij_const0[offset_psij+l0];
+
+      for(l1=0; l1<=2*m+1; l1++)
+        g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;
+    }
+  }
+  else
+  {
+    int u0 = MAX(my_u0,ar_u0);
+    int o0 = my_o0;
+    int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+    assert(offset_psij >= 0);
+    assert(o0-u0 <= 2*m+1);
+    assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+    for (l0 = 0; l0 <= o0-u0; l0++)
+    {
+      unsigned long int i0 = (u0+l0) * n1;
+      const C val0 = psij_const0[offset_psij+l0];
+
+      for(l1=0; l1<=2*m+1; l1++)
+        g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;
+    }
+
+    u0 = my_u0;
+    o0 = MIN(my_o0,ar_o0);
+    offset_psij += my_u0-ar_u0+n0;
+
+#ifdef OMP_ASSERT
+    if (u0<=o0)
+    {
+      assert(o0-u0 <= 2*m+1);
+      assert(offset_psij+o0-u0 <= 2*m+1);
+    }
+#endif
+
+    for (l0 = 0; l0 <= o0-u0; l0++)
+    {
+      unsigned long int i0 = (u0+l0) * n1;
+      const C val0 = psij_const0[offset_psij+l0];
+
+      for(l1=0; l1<=2*m+1; l1++)
+        g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;
+    }
+  }
+}
+#endif
+
+#ifndef _OPENMP
+static void nfft_adjoint_2d_compute_serial(const C *fj, C *g,
+            const R *psij_const0, const R *psij_const1,
+            const R *xj0, const R *xj1,
+            const int n0, const int n1, const int m)
+{
+  int u0,o0,l0,u1,o1,l1;
+  C *gj;
+  const R *psij0,*psij1;
+
+  psij0=psij_const0;
+  psij1=psij_const1;
+
+  nfft_uo2(&u0,&o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+  if(u0<o0)
+      if(u1<o1)
+    for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<=2*m+1; l1++)
+    (*gj++) += (*psij0) * (*psij1++) * (*fj);
+    }
+      else
+    for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<2*m+1-o1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+        gj=g+(u0+l0)*n1;
+        for(l1=0; l1<=o1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+    }
+  else
+      if(u1<o1)
+      {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<=2*m+1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+    }
+    for(l0=0; l0<=o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+l0*n1+u1;
+        for(l1=0; l1<=2*m+1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+    }
+      }
+      else
+      {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+(u0+l0)*n1+u1;
+        for(l1=0; l1<2*m+1-o1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+        gj=g+(u0+l0)*n1;
+        for(l1=0; l1<=o1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+    }
+    for(l0=0; l0<=o0; l0++,psij0++)
+    {
+        psij1=psij_const1;
+        gj=g+l0*n1+u1;
+        for(l1=0; l1<2*m+1-o1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+        gj=g+l0*n1;
+        for(l1=0; l1<=o1; l1++)
+      (*gj++) += (*psij0) * (*psij1++) * (*fj);
+    }
+      }
+}
+#endif
+
+static void nfft_trafo_2d_B(nfft_plan *ths)
+{
+  const C *g = (C*)ths->g;
+  const int N0 = ths->N[0];
+  const int n0 = ths->n[0];
+  const int N1 = ths->N[1];
+  const int n1 = ths->n[1];
+  const int M = ths->M_total;
+  const int m = ths->m;
+
+  int k;
+
+  if(ths->nfft_flags & PRE_FULL_PSI)
+  {
+    const int lprod = (2*m+2) * (2*m+2);
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int l;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      ths->f[j] = K(0.0);
+      for (l = 0; l < lprod; l++)
+        ths->f[j] += ths->psi[j*lprod+l] * g[ths->psi_index_g[j*lprod+l]];
+    }
+    return;
+  } /* if(PRE_FULL_PSI) */
+
+  if(ths->nfft_flags & PRE_PSI)
+  {
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      nfft_trafo_2d_compute(ths->f+j, g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+    }
+
+      return;
+  } /* if(PRE_PSI) */
+
+  if(ths->nfft_flags & PRE_FG_PSI)
+  {
+    R fg_exp_l[2*(2*m+2)];
+
+    nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      R psij_const[2*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int l;
+      R fg_psij0 = ths->psi[2*j*2];
+      R fg_psij1 = ths->psi[2*j*2+1];
+      R fg_psij2 = K(1.0);
+
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      fg_psij0 = ths->psi[2*(j*2+1)];
+      fg_psij1 = ths->psi[2*(j*2+1)+1];
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+      nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+    }
+
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if(ths->nfft_flags & FG_PSI)
+  {
+    R fg_exp_l[2*(2*m+2)];
+
+    nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u, o, l;
+      R fg_psij0, fg_psij1, fg_psij2;
+      R psij_const[2*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths,j,&u,&o,0);
+      fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));
+      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);
+      fg_psij2 = K(1.0);
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      nfft_uo(ths,j,&u,&o,1);
+      fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));
+      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+      nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+    }
+
+    return;
+  } /* if(FG_PSI) */
+
+  if(ths->nfft_flags & PRE_LIN_PSI)
+  {
+    const int K = ths->K, ip_s = K / (m + 2);
+
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u, o, l;
+      R ip_y, ip_w;
+      int ip_u;
+      R psij_const[2*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths,j,&u,&o,0);
+      ip_y = FABS(n0*ths->x[2*j] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_uo(ths,j,&u,&o,1);
+      ip_y = FABS(n1*ths->x[2*j+1] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+    }
+      return;
+  } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+
+  nfft_sort_nodes(ths);
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < M; k++)
+  {
+    R psij_const[2*(2*m+2)];
+    int u, o, l;
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    nfft_uo(ths,j,&u,&o,0);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));
+
+    nfft_uo(ths,j,&u,&o,1);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));
+
+    nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+  }
+}
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A                        \
+{                                                                             \
+          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \
+          if (k > 0)                                                          \
+            assert(ar_x[2*k-2] < min_u_a);                                    \
+}
+#else
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A
+#endif
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B                        \
+{                                                                             \
+          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \
+          if (k > 0)                                                          \
+            assert(ar_x[2*k-2] < min_u_b);                                    \
+}
+#else
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B
+#endif
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
+                ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2),               \
+                ths->x+2*j, ths->x+2*j+1, n0, n1, m, my_u0, my_o0);
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \
+{                                                                             \
+            R psij_const[2*(2*m+2)];                                          \
+            int u, o, l;                                                      \
+            R fg_psij0 = ths->psi[2*j*2];                                     \
+            R fg_psij1 = ths->psi[2*j*2+1];                                   \
+            R fg_psij2 = K(1.0);                                              \
+                                                                              \
+            psij_const[0] = fg_psij0;                                         \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
+            }                                                                 \
+                                                                              \
+            fg_psij0 = ths->psi[2*(j*2+1)];                                   \
+            fg_psij1 = ths->psi[2*(j*2+1)+1];                                 \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[2*m+2] = fg_psij0;                                     \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
+            }                                                                 \
+                                                                              \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
+                n0, n1, m, my_u0, my_o0);                                     \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \
+{                                                                             \
+            R psij_const[2*(2*m+2)];                                          \
+            R fg_psij0, fg_psij1, fg_psij2;                                   \
+            int u, o, l;                                                      \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,0);                                           \
+            fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));                        \
+            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);          \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[0] = fg_psij0;                                         \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
+            }                                                                 \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,1);                                           \
+            fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));                      \
+            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);        \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[2*m+2] = fg_psij0;                                     \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
+            }                                                                 \
+                                                                              \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
+                n0, n1, m, my_u0, my_o0);                                     \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \
+{                                                                             \
+            R psij_const[2*(2*m+2)];                                          \
+            int u, o, l;                                                      \
+            int ip_u;                                                         \
+            R ip_y, ip_w;                                                     \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,0);                                           \
+            ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s);                      \
+            ip_u = LRINT(FLOOR(ip_y));                                        \
+            ip_w = ip_y-ip_u;                                                 \
+            for(l=0; l < 2*m+2; l++)                                          \
+              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +      \
+                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);                          \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,1);                                           \
+            ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s);                    \
+            ip_u = LRINT(FLOOR(ip_y));                                        \
+            ip_w = ip_y-ip_u;                                                 \
+            for(l=0; l < 2*m+2; l++)                                          \
+              psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +  \
+                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                    \
+                                                                              \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
+                n0, n1, m, my_u0, my_o0);                                     \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \
+{                                                                             \
+            R psij_const[2*(2*m+2)];                                          \
+            int u, o, l;                                                      \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,0);                                           \
+            for(l=0;l<=2*m+1;l++)                                             \
+              psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));             \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,1);                                           \
+            for(l=0;l<=2*m+1;l++)                                             \
+              psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));     \
+                                                                              \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
+                n0, n1, m, my_u0, my_o0);                                     \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(whichone)                       \
+{                                                                             \
+    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \
+    {                                                                         \
+      _Pragma("omp parallel private(k)")                                      \
+      {                                                                       \
+        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \
+        int *ar_x = ths->index_x;                                             \
+                                                                              \
+        nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
+            &min_u_b, &max_u_b, 2, ths->n, m);                                \
+                                                                              \
+        if (min_u_a != -1)                                                    \
+        {                                                                     \
+          k = index_x_binary_search(ar_x, M, min_u_a);                        \
+                                                                              \
+          MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A                      \
+                                                                              \
+          while (k < M)                                                       \
+          {                                                                   \
+            int u_prod = ar_x[2*k];                                           \
+            int j = ar_x[2*k+1];                                              \
+                                                                              \
+            if (u_prod < min_u_a || u_prod > max_u_a)                         \
+              break;                                                          \
+                                                                              \
+            MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
+                                                                              \
+            k++;                                                              \
+          }                                                                   \
+        }                                                                     \
+                                                                              \
+        if (min_u_b != -1)                                                    \
+        {                                                                     \
+          int k = index_x_binary_search(ar_x, M, min_u_b);                    \
+                                                                              \
+          MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B                      \
+                                                                              \
+          while (k < M)                                                       \
+          {                                                                   \
+            int u_prod = ar_x[2*k];                                           \
+            int j = ar_x[2*k+1];                                              \
+                                                                              \
+            if (u_prod < min_u_b || u_prod > max_u_b)                         \
+              break;                                                          \
+                                                                              \
+            MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
+                                                                              \
+            k++;                                                              \
+          }                                                                   \
+        }                                                                     \
+      } /* omp parallel */                                                    \
+      return;                                                                 \
+    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */                                    \
+}
+
+
+static void nfft_adjoint_2d_B(nfft_plan *ths)
+{
+  const int N0 = ths->N[0];
+  const int n0 = ths->n[0];
+  const int N1 = ths->N[1];
+  const int n1 = ths->n[1];
+  const int M = ths->M_total;
+  const int m = ths->m;
+  C* g = (C*) ths->g;
+  int k;
+
+  memset(g,0,ths->n_total*sizeof(C));
+
+  if(ths->nfft_flags & PRE_FULL_PSI)
+  {
+    nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
+        2, ths->n, m, ths->nfft_flags, ths->index_x);
+    return;
+  } /* if(PRE_FULL_PSI) */
+
+  if(ths->nfft_flags & PRE_PSI)
+  {
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_PSI)
+#endif
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+#ifdef _OPENMP
+      nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+      nfft_adjoint_2d_compute_serial(ths->f+j, g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+    }
+    return;
+  } /* if(PRE_PSI) */
+
+  if(ths->nfft_flags & PRE_FG_PSI)
+  {
+    R fg_exp_l[2*(2*m+2)];
+
+    nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+#endif
+
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      R psij_const[2*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int l;
+      R fg_psij0 = ths->psi[2*j*2];
+      R fg_psij1 = ths->psi[2*j*2+1];
+      R fg_psij2 = K(1.0);
+
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      fg_psij0 = ths->psi[2*(j*2+1)];
+      fg_psij1 = ths->psi[2*(j*2+1)+1];
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+#ifdef _OPENMP
+      nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+      nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+    }
+
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if(ths->nfft_flags & FG_PSI)
+  {
+    R fg_exp_l[2*(2*m+2)];
+
+    nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+    nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(FG_PSI)
+#endif
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u, o, l;
+      R fg_psij0, fg_psij1, fg_psij2;
+      R psij_const[2*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths,j,&u,&o,0);
+      fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));
+      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);
+      fg_psij2 = K(1.0);
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      nfft_uo(ths,j,&u,&o,1);
+      fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));
+      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+#ifdef _OPENMP
+      nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+      nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+    }
+
+    return;
+  } /* if(FG_PSI) */
+
+  if(ths->nfft_flags & PRE_LIN_PSI)
+  {
+    const int K = ths->K;
+    const int ip_s = K / (m + 2);
+
+    nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+#endif
+
+    #pragma openmp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u,o,l;
+      int ip_u;
+      R ip_y, ip_w;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      R psij_const[2*(2*m+2)];
+
+      nfft_uo(ths,j,&u,&o,0);
+      ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_uo(ths,j,&u,&o,1);
+      ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+#ifdef _OPENMP
+      nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+      nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+  }
+      return;
+    } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+  nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+  MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(NO_PSI)
+#endif
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < M; k++)
+  {
+    int u,o,l;
+    R psij_const[2*(2*m+2)];
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    nfft_uo(ths,j,&u,&o,0);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));
+
+    nfft_uo(ths,j,&u,&o,1);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));
+
+#ifdef _OPENMP
+    nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+    nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+  }
+}
+
+
+void nfft_trafo_2d(nfft_plan *ths)
+{
+  int k0,k1,n0,n1,N0,N1;
+  C *g_hat,*f_hat;
+  R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;
+  R ck01, ck02, ck11, ck12;
+  C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;
+
+  ths->g_hat=ths->g1;
+  ths->g=ths->g2;
+
+  N0=ths->N[0];
+  N1=ths->N[1];
+  n0=ths->n[0];
+  n1=ths->n[1];
+
+  f_hat=(C*)ths->f_hat;
+  g_hat=(C*)ths->g_hat;
+
+  TIC(0)
+#ifdef _OPENMP
+  #pragma omp parallel for default(shared) private(k0)
+  for (k0 = 0; k0 < ths->n_total; k0++)
+    ths->g_hat[k0] = 0.0;
+#else
+  memset(ths->g_hat,0,ths->n_total*sizeof(C));
+#endif
+  if(ths->nfft_flags & PRE_PHI_HUT)
+    {
+      c_phi_inv01=ths->c_phi_inv[0];
+      c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+      #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)
+      for(k0=0;k0<N0/2;k0++)
+      {
+        ck01=c_phi_inv01[k0];
+        ck02=c_phi_inv02[k0];
+
+        c_phi_inv11=ths->c_phi_inv[1];
+        c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+        g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);
+        f_hat11=f_hat + k0*N1;
+        g_hat21=g_hat + k0*n1+n1-(N1/2);
+        f_hat21=f_hat + ((N0/2)+k0)*N1;
+        g_hat12=g_hat + (n0-(N0/2)+k0)*n1;
+        f_hat12=f_hat + k0*N1+(N1/2);
+        g_hat22=g_hat + k0*n1;
+        f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);
+
+        for(k1=0;k1<N1/2;k1++)
+        {
+          ck11=c_phi_inv11[k1];
+          ck12=c_phi_inv12[k1];
+
+          g_hat11[k1] = f_hat11[k1] * ck01 * ck11;
+          g_hat21[k1] = f_hat21[k1] * ck02 * ck11;
+          g_hat12[k1] = f_hat12[k1] * ck01 * ck12;
+          g_hat22[k1] = f_hat22[k1] * ck02 * ck12;
+        }
+      }
+    }
+  else
+    #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)
+    for(k0=0;k0<N0/2;k0++)
+      {
+  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(k0,0));
+  for(k1=0;k1<N1/2;k1++)
+    {
+      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(k1,1));
+      g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] = f_hat[k0*N1+k1]             * ck01 * ck11;
+      g_hat[k0*n1+n1-N1/2+k1]           = f_hat[(N0/2+k0)*N1+k1]      * ck02 * ck11;
+      g_hat[(n0-N0/2+k0)*n1+k1]         = f_hat[k0*N1+N1/2+k1]        * ck01 * ck12;
+      g_hat[k0*n1+k1]                   = f_hat[(N0/2+k0)*N1+N1/2+k1] * ck02 * ck12;
+    }
+      }
+
+  TOC(0)
+
+  TIC_FFTW(1)
+  fftw_execute(ths->my_fftw_plan1);
+  TOC_FFTW(1);
+
+  TIC(2);
+  nfft_trafo_2d_B(ths);
+  TOC(2);
+}
+
+void nfft_adjoint_2d(nfft_plan *ths)
+{
+  int k0,k1,n0,n1,N0,N1;
+  C *g_hat,*f_hat;
+  R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;
+  R ck01, ck02, ck11, ck12;
+  C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;
+
+  ths->g_hat=ths->g1;
+  ths->g=ths->g2;
+
+  N0=ths->N[0];
+  N1=ths->N[1];
+  n0=ths->n[0];
+  n1=ths->n[1];
+
+  f_hat=(C*)ths->f_hat;
+  g_hat=(C*)ths->g_hat;
+
+  TIC(2);
+  nfft_adjoint_2d_B(ths);
+  TOC(2);
+
+  TIC_FFTW(1)
+  fftw_execute(ths->my_fftw_plan2);
+  TOC_FFTW(1);
+
+  TIC(0)
+  if(ths->nfft_flags & PRE_PHI_HUT)
+    {
+      c_phi_inv01=ths->c_phi_inv[0];
+      c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+      #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)
+      for(k0=0;k0<N0/2;k0++)
+      {
+        ck01=c_phi_inv01[k0];
+        ck02=c_phi_inv02[k0];
+
+        c_phi_inv11=ths->c_phi_inv[1];
+        c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+        g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);
+        f_hat11=f_hat + k0*N1;
+        g_hat21=g_hat + k0*n1+n1-(N1/2);
+        f_hat21=f_hat + ((N0/2)+k0)*N1;
+        g_hat12=g_hat + (n0-(N0/2)+k0)*n1;
+        f_hat12=f_hat + k0*N1+(N1/2);
+        g_hat22=g_hat + k0*n1;
+        f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);
+
+        for(k1=0;k1<N1/2;k1++)
+        {
+          ck11=c_phi_inv11[k1];
+          ck12=c_phi_inv12[k1];
+
+          f_hat11[k1] = g_hat11[k1] * ck01 * ck11;
+          f_hat21[k1] = g_hat21[k1] * ck02 * ck11;
+          f_hat12[k1] = g_hat12[k1] * ck01 * ck12;
+          f_hat22[k1] = g_hat22[k1] * ck02 * ck12;
+        }
+      }
+    }
+  else
+    #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)
+    for(k0=0;k0<N0/2;k0++)
+      {
+  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(k0,0));
+  for(k1=0;k1<N1/2;k1++)
+    {
+      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(k1,1));
+      f_hat[k0*N1+k1]             = g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] * ck01 * ck11;
+      f_hat[(N0/2+k0)*N1+k1]      = g_hat[k0*n1+n1-N1/2+k1]           * ck02 * ck11;
+      f_hat[k0*N1+N1/2+k1]        = g_hat[(n0-N0/2+k0)*n1+k1]         * ck01 * ck12;
+      f_hat[(N0/2+k0)*N1+N1/2+k1] = g_hat[k0*n1+k1]                   * ck02 * ck12;
+    }
+      }
+  TOC(0)
+}
+
+/* ############################################################ SPECIFIC VERSIONS FOR d=3 */
+
+static void nfft_3d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+{
+  int l;
+  R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
+
+  fg_exp_b0 = EXP(-1.0/b);
+  fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
+  fg_exp_b1 = K(1.0);
+  fg_exp_b2 = K(1.0);
+  fg_exp_l[0] = K(1.0);
+  for(l=1; l <= 2*m+1; l++)
+    {
+      fg_exp_b2 = fg_exp_b1*fg_exp_b0;
+      fg_exp_b1 *= fg_exp_b0_sq;
+      fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;
+    }
+}
+
+static void nfft_trafo_3d_compute(C *fj, const C *g,
+          const R *psij_const0, const R *psij_const1, const R *psij_const2,
+          const R *xj0, const R *xj1, const R *xj2,
+          const int n0, const int n1, const int n2, const int m)
+{
+  int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+  const C *gj;
+  const R *psij0,*psij1,*psij2;
+
+  psij0=psij_const0;
+  psij1=psij_const1;
+  psij2=psij_const2;
+
+  nfft_uo2(&u0,&o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+  *fj=0;
+
+  if(u0<o0)
+    if(u1<o1)
+      if(u2<o2)
+  for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+      psij1=psij_const1;
+      for(l1=0; l1<=2*m+1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+    for(l2=0; l2<=2*m+1; l2++)
+      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+        }
+    }
+      else/* asserts (u2>o2)*/
+  for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+      psij1=psij_const1;
+      for(l1=0; l1<=2*m+1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+    for(l2=0; l2<2*m+1-o2; l2++)
+      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    gj=g+((u0+l0)*n1+(u1+l1))*n2;
+    for(l2=0; l2<=o2; l2++)
+      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+        }
+    }
+    else/* asserts (u1>o1)*/
+      if(u2<o2)
+  for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+      psij1=psij_const1;
+      for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+    for(l2=0; l2<=2*m+1; l2++)
+      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+        }
+      for(l1=0; l1<=o1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+l1)*n2+u2;
+    for(l2=0; l2<=2*m+1; l2++)
+      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+        }
+    }
+      else/* asserts (u2>o2) */
+  {
+    for(l0=0; l0<=2*m+1; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+((u0+l0)*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+l1)*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+((u0+l0)*n1+l1)*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+  }
+  else/* asserts (u0>o0) */
+    if(u1<o1)
+      if(u2<o2)
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+  }
+      else/* asserts (u2>o2) */
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+((u0+l0)*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+(l0*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+  }
+    else/* asserts (u1>o1) */
+      if(u2<o2)
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+l1)*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+l1)*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+  }
+      else/* asserts (u2>o2) */
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+((u0+l0)*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+l1)*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+((u0+l0)*n1+l1)*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+(l0*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+l1)*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+      gj=g+(l0*n1+l1)*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+    }
+      }
+  }
+}
+
+#ifdef _OPENMP
+/** 
+ * Adjoint NFFT for three-dimensional case updating only a specified range of
+ * vector g.
+ *
+ * \arg f input coefficient f[j]
+ * \arg g output vector g
+ * \arg psij_const0 vector of window function values first component
+ * \arg psij_const1 vector of window function values second component
+ * \arg psij_const2 vector of window function values third component
+ * \arg xj0 node x[3*j]
+ * \arg xj1 node x[3*j+1]
+ * \arg xj2 node x[3*j+2]
+ * \arg n0 FFTW length (number oversampled Fourier coefficients) first comp.
+ * \arg n1 FFTW length (number oversampled Fourier coefficients) second comp.
+ * \arg n2 FFTW length (number oversampled Fourier coefficients) third comp.
+ * \arg m window length
+ * \arg my_u0 lowest index (first component) the current thread writes to
+ * \arg my_o0 highest index (second component) the current thread writes to
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
+            const R *psij_const0, const R *psij_const1, const R *psij_const2,
+            const R *xj0, const R *xj1, const R *xj2,
+            const int n0, const int n1, const int n2, const int m,
+	    const int my_u0, const int my_o0)
+{
+  int ar_u0,ar_o0,l0,u1,o1,l1,u2,o2,l2;
+  const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+
+  unsigned long int index_temp1[2*m+2];
+  unsigned long int index_temp2[2*m+2];
+
+  nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+  for (l1=0; l1<=2*m+1; l1++)
+    index_temp1[l1] = (u1+l1)%n1;
+
+  for (l2=0; l2<=2*m+1; l2++)
+    index_temp2[l2] = (u2+l2)%n2;
+
+  if(ar_u0<ar_o0)
+  {
+    int u0 = MAX(my_u0,ar_u0);
+    int o0 = MIN(my_o0,ar_o0);
+    int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+    assert(offset_psij >= 0);
+    assert(o0-u0 <= 2*m+1);
+    assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+    for (l0 = 0; l0 <= o0-u0; l0++)
+    {
+      const unsigned long int i0 = (u0+l0) * n1;
+      const C val0 = psij_const0[offset_psij+l0];
+
+      for(l1=0; l1<=2*m+1; l1++)
+      {
+        const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+        const C val1 = psij_const1[l1];
+
+        for(l2=0; l2<=2*m+1; l2++)
+          g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
+      }
+    }  
+  }
+  else
+  {
+    int u0 = MAX(my_u0,ar_u0);
+    int o0 = my_o0;
+    int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+    assert(offset_psij >= 0);
+    assert(o0-u0 <= 2*m+1);
+    assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+    for (l0 = 0; l0 <= o0-u0; l0++)
+    {
+      unsigned long int i0 = (u0+l0) * n1;
+      const C val0 = psij_const0[offset_psij+l0];
+
+      for(l1=0; l1<=2*m+1; l1++)
+      {
+        const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+        const C val1 = psij_const1[l1];
+
+        for(l2=0; l2<=2*m+1; l2++)
+          g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
+      }
+    }
+
+    u0 = my_u0;
+    o0 = MIN(my_o0,ar_o0);
+    offset_psij += my_u0-ar_u0+n0;
+
+#ifdef OMP_ASSERT
+    if (u0<=o0)
+    {
+      assert(o0-u0 <= 2*m+1);
+      assert(offset_psij+o0-u0 <= 2*m+1);
+    }
+#endif
+    for (l0 = 0; l0 <= o0-u0; l0++)
+    {
+      unsigned long int i0 = (u0+l0) * n1;
+      const C val0 = psij_const0[offset_psij+l0];
+
+      for(l1=0; l1<=2*m+1; l1++)
+      {
+        const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+        const C val1 = psij_const1[l1];
+
+        for(l2=0; l2<=2*m+1; l2++)
+          g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
+      }
+    }
+  }
+}
+#endif
+
+#ifdef _OPENMP
+/* adjoint NFFT three-dimensional case with OpenMP atomic operations */
+static void nfft_adjoint_3d_compute_omp_atomic(const C f, C *g,
+            const R *psij_const0, const R *psij_const1, const R *psij_const2,
+            const R *xj0, const R *xj1, const R *xj2,
+            const int n0, const int n1, const int n2, const int m)
+{
+  int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+  const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+
+  unsigned long int index_temp0[2*m+2];
+  unsigned long int index_temp1[2*m+2];
+  unsigned long int index_temp2[2*m+2];
+
+  nfft_uo2(&u0,&o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+  for (l0=0; l0<=2*m+1; l0++)
+    index_temp0[l0] = (u0+l0)%n0;
+
+  for (l1=0; l1<=2*m+1; l1++)
+    index_temp1[l1] = (u1+l1)%n1;
+
+  for (l2=0; l2<=2*m+1; l2++)
+    index_temp2[l2] = (u2+l2)%n2;
+
+  for(l0=0; l0<=2*m+1; l0++)
+  {
+    for(l1=0; l1<=2*m+1; l1++)
+    {
+      for(l2=0; l2<=2*m+1; l2++)
+      {
+        unsigned long int i = (index_temp0[l0] * n1 + index_temp1[l1]) * n2 + index_temp2[l2];
+        C *lhs = g+i;
+        R *lhs_real = (R*)lhs;
+        C val = psij_const0[l0] * psij_const1[l1] * psij_const2[l2] * f;
+
+        #pragma omp atomic
+        lhs_real[0] += creal(val);
+
+        #pragma omp atomic
+        lhs_real[1] += cimag(val);
+      }
+    }
+  }
+}
+#endif
+
+#ifndef _OPENMP
+static void nfft_adjoint_3d_compute_serial(const C *fj, C *g,
+            const R *psij_const0, const R *psij_const1, const R *psij_const2,
+            const R *xj0, const R *xj1, const R *xj2,
+            const int n0, const int n1, const int n2, const int m)
+{
+  int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+  C *gj;
+  const R *psij0,*psij1,*psij2;
+
+  psij0=psij_const0;
+  psij1=psij_const1;
+  psij2=psij_const2;
+
+  nfft_uo2(&u0,&o0,*xj0, n0, m);
+  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+  if(u0<o0)
+    if(u1<o1)
+      if(u2<o2)
+  for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+      psij1=psij_const1;
+      for(l1=0; l1<=2*m+1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+    for(l2=0; l2<=2*m+1; l2++)
+      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+        }
+    }
+      else/* asserts (u2>o2)*/
+  for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+      psij1=psij_const1;
+      for(l1=0; l1<=2*m+1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+    for(l2=0; l2<2*m+1-o2; l2++)
+      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    gj=g+((u0+l0)*n1+(u1+l1))*n2;
+    for(l2=0; l2<=o2; l2++)
+      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+        }
+    }
+    else/* asserts (u1>o1)*/
+      if(u2<o2)
+  for(l0=0; l0<=2*m+1; l0++,psij0++)
+    {
+      psij1=psij_const1;
+      for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+    for(l2=0; l2<=2*m+1; l2++)
+      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+        }
+      for(l1=0; l1<=o1; l1++,psij1++)
+        {
+    psij2=psij_const2;
+    gj=g+((u0+l0)*n1+l1)*n2+u2;
+    for(l2=0; l2<=2*m+1; l2++)
+      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+        }
+    }
+      else/* asserts (u2>o2) */
+  {
+    for(l0=0; l0<=2*m+1; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+((u0+l0)*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+l1)*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+((u0+l0)*n1+l1)*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+  }
+  else/* asserts (u0>o0) */
+    if(u1<o1)
+      if(u2<o2)
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+  }
+      else/* asserts (u2>o2) */
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+((u0+l0)*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<=2*m+1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+(l0*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+  }
+    else/* asserts (u1>o1) */
+      if(u2<o2)
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+l1)*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+l1)*n2+u2;
+      for(l2=0; l2<=2*m+1; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+  }
+      else/* asserts (u2>o2) */
+  {
+    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+((u0+l0)*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+((u0+l0)*n1+l1)*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+((u0+l0)*n1+l1)*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+
+    for(l0=0; l0<=o0; l0++,psij0++)
+      {
+        psij1=psij_const1;
+        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+(u1+l1))*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+(l0*n1+(u1+l1))*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+        for(l1=0; l1<=o1; l1++,psij1++)
+    {
+      psij2=psij_const2;
+      gj=g+(l0*n1+l1)*n2+u2;
+      for(l2=0; l2<2*m+1-o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+      gj=g+(l0*n1+l1)*n2;
+      for(l2=0; l2<=o2; l2++)
+        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+    }
+      }
+  }
+}
+#endif
+
+static void nfft_trafo_3d_B(nfft_plan *ths)
+{
+  const int N0 = ths->N[0];
+  const int n0 = ths->n[0];
+  const int N1 = ths->N[1];
+  const int n1 = ths->n[1];
+  const int N2 = ths->N[2];
+  const int n2 = ths->n[2];
+  const int M = ths->M_total;
+  const int m = ths->m;
+
+  const C* g = (C*) ths->g;
+
+  int k;
+
+  if(ths->nfft_flags & PRE_FULL_PSI)
+  {
+    const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int l;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      ths->f[j] = K(0.0);
+      for (l = 0; l < lprod; l++)
+        ths->f[j] += ths->psi[j*lprod+l] * g[ths->psi_index_g[j*lprod+l]];
+    }
+    return;
+  } /* if(PRE_FULL_PSI) */
+
+  if(ths->nfft_flags & PRE_PSI)
+  {
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      nfft_trafo_3d_compute(ths->f+j, g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+    }
+    return;
+  } /* if(PRE_PSI) */
+
+  if(ths->nfft_flags & PRE_FG_PSI)
+  {
+    R fg_exp_l[3*(2*m+2)];
+
+    nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int l;
+      R psij_const[3*(2*m+2)];
+      R fg_psij0 = ths->psi[2*j*3];
+      R fg_psij1 = ths->psi[2*j*3+1];
+      R fg_psij2 = K(1.0);
+
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      fg_psij0 = ths->psi[2*(j*3+1)];
+      fg_psij1 = ths->psi[2*(j*3+1)+1];
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+      fg_psij0 = ths->psi[2*(j*3+2)];
+      fg_psij1 = ths->psi[2*(j*3+2)+1];
+      fg_psij2 = K(1.0);
+      psij_const[2*(2*m+2)] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+      }
+
+      nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+    }
+
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if(ths->nfft_flags & FG_PSI)
+  {
+    R fg_exp_l[3*(2*m+2)];
+
+    nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int u, o, l;
+      R psij_const[3*(2*m+2)];
+      R fg_psij0, fg_psij1, fg_psij2;
+
+      nfft_uo(ths,j,&u,&o,0);
+      fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));
+      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);
+      fg_psij2 = K(1.0);
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      nfft_uo(ths,j,&u,&o,1);
+      fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));
+      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+      nfft_uo(ths,j,&u,&o,2);
+      fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));
+      fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);
+      fg_psij2 = K(1.0);
+      psij_const[2*(2*m+2)] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+      }
+
+      nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+    }
+
+    return;
+  } /* if(FG_PSI) */
+
+  if(ths->nfft_flags & PRE_LIN_PSI)
+  {
+    const int K = ths->K, ip_s = K / (m + 2);
+
+    nfft_sort_nodes(ths);
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u, o, l;
+      R ip_y, ip_w;
+      int ip_u;
+      R psij_const[3*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+      nfft_uo(ths,j,&u,&o,0);
+      ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_uo(ths,j,&u,&o,1);
+      ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_uo(ths,j,&u,&o,2);
+      ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+    }
+    return;
+  } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+
+  nfft_sort_nodes(ths);
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < M; k++)
+  {
+    R psij_const[3*(2*m+2)];
+    int u, o, l;
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    nfft_uo(ths,j,&u,&o,0);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));
+
+    nfft_uo(ths,j,&u,&o,1);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));
+
+    nfft_uo(ths,j,&u,&o,2);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2));
+
+    nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+  }
+}
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A                        \
+{                                                                             \
+          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \
+          if (k > 0)                                                          \
+            assert(ar_x[2*k-2] < min_u_a);                                    \
+}
+#else
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A
+#endif
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B                        \
+{                                                                             \
+          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \
+          if (k > 0)                                                          \
+            assert(ar_x[2*k-2] < min_u_b);                                    \
+}
+#else
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B
+#endif
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
+                ths->psi+j*3*(2*m+2),                                         \
+                ths->psi+(j*3+1)*(2*m+2),                                     \
+                ths->psi+(j*3+2)*(2*m+2),                                     \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
+                n0, n1, n2, m, my_u0, my_o0);
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \
+{                                                                             \
+            int u, o, l;                                                      \
+            R psij_const[3*(2*m+2)];                                          \
+            R fg_psij0 = ths->psi[2*j*3];                                     \
+            R fg_psij1 = ths->psi[2*j*3+1];                                   \
+            R fg_psij2 = K(1.0);                                              \
+                                                                              \
+            psij_const[0] = fg_psij0;                                         \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
+            }                                                                 \
+                                                                              \
+            fg_psij0 = ths->psi[2*(j*3+1)];                                   \
+            fg_psij1 = ths->psi[2*(j*3+1)+1];                                 \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[2*m+2] = fg_psij0;                                     \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
+            }                                                                 \
+                                                                              \
+            fg_psij0 = ths->psi[2*(j*3+2)];                                   \
+            fg_psij1 = ths->psi[2*(j*3+2)+1];                                 \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[2*(2*m+2)] = fg_psij0;                                 \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \
+            }                                                                 \
+                                                                              \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
+                n0, n1, n2, m, my_u0, my_o0);                                 \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \
+{                                                                             \
+            int u, o, l;                                                      \
+            R psij_const[3*(2*m+2)];                                          \
+            R fg_psij0, fg_psij1, fg_psij2;                                   \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,0);                                           \
+            fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));                        \
+            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);          \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[0] = fg_psij0;                                         \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
+            }                                                                 \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,1);                                           \
+            fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));                      \
+            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);        \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[2*m+2] = fg_psij0;                                     \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
+            }                                                                 \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,2);                                           \
+            fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));                      \
+            fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);        \
+            fg_psij2 = K(1.0);                                                \
+            psij_const[2*(2*m+2)] = fg_psij0;                                 \
+            for(l=1; l<=2*m+1; l++)                                           \
+            {                                                                 \
+              fg_psij2 *= fg_psij1;                                           \
+              psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \
+            }                                                                 \
+                                                                              \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
+                n0, n1, n2, m, my_u0, my_o0);                                 \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \
+{                                                                             \
+            int u, o, l;                                                      \
+            R psij_const[3*(2*m+2)];                                          \
+            int ip_u;                                                         \
+            R ip_y, ip_w;                                                     \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,0);                                           \
+            ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);                      \
+            ip_u = LRINT(FLOOR(ip_y));                                        \
+            ip_w = ip_y-ip_u;                                                 \
+            for(l=0; l < 2*m+2; l++)                                          \
+              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +      \
+                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);                          \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,1);                                           \
+            ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);                      \
+            ip_u = LRINT(FLOOR(ip_y));                                        \
+            ip_w = ip_y-ip_u;                                                 \
+            for(l=0; l < 2*m+2; l++)                                          \
+              psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                    \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,2);                                           \
+            ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);                      \
+            ip_u = LRINT(FLOOR(ip_y));                                        \
+            ip_w = ip_y-ip_u;                                                 \
+            for(l=0; l < 2*m+2; l++)                                          \
+              psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+                ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                  \
+                                                                              \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
+                n0, n1, n2, m, my_u0, my_o0);                                 \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \
+{                                                                             \
+            int u, o, l;                                                      \
+            R psij_const[3*(2*m+2)];                                          \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,0);                                           \
+            for(l=0;l<=2*m+1;l++)                                             \
+              psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));             \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,1);                                           \
+            for(l=0;l<=2*m+1;l++)                                             \
+              psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));     \
+                                                                              \
+            nfft_uo(ths,j,&u,&o,2);                                           \
+            for(l=0;l<=2*m+1;l++)                                             \
+              psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2)); \
+                                                                              \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
+                n0, n1, n2, m, my_u0, my_o0);                                 \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(whichone)                       \
+{                                                                             \
+    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \
+    {                                                                         \
+      _Pragma("omp parallel private(k)")                                      \
+      {                                                                       \
+        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \
+        int *ar_x = ths->index_x;                                             \
+                                                                              \
+        nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
+            &min_u_b, &max_u_b, 3, ths->n, m);                                \
+                                                                              \
+        if (min_u_a != -1)                                                    \
+        {                                                                     \
+          k = index_x_binary_search(ar_x, M, min_u_a);                        \
+                                                                              \
+          MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A                      \
+                                                                              \
+          while (k < M)                                                       \
+          {                                                                   \
+            int u_prod = ar_x[2*k];                                           \
+            int j = ar_x[2*k+1];                                              \
+                                                                              \
+            if (u_prod < min_u_a || u_prod > max_u_a)                         \
+              break;                                                          \
+                                                                              \
+            MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
+                                                                              \
+            k++;                                                              \
+          }                                                                   \
+        }                                                                     \
+                                                                              \
+        if (min_u_b != -1)                                                    \
+        {                                                                     \
+          int k = index_x_binary_search(ar_x, M, min_u_b);                    \
+                                                                              \
+          MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B                      \
+                                                                              \
+          while (k < M)                                                       \
+          {                                                                   \
+            int u_prod = ar_x[2*k];                                           \
+            int j = ar_x[2*k+1];                                              \
+                                                                              \
+            if (u_prod < min_u_b || u_prod > max_u_b)                         \
+              break;                                                          \
+                                                                              \
+            MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
+                                                                              \
+            k++;                                                              \
+          }                                                                   \
+        }                                                                     \
+      } /* omp parallel */                                                    \
+      return;                                                                 \
+    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */                                    \
+}
+
+static void nfft_adjoint_3d_B(nfft_plan *ths)
+{
+  int k;
+  const int N0 = ths->N[0];
+  const int n0 = ths->n[0];
+  const int N1 = ths->N[1];
+  const int n1 = ths->n[1];
+  const int N2 = ths->N[2];
+  const int n2 = ths->n[2];
+  const int M = ths->M_total;
+  const int m = ths->m;
+
+  C* g = (C*) ths->g;
+
+  memset(g,0,ths->n_total*sizeof(C));
+
+  if(ths->nfft_flags & PRE_FULL_PSI)
+  {
+    nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
+        3, ths->n, m, ths->nfft_flags, ths->index_x);
+    return;
+  } /* if(PRE_FULL_PSI) */
+
+  if(ths->nfft_flags & PRE_PSI)
+  {
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_PSI)
+#endif
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+#ifdef _OPENMP
+      nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+      nfft_adjoint_3d_compute_serial(ths->f+j, g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+    }
+    return;
+  } /* if(PRE_PSI) */
+
+  if(ths->nfft_flags & PRE_FG_PSI)
+  {
+    R fg_exp_l[3*(2*m+2)];
+
+    nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+#endif
+
+    #pragma omp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      R psij_const[3*(2*m+2)];
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      int l;
+      R fg_psij0 = ths->psi[2*j*3];
+      R fg_psij1 = ths->psi[2*j*3+1];
+      R fg_psij2 = K(1.0);
+
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      fg_psij0 = ths->psi[2*(j*3+1)];
+      fg_psij1 = ths->psi[2*(j*3+1)+1];
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+      fg_psij0 = ths->psi[2*(j*3+2)];
+      fg_psij1 = ths->psi[2*(j*3+2)+1];
+      fg_psij2 = K(1.0);
+      psij_const[2*(2*m+2)] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+      }
+
+#ifdef _OPENMP
+      nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+      nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+    }
+
+    return;
+  } /* if(PRE_FG_PSI) */
+
+  if(ths->nfft_flags & FG_PSI)
+  {
+    R fg_exp_l[3*(2*m+2)];
+
+    nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+    nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+    nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(FG_PSI)
+#endif
+
+    #pragma openmp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u,o,l;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      R psij_const[3*(2*m+2)];
+      R fg_psij0, fg_psij1, fg_psij2;
+
+      nfft_uo(ths,j,&u,&o,0);
+      fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));
+      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);
+      fg_psij2 = K(1.0);
+      psij_const[0] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+      }
+
+      nfft_uo(ths,j,&u,&o,1);
+      fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));
+      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);
+      fg_psij2 = K(1.0);
+      psij_const[2*m+2] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+      }
+
+      nfft_uo(ths,j,&u,&o,2);
+      fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));
+      fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);
+      fg_psij2 = K(1.0);
+      psij_const[2*(2*m+2)] = fg_psij0;
+      for(l=1; l<=2*m+1; l++)
+      {
+        fg_psij2 *= fg_psij1;
+        psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+      }
+
+#ifdef _OPENMP
+      nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+      nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+    }
+
+    return;
+  } /* if(FG_PSI) */
+
+  if(ths->nfft_flags & PRE_LIN_PSI)
+  {
+    const int K = ths->K;
+    const int ip_s = K / (m + 2);
+
+    nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+#endif
+
+    #pragma openmp parallel for default(shared) private(k)
+    for (k = 0; k < M; k++)
+    {
+      int u,o,l;
+      int ip_u;
+      R ip_y, ip_w;
+      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      R psij_const[3*(2*m+2)];
+
+      nfft_uo(ths,j,&u,&o,0);
+      ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_uo(ths,j,&u,&o,1);
+      ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+      nfft_uo(ths,j,&u,&o,2);
+      ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);
+      ip_u = LRINT(FLOOR(ip_y));
+      ip_w = ip_y-ip_u;
+      for(l=0; l < 2*m+2; l++)
+        psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+          ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+#ifdef _OPENMP
+      nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+      nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+    }
+    return;
+  } /* if(PRE_LIN_PSI) */
+
+  /* no precomputed psi at all */
+  nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+  MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(NO_PSI)
+#endif
+
+  #pragma omp parallel for default(shared) private(k)
+  for (k = 0; k < M; k++)
+  {
+    int u,o,l;
+    R psij_const[3*(2*m+2)];
+    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+    nfft_uo(ths,j,&u,&o,0);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));
+
+    nfft_uo(ths,j,&u,&o,1);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));
+
+    nfft_uo(ths,j,&u,&o,2);
+    for(l=0;l<=2*m+1;l++)
+      psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2));
+
+#ifdef _OPENMP
+    nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+    nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+  }
+}
+
+
+void nfft_trafo_3d(nfft_plan *ths)
+{
+  int k0,k1,k2,n0,n1,n2,N0,N1,N2;
+  C *g_hat,*f_hat;
+  R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;
+  R ck01, ck02, ck11, ck12, ck21, ck22;
+  C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;
+  C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;
+
+  ths->g_hat=ths->g1;
+  ths->g=ths->g2;
+
+  N0=ths->N[0];
+  N1=ths->N[1];
+  N2=ths->N[2];
+  n0=ths->n[0];
+  n1=ths->n[1];
+  n2=ths->n[2];
+
+  f_hat=(C*)ths->f_hat;
+  g_hat=(C*)ths->g_hat;
+
+  TIC(0)
+#ifdef _OPENMP
+  #pragma omp parallel for default(shared) private(k0)
+  for (k0 = 0; k0 < ths->n_total; k0++)
+    ths->g_hat[k0] = 0.0;
+#else
+  memset(ths->g_hat,0,ths->n_total*sizeof(C));
+#endif
+
+  if(ths->nfft_flags & PRE_PHI_HUT)
+    {
+      c_phi_inv01=ths->c_phi_inv[0];
+      c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+      #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)
+      for(k0=0;k0<N0/2;k0++)
+  {
+    ck01=c_phi_inv01[k0];
+    ck02=c_phi_inv02[k0];
+    c_phi_inv11=ths->c_phi_inv[1];
+    c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+    for(k1=0;k1<N1/2;k1++)
+      {
+        ck11=c_phi_inv11[k1];
+        ck12=c_phi_inv12[k1];
+        c_phi_inv21=ths->c_phi_inv[2];
+        c_phi_inv22=&ths->c_phi_inv[2][N2/2];
+
+        g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+        f_hat111=f_hat + (k0*N1+k1)*N2;
+        g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+        f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;
+        g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);
+        f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;
+        g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);
+        f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;
+
+        g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;
+        f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);
+        g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;
+        f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);
+        g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;
+        f_hat122=f_hat + (k0*N1+N1/2+k1)*N2+(N2/2);
+        g_hat222=g_hat + (k0*n1+k1)*n2;
+        f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);
+
+        for(k2=0;k2<N2/2;k2++)
+    {
+      ck21=c_phi_inv21[k2];
+      ck22=c_phi_inv22[k2];
+
+      g_hat111[k2] = f_hat111[k2] * ck01 * ck11 * ck21;
+      g_hat211[k2] = f_hat211[k2] * ck02 * ck11 * ck21;
+      g_hat121[k2] = f_hat121[k2] * ck01 * ck12 * ck21;
+      g_hat221[k2] = f_hat221[k2] * ck02 * ck12 * ck21;
+
+      g_hat112[k2] = f_hat112[k2] * ck01 * ck11 * ck22;
+      g_hat212[k2] = f_hat212[k2] * ck02 * ck11 * ck22;
+      g_hat122[k2] = f_hat122[k2] * ck01 * ck12 * ck22;
+      g_hat222[k2] = f_hat222[k2] * ck02 * ck12 * ck22;
+    }
+      }
+  }
+    }
+  else
+    #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)
+    for(k0=0;k0<N0/2;k0++)
+      {
+  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(k0,0));
+  for(k1=0;k1<N1/2;k1++)
+    {
+      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(k1,1));
+
+      for(k2=0;k2<N2/2;k2++)
+        {
+    ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));
+    ck22=K(1.0)/(PHI_HUT(k2,2));
+
+    g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+k1)*N2+k2]                  * ck01 * ck11 * ck21;
+    g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2]           = f_hat[((N0/2+k0)*N1+k1)*N2+k2]           * ck02 * ck11 * ck21;
+    g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2]         = f_hat[(k0*N1+N1/2+k1)*N2+k2]             * ck01 * ck12 * ck21;
+    g_hat[(k0*n1+k1)*n2+n2-N2/2+k2]                   = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2]      * ck02 * ck12 * ck21;
+
+    g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2]         = f_hat[(k0*N1+k1)*N2+N2/2+k2]             * ck01 * ck11 * ck22;
+    g_hat[(k0*n1+n1-N1/2+k1)*n2+k2]                   = f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2]      * ck02 * ck11 * ck22;
+    g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2]                 = f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2]        * ck01 * ck12 * ck22;
+    g_hat[(k0*n1+k1)*n2+k2]                           = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] * ck02 * ck12 * ck22;
+        }
+    }
+      }
+
+  TOC(0)
+
+  TIC_FFTW(1)
+  fftw_execute(ths->my_fftw_plan1);
+  TOC_FFTW(1);
+
+  TIC(2);
+  nfft_trafo_3d_B(ths);
+  TOC(2);
+}
+
+void nfft_adjoint_3d(nfft_plan *ths)
+{
+  int k0,k1,k2,n0,n1,n2,N0,N1,N2;
+  C *g_hat,*f_hat;
+  R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;
+  R ck01, ck02, ck11, ck12, ck21, ck22;
+  C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;
+  C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;
+
+  ths->g_hat=ths->g1;
+  ths->g=ths->g2;
+
+  N0=ths->N[0];
+  N1=ths->N[1];
+  N2=ths->N[2];
+  n0=ths->n[0];
+  n1=ths->n[1];
+  n2=ths->n[2];
+
+  f_hat=(C*)ths->f_hat;
+  g_hat=(C*)ths->g_hat;
+
+  TIC(2);
+  nfft_adjoint_3d_B(ths);
+  TOC(2);
+
+  TIC_FFTW(1)
+  fftw_execute(ths->my_fftw_plan2);
+  TOC_FFTW(1);
+
+  TIC(0)
+  if(ths->nfft_flags & PRE_PHI_HUT)
+    {
+      c_phi_inv01=ths->c_phi_inv[0];
+      c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+      #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)
+      for(k0=0;k0<N0/2;k0++)
+  {
+    ck01=c_phi_inv01[k0];
+    ck02=c_phi_inv02[k0];
+    c_phi_inv11=ths->c_phi_inv[1];
+    c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+    for(k1=0;k1<N1/2;k1++)
+      {
+        ck11=c_phi_inv11[k1];
+        ck12=c_phi_inv12[k1];
+        c_phi_inv21=ths->c_phi_inv[2];
+        c_phi_inv22=&ths->c_phi_inv[2][N2/2];
+
+        g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+        f_hat111=f_hat + (k0*N1+k1)*N2;
+        g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+        f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;
+        g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);
+        f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;
+        g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);
+        f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;
+
+        g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;
+        f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);
+        g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;
+        f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);
+        g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;
+        f_hat122=f_hat + (k0*N1+(N1/2)+k1)*N2+(N2/2);
+        g_hat222=g_hat + (k0*n1+k1)*n2;
+        f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);
+
+        for(k2=0;k2<N2/2;k2++)
+    {
+      ck21=c_phi_inv21[k2];
+      ck22=c_phi_inv22[k2];
+
+      f_hat111[k2] = g_hat111[k2] * ck01 * ck11 * ck21;
+      f_hat211[k2] = g_hat211[k2] * ck02 * ck11 * ck21;
+      f_hat121[k2] = g_hat121[k2] * ck01 * ck12 * ck21;
+      f_hat221[k2] = g_hat221[k2] * ck02 * ck12 * ck21;
+
+      f_hat112[k2] = g_hat112[k2] * ck01 * ck11 * ck22;
+      f_hat212[k2] = g_hat212[k2] * ck02 * ck11 * ck22;
+      f_hat122[k2] = g_hat122[k2] * ck01 * ck12 * ck22;
+      f_hat222[k2] = g_hat222[k2] * ck02 * ck12 * ck22;
+    }
+      }
+  }
+    }
+  else
+    #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)
+    for(k0=0;k0<N0/2;k0++)
+      {
+  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(k0,0));
+  for(k1=0;k1<N1/2;k1++)
+    {
+      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(k1,1));
+
+      for(k2=0;k2<N2/2;k2++)
+        {
+    ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));
+    ck22=K(1.0)/(PHI_HUT(k2,2));
+
+    f_hat[(k0*N1+k1)*N2+k2]                  = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck01 * ck11 * ck21;
+    f_hat[((N0/2+k0)*N1+k1)*N2+k2]           = g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2]           * ck02 * ck11 * ck21;
+    f_hat[(k0*N1+N1/2+k1)*N2+k2]             = g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2]         * ck01 * ck12 * ck21;
+    f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2]      = g_hat[(k0*n1+k1)*n2+n2-N2/2+k2]                   * ck02 * ck12 * ck21;
+
+    f_hat[(k0*N1+k1)*N2+N2/2+k2]             = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2]         * ck01 * ck11 * ck22;
+    f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2]      = g_hat[(k0*n1+n1-N1/2+k1)*n2+k2]                   * ck02 * ck11 * ck22;
+    f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2]        = g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2]                 * ck01 * ck12 * ck22;
+    f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] = g_hat[(k0*n1+k1)*n2+k2]                           * ck02 * ck12 * ck22;
+        }
+    }
+      }
+
+  TOC(0)
+}
+
+/** user routines
+ */
+void nfft_trafo(nfft_plan *ths)
+{
+  switch(ths->d)
+    {
+    case 1: nfft_trafo_1d(ths); break;
+    case 2: nfft_trafo_2d(ths); break;
+    case 3: nfft_trafo_3d(ths); break;
+    default:
+    /* use ths->my_fftw_plan1 */
+    ths->g_hat=ths->g1;
+    ths->g=ths->g2;
+
+    /** form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+     *  k \in I_N \f$
+     */
+    TIC(0)
+    nfft_D_A(ths);
+    TOC(0)
+
+    /** compute by d-variate discrete Fourier transform
+     *  \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+     *  \text{ for } l \in I_n \f$
+     */
+    TIC_FFTW(1)
+    fftw_execute(ths->my_fftw_plan1);
+    TOC_FFTW(1)
+
+    /** set \f$ f_j =\sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+     *  \text{ for } j=0,\hdots,M_total-1 \f$
+     */
+    TIC(2)
+    nfft_B_A(ths);
+    TOC(2)
+    }
+} /* nfft_trafo */
+
+void nfft_adjoint(nfft_plan *ths)
+{
+  switch(ths->d)
+    {
+    case 1: nfft_adjoint_1d(ths); break;
+    case 2: nfft_adjoint_2d(ths); break;
+    case 3: nfft_adjoint_3d(ths); break;
+    default:
+      /* use ths->my_fftw_plan2 */
+      ths->g_hat=ths->g1;
+      ths->g=ths->g2;
+      
+      /** set \f$ g_l = \sum_{j=0}^{M_total-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+       *  \text{ for } l \in I_n,m(x_j) \f$
+       */
+      TIC(2)
+      nfft_B_T(ths);
+      TOC(2)
+
+      /** compute by d-variate discrete Fourier transform
+       *  \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{+2\pi {\rm i} \frac{kl}{n}}
+       *  \text{ for }  k \in I_N\f$
+       */
+      TIC_FFTW(1)
+      fftw_execute(ths->my_fftw_plan2);
+      TOC_FFTW(1)
+
+      /** form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+       *  k \in I_N \f$
+       */
+      TIC(0)
+      nfft_D_T(ths);
+      TOC(0)
+    }
+} /* nfft_adjoint */
+
+
+/** initialisation of direct transform
+ */
+static void nfft_precompute_phi_hut(nfft_plan *ths)
+{
+  int ks[ths->d];                       /**< index over all frequencies      */
+  int t;                                /**< index over all dimensions       */
+
+  ths->c_phi_inv = (R**) nfft_malloc(ths->d*sizeof(R*));
+
+  for(t=0; t<ths->d; t++)
+    {
+      ths->c_phi_inv[t]= (R*)nfft_malloc(ths->N[t]*sizeof(R));
+      for(ks[t]=0; ks[t]<ths->N[t]; ks[t]++)
+  ths->c_phi_inv[t][ks[t]]= K(1.0)/(PHI_HUT(ks[t]-ths->N[t]/2,t));
+    }
+} /* nfft_phi_hut */
+
+/** create a lookup table, but NOT for each node
+ *  good idea K=2^xx
+ *  TODO: estimate K, call from init
+ *  assumes an EVEN window function
+ */
+void nfft_precompute_lin_psi(nfft_plan *ths)
+{
+  int t;                                /**< index over all dimensions       */
+  int j;                                /**< index over all nodes            */
+  R step;                          /**< step size in [0,(m+2)/n]        */
+
+  for (t=0; t<ths->d; t++)
+    {
+      step=((R)(ths->m+2))/(((R)ths->K)*ths->n[t]);
+      for(j=0;j<=ths->K;j++)
+  {
+    ths->psi[(ths->K+1)*t + j] = PHI(j*step,t);
+  } /* for(j) */
+    } /* for(t) */
+}
+
+static void nfft_precompute_fg_psi(nfft_plan *ths)
+{
+  int t;                                /**< index over all dimensions       */
+  int u, o;                             /**< depends on x_j                  */
+
+  nfft_sort_nodes(ths);
+
+  for (t=0; t<ths->d; t++)
+  {
+    int j;
+    #pragma omp parallel for default(shared) private(j,u,o)
+    for (j = 0; j < ths->M_total; j++)
+      {
+  nfft_uo(ths,j,&u,&o,t);
+
+        ths->psi[2*(j*ths->d+t)]=
+            (PHI((ths->x[j*ths->d+t]-((R)u)/ths->n[t]),t));
+
+        ths->psi[2*(j*ths->d+t)+1]=
+            EXP(K(2.0)*(ths->n[t]*ths->x[j*ths->d+t] - u) / ths->b[t]);
+      } /* for(j) */
+  }
+  /* for(t) */
+} /* nfft_precompute_fg_psi */
+
+void nfft_precompute_psi(nfft_plan *ths)
+{
+  int t;                                /**< index over all dimensions       */
+  int l;                                /**< index u<=l<=o                   */
+  int lj;                               /**< index 0<=lj<u+o+1               */
+  int u, o;                             /**< depends on x_j                  */
+
+  nfft_sort_nodes(ths);
+
+  for (t=0; t<ths->d; t++)
+  {
+    int j;
+    #pragma omp parallel for default(shared) private(j,l,lj,u,o)
+    for (j = 0; j < ths->M_total; j++)
+      {
+  nfft_uo(ths,j,&u,&o,t);
+
+  for(l=u, lj=0; l <= o; l++, lj++)
+    ths->psi[(j*ths->d+t)*(2*ths->m+2)+lj]=
+      (PHI((ths->x[j*ths->d+t]-((R)l)/ths->n[t]),t));
+      } /* for(j) */
+  }
+  /* for(t) */
+} /* nfft_precompute_psi */
+
+#ifdef _OPENMP
+static void nfft_precompute_full_psi_omp(nfft_plan *ths)
+{
+  int j;                                /**< index over all nodes            */
+  int lprod;                            /**< 'bandwidth' of matrix B         */
+
+  {
+    int t;
+    for(t=0,lprod = 1; t<ths->d; t++)
+        lprod *= 2*ths->m+2;
+  }
+
+  #pragma omp parallel for default(shared) private(j)
+  for(j=0; j<ths->M_total; j++)
+    {
+      int t,t2;                             /**< index over all dimensions       */
+      int l_L;                              /**< plain index 0<=l_L<lprod        */
+      int l[ths->d];                        /**< multi index u<=l<=o             */
+      int lj[ths->d];                       /**< multi index 0<=lj<u+o+1         */
+      int ll_plain[ths->d+1];               /**< postfix plain index             */
+
+      int u[ths->d], o[ths->d];             /**< depends on x_j                  */
+
+      R phi_prod[ths->d+1];
+      int ix = j*lprod;
+
+      phi_prod[0]=1;
+      ll_plain[0]=0;
+
+      MACRO_init_uo_l_lj_t;
+
+      for(l_L=0; l_L<lprod; l_L++, ix++)
+      {
+        MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+        ths->psi_index_g[ix]=ll_plain[ths->d];
+        ths->psi[ix]=phi_prod[ths->d];
+
+        MACRO_count_uo_l_lj_t;
+      } /* for(l_L) */
+
+      ths->psi_index_f[j]=lprod;
+    } /* for(j) */
+}
+#endif
+
+void nfft_precompute_full_psi(nfft_plan *ths)
+{
+#ifdef _OPENMP
+  nfft_sort_nodes(ths);
+
+  nfft_precompute_full_psi_omp(ths);
+#else
+  int t,t2;                             /**< index over all dimensions       */
+  int j;                                /**< index over all nodes            */
+  int l_L;                              /**< plain index 0<=l_L<lprod        */
+  int l[ths->d];                        /**< multi index u<=l<=o             */
+  int lj[ths->d];                       /**< multi index 0<=lj<u+o+1         */
+  int ll_plain[ths->d+1];               /**< postfix plain index             */
+  int lprod;                            /**< 'bandwidth' of matrix B         */
+  int u[ths->d], o[ths->d];             /**< depends on x_j                  */
+
+  R phi_prod[ths->d+1];
+
+  int ix,ix_old;
+
+  nfft_sort_nodes(ths);
+
+  phi_prod[0]=1;
+  ll_plain[0]=0;
+
+  for(t=0,lprod = 1; t<ths->d; t++)
+      lprod *= 2*ths->m+2;
+
+  for(j=0,ix=0,ix_old=0; j<ths->M_total; j++)
+    {
+      MACRO_init_uo_l_lj_t;
+
+      for(l_L=0; l_L<lprod; l_L++, ix++)
+  {
+    MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+    ths->psi_index_g[ix]=ll_plain[ths->d];
+    ths->psi[ix]=phi_prod[ths->d];
+
+    MACRO_count_uo_l_lj_t;
+  } /* for(l_L) */
+
+
+      ths->psi_index_f[j]=ix-ix_old;
+      ix_old=ix;
+    } /* for(j) */
+#endif
+}
+
+void nfft_precompute_one_psi(nfft_plan *ths)
+{
+  if(ths->nfft_flags & PRE_LIN_PSI)
+    nfft_precompute_lin_psi(ths);
+  if(ths->nfft_flags & PRE_FG_PSI)
+    nfft_precompute_fg_psi(ths);
+  if(ths->nfft_flags & PRE_PSI)
+    nfft_precompute_psi(ths);
+  if(ths->nfft_flags & PRE_FULL_PSI)
+    nfft_precompute_full_psi(ths);
+}
+
+
+static void nfft_init_help(nfft_plan *ths)
+{
+  int t;                                /**< index over all dimensions       */
+  int lprod;                            /**< 'bandwidth' of matrix B         */
+
+  if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    ths->nfft_flags |= NFFT_SORT_NODES;
+
+  ths->N_total=nfft_prod_int(ths->N, ths->d);
+  ths->n_total=nfft_prod_int(ths->n, ths->d);
+
+  ths->sigma = (R*) nfft_malloc(ths->d*sizeof(R));
+  for(t = 0;t < ths->d; t++)
+    ths->sigma[t] = ((R)ths->n[t])/ths->N[t];
+
+  WINDOW_HELP_INIT;
+
+  if(ths->nfft_flags & MALLOC_X)
+    ths->x = (R*)nfft_malloc(ths->d*ths->M_total*sizeof(R));
+
+  if(ths->nfft_flags & MALLOC_F_HAT)
+    ths->f_hat = (fftw_complex*)nfft_malloc(ths->N_total*sizeof(C));
+
+  if(ths->nfft_flags & MALLOC_F)
+    ths->f = (fftw_complex*)nfft_malloc(ths->M_total*sizeof(C));
+
+  if(ths->nfft_flags & PRE_PHI_HUT)
+    nfft_precompute_phi_hut(ths);
+
+  if(ths->nfft_flags & PRE_LIN_PSI)
+  {
+      ths->K=(1U<< 10)*(ths->m+2);
+      ths->psi = (R*) nfft_malloc((ths->K+1)*ths->d*sizeof(R));
+  }
+
+  if(ths->nfft_flags & PRE_FG_PSI)
+    ths->psi = (R*) nfft_malloc(ths->M_total*ths->d*2*sizeof(R));
+
+  if(ths->nfft_flags & PRE_PSI)
+    ths->psi = (R*) nfft_malloc(ths->M_total*ths->d*
+             (2*ths->m+2)*sizeof(R));
+
+  if(ths->nfft_flags & PRE_FULL_PSI)
+  {
+      for(t=0,lprod = 1; t<ths->d; t++)
+    lprod *= 2*ths->m+2;
+
+      ths->psi = (R*) nfft_malloc(ths->M_total*lprod*sizeof(R));
+
+      ths->psi_index_f = (int*) nfft_malloc(ths->M_total*sizeof(int));
+      ths->psi_index_g = (int*) nfft_malloc(ths->M_total*lprod*sizeof(int));
+  }
+
+  if(ths->nfft_flags & FFTW_INIT)
+  {
+#ifdef _OPENMP
+    int nthreads = nfft_get_omp_num_threads();
+#endif
+
+    ths->g1=(fftw_complex*)nfft_malloc(ths->n_total*sizeof(C));
+
+    if(ths->nfft_flags & FFT_OUT_OF_PLACE)
+      ths->g2 = (fftw_complex*) nfft_malloc(ths->n_total*sizeof(C));
+    else
+      ths->g2 = ths->g1;
+
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+    fftw_plan_with_nthreads(nthreads);
+#endif
+    ths->my_fftw_plan1 = fftw_plan_dft(ths->d, ths->n, ths->g1, ths->g2, FFTW_FORWARD, ths->fftw_flags);
+    ths->my_fftw_plan2 = fftw_plan_dft(ths->d, ths->n, ths->g2, ths->g1,
+      FFTW_BACKWARD, ths->fftw_flags);
+#ifdef _OPENMP
+}
+#endif
+  }
+
+  if(ths->nfft_flags & NFFT_SORT_NODES)
+    ths->index_x = (int*) nfft_malloc(sizeof(int)*2*ths->M_total);
+  else
+    ths->index_x = NULL;
+
+  ths->mv_trafo = (void (*) (void* ))nfft_trafo;
+  ths->mv_adjoint = (void (*) (void* ))nfft_adjoint;
+}
+
+void nfft_init(nfft_plan *ths, int d, int *N, int M_total)
+{
+  int t;                                /**< index over all dimensions       */
+
+  ths->d = d;
+
+  ths->N=(int*) nfft_malloc(d*sizeof(int));
+
+  for (t = 0;t < d; t++)
+    ths->N[t] = N[t];
+
+  ths->M_total = M_total;
+
+  ths->n = (int*) nfft_malloc(d*sizeof(int));
+  for (t = 0;t < d; t++)
+    ths->n[t] = 2*X(next_power_of_2)(ths->N[t]);
+
+  ths->m = WINDOW_HELP_ESTIMATE_m;
+
+  if (d > 1)
+  {
+#ifdef _OPENMP
+    ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |
+		      NFFT_OMP_BLOCKWISE_ADJOINT;
+#else
+    ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;
+#endif
+  }
+  else
+    ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE;
+
+  ths->fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
+
+  nfft_init_help(ths);
+}
+
+void nfft_init_guru(nfft_plan *ths, int d, int *N, int M_total, int *n,
+      int m, unsigned nfft_flags, unsigned fftw_flags)
+{
+  int t;                                /**< index over all dimensions       */
+
+  ths->d =d;
+  ths->N= (int*) nfft_malloc(ths->d*sizeof(int));
+  for(t=0; t<d; t++)
+    ths->N[t]= N[t];
+  ths->M_total= M_total;
+  ths->n= (int*) nfft_malloc(ths->d*sizeof(int));
+  for(t=0; t<d; t++)
+    ths->n[t]= n[t];
+  ths->m= m;
+  ths->nfft_flags= nfft_flags;
+  ths->fftw_flags= fftw_flags;
+
+  nfft_init_help(ths);
+}
+
+void nfft_init_1d(nfft_plan *ths, int N1, int M_total)
+{
+  int N[1];
+
+  N[0]=N1;
+
+  nfft_init(ths, 1, N, M_total);
+}
+
+void nfft_init_2d(nfft_plan *ths, int N1, int N2, int M_total)
+{
+  int N[2];
+
+  N[0]=N1;
+  N[1]=N2;
+  nfft_init(ths,2,N,M_total);
+}
+
+void nfft_init_3d(nfft_plan *ths, int N1, int N2, int N3, int M_total)
+{
+  int N[3];
+
+  N[0]=N1;
+  N[1]=N2;
+  N[2]=N3;
+  nfft_init(ths,3,N,M_total);
+}
+
+const char* nfft_check(nfft_plan *ths)
+{
+  int j;
+
+  for(j=0;j<ths->M_total*ths->d;j++)
+    if((ths->x[j]<-K(0.5)) || (ths->x[j]>= K(0.5)))
+      return "ths->x out of range [-0.5,0.5)";
+
+  for(j=0;j<ths->d;j++)
+  {
+    if(ths->sigma[j]<=1)
+      return "nfft_check: oversampling factor too small";
+
+    if(ths->N[j]<=ths->m)
+      return "Polynomial degree N is smaller than cut-off m";
+
+    if(ths->N[j]%2==1)
+      return "polynomial degree N has to be even";
+  }
+  return 0;
+}
+
+void nfft_finalize(nfft_plan *ths)
+{
+  int t; /* index over dimensions */
+
+  if(ths->nfft_flags & NFFT_SORT_NODES)
+    nfft_free(ths->index_x);
+
+  if(ths->nfft_flags & FFTW_INIT)
+  {
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+    fftw_destroy_plan(ths->my_fftw_plan2);
+    fftw_destroy_plan(ths->my_fftw_plan1);
+}
+
+    if(ths->nfft_flags & FFT_OUT_OF_PLACE)
+      nfft_free(ths->g2);
+
+    nfft_free(ths->g1);
+  }
+
+  if(ths->nfft_flags & PRE_FULL_PSI)
+    {
+      nfft_free(ths->psi_index_g);
+      nfft_free(ths->psi_index_f);
+      nfft_free(ths->psi);
+    }
+
+  if(ths->nfft_flags & PRE_PSI)
+    nfft_free(ths->psi);
+
+  if(ths->nfft_flags & PRE_FG_PSI)
+    nfft_free(ths->psi);
+
+  if(ths->nfft_flags & PRE_LIN_PSI)
+    nfft_free(ths->psi);
+
+  if(ths->nfft_flags & PRE_PHI_HUT)
+    {
+      for(t=0; t<ths->d; t++)
+        nfft_free(ths->c_phi_inv[t]);
+      nfft_free(ths->c_phi_inv);
+    }
+
+  if(ths->nfft_flags & MALLOC_F)
+    nfft_free(ths->f);
+
+  if(ths->nfft_flags & MALLOC_F_HAT)
+    nfft_free(ths->f_hat);
+
+  if(ths->nfft_flags & MALLOC_X)
+  nfft_free(ths->x);
+
+  WINDOW_HELP_FINALIZE;
+
+  nfft_free(ths->sigma);
+  nfft_free(ths->n);
+  nfft_free(ths->N);
+}
diff --git a/kernel/nfsft/Makefile.am b/kernel/nfsft/Makefile.am
new file mode 100644
index 0000000..42e6460
--- /dev/null
+++ b/kernel/nfsft/Makefile.am
@@ -0,0 +1,20 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+  LIBNFSFT_THREADS_LA = libnfsft_threads.la
+else
+  LIBNFSFT_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libnfsft.la $(LIBNFSFT_THREADS_LA)
+libnfsft_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+
+if HAVE_THREADS
+  libnfsft_threads_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+if HAVE_OPENMP
+  libnfsft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/kernel/nfsft/Makefile.in b/kernel/nfsft/Makefile.in
new file mode 100644
index 0000000..fe8aba2
--- /dev/null
+++ b/kernel/nfsft/Makefile.in
@@ -0,0 +1,591 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfsft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfsft_la_LIBADD =
+am_libnfsft_la_OBJECTS = nfsft.lo legendre.lo
+libnfsft_la_OBJECTS = $(am_libnfsft_la_OBJECTS)
+libnfsft_threads_la_LIBADD =
+am__libnfsft_threads_la_SOURCES_DIST = nfsft.c legendre.h legendre.c \
+	api.h
+ at HAVE_THREADS_TRUE@am_libnfsft_threads_la_OBJECTS =  \
+ at HAVE_THREADS_TRUE@	libnfsft_threads_la-nfsft.lo \
+ at HAVE_THREADS_TRUE@	libnfsft_threads_la-legendre.lo
+libnfsft_threads_la_OBJECTS = $(am_libnfsft_threads_la_OBJECTS)
+libnfsft_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libnfsft_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libnfsft_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfsft_la_SOURCES) $(libnfsft_threads_la_SOURCES)
+DIST_SOURCES = $(libnfsft_la_SOURCES) \
+	$(am__libnfsft_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@LIBNFSFT_THREADS_LA = 
+ at HAVE_THREADS_TRUE@LIBNFSFT_THREADS_LA = libnfsft_threads.la
+noinst_LTLIBRARIES = libnfsft.la $(LIBNFSFT_THREADS_LA)
+libnfsft_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+ at HAVE_THREADS_TRUE@libnfsft_threads_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfsft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfsft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nfsft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfsft.la: $(libnfsft_la_OBJECTS) $(libnfsft_la_DEPENDENCIES) $(EXTRA_libnfsft_la_DEPENDENCIES) 
+	$(LINK)  $(libnfsft_la_OBJECTS) $(libnfsft_la_LIBADD) $(LIBS)
+libnfsft_threads.la: $(libnfsft_threads_la_OBJECTS) $(libnfsft_threads_la_DEPENDENCIES) $(EXTRA_libnfsft_threads_la_DEPENDENCIES) 
+	$(libnfsft_threads_la_LINK) $(am_libnfsft_threads_la_rpath) $(libnfsft_threads_la_OBJECTS) $(libnfsft_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/legendre.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_threads_la-legendre.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_threads_la-nfsft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libnfsft_threads_la-nfsft.lo: nfsft.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -MT libnfsft_threads_la-nfsft.lo -MD -MP -MF $(DEPDIR)/libnfsft_threads_la-nfsft.Tpo -c -o libnfsft_threads_la-nfsft.lo `test -f 'nfsft.c' || echo '$(srcdir)/'`nfsft.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfsft_threads_la-nfsft.Tpo $(DEPDIR)/libnfsft_threads_la-nfsft.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft.c' object='libnfsft_threads_la-nfsft.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfsft_threads_la-nfsft.lo `test -f 'nfsft.c' || echo '$(srcdir)/'`nfsft.c
+
+libnfsft_threads_la-legendre.lo: legendre.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -MT libnfsft_threads_la-legendre.lo -MD -MP -MF $(DEPDIR)/libnfsft_threads_la-legendre.Tpo -c -o libnfsft_threads_la-legendre.lo `test -f 'legendre.c' || echo '$(srcdir)/'`legendre.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfsft_threads_la-legendre.Tpo $(DEPDIR)/libnfsft_threads_la-legendre.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='legendre.c' object='libnfsft_threads_la-legendre.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfsft_threads_la-legendre.lo `test -f 'legendre.c' || echo '$(srcdir)/'`legendre.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfsft/api.h b/kernel/nfsft/api.h
new file mode 100644
index 0000000..ef479a5
--- /dev/null
+++ b/kernel/nfsft/api.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: api.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \file api.h
+ * \brief Header file with internal API of the NFSFT module
+ * \author Jens Keiner
+ */
+#ifndef API_H
+#define API_H
+
+#include "config.h"
+#include "nfft3.h"
+
+/** \addtogroup nfsft
+ * \{
+ */
+
+/* "Default exponent of maximum bandwidth" */
+#define BWEXP_MAX 10
+
+/* "Default maximum bandwidth" */
+#define BW_MAX 1024
+
+#define ROW(k) (k*(wisdom.N_MAX+2))
+#define ROWK(k) (k*(wisdom.N_MAX+2)+k)
+
+#ifdef HAVE_STDBOOL_H
+  #include <stdbool.h>
+#else
+  typedef enum {false = 0,true = 1} bool;
+#endif
+
+//#define FIRST_L (int)floor(ntilde/(double)plength)
+//#define LAST_L (int)ceil((Mtilde+1)/(double)plength)-1
+
+
+/**
+ * Wisdom structure
+ */
+struct nfsft_wisdom
+{
+  /** Indicates wether the structure has been initialized. */
+  bool initialized;
+  unsigned int flags;
+  /** Stores precomputation flags. */
+  /** The maximum bandwidth /f$N_{\text{max}} \in \mathbb{N}_0/f$ */
+  int N_MAX;
+  /** The logarithm /f$t = \log_2 N_{\text{max}}/f$ of the maximum bandwidth */
+  int T_MAX;
+
+  /* Data for the direct algorithms */
+
+  /**
+   * Precomputed recursion coefficients /f$\alpha_k^n/f$ for /f$k = 0,/ldots,
+   * N_{\text{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions
+   * /f$P_k^n/f$
+   */
+  double *alpha;
+  /**
+   * Precomputed recursion coefficients /f$\beta_k^n/f$ for /f$k = 0,/ldots,
+   * N_{\text{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions
+   * /f$P_k^n/f$
+   */
+  double *beta;
+  /**
+   * Precomputed recursion coefficients /f$\gamma_k^n/f$ for /f$k = 0,/ldots,
+   * N_{\text{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions
+   * /f$P_k^n/f$
+   */
+  double *gamma;
+
+  /* Data for fast algorithms. */
+
+  /** The threshold /f$\kappa/f$ */
+  double threshold;
+#ifdef _OPENMP
+  int nthreads;
+  fpt_set *set_threads;
+#else
+  /** Structure for \e discrete \e polynomial \e transform (\e DPT) */
+  fpt_set set;
+#endif
+};
+/* \} */
+#endif
+
diff --git a/kernel/nfsft/legendre.c b/kernel/nfsft/legendre.c
new file mode 100644
index 0000000..1790c17
--- /dev/null
+++ b/kernel/nfsft/legendre.c
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: legendre.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <math.h>
+#include <stdio.h>
+#include "infft.h"
+#include "nfft3util.h"
+#include "legendre.h"
+
+/* One over sqrt(pi) */
+DK(KSQRTPII,0.56418958354775628694807945156077258584405062932900);
+
+static inline R alpha_al(const int k, const int n)
+{
+  if (k > 0)
+  {
+    if (k < n)
+      return IF(k%2,K(1.0),K(-1.0));
+    else
+      return SQRT(((R)(2*k+1))/((R)(k-n+1)))*SQRT((((R)(2*k+1))/((R)(k+n+1))));
+  }
+  else if (k == 0)
+  {
+    if (n == 0)
+      return K(1.0);
+    else
+      return IF(n%2,K(0.0),K(-1.0));
+  }
+  return K(0.0);
+}
+
+static inline R beta_al(const int k, const int n)
+{
+  if (0 <= k && k < n)
+    return K(1.0);
+  else
+    return K(0.0);
+}
+
+static inline R gamma_al(const int k, const int n)
+{
+  if (k == -1)
+    return SQRT(KSQRTPII*nfft_lambda((R)(n),K(0.5)));
+  else if (k <= n)
+    return K(0.0);
+  else
+    return -SQRT(((R)(k-n))/((R)(k-n+1))*((R)(k+n))/((R)(k+n+1)));
+}
+
+void alpha_al_row(R *alpha, const int N, const int n)
+{
+  int j;
+  R *p = alpha;
+  for (j = -1; j <= N; j++)
+    *p++ = alpha_al(j,n);
+}
+
+void beta_al_row(R *beta, const int N, const int n)
+{
+  int j;
+  R *p = beta;
+  for (j = -1; j <= N; j++)
+    *p++ = beta_al(j,n);
+}
+
+void gamma_al_row(R *gamma, const int N, const int n)
+{
+  int j;
+  R *p = gamma;
+  for (j = -1; j <= N; j++)
+    *p++ = gamma_al(j,n);
+}
+
+inline void alpha_al_all(R *alpha, const int N)
+{
+  int i,j;
+  R *p = alpha;
+  for (i = 0; i <= N; i++)
+    for (j = -1; j <= N; j++)
+      *p++ = alpha_al(j,i);
+}
+
+inline void beta_al_all(R *alpha, const int N)
+{
+  int i,j;
+  R *p = alpha;
+  for (i = 0; i <= N; i++)
+    for (j = -1; j <= N; j++)
+      *p++ = beta_al(j,i);
+}
+
+inline void gamma_al_all(R *alpha, const int N)
+{
+  int i,j;
+  R *p = alpha;
+  for (i = 0; i <= N; i++)
+    for (j = -1; j <= N; j++)
+      *p++ = gamma_al(j,i);
+}
+
+void eval_al(R *x, R *y, const int size, const int k, R *alpha,
+  R *beta, R *gamma)
+{
+  /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm
+   */
+  int i,j;
+  R a,b,x_val_act,a_old;
+  R *x_act, *y_act;
+  R *alpha_act, *beta_act, *gamma_act;
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+      *y_act = 1.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gamma[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+	       b = a_old*(*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+    }
+    x_act++;
+    y_act++;
+  }
+}
+
+int eval_al_thresh(R *x, R *y, const int size, const int k, R *alpha,
+  R *beta, R *gamma, R threshold)
+{
+  /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm
+   */
+  int i,j;
+  R a,b,x_val_act,a_old;
+  R *x_act, *y_act;
+  R *alpha_act, *beta_act, *gamma_act;
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+     *y_act = 1.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gamma[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+	       b = a_old*(*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+      if (fabs(*y_act) > threshold)
+      {
+        return 1;
+      }
+    }
+    x_act++;
+    y_act++;
+  }
+  return 0;
+}
diff --git a/kernel/nfsft/legendre.h b/kernel/nfsft/legendre.h
new file mode 100644
index 0000000..00fbd11
--- /dev/null
+++ b/kernel/nfsft/legendre.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: legendre.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \file nfsft.h
+ *
+ * \brief Header file for functions related to associated Legendre
+ *        functions/polynomials
+ *
+ * \author Jens Keiner
+ */
+#ifndef LEGENDRE_H
+#define LEGENDRE_H
+
+#include "infft.h"
+
+/** \addtogroup nfsft
+ * \{
+ */
+
+void alpha_al_row(R *alpha, const int N, const int n);
+void beta_al_row(R *beta, const int N, const int n);
+void gamma_al_row(R *gamma, const int N, const int n);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\alpha_{k-1}^n\f$ of associated
+ * Legendre functions for \f$k,n = 0,1,\ldots,N\f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(N+1)^2\f$ where the
+ *   coefficients will be stored such that alpha[n+(N+1)+k] =
+ *   \f$\alpha_{k-1}^n\f$.
+ * \arg N The upper bound \f$N\f$.
+ */
+void alpha_al_all(R *alpha, const int N);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\beta_{k-1}^n\f$ of associated
+ * Legendre functions for \f$k,n = 0,1,\ldots,N\f$.
+ *
+ * \arg beta A pointer to an array of doubles of size \f$(N+1)^2\f$ where the
+ *   coefficients will be stored such that beta[n+(N+1)+k] =
+ *   \f$\beta_{k-1}^n\f$.
+ * \arg N The upper bound \f$N\f$.
+ */
+void beta_al_all(R *beta, const int N);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\gamma_{k-1}^n\f$ of associated
+ * Legendre functions for \f$k,n = 0,1,\ldots,N\f$.
+ *
+ * \arg beta A pointer to an array of doubles of size \f$(N+1)^2\f$ where the
+ *   coefficients will be stored such that gamma[n+(N+1)+k] =
+ *   \f$\gamma_{k-1}^n\f$.
+ * \arg N The upper bound \f$N\f$.
+ */
+void gamma_al_all(R *gamma, const int N);
+
+/**
+ * Evaluates an associated Legendre polynomials \f$P_k^n(x,c)\f$ using the
+ * Clenshaw-algorithm.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg k The index \f$k\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ *   \f$\alpha_c^n,\ldots,\alpha_{c+k}^n\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ *   \f$\beta_c^n,\ldots,\beta_{c+k}^n\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ *   \f$\gamma_c^n,\ldots,\gamma_{c+k}^n\f$
+ */
+void eval_al(R *x, R *y, const int size, const int k, R *alpha,
+  R *beta, R *gamma);
+
+/**
+ * Evaluates an associated Legendre polynomials \f$P_k^n(x,c)\f$ using the
+ * Clenshaw-algorithm if it no exceeds a given threshold.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg k The index \f$k\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ *   \f$\alpha_c^n,\ldots,\alpha_{c+k}^n\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ *   \f$\beta_c^n,\ldots,\beta_{c+k}^n\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ *   \f$\gamma_c^n,\ldots,\gamma_{c+k}^n\f$
+ * \arg threshold The threshold
+ */
+int eval_al_thresh(R *x, R *y, const int size, const int k, R *alpha,
+  R *beta, R *gamma, R threshold);
+/* \} */
+#endif
diff --git a/kernel/nfsft/nfsft.c b/kernel/nfsft/nfsft.c
new file mode 100644
index 0000000..caa08fc
--- /dev/null
+++ b/kernel/nfsft/nfsft.c
@@ -0,0 +1,1268 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfsft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file nfsft.c
+ * \brief Implementation file for the NFSFT module
+ * \author Jens Keiner
+ */
+
+#include "config.h"
+
+/* Include standard C headers. */
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Include NFFT3 utilities header. */
+#include "nfft3util.h"
+
+/* Include NFFT3 library header. */
+#include "nfft3.h"
+
+#include "infft.h"
+
+/* Include private associated Legendre functions header. */
+#include "legendre.h"
+
+/* Include private API header. */
+#include "api.h"
+
+
+/** \addtogroup nfsft
+ * \{
+ */
+
+/**
+ * The default NFFT cutoff parameter
+ *
+ * \author Jens Keiner
+ */
+#define NFSFT_DEFAULT_NFFT_CUTOFF 6
+
+/**
+ * The default threshold for the FPT
+ *
+ * \author Jens Keiner
+ */
+#define NFSFT_DEFAULT_THRESHOLD 1000
+
+/**
+ * The break-even bandwidth \f$N \in \mathbb{N}_0\f$
+ *
+ * \author Jens Keiner
+ */
+#define NFSFT_BREAK_EVEN 5
+
+/**
+ * The global wisdom structure for precomputed data. \c wisdom.initialized
+ * is set to \c false and \c wisdom.flags is set to \c 0U.
+ *
+ * \author Jens Keiner
+ */
+static struct nfsft_wisdom wisdom = {false,0U,-1,-1,0,0,0,0,0};
+
+/**
+ * Converts coefficients \f$\left(b_k^n\right)_{k=0}^M\f$ with
+ * \f$M \in \mathbb{N}_0\f$, \f$-M \le n \le M\f$ from a linear combination
+ * of Chebyshev polynomials
+ * \f[
+ *   f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor}
+ *   a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta)
+ * \f]
+ * to coefficients \f$\left(c_k^n\right)_{k=0}^M\f$ matching the representation
+ * by complex exponentials
+ * \f[
+ *   f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta}
+ * \f]
+ * for each order \f$n=-M,\ldots,M\f$.
+ *
+ * \arg plan The \c nfsft_plan containing the coefficients
+ *      \f$\left(b_k^n\right)_{k=0,\ldots,M;n=-M,\ldots,M}\f$
+ *
+ * \remark The transformation is computed in place.
+ *
+ * \author Jens Keiner
+ */
+static inline void c2e(nfsft_plan *plan)
+{
+  int k;               /**< The degree k                                     */
+  int n;               /**< The order k                                      */
+  double _Complex last; /**< Stores temporary values                          */
+  double _Complex act;  /**< Stores temporary values                          */
+  double _Complex *xp;  /**< Auxilliary pointer                               */
+  double _Complex *xm;  /**< Auxilliary pointer                               */
+  int low;             /**< Lower loop bound                                 */
+  int up;              /**< Upper loop bound                                 */
+  int lowe;            /**< Lower loop bound for even terms                  */
+  int upe;             /**< Upper loop bound for even terms                  */
+
+  /* Set the first row to order to zero since it is unused. */
+  memset(plan->f_hat_intern,0U,(2*plan->N+2)*sizeof(double _Complex));
+
+  /* Determine lower and upper bounds for loop processing even terms. */
+  lowe = -plan->N + (plan->N%2);
+  upe = -lowe;
+
+  /* Process even terms. */
+  for (n = lowe; n <= upe; n += 2)
+  {
+    /* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from
+     * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M}$. */
+    xm = &(plan->f_hat_intern[NFSFT_INDEX(-1,n,plan)]);
+    xp = &(plan->f_hat_intern[NFSFT_INDEX(+1,n,plan)]);
+    for(k = 1; k <= plan->N; k++)
+    {
+      *xp *= 0.5;
+      *xm-- = *xp++;
+    }
+    /* Set the first coefficient in the array corresponding to this order to
+     * zero since it is unused. */
+    *xm = 0.0;
+  }
+
+  /* Determine lower and upper bounds for loop processing odd terms. */
+  low = -plan->N + (1-plan->N%2);
+  up = -low;
+
+  /* Process odd terms incorporating the additional sine term
+   * \f$\sin \vartheta\f$. */
+  for (n = low; n <= up; n += 2)
+  {
+    /* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from
+     * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M-1}$ incorporating
+     * the additional term \f$\sin \vartheta\f$. */
+    plan->f_hat_intern[NFSFT_INDEX(0,n,plan)] *= 2.0;
+    xp = &(plan->f_hat_intern[NFSFT_INDEX(-plan->N-1,n,plan)]);
+    /* Set the first coefficient in the array corresponding to this order to zero
+     * since it is unused. */
+    *xp++ = 0.0;
+    xm = &(plan->f_hat_intern[NFSFT_INDEX(plan->N,n,plan)]);
+    last = *xm;
+    *xm = 0.5 * _Complex_I * (0.5*xm[-1]);
+    *xp++ = -(*xm--);
+    for (k = plan->N-1; k > 0; k--)
+    {
+      act = *xm;
+      *xm = 0.5 * _Complex_I * (0.5*(xm[-1] - last));
+      *xp++ = -(*xm--);
+      last = act;
+    }
+    *xm = 0.0;
+  }
+}
+
+/**
+ * Transposed version of the function \ref c2e
+ *
+ * \arg plan The \c nfsft_plan containing the coefficients
+ *      \f$\left(c_k^n\right)_{k=-M,\ldots,M;n=-M,\ldots,M}\f$
+ *
+ * \remark The transformation is computed in place.
+ *
+ * \author Jens Keiner
+ */
+static inline void c2e_transposed(nfsft_plan *plan)
+{
+  int k;               /**< The degree k                                     */
+  int n;               /**< The order k                                      */
+  double _Complex last; /**< Stores temporary values                          */
+  double _Complex act;  /**< Stores temporary values                          */
+  double _Complex *xp;  /**< Auxilliary pointer                               */
+  double _Complex *xm;  /**< Auxilliary pointer                               */
+  int low;             /**< Lower loop bound                                 */
+  int up;              /**< Upper loop bound                                 */
+  int lowe;            /**< Lower loop bound for even terms                  */
+  int upe;             /**< Upper loop bound for even terms                  */
+
+  /* Determine lower and upper bounds for loop processing even terms. */
+  lowe = -plan->N + (plan->N%2);
+  upe = -lowe;
+
+  /* Process even terms. */
+  for (n = lowe; n <= upe; n += 2)
+  {
+    /* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M}\f$ from
+     * old coefficients $\left(c_k^n\right)_{k=-M,\ldots,M}$. */
+    xm = &(plan->f_hat[NFSFT_INDEX(-1,n,plan)]);
+    xp = &(plan->f_hat[NFSFT_INDEX(+1,n,plan)]);
+    for(k = 1; k <= plan->N; k++)
+    {
+      *xp += *xm--;
+      *xp++ *= 0.5;;
+    }
+  }
+
+  /* Determine lower and upper bounds for loop processing odd terms. */
+  low = -plan->N + (1-plan->N%2);
+  up = -low;
+
+  /* Process odd terms. */
+  for (n = low; n <= up; n += 2)
+  {
+    /* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M-1}\f$ from
+     * old coefficients $\left(c_k^n\right)_{k=0,\ldots,M-1}$. */
+    xm = &(plan->f_hat[NFSFT_INDEX(-1,n,plan)]);
+    xp = &(plan->f_hat[NFSFT_INDEX(+1,n,plan)]);
+    for(k = 1; k <= plan->N; k++)
+    {
+      *xp++ -= *xm--;
+    }
+
+    plan->f_hat[NFSFT_INDEX(0,n,plan)] =
+      -0.25*_Complex_I*plan->f_hat[NFSFT_INDEX(1,n,plan)];
+    last = plan->f_hat[NFSFT_INDEX(1,n,plan)];
+    plan->f_hat[NFSFT_INDEX(1,n,plan)] =
+      -0.25*_Complex_I*plan->f_hat[NFSFT_INDEX(2,n,plan)];
+
+    xp = &(plan->f_hat[NFSFT_INDEX(2,n,plan)]);
+    for (k = 2; k < plan->N; k++)
+    {
+      act = *xp;
+      *xp = -0.25 * _Complex_I * (xp[1] - last);
+      xp++;
+      last = act;
+    }
+    *xp = 0.25 * _Complex_I * last;
+
+    plan->f_hat[NFSFT_INDEX(0,n,plan)] *= 2.0;
+  }
+}
+
+void nfsft_init(nfsft_plan *plan, int N, int M)
+{
+  /* Call nfsft_init_advanced with default flags. */
+  nfsft_init_advanced(plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+    NFSFT_MALLOC_F_HAT);
+}
+
+void nfsft_init_advanced(nfsft_plan* plan, int N, int M,
+                         unsigned int flags)
+{
+  /* Call nfsft_init_guru with the flags and default NFFT cut-off. */
+  nfsft_init_guru(plan, N, M, flags, PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+                         FFT_OUT_OF_PLACE, NFSFT_DEFAULT_NFFT_CUTOFF);
+}
+
+void nfsft_init_guru(nfsft_plan *plan, int N, int M, unsigned int flags,
+  unsigned int nfft_flags, int nfft_cutoff)
+{
+  int *nfft_size; /*< NFFT size                                              */
+  int *fftw_size; /*< FFTW size                                              */
+
+  /* Save the flags in the plan. */
+  plan->flags = flags;
+
+  /* Save the bandwidth N and the number of samples M in the plan. */
+  plan->N = N;
+  plan->M_total = M;
+
+  /* Calculate the next greater power of two with respect to the bandwidth N
+   * and the corresponding exponent. */
+  //next_power_of_2_exp(plan->N,&plan->NPT,&plan->t);
+
+  /* Save length of array of Fourier coefficients. Owing to the data layout the
+   * length is (2N+2)(2N+2) */
+  plan->N_total = (2*plan->N+2)*(2*plan->N+2);
+
+  /* Allocate memory for auxilliary array of spherical Fourier coefficients,
+   * if neccesary. */
+  if (plan->flags & NFSFT_PRESERVE_F_HAT)
+  {
+    plan->f_hat_intern = (double _Complex*) nfft_malloc(plan->N_total*
+                                                  sizeof(double _Complex));
+  }
+
+  /* Allocate memory for spherical Fourier coefficients, if neccesary. */
+  if (plan->flags & NFSFT_MALLOC_F_HAT)
+  {
+    plan->f_hat = (double _Complex*) nfft_malloc(plan->N_total*
+                                           sizeof(double _Complex));
+  }
+
+  /* Allocate memory for samples, if neccesary. */
+  if (plan->flags & NFSFT_MALLOC_F)
+  {
+    plan->f = (double _Complex*) nfft_malloc(plan->M_total*sizeof(double _Complex));
+  }
+
+  /* Allocate memory for nodes, if neccesary. */
+  if (plan->flags & NFSFT_MALLOC_X)
+  {
+    plan->x = (double*) nfft_malloc(plan->M_total*2*sizeof(double));
+  }
+
+  /* Check if fast algorithm is activated. */
+  if (plan->flags & NFSFT_NO_FAST_ALGORITHM)
+  {
+  }
+  else
+  {
+      nfft_size = (int*)nfft_malloc(2*sizeof(int));
+      fftw_size = (int*)nfft_malloc(2*sizeof(int));
+
+      /** \todo Replace 4*plan->N by next_power_of_2(2*this->n). */
+      nfft_size[0] = 2*plan->N+2;
+      nfft_size[1] = 2*plan->N+2;
+      fftw_size[0] = 4*plan->N;
+      fftw_size[1] = 4*plan->N;
+
+      /** \todo NFSFT: Check NFFT flags. */
+      nfft_init_guru(&plan->plan_nfft, 2, nfft_size, plan->M_total, fftw_size,
+                     nfft_cutoff, nfft_flags,
+                     FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
+
+      /* Assign angle array. */
+      plan->plan_nfft.x = plan->x;
+      /* Assign result array. */
+      plan->plan_nfft.f = plan->f;
+      /* Assign Fourier coefficients array. */
+      plan->plan_nfft.f_hat = plan->f_hat;
+
+      /** \todo Add precomputation if neccessary and possible. */
+
+      /* Precompute. */
+      //nfft_precompute_one_psi(&plan->plan_nfft);
+
+      /* Free auxilliary arrays. */
+      nfft_free(nfft_size);
+      nfft_free(fftw_size);
+  }
+
+  plan->mv_trafo = (void (*) (void* ))nfsft_trafo;
+  plan->mv_adjoint = (void (*) (void* ))nfsft_adjoint;
+}
+
+void nfsft_precompute(int N, double kappa, unsigned int nfsft_flags,
+  unsigned int fpt_flags)
+{
+  int n; /*< The order n                                                     */
+
+  /*  Check if already initialized. */
+  if (wisdom.initialized == true)
+  {
+    return;
+  }
+
+#ifdef _OPENMP
+  #pragma omp parallel default(shared)
+  {
+    int nthreads = omp_get_num_threads();
+    int threadid = omp_get_thread_num();
+    #pragma omp single
+    {
+      wisdom.nthreads = nthreads;
+    }
+  }
+#endif
+
+  /* Save the precomputation flags. */
+  wisdom.flags = nfsft_flags;
+
+  /* Compute and save N_max = 2^{\ceil{log_2 N}} as next greater
+   * power of two with respect to N. */
+  X(next_power_of_2_exp)(N,&wisdom.N_MAX,&wisdom.T_MAX);
+
+  /* Check, if precomputation for direct algorithms needs to be performed. */
+  if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+  {
+    wisdom.alpha = NULL;
+    wisdom.beta = NULL;
+    wisdom.gamma = NULL;
+  }
+  else
+  {
+    /* Allocate memory for three-term recursion coefficients. */
+    wisdom.alpha = (double*) nfft_malloc((wisdom.N_MAX+1)*(wisdom.N_MAX+2)*
+      sizeof(double));
+    wisdom.beta = (double*) nfft_malloc((wisdom.N_MAX+1)*(wisdom.N_MAX+2)*
+      sizeof(double));
+    wisdom.gamma = (double*) nfft_malloc((wisdom.N_MAX+1)*(wisdom.N_MAX+2)*
+      sizeof(double));
+    /** \todo Change to functions which compute only for fixed order n. */
+    /* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and
+     * gamma_k^n. */
+    alpha_al_all(wisdom.alpha,wisdom.N_MAX);
+    beta_al_all(wisdom.beta,wisdom.N_MAX);
+    gamma_al_all(wisdom.gamma,wisdom.N_MAX);
+  }
+
+  /* Check, if precomputation for fast algorithms needs to be performed. */
+  if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+  {
+  }
+  else if (wisdom.N_MAX >= NFSFT_BREAK_EVEN)
+  {
+    /* Precompute data for DPT/FPT. */
+
+    /* Check, if recursion coefficients have already been calculated. */
+    if (wisdom.alpha != NULL)
+    {
+#ifdef _OPENMP
+      #pragma omp parallel default(shared) private(n)
+      {
+        int nthreads = omp_get_num_threads();
+	int threadid = omp_get_thread_num();
+	#pragma omp single
+	{
+	  wisdom.nthreads = nthreads;
+	  wisdom.set_threads = (fpt_set*) nfft_malloc(nthreads*sizeof(fpt_set));
+	}
+
+        wisdom.set_threads[threadid] = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+          fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);
+        for (n = 0; n <= wisdom.N_MAX; n++)
+          fpt_precompute(wisdom.set_threads[threadid],n,&wisdom.alpha[ROW(n)],
+            &wisdom.beta[ROW(n)], &wisdom.gamma[ROW(n)],n,kappa);
+      }
+
+#else
+      /* Use the recursion coefficients to precompute FPT data using persistent
+       * arrays. */
+      wisdom.set = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+        fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);
+      for (n = 0; n <= wisdom.N_MAX; n++)
+      {
+        /*fprintf(stderr,"%d\n",n);
+        fflush(stderr);*/
+        /* Precompute data for FPT transformation for order n. */
+        fpt_precompute(wisdom.set,n,&wisdom.alpha[ROW(n)],&wisdom.beta[ROW(n)],
+          &wisdom.gamma[ROW(n)],n,kappa);
+      }
+#endif
+    }
+    else
+    {
+#ifdef _OPENMP
+      #pragma omp parallel default(shared) private(n)
+      {
+        double *alpha, *beta, *gamma;
+        int nthreads = omp_get_num_threads();
+	int threadid = omp_get_thread_num();
+	#pragma omp single
+	{
+	  wisdom.nthreads = nthreads;
+	  wisdom.set_threads = (fpt_set*) nfft_malloc(nthreads*sizeof(fpt_set));
+	}
+
+        alpha = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+        beta = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+        gamma = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+        wisdom.set_threads[threadid] = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+        fpt_flags | FPT_AL_SYMMETRY);
+
+        for (n = 0; n <= wisdom.N_MAX; n++)
+        {
+          alpha_al_row(alpha,wisdom.N_MAX,n);
+          beta_al_row(beta,wisdom.N_MAX,n);
+          gamma_al_row(gamma,wisdom.N_MAX,n);
+
+          /* Precompute data for FPT transformation for order n. */
+          fpt_precompute(wisdom.set_threads[threadid],n,alpha,beta,gamma,n,
+                         kappa);
+        }
+        /* Free auxilliary arrays. */
+        nfft_free(alpha);
+        nfft_free(beta);
+        nfft_free(gamma);
+      }
+#else
+    /* Allocate memory for three-term recursion coefficients. */
+      wisdom.alpha = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+      wisdom.beta = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+      wisdom.gamma = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+      wisdom.set = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+        fpt_flags | FPT_AL_SYMMETRY);
+      for (n = 0; n <= wisdom.N_MAX; n++)
+      {
+        /*fprintf(stderr,"%d NO_DIRECT\n",n);
+        fflush(stderr);*/
+        /* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and
+         * gamma_k^n. */
+        alpha_al_row(wisdom.alpha,wisdom.N_MAX,n);
+        beta_al_row(wisdom.beta,wisdom.N_MAX,n);
+        gamma_al_row(wisdom.gamma,wisdom.N_MAX,n);
+
+        /* Precompute data for FPT transformation for order n. */
+        fpt_precompute(wisdom.set,n,wisdom.alpha,wisdom.beta,wisdom.gamma,n,
+                       kappa);
+      }
+      /* Free auxilliary arrays. */
+      nfft_free(wisdom.alpha);
+      nfft_free(wisdom.beta);
+      nfft_free(wisdom.gamma);
+#endif
+      wisdom.alpha = NULL;
+      wisdom.beta = NULL;
+      wisdom.gamma = NULL;
+    }
+  }
+
+  /* Wisdom has been initialised. */
+  wisdom.initialized = true;
+}
+
+void nfsft_forget(void)
+{
+  /* Check if wisdom has been initialised. */
+  if (wisdom.initialized == false)
+  {
+    /* Nothing to do. */
+    return;
+  }
+
+  /* Check, if precomputation for direct algorithms has been performed. */
+  if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+  {
+  }
+  else
+  {
+    /* Free arrays holding three-term recurrence coefficients. */
+    nfft_free(wisdom.alpha);
+    nfft_free(wisdom.beta);
+    nfft_free(wisdom.gamma);
+    wisdom.alpha = NULL;
+    wisdom.beta = NULL;
+    wisdom.gamma = NULL;
+  }
+
+  /* Check, if precomputation for fast algorithms has been performed. */
+  if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+  {
+  }
+  else if (wisdom.N_MAX >= NFSFT_BREAK_EVEN)
+  {
+#ifdef _OPENMP
+    int k;
+    for (k = 0; k < wisdom.nthreads; k++)
+      fpt_finalize(wisdom.set_threads[k]);
+    nfft_free(wisdom.set_threads);
+#else
+    /* Free precomputed data for FPT transformation. */
+    fpt_finalize(wisdom.set);
+#endif
+  }
+
+  /* Wisdom is now uninitialised. */
+  wisdom.initialized = false;
+}
+
+
+void nfsft_finalize(nfsft_plan *plan)
+{
+  if (!plan)
+    return;
+
+  /* Finalise the nfft plan. */
+  nfft_finalize(&plan->plan_nfft);
+
+  /* De-allocate memory for auxilliary array of spherical Fourier coefficients,
+   * if neccesary. */
+  if (plan->flags & NFSFT_PRESERVE_F_HAT)
+  {
+    nfft_free(plan->f_hat_intern);
+  }
+
+  /* De-allocate memory for spherical Fourier coefficients, if necessary. */
+  if (plan->flags & NFSFT_MALLOC_F_HAT)
+  {
+    //fprintf(stderr,"deallocating f_hat\n");
+    nfft_free(plan->f_hat);
+  }
+
+  /* De-allocate memory for samples, if neccesary. */
+  if (plan->flags & NFSFT_MALLOC_F)
+  {
+    //fprintf(stderr,"deallocating f\n");
+    nfft_free(plan->f);
+  }
+
+  /* De-allocate memory for nodes, if neccesary. */
+  if (plan->flags & NFSFT_MALLOC_X)
+  {
+    //fprintf(stderr,"deallocating x\n");
+    nfft_free(plan->x);
+  }
+}
+
+void nfsft_trafo_direct(nfsft_plan *plan)
+{
+  int m;               /*< The node index                                    */
+  int k;               /*< The degree k                                      */
+  int n;               /*< The order n                                       */
+  int n_abs;           /*< The absolute value of the order n, ie n_abs = |n| */
+  double *alpha;       /*< Pointer to current three-term recurrence
+                           coefficient alpha_k^n for associated Legendre
+                           functions P_k^n                                   */
+  double *gamma;       /*< Pointer to current three-term recurrence
+                           coefficient beta_k^n for associated Legendre
+                           functions P_k^n                                   */
+  double _Complex *a;   /*< Pointer to auxilliary array for Clenshaw algor.   */
+  double _Complex it1;  /*< Auxilliary variable for Clenshaw algorithm        */
+  double _Complex it2;  /*< Auxilliary variable for Clenshaw algorithm        */
+  double _Complex temp; /*< Auxilliary variable for Clenshaw algorithm        */
+  double _Complex f_m;  /*< The final function value f_m = f(x_m) for a
+                           single node.                                      */
+  double stheta;       /*< Current angle theta for Clenshaw algorithm        */
+  double sphi;         /*< Current angle phi for Clenshaw algorithm          */
+
+#ifdef MEASURE_TIME
+  plan->MEASURE_TIME_t[0] = 0.0;
+  plan->MEASURE_TIME_t[1] = 0.0;
+  plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+  if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+  {
+    return;
+  }
+
+  /* Copy spherical Fourier coefficients, if necessary. */
+  if (plan->flags & NFSFT_PRESERVE_F_HAT)
+  {
+    memcpy(plan->f_hat_intern,plan->f_hat,plan->N_total*
+           sizeof(double _Complex));
+  }
+  else
+  {
+    plan->f_hat_intern = plan->f_hat;
+  }
+
+  /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+   * multiply spherical Fourier coefficients with corresponding normalization
+   * weight. */
+  if (plan->flags & NFSFT_NORMALIZED)
+  {
+    /* Traverse Fourier coefficients array. */
+    #pragma omp parallel for default(shared) private(k,n)
+    for (k = 0; k <= plan->N; k++)
+    {
+      for (n = -k; n <= k; n++)
+      {
+        /* Multiply with normalization weight. */
+        plan->f_hat_intern[NFSFT_INDEX(k,n,plan)] *=
+          sqrt((2*k+1)/(4.0*PI));
+      }
+    }
+  }
+
+  /* Distinguish by bandwidth M. */
+  if (plan->N == 0)
+  {
+    /* N = 0 */
+
+    /* Constant function */
+    for (m = 0; m < plan->M_total; m++)
+    {
+      plan->f[m] = plan->f_hat_intern[NFSFT_INDEX(0,0,plan)];
+    }
+  }
+  else
+  {
+    /* N > 0 */
+
+    /* Evaluate
+     *   \sum_{k=0}^N \sum_{n=-k}^k a_k^n P_k^{|n|}(cos theta_m) e^{i n phi_m}
+     *   = \sum_{n=-N}^N \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)
+     *     e^{i n phi_m}.
+     */
+    #pragma omp parallel for default(shared) private(m,stheta,sphi,f_m,n,a,n_abs,alpha,gamma,it2,it1,k,temp)
+    for (m = 0; m < plan->M_total; m++)
+    {
+      /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
+      stheta = cos(2.0*PI*plan->x[2*m+1]);
+      /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
+      sphi = 2.0*PI*plan->x[2*m];
+
+      /* Initialize result for current node. */
+      f_m = 0.0;
+
+      /* For n = -N,...,N, evaluate
+       *   b_n := \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)
+       * using Clenshaw's algorithm.
+       */
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        /* Get pointer to Fourier coefficients vector for current order n. */
+        a = &(plan->f_hat_intern[NFSFT_INDEX(0,n,plan)]);
+
+        /* Take absolute value of n. */
+        n_abs = abs(n);
+
+        /* Get pointers to three-term recurrence coefficients arrays. */
+        alpha = &(wisdom.alpha[ROW(n_abs)]);
+        gamma = &(wisdom.gamma[ROW(n_abs)]);
+
+        /* Clenshaw's algorithm */
+        it2 = a[plan->N];
+        it1 = a[plan->N-1];
+        for (k = plan->N; k > n_abs + 1; k--)
+        {
+          temp = a[k-2] + it2 * gamma[k];
+          it2 = it1 + it2 * alpha[k] * stheta;
+          it1 = temp;
+        }
+
+        /* Compute final step if neccesary. */
+        if (n_abs < plan->N)
+        {
+          it2 = it1 + it2 * wisdom.alpha[ROWK(n_abs)+1] * stheta;
+        }
+
+        /* Compute final result by multiplying the fixed part
+         *   gamma_|n| (1-cos^2(theta))^{|n|/2}
+         * for order n and the exponential part
+         *   e^{i n phi}
+         * and add the result to f_m.
+         */
+        f_m += it2 * wisdom.gamma[ROW(n_abs)] *
+          pow(1- stheta * stheta, 0.5*n_abs) * cexp(_Complex_I*n*sphi);
+      }
+
+      /* Write result f_m for current node to array f. */
+      plan->f[m] = f_m;
+    }
+  }
+}
+
+void nfsft_adjoint_direct(nfsft_plan *plan)
+{
+  int m;               /*< The node index                                    */
+  int k;               /*< The degree k                                      */
+  int n;               /*< The order n                                       */
+  int n_abs;           /*< The absolute value of the order n, ie n_abs = |n| */
+  double *alpha;       /*< Pointer to current three-term recurrence
+                           coefficient alpha_k^n for associated Legendre
+                           functions P_k^n                                   */
+  double *gamma;       /*< Pointer to current three-term recurrence
+                           coefficient beta_k^n for associated Legendre
+                           functions P_k^n                                   */
+  double _Complex it1;  /*< Auxilliary variable for Clenshaw algorithm        */
+  double _Complex it2;  /*< Auxilliary variable for Clenshaw algorithm        */
+  double _Complex temp; /*< Auxilliary variable for Clenshaw algorithm        */
+  double stheta;       /*< Current angle theta for Clenshaw algorithm        */
+  double sphi;         /*< Current angle phi for Clenshaw algorithm          */
+
+#ifdef MEASURE_TIME
+  plan->MEASURE_TIME_t[0] = 0.0;
+  plan->MEASURE_TIME_t[1] = 0.0;
+  plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+  if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+  {
+    return;
+  }
+
+  /* Initialise spherical Fourier coefficients array with zeros. */
+  memset(plan->f_hat,0U,plan->N_total*sizeof(double _Complex));
+
+  /* Distinguish by bandwidth N. */
+  if (plan->N == 0)
+  {
+    /* N == 0 */
+
+    /* Constant function */
+    for (m = 0; m < plan->M_total; m++)
+    {
+      plan->f_hat[NFSFT_INDEX(0,0,plan)] += plan->f[m];
+    }
+  }
+  else
+  {
+    /* N > 0 */
+
+#ifdef _OPENMP
+      /* Traverse all orders n. */
+      #pragma omp parallel for default(shared) private(n,n_abs,alpha,gamma,m,stheta,sphi,it2,it1,k,temp)
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        /* Take absolute value of n. */
+        n_abs = abs(n);
+
+        /* Get pointers to three-term recurrence coefficients arrays. */
+        alpha = &(wisdom.alpha[ROW(n_abs)]);
+        gamma = &(wisdom.gamma[ROW(n_abs)]);
+
+        /* Traverse all nodes. */
+        for (m = 0; m < plan->M_total; m++)
+        {
+          /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
+          stheta = cos(2.0*PI*plan->x[2*m+1]);
+          /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
+          sphi = 2.0*PI*plan->x[2*m];
+
+          /* Transposed Clenshaw algorithm */
+
+          /* Initial step */
+          it1 = plan->f[m] * wisdom.gamma[ROW(n_abs)] *
+            pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);
+          plan->f_hat[NFSFT_INDEX(n_abs,n,plan)] += it1;
+          it2 = 0.0;
+
+          if (n_abs < plan->N)
+          {
+            it2 = it1 * wisdom.alpha[ROWK(n_abs)+1] * stheta;
+            plan->f_hat[NFSFT_INDEX(n_abs+1,n,plan)] += it2;
+          }
+
+          /* Loop for transposed Clenshaw algorithm */
+          for (k = n_abs+2; k <= plan->N; k++)
+          {
+            temp = it2;
+            it2 = alpha[k] * stheta * it2 + gamma[k] * it1;
+            it1 = temp;
+            plan->f_hat[NFSFT_INDEX(k,n,plan)] += it2;
+          }
+        }
+      }
+#else
+    /* Traverse all nodes. */
+    for (m = 0; m < plan->M_total; m++)
+    {
+      /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
+      stheta = cos(2.0*PI*plan->x[2*m+1]);
+      /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
+      sphi = 2.0*PI*plan->x[2*m];
+
+      /* Traverse all orders n. */
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        /* Take absolute value of n. */
+        n_abs = abs(n);
+
+        /* Get pointers to three-term recurrence coefficients arrays. */
+        alpha = &(wisdom.alpha[ROW(n_abs)]);
+        gamma = &(wisdom.gamma[ROW(n_abs)]);
+
+        /* Transposed Clenshaw algorithm */
+
+        /* Initial step */
+        it1 = plan->f[m] * wisdom.gamma[ROW(n_abs)] *
+          pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);
+        plan->f_hat[NFSFT_INDEX(n_abs,n,plan)] += it1;
+        it2 = 0.0;
+
+        if (n_abs < plan->N)
+        {
+          it2 = it1 * wisdom.alpha[ROWK(n_abs)+1] * stheta;
+          plan->f_hat[NFSFT_INDEX(n_abs+1,n,plan)] += it2;
+        }
+
+        /* Loop for transposed Clenshaw algorithm */
+        for (k = n_abs+2; k <= plan->N; k++)
+        {
+          temp = it2;
+          it2 = alpha[k] * stheta * it2 + gamma[k] * it1;
+          it1 = temp;
+          plan->f_hat[NFSFT_INDEX(k,n,plan)] += it2;
+        }
+      }
+    }
+#endif
+  }
+
+  /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+   * multiply spherical Fourier coefficients with corresponding normalization
+   * weight. */
+  if (plan->flags & NFSFT_NORMALIZED)
+  {
+    /* Traverse Fourier coefficients array. */
+    #pragma omp parallel for default(shared) private(k,n)
+    for (k = 0; k <= plan->N; k++)
+    {
+      for (n = -k; n <= k; n++)
+      {
+        /* Multiply with normalization weight. */
+        plan->f_hat[NFSFT_INDEX(k,n,plan)] *=
+          sqrt((2*k+1)/(4.0*PI));
+      }
+    }
+  }
+
+  /* Set unused coefficients to zero. */
+  if (plan->flags & NFSFT_ZERO_F_HAT)
+  {
+    for (n = -plan->N; n <= plan->N+1; n++)
+    {
+      memset(&plan->f_hat[NFSFT_INDEX(-plan->N-1,n,plan)],0U,
+        (plan->N+1+abs(n))*sizeof(double _Complex));
+    }
+  }
+}
+
+void nfsft_trafo(nfsft_plan *plan)
+{
+  int k; /*< The degree k                                                    */
+  int n; /*< The order n                                                     */
+#ifdef MEASURE_TIME
+  ticks t0, t1;
+#endif
+  #ifdef DEBUG
+    double t, t_pre, t_nfft, t_fpt, t_c2e, t_norm;
+    t_pre = 0.0;
+    t_norm = 0.0;
+    t_fpt = 0.0;
+    t_c2e = 0.0;
+    t_nfft = 0.0;
+  #endif
+
+#ifdef MEASURE_TIME
+  plan->MEASURE_TIME_t[0] = 0.0;
+  plan->MEASURE_TIME_t[1] = 0.0;
+  plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+  if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+  {
+    return;
+  }
+
+  /* Check, if precomputation was done and that the bandwidth N is not too
+   * big.
+   */
+  if (wisdom.initialized == 0 || plan->N > wisdom.N_MAX)
+  {
+    return;
+  }
+
+  /* Check, if slow transformation should be used due to small bandwidth. */
+  if (plan->N < NFSFT_BREAK_EVEN)
+  {
+    /* Use NDSFT. */
+    nfsft_trafo_direct(plan);
+  }
+
+  /* Check for correct value of the bandwidth N. */
+  else if (plan->N <= wisdom.N_MAX)
+  {
+    /* Copy spherical Fourier coefficients, if necessary. */
+    if (plan->flags & NFSFT_PRESERVE_F_HAT)
+    {
+      memcpy(plan->f_hat_intern,plan->f_hat,plan->N_total*
+             sizeof(double _Complex));
+    }
+    else
+    {
+      plan->f_hat_intern = plan->f_hat;
+    }
+
+    /* Propagate pointer values to the internal NFFT plan to assure
+     * consistency. Pointers may have been modified externally.
+     */
+    plan->plan_nfft.x = plan->x;
+    plan->plan_nfft.f = plan->f;
+    plan->plan_nfft.f_hat = plan->f_hat_intern;
+
+    /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+     * multiply spherical Fourier coefficients with corresponding normalization
+     * weight. */
+    if (plan->flags & NFSFT_NORMALIZED)
+    {
+      /* Traverse Fourier coefficients array. */
+      #pragma omp parallel for default(shared) private(k,n)
+      for (k = 0; k <= plan->N; k++)
+      {
+        for (n = -k; n <= k; n++)
+        {
+          /* Multiply with normalization weight. */
+          plan->f_hat_intern[NFSFT_INDEX(k,n,plan)] *=
+            sqrt((2*k+1)/(4.0*PI));
+        }
+      }
+    }
+
+#ifdef MEASURE_TIME
+    t0 = getticks();
+#endif
+    /* Check, which polynomial transform algorithm should be used. */
+    if (plan->flags & NFSFT_USE_DPT)
+    {
+#ifdef _OPENMP
+      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+      for (n = -plan->N; n <= plan->N; n++)
+         fpt_trafo_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),
+          &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+#else
+      /* Use direct discrete polynomial transform DPT. */
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        //fprintf(stderr,"nfsft_trafo: n = %d\n",n);
+        //fflush(stderr);
+        fpt_trafo_direct(wisdom.set,abs(n),
+          &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+      }
+#endif
+    }
+    else
+    {
+#ifdef _OPENMP
+      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+      for (n = -plan->N; n <= plan->N; n++)
+        fpt_trafo(wisdom.set_threads[omp_get_thread_num()],abs(n),
+          &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+#else
+      /* Use fast polynomial transform FPT. */
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        //fprintf(stderr,"nfsft_trafo: n = %d\n",n);
+        //fflush(stderr);
+        fpt_trafo(wisdom.set,abs(n),
+          &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+      }
+#endif
+    }
+#ifdef MEASURE_TIME
+    t1 = getticks();
+    plan->MEASURE_TIME_t[0] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+#ifdef MEASURE_TIME
+    t0 = getticks();
+#endif
+    /* Convert Chebyshev coefficients to Fourier coefficients. */
+    c2e(plan);
+#ifdef MEASURE_TIME
+    t1 = getticks();
+    plan->MEASURE_TIME_t[1] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+#ifdef MEASURE_TIME
+    t0 = getticks();
+#endif
+    /* Check, which nonequispaced discrete Fourier transform algorithm should
+     * be used.
+     */
+    if (plan->flags & NFSFT_USE_NDFT)
+    {
+      /* Use NDFT. */
+      nfft_trafo_direct(&plan->plan_nfft);
+    }
+    else
+    {
+      /* Use NFFT. */
+      //fprintf(stderr,"nfsft_adjoint: nfft_trafo\n");
+      nfft_trafo_2d(&plan->plan_nfft);
+    }
+#ifdef MEASURE_TIME
+    t1 = getticks();
+    plan->MEASURE_TIME_t[2] = nfft_elapsed_seconds(t1,t0);
+#endif
+  }
+}
+
+void nfsft_adjoint(nfsft_plan *plan)
+{
+  int k; /*< The degree k                                                    */
+  int n; /*< The order n                                                     */
+#ifdef MEASURE_TIME
+  ticks t0, t1;
+#endif
+
+#ifdef MEASURE_TIME
+  plan->MEASURE_TIME_t[0] = 0.0;
+  plan->MEASURE_TIME_t[1] = 0.0;
+  plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+  if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+  {
+    return;
+  }
+
+  /* Check, if precomputation was done and that the bandwidth N is not too
+   * big.
+   */
+  if (wisdom.initialized == 0 || plan->N > wisdom.N_MAX)
+  {
+    return;
+  }
+
+  /* Check, if slow transformation should be used due to small bandwidth. */
+  if (plan->N < NFSFT_BREAK_EVEN)
+  {
+    /* Use adjoint NDSFT. */
+    nfsft_adjoint_direct(plan);
+  }
+  /* Check for correct value of the bandwidth N. */
+  else if (plan->N <= wisdom.N_MAX)
+  {
+    //fprintf(stderr,"nfsft_adjoint: Starting\n");
+    //fflush(stderr);
+    /* Propagate pointer values to the internal NFFT plan to assure
+     * consistency. Pointers may have been modified externally.
+     */
+    plan->plan_nfft.x = plan->x;
+    plan->plan_nfft.f = plan->f;
+    plan->plan_nfft.f_hat = plan->f_hat;
+
+#ifdef MEASURE_TIME
+    t0 = getticks();
+#endif
+    /* Check, which adjoint nonequispaced discrete Fourier transform algorithm
+     * should be used.
+     */
+    if (plan->flags & NFSFT_USE_NDFT)
+    {
+      //fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint_direct\n");
+      //fflush(stderr);
+      /* Use adjoint NDFT. */
+      nfft_adjoint_direct(&plan->plan_nfft);
+    }
+    else
+    {
+      //fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint\n");
+      //fflush(stderr);
+      //fprintf(stderr,"nfsft_adjoint: nfft_adjoint\n");
+      /* Use adjoint NFFT. */
+      nfft_adjoint_2d(&plan->plan_nfft);
+    }
+#ifdef MEASURE_TIME
+    t1 = getticks();
+    plan->MEASURE_TIME_t[2] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+    //fprintf(stderr,"nfsft_adjoint: Executing c2e_transposed\n");
+    //fflush(stderr);
+#ifdef MEASURE_TIME
+    t0 = getticks();
+#endif
+    /* Convert Fourier coefficients to Chebyshev coefficients. */
+    c2e_transposed(plan);
+#ifdef MEASURE_TIME
+    t1 = getticks();
+    plan->MEASURE_TIME_t[1] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+#ifdef MEASURE_TIME
+    t0 = getticks();
+#endif
+    /* Check, which transposed polynomial transform algorithm should be used */
+    if (plan->flags & NFSFT_USE_DPT)
+    {
+#ifdef _OPENMP
+      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+      for (n = -plan->N; n <= plan->N; n++)
+        fpt_transposed_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),
+          &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+#else
+      /* Use transposed DPT. */
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        //fprintf(stderr,"nfsft_adjoint: Executing dpt_transposed\n");
+        //fflush(stderr);
+        fpt_transposed_direct(wisdom.set,abs(n),
+          &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+      }
+#endif
+    }
+    else
+    {
+#ifdef _OPENMP
+      #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+      for (n = -plan->N; n <= plan->N; n++)
+        fpt_transposed(wisdom.set_threads[omp_get_thread_num()],abs(n),
+          &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+#else
+      //fprintf(stderr,"nfsft_adjoint: fpt_transposed\n");
+      /* Use transposed FPT. */
+      for (n = -plan->N; n <= plan->N; n++)
+      {
+        //fprintf(stderr,"nfsft_adjoint: Executing fpt_transposed\n");
+        //fflush(stderr);
+        fpt_transposed(wisdom.set,abs(n),
+          &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+          &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+          plan->N,0U);
+      }
+#endif
+    }
+#ifdef MEASURE_TIME
+    t1 = getticks();
+    plan->MEASURE_TIME_t[0] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+    /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+     * multiply spherical Fourier coefficients with corresponding normalization
+     * weight. */
+    if (plan->flags & NFSFT_NORMALIZED)
+    {
+      //fprintf(stderr,"nfsft_adjoint: Normalizing\n");
+      //fflush(stderr);
+      /* Traverse Fourier coefficients array. */
+      #pragma omp parallel for default(shared) private(k,n)
+      for (k = 0; k <= plan->N; k++)
+      {
+        for (n = -k; n <= k; n++)
+        {
+          /* Multiply with normalization weight. */
+          plan->f_hat[NFSFT_INDEX(k,n,plan)] *=
+            sqrt((2*k+1)/(4.0*PI));
+        }
+      }
+    }
+
+    /* Set unused coefficients to zero. */
+    if (plan->flags & NFSFT_ZERO_F_HAT)
+    {
+      //fprintf(stderr,"nfsft_adjoint: Setting to zero\n");
+      //fflush(stderr);
+      for (n = -plan->N; n <= plan->N+1; n++)
+      {
+        memset(&plan->f_hat[NFSFT_INDEX(-plan->N-1,n,plan)],0U,
+          (plan->N+1+abs(n))*sizeof(double _Complex));
+      }
+    }
+    //fprintf(stderr,"nfsft_adjoint: Finished\n");
+    //fflush(stderr);
+  }
+}
+
+void nfsft_precompute_x(nfsft_plan *plan)
+{
+  /* Pass angle array to NFFT plan. */
+  plan->plan_nfft.x = plan->x;
+
+  /* Precompute. */
+  if (plan->plan_nfft.nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(&plan->plan_nfft);
+}
+/* \} */
diff --git a/kernel/nfsoft/Makefile.am b/kernel/nfsoft/Makefile.am
new file mode 100644
index 0000000..3f33e35
--- /dev/null
+++ b/kernel/nfsoft/Makefile.am
@@ -0,0 +1,6 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnfsoft.la
+libnfsoft_la_SOURCES = nfsoft.c wigner.h wigner.c
\ No newline at end of file
diff --git a/kernel/nfsoft/Makefile.in b/kernel/nfsoft/Makefile.in
new file mode 100644
index 0000000..978e894
--- /dev/null
+++ b/kernel/nfsoft/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfsoft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfsoft_la_LIBADD =
+am_libnfsoft_la_OBJECTS = nfsoft.lo wigner.lo
+libnfsoft_la_OBJECTS = $(am_libnfsoft_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfsoft_la_SOURCES)
+DIST_SOURCES = $(libnfsoft_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnfsoft.la
+libnfsoft_la_SOURCES = nfsoft.c wigner.h wigner.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfsoft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nfsoft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfsoft.la: $(libnfsoft_la_OBJECTS) $(libnfsoft_la_DEPENDENCIES) $(EXTRA_libnfsoft_la_DEPENDENCIES) 
+	$(LINK)  $(libnfsoft_la_OBJECTS) $(libnfsoft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsoft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wigner.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfsoft/nfsoft.c b/kernel/nfsoft/nfsoft.c
new file mode 100755
index 0000000..50ee2fb
--- /dev/null
+++ b/kernel/nfsoft/nfsoft.c
@@ -0,0 +1,730 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfsoft.c 3919 2012-11-20 13:31:45Z grman $ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+#include "wigner.h"
+
+#define DEFAULT_NFFT_CUTOFF    6
+#define FPT_THRESHOLD          1000
+
+static fpt_set SO3_fpt_init(int l, unsigned int flags, int kappa);
+
+void nfsoft_init(nfsoft_plan *plan, int N, int M)
+{
+  nfsoft_init_advanced(plan, N, M, NFSOFT_MALLOC_X | NFSOFT_MALLOC_F
+      | NFSOFT_MALLOC_F_HAT);
+}
+
+void nfsoft_init_advanced(nfsoft_plan *plan, int N, int M,
+    unsigned int nfsoft_flags)
+{
+  nfsoft_init_guru(plan, N, M, nfsoft_flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X
+      | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE,
+      DEFAULT_NFFT_CUTOFF, FPT_THRESHOLD);
+}
+
+void nfsoft_init_guru(nfsoft_plan *plan, int B, int M,
+    unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff,
+    int fpt_kappa)
+{
+  int N[3];
+  int n[3];
+
+  N[0] = 2* B + 2;
+  N[1] = 2* B + 2;
+  N[2] = 2* B + 2;
+
+  n[0] = 8* B ;
+  n[1] = 8* B ;
+  n[2] = 8* B ;
+
+  nfft_init_guru(&plan->p_nfft, 3, N, M, n, nfft_cutoff, nfft_flags,
+      FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
+
+  if ((plan->p_nfft).nfft_flags & PRE_LIN_PSI)
+  {
+    nfft_precompute_lin_psi(&(plan->p_nfft));
+  }
+
+  plan->N_total = B;
+  plan->M_total = M;
+  plan->fpt_kappa = fpt_kappa;
+  plan->flags = nfsoft_flags;
+
+  if (plan->flags & NFSOFT_MALLOC_F_HAT)
+  {
+    plan->f_hat = (C*) nfft_malloc((B + 1) * (4* (B +1)*(B+1)-1)/3*sizeof(C));
+    if (plan->f_hat == NULL ) printf("Allocation failed!\n");
+  }
+
+  if (plan->flags & NFSOFT_MALLOC_X)
+  {
+    plan->x = (R*) nfft_malloc(plan->M_total*3*sizeof(R));
+    if (plan->x == NULL ) printf("Allocation failed!\n");
+  }
+  if (plan->flags & NFSOFT_MALLOC_F)
+  {
+    plan->f = (C*) nfft_malloc(plan->M_total*sizeof(C));
+      if (plan->f == NULL ) printf("Allocation failed!\n");
+  }
+
+  plan->wig_coeffs = (C*) nfft_malloc((X(next_power_of_2)(B)+1)*sizeof(C));
+  plan->cheby = (C*) nfft_malloc((2*B+2)*sizeof(C));
+  plan->aux = (C*) nfft_malloc((2*B+4)*sizeof(C));
+
+  if (plan->wig_coeffs == NULL ) printf("Allocation failed!\n");
+  if (plan->cheby == NULL ) printf("Allocation failed!\n");
+  if (plan->aux == NULL ) printf("Allocation failed!\n");
+
+  plan->mv_trafo = (void (*) (void* ))nfsoft_trafo;
+  plan->mv_adjoint = (void (*) (void* ))nfsoft_adjoint;
+
+  plan->internal_fpt_set = SO3_fpt_init(plan->N_total, plan->flags, plan->fpt_kappa);
+
+}
+
+static void c2e(nfsoft_plan *my_plan, int even)
+{
+  int j, N;
+
+  /**initialize the bigger plan*/
+  N = 2* (my_plan ->N_total+1);
+
+  /** prepare the coefficients for the new plan */
+  my_plan->cheby[my_plan->N_total+1] = my_plan->wig_coeffs[0];
+  my_plan->cheby[0]=0.0;
+
+  for (j=1;j<my_plan->N_total+1;j++)
+  {
+    my_plan->cheby[my_plan->N_total+1+j]=0.5* my_plan->wig_coeffs[j];
+    my_plan->cheby[my_plan->N_total+1-j]=0.5* my_plan->wig_coeffs[j];
+  }
+
+  C *aux= (C*) nfft_malloc((N+2)*sizeof(C));
+
+  for(j=1;j<N;j++)
+  aux[j]=my_plan->cheby[j];
+
+  aux[0]=0.;
+  aux[N]=0.;
+
+  if (even>0)
+  {
+    my_plan->cheby[0]=(C) (-1.)/(2.*_Complex_I) * aux[1];
+    for (j=1;j<N;j++)
+    {
+      my_plan->cheby[j]=(1./(2.*_Complex_I)*(aux[j+1]-aux[j-1]));
+    }
+
+  }
+  free(aux);
+  aux = NULL;
+}
+
+
+static fpt_set SO3_fpt_init(int l, unsigned int flags, int kappa)
+{
+  fpt_set set = 0;
+  int N, t, k_start, k_end, k, m;
+  int glo = 0;
+  R *alpha, *beta, *gamma;
+
+  /** Read in transfrom length. */
+  if (flags & NFSOFT_USE_DPT)
+  {
+    if (l < 2)
+      N = 2;
+    else
+      N = l;
+
+    t = (int) log2(X(next_power_of_2)(N));
+
+  }
+  else
+  {
+    /** workaround to compute polynomials of degree less than 2*/
+    if (l < 2)
+      N = 2;
+    else
+      N = X(next_power_of_2)(l);
+
+    t = (int) log2(N);
+  }
+
+  /**memory for the recurrence coefficients*/
+  alpha = (R*) nfft_malloc((N + 2) * sizeof(R));
+  beta = (R*) nfft_malloc((N + 2) * sizeof(R));
+  gamma = (R*) nfft_malloc((N + 2) * sizeof(R));
+
+  /** Initialize DPT. */
+  if (flags & NFSOFT_NO_STABILIZATION)
+  {
+    set = fpt_init((2* N + 1) * (2* N + 1), t, 0U | FPT_NO_STABILIZATION);
+  }
+  else
+  {
+    set = fpt_init((2* N + 1) * (2* N + 1), t, 0U);
+  }
+
+  for (k = -N; k <= N; k++)
+    for (m = -N; m <= N; m++)
+    {
+      /** Read in start and end indeces */
+      k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+      k_end = N;
+
+      SO3_alpha_row(alpha, N, k, m);
+      SO3_beta_row(beta, N, k, m);
+      SO3_gamma_row(gamma, N, k, m);
+
+      fpt_precompute(set, glo, alpha, beta, gamma, k_start, kappa);
+      glo++;
+    }
+
+  free(alpha);
+  free(beta);
+  free(gamma);
+  alpha = NULL;
+  beta = NULL;
+  gamma = NULL;
+
+  return set;
+}
+
+static fpt_set SO3_single_fpt_init(int l, int k, int m, unsigned int flags, int kappa)
+{
+  int N, t, k_start, k_end;
+  R *alpha, *beta, *gamma;
+  fpt_set set = 0;
+
+  /** Read in transfrom length. */
+  if (flags & NFSOFT_USE_DPT)
+  {
+    if (l < 2)
+      N = 2;
+    else
+      N = l;
+
+    t = (int) log2(X(next_power_of_2)(N));
+
+  }
+  else
+  {
+    /** workaround to compute polynomials of degree less than 2*/
+    if (l < 2)
+      N = 2;
+    else
+      N = X(next_power_of_2)(l);
+
+    t = (int) log2(N);
+  }
+
+  /**memory for the recurrence coefficients*/
+  alpha = (R*) nfft_malloc((N + 2) * sizeof(R));
+  beta = (R*) nfft_malloc((N + 2) * sizeof(R));
+  gamma = (R*) nfft_malloc((N + 2) * sizeof(R));
+
+  /** Initialize DPT. */
+  {
+    unsigned int fptflags = 0U 
+      | IF(flags & NFSOFT_USE_DPT,FPT_NO_FAST_ALGORITHM,IF(t > 1,FPT_NO_DIRECT_ALGORITHM,0U))
+      | IF(flags & NFSOFT_NO_STABILIZATION,FPT_NO_STABILIZATION,0U);
+    set = fpt_init(1, t, fptflags);
+  }
+
+  /** Read in start and end indices */
+  k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+  k_end = N;
+
+  SO3_alpha_row(alpha, N, k, m);
+  SO3_beta_row(beta, N, k, m);
+  SO3_gamma_row(gamma, N, k, m);
+  
+  /*{
+    int rr;
+    for (rr = 0; rr < N + 2; rr++)
+      fprintf(stderr, "a[%4d] = %10e b[%4d] = %10e c[%4d] = %10e\n",rr,alpha[rr],rr,beta[rr],rr,gamma[rr]);
+  }*/
+
+  fpt_precompute(set, 0, alpha, beta, gamma, k_start, kappa);
+
+  free(alpha);
+  free(beta);
+  free(gamma);
+  alpha = NULL;
+  beta = NULL;
+  gamma = NULL;
+
+  return set;
+}
+
+void SO3_fpt(C *coeffs, fpt_set set, int l, int k, int m, unsigned int flags)
+{
+  int N;
+  /** The Wigner  coefficients */
+  C* x;
+  /** The Chebyshev coefficients */
+  C* y;
+
+  int trafo_nr; /**gives the index of the trafo in the FPT_set*/
+  int k_start, k_end, j;
+  int function_values = 0;
+
+  /** Read in transfrom length. */
+  if (flags & NFSOFT_USE_DPT)
+  {
+    N = l;
+    if (l < 2)
+      N = 2;
+  }
+  else
+  {
+    if (l < 2)
+      N = 2;
+    else
+      N = X(next_power_of_2)(l);
+  }
+
+  /** Read in start and end indeces */
+  k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+  k_end = N;
+  trafo_nr = (N + k) * (2* N + 1) + (m + N);
+
+  /** Read in Wigner coefficients. */
+  x = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+
+  for (j = 0; j <= k_end; j++)
+   x[j] = K(0.0);
+
+
+  for (j = 0; j <= l - k_start; j++)
+  {
+    x[j + k_start] = coeffs[j];
+  }
+  for (j = l - k_start + 1; j <= k_end - k_start; j++)
+  {
+    x[j + k_start] = K(0.0);
+  }
+
+  /** Allocate memory for Chebyshev coefficients. */
+  y = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+
+  if (flags & NFSOFT_USE_DPT)
+  { /** Execute DPT. */
+    fpt_trafo_direct(set, trafo_nr, &x[k_start], y, k_end, 0U
+        | (function_values ? FPT_FUNCTION_VALUES : 0U));
+  }
+  else
+  { /** compute fpt*/
+    fpt_trafo(set, trafo_nr, &x[k_start], y, k_end, 0U
+        | (function_values ? FPT_FUNCTION_VALUES : 0U));
+  }
+
+  /**write computed coeffs in the plan*/
+  for (j = 0; j <= l; j++)
+  {
+    coeffs[j] = y[j];
+  }
+
+  /** Free memory. */
+
+  free(x);
+  free(y);
+  x = NULL;
+  y = NULL;
+}
+
+void SO3_fpt_transposed(C *coeffs, fpt_set set, int l, int k, int m,
+    unsigned int flags)
+{
+  int N, k_start, k_end, j;
+  int trafo_nr; /**gives the index of the trafo in the FPT_set*/
+  int function_values = 0;
+  /** The Wigner  coefficients */
+  C* x;
+  /** The Chebyshev coefficients */
+  C* y;
+
+  /** Read in transfrom length. */
+
+  if (flags & NFSOFT_USE_DPT)
+  {
+    N = l;
+    if (l < 2)
+      N = 2;
+  }
+  else
+  {
+    if (l < 2)
+      N = 2;
+    else
+      N = X(next_power_of_2)(l);
+  }
+
+  /** Read in start and end indeces */
+  k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+  k_end = N;
+  trafo_nr = (N + k) * (2* N + 1) + (m + N);
+
+  /** Allocate memory for Chebychev coefficients. */
+  y = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+  /** Allocate memory for Wigner coefficients. */
+  x = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+
+  for (j = 0; j <= l; j++)
+  {
+    y[j] = coeffs[j];
+  }
+  for (j = l + 1; j <= k_end; j++)
+  {
+    y[j] = K(0.0);
+  }
+
+  if (flags & NFSOFT_USE_DPT)
+  {
+    fpt_transposed_direct(set, trafo_nr, &x[k_start], y, k_end, 0U
+        | (function_values ? FPT_FUNCTION_VALUES : 0U));
+  }
+  else
+  {
+    fpt_transposed(set, trafo_nr, &x[k_start], y, k_end, 0U
+        | (function_values ? FPT_FUNCTION_VALUES : 0U));
+  }
+
+  for (j = 0; j <= l; j++)
+  {
+    coeffs[j] = x[j];
+  }
+
+  /** Free memory. */
+  free(x);
+  free(y);
+  x = NULL;
+  y = NULL;
+}
+
+void nfsoft_precompute(nfsoft_plan *plan3D)
+{
+  int j;
+  int N = plan3D->N_total;
+  int M = plan3D->M_total;
+
+  /** Node-dependent part*/
+
+  for (j = 0; j < M; j++)
+  {
+    plan3D->p_nfft.x[3* j ] = plan3D->x[3* j + 2];
+    plan3D->p_nfft.x[3* j + 1] = plan3D->x[3* j ];
+    plan3D->p_nfft.x[3* j + 2] = plan3D->x[3* j + 1];
+  }
+
+  for (j = 0; j < 3* plan3D ->p_nfft.M_total; j++)
+  {
+    plan3D->p_nfft.x[j] = plan3D->p_nfft.x[j] * (1 / (2* PI ));
+  }
+
+  if ((plan3D->p_nfft).nfft_flags & FG_PSI)
+  {
+    nfft_precompute_one_psi(&(plan3D->p_nfft));
+  }
+  if ((plan3D->p_nfft).nfft_flags & PRE_PSI)
+  {
+    nfft_precompute_one_psi(&(plan3D->p_nfft));
+  }
+
+}
+
+void nfsoft_trafo(nfsoft_plan *plan3D)
+{
+  int i, j, m, k, max, glo1, glo2;
+
+  i = 0;
+  glo1 = 0;
+  glo2 = 0;
+
+  int N = plan3D->N_total;
+  int M = plan3D->M_total;
+
+  /**almost nothing to be done for polynomial degree 0*/
+  if (N == 0)
+  {
+    for (j = 0; j < M; j++)
+      plan3D->f[j] = plan3D->f_hat[0];
+    return;
+  }
+
+  for (j = 0; j < plan3D->p_nfft.N_total; j++)
+    plan3D->p_nfft.f_hat[j] = 0.0;
+
+  for (k = -N; k <= N; k++)
+  {
+    for (m = -N; m <= N; m++)
+    {
+
+      max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));
+
+      for (j = 0; j <= N - max; j++)
+      {
+        plan3D->wig_coeffs[j] = plan3D->f_hat[glo1];
+
+        if ((plan3D->flags & NFSOFT_NORMALIZED))
+        {
+          plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (1. / (2. * PI))
+              * SQRT(0.5 * (2. * (max + j) + 1.));
+        }
+
+        if ((plan3D->flags & NFSOFT_REPRESENT))
+        {
+          if ((k < 0) && (k % 2))
+          {
+            plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+          }
+          if ((m < 0) && (m % 2))
+            plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+
+          if ((m + k) % 2)
+	    plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+
+        }
+
+        glo1++;
+      }
+
+      for (j = N - max + 1; j < X(next_power_of_2)(N) + 1; j++)
+        plan3D->wig_coeffs[j] = 0.0;
+      //fprintf(stdout,"\n k= %d, m= %d \n",k,m);
+      SO3_fpt(plan3D->wig_coeffs, plan3D->internal_fpt_set, N, k, m, plan3D->flags);
+
+      c2e(plan3D, ABS((k + m) % 2));
+
+      for (i = 1; i <= 2* plan3D ->N_total + 2; i++)
+      {
+        plan3D->p_nfft.f_hat[NFSOFT_INDEX(k, m, i - N - 1, N) - 1]
+            = plan3D->cheby[i - 1];
+        //fprintf(stdout,"%f \t", plan3D->nfft_plan.f_hat[NFSOFT_INDEX(k,m,i-N-1,N)-1]);
+        //fprintf(stdout,"another index: %d for k=%d,m=%d,l=%d,N=%d \n", NFSOFT_INDEX(k,m,i-N-1,N)-1,k,m,i-N-1,N);
+      }
+
+    }
+  }
+
+  if (plan3D->flags & NFSOFT_USE_NDFT)
+  {
+    nfft_trafo_direct(&(plan3D->p_nfft));
+  }
+  else
+  {
+    nfft_trafo(&(plan3D->p_nfft));
+  }
+
+  for (j = 0; j < plan3D->M_total; j++)
+    plan3D->f[j] = plan3D->p_nfft.f[j];
+
+}
+
+static void e2c(nfsoft_plan *my_plan, int even)
+{
+  int N;
+  int j;
+
+  /**initialize the bigger plan*/
+  N = 2* (my_plan ->N_total+1);
+  //nfft_vpr_complex(my_plan->cheby,N+1,"chebychev");
+
+
+      if (even>0)
+      {
+        //my_plan->aux[N-1]= -1/(2*I)* my_plan->cheby[N-2];
+        my_plan->aux[0]= 1/(2*_Complex_I)*my_plan->cheby[1];
+
+        for(j=1;j<N-1;j++)
+        {
+          my_plan->aux[j]=1/(2*_Complex_I)*(my_plan->cheby[j+1]-my_plan->cheby[j-1]);
+}
+my_plan->aux[N-1]=1/(2*_Complex_I)*(-my_plan->cheby[j-1]);
+
+
+for(j=0;j<N;j++)
+{
+my_plan->cheby[j]= my_plan->aux[j];
+}
+}
+
+my_plan->wig_coeffs[0]=my_plan->cheby[my_plan->N_total+1];
+
+for(j=1;j<=my_plan->N_total;j++)
+{
+my_plan->wig_coeffs[j]=0.5*(my_plan->cheby[my_plan->N_total+j+1]+my_plan->cheby[my_plan->N_total+1-j]);
+}
+
+
+
+//nfft_vpr_complex(my_plan->wig_coeffs,my_plan->N_total,"chebychev ");
+
+}
+
+void nfsoft_adjoint(nfsoft_plan *plan3D)
+{
+  int i, j, m, k, max, glo1, glo2;
+
+  i = 0;
+  glo1 = 0;
+  glo2 = 0;
+
+  int N = plan3D->N_total;
+  int M = plan3D->M_total;
+
+  //nothing much to be done for polynomial degree 0
+  if (N == 0)
+  {
+    plan3D->f_hat[0]=0;
+    for (j = 0; j < M; j++)
+      plan3D->f_hat[0] += plan3D->f[j];
+    return;
+  }
+
+  for (j = 0; j < M; j++)
+  {
+    plan3D->p_nfft.f[j] = plan3D->f[j];
+  }
+
+  if (plan3D->flags & NFSOFT_USE_NDFT)
+  {
+    nfft_adjoint_direct(&(plan3D->p_nfft));
+  }
+  else
+  {
+    nfft_adjoint(&(plan3D->p_nfft));
+  }
+
+  //nfft_vpr_complex(plan3D->nfft_plan.f_hat,plan3D->nfft_plan.N_total,"all results");
+
+  glo1 = 0;
+
+  for (k = -N; k <= N; k++)
+  {
+    for (m = -N; m <= N; m++)
+    {
+
+      max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));
+
+      for (i = 1; i < 2* plan3D ->N_total + 3; i++)
+      {
+        plan3D->cheby[i - 1] = plan3D->p_nfft.f_hat[NFSOFT_INDEX(k, m, i - N
+            - 1, N) - 1];
+      }
+
+      //fprintf(stdout,"k=%d,m=%d \n",k,m);
+      //nfft_vpr_complex(plan3D->cheby,2*plan3D->N_total+2,"euler");
+      e2c(plan3D, ABS((k + m) % 2));
+
+      //nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"chebys");
+      SO3_fpt_transposed(plan3D->wig_coeffs, plan3D->internal_fpt_set, N, k, m,
+          plan3D->flags);
+      //nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"wigners");
+      //  SO3_fpt_transposed(plan3D->wig_coeffs,N,k,m,plan3D->flags,plan3D->fpt_kappa);
+
+
+      for (j = max; j <= N; j++)
+      {
+        if ((plan3D->flags & NFSOFT_REPRESENT))
+        {
+          if ((k < 0) && (k % 2))
+          {
+            plan3D->wig_coeffs[j] = -plan3D->wig_coeffs[j];
+          }
+          if ((m < 0) && (m % 2))
+            plan3D->wig_coeffs[j] = -plan3D->wig_coeffs[j];
+
+          if ((m + k) % 2)
+            plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+
+        }
+
+        plan3D->f_hat[glo1] = plan3D->wig_coeffs[j];
+
+        if ((plan3D->flags & NFSOFT_NORMALIZED))
+        {
+          plan3D->f_hat[glo1] = plan3D->f_hat[glo1] * (1 / (2. * PI)) * SQRT(
+              0.5 * (2. * (j) + 1.));
+        }
+
+        glo1++;
+      }
+
+    }
+  }
+}
+
+void nfsoft_finalize(nfsoft_plan *plan)
+{
+  /* Finalise the nfft plan. */
+  nfft_finalize(&plan->p_nfft);
+  free(plan->wig_coeffs);
+  free(plan->cheby);
+  free(plan->aux);
+
+  fpt_finalize(plan->internal_fpt_set);
+  plan->internal_fpt_set = NULL;
+
+  if (plan->flags & NFSOFT_MALLOC_F_HAT)
+  {
+    //fprintf(stderr,"deallocating f_hat\n");
+    free(plan->f_hat);
+  }
+
+  /* De-allocate memory for samples, if neccesary. */
+  if (plan->flags & NFSOFT_MALLOC_F)
+  {
+    //fprintf(stderr,"deallocating f\n");
+    free(plan->f);
+  }
+
+  /* De-allocate memory for nodes, if neccesary. */
+  if (plan->flags & NFSOFT_MALLOC_X)
+  {
+    //fprintf(stderr,"deallocating x\n");
+    free(plan->x);
+  }
+}
+
+int posN(int n, int m, int B)
+{
+  int pos;
+
+  if (n > -B)
+    pos = posN(n - 1, m, B) + B + 1 - MAX(ABS(m), ABS(n - 1));
+  else
+    pos = 0;
+  //(n > -B? pos=posN(n-1,m,B)+B+1-MAX(ABS(m),ABS(n-1)): pos= 0)
+  return pos;
+}
+
diff --git a/kernel/nfsoft/wigner.c b/kernel/nfsoft/wigner.c
new file mode 100755
index 0000000..9ac2a7a
--- /dev/null
+++ b/kernel/nfsoft/wigner.c
@@ -0,0 +1,382 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: wigner.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <math.h>
+#include <stdio.h>
+#include "infft.h"
+#include "wigner.h"
+#include "nfft3util.h"
+
+double SO3_alpha(const int m1, const int m2, const int j)
+{
+  const int M = MAX(ABS(m1),ABS(m2)), mini = MIN(ABS(m1),ABS(m2));
+
+  if (j < 0)
+    return K(0.0);
+  else if (j == 0)
+  {
+    if (m1 == 0 && m2 == 0)
+      return K(1.0);
+    if (m1 == m2)
+      return K(0.5);
+    else
+      return IF((m1+m2)%2,K(0.0),K(-0.5));
+  }
+  else if (j < M - mini)
+    return IF(j%2,K(0.5),K(-0.5));
+  else if (j < M)
+    return K(0.5) * SIGNF((R)m1)*SIGNF((R)m2);
+  else
+    return
+      SQRT(((R)(j+1))/((R)(j+1-m1)))
+      * SQRT(((R)(2*j+1))/((R)(j+1+m1)))
+      * SQRT(((R)(j+1))/((R)(j+1-m2)))
+      * SQRT(((R)(2*j+1))/((R)(j+1+m2)));
+}
+
+double SO3_beta(const int m1, const int m2, const int j)
+{
+  if (j < 0)
+    return K(0.0);
+  else if (j < MAX(ABS(m1),ABS(m2)))
+    return K(0.5);
+  else if (m1 == 0 || m2 == 0)
+    return K(0.0);
+  else
+  {
+    const R m1a = FABS((R)m1), m2a = FABS((R)m2);
+    return -COPYSIGN(
+      ((SQRT(m1a)*SQRT(m2a))/((R)j))
+      * SQRT(m1a/((R)(j+1-m1)))
+      * SQRT(((R)(2*j+1))/((R)(j+1+m1)))
+      * SQRT(m2a/((R)(j+1-m2)))
+      * SQRT(((R)(2*j+1))/((R)(j+1+m2))),
+      SIGNF((R)m1)*SIGNF((R)m2));
+  }
+}
+
+double SO3_gamma(const int m1, const int m2, const int j)
+{
+  if (MAX(ABS(m1),ABS(m2)) < j)
+    return -(((R)(j+1))/((R)j)) * SQRT((((R)(j-m1))/((R)(j+1-m1)))
+        *(((R)(j+m1))/((R)(j+1+m1)))*(((R)(j-m2))/((R)(j+1-m2)))
+        *(((R)(j+m2))/((R)(j+1+m2))));
+  else if (j == -1)
+    return IF(m1 > m2 || !((m1 + m2) % 2), K(1.0), K(-1.0))
+      * nfft_lambda2((R)ABS(m2 - m1),(R)ABS(m2 + m1));
+  else
+    return K(0.0);
+}
+
+/*compute the coefficients for all degrees*/
+
+inline void SO3_alpha_row(double *alpha, int N, int k, int m)
+{
+  int j;
+  double *alpha_act = alpha;
+  for (j = -1; j <= N; j++)
+    *alpha_act++ = SO3_alpha(k, m, j);
+}
+
+inline void SO3_beta_row(double *beta, int N, int k, int m)
+{
+  int j;
+  double *beta_act = beta;
+  for (j = -1; j <= N; j++)
+    *beta_act++ = SO3_beta(k, m, j);
+}
+
+inline void SO3_gamma_row(double *gamma, int N, int k, int m)
+{
+  int j;
+  double *gamma_act = gamma;
+  for (j = -1; j <= N; j++)
+    *gamma_act++ = SO3_gamma(k, m, j);
+}
+
+/*compute for all degrees l and orders k*/
+
+inline void SO3_alpha_matrix(double *alpha, int N, int m)
+{
+  int i, j;
+  double *alpha_act = alpha;
+  for (i = -N; i <= N; i++)
+  {
+    for (j = -1; j <= N; j++)
+    {
+      *alpha_act = SO3_alpha(i, m, j);
+      alpha_act++;
+    }
+  }
+}
+
+inline void SO3_beta_matrix(double *alpha, int N, int m)
+{
+  int i, j;
+  double *alpha_act = alpha;
+  for (i = -N; i <= N; i++)
+  {
+    for (j = -1; j <= N; j++)
+    {
+      *alpha_act = SO3_beta(i, m, j);
+      alpha_act++;
+    }
+  }
+}
+
+inline void SO3_gamma_matrix(double *alpha, int N, int m)
+{
+  int i, j;
+  double *alpha_act = alpha;
+  for (i = -N; i <= N; i++)
+  {
+    for (j = -1; j <= N; j++)
+    {
+      *alpha_act = SO3_gamma(i, m, j);
+      alpha_act++;
+    }
+  }
+}
+
+/*compute all 3termrecurrence coeffs*/
+
+inline void SO3_alpha_all(double *alpha, int N)
+{
+  int q;
+  int i, j, m;
+  double *alpha_act = alpha;
+  q = 0;
+  for (m = -N; m <= N; m++)
+  {
+    for (i = -N; i <= N; i++)
+    {
+      for (j = -1; j <= N; j++)
+      {
+        *alpha_act = SO3_alpha(i, m, j);
+        fprintf(stdout, "alpha_all_%d^[%d,%d]=%f\n", j, i, m,
+            SO3_alpha(i, m, j));
+        alpha_act++;
+        q = q + 1;
+
+      }
+    }
+  }
+}
+
+inline void SO3_beta_all(double *alpha, int N)
+{
+  int i, j, m;
+  double *alpha_act = alpha;
+  for (m = -N; m <= N; m++)
+  {
+    for (i = -N; i <= N; i++)
+    {
+      for (j = -1; j <= N; j++)
+      {
+        *alpha_act = SO3_beta(i, m, j);
+        alpha_act++;
+      }
+    }
+  }
+}
+
+inline void SO3_gamma_all(double *alpha, int N)
+{
+  int i, j, m;
+  double *alpha_act = alpha;
+  for (m = -N; m <= N; m++)
+  {
+    for (i = -N; i <= N; i++)
+    {
+      for (j = -1; j <= N; j++)
+      {
+        *alpha_act = SO3_gamma(i, m, j);
+        alpha_act++;
+      }
+    }
+  }
+}
+
+inline void eval_wigner(double *x, double *y, int size, int k, double *alpha,
+    double *beta, double *gamma)
+{
+  /* Evaluate the wigner function d_{k,nleg} (l,x) for the vector
+   * of knots  x[0], ..., x[size-1] by the Clenshaw algorithm
+   */
+  int i, j;
+  double a, b, x_val_act, a_old;
+  double *x_act, *y_act;
+  double *alpha_act, *beta_act, *gamma_act;
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+      *y_act = 1.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gamma[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));
+        b = a_old * (*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);
+    }
+    x_act++;
+    y_act++;
+  }
+}
+
+inline int eval_wigner_thresh(double *x, double *y, int size, int k,
+    double *alpha, double *beta, double *gamma, double threshold)
+{
+
+  int i, j;
+  double a, b, x_val_act, a_old;
+  double *x_act, *y_act;
+  double *alpha_act, *beta_act, *gamma_act;
+
+  /* Traverse all nodes. */
+  x_act = x;
+  y_act = y;
+  for (i = 0; i < size; i++)
+  {
+    a = 1.0;
+    b = 0.0;
+    x_val_act = *x_act;
+
+    if (k == 0)
+    {
+      *y_act = 1.0;
+    }
+    else
+    {
+      alpha_act = &(alpha[k]);
+      beta_act = &(beta[k]);
+      gamma_act = &(gamma[k]);
+      for (j = k; j > 1; j--)
+      {
+        a_old = a;
+        a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));
+        b = a_old * (*gamma_act);
+        alpha_act--;
+        beta_act--;
+        gamma_act--;
+      }
+      *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);
+      if (fabs(*y_act) > threshold)
+      {
+        return 1;
+      }
+    }
+    x_act++;
+    y_act++;
+  }
+  return 0;
+}
+
+/************************************************************************/
+/* L2 normed wigner little d, WHERE THE DEGREE OF THE FUNCTION IS EQUAL
+ TO ONE OF ITS ORDERS. This is the function to use when starting the
+ three-term recurrence at orders (m1,m2)
+
+ Note that, by definition, since I am starting the recurrence with this
+ function, that the degree j of the function is equal to max(abs(m1), abs(m2) ).
+ */
+
+double wigner_start(int m1, int m2, double theta)
+{
+
+  int i, l, delta;
+  int cosPower, sinPower;
+  int absM1, absM2;
+  double dl, dm1, dm2, normFactor, sinSign;
+  double dCP, dSP;
+  double max;
+  double min;
+
+  max = (double) (ABS(m1) > ABS(m2) ? ABS(m1) : ABS(m2));
+  min = (double) (ABS(m1) < ABS(m2) ? ABS(m1) : ABS(m2));
+
+  l = max;
+  delta = l - min;
+
+  absM1 = ABS(m1);
+  absM2 = ABS(m2);
+  dl = (double) l;
+  dm1 = (double) m1;
+  dm2 = (double) m2;
+  sinSign = 1.;
+  normFactor = 1.;
+
+  for (i = 0; i < delta; i++)
+    normFactor *= SQRT((2. * dl - ((double) i)) / (((double) i) + 1.));
+
+  /* need to adjust to make the L2-norm equal to 1 */
+
+  normFactor *= SQRT((2. * dl + 1.) / 2.);
+
+  if (l == absM1)
+    if (m1 >= 0)
+    {
+      cosPower = l + m2;
+      sinPower = l - m2;
+      if ((l - m2) % 2)
+        sinSign = -1.;
+    }
+    else
+    {
+      cosPower = l - m2;
+      sinPower = l + m2;
+    }
+  else if (m2 >= 0)
+  {
+    cosPower = l + m1;
+    sinPower = l - m1;
+  }
+  else
+  {
+    cosPower = l - m1;
+    sinPower = l + m1;
+    if ((l + m1) % 2)
+      sinSign = -1.;
+  }
+
+  dCP = (double) cosPower;
+  dSP = (double) sinPower;
+
+  return normFactor * sinSign * POW(sin(theta / 2), dSP) * POW(cos(theta / 2),
+      dCP);
+}
diff --git a/kernel/nfsoft/wigner.h b/kernel/nfsoft/wigner.h
new file mode 100755
index 0000000..15d34f8
--- /dev/null
+++ b/kernel/nfsoft/wigner.h
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: wigner.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \file wigner.h
+ *
+ * \brief Header file for functions related to Wigner-d/D functions
+ *
+ * \author Antje Vollrath
+ */
+#ifndef WIGNER_H
+#define WIGNER_H
+
+/**
+ * Computes three-term recurrence coefficients \f$\alpha_l^{km}\f$ of
+ * Wigner-d functions
+ *
+ * \arg k The order \f$k\f$
+ * \arg m The order  \f$m\f$
+ * \arg l The degree \f$l\f$
+ */
+double SO3_alpha(int k, int m, int l);
+/**
+ * Computes three-term recurrence coefficients \f$\beta_l^{km}\f$ of
+ * Wigner-d functions
+ *
+ * \arg k The order \f$k\f$
+ * \arg m The order  \f$m\f$
+ * \arg l The degree \f$l\f$
+ */
+double SO3_beta(int k, int m, int l);
+/**
+ * Computes three-term recurrence coefficients \f$\gamma_l^{km}\f$ of
+ * Wigner-d functions
+ *
+ * \arg k The order \f$k\f$
+ * \arg m The order  \f$m\f$
+ * \arg l The degree \f$l\f$
+ */
+double SO3_gamma(int k, int m, int l);
+/**
+ * Compute three-term-recurrence coefficients \f$ \alpha_{l}^{km}\f$ of
+ * Wigner-d functions for all degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg m the first order
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_alpha_row(double *alpha, int N, int m, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \beta_{l}^{km}\f$ of
+ * Wigner-d functions for all degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg m the first order
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_beta_row(double *beta, int N, int m, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \gamma_{l}^{km}\f$ of
+ * Wigner-d functions for all degrees \f$ l= 0,\ldots,N \f$
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg m the first order
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_gamma_row(double *gamma, int N, int m, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \alpha_{l}^{km}\f$ of
+ * Wigner-d functions for all order \f$ m = -N,\ldots,N \f$ and
+ * degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_alpha_matrix(double *alpha, int N, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \beta_{l}^{km}\f$ of
+ * Wigner-d functions for all order \f$ m = -N,\ldots,N \f$ and
+ * degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_beta_matrix(double *beta, int N, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \gamma_{l}^{km}\f$ of
+ * Wigner-d functions for all order \f$ m = -N,\ldots,N \f$ and
+ * degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_gamma_matrix(double *gamma, int N, int n);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\alpha_{l}^{km}\f$ of
+ * Wigner-d functions for all \f$ k,m = -N,\ldots,N \f$ and \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ *
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_alpha_all(double *alpha, int N);
+/**
+ * Compute three-term-recurrence coefficients \f$\beta_{l}^{km}\f$ of
+ * Wigner-d functions for all \f$ k,m = -N,\ldots,N \f$ and \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ *
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_beta_all(double *beta, int N);
+/**
+ * Compute three-term-recurrence coefficients \f$\gamma_{l}^{km}\f$ of
+ * Wigner-d functions for all \f$ k,m = -N,\ldots,N \f$ and \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ *
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_gamma_all(double *gamma, int N);
+
+/**
+ * Evaluates Wigner-d functions \f$d_l^{km}(x,c)\f$ using the
+ * Clenshaw-algorithm.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg l The degree \f$l\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ *   \f$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ *   \f$\beta_c^{km},\ldots,\beta_{c+l}^{km}\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ *   \f$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}\f$
+ */
+void eval_wigner(double *x, double *y, int size, int l, double *alpha,
+    double *beta, double *gamma);
+/**
+ * Evaluates Wigner-d functions \f$d_l^{km}(x,c)\f$ using the
+ * Clenshaw-algorithm if it not exceeds a given threshold.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg l The degree \f$l\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ *   \f$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ *   \f$\beta_c^{km},\ldots,\beta_{c+l}^{km}\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ *   \f$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}\f$
+ * \arg threshold The threshold
+ */
+int eval_wigner_thresh(double *x, double *y, int size, int l, double *alpha,
+    double *beta, double *gamma, double threshold);
+
+/**
+ * A method used for debugging, gives the values to start the "old" three-term recurrence
+ * generates \f$ d^{km}_l(cos(theta)) \f$ WHERE THE DEGREE l OF THE FUNCTION IS EQUAL
+ * TO THE MAXIMUM OF ITS ORDERS
+ *
+ * \arg theta the argument of
+ * \arg n1 the first order
+ * \arg n2 the second order
+ *
+ * \return the function value \f$ d^{km}_l(cos(theta)) \f$
+ *
+ **/
+double wigner_start(int n1, int n2, double theta);
+
+#endif
diff --git a/kernel/nfst/Makefile.am b/kernel/nfst/Makefile.am
new file mode 100644
index 0000000..0f79902
--- /dev/null
+++ b/kernel/nfst/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnfst.la
+
+libnfst_la_SOURCES = nfst.c 
+
diff --git a/kernel/nfst/Makefile.in b/kernel/nfst/Makefile.in
new file mode 100644
index 0000000..3a28889
--- /dev/null
+++ b/kernel/nfst/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfst
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfst_la_LIBADD =
+am_libnfst_la_OBJECTS = nfst.lo
+libnfst_la_OBJECTS = $(am_libnfst_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfst_la_SOURCES)
+DIST_SOURCES = $(libnfst_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnfst.la
+libnfst_la_SOURCES = nfst.c 
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfst/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nfst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfst.la: $(libnfst_la_OBJECTS) $(libnfst_la_DEPENDENCIES) $(EXTRA_libnfst_la_DEPENDENCIES) 
+	$(LINK)  $(libnfst_la_OBJECTS) $(libnfst_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfst.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfst/nfst.c b/kernel/nfst/nfst.c
new file mode 100644
index 0000000..664257b
--- /dev/null
+++ b/kernel/nfst/nfst.c
@@ -0,0 +1,1078 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfst.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * Library.
+ * Includes simple and fast computation of the NFST (direct problem)
+ * author: S. Klatt 2004-2006
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ *  handy shortcuts
+ **/
+#define NFST_DEFAULT_FLAGS   PRE_PHI_HUT|\
+                             PRE_PSI|\
+                             MALLOC_X|\
+                             MALLOC_F_HAT|\
+                             MALLOC_F|\
+                             FFTW_INIT|\
+                             FFT_OUT_OF_PLACE
+
+#define FFTW_DEFAULT_FLAGS   FFTW_ESTIMATE|\
+                             FFTW_DESTROY_INPUT
+
+#define NFST_SUMMANDS ( 2 * ths->m + 2)
+#define NODE(p,r) ( ths->x[(p) * ths->d + (r)])
+
+#define MACRO_ndst_init_result_trafo      \
+  memset( f, 0, ths->M_total * sizeof( double));
+#define MACRO_ndst_init_result_adjoint \
+  memset( f_hat, 0, ths->N_total * sizeof( double));
+
+
+#define MACRO_nfst_D_init_result_A        \
+  memset(g_hat, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+#define MACRO_nfst_D_init_result_T        \
+  memset(f_hat, 0, ths->N_total * sizeof( double));
+
+#define MACRO_nfst_B_init_result_A        \
+  memset(f, 0,     ths->M_total * sizeof( double));
+#define MACRO_nfst_B_init_result_T        \
+  memset(g, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+
+
+#define NFST_PRE_WINFUN( d)  ths->N[d] = 2 * ths->N[d];         \
+                             ths->n[d] = nfst_fftw_2N( ths->n[d]);
+
+#define NFST_POST_WINFUN( d) ths->N[d] = (LRINT(0.5 * ths->N[d]));   \
+                             ths->n[d] = nfst_fftw_2N_rev( ths->n[d]);
+
+
+#define NFST_WINDOW_HELP_INIT  WINDOW_HELP_INIT
+
+
+double nfst_phi_hut( nfst_plan *ths, int k, int d)
+{
+  NFST_PRE_WINFUN( d);
+  double phi_hut_tmp = PHI_HUT( k, d);
+  NFST_POST_WINFUN( d);
+
+  return phi_hut_tmp;
+}
+
+double nfst_phi( nfst_plan *ths, double x, int d)
+{
+  NFST_PRE_WINFUN( d);
+  double phi_tmp = PHI( x, d);
+  NFST_POST_WINFUN( d);
+
+  return phi_tmp;
+}
+
+int nfst_fftw_2N( int n)
+{
+  return 2 * ( n + 1);
+}
+
+int nfst_fftw_2N_rev( int n)
+{
+  div_t n_div;
+
+  n_div = div(n, 2);
+  return n_div.quot - 1;
+}
+
+#define MACRO_with_sin_vec     sin_vec[t][ka[t]]
+#define MACRO_without_sin_vec  sin( 2.0 * PI * (ka[t]+1) * NODE(j,t))
+
+
+#define MACRO_with_PRE_PHI_HUT     ths->c_phi_inv[t][kg[t]];
+#define MACRO_compute_PHI_HUT_INV  (1.0 / (nfst_phi_hut( ths, kg[t]+1, t)))
+
+#define MACRO_with_PRE_PSI     ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]];
+#define MACRO_compute_PSI      \
+  nfst_phi( ths, NODE(j,t) - (( double)(lc[t] + lb[t])) / nfst_fftw_2N( ths->n[t]), t)
+
+
+
+/** direct computation of non equispaced sine transforms
+ *  nfst_trafo_direct,  nfst_adjoint_direct_
+ *  require O(M N^d) arithemtical operations
+ *
+ * direct computation of the nfst_trafo_direct, formula (1.1)
+ * nfst_trafo_direct:
+ * for j=0,...,M-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * sin(2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint_direct, formula (1.2)
+ * nfst_adjoint_direct:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M-1} f[j] * sin(2 (pi) k x[j])
+ */
+
+#define MACRO_ndst_malloc__sin_vec                                              \
+                                                                                \
+  double **sin_vec;                                                             \
+  sin_vec = (double**)nfft_malloc( ths->d * sizeof( double*));                       \
+  for( t = 0; t < ths->d; t++)                                                  \
+    sin_vec[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double));          \
+
+
+
+
+#define MACRO_ndst_free__sin_vec                                                \
+{                                                                               \
+  /* free allocated memory */                                                   \
+  for( t = 0; t < ths->d; t++)                                                  \
+  nfft_free( sin_vec[t]);                                                          \
+  nfft_free( sin_vec);                                                               \
+}
+
+
+
+#define MACRO_ndst_init__sin_vec                                                \
+{                                                                               \
+  for( t = 0; t < ths->d; t++)                                                  \
+  {                                                                             \
+    cos_x[t] = cos( 2.0 * PI * NODE(j,t));                                      \
+    sin_vec[t][0] = sin( 2.0 * PI * NODE(j,t));                                 \
+    sin_vec[t][1] = sin( 4.0 * PI * NODE(j,t));                                 \
+    for( k = 2; k < ths->N[t] - 1; k++)                                         \
+      sin_vec[t][k] = 2.0 * cos_x[t] * sin_vec[t][k-1]                          \
+                      - sin_vec[t][k-2];                                        \
+  }                                                                             \
+}
+
+
+#define MACRO_ndst_init__k__sin_k( which_one)                                   \
+{                                                                               \
+  sin_k[0] = 1.0;                                                               \
+  for( t = 0; t < ths->d; t++)                                                  \
+    ka[t] = 0;                                                                  \
+                                                                                \
+  for( t = 0; t < ths->d; t++)                                                  \
+  {                                                                             \
+    sin_k[t+1] = sin_k[t] * MACRO_ ##which_one;                                 \
+  }                                                                             \
+}
+
+
+#define MACRO_ndst_count__k__sin_k( which_one)                                  \
+{                                                                               \
+  ka[ths->d-1]++;                                                               \
+  i = ths->d - 1;                                                               \
+  while( ( ka[i] == ths->N[i] - 1) && ( i > 0))                                 \
+  {                                                                             \
+    ka[i - 1]++;                                                                \
+    ka[i] = 0;                                                                  \
+                                                                                \
+    i--;                                                                        \
+  }                                                                             \
+  for( t = i; t < ths->d; t++)                                                  \
+    sin_k[t+1] = sin_k[t] * MACRO_ ##which_one;                                 \
+}
+
+
+#define MACRO_ndst_compute__trafo                                               \
+{                                                                               \
+  f[j] += f_hat[k] * sin_k[ths->d];                                             \
+}
+
+#define MACRO_ndst_compute__adjoint                                             \
+{                                                                               \
+  f_hat[k] += f[j] * sin_k[ths->d];                                             \
+}
+
+
+/* slow (trafo) transform */
+#define MACRO_ndst( which_one)                                                  \
+  void nfst_ ## which_one ## _direct ( nfst_plan *ths)                                     \
+  {                                                                             \
+    int j, k, t, i;                                                             \
+    int ka[ths->d];                                                             \
+    double sin_k[ths->d+1];                                                     \
+    double cos_x[ths->d];                                                       \
+                                                                                \
+    double *f     = ths->f;                                                     \
+    double *f_hat = ths->f_hat;                                                 \
+                                                                                \
+    MACRO_ndst_init_result_ ## which_one;                                       \
+                                                                                \
+    if( ths->d == 1)                                                            \
+      for( j = 0; j < ths->M_total; j++)                                        \
+        for( k = 0; k < ths->N_total; k++)                                      \
+        {                                                                       \
+          sin_k[ths->d] = sin( 2.0 * PI * (k+1) * NODE(j,0));                   \
+          MACRO_ndst_compute__ ## which_one;                                    \
+        }                                                                       \
+    else                                                                        \
+      if( 1 == 0) /*FIXME: remove slow slow ... */                              \
+        /* slow ndst */                                                         \
+        for( j = 0; j < ths->M_total; j++)                                      \
+        {                                                                       \
+          MACRO_ndst_init__k__sin_k(without_sin_vec);                           \
+                                                                                \
+          for( k = 0; k < ths->N_total; k++)                                    \
+          {                                                                     \
+            MACRO_ndst_compute__ ## which_one;                                  \
+                                                                                \
+            MACRO_ndst_count__k__sin_k(without_sin_vec);                        \
+          }                                                                     \
+        }                                                                       \
+      else                                                                      \
+      {                                                                         \
+        /* fast nfst_trafo_direct */                                                   \
+        MACRO_ndst_malloc__sin_vec;                                             \
+                                                                                \
+        for( j = 0; j < ths->M_total; j++)                                      \
+        {                                                                       \
+          MACRO_ndst_init__sin_vec;                                             \
+                                                                                \
+          MACRO_ndst_init__k__sin_k(with_sin_vec);                              \
+                                                                                \
+          for( k = 0; k < ths->N_total; k++)                                    \
+          {                                                                     \
+            MACRO_ndst_compute__ ## which_one;                                  \
+                                                                                \
+            MACRO_ndst_count__k__sin_k(with_sin_vec);                           \
+          }                                                                     \
+        }                                                                       \
+        MACRO_ndst_free__sin_vec;                                               \
+      }                                                                         \
+  } /* ndst_{trafo, adjoint} */
+
+
+MACRO_ndst(trafo)
+MACRO_ndst(adjoint)
+
+
+
+
+/** fast computation of non equispaced sine transforms
+ *  require O(N^d log(N) + M) arithemtical operations
+ *
+ * fast computation of the nfst_trafo, formula (1.1)
+ * nfst_trafo:
+ * for j=0,...,M-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * sin(2 (pi) k x[j])
+ *
+ * direct computation of the nfst_adjoint, formula (1.2)
+ * nfst_adjoint:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M-1} f[j] * sin(2 (pi) k x[j])
+ */
+
+#define MACRO_nfst__lower_boundary( j,act_dim)                                  \
+{                                                                               \
+  lb[(act_dim)] =                                                               \
+    (LRINT(NODE((j),(act_dim)) * nfst_fftw_2N( ths->n[(act_dim)]))) - ths->m;   \
+}
+
+#define MACRO_nfst_D_compute_A                                                  \
+{                                                                               \
+  g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d];                   \
+}
+
+#define MACRO_nfst_D_compute_T                                                  \
+{                                                                               \
+  f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d];                   \
+}
+
+
+#define MACRO_init__kg                                                          \
+{                                                                               \
+  for( t = 0; t < ths->d; t++)                                                  \
+    kg[t] = 0;                                                                  \
+                                                                                \
+  i = 0;                                                                        \
+}
+
+
+#define MACRO_count__kg                                                         \
+{                                                                               \
+  kg[ths->d - 1]++;                                                             \
+  i = ths->d - 1;                                                               \
+  while( ( kg[i] == ths->N[i] - 1) && ( i > 0))                                 \
+  {                                                                             \
+    kg[i - 1]++;                                                                \
+    kg[i] = 0;                                                                  \
+                                                                                \
+    i--;                                                                        \
+  }                                                                             \
+}
+
+
+#define MACRO_update__c_phi_inv_k__lg_plain( which_one, which_phi)              \
+{                                                                               \
+  for( t = i; t < ths->d; t++) {                                                \
+    MACRO__c_phi_inv_k( which_phi);                                             \
+    kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t];                            \
+  }                                                                             \
+}
+
+
+#define MACRO__c_phi_inv_k( which_phi)                                          \
+{                                                                               \
+  c_phi_inv_k[t+1] = 0.5 * c_phi_inv_k[t] * MACRO_ ## which_phi;                \
+}
+
+
+#define MACRO_nfst_D(which_one)                                                 \
+static inline void nfst_D_ ## which_one (nfst_plan *ths)                               \
+{                                                                               \
+  int k_L;                              /**< plain index                */      \
+                                                                                \
+  int i, t;                                                                     \
+  int kg[ths->d];                       /**< multi index in g_hat,c_phi */      \
+  double c_phi_inv_k[ths->d+1];         /**< postfix product of PHI_HUT */      \
+  int kg_plain[ths->d+1];               /**< postfix plain index        */      \
+                                                                                \
+  double *g_hat, *f_hat;                /**< local copy                 */      \
+                                                                                \
+  g_hat = ths->g_hat;                                                           \
+  f_hat = ths->f_hat;                                                           \
+                                                                                \
+  MACRO_nfst_D_init_result_ ## which_one                                        \
+                                                                                \
+  c_phi_inv_k[0] = 1;                                                           \
+  kg_plain[0]    = 0;                                                           \
+                                                                                \
+  MACRO_init__kg;                                                               \
+                                                                                \
+  if( ths->nfst_flags & PRE_PHI_HUT)                                            \
+                                                                                \
+    for( k_L = 0; k_L < ths->N_total; k_L++)                                    \
+    {                                                                           \
+      MACRO_update__c_phi_inv_k__lg_plain( which_one, with_PRE_PHI_HUT);        \
+                                                                                \
+      MACRO_nfst_D_compute_ ## which_one;                                       \
+                                                                                \
+      MACRO_count__kg;                                                          \
+                                                                                \
+    } /* for(k_L) */                                                            \
+                                                                                \
+  else                                                                          \
+                                                                                \
+    for( k_L = 0; k_L < ths->N_total; k_L++)                                    \
+    {                                                                           \
+      MACRO_update__c_phi_inv_k__lg_plain( which_one, compute_PHI_HUT_INV);     \
+                                                                                \
+      MACRO_nfst_D_compute_ ## which_one;                                       \
+                                                                                \
+      MACRO_count__kg                                                           \
+                                                                                \
+    } /* for(k_L) */                                                            \
+} /* nfst_D */
+
+MACRO_nfst_D(A)
+MACRO_nfst_D(T)
+
+
+
+
+
+
+
+/** sub routines for the fast transforms
+ *  matrix vector multiplication with \f$B, B^{\rm T}\f$
+ */
+#define MACRO_nfst_B_PRE_FULL_PSI_compute_A                                     \
+{                                                                               \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                              \
+}
+
+#define MACRO_nfst_B_PRE_FULL_PSI_compute_T                                     \
+{                                                                               \
+  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                              \
+}
+
+
+
+#define MACRO_nfst_B_compute_A                                                  \
+{                                                                               \
+  (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]];                             \
+}
+
+#define MACRO_nfst_B_compute_T                                                  \
+{                                                                               \
+  g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj);                             \
+}
+
+
+
+#define MACRO_compute_lg_offset__count_lg( i0)                                  \
+{                                                                               \
+  /* determine index in g-array corresponding to lb[(i0)] */                    \
+  if( lb[(i0)] < 0)                                                             \
+  {                                                                             \
+    lg_offset[(i0)] =                                                           \
+      (lb[(i0)] % nfst_fftw_2N( ths->n[(i0)])) + nfst_fftw_2N( ths->n[(i0)]);   \
+  }                                                                             \
+  else                                                                          \
+  {                                                                             \
+    lg_offset[(i0)] = lb[(i0)] % nfst_fftw_2N( ths->n[(i0)]);                   \
+  }                                                                             \
+                                                                                \
+  if( lg_offset[(i0)] > ths->n[(i0)]+1)                                         \
+      lg_offset[(i0)] = -( nfst_fftw_2N( ths->n[(i0)]) - lg_offset[(i0)]);      \
+}
+
+
+
+#define MACRO_set__lg__to__lg_offset                                            \
+{                                                                               \
+  if( lg_offset[i] <= 0)                                                        \
+  {                                                                             \
+    lg[i] = -lg_offset[i];                                                      \
+    count_lg[i] = -1;                                                           \
+  }                                                                             \
+  else                                                                          \
+  {                                                                             \
+    lg[i] = +lg_offset[i];                                                      \
+    count_lg[i] = +1;                                                           \
+  }                                                                             \
+}
+
+
+
+#define MACRO_count__lg(dim)                                                    \
+{                                                                               \
+  /* turn around when we hit one of the boundaries */                           \
+  if( ((lg[(dim)] == 0) || (lg[(dim)] == (ths->n[(dim)] + 1))) )                \
+    count_lg[(dim)] *= -1;                                                      \
+                                                                                \
+  lg[(dim)] += count_lg[(dim)];                                                 \
+}
+
+
+
+#define MACRO_init_lb_lg_lc_phi_tilde_lg_plain( which_psi)                      \
+{                                                                               \
+  for( i = 0; i < ths->d; i++)                                                  \
+  {                                                                             \
+    MACRO_nfst__lower_boundary( j, i);                                          \
+                                                                                \
+    MACRO_compute_lg_offset__count_lg( i);                                      \
+    MACRO_set__lg__to__lg_offset;                                               \
+                                                                                \
+    /* counter for lg */                                                        \
+    lc[i] = 0;                                                                  \
+  }                                                                             \
+                                                                                \
+  for( t = 0; t < ths->d; t++)                                                  \
+  {                                                                             \
+    if( lg[t] == 0)                                                             \
+    {                                                                           \
+      lg_plain[t+1]  = lg_plain[t] * ths->n[t];                                 \
+      phi_tilde[t+1] = 0.0;                                                     \
+    }                                                                           \
+    else                                                                        \
+      if( lg[t] == ths->n[t]+1)                                                 \
+      {                                                                         \
+        lg_plain[t+1]  = lg_plain[t] * ths->n[t] + ths->n[t]-1;                 \
+        phi_tilde[t+1] = 0.0;                                                   \
+      }                                                                         \
+      else                                                                      \
+      {                                                                         \
+        MACRO__phi_tilde( which_psi);                                           \
+        lg_plain[t+1]  = lg_plain[t] * ths->n[t] + lg[t]-1;                     \
+      }                                                                         \
+  }                                                                             \
+                                                                                \
+  i = 0;                                                                        \
+}
+
+
+
+#define MACRO_count__lg_lc                                                      \
+{                                                                               \
+  MACRO_count__lg( ths->d-1);                                                   \
+                                                                                \
+  lc[ths->d - 1]++;                                                             \
+  i = ths->d - 1;                                                               \
+                                                                                \
+  while( (lc[i] == NFST_SUMMANDS) && (i > 0))                                   \
+  {                                                                             \
+    lc[i - 1]++;                                                                \
+    lc[i] = 0;                                                                  \
+                                                                                \
+    /* ansonsten lg[i-1] verschieben */                                         \
+    MACRO_count__lg( i - 1);                                                    \
+    /* lg[i] = anfangswert */                                                   \
+    MACRO_set__lg__to__lg_offset;                                               \
+                                                                                \
+    i--;                                                                        \
+  }                                                                             \
+}
+
+
+#define MACRO_update__phi_tilde__lg_plain( which_psi)                           \
+{                                                                               \
+  for( t = i; t < ths->d; t++)                                                  \
+  {                                                                             \
+    if( (lg[t] != 0) && (lg[t] != ths->n[t]+1))                                 \
+    {                                                                           \
+      MACRO__phi_tilde( which_psi);                                             \
+      lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1;                        \
+    }                                                                           \
+    else                                                                        \
+      phi_tilde[t+1] = 0.0;                                                     \
+  }                                                                             \
+}
+
+
+
+#define MACRO__phi_tilde( which_psi)                                            \
+{                                                                               \
+  phi_tilde[t+1] = (double)count_lg[t] * phi_tilde[t] * MACRO_ ## which_psi;    \
+}
+
+
+
+
+#define MACRO_nfst_B( which_one)                                                \
+  static inline void nfst_B_ ## which_one ( nfst_plan *ths)                            \
+  { /* MACRO_nfst_B */                                                          \
+    int lb[ths->d];                     /**< multi band with respect to x_j */  \
+    int j, t, i;                        /**< index nodes, help vars         */  \
+    int lprod, l_L, ix;                 /**< index one row of B             */  \
+    int lc[ths->d];                     /**< multi index 0<=lj<u+o+1        */  \
+    int lg[ths->d];                     /**< real index of g in array       */  \
+    int lg_offset[ths->d];              /**< offset in g according to u     */  \
+    int count_lg[ths->d];               /**< count summands (2m+2)          */  \
+    int lg_plain[ths->d+1];             /**< index of g in multi_array      */  \
+    double *f, *g;                      /**< local copy                     */  \
+    double phi_tilde[ths->d+1];         /**< holds values for psi           */  \
+    double *fj;                         /**< pointer to final result        */  \
+                                                                                \
+    f = ths->f; g = ths->g;                                                     \
+                                                                                \
+    MACRO_nfst_B_init_result_ ## which_one                                      \
+                                                                                \
+    /* both flags are set */                                                    \
+    if( (ths->nfst_flags & PRE_PSI) && (ths->nfst_flags & PRE_FULL_PSI))        \
+    {                                                                           \
+      for( ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)           \
+        for( l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++)                   \
+        {                                                                       \
+          MACRO_nfst_B_PRE_FULL_PSI_compute_ ## which_one;                      \
+        }                                                                       \
+    }                                                                           \
+    else                                                                        \
+    {                                                                           \
+      phi_tilde[0] = 1;                                                         \
+      lg_plain[0]  = 0;                                                         \
+                                                                                \
+      for( t = 0, lprod = 1; t < ths->d; t++)                                   \
+        lprod *= NFST_SUMMANDS;                                                 \
+                                                                                \
+      /* PRE_PSI flag is set */                                                 \
+      if( ths->nfst_flags & PRE_PSI)                                            \
+      {                                                                         \
+        for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)                 \
+        {                                                                       \
+          MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);                \
+                                                                                \
+          for( l_L = 0; l_L < lprod; l_L++)                                     \
+          {                                                                     \
+            MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);                   \
+                                                                                \
+            MACRO_nfst_B_compute_ ## which_one;                                 \
+                                                                                \
+            MACRO_count__lg_lc;                                                 \
+                                                                                \
+          } /* for( l_L) */                                                     \
+        } /* for( j) */                                                         \
+      } /* if( PRE_PSI) */                                                      \
+                                                                                \
+      /* no PSI flag is set */                                                  \
+      else                                                                      \
+      {                                                                         \
+        for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)                 \
+        {                                                                       \
+          MACRO_init_lb_lg_lc_phi_tilde_lg_plain( compute_PSI);                 \
+                                                                                \
+          for( l_L = 0; l_L < lprod; l_L++)                                     \
+          {                                                                     \
+            MACRO_update__phi_tilde__lg_plain( compute_PSI);                    \
+                                                                                \
+            MACRO_nfst_B_compute_ ## which_one;                                 \
+                                                                                \
+            MACRO_count__lg_lc;                                                 \
+                                                                                \
+          } /* for(l_L) */                                                      \
+        } /* for(j) */                                                          \
+      } /* else(PRE_PSI) */                                                     \
+    }/* else( PRE_PRE && FULL_PRE_PSI) */                                       \
+} /* nfst_B */
+
+MACRO_nfst_B(A)
+MACRO_nfst_B(T)
+
+
+
+
+
+
+/**
+ * user routines
+ *
+ */
+void nfst_trafo( nfst_plan *ths)
+{
+  /**
+   * use ths->my_fftw_r2r_plan
+   *
+   */
+  ths->g_hat = ths->g1;
+  ths->g     = ths->g2;
+
+
+  /**
+   * form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+   * k \in I_N \f$
+   *
+   */
+  TIC(0)
+  nfst_D_A( ths);
+  TOC(0)
+
+
+  /**
+   * compute by d-variate discrete Fourier transform
+   * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+   * \text{ for } l \in I_n \f$
+   *
+   */
+  TIC(1)
+  fftw_execute( ths->my_fftw_r2r_plan);
+  TOC(1)
+
+
+  /**
+   * set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+   * \text{ for } j=0,\hdots,M-1 \f$
+   *
+   */
+  TIC(2)
+  nfst_B_A( ths);
+  TOC(2)
+
+} /* nfst_trafo */
+
+
+
+
+void nfst_adjoint( nfst_plan *ths)
+{
+  /**
+   * use ths->my_fftw_plan
+   *
+   **/
+  ths->g_hat = ths->g2;
+  ths->g     = ths->g1;
+
+
+  /**
+   * set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+   * \text{ for } l \in I_n,m(x_j) \f$
+   *
+   */
+  TIC(2)
+  nfst_B_T( ths);
+  TOC(2)
+
+
+  /**
+   * compute by d-variate discrete cosine transform
+   * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+   * \text{ for }  k \in I_N\f$
+   *
+   */
+  TIC(1)
+  fftw_execute( ths->my_fftw_r2r_plan);
+  TOC(1)
+
+
+  /**
+   * form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+   * k \in I_N \f$
+   *
+   */
+  TIC(0)
+  nfst_D_T( ths);
+  TOC(0)
+
+} /* nfst_adjoint */
+
+
+
+/**
+ * initialization of direct transform
+ *
+ */
+void nfst_precompute_phi_hut( nfst_plan *ths)
+{
+  int kg[ths->d];                      /**< index over all frequencies       */
+  int t;                               /**< index over all dimensions        */
+
+  ths->c_phi_inv = (double**)nfft_malloc( ths->d * sizeof( double*));
+
+  for( t = 0; t < ths->d; t++)
+  {
+    ths->c_phi_inv[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double));
+
+    for( kg[t] = 0; kg[t] < ths->N[t] - 1; kg[t]++)
+    {
+      ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;
+    }
+  }
+} /* nfst_phi_hut */
+
+
+
+void nfst_precompute_psi( nfst_plan *ths)
+{
+  int t;                                /**< index over all dimensions        */
+  int j;                                /**< index over all nodes             */
+  int lc[ths->d];                       /**< index 0<=lj<u+o+1                */
+  int lb[ths->d];                       /**< depends on x_j                   */
+
+  for (t = 0; t < ths->d; t++)
+  {
+    for(j = 0; j < ths->M_total; j++)
+    {
+      MACRO_nfst__lower_boundary( j, t);
+
+      for( lc[t] = 0; lc[t] < NFST_SUMMANDS; lc[t]++)
+        ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]] = MACRO_compute_PSI;
+
+    } /* for(j) */
+  }  /* for(t) */
+
+  /* full precomputation of psi */
+  if ( ths->nfst_flags & PRE_FULL_PSI)
+    nfst_full_psi( ths, ths->nfst_full_psi_eps);
+
+} /* nfst_precompute_psi */
+
+
+
+/** more memory usage, a bit faster */
+void nfst_full_psi(nfst_plan *ths, double eps)
+{
+  int t, i;                             /**< index over all dimensions        */
+  int j;                                /**< index over all nodes             */
+  int l_L;                              /**< plain index 0<=l_L<lprod         */
+  int lc[ths->d];                       /**< multi index 0<=lj<u+o+1          */
+  int lg_plain[ths->d+1];               /**< postfix plain index              */
+  int count_lg[ths->d];
+  int lg_offset[ths->d];
+  int lg[ths->d];
+  int lprod;                            /**< 'bandwidth' of matrix B          */
+  int lb[ths->d];                       /**< depends on x_j                   */
+
+  double phi_tilde[ths->d+1];
+
+  int *index_g, *index_f;
+  double *new_psi;
+  int ix, ix_old, size_psi;
+
+  phi_tilde[0] = 1.0;
+  lg_plain[0]  =   0;
+
+  if(ths->nfst_flags & PRE_PSI)
+  {
+    size_psi = ths->M_total;
+    index_f  =    (int*)nfft_malloc( ths->M_total  * sizeof( int));
+    index_g  =    (int*)nfft_malloc( size_psi * sizeof( int));
+    new_psi  = (double*)nfft_malloc( size_psi * sizeof( double));
+
+    for( t = 0,lprod = 1; t < ths->d; t++)
+    {
+      lprod *= NFST_SUMMANDS;
+      eps *= PHI( 0, t);
+    }
+
+    for( ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++)
+    {
+      MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);
+
+      for( l_L = 0; l_L < lprod; l_L++)
+      {
+        MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);
+
+        if( fabs(phi_tilde[ths->d]) > eps)
+        {
+          index_g[ix] =  lg_plain[ths->d];
+          new_psi[ix] = phi_tilde[ths->d];
+
+          ix++;
+          if( ix == size_psi)
+          {
+            size_psi += ths->M_total;
+            index_g   =    (int*)realloc( index_g, size_psi * sizeof( int));
+            new_psi   = (double*)realloc( new_psi, size_psi * sizeof( double));
+          }
+        }
+        MACRO_count__lg_lc;
+
+      } /* for(l_L) */
+
+      index_f[j] = ix - ix_old;
+      ix_old     = ix;
+
+    } /* for(j) */
+
+    nfft_free( ths->psi);
+
+    size_psi      = ix;
+    ths->size_psi = size_psi;
+    index_g       = (int*)realloc( index_g, size_psi * sizeof( int));
+    new_psi       = (double*)realloc( new_psi, size_psi * sizeof( double));
+
+    ths->psi         = new_psi;
+    ths->psi_index_g = index_g;
+    ths->psi_index_f = index_f;
+
+  } /* if(PRE_PSI) */
+} /* nfst_full_psi */
+
+
+
+
+void nfst_init_help( nfst_plan *ths)
+{
+  int t;                                /**< index over all dimensions        */
+
+  ths->N_total = nfst_prod_minus_a_int( ths->N, 1, ths->d);
+
+  ths->sigma   = (double*)nfft_malloc( ths->d * sizeof( double));
+
+  for( t = 0; t < ths->d; t++)
+    /* FIXME: n/N or (n+1)/N */
+    ths->sigma[t] = ((double)ths->n[t] + 1) / ths->N[t];
+
+  /* assign r2r transform kinds for each dimension */
+  ths->r2r_kind = (fftw_r2r_kind*) nfft_malloc ( ths->d * sizeof( fftw_r2r_kind));
+  for (t = 0; t < ths->d; t++)
+    ths->r2r_kind[t] = FFTW_RODFT00;
+
+
+  WINDOW_HELP_INIT;
+
+  if(ths->nfst_flags & MALLOC_X)
+    ths->x = (double*)nfft_malloc( ths->d * ths->M_total * sizeof( double));
+
+  if(ths->nfst_flags & MALLOC_F_HAT)
+    ths->f_hat = (double*)nfft_malloc( ths->N_total * sizeof( double));
+
+  if(ths->nfst_flags & MALLOC_F)
+    ths->f = (double*)nfft_malloc( ths->M_total * sizeof( double));
+
+  if(ths->nfst_flags & PRE_PHI_HUT)
+    nfst_precompute_phi_hut( ths);
+
+  /* NO FFTW_MALLOC HERE */
+  if(ths->nfst_flags & PRE_PSI)
+  {
+    ths->psi =
+      (double*)nfft_malloc( ths->M_total * ths->d * NFST_SUMMANDS * sizeof( double));
+
+    /**
+     * set default for full_psi_eps
+     **/
+    ths->nfst_full_psi_eps = pow(10, -10);
+  }
+
+  if(ths->nfst_flags & FFTW_INIT)
+  {
+      ths->g1 =
+        (double*)nfft_malloc( nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+
+      if(ths->nfst_flags & FFT_OUT_OF_PLACE)
+        ths->g2 =
+          (double*)nfft_malloc( nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+      else
+        ths->g2 = ths->g1;
+
+      ths->my_fftw_r2r_plan =
+        fftw_plan_r2r( ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind, ths->fftw_flags);
+  }
+
+  ths->mv_trafo = (void (*) (void* ))nfst_trafo;
+  ths->mv_adjoint = (void (*) (void* ))nfst_adjoint;
+}
+
+void nfst_init( nfst_plan *ths, int d, int *N, int M_total)
+{
+  int t;                                /**< index over all dimensions        */
+
+  ths->d = d;
+
+  ths->N      = (int*)nfft_malloc( ths->d * sizeof( int));
+
+  for(t = 0;t < d; t++)
+    ths->N[t] = N[t];
+
+  ths->n      = (int*)nfft_malloc( ths->d * sizeof( int));
+
+  for( t = 0; t < d; t++)
+    ths->n[t] = 2 * X(next_power_of_2)( ths->N[t]) - 1;
+
+  ths->M_total = M_total;
+
+/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+
+  WINDOW_HELP_ESTIMATE_m;
+*/  
+
+  ths->nfst_flags = NFST_DEFAULT_FLAGS;
+  ths->fftw_flags = FFTW_DEFAULT_FLAGS;
+
+  nfst_init_help( ths);
+}
+
+
+void nfst_init_m( nfst_plan *ths, int d, int *N, int M_total, int m)
+{
+  int t, n[d];
+
+  for( t = 0; t < d; t++)
+    n[t] = nfst_fftw_2N( X(next_power_of_2)( N[t]));
+
+  nfst_init_guru( ths, d, N, M_total, n, m, NFST_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);
+}
+
+
+void nfst_init_guru( nfst_plan *ths, int d, int *N,
+     int M_total, int *n, int m,
+     unsigned nfst_flags, unsigned fftw_flags)
+{
+  int t;             /**< index over all dimensions */
+
+  ths->d = d;
+  ths->M_total = M_total;
+
+  ths->N      = (int*)nfft_malloc( ths->d * sizeof( int));
+
+  for( t = 0; t < d; t++)
+    ths->N[t]      = N[t];
+
+  ths->n      = (int*)nfft_malloc( ths->d * sizeof( int));
+
+  for( t = 0; t < d; t++)
+    ths->n[t]      = n[t];
+
+  ths->m = m;
+
+  ths->nfst_flags = nfst_flags;
+  ths->fftw_flags = fftw_flags;
+
+  nfst_init_help( ths);
+}
+
+
+void nfst_init_1d( nfst_plan *ths, int N0, int M_total)
+{
+  int N[1];
+
+  N[0] = N0;
+  nfst_init( ths, 1, N, M_total);
+}
+
+void nfst_init_2d( nfst_plan *ths, int N0, int N1, int M_total)
+{
+  int N[2];
+
+  N[0] = N0;
+  N[1] = N1;
+  nfst_init( ths, 2, N, M_total);
+}
+
+void nfst_init_3d( nfst_plan *ths, int N0, int N1, int N2, int M_total)
+{
+  int N[3];
+
+  N[0] = N0;
+  N[1] = N1;
+  N[2] = N2;
+  nfst_init( ths, 3, N, M_total);
+}
+
+void nfst_finalize( nfst_plan *ths)
+{
+  int t; /* index over dimensions */
+
+  if( ths->nfst_flags & FFTW_INIT)
+  {
+    fftw_destroy_plan( ths->my_fftw_r2r_plan);
+
+    if( ths->nfst_flags & FFT_OUT_OF_PLACE)
+      nfft_free( ths->g2);
+
+    nfft_free( ths->g1);
+  }
+
+  /* NO FFTW_FREE HERE */
+  if( ths->nfst_flags & PRE_PSI)
+  {
+    if( ths->nfst_flags & PRE_FULL_PSI)
+    {
+      nfft_free( ths->psi_index_g);
+      nfft_free( ths->psi_index_f);
+    }
+
+    nfft_free( ths->psi);
+  }
+
+  if( ths->nfst_flags & PRE_PHI_HUT) {
+    for( t = 0; t < ths->d; t++)
+      nfft_free( ths->c_phi_inv[t]);
+    nfft_free( ths->c_phi_inv);
+  }
+
+  if( ths->nfst_flags & MALLOC_F)
+    nfft_free( ths->f);
+
+  if( ths->nfst_flags & MALLOC_F_HAT)
+    nfft_free( ths->f_hat);
+
+  if( ths->nfst_flags & MALLOC_X)
+    nfft_free( ths->x);
+
+  WINDOW_HELP_FINALIZE;
+
+  nfft_free( ths->N);
+  nfft_free( ths->n);
+  nfft_free( ths->sigma);
+
+  nfft_free(ths->r2r_kind);
+} /* nfst_finalize */
+
diff --git a/kernel/nnfft/Makefile.am b/kernel/nnfft/Makefile.am
new file mode 100644
index 0000000..56d283a
--- /dev/null
+++ b/kernel/nnfft/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include 
+
+noinst_LTLIBRARIES = libnnfft.la
+
+libnnfft_la_SOURCES = nnfft.c 
+
diff --git a/kernel/nnfft/Makefile.in b/kernel/nnfft/Makefile.in
new file mode 100644
index 0000000..9a2e023
--- /dev/null
+++ b/kernel/nnfft/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nnfft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnnfft_la_LIBADD =
+am_libnnfft_la_OBJECTS = nnfft.lo
+libnnfft_la_OBJECTS = $(am_libnnfft_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnnfft_la_SOURCES)
+DIST_SOURCES = $(libnnfft_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include 
+noinst_LTLIBRARIES = libnnfft.la
+libnnfft_la_SOURCES = nnfft.c 
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nnfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nnfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnnfft.la: $(libnnfft_la_OBJECTS) $(libnnfft_la_DEPENDENCIES) $(EXTRA_libnnfft_la_DEPENDENCIES) 
+	$(LINK)  $(libnnfft_la_OBJECTS) $(libnnfft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nnfft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nnfft/nnfft.c b/kernel/nnfft/nnfft.c
new file mode 100644
index 0000000..274307f
--- /dev/null
+++ b/kernel/nnfft/nnfft.c
@@ -0,0 +1,673 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+
+#define MACRO_nndft_init_result_trafo memset(f,0,ths->M_total*sizeof(double _Complex));
+#define MACRO_nndft_init_result_conjugated MACRO_nndft_init_result_trafo
+#define MACRO_nndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(double _Complex));
+#define MACRO_nndft_init_result_transposed MACRO_nndft_init_result_adjoint
+
+#define MACRO_nndft_sign_trafo      (-2.0*PI)
+#define MACRO_nndft_sign_conjugated (+2.0*PI)
+#define MACRO_nndft_sign_adjoint    (+2.0*PI)
+#define MACRO_nndft_sign_transposed (-2.0*PI)
+
+#define MACRO_nndft_compute_trafo (*fj) += (*f_hat_k)*cexp(+ _Complex_I*omega);
+
+#define MACRO_nndft_compute_conjugated MACRO_nndft_compute_trafo
+
+#define MACRO_nndft_compute_adjoint (*f_hat_k) += (*fj)*cexp(+ _Complex_I*omega);
+
+#define MACRO_nndft_compute_transposed MACRO_nndft_compute_adjoint
+
+#define MACRO_nndft(which_one)                                                \
+void nnfft_ ## which_one ## _direct (nnfft_plan *ths)                                    \
+{                                                                             \
+  int j;                               /**< index over all nodes (time)     */\
+  int t;                               /**< index for dimensions            */\
+  int l;                               /**< index over all nodes (fourier)  */\
+  double _Complex *f_hat, *f;          /**< dito                            */\
+  double _Complex *f_hat_k;            /**< actual Fourier coefficient      */\
+  double _Complex *fj;                 /**< actual sample                   */\
+  double omega;                        /**< sign times 2*pi*k*x             */\
+                                                                              \
+  f_hat=ths->f_hat; f=ths->f;                                                 \
+                                                                              \
+  MACRO_nndft_init_result_ ## which_one                                       \
+                                                                              \
+  for(j=0, fj=f; j<ths->M_total; j++, fj++)                                   \
+  {                                                                           \
+    for(l=0, f_hat_k=f_hat; l<ths->N_total; l++, f_hat_k++)                   \
+    {                                                                         \
+      omega=0.0;                                                              \
+      for(t = 0; t<ths->d; t++)                                               \
+        omega+=ths->v[l*ths->d+t] * ths->x[j*ths->d+t] * ths->N[t];           \
+                                                                              \
+      omega*= MACRO_nndft_sign_ ## which_one;                                 \
+                                                                              \
+      MACRO_nndft_compute_ ## which_one                                       \
+                                                                              \
+     } /* for(l) */                                                           \
+   } /* for(j) */                                                             \
+} /* nndft_trafo */                                                           \
+
+MACRO_nndft(trafo)
+MACRO_nndft(adjoint)
+
+/** computes 2m+2 indices for the matrix B
+ */
+static void nnfft_uo(nnfft_plan *ths,int j,int *up,int *op,int act_dim)
+{
+  double c;
+  int u,o;
+
+  c = ths->v[j*ths->d+act_dim] * ths->n[act_dim];
+
+  u = c; o = c;
+  if(c < 0)
+    u = u-1;
+  else
+    o = o+1;
+
+  u = u - (ths->m); o = o + (ths->m);
+
+  up[0]=u; op[0]=o;
+}
+
+/** sub routines for the fast transforms
+ *  matrix vector multiplication with \f$B, B^{\rm T}\f$
+ */
+#define MACRO_nnfft_B_init_result_A memset(f,0,ths->N_total*sizeof(double _Complex));
+#define MACRO_nnfft_B_init_result_T memset(g,0,ths->aN1_total*sizeof(double _Complex));
+
+#define MACRO_nnfft_B_PRE_FULL_PSI_compute_A {                                \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                            \
+}
+
+#define MACRO_nnfft_B_PRE_FULL_PSI_compute_T {                                \
+  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                            \
+}
+
+#define MACRO_nnfft_B_compute_A {                                             \
+  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]];                            \
+}
+
+#define MACRO_nnfft_B_compute_T {                                             \
+  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj);                            \
+}
+
+#define MACRO_with_PRE_LIN_PSI (ths->psi[(ths->K+1)*t2+y_u[t2]]*              \
+                                (y_u[t2]+1-y[t2]) +                           \
+                                ths->psi[(ths->K+1)*t2+y_u[t2]+1]*            \
+                                (y[t2]-y_u[t2]))
+#define MACRO_with_PRE_PSI     ths->psi[(j*ths->d+t2)*(2*ths->m+2)+lj[t2]]
+#define MACRO_without_PRE_PSI  PHI(-ths->v[j*ths->d+t2]+                      \
+                               ((double)l[t2])/ths->N1[t2], t2)
+
+#define MACRO_init_uo_l_lj_t {                                                \
+  for(t = ths->d-1; t>=0; t--)                                                \
+    {                                                                         \
+      nnfft_uo(ths,j,&u[t],&o[t],t);                                          \
+      l[t] = u[t];                                                            \
+      lj[t] = 0;                                                              \
+    } /* for(t) */                                                            \
+  t++;                                                                        \
+}
+
+#define MACRO_update_with_PRE_PSI_LIN {                                       \
+  for(t2=t; t2<ths->d; t2++)                                                  \
+    {                                                                         \
+      y[t2] = fabs(((-ths->N1[t2]*ths->v[j*ths->d+t2]+(double)l[t2])          \
+          * ((double)ths->K))/(ths->m+1));                                    \
+      y_u[t2] = (int)y[t2];                                                   \
+    } /* for(t2) */                                                           \
+}
+
+#define MACRO_update_phi_prod_ll_plain(which_one) {                           \
+  for(t2=t; t2<ths->d; t2++)                                                  \
+    {                                                                         \
+      phi_prod[t2+1]=phi_prod[t2]* MACRO_ ## which_one;                       \
+      ll_plain[t2+1]=ll_plain[t2]*ths->aN1[t2] +                              \
+                     (l[t2]+ths->aN1[t2]*3/2)%ths->aN1[t2];                   \
+      /* 3/2 because of the (not needed) fftshift and to be in [0 aN1[t2]]?!*/\
+    } /* for(t2) */                                                           \
+}
+
+#define MACRO_count_uo_l_lj_t {                                               \
+  for(t = ths->d-1; (t>0)&&(l[t]==o[t]); t--)                                 \
+    {                                                                         \
+      l[t] = u[t];                                                            \
+      lj[t] = 0;                                                              \
+    } /* for(t) */                                                            \
+                                                                              \
+  l[t]++;                                                                     \
+  lj[t]++;                                                                    \
+}
+
+#define MACRO_nnfft_B(which_one)                                              \
+static inline void nnfft_B_ ## which_one (nnfft_plan *ths)                    \
+{                                                                             \
+  int lprod;                           /**< 'regular bandwidth' of matrix B */\
+  int u[ths->d], o[ths->d];            /**< multi band with respect to x_j  */\
+  int t, t2;                           /**< index dimensions                */\
+  int j;                               /**< index nodes                     */\
+  int l_L, ix;                         /**< index one row of B              */\
+  int l[ths->d];                       /**< multi index u<=l<=o             */\
+  int lj[ths->d];                      /**< multi index 0<=lj<u+o+1         */\
+  int ll_plain[ths->d+1];              /**< postfix plain index in g        */\
+  double phi_prod[ths->d+1];           /**< postfix product of PHI          */\
+  double _Complex *f, *g;              /**< local copy                      */\
+  double _Complex *fj;                 /**< local copy                      */\
+  double y[ths->d];                                                           \
+  int y_u[ths->d];                                                            \
+                                                                              \
+  f=ths->f_hat; g=ths->F;                                                     \
+                                                                              \
+  MACRO_nnfft_B_init_result_ ## which_one                                     \
+                                                                              \
+  if(ths->nnfft_flags & PRE_FULL_PSI)                                         \
+    {                                                                         \
+      for(ix=0, j=0, fj=f; j<ths->N_total; j++,fj++)                          \
+        for(l_L=0; l_L<ths->psi_index_f[j]; l_L++, ix++)                      \
+          MACRO_nnfft_B_PRE_FULL_PSI_compute_ ## which_one;                   \
+      return;                                                                 \
+    }                                                                         \
+                                                                              \
+  phi_prod[0]=1;                                                              \
+  ll_plain[0]=0;                                                              \
+                                                                              \
+  for(t=0,lprod = 1; t<ths->d; t++)                                           \
+    lprod *= (2*ths->m+2);                                                    \
+                                                                              \
+  if(ths->nnfft_flags & PRE_PSI)                                              \
+    {                                                                         \
+      for(j=0, fj=f; j<ths->N_total; j++, fj++)                               \
+        {                                                                     \
+          MACRO_init_uo_l_lj_t;                                               \
+                                                                              \
+          for(l_L=0; l_L<lprod; l_L++)                                        \
+            {                                                                 \
+              MACRO_update_phi_prod_ll_plain(with_PRE_PSI);                   \
+                                                                              \
+              MACRO_nnfft_B_compute_ ## which_one;                            \
+                                                                              \
+              MACRO_count_uo_l_lj_t;                                          \
+            } /* for(l_L) */                                                  \
+        } /* for(j) */                                                        \
+      return;                                                                 \
+    } /* if(PRE_PSI) */                                                       \
+                                                                              \
+  if(ths->nnfft_flags & PRE_LIN_PSI)                                          \
+    {                                                                         \
+      for(j=0, fj=f; j<ths->N_total; j++, fj++)                               \
+        {                                                                     \
+          MACRO_init_uo_l_lj_t;                                               \
+                                                                              \
+          for(l_L=0; l_L<lprod; l_L++)                                        \
+            {                                                                 \
+              MACRO_update_with_PRE_PSI_LIN;                                  \
+                                                                              \
+              MACRO_update_phi_prod_ll_plain(with_PRE_LIN_PSI);               \
+                                                                              \
+              MACRO_nnfft_B_compute_ ## which_one;                            \
+                                                                              \
+              MACRO_count_uo_l_lj_t;                                          \
+            } /* for(l_L) */                                                  \
+        } /* for(j) */                                                        \
+      return;                                                                 \
+    } /* if(PRE_LIN_PSI) */                                                   \
+                                                                              \
+  /* no precomputed psi at all */                                             \
+  for(j=0, fj=f; j<ths->N_total; j++, fj++)                                   \
+    {                                                                         \
+                                                                              \
+      MACRO_init_uo_l_lj_t;                                                   \
+                                                                              \
+      for(l_L=0; l_L<lprod; l_L++)                                            \
+        {                                                                     \
+          MACRO_update_phi_prod_ll_plain(without_PRE_PSI);                    \
+                                                                              \
+          MACRO_nnfft_B_compute_ ## which_one;                                \
+                                                                              \
+          MACRO_count_uo_l_lj_t;                                              \
+        } /* for(l_L) */                                                      \
+    } /* for(j) */                                                            \
+} /* nnfft_B */
+
+MACRO_nnfft_B(A)
+MACRO_nnfft_B(T)
+
+static inline void nnfft_D (nnfft_plan *ths){
+  int j,t;
+  double tmp;
+
+  if(ths->nnfft_flags & PRE_PHI_HUT)
+  {
+      for(j=0; j<ths->M_total; j++)
+	  ths->f[j] *= ths->c_phi_inv[j];
+  }
+  else
+  {
+      for(j=0; j<ths->M_total; j++)
+      {
+	  tmp = 1.0;
+	  /* multiply with N1, because x was modified */
+	  for(t=0; t<ths->d; t++)
+	      tmp*= 1.0 /((PHI_HUT(ths->x[ths->d*j + t]*((double)ths->N[t]),t)) );
+	  ths->f[j] *= tmp;
+      }
+  }
+}
+
+/** user routines
+ */
+void nnfft_trafo(nnfft_plan *ths)
+{
+  int j,t;
+
+  nnfft_B_T(ths);
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+    }
+  }
+
+  /* allows for external swaps of ths->f */
+  ths->direct_plan->f = ths->f;
+
+  nfft_trafo(ths->direct_plan);
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+    }
+  }
+
+  nnfft_D(ths);
+} /* nnfft_trafo */
+
+void nnfft_adjoint(nnfft_plan *ths)
+{
+  int j,t;
+
+  nnfft_D(ths);
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+    }
+  }
+
+  /* allows for external swaps of ths->f */
+  ths->direct_plan->f=ths->f;
+
+  nfft_adjoint(ths->direct_plan);
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+    }
+  }
+
+  nnfft_B_A(ths);
+} /* nnfft_adjoint */
+
+/** initialisation of direct transform
+ */
+void nnfft_precompute_phi_hut(nnfft_plan *ths)
+{
+  int j;                                /**< index over all frequencies       */
+  int t;                                /**< index over all dimensions        */
+  double tmp;
+
+  ths->c_phi_inv= (double*)nfft_malloc(ths->M_total*sizeof(double));
+
+  for(j=0; j<ths->M_total; j++)
+    {
+      tmp = 1.0;
+      for(t=0; t<ths->d; t++)
+        tmp*= 1.0 /(PHI_HUT(ths->x[ths->d*j + t]*((double)ths->N[t]),t));
+      ths->c_phi_inv[j]=tmp;
+    }
+} /* nnfft_phi_hut */
+
+
+/** create a lookup table
+ */
+void nnfft_precompute_lin_psi(nnfft_plan *ths)
+{
+  int t;                                /**< index over all dimensions        */
+  int j;                                /**< index over all nodes             */
+  double step;                          /**< step size in [0,(m+1)/n]         */
+
+  nfft_precompute_lin_psi(ths->direct_plan);
+
+  for (t=0; t<ths->d; t++)
+    {
+      step=((double)(ths->m+1))/(ths->K*ths->N1[t]);
+      for(j=0;j<=ths->K;j++)
+        {
+          ths->psi[(ths->K+1)*t + j] = PHI(j*step,t);
+        } /* for(j) */
+    } /* for(t) */
+}
+
+void nnfft_precompute_psi(nnfft_plan *ths)
+{
+  int t;                                /**< index over all dimensions        */
+  int j;                                /**< index over all nodes             */
+  int l;                                /**< index u<=l<=o                    */
+  int lj;                               /**< index 0<=lj<u+o+1                */
+  int u, o;                             /**< depends on v_j                   */
+
+  for (t=0; t<ths->d; t++)
+    for(j=0;j<ths->N_total;j++)
+      {
+        nnfft_uo(ths,j,&u,&o,t);
+
+        for(l=u, lj=0; l <= o; l++, lj++)
+          ths->psi[(j*ths->d+t)*(2*ths->m+2)+lj]=
+            (PHI((-ths->v[j*ths->d+t]+((double)l)/((double)ths->N1[t])),t));
+      } /* for(j) */
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+    }
+  }
+
+  nfft_precompute_psi(ths->direct_plan);
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+    }
+  }
+  /* for(t) */
+} /* nfft_precompute_psi */
+
+
+
+/**
+ * computes all entries of B explicitly
+ */
+void nnfft_precompute_full_psi(nnfft_plan *ths)
+{
+  int t,t2;                             /**< index over all dimensions        */
+  int j;                                /**< index over all nodes             */
+  int l_L;                              /**< plain index 0<=l_L<lprod         */
+  int l[ths->d];                       /**< multi index u<=l<=o              */
+  int lj[ths->d];                      /**< multi index 0<=lj<u+o+1          */
+  int ll_plain[ths->d+1];              /**< postfix plain index              */
+  int lprod;                            /**< 'bandwidth' of matrix B          */
+  int u[ths->d], o[ths->d];           /**< depends on x_j                   */
+
+  double phi_prod[ths->d+1];
+
+  int ix,ix_old;
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+    }
+  }
+
+  nnfft_precompute_psi(ths);
+
+  nfft_precompute_full_psi(ths->direct_plan);
+
+  for(j=0;j<ths->M_total;j++) {
+    for(t=0;t<ths->d;t++) {
+      ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+    }
+  }
+
+  phi_prod[0]=1;
+  ll_plain[0]=0;
+
+  for(t=0,lprod = 1; t<ths->d; t++)
+    lprod *= 2*ths->m+2;
+
+  for(j=0,ix=0,ix_old=0; j<ths->N_total; j++)
+    {
+      MACRO_init_uo_l_lj_t;
+
+      for(l_L=0; l_L<lprod; l_L++, ix++)
+        {
+          MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+          ths->psi_index_g[ix]=ll_plain[ths->d];
+          ths->psi[ix]=phi_prod[ths->d];
+
+          MACRO_count_uo_l_lj_t;
+        } /* for(l_L) */
+
+
+      ths->psi_index_f[j]=ix-ix_old;
+      ix_old=ix;
+    } /* for(j) */
+}
+
+static void nnfft_init_help(nnfft_plan *ths, int m2, unsigned nfft_flags, unsigned fftw_flags)
+{
+  int t;                                /**< index over all dimensions       */
+  int lprod;                            /**< 'bandwidth' of matrix B         */
+  int N2[ths->d];
+
+  ths->aN1 = (int*) nfft_malloc(ths->d*sizeof(int));
+
+  ths->a = (double*) nfft_malloc(ths->d*sizeof(double));
+
+  ths->sigma = (double*) nfft_malloc(ths->d*sizeof(double));
+
+  ths->n = ths->N1;
+
+  ths->aN1_total=1;
+
+  for(t = 0; t<ths->d; t++) {
+    ths->a[t] = 1.0 + (2.0*((double)ths->m))/((double)ths->N1[t]);
+    ths->aN1[t] = ths->a[t] * ((double)ths->N1[t]);
+    /* aN1 should be even */
+    if(ths->aN1[t]%2 != 0)
+      ths->aN1[t] = ths->aN1[t] +1;
+
+    ths->aN1_total*=ths->aN1[t];
+    ths->sigma[t] = ((double) ths->N1[t] )/((double) ths->N[t]);;
+    
+    /* take the same oversampling factor in the inner NFFT */
+    N2[t] = ceil(ths->sigma[t]*(ths->aN1[t]));
+    
+    /* N2 should be even */
+    if(N2[t]%2 != 0)
+      N2[t] = N2[t] +1;
+  }
+
+  WINDOW_HELP_INIT
+
+  if(ths->nnfft_flags & MALLOC_X)
+    ths->x = (double*)nfft_malloc(ths->d*ths->M_total*sizeof(double));
+  if(ths->nnfft_flags & MALLOC_F)
+    ths->f=(double _Complex*)nfft_malloc(ths->M_total*sizeof(double _Complex));
+
+  if(ths->nnfft_flags & MALLOC_V)
+    ths->v = (double*)nfft_malloc(ths->d*ths->N_total*sizeof(double));
+  if(ths->nnfft_flags & MALLOC_F_HAT)
+    ths->f_hat = (double _Complex*)nfft_malloc(ths->N_total*sizeof(double _Complex));
+
+  if(ths->nnfft_flags & PRE_LIN_PSI)
+  {
+    ths->K=(1U<< 10)*(ths->m+1);
+    ths->psi = (double*) nfft_malloc((ths->K+1)*ths->d*sizeof(double));
+  }
+
+  if(ths->nnfft_flags & PRE_PSI)
+    ths->psi = (double*)nfft_malloc(ths->N_total*ths->d*(2*ths->m+2)*sizeof(double));
+
+  if(ths->nnfft_flags & PRE_FULL_PSI)
+  {
+      for(t=0,lprod = 1; t<ths->d; t++)
+          lprod *= 2*ths->m+2;
+
+      ths->psi = (double*)nfft_malloc(ths->N_total*lprod*sizeof(double));
+
+      ths->psi_index_f = (int*) nfft_malloc(ths->N_total*sizeof(int));
+      ths->psi_index_g = (int*) nfft_malloc(ths->N_total*lprod*sizeof(int));
+  }
+
+  ths->direct_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+
+  nfft_init_guru(ths->direct_plan, ths->d, ths->aN1, ths->M_total, N2, m2,
+		 nfft_flags, fftw_flags);
+
+  ths->direct_plan->x = ths->x;
+  ths->direct_plan->f = ths->f;
+  ths->F = ths->direct_plan->f_hat;
+
+  ths->mv_trafo = (void (*) (void* ))nnfft_trafo;
+  ths->mv_adjoint = (void (*) (void* ))nnfft_adjoint;
+}
+
+void nnfft_init_guru(nnfft_plan *ths, int d, int N_total, int M_total, int *N, int *N1,
+		     int m, unsigned nnfft_flags)
+{
+  int t;                             /**< index over all dimensions        */
+
+  unsigned nfft_flags;
+  unsigned fftw_flags;
+
+  ths->d= d;
+  ths->M_total= M_total;
+  ths->N_total= N_total;
+  ths->m= m;
+  ths->nnfft_flags= nnfft_flags;
+  fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
+  nfft_flags= PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;
+
+  if(ths->nnfft_flags & PRE_PSI)
+    nfft_flags = nfft_flags | PRE_PSI;
+
+  if(ths->nnfft_flags & PRE_FULL_PSI)
+    nfft_flags = nfft_flags | PRE_FULL_PSI;
+
+  if(ths->nnfft_flags & PRE_LIN_PSI)
+    nfft_flags = nfft_flags | PRE_LIN_PSI;
+
+  ths->N = (int*) nfft_malloc(ths->d*sizeof(int));
+  ths->N1 = (int*) nfft_malloc(ths->d*sizeof(int));
+
+  for(t=0; t<d; t++) {
+    ths->N[t] = N[t];
+    ths->N1[t] = N1[t];
+  }
+  nnfft_init_help(ths,m,nfft_flags,fftw_flags);
+}
+
+void nnfft_init(nnfft_plan *ths, int d, int N_total, int M_total, int *N)
+{
+  int t;                            /**< index over all dimensions        */
+
+  unsigned nfft_flags;
+  unsigned fftw_flags;
+
+  ths->d = d;
+  ths->M_total = M_total;
+  ths->N_total = N_total;
+
+  /* m should be greater to get the same accuracy as the nfft */
+/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+
+  WINDOW_HELP_ESTIMATE_m;
+*/
+
+  ths->N = (int*) nfft_malloc(ths->d*sizeof(int));
+  ths->N1 = (int*) nfft_malloc(ths->d*sizeof(int));
+
+  for(t=0; t<d; t++) {
+    ths->N[t] = N[t];
+
+    /* the standard oversampling factor in the nnfft is 1.5 */
+    ths->N1[t] = ceil(1.5*ths->N[t]);
+    
+    /* N1 should be even */
+    if(ths->N1[t]%2 != 0)
+      ths->N1[t] = ths->N1[t] +1;
+  }
+
+  ths->nnfft_flags=PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F;
+  nfft_flags= PRE_PSI| PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;
+
+  fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
+
+  nnfft_init_help(ths,ths->m,nfft_flags,fftw_flags);
+}
+
+void nnfft_finalize(nnfft_plan *ths)
+{
+
+  nfft_finalize(ths->direct_plan);
+
+  nfft_free(ths->direct_plan);
+
+  nfft_free(ths->aN1);
+  nfft_free(ths->N);
+  nfft_free(ths->N1);
+
+  if(ths->nnfft_flags & PRE_FULL_PSI)
+    {
+      nfft_free(ths->psi_index_g);
+      nfft_free(ths->psi_index_f);
+      nfft_free(ths->psi);
+    }
+
+  if(ths->nnfft_flags & PRE_PSI)
+    nfft_free(ths->psi);
+
+  if(ths->nnfft_flags & PRE_LIN_PSI)
+    nfft_free(ths->psi);
+
+  if(ths->nnfft_flags & PRE_PHI_HUT)
+    nfft_free(ths->c_phi_inv);
+
+  if(ths->nnfft_flags & MALLOC_F)
+    nfft_free(ths->f);
+
+  if(ths->nnfft_flags & MALLOC_F_HAT)
+    nfft_free(ths->f_hat);
+
+  if(ths->nnfft_flags & MALLOC_X)
+    nfft_free(ths->x);
+
+  if(ths->nnfft_flags & MALLOC_V)
+    nfft_free(ths->v);
+}
diff --git a/kernel/nsfft/Makefile.am b/kernel/nsfft/Makefile.am
new file mode 100644
index 0000000..5fd5d7c
--- /dev/null
+++ b/kernel/nsfft/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include 
+
+noinst_LTLIBRARIES = libnsfft.la
+
+libnsfft_la_SOURCES = nsfft.c 
+
diff --git a/kernel/nsfft/Makefile.in b/kernel/nsfft/Makefile.in
new file mode 100644
index 0000000..2faa983
--- /dev/null
+++ b/kernel/nsfft/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nsfft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnsfft_la_LIBADD =
+am_libnsfft_la_OBJECTS = nsfft.lo
+libnsfft_la_OBJECTS = $(am_libnsfft_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnsfft_la_SOURCES)
+DIST_SOURCES = $(libnsfft_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include 
+noinst_LTLIBRARIES = libnsfft.la
+libnsfft_la_SOURCES = nsfft.c 
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nsfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/nsfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnsfft.la: $(libnsfft_la_OBJECTS) $(libnsfft_la_DEPENDENCIES) $(EXTRA_libnsfft_la_DEPENDENCIES) 
+	$(LINK)  $(libnsfft_la_OBJECTS) $(libnsfft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nsfft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nsfft/nsfft.c b/kernel/nsfft/nsfft.c
new file mode 100644
index 0000000..37fb337
--- /dev/null
+++ b/kernel/nsfft/nsfft.c
@@ -0,0 +1,1894 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nsfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#define NSFTT_DISABLE_TEST
+
+/* computes a 2d ndft by 1d nfft along the dimension 1 times
+   1d ndft along dimension 0
+*/
+static void short_nfft_trafo_2d(nfft_plan* ths, nfft_plan* plan_1d)
+{
+  int j,k0;
+  double omega;
+
+  for(j=0;j<ths->M_total;j++)
+    {
+      ths->f[j]= 0;
+      plan_1d->x[j] = ths->x[ths->d * j + 1];
+    }
+
+  for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+    {
+      plan_1d->f_hat = ths->f_hat + k0*ths->N[1];
+
+      nfft_trafo(plan_1d);
+
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+          ths->f[j] += plan_1d->f[j] * cexp( - I*2*PI*omega);
+	}
+    }
+}
+
+static void short_nfft_adjoint_2d(nfft_plan* ths, nfft_plan* plan_1d)
+{
+  int j,k0;
+  double omega;
+
+  for(j=0;j<ths->M_total;j++)
+    plan_1d->x[j] = ths->x[ths->d * j + 1];
+
+  for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+    {
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+          plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+	}
+
+      plan_1d->f_hat = ths->f_hat + k0*ths->N[1];
+
+      nfft_adjoint(plan_1d);
+    }
+}
+
+/* computes a 3d ndft by 1d nfft along the dimension 2 times
+   2d ndft along dimension 0,1
+*/
+static void short_nfft_trafo_3d_1(nfft_plan* ths, nfft_plan* plan_1d)
+{
+  int j,k0,k1;
+  double omega;
+
+  for(j=0;j<ths->M_total;j++)
+    {
+      ths->f[j] = 0;
+      plan_1d->x[j] = ths->x[ths->d * j + 2];
+    }
+
+  for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+    for(k1=0;k1<ths->N[1];k1++)
+      {
+	plan_1d->f_hat = ths->f_hat + (k0*ths->N[1]+k1)*ths->N[2];
+
+	nfft_trafo(plan_1d);
+
+	for(j=0;j<ths->M_total;j++)
+	  {
+	    omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0]
+	      +     ((double)(k1 - ths->N[1]/2)) * ths->x[ths->d * j + 1];
+            ths->f[j] += plan_1d->f[j] * cexp( - I*2*PI*omega);
+	  }
+      }
+}
+
+static void short_nfft_adjoint_3d_1(nfft_plan* ths, nfft_plan* plan_1d)
+{
+  int j,k0,k1;
+  double omega;
+
+  for(j=0;j<ths->M_total;j++)
+    plan_1d->x[j] = ths->x[ths->d * j + 2];
+
+  for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+    for(k1=0;k1<ths->N[1];k1++)
+      {
+	for(j=0;j<ths->M_total;j++)
+	  {
+	    omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0]
+	      +     ((double)(k1 - ths->N[1]/2)) * ths->x[ths->d * j + 1];
+            plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+	  }
+
+	plan_1d->f_hat = ths->f_hat + (k0*ths->N[1]+k1)*ths->N[2];
+
+	nfft_adjoint(plan_1d);
+      }
+}
+
+/* computes a 3d ndft by 2d nfft along the dimension 1,2 times
+   1d ndft along dimension 0
+*/
+static void short_nfft_trafo_3d_2(nfft_plan* ths, nfft_plan* plan_2d)
+{
+  int j,k0;
+  double omega;
+
+  for(j=0;j<ths->M_total;j++)
+    {
+      ths->f[j] = 0;
+      plan_2d->x[2*j+0] = ths->x[ths->d * j + 1];
+      plan_2d->x[2*j+1] = ths->x[ths->d * j + 2];
+    }
+
+  for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+    {
+      plan_2d->f_hat = ths->f_hat + k0*ths->N[1]*ths->N[2];
+
+      nfft_trafo(plan_2d);
+
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+	  ths->f[j] += plan_2d->f[j] * cexp( - I*2*PI*omega);
+	}
+    }
+}
+
+static void short_nfft_adjoint_3d_2(nfft_plan* ths, nfft_plan* plan_2d)
+{
+  int j,k0;
+  double omega;
+
+  for(j=0;j<ths->M_total;j++)
+    {
+      plan_2d->x[2*j+0] = ths->x[ths->d * j + 1];
+      plan_2d->x[2*j+1] = ths->x[ths->d * j + 2];
+    }
+
+  for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+    {
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+	  plan_2d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+	}
+
+      plan_2d->f_hat = ths->f_hat + k0*ths->N[1]*ths->N[2];
+
+      nfft_adjoint(plan_2d);
+    }
+}
+
+/*---------------------------------------------------------------------------*/
+
+#ifdef GAUSSIAN
+static int index_sparse_to_full_direct_2d(int J, int k)
+{
+    int N=X(exp2i)(J+2);               /* number of full coeffs             */
+    int N_B=X(exp2i)(J);               /* number in each sparse block       */
+
+    int j=k/N_B;                        /* consecutive number of Block       */
+    int r=j/4;                          /* level of block                    */
+
+    int i, o, a, b,s,l,m1,m2;
+    int k1,k2;
+
+    if (k>=(J+4)*X(exp2i)(J+1))
+      {
+	printf("Fehler!\n");
+	return(-1);
+      }
+    else
+      {
+	if (r>(J+1)/2)                  /* center block                      */
+	  {
+	    i=k-4*((J+1)/2+1)*N_B;
+	    a=X(exp2i)(J/2+1);
+	    m1=i/a;
+	    m2=i%a;
+	    k1=N/2-a/2+m1;
+	    k2=N/2-a/2+m2;
+	  }
+	else                            /* no center block                   */
+	  {
+	    i=k-j*N_B;                  /* index in specific block           */
+	    o=j%4;                      /* kind of specific block            */
+	    a=X(exp2i)(r);
+	    b=X(exp2i)(J-r);
+	    l=NFFT_MAX(a,b);                 /* long dimension of block           */
+	    s=NFFT_MIN(a,b);                 /* short dimension of block          */
+	    m1=i/l;
+	    m2=i%l;
+
+	    switch(o)
+	      {
+	      case 0:
+		{
+		  k1=N/2-a/2 ;
+		  k2=N/2+ b  ;
+
+		  if (b>=a)
+		    {
+		      k1+=m1;
+		      k2+=m2;
+		    }
+		  else
+		    {
+		      k1+=m2;
+		      k2+=m1;
+		    }
+		  break;
+		}
+	      case 1:
+		{
+		  k1=N/2+ b  ;
+		  k2=N/2-a/2 ;
+
+		  if (b>a)
+		    {
+		      k1+=m2;
+		      k2+=m1;
+		    }
+		  else
+		    {
+		      k1+=m1;
+		      k2+=m2;
+		    }
+		  break;
+		}
+	      case 2:
+		{
+		  k1=N/2-a/2 ;
+		  k2=N/2-2*b ;
+
+		  if (b>=a)
+		    {
+		      k1+=m1;
+		      k2+=m2;
+		    }
+		  else
+		    {
+		      k1+=m2;
+		      k2+=m1;
+		    }
+		  break;
+		}
+	      case 3:
+		{
+		  k1=N/2-2*b ;
+		  k2=N/2-a/2 ;
+
+		  if (b>a)
+		    {
+		      k1+=m2;
+		      k2+=m1;
+		    }
+		  else
+		    {
+		      k1+=m1;
+		      k2+=m2;
+		    }
+		  break;
+		}
+	      default:
+		{
+		  k1=-1;
+		  k2=-1;
+		}
+	      }
+	  }
+	//printf("m1=%d, m2=%d\n",m1,m2);
+	return(k1*N+k2);
+      }
+}
+#endif
+
+static inline int index_sparse_to_full_2d(nsfft_plan *ths, int k)
+{
+  /* only by lookup table */
+  if( k < ths->N_total)
+    return ths->index_sparse_to_full[k];
+  else
+    return -1;
+}
+
+#ifndef NSFTT_DISABLE_TEST
+static int index_full_to_sparse_2d(int J, int k)
+{
+    int N=X(exp2i)(J+2);               /* number of full coeffs       */
+    int N_B=X(exp2i)(J);               /* number in each sparse block */
+
+    int k1=k/N-N/2;                     /* coordinates in the full grid */
+    int k2=k%N-N/2;                     /* k1: row, k2: column          */
+
+    int r,a,b;
+
+    a=X(exp2i)(J/2+1);
+
+    if ( (k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) )
+      {
+	return(4*((J+1)/2+1)*N_B+(k1+a/2)*a+(k2+a/2));
+      }
+
+    for (r=0; r<=(J+1)/2; r++)
+      {
+	b=X(exp2i)(r);
+	a=X(exp2i)(J-r);
+	if ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=a) && (k2<2*a) )
+	  {
+            if (a>=b)
+	      return((4*r+0)*N_B+(k1+b/2)*a+(k2-a));
+	    else
+	      return((4*r+0)*N_B+(k2-a)*b+(k1+b/2));
+	  }
+	else if ( (k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) )
+	  {
+            if (a>b)
+	      return((4*r+1)*N_B+(k2+b/2)*a+(k1-a));
+	    else
+	      return((4*r+1)*N_B+(k1-a)*b+(k2+b/2));
+	  }
+	else if ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=-2*a) && (k2<-a) )
+	  {
+            if (a>=b)
+	      return((4*r+2)*N_B+(k1+b/2)*a+(k2+2*a));
+	    else
+	      return((4*r+2)*N_B+(k2+2*a)*b+(k1+b/2));
+	  }
+	else if ( (k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) )
+	  {
+            if (a>b)
+	      return((4*r+3)*N_B+(k2+b/2)*a+(k1+2*a));
+	    else
+	      return((4*r+3)*N_B+(k1+2*a)*b+(k2+b/2));
+	  }
+      }
+
+    return(-1);
+}
+#endif
+
+#ifdef GAUSSIAN
+static void init_index_sparse_to_full_2d(nsfft_plan *ths)
+{
+  int k_S;
+
+  for (k_S=0; k_S<ths->N_total; k_S++)
+    ths->index_sparse_to_full[k_S]=index_sparse_to_full_direct_2d(ths->J, k_S);
+}
+#endif
+
+#ifdef GAUSSIAN
+static inline int index_sparse_to_full_3d(nsfft_plan *ths, int k)
+{
+  /* only by lookup table */
+  if( k < ths->N_total)
+    return ths->index_sparse_to_full[k];
+  else
+    return -1;
+}
+#endif
+
+#ifndef NSFTT_DISABLE_TEST
+static int index_full_to_sparse_3d(int J, int k)
+{
+  int N=X(exp2i)(J+2);                 /* length of the full grid           */
+  int N_B_r;                            /* size of a sparse block in level r */
+  int sum_N_B_less_r;                   /* sum N_B_r                         */
+
+  int r,a,b;
+
+  int k3=(k%N)-N/2;                     /* coordinates in the full grid      */
+  int k2=((k/N)%N)-N/2;
+  int k1=k/(N*N)-N/2;
+
+  a=X(exp2i)(J/2+1);                   /* length of center block            */
+
+  if((k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) && (k3>=(-a/2)) &&
+     (k3<a/2))
+    {
+      return(6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+((k1+a/2)*a+(k2+a/2))*a+
+             (k3+a/2));
+    }
+
+  sum_N_B_less_r=0;
+  for (r=0; r<=(J+1)/2; r++)
+    {
+      a=X(exp2i)(J-r);
+      b=X(exp2i)(r);
+
+      N_B_r=a*b*b;
+
+      /* right - rear - top - left - front - bottom */
+      if ((k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&
+          (k3>=-(b/2)) && (k3<(b+1)/2)) /* right */
+	{
+	  if(a>b)
+	    return sum_N_B_less_r+N_B_r*0 + ((k2+b/2)*b+k3+b/2)*a + (k1-a);
+	  else
+	    return sum_N_B_less_r+N_B_r*0 + ((k1-a)*b+(k2+b/2))*b + (k3+b/2);
+	}
+      else if ((k2>=a) && (k2<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+               (k3>=-(b/2)) && (k3<(b+1)/2)) /* rear */
+	{
+	  if(a>b)
+	    return sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+k3+b/2)*a + (k2-a);
+	  else if (a==b)
+	    return sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+(k2-a))*a + (k3+b/2);
+	  else
+	    return sum_N_B_less_r+N_B_r*1 + ((k2-a)*b+(k1+b/2))*b + (k3+b/2);
+	}
+       else if ((k3>=a) && (k3<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+                (k2>=-(b/2)) && (k2<(b+1)/2)) /* top */
+	{
+	  if(a>=b)
+	    return sum_N_B_less_r+N_B_r*2 + ((k1+b/2)*b+k2+b/2)*a + (k3-a);
+	  else
+	    return sum_N_B_less_r+N_B_r*2 + ((k3-a)*b+(k1+b/2))*b + (k2+b/2);
+	}
+
+      else if ((k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&
+               (k3>=-(b/2)) && (k3<(b+1)/2)) /* left */
+	{
+	  if(a>b)
+	    return sum_N_B_less_r+N_B_r*3 + ((k2+b/2)*b+k3+b/2)*a + (k1+2*a);
+	  else
+	    return sum_N_B_less_r+N_B_r*3 + ((k1+2*a)*b+(k2+b/2))*b + (k3+b/2);
+	}
+      else if ((k2>=-2*a) && (k2<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+               (k3>=-(b/2)) && (k3<(b+1)/2)) /* front */
+	{
+	  if(a>b)
+	    return sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+k3+b/2)*a + (k2+2*a);
+	  else if (a==b)
+	    return sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+(k2+2*a))*a + (k3+b/2);
+	  else
+	    return sum_N_B_less_r+N_B_r*4 + ((k2+2*a)*b+(k1+b/2))*b + (k3+b/2);
+	}
+       else if ((k3>=-2*a) && (k3<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+                (k2>=-(b/2)) && (k2<(b+1)/2)) /* bottom */
+	{
+	  if(a>=b)
+	    return sum_N_B_less_r+N_B_r*5 + ((k1+b/2)*b+k2+b/2)*a + (k3+2*a);
+	  else
+	    return sum_N_B_less_r+N_B_r*5 + ((k3+2*a)*b+(k1+b/2))*b + (k2+b/2);
+	}
+
+      sum_N_B_less_r+=6*N_B_r;
+    } /* for(r) */
+
+  return(-1);
+}
+#endif
+
+#ifdef GAUSSIAN
+static void init_index_sparse_to_full_3d(nsfft_plan *ths)
+{
+  int k1,k2,k3,k_s,r;
+  int a,b;
+  int N=X(exp2i)(ths->J+2);            /* length of the full grid           */
+  int Nc=ths->center_nfft_plan->N[0];   /* length of the center block        */
+
+  for (k_s=0, r=0; r<=(ths->J+1)/2; r++)
+    {
+      a=X(exp2i)(ths->J-r);
+      b=X(exp2i)(r);
+
+      /* right - rear - top - left - front - bottom */
+
+      /* right */
+      if(a>b)
+	for(k2=-b/2;k2<(b+1)/2;k2++)
+	  for(k3=-b/2;k3<(b+1)/2;k3++)
+	    for(k1=a; k1<2*a; k1++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else
+	for(k1=a; k1<2*a; k1++)
+	  for(k2=-b/2;k2<(b+1)/2;k2++)
+	    for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+      /* rear */
+      if(a>b)
+	for(k1=-b/2;k1<(b+1)/2;k1++)
+	  for(k3=-b/2;k3<(b+1)/2;k3++)
+	    for(k2=a; k2<2*a; k2++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else if(a==b)
+	for(k1=-b/2;k1<(b+1)/2;k1++)
+	  for(k2=a; k2<2*a; k2++)
+	    for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else
+	for(k2=a; k2<2*a; k2++)
+	  for(k1=-b/2;k1<(b+1)/2;k1++)
+	    for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+      /* top */
+      if(a>=b)
+	for(k1=-b/2;k1<(b+1)/2;k1++)
+	  for(k2=-b/2;k2<(b+1)/2;k2++)
+	    for(k3=a; k3<2*a; k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else
+	for(k3=a; k3<2*a; k3++)
+	  for(k1=-b/2;k1<(b+1)/2;k1++)
+	    for(k2=-b/2;k2<(b+1)/2;k2++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+      /* left */
+      if(a>b)
+	for(k2=-b/2;k2<(b+1)/2;k2++)
+	  for(k3=-b/2;k3<(b+1)/2;k3++)
+	    for(k1=-2*a; k1<-a; k1++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else
+	for(k1=-2*a; k1<-a; k1++)
+	  for(k2=-b/2;k2<(b+1)/2;k2++)
+	    for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+      /* front */
+      if(a>b)
+	for(k1=-b/2;k1<(b+1)/2;k1++)
+	  for(k3=-b/2;k3<(b+1)/2;k3++)
+	    for(k2=-2*a; k2<-a; k2++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else if(a==b)
+	for(k1=-b/2;k1<(b+1)/2;k1++)
+	  for(k2=-2*a; k2<-a; k2++)
+	    for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else
+	for(k2=-2*a; k2<-a; k2++)
+	  for(k1=-b/2;k1<(b+1)/2;k1++)
+	    for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+      /* top */
+      if(a>=b)
+	for(k1=-b/2;k1<(b+1)/2;k1++)
+	  for(k2=-b/2;k2<(b+1)/2;k2++)
+	    for(k3=-2*a; k3<-a; k3++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+      else
+	for(k3=-2*a; k3<-a; k3++)
+	  for(k1=-b/2;k1<(b+1)/2;k1++)
+	    for(k2=-b/2;k2<(b+1)/2;k2++,k_s++)
+	      ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+    }
+
+  /* center */
+  for(k1=-Nc/2;k1<Nc/2;k1++)
+    for(k2=-Nc/2;k2<Nc/2;k2++)
+      for(k3=-Nc/2; k3<Nc/2; k3++,k_s++)
+	ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+}
+#endif
+
+/* copies ths->f_hat to ths_plan->f_hat */
+void nsfft_cp(nsfft_plan *ths, nfft_plan *ths_full_plan)
+{
+  int k;
+
+  /* initialize f_hat with zero values */
+  memset(ths_full_plan->f_hat, 0, ths_full_plan->N_total*sizeof(double _Complex));
+
+   /* copy values at hyperbolic grid points */
+  for(k=0;k<ths->N_total;k++)
+    ths_full_plan->f_hat[ths->index_sparse_to_full[k]]=ths->f_hat[k];
+
+  /* copy nodes */
+  memcpy(ths_full_plan->x,ths->act_nfft_plan->x,ths->M_total*ths->d*sizeof(double));
+}
+
+#ifndef NSFTT_DISABLE_TEST
+/* test copy_sparse_to_full */
+static void test_copy_sparse_to_full_2d(nsfft_plan *ths, nfft_plan *ths_full_plan)
+{
+  int r;
+  int k1, k2;
+  int a,b;
+  const int J=ths->J;   /* N=2^J                  */
+  const int N=ths_full_plan->N[0];  /* size of full NFFT      */
+  const int N_B=X(exp2i)(J);        /* size of small blocks   */
+
+  /* copy sparse plan to full plan */
+  nsfft_cp(ths, ths_full_plan);
+
+  /* show blockwise f_hat */
+  printf("f_hat blockwise\n");
+  for (r=0; r<=(J+1)/2; r++){
+    a=X(exp2i)(J-r); b=X(exp2i)(r);
+
+    printf("top\n");
+    for (k1=0; k1<a; k1++){
+      for (k2=0; k2<b; k2++){
+        printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+1)*N_B+ k1*b+k2]),
+	                         cimag(ths->f_hat[(4*r+1)*N_B+ k1*b+k2]));
+      }
+      printf("\n");
+    }
+
+    printf("bottom\n");
+    for (k1=0; k1<a; k1++){
+      for (k2=0; k2<b; k2++){
+        printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+3)*N_B+ k1*b+k2]),
+                                 cimag(ths->f_hat[(4*r+3)*N_B+ k1*b+k2]));
+      }
+      printf("\n");
+    }
+
+    printf("right\n");
+    for (k2=0; k2<b; k2++){
+      for (k1=0; k1<a; k1++){
+        printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+0)*N_B+ k2*a+k1]),
+                                 cimag(ths->f_hat[(4*r+0)*N_B+ k2*a+k1]));
+      }
+      printf("\n");
+    }
+
+    printf("left\n");
+    for (k2=0; k2<b; k2++){
+      for (k1=0; k1<a; k1++){
+        printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+2)*N_B+ k2*a+k1]),
+	                         cimag(ths->f_hat[(4*r+2)*N_B+ k2*a+k1]));
+      }
+      printf("\n");
+    }
+  }
+
+  return;
+  /* show full f_hat */
+  printf("full f_hat\n");
+  for (k1=0;k1<N;k1++){
+    for (k2=0;k2<N;k2++){
+      printf("(%1.1f,%1.1f) ", creal(ths_full_plan->f_hat[k1*N+k2]),
+                               cimag(ths_full_plan->f_hat[k1*N+k2]));
+    }
+    printf("\n");
+  }
+}
+#endif
+
+#ifndef NSFTT_DISABLE_TEST
+static void test_sparse_to_full_2d(nsfft_plan* ths)
+{
+  int k_S,k1,k2;
+  int N=X(exp2i)(ths->J+2);
+
+  printf("N=%d\n\n",N);
+
+  for(k1=0;k1<N;k1++)
+    for(k2=0;k2<N;k2++)
+      {
+        k_S=index_full_to_sparse_2d(ths->J, k1*N+k2);
+	if(k_S!=-1)
+	  printf("(%+d, %+d)\t= %+d \t= %+d = %+d \n",k1-N/2,k2-N/2,
+                 k1*N+k2, k_S, ths->index_sparse_to_full[k_S]);
+      }
+}
+#endif
+
+#ifndef NSFTT_DISABLE_TEST
+static void test_sparse_to_full_3d(nsfft_plan* ths)
+{
+  int k_S,k1,k2,k3;
+  int N=X(exp2i)(ths->J+2);
+
+  printf("N=%d\n\n",N);
+
+  for(k1=0;k1<N;k1++)
+    for(k2=0;k2<N;k2++)
+        for(k3=0;k3<N;k3++)
+	  {
+	    k_S=index_full_to_sparse_3d(ths->J, (k1*N+k2)*N+k3);
+	    if(k_S!=-1)
+	      printf("(%d, %d, %d)\t= %d \t= %d = %d \n",k1-N/2,k2-N/2,k3-N/2,
+                     (k1*N+k2)*N+k3,k_S, ths->index_sparse_to_full[k_S]);
+	  }
+}
+#endif
+
+
+void nsfft_init_random_nodes_coeffs(nsfft_plan *ths)
+{
+  int j;
+
+  /* init frequencies */
+  nfft_vrand_unit_complex(ths->f_hat, ths->N_total);
+
+  /* init nodes */
+  nfft_vrand_shifted_unit_double(ths->act_nfft_plan->x, ths->d * ths->M_total);
+
+  if(ths->d==2)
+    for(j=0;j<ths->M_total;j++)
+      {
+        ths->x_transposed[2*j+0]=ths->act_nfft_plan->x[2*j+1];
+        ths->x_transposed[2*j+1]=ths->act_nfft_plan->x[2*j+0];
+      }
+  else /* this->d==3 */
+    for(j=0;j<ths->M_total;j++)
+      {
+        ths->x_102[3*j+0]=ths->act_nfft_plan->x[3*j+1];
+        ths->x_102[3*j+1]=ths->act_nfft_plan->x[3*j+0];
+        ths->x_102[3*j+2]=ths->act_nfft_plan->x[3*j+2];
+
+        ths->x_201[3*j+0]=ths->act_nfft_plan->x[3*j+2];
+        ths->x_201[3*j+1]=ths->act_nfft_plan->x[3*j+0];
+        ths->x_201[3*j+2]=ths->act_nfft_plan->x[3*j+1];
+
+        ths->x_120[3*j+0]=ths->act_nfft_plan->x[3*j+1];
+        ths->x_120[3*j+1]=ths->act_nfft_plan->x[3*j+2];
+        ths->x_120[3*j+2]=ths->act_nfft_plan->x[3*j+0];
+
+        ths->x_021[3*j+0]=ths->act_nfft_plan->x[3*j+0];
+        ths->x_021[3*j+1]=ths->act_nfft_plan->x[3*j+2];
+        ths->x_021[3*j+2]=ths->act_nfft_plan->x[3*j+1];
+      }
+}
+
+static void nsdft_trafo_2d(nsfft_plan *ths)
+{
+  int j,k_S,k_L,k0,k1;
+  double omega;
+  int N=X(exp2i)(ths->J+2);
+
+  memset(ths->f,0,ths->M_total*sizeof(double _Complex));
+
+  for(k_S=0;k_S<ths->N_total;k_S++)
+    {
+      k_L=ths->index_sparse_to_full[k_S];
+      k0=k_L / N;
+      k1=k_L % N;
+
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega =
+	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[2 * j + 0] +
+	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[2 * j + 1];
+          ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*PI*omega);
+	}
+    }
+} /* void nsdft_trafo_2d */
+
+static void nsdft_trafo_3d(nsfft_plan *ths)
+{
+  int j,k_S,k0,k1,k2;
+  double omega;
+  int N=X(exp2i)(ths->J+2);
+  int k_L;
+
+  memset(ths->f,0,ths->M_total*sizeof(double _Complex));
+
+  for(k_S=0;k_S<ths->N_total;k_S++)
+    {
+      k_L=ths->index_sparse_to_full[k_S];
+
+      k0=k_L/(N*N);
+      k1=(k_L/N)%N;
+      k2=k_L%N;
+
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega =
+	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[3 * j + 0] +
+	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[3 * j + 1] +
+	    ((double)(k2 - N/2)) * ths->act_nfft_plan->x[3 * j + 2];
+          ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*PI*omega);
+	}
+    }
+} /* void nsdft_trafo_3d */
+
+void nsfft_trafo_direct(nsfft_plan *ths)
+{
+  if(ths->d==2)
+    nsdft_trafo_2d(ths);
+  else
+    nsdft_trafo_3d(ths);
+}
+
+static void nsdft_adjoint_2d(nsfft_plan *ths)
+{
+  int j,k_S,k_L,k0,k1;
+  double omega;
+  int N=X(exp2i)(ths->J+2);
+
+  memset(ths->f_hat,0,ths->N_total*sizeof(double _Complex));
+
+  for(k_S=0;k_S<ths->N_total;k_S++)
+    {
+      k_L=ths->index_sparse_to_full[k_S];
+      k0=k_L / N;
+      k1=k_L % N;
+
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega =
+	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[2 * j + 0] +
+	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[2 * j + 1];
+          ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+	}
+    }
+} /* void nsdft_adjoint_2d */
+
+static void nsdft_adjoint_3d(nsfft_plan *ths)
+{
+  int j,k_S,k0,k1,k2;
+  double omega;
+  int N=X(exp2i)(ths->J+2);
+  int k_L;
+
+  memset(ths->f_hat,0,ths->N_total*sizeof(double _Complex));
+
+  for(k_S=0;k_S<ths->N_total;k_S++)
+    {
+      k_L=ths->index_sparse_to_full[k_S];
+
+      k0=k_L/(N*N);
+      k1=(k_L/N)%N;
+      k2=k_L%N;
+
+      for(j=0;j<ths->M_total;j++)
+	{
+	  omega =
+	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[3 * j + 0] +
+	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[3 * j + 1] +
+	    ((double)(k2 - N/2)) * ths->act_nfft_plan->x[3 * j + 2];
+          ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+	}
+    }
+} /* void nsdft_adjoint_3d */
+
+void nsfft_adjoint_direct(nsfft_plan *ths)
+{
+  if(ths->d==2)
+    nsdft_adjoint_2d(ths);
+  else
+    nsdft_adjoint_3d(ths);
+}
+
+static void nsfft_trafo_2d(nsfft_plan *ths)
+{
+  int r,rr,j;
+  double temp;
+
+  int M=ths->M_total;
+  int J=ths->J;
+
+  /* center */
+  ths->center_nfft_plan->f_hat=ths->f_hat+4*((J+1)/2+1)*X(exp2i)(J);
+
+  if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+    nfft_trafo_direct(ths->center_nfft_plan);
+  else
+    nfft_trafo(ths->center_nfft_plan);
+
+  for (j=0; j<M; j++)
+    ths->f[j] = ths->center_nfft_plan->f[j];
+
+  for(rr=0;rr<=(J+1)/2;rr++)
+    {
+      r=NFFT_MIN(rr,J-rr);
+      ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[r];
+      ths->act_nfft_plan->N[0]=X(exp2i)(r); ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+      ths->act_nfft_plan->N[1]=X(exp2i)(J-r); ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+
+      /*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/
+
+      temp=-3.0*PI*X(exp2i)(J-rr);
+
+      /* right */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+0)*X(exp2i)(J);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_trafo_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      for (j=0; j<M; j++)
+        ths->f[j] +=  ths->act_nfft_plan->f[j] *
+                      cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+      /* top */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+1)*X(exp2i)(J);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_trafo_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+0]);
+
+      /* left */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+2)*X(exp2i)(J);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_trafo_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( - I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+      /* bottom */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+3)*X(exp2i)(J);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_trafo_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( - I*temp*ths->act_nfft_plan->x[2*j+0]);
+    } /* for(rr) */
+} /* void nsfft_trafo_2d */
+
+static void nsfft_adjoint_2d(nsfft_plan *ths)
+{
+  int r,rr,j;
+  double temp;
+
+  int M=ths->M_total;
+  int J=ths->J;
+
+  /* center */
+  for (j=0; j<M; j++)
+    ths->center_nfft_plan->f[j] = ths->f[j];
+
+  ths->center_nfft_plan->f_hat=ths->f_hat+4*((J+1)/2+1)*X(exp2i)(J);
+
+  if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+    nfft_adjoint_direct(ths->center_nfft_plan);
+  else
+    nfft_adjoint(ths->center_nfft_plan);
+
+  for(rr=0;rr<=(J+1)/2;rr++)
+    {
+      r=NFFT_MIN(rr,J-rr);
+      ths->act_nfft_plan->my_fftw_plan2 = ths->set_fftw_plan2[r];
+      ths->act_nfft_plan->N[0]=X(exp2i)(r); ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+      ths->act_nfft_plan->N[1]=X(exp2i)(J-r); ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+
+      /*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/
+
+      temp=-3.0*PI*X(exp2i)(J-rr);
+
+      /* right */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+0)*X(exp2i)(J);
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( - I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_adjoint_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      /* top */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+1)*X(exp2i)(J);
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( - I*temp*ths->act_nfft_plan->x[2*j+0]);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_adjoint_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      /* left */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+2)*X(exp2i)(J);
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_adjoint_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(r<rr)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      /* bottom */
+      ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+3)*X(exp2i)(J);
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+0]);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  nfft_adjoint_direct(ths->act_nfft_plan);
+	else
+	  short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if((r==rr)&&(J-rr!=rr))
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+    } /* for(rr) */
+} /* void nsfft_adjoint_2d */
+
+static void nsfft_trafo_3d(nsfft_plan *ths)
+{
+  int r,rr,j;
+  double temp;
+  int sum_N_B_less_r,N_B_r,a,b;
+
+  int M=ths->M_total;
+  int J=ths->J;
+
+  /* center */
+  ths->center_nfft_plan->f_hat=ths->f_hat+6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1);
+
+  if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+    nfft_trafo_direct(ths->center_nfft_plan);
+  else
+    nfft_trafo(ths->center_nfft_plan);
+
+  for (j=0; j<M; j++)
+    ths->f[j] = ths->center_nfft_plan->f[j];
+
+  sum_N_B_less_r=0;
+  for(rr=0;rr<=(J+1)/2;rr++)
+    {
+      a=X(exp2i)(J-rr);
+      b=X(exp2i)(rr);
+
+      N_B_r=a*b*b;
+
+      r=NFFT_MIN(rr,J-rr);
+      ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[rr];
+
+      ths->act_nfft_plan->N[0]=X(exp2i)(r);
+      if(a<b)
+	ths->act_nfft_plan->N[1]=X(exp2i)(J-r);
+      else
+	ths->act_nfft_plan->N[1]=X(exp2i)(r);
+      ths->act_nfft_plan->N[2]=X(exp2i)(J-r);
+
+      /*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/
+
+      ths->act_nfft_plan->N_total=ths->act_nfft_plan->N[0]*ths->act_nfft_plan->N[1]*ths->act_nfft_plan->N[2];
+      ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+      ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+      ths->act_nfft_plan->n[2]=ths->sigma*ths->act_nfft_plan->N[2];
+      ths->act_nfft_plan->n_total=ths->act_nfft_plan->n[0]*ths->act_nfft_plan->n[1]*ths->act_nfft_plan->n[2];
+
+      /* only for right - rear - top */
+      if((J==0)||((J==1)&&(rr==1)))
+	temp=-2.0*PI;
+      else
+	temp=-3.0*PI*X(exp2i)(J-rr);
+
+      /* right */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*0;
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_trafo_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+      /* rear */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*1;
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_trafo_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+      /* top */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*2;
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_trafo_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+      /* only for left - front - bottom */
+      if((J==0)||((J==1)&&(rr==1)))
+	temp=-4.0*PI;
+      else
+	temp=-3.0*PI*X(exp2i)(J-rr);
+
+      /* left */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*3;
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_trafo_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( - I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+      /* front */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*4;
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_trafo_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( - I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+      /* bottom */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*5;
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_trafo_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_trafo(ths->act_nfft_plan);
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      for (j=0; j<M; j++)
+        ths->f[j] += ths->act_nfft_plan->f[j] *
+                     cexp( - I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+      sum_N_B_less_r+=6*N_B_r;
+    } /* for(rr) */
+} /* void nsfft_trafo_3d */
+
+static void nsfft_adjoint_3d(nsfft_plan *ths)
+{
+  int r,rr,j;
+  double temp;
+  int sum_N_B_less_r,N_B_r,a,b;
+
+  int M=ths->M_total;
+  int J=ths->J;
+
+  /* center */
+  for (j=0; j<M; j++)
+    ths->center_nfft_plan->f[j] = ths->f[j];
+
+  ths->center_nfft_plan->f_hat=ths->f_hat+6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1);
+
+  if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+    nfft_adjoint_direct(ths->center_nfft_plan);
+  else
+    nfft_adjoint(ths->center_nfft_plan);
+
+  sum_N_B_less_r=0;
+  for(rr=0;rr<=(J+1)/2;rr++)
+    {
+      a=X(exp2i)(J-rr);
+      b=X(exp2i)(rr);
+
+      N_B_r=a*b*b;
+
+      r=NFFT_MIN(rr,J-rr);
+      ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[rr];
+      ths->act_nfft_plan->my_fftw_plan2 = ths->set_fftw_plan2[rr];
+
+      ths->act_nfft_plan->N[0]=X(exp2i)(r);
+      if(a<b)
+	ths->act_nfft_plan->N[1]=X(exp2i)(J-r);
+      else
+	ths->act_nfft_plan->N[1]=X(exp2i)(r);
+      ths->act_nfft_plan->N[2]=X(exp2i)(J-r);
+
+      /*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/
+
+      ths->act_nfft_plan->N_total=ths->act_nfft_plan->N[0]*ths->act_nfft_plan->N[1]*ths->act_nfft_plan->N[2];
+      ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+      ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+      ths->act_nfft_plan->n[2]=ths->sigma*ths->act_nfft_plan->N[2];
+      ths->act_nfft_plan->n_total=ths->act_nfft_plan->n[0]*ths->act_nfft_plan->n[1]*ths->act_nfft_plan->n[2];
+
+      /* only for right - rear - top */
+      if((J==0)||((J==1)&&(rr==1)))
+	temp=-2.0*PI;
+      else
+	temp=-3.0*PI*X(exp2i)(J-rr);
+
+      /* right */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*0;
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( - I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_adjoint_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      /* rear */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*1;
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( - I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_adjoint_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      /* top */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*2;
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( - I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_adjoint_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      /* only for left - front - bottom */
+      if((J==0)||((J==1)&&(rr==1)))
+	temp=-4.0*PI;
+      else
+	temp=-3.0*PI*X(exp2i)(J-rr);
+
+      /* left */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*3;
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_adjoint_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+      /* front */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*4;
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_adjoint_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(a>b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+      /* bottom */
+      ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*5;
+
+      for (j=0; j<M; j++)
+        ths->act_nfft_plan->f[j]= ths->f[j] *
+                                  cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+	  if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+	    nfft_adjoint_direct(ths->act_nfft_plan);
+	  else
+	    short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+	else
+	  short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+      else
+	nfft_adjoint(ths->act_nfft_plan);
+
+      if(a<b)
+	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+      sum_N_B_less_r+=6*N_B_r;
+    } /* for(rr) */
+} /* void nsfft_adjoint_3d */
+
+void nsfft_trafo(nsfft_plan *ths)
+{
+  if(ths->d==2)
+    nsfft_trafo_2d(ths);
+  else
+    nsfft_trafo_3d(ths);
+}
+
+void nsfft_adjoint(nsfft_plan *ths)
+{
+  if(ths->d==2)
+    nsfft_adjoint_2d(ths);
+  else
+    nsfft_adjoint_3d(ths);
+}
+
+
+/*========================================================*/
+/* J >1, no precomputation at all!! */
+#ifdef GAUSSIAN
+static void nsfft_init_2d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_flags)
+{
+  int r;
+  int N[2];
+  int n[2];
+
+  ths->flags=snfft_flags;
+  ths->sigma=2;
+  ths->J=J;
+  ths->M_total=M;
+  ths->N_total=(J+4)*X(exp2i)(J+1);
+
+  /* memory allocation */
+  ths->f = (double _Complex *)nfft_malloc(M*sizeof(double _Complex));
+  ths->f_hat = (double _Complex *)nfft_malloc(ths->N_total*sizeof(double _Complex));
+  ths->x_transposed= (double*)nfft_malloc(2*M*sizeof(double));
+
+  ths->act_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+  ths->center_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+
+  ths->set_fftw_plan1=(fftw_plan*) nfft_malloc((J/2+1)*sizeof(fftw_plan));
+  ths->set_fftw_plan2=(fftw_plan*) nfft_malloc((J/2+1)*sizeof(fftw_plan));
+
+  ths->set_nfft_plan_1d = (nfft_plan*) nfft_malloc((X(log2i)(m)+1)*(sizeof(nfft_plan)));
+
+  /* planning the small nffts */
+  /* r=0 */
+  N[0]=1;            n[0]=ths->sigma*N[0];
+  N[1]=X(exp2i)(J); n[1]=ths->sigma*N[1];
+
+  nfft_init_guru(ths->act_nfft_plan,2,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+
+  if(ths->act_nfft_plan->nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(ths->act_nfft_plan);
+
+  ths->set_fftw_plan1[0]=ths->act_nfft_plan->my_fftw_plan1;
+  ths->set_fftw_plan2[0]=ths->act_nfft_plan->my_fftw_plan2;
+
+  for(r=1;r<=J/2;r++)
+    {
+      N[0]=X(exp2i)(r);   n[0]=ths->sigma*N[0];
+      N[1]=X(exp2i)(J-r); n[1]=ths->sigma*N[1];
+      ths->set_fftw_plan1[r] =
+	fftw_plan_dft(2, n, ths->act_nfft_plan->g1, ths->act_nfft_plan->g2,
+		      FFTW_FORWARD, ths->act_nfft_plan->fftw_flags);
+
+      ths->set_fftw_plan2[r] =
+	fftw_plan_dft(2, n, ths->act_nfft_plan->g2, ths->act_nfft_plan->g1,
+		      FFTW_BACKWARD, ths->act_nfft_plan->fftw_flags);
+    }
+
+  /* planning the 1d nffts */
+  for(r=0;r<=X(log2i)(m);r++)
+    {
+      N[0]=X(exp2i)(J-r); n[0]=ths->sigma*N[0]; /* ==N[1] of the 2 dimensional plan */
+
+      nfft_init_guru(&(ths->set_nfft_plan_1d[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+      ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags | FG_PSI;
+      ths->set_nfft_plan_1d[r].K=ths->act_nfft_plan->K;
+      ths->set_nfft_plan_1d[r].psi=ths->act_nfft_plan->psi;
+    }
+
+  /* center plan */
+  /* J/2 == floor(((double)J) / 2.0) */
+  N[0]=X(exp2i)(J/2+1); n[0]=ths->sigma*N[0];
+  N[1]=X(exp2i)(J/2+1); n[1]=ths->sigma*N[1];
+  nfft_init_guru(ths->center_nfft_plan,2,N,M,n, m, MALLOC_F| FFTW_INIT,
+                     FFTW_MEASURE);
+  ths->center_nfft_plan->x= ths->act_nfft_plan->x;
+  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags|
+                                      FG_PSI;
+  ths->center_nfft_plan->K=ths->act_nfft_plan->K;
+  ths->center_nfft_plan->psi=ths->act_nfft_plan->psi;
+
+  if(ths->flags & NSDFT)
+    {
+      ths->index_sparse_to_full=(int*)nfft_malloc(ths->N_total*sizeof(int));
+      init_index_sparse_to_full_2d(ths);
+    }
+}
+#endif
+
+/*========================================================*/
+/* J >1, no precomputation at all!! */
+#ifdef GAUSSIAN
+static void nsfft_init_3d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_flags)
+{
+  int r,rr,a,b;
+  int N[3];
+  int n[3];
+
+  ths->flags=snfft_flags;
+  ths->sigma=2;
+  ths->J=J;
+  ths->M_total=M;
+  ths->N_total=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));
+
+  /* memory allocation */
+  ths->f =     (double _Complex *)nfft_malloc(M*sizeof(double _Complex));
+  ths->f_hat = (double _Complex *)nfft_malloc(ths->N_total*sizeof(double _Complex));
+
+  ths->x_102= (double*)nfft_malloc(3*M*sizeof(double));
+  ths->x_201= (double*)nfft_malloc(3*M*sizeof(double));
+  ths->x_120= (double*)nfft_malloc(3*M*sizeof(double));
+  ths->x_021= (double*)nfft_malloc(3*M*sizeof(double));
+
+  ths->act_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+  ths->center_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+
+  ths->set_fftw_plan1=(fftw_plan*) nfft_malloc(((J+1)/2+1)*sizeof(fftw_plan));
+  ths->set_fftw_plan2=(fftw_plan*) nfft_malloc(((J+1)/2+1)*sizeof(fftw_plan));
+
+  ths->set_nfft_plan_1d = (nfft_plan*) nfft_malloc((X(log2i)(m)+1)*(sizeof(nfft_plan)));
+  ths->set_nfft_plan_2d = (nfft_plan*) nfft_malloc((X(log2i)(m)+1)*(sizeof(nfft_plan)));
+
+  /* planning the small nffts */
+  /* r=0 */
+  N[0]=1;            n[0]=ths->sigma*N[0];
+  N[1]=1;            n[1]=ths->sigma*N[1];
+  N[2]=X(exp2i)(J); n[2]=ths->sigma*N[2];
+
+  nfft_init_guru(ths->act_nfft_plan,3,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F, FFTW_MEASURE);
+
+  if(ths->act_nfft_plan->nfft_flags & PRE_ONE_PSI)
+    nfft_precompute_one_psi(ths->act_nfft_plan);
+
+  /* malloc g1, g2 for maximal size */
+  ths->act_nfft_plan->g1 = nfft_malloc(ths->sigma*ths->sigma*ths->sigma*X(exp2i)(J+(J+1)/2)*sizeof(double _Complex));
+  ths->act_nfft_plan->g2 = nfft_malloc(ths->sigma*ths->sigma*ths->sigma*X(exp2i)(J+(J+1)/2)*sizeof(double _Complex));
+
+  ths->act_nfft_plan->my_fftw_plan1 =
+    fftw_plan_dft(3, n, ths->act_nfft_plan->g1, ths->act_nfft_plan->g2,
+		  FFTW_FORWARD, ths->act_nfft_plan->fftw_flags);
+  ths->act_nfft_plan->my_fftw_plan2 =
+    fftw_plan_dft(3, n, ths->act_nfft_plan->g2, ths->act_nfft_plan->g1,
+		  FFTW_BACKWARD, ths->act_nfft_plan->fftw_flags);
+
+  ths->set_fftw_plan1[0]=ths->act_nfft_plan->my_fftw_plan1;
+  ths->set_fftw_plan2[0]=ths->act_nfft_plan->my_fftw_plan2;
+
+  for(rr=1;rr<=(J+1)/2;rr++)
+    {
+      a=X(exp2i)(J-rr);
+      b=X(exp2i)(rr);
+
+      r=NFFT_MIN(rr,J-rr);
+
+      n[0]=ths->sigma*X(exp2i)(r);
+      if(a<b)
+	n[1]=ths->sigma*X(exp2i)(J-r);
+      else
+	n[1]=ths->sigma*X(exp2i)(r);
+      n[2]=ths->sigma*X(exp2i)(J-r);
+
+      ths->set_fftw_plan1[rr] =
+	fftw_plan_dft(3, n, ths->act_nfft_plan->g1, ths->act_nfft_plan->g2,
+		      FFTW_FORWARD, ths->act_nfft_plan->fftw_flags);
+      ths->set_fftw_plan2[rr] =
+	fftw_plan_dft(3, n, ths->act_nfft_plan->g2, ths->act_nfft_plan->g1,
+		      FFTW_BACKWARD, ths->act_nfft_plan->fftw_flags);
+    }
+
+  /* planning the 1d nffts */
+  for(r=0;r<=X(log2i)(m);r++)
+    {
+      N[0]=X(exp2i)(J-r); n[0]=ths->sigma*N[0];
+      N[1]=X(exp2i)(J-r); n[1]=ths->sigma*N[1];
+
+      if(N[0]>m)
+	{
+	  nfft_init_guru(&(ths->set_nfft_plan_1d[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+	  ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags | FG_PSI;
+	  ths->set_nfft_plan_1d[r].K=ths->act_nfft_plan->K;
+	  ths->set_nfft_plan_1d[r].psi=ths->act_nfft_plan->psi;
+	  nfft_init_guru(&(ths->set_nfft_plan_2d[r]),2,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+	  ths->set_nfft_plan_2d[r].nfft_flags = ths->set_nfft_plan_2d[r].nfft_flags | FG_PSI;
+	  ths->set_nfft_plan_2d[r].K=ths->act_nfft_plan->K;
+	  ths->set_nfft_plan_2d[r].psi=ths->act_nfft_plan->psi;
+	}
+    }
+
+  /* center plan */
+  /* J/2 == floor(((double)J) / 2.0) */
+  N[0]=X(exp2i)(J/2+1); n[0]=ths->sigma*N[0];
+  N[1]=X(exp2i)(J/2+1); n[1]=ths->sigma*N[1];
+  N[2]=X(exp2i)(J/2+1); n[2]=ths->sigma*N[2];
+  nfft_init_guru(ths->center_nfft_plan,3,N,M,n, m, MALLOC_F| FFTW_INIT,
+                     FFTW_MEASURE);
+  ths->center_nfft_plan->x= ths->act_nfft_plan->x;
+  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags|
+                                      FG_PSI;
+  ths->center_nfft_plan->K=ths->act_nfft_plan->K;
+  ths->center_nfft_plan->psi=ths->act_nfft_plan->psi;
+
+  if(ths->flags & NSDFT)
+    {
+      ths->index_sparse_to_full=(int*)nfft_malloc(ths->N_total*sizeof(int));
+      init_index_sparse_to_full_3d(ths);
+    }
+}
+#endif
+
+#ifdef GAUSSIAN
+void nsfft_init(nsfft_plan *ths, int d, int J, int M, int m, unsigned flags)
+{
+  ths->d=d;
+
+  if(ths->d==2)
+    nsfft_init_2d(ths, J, M, m, flags);
+  else
+    nsfft_init_3d(ths, J, M, m, flags);
+
+
+  ths->mv_trafo = (void (*) (void* ))nsfft_trafo;
+  ths->mv_adjoint = (void (*) (void* ))nsfft_adjoint;
+}
+#else
+void nsfft_init(nsfft_plan *ths, int d, int J, int M, int m, unsigned flags)
+{
+  UNUSED(ths);
+  UNUSED(d);
+  UNUSED(J);
+  UNUSED(M);
+  UNUSED(m);
+  UNUSED(flags);
+  fprintf(stderr,
+	  "\nError in kernel/nsfft_init: require GAUSSIAN window function\n");
+}
+#endif
+
+static void nsfft_finalize_2d(nsfft_plan *ths)
+{
+  int r;
+
+  if(ths->flags & NSDFT)
+    nfft_free(ths->index_sparse_to_full);
+
+  /* center plan */
+  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags ^ FG_PSI;
+  nfft_finalize(ths->center_nfft_plan);
+
+  /* the 1d nffts */
+  for(r=0;r<=X(log2i)(ths->act_nfft_plan->m);r++)
+    {
+      ths->set_nfft_plan_1d[r].nfft_flags =
+        ths->set_nfft_plan_1d[r].nfft_flags ^ FG_PSI;
+      nfft_finalize(&(ths->set_nfft_plan_1d[r]));
+    }
+
+  /* finalize the small nffts */
+  ths->act_nfft_plan->my_fftw_plan2=ths->set_fftw_plan2[0];
+  ths->act_nfft_plan->my_fftw_plan1=ths->set_fftw_plan1[0];
+
+  for(r=1;r<=ths->J/2;r++)
+    {
+      fftw_destroy_plan(ths->set_fftw_plan2[r]);
+      fftw_destroy_plan(ths->set_fftw_plan1[r]);
+    }
+
+  /* r=0 */
+  nfft_finalize(ths->act_nfft_plan);
+
+  nfft_free(ths->set_nfft_plan_1d);
+
+  nfft_free(ths->set_fftw_plan2);
+  nfft_free(ths->set_fftw_plan1);
+
+  nfft_free(ths->x_transposed);
+
+  nfft_free(ths->f_hat);
+  nfft_free(ths->f);
+}
+
+static void nsfft_finalize_3d(nsfft_plan *ths)
+{
+  int r;
+
+  if(ths->flags & NSDFT)
+    nfft_free(ths->index_sparse_to_full);
+
+  /* center plan */
+  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags ^ FG_PSI;
+  nfft_finalize(ths->center_nfft_plan);
+
+  /* the 1d and 2d nffts */
+  for(r=0;r<=X(log2i)(ths->act_nfft_plan->m);r++)
+    {
+      if(X(exp2i)(ths->J-r)>ths->act_nfft_plan->m)
+	{
+	  ths->set_nfft_plan_2d[r].nfft_flags = ths->set_nfft_plan_2d[r].nfft_flags ^ FG_PSI;
+	  nfft_finalize(&(ths->set_nfft_plan_2d[r]));
+	  ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags ^ FG_PSI;
+	  nfft_finalize(&(ths->set_nfft_plan_1d[r]));
+	}
+    }
+
+  /* finalize the small nffts */
+  ths->act_nfft_plan->my_fftw_plan2=ths->set_fftw_plan2[0];
+  ths->act_nfft_plan->my_fftw_plan1=ths->set_fftw_plan1[0];
+
+  for(r=1;r<=(ths->J+1)/2;r++)
+    {
+      fftw_destroy_plan(ths->set_fftw_plan2[r]);
+      fftw_destroy_plan(ths->set_fftw_plan1[r]);
+    }
+
+  /* r=0 */
+  nfft_finalize(ths->act_nfft_plan);
+
+  nfft_free(ths->set_nfft_plan_1d);
+  nfft_free(ths->set_nfft_plan_2d);
+
+  nfft_free(ths->set_fftw_plan2);
+  nfft_free(ths->set_fftw_plan1);
+
+  nfft_free(ths->x_102);
+  nfft_free(ths->x_201);
+  nfft_free(ths->x_120);
+  nfft_free(ths->x_021);
+
+  nfft_free(ths->f_hat);
+  nfft_free(ths->f);
+}
+
+void nsfft_finalize(nsfft_plan *ths)
+{
+  if(ths->d==2)
+    nsfft_finalize_2d(ths);
+  else
+    nsfft_finalize_3d(ths);
+}
diff --git a/kernel/solver/Makefile.am b/kernel/solver/Makefile.am
new file mode 100644
index 0000000..9f8e9d5
--- /dev/null
+++ b/kernel/solver/Makefile.am
@@ -0,0 +1,4 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libsolver.la
+libsolver_la_SOURCES = solver.c
diff --git a/kernel/solver/Makefile.in b/kernel/solver/Makefile.in
new file mode 100644
index 0000000..d3050ee
--- /dev/null
+++ b/kernel/solver/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/solver
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsolver_la_LIBADD =
+am_libsolver_la_OBJECTS = solver.lo
+libsolver_la_OBJECTS = $(am_libsolver_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libsolver_la_SOURCES)
+DIST_SOURCES = $(libsolver_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libsolver.la
+libsolver_la_SOURCES = solver.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/solver/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/solver/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libsolver.la: $(libsolver_la_OBJECTS) $(libsolver_la_DEPENDENCIES) $(EXTRA_libsolver_la_DEPENDENCIES) 
+	$(LINK)  $(libsolver_la_OBJECTS) $(libsolver_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/solver.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/solver/solver.c b/kernel/solver/solver.c
new file mode 100644
index 0000000..1b48c0e
--- /dev/null
+++ b/kernel/solver/solver.c
@@ -0,0 +1,728 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: solver.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file solver.c
+ *  \brief Implementation file for the solver module
+ *  \author Stefan Kunis
+ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+
+void solver_init_advanced_complex(solver_plan_complex* ths, nfft_mv_plan_complex *mv, unsigned flags)
+{
+  ths->mv = mv;
+  ths->flags = flags;
+
+  ths->y          = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+  ths->r_iter     = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+  ths->f_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+  ths->p_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+
+  if(ths->flags & LANDWEBER)
+    ths->z_hat_iter = ths->p_hat_iter;
+
+  if(ths->flags & STEEPEST_DESCENT)
+    {
+      ths->z_hat_iter = ths->p_hat_iter;
+      ths->v_iter     = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+    }
+
+  if(ths->flags & CGNR)
+    {
+      ths->z_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+      ths->v_iter     = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+    }
+
+  if(ths->flags & CGNE)
+    ths->z_hat_iter = ths->p_hat_iter;
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->w = (double*) nfft_malloc(ths->mv->M_total*sizeof(double));
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->w_hat = (double*) nfft_malloc(ths->mv->N_total*sizeof(double));
+}
+
+void solver_init_complex(solver_plan_complex* ths, nfft_mv_plan_complex *mv)
+{
+  solver_init_advanced_complex(ths, mv, CGNR);
+}
+
+void solver_before_loop_complex(solver_plan_complex* ths)
+{
+  nfft_cp_complex(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_complex(ths->r_iter, ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_complex(ths->r_iter, ths->mv->f);
+
+  nfft_upd_axpy_complex(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+  if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+    {
+      if(ths->flags & PRECOMPUTE_WEIGHT)
+	ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter, ths->w,
+					     ths->mv->M_total);
+      else
+	ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+    }
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_complex(ths->z_hat_iter, ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_complex(ths->z_hat_iter, ths->mv->f_hat);
+
+  if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+    {
+      if(ths->flags & PRECOMPUTE_DAMP)
+	ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+						 ths->mv->N_total);
+      else
+	ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter,
+					       ths->mv->N_total);
+    }
+
+  if(ths->flags & CGNE)
+    ths->dot_p_hat_iter = ths->dot_z_hat_iter;
+
+  if(ths->flags & CGNR)
+    nfft_cp_complex(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_before_loop */
+
+/** void solver_loop_one_step_landweber */
+static void solver_loop_one_step_landweber_complex(solver_plan_complex* ths)
+{
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->z_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+			  ths->mv->N_total);
+
+  /*-----------------*/
+  nfft_cp_complex(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_complex(ths->r_iter,ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_complex(ths->r_iter,ths->mv->f);
+
+  nfft_upd_axpy_complex(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+  if(ths->flags & NORMS_FOR_LANDWEBER)
+    {
+      if(ths->flags & PRECOMPUTE_WEIGHT)
+	ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,
+					     ths->mv->M_total);
+      else
+	ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+    }
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+
+  if(ths->flags & NORMS_FOR_LANDWEBER)
+    {
+      if(ths->flags & PRECOMPUTE_DAMP)
+	ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+						 ths->mv->N_total);
+      else
+	ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter,
+					       ths->mv->N_total);
+    }
+} /* void solver_loop_one_step_landweber */
+
+/** void solver_loop_one_step_steepest_descent */
+static void solver_loop_one_step_steepest_descent_complex(solver_plan_complex *ths)
+{
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
+		      ths->mv->N_total);
+  else
+    nfft_cp_complex(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_v_iter = nfft_dot_w_complex(ths->v_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_v_iter = nfft_dot_complex(ths->v_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->z_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+			  ths->mv->N_total);
+
+  /*-----------------*/
+  nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+			ths->mv->M_total);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+					     ths->mv->N_total);
+  else
+    ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_steepest_descent */
+
+/** void solver_loop_one_step_cgnr */
+static void solver_loop_one_step_cgnr_complex(solver_plan_complex *ths)
+{
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+		      ths->mv->N_total);
+  else
+    nfft_cp_complex(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_v_iter = nfft_dot_w_complex(ths->v_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_v_iter = nfft_dot_complex(ths->v_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->p_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+			  ths->mv->N_total);
+
+  /*-----------------*/
+  nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+			ths->mv->M_total);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+
+  ths->dot_z_hat_iter_old = ths->dot_z_hat_iter;
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+					     ths->mv->N_total);
+  else
+    ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter, ths->mv->N_total);
+
+  /*-----------------*/
+  ths->beta_iter = ths->dot_z_hat_iter / ths->dot_z_hat_iter_old;
+
+  /*-----------------*/
+  nfft_upd_axpy_complex(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
+			ths->mv->N_total);
+} /* void solver_loop_one_step_cgnr */
+
+/** void solver_loop_one_step_cgne */
+static void solver_loop_one_step_cgne_complex(solver_plan_complex *ths)
+{
+  ths->alpha_iter = ths->dot_r_iter / ths->dot_p_hat_iter;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->p_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+                          ths->mv->N_total);
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+		      ths->mv->N_total);
+  else
+    nfft_cp_complex(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+  ths->mv->mv_trafo(ths->mv);
+
+  nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->mv->f,
+			ths->mv->M_total);
+
+  ths->dot_r_iter_old = ths->dot_r_iter;
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  ths->beta_iter = ths->dot_r_iter / ths->dot_r_iter_old;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  ths->mv->mv_adjoint(ths->mv);
+
+  nfft_upd_axpy_complex(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
+			ths->mv->N_total);
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->dot_p_hat_iter = nfft_dot_w_complex(ths->p_hat_iter, ths->w_hat,
+					     ths->mv->N_total);
+  else
+    ths->dot_p_hat_iter = nfft_dot_complex(ths->p_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_cgne */
+
+/** void solver_loop_one_step */
+void solver_loop_one_step_complex(solver_plan_complex *ths)
+{
+  if(ths->flags & LANDWEBER)
+    solver_loop_one_step_landweber_complex(ths);
+
+  if(ths->flags & STEEPEST_DESCENT)
+    solver_loop_one_step_steepest_descent_complex(ths);
+
+  if(ths->flags & CGNR)
+    solver_loop_one_step_cgnr_complex(ths);
+
+  if(ths->flags & CGNE)
+    solver_loop_one_step_cgne_complex(ths);
+} /* void solver_loop_one_step */
+
+/** void solver_finalize */
+void solver_finalize_complex(solver_plan_complex *ths)
+{
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_free(ths->w);
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_free(ths->w_hat);
+
+  if(ths->flags & CGNR)
+    {
+      nfft_free(ths->v_iter);
+      nfft_free(ths->z_hat_iter);
+    }
+
+  if(ths->flags & STEEPEST_DESCENT)
+    nfft_free(ths->v_iter);
+
+  nfft_free(ths->p_hat_iter);
+  nfft_free(ths->f_hat_iter);
+
+  nfft_free(ths->r_iter);
+  nfft_free(ths->y);
+} /** void solver_finalize */
+
+
+/****************************************************************************/
+/****************************************************************************/
+/****************************************************************************/
+
+void solver_init_advanced_double(solver_plan_double* ths, nfft_mv_plan_double *mv, unsigned flags)
+{
+  ths->mv = mv;
+  ths->flags = flags;
+
+  ths->y          = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+  ths->r_iter     = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+  ths->f_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+  ths->p_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+
+  if(ths->flags & LANDWEBER)
+    ths->z_hat_iter = ths->p_hat_iter;
+
+  if(ths->flags & STEEPEST_DESCENT)
+    {
+      ths->z_hat_iter = ths->p_hat_iter;
+      ths->v_iter     = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+    }
+
+  if(ths->flags & CGNR)
+    {
+      ths->z_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+      ths->v_iter     = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+    }
+
+  if(ths->flags & CGNE)
+    ths->z_hat_iter = ths->p_hat_iter;
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->w = (double*) nfft_malloc(ths->mv->M_total*sizeof(double));
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->w_hat = (double*) nfft_malloc(ths->mv->N_total*sizeof(double));
+}
+
+static void solver_init_double(solver_plan_double* ths, nfft_mv_plan_double *mv)
+{
+  solver_init_advanced_double(ths, mv, CGNR);
+}
+
+static void solver_before_loop_double(solver_plan_double* ths)
+{
+  nfft_cp_double(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_double(ths->r_iter, ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_double(ths->r_iter, ths->mv->f);
+
+  nfft_upd_axpy_double(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+  if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+    {
+      if(ths->flags & PRECOMPUTE_WEIGHT)
+	ths->dot_r_iter = nfft_dot_w_double(ths->r_iter, ths->w,
+					     ths->mv->M_total);
+      else
+	ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+    }
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_double(ths->z_hat_iter, ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_double(ths->z_hat_iter, ths->mv->f_hat);
+
+  if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+    {
+      if(ths->flags & PRECOMPUTE_DAMP)
+	ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+						 ths->mv->N_total);
+      else
+	ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter,
+					       ths->mv->N_total);
+    }
+
+  if(ths->flags & CGNE)
+    ths->dot_p_hat_iter = ths->dot_z_hat_iter;
+
+  if(ths->flags & CGNR)
+    nfft_cp_double(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_before_loop */
+
+/** void solver_loop_one_step_landweber */
+static void solver_loop_one_step_landweber_double(solver_plan_double* ths)
+{
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->z_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+			  ths->mv->N_total);
+
+  /*-----------------*/
+  nfft_cp_double(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_double(ths->r_iter,ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_double(ths->r_iter,ths->mv->f);
+
+  nfft_upd_axpy_double(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+  if(ths->flags & NORMS_FOR_LANDWEBER)
+    {
+      if(ths->flags & PRECOMPUTE_WEIGHT)
+	ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,
+					     ths->mv->M_total);
+      else
+	ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+    }
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+
+  if(ths->flags & NORMS_FOR_LANDWEBER)
+    {
+      if(ths->flags & PRECOMPUTE_DAMP)
+	ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+						 ths->mv->N_total);
+      else
+	ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter,
+					       ths->mv->N_total);
+    }
+} /* void solver_loop_one_step_landweber */
+
+/** void solver_loop_one_step_steepest_descent */
+static void solver_loop_one_step_steepest_descent_double(solver_plan_double *ths)
+{
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
+		      ths->mv->N_total);
+  else
+    nfft_cp_double(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_v_iter = nfft_dot_w_double(ths->v_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_v_iter = nfft_dot_double(ths->v_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->z_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+			  ths->mv->N_total);
+
+  /*-----------------*/
+  nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+			ths->mv->M_total);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+					     ths->mv->N_total);
+  else
+    ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_steepest_descent */
+
+/** void solver_loop_one_step_cgnr */
+static void solver_loop_one_step_cgnr_double(solver_plan_double *ths)
+{
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+		      ths->mv->N_total);
+  else
+    nfft_cp_double(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+  ths->mv->mv_trafo(ths->mv);
+  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_v_iter = nfft_dot_w_double(ths->v_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_v_iter = nfft_dot_double(ths->v_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->p_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+			  ths->mv->N_total);
+
+  /*-----------------*/
+  nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+			ths->mv->M_total);
+
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  ths->mv->mv_adjoint(ths->mv);
+  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+
+  ths->dot_z_hat_iter_old = ths->dot_z_hat_iter;
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+					     ths->mv->N_total);
+  else
+    ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter, ths->mv->N_total);
+
+  /*-----------------*/
+  ths->beta_iter = ths->dot_z_hat_iter / ths->dot_z_hat_iter_old;
+
+  /*-----------------*/
+  nfft_upd_axpy_double(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
+			ths->mv->N_total);
+} /* void solver_loop_one_step_cgnr */
+
+/** void solver_loop_one_step_cgne */
+static void solver_loop_one_step_cgne_double(solver_plan_double *ths)
+{
+  ths->alpha_iter = ths->dot_r_iter / ths->dot_p_hat_iter;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+			   ths->p_hat_iter, ths->mv->N_total);
+  else
+    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+                          ths->mv->N_total);
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+		      ths->mv->N_total);
+  else
+    nfft_cp_double(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+  ths->mv->mv_trafo(ths->mv);
+
+  nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->mv->f,
+			ths->mv->M_total);
+
+  ths->dot_r_iter_old = ths->dot_r_iter;
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+  else
+    ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+
+  /*-----------------*/
+  ths->beta_iter = ths->dot_r_iter / ths->dot_r_iter_old;
+
+  /*-----------------*/
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+  else
+    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+  ths->mv->mv_adjoint(ths->mv);
+
+  nfft_upd_axpy_double(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
+			ths->mv->N_total);
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    ths->dot_p_hat_iter = nfft_dot_w_double(ths->p_hat_iter, ths->w_hat,
+					     ths->mv->N_total);
+  else
+    ths->dot_p_hat_iter = nfft_dot_double(ths->p_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_cgne */
+
+/** void solver_loop_one_step */
+static void solver_loop_one_step_double(solver_plan_double *ths)
+{
+  if(ths->flags & LANDWEBER)
+    solver_loop_one_step_landweber_double(ths);
+
+  if(ths->flags & STEEPEST_DESCENT)
+    solver_loop_one_step_steepest_descent_double(ths);
+
+  if(ths->flags & CGNR)
+    solver_loop_one_step_cgnr_double(ths);
+
+  if(ths->flags & CGNE)
+    solver_loop_one_step_cgne_double(ths);
+} /* void solver_loop_one_step */
+
+/** void solver_finalize */
+static void solver_finalize_double(solver_plan_double *ths)
+{
+  if(ths->flags & PRECOMPUTE_WEIGHT)
+    nfft_free(ths->w);
+
+  if(ths->flags & PRECOMPUTE_DAMP)
+    nfft_free(ths->w_hat);
+
+  if(ths->flags & CGNR)
+    {
+      nfft_free(ths->v_iter);
+      nfft_free(ths->z_hat_iter);
+    }
+
+  if(ths->flags & STEEPEST_DESCENT)
+    nfft_free(ths->v_iter);
+
+  nfft_free(ths->p_hat_iter);
+  nfft_free(ths->f_hat_iter);
+
+  nfft_free(ths->r_iter);
+  nfft_free(ths->y);
+} /** void solver_finalize */
diff --git a/kernel/util/Makefile.am b/kernel/util/Makefile.am
new file mode 100644
index 0000000..fb5ad82
--- /dev/null
+++ b/kernel/util/Makefile.am
@@ -0,0 +1,4 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libutil.la
+libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c
\ No newline at end of file
diff --git a/kernel/util/Makefile.in b/kernel/util/Makefile.in
new file mode 100644
index 0000000..b7c5ce1
--- /dev/null
+++ b/kernel/util/Makefile.in
@@ -0,0 +1,560 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/util
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libutil_la_LIBADD =
+am_libutil_la_OBJECTS = malloc.lo sinc.lo lambda.lo bessel_i0.lo \
+	float.lo int.lo error.lo
+libutil_la_OBJECTS = $(am_libutil_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libutil_la_SOURCES)
+DIST_SOURCES = $(libutil_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libutil.la
+libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/util/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu kernel/util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES) 
+	$(LINK)  $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bessel_i0.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/error.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/float.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/int.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lambda.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/malloc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sinc.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/util/bessel_i0.c b/kernel/util/bessel_i0.c
new file mode 100644
index 0000000..898526c
--- /dev/null
+++ b/kernel/util/bessel_i0.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+#if defined(NFFT_LDOUBLE)
+  #if LDBL_MANT_DIG > 64
+    /* long double 128 bit wide */
+    static const R P1[] =
+    {
+        K(1.00715709113717408460589579223209941204261347125985390244049122),
+        K(0.244951997023176876020320575838917179801959212259109588711443322),
+        K(0.007157677421552158878119583351756319398653762265084335703499437),
+        K(0.000088638803372684623765617528646130117285577351082745565226135),
+        K(5.86290506716174293160891590037213629006472953235560773267e-7),
+        K(2.345957469650316879673588315314269880856753475545514611e-9),
+        K(6.128655873200031753345017339110506400750029700912053e-12),
+        K(1.0986892011606471142197070904902679807307454250063e-14),
+        K(1.3971139352985872209413265761909675621623302845e-17),
+        K(1.2871864763402201040551492995178709443354555e-20),
+        K(8.691006015934819586402366491436791599814e-24),
+        K(4.309390047550403478410330783891146603e-27),
+        K(1.555612957227921944637472907134242e-30),
+        K(3.9925388022711127965090640127e-34),
+        K(6.9368410036374068977799409e-38),
+        K(7.357454531748581565018e-42),
+        K(3.62204101214442072e-46),
+    };
+    static const R Q1[] =
+    {
+        K(1.000007070784273109528051454385187718969110645914059499666326971665),
+        K(-0.005313926453449002844879821442805584438144938596471790433918964154),
+        K(7.070788418542362565462155969863941136682888242514039780835548e-6),
+        K(-6.26540971437695808708857953483635930152829451235344028056e-9),
+        K(4.145433773149898726789014352388133793941127788810021957e-12),
+        K(-2.175603200497645955857316018087216481968512641548262e-15),
+        K(9.38635995876117135738708302122439402494096616172e-19),
+        K(-3.40237206590514988600833435986797066144532635e-22),
+        K(1.04920116497922307284730776882365699575587e-25),
+        K(-2.7669765371483918815184949580784634161e-29),
+        K(6.231564149372584873279011515844227e-33),
+        K(-1.188050982913851622946881814029e-36),
+        K(1.88293159106694034780937099e-40),
+        K(-2.4019827304263718078055e-44),
+        K(2.329008315410200325e-48),
+        K(-1.5351885198203e-52),
+        K(5.185989964e-57),
+    };
+    static const R P2[] =
+    {
+      K( 131.0667020533290798466779416062094395070734202211890460026693857),
+      K(-245.6303545941878773983069709370348347580041325639555236454969282),
+      K( 204.5101554148308448423458719550952945685069457114308003995567211),
+      K(-150.5327320302921153754033870344894598759293143264072490756636477),
+      K( 98.7912567249134681293252237328232822188103014960829409778733265),
+      K(-57.7019241687318590480852440271548151666166507997357208465833492),
+      K( 30.1081598594932287475081756049550869990287890532877175670317803),
+      K(-14.0088712491952531569334147267018927351724433165829632848926311),
+      K( 5.8111909743388254524987383393719023598144356156326152933831237),
+      K(-2.1414136626793476610653760169160704073350780611789294609123711),
+      K( 0.698259559703142895902111022926235616592885506170181809796723),
+      K(-0.2001189347807367129846000381714457873845590394096920427488356),
+      K( 0.049988621846192684047867347253361546337456980171441178625268),
+      K(-0.0107553807128048320349112565182564637746370430259714241685807),
+      K( 0.0019628478791093008488874963820323167136472914702684286586238),
+      K(-0.0002975064821201439959012839810796951490827490578144599267114),
+      K( 0.0000363948822068787975159479880539390140326476204059270500102),
+      K(-3.4500354506312803346122587812035952285744626406680126004e-6),
+      K( 2.389194163273735466736165111640837640682648262451843124e-7),
+      K(-1.10522228579658847710719851107420853059835206797979003e-8),
+      K( 2.998585735858447897961231663140456464729911623332484e-10),
+      K(-3.9833617558882606404645795329229040634928477778665e-12),
+      K( 1.92588438006565847602499920031655017544553574078e-14),
+      K(-1.53988141966712757209882685942469734803820881e-17)
+    };
+    static const R Q2[] =
+    {
+      K(328.4489907350967829456654595549647170421869780143590268003242948),
+      K(-615.575319575198219705670766725559477112082560070865403723416427),
+      K(512.563661235514015228169012911053008163272899480360140632585558),
+      K(-377.3415411557897134242242685951784724031156711312221525972796826),
+      K(247.6887960380354072297631204916926385047383091206925653242453925),
+      K(-144.7079367047916629699737294050207521413589574809430211064537016),
+      K(75.5300501439366128901130531145623549019791219037305096822646727),
+      K(-35.1562871183824787711155827433330019401972267325168728838283815),
+      K(14.5900995053625141158588399870084373879991873744753473985888771),
+      K(-5.3793167684795558315535956122846115342243771791771104555817078),
+      K(1.7551860916884001665224751521627837644140913167505738803593836),
+      K(-0.5034275191915128601243198185547065251560284487106213345738464),
+      K(0.1258761177781805904401665597080296597844219207555140252667602),
+      K(-0.0271165711067811527517031577204913417520417117202287079370524),
+      K(0.0049566968097755025323253093106955508273120444565853663949773),
+      K(-0.0007529042621964042565348473109633952383792675486716081916002),
+      K(0.0000923845012025941529926888028246088283227759969619552077927),
+      K(-8.7971061636613823628316954758674029940675792754742342069e-6),
+      K(6.136252042100256280345626781919643641626278378156829218e-7),
+      K(-2.87514497545628209951433938237642236070094379906239019e-8),
+      K(7.99982739755782677965258184972152681716223485333226e-10),
+      K(-1.12250050360331111260828032356887810736651792918878e-11),
+      K(6.221827386743849038481605158298006999161167883e-14),
+      K(-8.0950402455773560717067392049638116407074069e-17)
+    };
+  #elif LDBL_MANT_DIG == 64
+    /* long double 96 bit wide */
+    static const R P1[] =
+    {
+        K(1.00696388290874250231638626673686646317801154370159972703168538),
+        K(0.243352848727738955738908687369450214577920342918851509272408866),
+        K(0.006964401160721188186398281247079919082283450941469460164590432),
+        K(0.000083047334117897959145500056901191736030823531931380263686302),
+        K(5.18256420384764810882467760619532575731801821889985626099e-7),
+        K(1.90790611016475818883461118145629029943434891680660527e-9),
+        K(4.44170587990105074420754325358582895345307949815573e-12),
+        K(6.805150196466153819995090798791966304827558189423e-15),
+        K(6.985104315031938858779570788468047860794936128e-18),
+        K(4.785507068734939741097928056648844894386614e-21),
+        K(2.117077490896605677726199140622837572025e-24),
+        K(5.52919580174986488729896702518475621e-28),
+        K(6.5666588969169003434516942087381e-32),
+    };
+    static const R Q1[] =
+    {
+        K(1.000011863675914860400478598182318948452642744176732473923183795358),
+        K(-0.006896324225185339751945118908659032102601115341265224641280055928),
+        K(0.00001186368725103095674191039208189536570056102297912907572890034),
+        K(-1.3496696876875206170114218872940978330152830864048922600366e-8),
+        K(1.1336174449932022007831556161183407392648142591512923821e-11),
+        K(-7.422841655569707018644701823047396523966712871897812e-15),
+        K(3.893669273036094904159100761627937282479044304922e-18),
+        K(-1.651720545895290413869725701665259282787265642e-21),
+        K(5.6323805635535562808481781647661895955232e-25),
+        K(-1.50728066570923164846664348266414336373e-28),
+        K(3.006044492319661074666639642233229e-32),
+        K(-4.010148023149017379419706572721e-36),
+        K(2.70282874465984817539266054e-40),
+    };
+    static const R P2[] =
+    {
+      K( 1.30090423521760256476093919023146864017751590623897710895862681),
+      K(-1.981041925270972574120174940817336830170017871902975653312750388),
+      K( 0.956892580228917795561363651877698243164566364537052353014543669),
+      K(-0.295476285312266394050596510402082979039773201845265239542019439),
+      K( 0.056978837924988815165935230495950981635872574537538384147033652),
+      K(-0.006299149197554616295736173514236214970859775932020376086036399),
+      K( 0.000353716966863384475462973243411450895641022763240331882363443),
+      K(-8.707624424632528381900923003415938761710942641810978203625e-6),
+      K( 7.283705999222063845686558855093093825421931939071318202e-8),
+      K(-9.7967727386492889920273780071218382357131320542055799e-11)
+    };
+    static const R Q2[] =
+    {
+      K( 3.257608431020108786259398271424889402309379351594793640349460063),
+      K(-4.96363276525502538609792324882976732173260916421950408693842731),
+      K( 2.400495835659089927333294199555080092801133193497330702140754591),
+      K(-0.742868968166381852162379299256973953894545292197384361382965225),
+      K( 0.143801810439830068463911726822151703498931831272162081681231077),
+      K(-0.016019224718850575023820322478614758671031103220377245057110662),
+      K( 0.000914623505897601721718970098041677534130323750396506936364887),
+      K(-0.000023411644633126949191317085153966622167096685843127825287574),
+      K( 2.17705048674331703171406080664526952334380771487046428339e-7),
+      K(-4.47580289731041130181939560179689655281441839562189718e-10)
+    };
+  #else
+    #error Unsupported size of long double
+  #endif
+#elif defined(NFFT_SINGLE)
+  /* float */
+  static const R P1[] =
+  {
+      K(1.006634511033311726164163027592274220828216885723379609007274761),
+      K(0.240606487720090757394176928596156553834296465200311569457994763),
+      K(0.006634921274522227156198202198389031672287220144321235665461021),
+      K(0.000073749622820821337100502174723273851941734199062726870961819),
+      K(4.10243517822171814488230564074819973544765129449450710122e-7),
+      K(1.262110026222369902633819303536802438120823461060572684e-9),
+      K(2.218532296437410634454463125960648541194468552527652e-12),
+      K(2.141504045536019682125761418851096299425878119158e-15),
+      K(9.19584570350722374435337612379408707845677156e-19),
+  };
+  static const R Q1[] =
+  {
+      K(1.000022624782705275228334312456728477812835742762369533496905023937),
+      K(-0.009614857078745003693609489751018087358244444264456521971379273084),
+      K(0.000022624818652773047747424411495054891627754515915461183178099877),
+      K(-3.4080521639954323706277061786236961377055349443081338572762e-8),
+      K(3.5947512112800645225066705862453058797853924958888263259e-11),
+      K(-2.7149805873212658218594464017972758572144265290831215e-14),
+      K(1.4293388301569282795540255590126107486209476445158e-17),
+      K(-4.771887851505849942903948600229238419570937509e-21),
+      K(7.68298982666756594543081799488936861257839e-25),
+  };
+  static const R P2[] =
+  {
+    K( 0.400758393969643840397216812932361963736749407866811083462461),
+    K(-0.0312216150704950438088565774064329777860642477326179964345542),
+    K( 0.0001215451718646727844117193541329442989170354233955281424116)
+  };
+  static const R Q2[] =
+  {
+    K( 1.00043733569136882353241680221279480297575523819814430369272934),
+    K(-0.0822433017391967535749382764476705160129315137731445852657631),
+    K( 0.00043733569136882353241680221279480297575523819814430369272934)
+  };
+#else
+  /* double */
+  static const R P1[] =
+  {
+      K(1.006897990143384859657820271920512961153421109156614230747188622),
+      K(0.242805341483041870658834102275462978674549112393424086979586278),
+      K(0.006898486035482686938510112687043665965094733332210445239567379),
+      K(0.000081165067173822070066416843139523709162208390998449005642346),
+      K(4.95896034564955471201271060753697747487292805350402943964e-7),
+      K(1.769262324717844587819564151110983803173733141412266849e-9),
+      K(3.936742942676484111899247866083681245613312522754135e-12),
+      K(5.65030097981781148787580946077568408874044779529e-15),
+      K(5.267856044117588097078633338366456262960465052e-18),
+      K(3.111192981528832405775039015470693622536939e-21),
+      K(1.071238669051606108411504195862449904664e-24),
+      K(1.66685455020362122704904175079692613e-28),
+  };
+  static const R Q1[] =
+  {
+      K(1.000013770640886533569435896302721489503868900260448440877422679934),
+      K(-0.007438195256024963574139196893944950727405523418354136393367554385),
+      K(0.000013770655915064256304772604385297068669909609091264440116789601),
+      K(-1.6794623118559896441239590667288215019925076196457659206142e-8),
+      K(1.50285363491992136130760477001818578470292828225498818e-11),
+      K(-1.0383232801211938342796582949062551517465351830706356e-14),
+      K(5.66233115275307483428203764087829782195312564006e-18),
+      K(-2.44062252162491829675666639093292109472275754e-21),
+      K(8.15441695513966815222186223740016719597617e-25),
+      K(-2.01117218503954384746303760121365911698e-28),
+      K(3.2919820158429806312377323449729691e-32),
+      K(-2.70343047912331415988664032397e-36),
+  };
+  static const R P2[] =
+  {
+    K( 0.4305671332839579065931339658100499864903788418438938270811),
+    K(-0.2897224581554843285637983312103876003389911968369470222427),
+    K( 0.0299419330186508349765969995362253891383950029259740306077),
+    K(-0.0010756807437990349677633120240742396555192749710627626584),
+    K( 0.0000116485185631252780743187413946316104574410146692335443),
+    K(-1.89995137955806752293614125586568854200245376235433e-08)
+  };
+  static const R Q2[] =
+  {
+    K(1.0762291019783101702628805159947862543863829764738274558421),
+    K(-0.7279167074883770739509279847502106137135422309409220238564),
+    K(0.0762629142282649564822465976300194596092279190843683614797),
+    K(-0.0028345107938479082322784040228834113914746923069059932628),
+    K(0.0000338122499547862193660816352332052228449426105409056376),
+    K(-8.28850093512263912295888947693700479250899073022595e-08)
+  };
+#endif
+
+static const INT N1 = sizeof(P1)/sizeof(P1[0]);
+static const INT M1 = sizeof(Q1)/sizeof(Q1[0]);
+static const INT N2 = sizeof(P2)/sizeof(P2[0]);
+static const INT M2 = sizeof(Q2)/sizeof(Q2[0]);
+
+static inline R evaluate_chebyshev(const INT n, const R *c, const R x)
+{
+  R a = c[n-2], b = c[n-1], t;
+  int j;
+  
+  A(n >= 2);
+  
+  for (j = n - 2; j > 0; j--)
+  {
+    t = c[j-1] - b;
+    b = a + K(2.0) * x * b;
+    a = t;
+  }
+  return a + x * b;
+}
+
+R X(bessel_i0)(R x)
+{
+  if (x < 0)
+  {
+    /* even function */
+    x = -x;
+  }
+
+  if (x == K(0.0))
+    return K(1.0);
+
+  if (x <= K(15.0))
+  {
+    /* x in (0, 15] */
+    const R y = x * x;
+    return evaluate_chebyshev(N1, P1, y) / evaluate_chebyshev(M1, Q1, y);
+  }
+  else
+  {
+    /* x in (15, \infty) */
+    const R y = (K(30.0) - x) / x;
+    return (EXP(x) / SQRT(x)) * (evaluate_chebyshev(N2, P2, y) /
+      evaluate_chebyshev(M2, Q2, y));
+  }
+}
diff --git a/kernel/util/error.c b/kernel/util/error.c
new file mode 100644
index 0000000..648fe3d
--- /dev/null
+++ b/kernel/util/error.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+static R cnrm1(const C *x, const INT n)
+{
+  INT k;
+  R nrm = K(0.0);
+
+  for (k = 0; k < n; k++)
+    nrm += CABS(x[k]);
+
+  return nrm;
+}
+
+static R nrm1(const R *x, const INT n)
+{
+  int k;
+  R nrm = K(0.0);
+
+  for (k = 0; k < n; k++)
+    nrm += FABS(x[k]);
+
+  return nrm;
+}
+
+static R cerr2(const C *x, const C *y, const INT n)
+{
+  int k;
+  R err = K(0.0);
+
+  if (!y)
+  {
+    for (k = 0; k < n; k++)
+      err += CONJ(x[k]) * x[k];
+  }
+  else
+  {
+    for (k = 0; k < n; k++)
+      err += CONJ(x[k]-y[k]) * (x[k]-y[k]);
+  }
+
+  return SQRT(err);
+}
+
+static R err2(const R *x, const R *y, const INT n)
+{
+  int k;
+  R err = K(0.0);
+
+  if (!y)
+  {
+    for (k = 0; k < n; k++)
+      err += x[k]*x[k];
+  }
+  else
+  {
+    for (k = 0; k < n; k++)
+      err += (x[k]-y[k]) * (x[k]-y[k]);
+  }
+
+  return SQRT(err);
+}
+
+static R cerri(const C *x, const C *y, const INT n)
+{
+  int k;
+  R err = K(0.0), t;
+
+  if (!y)
+  {
+    for (k = 0; k < n; k++)
+    {
+      t = CABS(x[k]);
+      err = MAX(err, t);
+    }
+  }
+  else
+  {
+    for (k = 0; k < n; k++)
+    {
+      t = CABS(x[k] - y[k]);
+      err = MAX(err, t);
+    }
+  }
+
+  return err;
+}
+
+static R erri(const R *x, const R *y, const INT n)
+{
+  int k;
+  R err = K(0.0), t;
+
+  if (!y)
+  {
+    for (k = 0; k < n; k++)
+    {
+      t = FABS(x[k]);
+      err = MAX(err, t);
+    }
+  }
+  else
+  {
+    for (k = 0; k < n; k++)
+    {
+      t = FABS(x[k] - y[k]);
+      err = MAX(err, t);
+    }
+  }
+
+  return err;
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} \f$
+ */
+R X(error_l_infty_complex)(const C *x, const C *y, const INT n)
+{
+  return (cerri(x, y, n)/cerri(x, 0, n));
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} \f$
+ */
+R X(error_l_infty_double)(const R *x, const R *y, const INT n)
+{
+  return (erri(x, y, n)/erri(x, 0, n));
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|z\|_1} \f$
+ */
+R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
+  const C *z, const INT m)
+{
+  return (cerri(x, y, n)/cnrm1(z, m));
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|z\|_1} \f$
+ */
+R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
+  const INT m)
+{
+  return (erri(x, y, n)/nrm1(z, m));
+}
+
+/** computes \f$\frac{\|x-y\|_2}{\|x\|_2} \f$
+ */
+R X(error_l_2_complex)(const C *x, const C *y, const INT n)
+{
+  return (cerr2(x, y, n)/cerr2(x, 0, n));
+}
+
+/** computes \f$\frac{\|x-y\|_2}{\|x\|_2} \f$
+ */
+R X(error_l_2_double)(const R *x, const R *y, const INT n)
+{
+  return (err2(x, y, n)/err2(x, NULL, n));
+}
diff --git a/kernel/util/float.c b/kernel/util/float.c
new file mode 100644
index 0000000..67d9ad5
--- /dev/null
+++ b/kernel/util/float.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+R X(float_property)(const float_property p)
+{
+  const R base = FLT_RADIX;
+  const R eps = EPSILON;
+  const R t = MANT_DIG;
+  const R emin = MIN_EXP;
+  const R emax = MAX_EXP;
+  const R prec = eps * base;
+  static R rmin = K(1.0);
+  static R rmax = K(1.0);
+  const R rnd = FLTROUND;
+  static R sfmin = K(-1.0);
+  static short first = TRUE;
+
+  if (first)
+  {
+    /* Compute rmin */
+    {
+      const INT n = 1 - MIN_EXP;
+      INT i;
+      for (i = 0; i < n; i++)
+        rmin /= base;
+    }
+
+    /* Compute rmax */
+    {
+      INT i;
+      rmax -= eps;
+      for (i = 0; i < emax; i++)
+        rmax *= base;
+    }
+
+    /* Compute sfmin */
+    {
+      R small = K(1.0) / rmax;
+      sfmin = rmin;
+      if (small >= sfmin)
+        sfmin = small * (eps + K(1.0));
+    }
+
+    first = FALSE;
+  }
+
+  if (p == NFFT_EPSILON)
+    return eps;
+  else if (p == NFFT_SAFE_MIN)
+    return sfmin;
+  else if (p == NFFT_BASE)
+    return base;
+  else if (p == NFFT_PRECISION)
+    return prec;
+  else if (p == NFFT_MANT_DIG)
+    return t;
+  else if (p == NFFT_FLTROUND)
+    return rnd;
+  else if (p == NFFT_E_MIN)
+    return  emin;
+  else if (p == NFFT_R_MIN)
+    return rmin;
+  else if (p == NFFT_E_MAX)
+    return emax;
+  else if (p == NFFT_R_MAX)
+    return rmax;
+  else
+    CK(0 /* cannot happen */);
+
+  return K(-1.0);
+} /* dlamch_ */
diff --git a/kernel/util/int.c b/kernel/util/int.c
new file mode 100644
index 0000000..8569ebf
--- /dev/null
+++ b/kernel/util/int.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+int X(exp2i)(const int a)
+{
+  return (1U << a);
+}
+
+int X(log2i)(const int m)
+{
+  int l = 0;
+  int mm = m;
+
+  while (mm > 0)
+  {
+    mm = (mm >> 1);
+    l++;
+  }
+  return (l-1);
+}
+
+/** Computes /f$n\ge N/f$ such that /f$n=2^j,\, j\in\mathhb{N}_0/f$.
+ */
+int X(next_power_of_2)(const int N)
+{
+  int n,i,logn;
+  int N_is_not_power_of_2=0;
+
+  if (N == 0)
+    return 1;
+  else
+  {
+    n = N;
+    logn = 0;
+    while (n != 1)
+    {
+      if (n%2 == 1)
+        N_is_not_power_of_2=1;
+      n = n/2;
+      logn++;
+    }
+
+    if (!N_is_not_power_of_2)
+      logn--;
+
+    for (i = 0; i <= logn; i++)
+      n = n*2;
+
+    return n;
+  }
+}
+
+/** Computes /f$n\ge N/f$ such that /f$n=2^j,\, j\in\mathhb{N}_0/f$.
+ */
+void X(next_power_of_2_exp)(const int N, int *N2, int *t)
+{
+  int n,i,logn;
+  int N_is_not_power_of_2=0;
+
+  if (N == 0)
+  {
+    *N2 = 1;
+    *t = 0;
+  }
+  else
+  {
+    n=N;
+    logn=0;
+    while (n != 1)
+    {
+      if (n%2 == 1)
+      {
+          N_is_not_power_of_2=1;
+      }
+      n = n/2;
+      logn++;
+    }
+
+    if (!N_is_not_power_of_2)
+    {
+      logn--;
+    }
+
+    for (i = 0; i <= logn; i++)
+    {
+      n = n*2;
+    }
+
+    *N2 = n;
+    *t = logn+1;
+  }
+}
diff --git a/kernel/util/lambda.c b/kernel/util/lambda.c
new file mode 100644
index 0000000..0a98438
--- /dev/null
+++ b/kernel/util/lambda.c
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+/* Coefficients for Lanzcos's approximation to the Gamma function. Can be
+ * regenerated with Mathematica from file lambda.nb. */
+
+#if defined(NFFT_LDOUBLE)
+  #if LDBL_MANT_DIG > 64
+    /* long double 128 bit wide */
+    #define N 24
+    static const R num[24] =
+    {
+      K(3.035162425359883494754028782232869726547E21),
+      K(3.4967568944064301036001605717507506346E21),
+      K(1.9266526566893208886540195401514595829E21),
+      K(6.755170664882727663160830237424406199E20),
+      K(1.691728531049187527800862627495648317E20),
+      K(3.21979351672256057856444116302160246E19),
+      K(4.8378495427140832493758744745481812E18),
+      K(5.8843103809049324230843820398664955E17),
+      K(5.893958514163405862064178891925630E16),
+      K(4.919561837722192829918665308020810E15),
+      K(3.449165802442404074427531228315120E14),
+      K(2.041330296068782505988459692384726E13),
+      K(1.022234822943784007524609706893119E12),
+      K(4.33137871919821354846952908076307E10),
+      K(1.54921950559667418528481770869280E9),
+      K(4.6544421199876191938054157935810E7),
+      K(1.16527806807504975090675074910053E6),
+      K(24024.759267256769471083727721827),
+      K(400.96500811342195582435806376976),
+      K(5.2829901565447826961703902917085),
+      K(0.05289990244125101024092566765994),
+      K(0.0003783467106547406854542665695934),
+      K(1.7219414217921113919596660801124E-6),
+      K(3.747999317071488557713812635427084359354E-9)
+    };
+/*    static const R denom[24] =
+    {
+      K(0.0),
+      K(1124000727777607680000.0),
+      K(4148476779335454720000.0),
+      K(6756146673770930688000.0),
+      K(6548684852703068697600.0),
+      K(4280722865357147142912.0),
+      K(2021687376910682741568.0),
+      K(720308216440924653696.0),
+      K(199321978221066137360.0),
+      K(43714229649594412832.0),
+      K(7707401101297361068.0),
+      K(1103230881185949736.0),
+      K(129006659818331295.0),
+      K(12363045847086207.0),
+      K(971250460939913.0),
+      K(62382416421941.0),
+      K(3256091103430.0),
+      K(136717357942.0),
+      K(4546047198.0),
+      K(116896626.0),
+      K(2240315.0),
+      K(30107.0),
+      K(253.0),
+      K(1.0L)
+    };*/
+    static const R g = K(20.32098218798637390136718750000000000000);
+  #elif LDBL_MANT_DIG == 64
+    /* long double 96 bit wide */
+    #define N 17
+    static const R num[17] =
+    {
+      K(2.715894658327717377557655133124376674911E12),
+      K(3.59017952609791210503852552872112955043E12),
+      K(2.22396659973781496931212735323581871017E12),
+      K(8.5694083451895624818099258668254858834E11),
+      K(2.2988587166874907293359744645339939547E11),
+      K(4.552617168754610815813502794395753410E10),
+      K(6.884887713165178784550917647709216425E9),
+      K(8.11048596140753186476028245385237278E8),
+      K(7.52139159654082231449961362311950170E7),
+      K(5.50924541722426515169752795795495283E6),
+      K(317673.536843541912671493184218236957),
+      K(14268.2798984503552014701437332033752),
+      K(489.361872040326367021390908360178781),
+      K(12.3894133003845444929588321786545861),
+      K(0.218362738950461496394157450728168315),
+      K(0.00239374952205844918669062799606398310),
+      K(0.00001229541408909435212800785616808830746135)
+    };
+/*    static const R denom[17] =
+    {
+      K(0.0),
+      K(1307674368000.0),
+      K(4339163001600.0),
+      K(6165817614720.0),
+      K(5056995703824.0),
+      K(2706813345600.0),
+      K(1009672107080.0),
+      K(272803210680.0),
+      K(54631129553.0),
+      K(8207628000.0),
+      K(928095740.0),
+      K(78558480.0),
+      K(4899622.0),
+      K(218400.0),
+      K(6580.0),
+      K(120.0),
+      K(1.0L)
+    };*/
+    static const R g = K(12.22522273659706115722656250000000000000);
+  #else
+    #error Unsupported size of long double
+  #endif
+#elif defined(NFFT_SINGLE)
+  /* float */
+  #define N 6
+  static const R num[6] =
+  {
+    K(14.02614328749964766195705772850038393570),
+    K(43.74732405540314316089531289293124360129),
+    K(50.59547402616588964511581430025589038612),
+    K(26.90456680562548195593733429204228910299),
+    K(6.595765571169314946316366571954421695196),
+    K(0.6007854010515290065101128585795542383721)
+  };
+/*  static const R denom[6] =
+  {
+    K(0.0),
+    K(24.0),
+    K(50.0),
+    K(35.0),
+    K(10.0),
+    K(1.0)
+  };*/
+  static const R g = K(1.428456135094165802001953125000000000000);
+#else
+  /* double */
+  #define N 13
+  static const R num[13] =
+  {
+    K(5.690652191347156388090791033559122686859E7),
+    K(1.037940431163445451906271053616070238554E8),
+    K(8.63631312881385914554692728897786842234E7),
+    K(4.33388893246761383477372374059053331609E7),
+    K(1.46055780876850680841416998279135921857E7),
+    K(3.48171215498064590882071018964774556468E6),
+    K(601859.61716810987866702265336993523025),
+    K(75999.293040145426498753034435989091371),
+    K(6955.9996025153761403563101155151989875),
+    K(449.944556906316811944685860765098840962),
+    K(19.5199278824761748284786096623565213621),
+    K(0.509841665565667618812517864480469450999),
+    K(0.006061842346248906525783753964555936883222)
+  };
+/*  static const R denom[13] =
+  {
+    K(0.0),
+    K(39916800.0),
+    K(120543840.0),
+    K(150917976.0),
+    K(105258076.0),
+    K(45995730.0),
+    K(13339535.0),
+    K(2637558.0),
+    K(357423.0),
+    K(32670.0),
+    K(1925.0),
+    K(66.0),
+    K(1.0)
+  };*/
+  static const R g = K(6.024680040776729583740234375000000000000);
+#endif
+
+static inline R evaluate_rational(const R z_)
+{
+  R z = z_, s1, s2;
+  int i;
+
+  if (z <= K(1.0))
+  {
+    s1 = num[N - 1];
+    s2 = K(1.0);
+    for (i = N - 2; i >= 0; --i)
+    {
+      s1 *= z;
+      s2 *= (z + i);
+      s1 += num[i];
+    }
+  }
+  else
+  {
+    z = K(1.0)/z;
+    s1 = num[0];
+    s2 = K(1.0);
+    for (i = 1; i < N; ++i)
+    {
+      s1 *= z;
+      s2 *= K(1.0) + (i-1)*z;
+      s1 += num[i];
+    }
+  }
+  return s1 / s2;
+}
+
+R X(lambda)(const R z, const R eps)
+{
+  const R d = K(1.0) - eps, zpg = z + g, emh = eps - K(0.5);
+  return EXP(-LOG1P(d / (zpg + emh)) * (z + emh)) *
+    POW(KE / (zpg + K(0.5)),d) *
+    (evaluate_rational(z + eps) / evaluate_rational(z + K(1.0)));
+}
+
+R X(lambda2)(const R mu, const R nu)
+{
+  if (mu == K(0.0))
+    return K(1.0);
+  else if (nu == K(0.0))
+    return K(1.0);
+  else
+    return
+      SQRT(
+        POW((mu + nu + g + K(0.5)) / (K(1.0) * (mu + g + K(0.5))), mu) *
+        POW((mu + nu + g + K(0.5)) / (K(1.0) * (nu + g + K(0.5))), nu) *
+        SQRT(KE * (mu + nu + g + K(0.5)) /
+          ((mu + g + K(0.5)) * (nu + g + K(0.5)))) *
+        (evaluate_rational(mu + nu + K(1.0)) /
+          (evaluate_rational(mu + K(1.0)) * evaluate_rational(nu + K(1.0))))
+      );
+}
diff --git a/kernel/util/malloc.c b/kernel/util/malloc.c
new file mode 100644
index 0000000..d9b38b4
--- /dev/null
+++ b/kernel/util/malloc.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include<stdlib.h>
+
+#include "api.h"
+
+X(malloc_type_function) X(malloc_hook) = 0;
+X(free_type_function) X(free_hook) = 0;
+X(die_type_function) X(die_hook) = 0;
+
+void *X(malloc)(size_t n)
+{
+  void *p;
+
+  if (X(malloc_hook))
+    return nfft_malloc_hook(n);
+
+  if (n == 0)
+    n = 1;
+
+  p = Z(malloc)(n);
+
+  if (!p)
+    X(die)(STRINGIZE(X(malloc)) ": out of memory\n");
+
+  return p;
+}
+
+void X(free)(void *p)
+{
+  if (p)
+  {
+    if (X(free_hook))
+    {
+      X(free_hook)(p);
+      return;
+    }
+    Z(free)(p);
+  }
+}
+
+void X(die)(char *s)
+{
+  if (X(die_hook))
+    X(die_hook)(s);
+
+  exit(EXIT_FAILURE);
+}
diff --git a/kernel/util/sinc.c b/kernel/util/sinc.c
new file mode 100644
index 0000000..fcccba6
--- /dev/null
+++ b/kernel/util/sinc.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+R X(sinc)(const R x)
+{
+  /* Based on sinc function from Boost C++ library. */
+  const R b =  EPSILON;
+  const R bs = SQRT(b);
+  const R bs2 = SQRT(bs);
+
+  if (FABS(x) >= bs2)
+    return SIN(x)/x;
+  else
+  {
+    R r = K(1.0);
+
+    if (FABS(x) >= b)
+    {
+      const R x2 = x * x;
+      r -= x2 / K(6.0);
+
+      if (FABS(x) >= bs)
+        r += (x2 * x2) / K(120.0);
+    }
+
+    return r;
+  }
+}
diff --git a/m4/ax_apple_gcc_archflag.m4 b/m4/ax_apple_gcc_archflag.m4
new file mode 100644
index 0000000..64e4668
--- /dev/null
+++ b/m4/ax_apple_gcc_archflag.m4
@@ -0,0 +1,93 @@
+dnl @synopsis AX_APPLE_GCC_ARCHFLAG([PORTABLE],[ACTION-SUCCESS],[ACTION-FAILURE])
+dnl @summary find target architecture name for Apple's gcc -arch flag
+dnl @category Misc
+dnl
+dnl This macro tries to guess the "native" arch corresponding to
+dnl the target architecture for use with Apple's gcc's -arch flag. If found, the
+dnl cache variable $ax_cv_apple_gcc_archflag is set to this flag and 
+dnl ACTION-SUCCESS is executed; otherwise $ax_cv_apple_gcc_archflag is
+dnl is set to "unknown" and ACTION-FAILURE is executed. The default
+dnl ACTION-SUCCESS is to add $ax_cv_apple gcc_archflag to the end of $CFLAGS.
+dnl
+dnl The user can specify --with-apple-gcc-arch=<arch> in order to override
+dnl the macro's choice of architecture, or --without-apple-gcc-arch to
+dnl disable this.
+dnl
+dnl When cross-compiling, or if $CC is not Apple's gcc, then ACTION-FAILURE is
+dnl called unless the user specified --with-apple-gcc-arch manually.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS
+dnl
+dnl (The main emphasis here is on recent CPUs, on the principle that
+dnl  doing high-performance computing on old hardware is uncommon.)
+dnl
+dnl @version 2008-12-07
+dnl @license GPLWithACException
+dnl @author Jens Keiner <jens at nfft.org>.
+AC_DEFUN([AX_APPLE_GCC_ARCHFLAG],
+[AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+AC_ARG_WITH(apple-gcc-arch, [AC_HELP_STRING([--with-apple-gcc-arch=<arch>], 
+  [use architecture <arch> for Apple's gcc -arch, instead of guessing])], 
+  ax_apple_gcc_arch=$withval, ax_apple_gcc_arch=yes)
+
+AC_CACHE_VAL(ax_cv_apple_gcc_archflag,
+[
+ax_cv_apple_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+  if test "x$ax_apple_gcc_arch" = xyes; then
+    ax_apple_gcc_arch=""
+    if test "$cross_compiling" = no; then
+      if test "x[]m4_default([$1],no)" = xyes; then # if we require portable code
+        ax_apple_gcc_arch="i386 x86_64 ppc ppc64"
+        echo "default arch because of portable code"
+      else
+        case $host_cpu in
+          x86_64*|amd64*|i[[3456]]86*)
+            ax_apple_gcc_arch="x86_64 i386"
+            ;;
+          powerpc*)
+             cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+             cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+             case $cputype in
+               *750*|*740[[0-9]]*|*74[[4-5]][[0-9]]*|*74[[0-9]][[0-9]]*) ax_apple_gcc_arch="ppc";;
+               *970*|*POWER4*|*power4*|*gq*|*POWER5*|*power5*|*gr*|*gs*) ax_apple_gcc_arch="ppc64";;
+               *) ax_apple_gcc_arch="ppc64 ppc";;
+             esac
+             ;;
+          *)
+            ax_apple_gcc_arch="x86_64 i386 ppc64 ppc"
+            ;;
+        esac
+      fi # portable code
+    fi # not cross-compiling
+  fi # guess arch
+
+  if test "x$ax_apple_gcc_arch" != x -a "x$ax_apple_gcc_arch" != xno; then
+    ax_cv_apple_gcc_archflag=""
+    for arch in $ax_apple_gcc_arch; do
+      AX_CHECK_COMPILER_FLAGS([-arch $arch],[
+        saved_CFLAGS="$CFLAGS";
+        CFLAGS="$CFLAGS -arch $arch";
+        LIBS="$LIBS $fftw3_LIBS"
+        AC_MSG_CHECKING([whether linking is possible with -arch $arch]);
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[int main(void){return 0;}]])],[last_result=yes;AC_MSG_RESULT([yes]);ax_cv_apple_gcc_archflag="$ax_cv_apple_gcc_archflag -arch $arch"],[last_result=no;AC_MSG_RESULT([no])]);
+        CFLAGS="$saved_CFLAGS"
+      ])
+      if test "x$last_result" = "xyes"; then
+        break;
+      fi
+    done
+  fi
+fi # $GCC=yes
+])
+AC_MSG_CHECKING([for Apple's gcc architecture flag])
+AC_MSG_RESULT($ax_cv_apple_gcc_archflag)
+if test "x$ax_cv_apple_gcc_archflag" = xunknown; then
+  m4_default([$3],:)
+else
+  m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"])
+fi
+])
diff --git a/m4/ax_cc_maxopt.m4 b/m4/ax_cc_maxopt.m4
new file mode 100644
index 0000000..3ec65c5
--- /dev/null
+++ b/m4/ax_cc_maxopt.m4
@@ -0,0 +1,177 @@
+dnl @synopsis AX_CC_MAXOPT
+dnl @summary turn on optimization flags for the C compiler
+dnl @category C
+dnl
+dnl Try to turn on "good" C optimization flags for various compilers
+dnl and architectures, for some definition of "good".  (In our case,
+dnl good for FFTW and hopefully for other scientific codes.  Modify 
+dnl as needed.)
+dnl
+dnl The user can override the flags by setting the CFLAGS environment
+dnl variable.  The user can also specify --enable-portable-binary in
+dnl order to disable any optimization flags that might result in
+dnl a binary that only runs on the host architecture.
+dnl
+dnl Note also that the flags assume that ANSI C aliasing rules are
+dnl followed by the code (e.g. for gcc's -fstrict-aliasing), and that
+dnl floating-point computations can be re-ordered as needed.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR,
+dnl                  AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID
+dnl
+dnl @version 2008-12-02
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_CC_MAXOPT],
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AX_COMPILER_VENDOR])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], 
+	acx_maxopt_portable=$enableval, acx_maxopt_portable=no)
+
+# Try to determine "good" native compiler flags if none specified via CFLAGS
+if test "$ac_test_CFLAGS" != "set"; then
+  CFLAGS=""
+  case $ax_cv_c_compiler_vendor in
+    dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
+      if test "x$acx_maxopt_portable" = xno; then
+        CFLAGS="$CFLAGS -arch host"
+      fi;;
+
+    sun) CFLAGS="-native -fast -xO5 -dalign"
+      if test "x$acx_maxopt_portable" = xyes; then
+         CFLAGS="$CFLAGS -xarch=generic"
+      fi;;
+
+    hp) CFLAGS="+Oall +Optrs_ansi +DSnative"
+      if test "x$acx_maxopt_portable" = xyes; then
+        CFLAGS="$CFLAGS +DAportable"
+      fi;;
+
+    ibm) if test "x$acx_maxopt_portable" = xno; then
+        xlc_opt="-qarch=auto -qtune=auto"
+      else
+        xlc_opt="-qtune=auto"
+      fi
+      AX_CHECK_COMPILER_FLAGS($xlc_opt,
+        CFLAGS="-O3 -qansialias -w $xlc_opt",
+        [CFLAGS="-O3 -qansialias -w"
+              echo "******************************************************"
+              echo "*  You seem to have the IBM  C compiler.  It is      *"
+              echo "*  recommended for best performance that you use:    *"
+              echo "*                                                    *"
+              echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
+              echo "*                      ^^^        ^^^                *"
+              echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
+              echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
+              echo "*  and re-run configure.)  For more info, man cc.    *"
+              echo "******************************************************"])
+        ;;
+
+    intel) CFLAGS="-O3"
+        # Intel seems to have changed the spelling of this flag recently
+        icc_ansi_alias="unknown"
+	for flag in -ansi-alias -ansi_alias; do
+	  AX_CHECK_COMPILER_FLAGS($flag, [icc_ansi_alias=$flag; break])
+	done
+ 	if test "x$icc_ansi_alias" != xunknown; then
+            CFLAGS="$CFLAGS $icc_ansi_alias"
+        fi
+	AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+	if test "x$acx_maxopt_portable" = xno; then
+	  icc_archflag=unknown
+	  icc_flags=""
+	  # -xN etcetera are for older versions of icc:
+	  case $host_cpu in
+	    i686*|x86_64*)
+              # icc accepts gcc assembly syntax, so these should work:
+	      AX_GCC_X86_CPUID(0)
+              AX_GCC_X86_CPUID(1)
+	      case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
+                *:756e6547:*:*) # Intel
+                  case $ax_cv_gcc_x86_cpuid_1 in
+                    *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";;
+                    *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";;
+                    *f??:*:*:*) icc_flags="-xN -xW -xK";;
+                  esac ;;
+              esac ;;
+          esac
+          # newer icc versions should support -xHost
+	  icc_flags="-xHost $icc_flags"
+          if test "x$icc_flags" != x; then
+            for flag in $icc_flags; do
+              AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break])
+            done
+          fi
+          AC_MSG_CHECKING([for icc architecture flag])
+	  AC_MSG_RESULT($icc_archflag)
+          if test "x$icc_archflag" != xunknown; then
+            CFLAGS="$CFLAGS $icc_archflag"
+          fi
+        fi
+	;;
+    
+    gnu) 
+     # default optimization flags for gcc on all systems
+     CFLAGS="-O3 -fomit-frame-pointer"
+
+     # -malign-double for x86 systems
+     AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+
+     #  -fstrict-aliasing for gcc-2.95+
+     AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,
+     CFLAGS="$CFLAGS -fstrict-aliasing")
+
+     # note that we enable "unsafe" fp optimization with other compilers, too
+     AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math")
+
+     AX_GCC_ARCHFLAG($acx_maxopt_portable)
+     ;;
+   apple)
+     # default optimization flags for apple on all systems
+     AX_CHECK_COMPILER_FLAGS(-O3, CFLAGS="$CFLAGS -O3")
+     AX_CHECK_COMPILER_FLAGS(-fomit-frame-pointer, CFLAGS="$CFLAGS -fomit-frame-pointer")
+     AX_CHECK_COMPILER_FLAGS(-fPIC, CFLAGS="$CFLAGS -fPIC")
+
+     # -malign-double for x86 systems
+     AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+
+     #  -fstrict-aliasing for gcc-2.95+
+     AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,CFLAGS="$CFLAGS -fstrict-aliasing")
+
+     # note that we enable "unsafe" fp optimization with other compilers, too
+     AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math")
+
+     AX_CHECK_COMPILER_FLAGS(-march=core2, CFLAGS="$CFLAGS -march=core2")
+     AX_CHECK_COMPILER_FLAGS(-mtune=core2, CFLAGS="$CFLAGS -mtune=core2")
+
+     AX_APPLE_GCC_ARCHFLAG($acx_maxopt_portable)
+     ;;
+  esac
+
+  if test -z "$CFLAGS"; then
+	echo ""
+	echo "********************************************************"
+        echo "* WARNING: Don't know the best CFLAGS for this system  *"
+        echo "* Use ./configure CFLAGS=... to specify your own flags *"
+	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
+	echo "********************************************************"
+	echo ""
+        CFLAGS="-O3"
+  fi
+
+  AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [
+	echo ""
+        echo "********************************************************"
+        echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
+        echo "* your compiler.                                       *"
+        echo "* Use ./configure CFLAGS=... to specify your own flags *"
+        echo "********************************************************"
+        echo ""
+        CFLAGS=""
+  ])
+
+fi
+])
diff --git a/m4/ax_check_compiler_flags.m4 b/m4/ax_check_compiler_flags.m4
new file mode 100644
index 0000000..cc95cc2
--- /dev/null
+++ b/m4/ax_check_compiler_flags.m4
@@ -0,0 +1,40 @@
+dnl @synopsis AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary check whether FLAGS are accepted by the compiler
+dnl @category Misc
+dnl
+dnl Check whether the given compiler FLAGS work with the current language's
+dnl compiler, or whether they give an error.  (Warnings, however, are
+dnl ignored.)
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2005-05-30
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_CHECK_COMPILER_FLAGS],
+[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
+AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
+dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
+AS_LITERAL_IF([$1],
+  [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
+      ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+      _AC_LANG_PREFIX[]FLAGS="$1"
+      AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM()])], 
+        AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
+        AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
+      _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])],
+  [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+   _AC_LANG_PREFIX[]FLAGS="$1"
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM()])], 
+     eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
+     eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
+   _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])
+eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)
+AC_MSG_RESULT($ax_check_compiler_flags)
+if test "x$ax_check_compiler_flags" = xyes; then
+	m4_default([$2], :)
+else
+	m4_default([$3], :)
+fi
+])dnl AX_CHECK_COMPILER_FLAGS
diff --git a/m4/ax_check_dir.m4 b/m4/ax_check_dir.m4
new file mode 100644
index 0000000..3ca9d35
--- /dev/null
+++ b/m4/ax_check_dir.m4
@@ -0,0 +1,23 @@
+dnl @synopsis AX_CHECK_DIR(DIR, [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary check for directory DIR
+dnl @category Misc
+dnl
+dnl Check whether the directory DIR exists.
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2008-12-07
+dnl @license GPLWithACException
+dnl @author Jens Keiner <jens at nfft.org>.
+AC_DEFUN([AX_CHECK_DIR],
+[
+AC_MSG_CHECKING([whether directory $1 exists])
+if test -d "$1"; then
+  AC_MSG_RESULT(yes)
+  m4_default([$2], :)
+else
+  AC_MSG_RESULT(no)
+  m4_default([$3], :)
+fi
+])dnl AX_CHECK_DIR
diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4
new file mode 100644
index 0000000..7a42427
--- /dev/null
+++ b/m4/ax_compiler_vendor.m4
@@ -0,0 +1,30 @@
+dnl @synopsis AX_COMPILER_VENDOR
+dnl @summary find the vendor (gnu, intel, etc.) of the C/C++ compiler
+dnl @category C
+dnl @category C++
+dnl
+dnl Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm,
+dnl sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, 
+dnl microsoft, watcom, etc.  The vendor is returned in the cache variable
+dnl $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++.
+dnl
+dnl @version 2007-08-01
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> with Matteo Frigo
+
+AC_DEFUN([AX_COMPILER_VENDOR],
+[
+AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
+ [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
+  # note: don't check for gcc first since some other compilers define __GNUC__
+  for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ apple:__APPLE_CC__,__APPLE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do 
+    vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM(,[
+#if !($vencpp)
+      thisisanerror;
+#endif
+])])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
+  done
+ ])
+])
+
diff --git a/m4/ax_gcc_archflag.m4 b/m4/ax_gcc_archflag.m4
new file mode 100644
index 0000000..813f0a2
--- /dev/null
+++ b/m4/ax_gcc_archflag.m4
@@ -0,0 +1,184 @@
+dnl @synopsis AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary find target architecture name for gcc -march/-mtune flags
+dnl @category Misc
+dnl
+dnl This macro tries to guess the "native" arch corresponding to
+dnl the target architecture for use with gcc's -march=arch or -mtune=arch
+dnl flags.  If found, the cache variable $ax_cv_gcc_archflag is set to this
+dnl flag and ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is
+dnl is set to "unknown" and ACTION-FAILURE is executed.  The default
+dnl ACTION-SUCCESS is to add $ax_cv_gcc_archflag to the end of $CFLAGS.
+dnl
+dnl PORTABLE? should be either [yes] (default) or [no].  In the former case,
+dnl the flag is set to -mtune (or equivalent) so that the architecture
+dnl is only used for tuning, but the instruction set used is still
+dnl portable.  In the latter case, the flag is set to -march (or equivalent)
+dnl so that architecture-specific instructions are enabled.
+dnl
+dnl The user can specify --with-gcc-arch=<arch> in order to override
+dnl the macro's choice of architecture, or --without-gcc-arch to
+dnl disable this.
+dnl
+dnl When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is
+dnl called unless the user specified --with-gcc-arch manually.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID
+dnl
+dnl (The main emphasis here is on recent CPUs, on the principle that
+dnl  doing high-performance computing on old hardware is uncommon.)
+dnl
+dnl @version 2007-03-20
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_ARCHFLAG],
+[AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=<arch>], [use architecture <arch> for gcc -march/-mtune, instead of guessing])], 
+	ax_gcc_arch=$withval, ax_gcc_arch=yes)
+
+AC_MSG_CHECKING([for gcc architecture flag])
+AC_MSG_RESULT([])
+AC_CACHE_VAL(ax_cv_gcc_archflag,
+[
+ax_cv_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+
+if test "x$ax_gcc_arch" = xyes; then
+ax_gcc_arch=""
+if test "$cross_compiling" = no; then
+case $host_cpu in
+  i[[3456]]86*|x86_64*|amd64*) # use cpuid codes, in part from x86info-1.21 by D. Jones
+     AX_GCC_X86_CPUID(0)
+     AX_GCC_X86_CPUID(1)
+     case $ax_cv_gcc_x86_cpuid_0 in
+       *:756e6547:*:*) # Intel
+          case $ax_cv_gcc_x86_cpuid_1 in
+	    *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
+	    *5??:*:*:*) ax_gcc_arch=pentium ;;
+	    *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+	    *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+	    *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+	    *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+	    *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
+	    *6[[e]]?:*:*:*) ax_gcc_arch="native pentium-m pentium3 pentiumpro" ;; # Core Duo
+	    *6f?:*:*:*) ax_gcc_arch="core2 native pentium-m pentium3 pentiumpro" ;;
+	    *6??:*:*:*) ax_gcc_arch="native pentiumpro" ;;
+            *f3[[347]]:*:*:*|*f4[[1347]]:*:*:*)
+		case $host_cpu in
+                  x86_64*|amd64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
+                  *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
+                esac ;;
+            *f??:*:*:*) ax_gcc_arch="native pentium4 pentiumpro";;
+          esac ;;
+       *:68747541:*:*) # AMD
+          case $ax_cv_gcc_x86_cpuid_1 in
+	    *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;;
+	    *5[[8c]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
+	    *5[[9d]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
+	    *60?:*:*:*) ax_gcc_arch=k7 ;;
+	    *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;;
+	    *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
+	    *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
+	    *6[[68a]]?:*:*:*) 
+	       AX_GCC_X86_CPUID(0x80000006) # L2 cache size
+	       case $ax_cv_gcc_x86_cpuid_0x80000006 in
+                 *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
+			ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
+                 *) ax_gcc_arch="athlon-4 athlon k7" ;;
+	       esac ;;
+	    *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
+	    *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
+	    *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
+	    *f??:*:*:*) ax_gcc_arch="native k8" ;;
+          esac ;;
+	*:746e6543:*:*) # IDT
+	   case $ax_cv_gcc_x86_cpuid_1 in
+	     *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
+	     *58?:*:*:*) ax_gcc_arch=winchip2 ;;
+	     *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;;
+	     *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
+	   esac ;;
+     esac
+     if test x"$ax_gcc_arch" = x; then # fallback
+	case $host_cpu in
+	  i586*) ax_gcc_arch="native pentium" ;;
+	  i686*) ax_gcc_arch="native pentiumpro" ;;
+          x86_64*|amd64*) ax_gcc_arch="native" ;;
+        esac
+     fi 
+     ;;
+
+  sparc*)
+     AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
+     cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
+     cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
+     case $cputype in
+         *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
+         *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
+         *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
+         *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;;
+         *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;;
+         *cypress*) ax_gcc_arch=cypress ;;
+     esac ;;
+
+  alphaev5) ax_gcc_arch=ev5 ;;
+  alphaev56) ax_gcc_arch=ev56 ;;
+  alphapca56) ax_gcc_arch="pca56 ev56" ;;
+  alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
+  alphaev6) ax_gcc_arch=ev6 ;;
+  alphaev67) ax_gcc_arch=ev67 ;;
+  alphaev68) ax_gcc_arch="ev68 ev67" ;;
+  alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
+  alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
+  alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
+
+  powerpc*)
+     cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+     cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+     case $cputype in
+       *750*) ax_gcc_arch="750 G3" ;;
+       *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;;
+       *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;;
+       *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;;
+       *970*) ax_gcc_arch="970 G5 power4";;
+       *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
+       *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
+       603ev|8240) ax_gcc_arch="$cputype 603e 603";;
+       *Cell*) ax_gcc_arch="cellppu cell";;
+       *) ax_gcc_arch="$cputype native" ;;
+     esac
+     ax_gcc_arch="$ax_gcc_arch powerpc"
+     ;;
+esac
+fi # not cross-compiling
+fi # guess arch
+
+if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
+for arch in $ax_gcc_arch; do
+  if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code
+    flags="-mtune=$arch"
+    # -mcpu=$arch and m$arch generate nonportable code on every arch except
+    # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
+    case $host_cpu in i*86|x86_64*|amd64*) flags="$flags -mcpu=$arch -m$arch";; esac
+  else
+    flags="-march=$arch -mcpu=$arch -m$arch"
+  fi
+  for flag in $flags; do
+    AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break])
+  done
+  test "x$ax_cv_gcc_archflag" = xunknown || break
+done
+fi
+
+fi # $GCC=yes
+])
+AC_MSG_CHECKING([for gcc architecture flag])
+AC_MSG_RESULT($ax_cv_gcc_archflag)
+if test "x$ax_cv_gcc_archflag" = xunknown; then
+  m4_default([$3],:)
+else
+  m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"])
+fi
+])
diff --git a/m4/ax_gcc_x86_cpuid.m4 b/m4/ax_gcc_x86_cpuid.m4
new file mode 100644
index 0000000..6a01f48
--- /dev/null
+++ b/m4/ax_gcc_x86_cpuid.m4
@@ -0,0 +1,51 @@
+dnl @synopsis AX_GCC_X86_CPUID(OP)
+dnl @summary run x86 cpuid instruction OP using gcc inline assembler
+dnl @category Misc
+dnl
+dnl On Pentium and later x86 processors, with gcc or a compiler that
+dnl has a compatible syntax for inline assembly instructions, run
+dnl a small program that executes the cpuid instruction with
+dnl input OP.  This can be used to detect the CPU type.
+dnl
+dnl On output, the values of the eax, ebx, ecx, and edx registers
+dnl are stored as hexadecimal strings as "eax:ebx:ecx:edx" in
+dnl the cache variable ax_cv_gcc_x86_cpuid_OP.
+dnl
+dnl If the cpuid instruction fails (because you are running a cross-compiler,
+dnl or because you are not using gcc, or because you are on a processor
+dnl that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP is set
+dnl to the string "unknown".
+dnl
+dnl This macro mainly exists to be used in AX_GCC_ARCHFLAG.
+dnl
+dnl @version 2006-04-20
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_X86_CPUID],
+[AC_REQUIRE([AC_PROG_CC])
+AC_LANG_PUSH([C])
+AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1,
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [
+     int op = $1, eax, ebx, ecx, edx;
+     FILE *f;
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "pop %%ebx"
+             : "=a" (eax), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     __asm__("push %%ebx\n\t"
+             "cpuid\n\t"
+             "mov %%ebx, %%eax\n\t"
+             "pop %%ebx"
+             : "=a" (ebx), "=c" (ecx), "=d" (edx)
+             : "a" (op));
+     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+     fclose(f);
+     return 0;
+])], 
+     [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid],
+     [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid],
+     [ax_cv_gcc_x86_cpuid_$1=unknown])])
+AC_LANG_POP([C])
+])
diff --git a/m4/ax_lib_fftw3.m4 b/m4/ax_lib_fftw3.m4
new file mode 100644
index 0000000..fe35328
--- /dev/null
+++ b/m4/ax_lib_fftw3.m4
@@ -0,0 +1,125 @@
+# $Id: matlab.m4 2652 2008-12-04 13:19:40Z keiner $
+#
+# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program 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 GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# @synopsis AX_LIB_FFTW3
+# @summary Check configure options and assign variables related to the fftw3 library.
+# @category C
+#
+# @version 2008-12-07
+# @license GPLWithACException
+# @author Jens Keiner <jens at nfft.org>
+#
+#  If we find the library, set the shell variable `ax_have_fftw3' to `yes'.
+#  Otherwise, set `ax_have_fftw3' to `no'.
+
+AC_DEFUN([AX_LIB_FFTW3],
+[
+  AC_ARG_WITH(fftw3, [AC_HELP_STRING([--with-fftw3=DIR],
+  [compile with fftw3 in DIR])], with_fftw3=$withval, with_fftw3="yes")
+
+  AC_ARG_WITH(fftw3-libdir, [AC_HELP_STRING([--with-fftw3-libdir=DIR],
+  [compile with fftw3 library directory DIR])], fftw3_lib_dir=$withval, 
+    fftw3_lib_dir="yes")
+
+  AC_ARG_WITH(fftw3-includedir, [AC_HELP_STRING([--with-fftw3-includedir=DIR],
+  [compile with fftw3 include directory DIR])], fftw3_include_dir=$withval, 
+    fftw3_include_dir="yes")
+
+  if test "x$with_fftw3" != "xyes"; then
+    if test "x${fftw3_include_dir}" = "xyes"; then
+      fftw3_include_dir="$with_fftw3/include"
+    fi
+    if test "x${fftw3_lib_dir}" = "xyes"; then 
+      fftw3_lib_dir="$with_fftw3/lib"
+    fi
+  fi
+
+  if test "x${fftw3_include_dir}" != "xyes"; then
+    AX_CHECK_DIR([${fftw3_include_dir}],[],
+      [AC_MSG_ERROR([The directory ${fftw3_include_dir} does not exist.])])
+    fftw3_CPPFLAGS="-I$fftw3_include_dir"
+  else
+    fftw3_CPPFLAGS=""
+  fi
+
+  if test "x${fftw3_lib_dir}" != "xyes"; then 
+    AX_CHECK_DIR([${fftw3_lib_dir}],[],
+      [AC_MSG_ERROR([The directory ${fftw3_lib_dir} does not exist.])])
+    fftw3_LDFLAGS="-L$fftw3_lib_dir"
+  else
+    fftw3_LDFLAGS=""
+  fi
+
+  saved_LDFLAGS="$LDFLAGS"
+  saved_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+  LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+
+  # Check if header is present and usable.
+  ax_lib_fftw3=yes
+  ax_lib_fftw3_threads=yes
+  AC_CHECK_HEADER([fftw3.h], [], [ax_lib_fftw3=no;ax_lib_fftw3_threads=no])
+
+  if test "x$ax_lib_fftw3" = "xyes"; then
+    saved_LIBS="$LIBS"
+    AC_CHECK_LIB([fftw3], [fftw_execute], [], [ax_lib_fftw3=no])
+    fftw3_LIBS="-lfftw3"
+    LIBS="$saved_LIBS"
+  fi
+
+  if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes"; then
+    fftw3_threads_LIBS=""
+    # Combined lib
+    LIBS="-lfftw3 $LIBS"
+    fftw3_threads_LIBS="-lfftw3"
+    AC_MSG_CHECKING([for fftw_init_threads in -lfftw3])
+    AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
+    AC_MSG_RESULT([$ax_lib_fftw3_threads])
+    LIBS="$saved_LIBS"
+
+    if test "x$ax_lib_fftw3_threads" = "xno"; then
+      AC_CHECK_LIB([fftw3], [fftw_init_threads],[ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no], [-lpthread -lm])
+      fftw3_threads_LIBS="-lfftw3 -lpthread -lm"
+    fi
+
+    if test "x$ax_lib_fftw3_threads" = "xno"; then
+      LIBS="-lfftw3_threads -lfftw3 $LIBS"
+      fftw3_threads_LIBS="-lfftw3_threads -lfftw3"
+      AC_MSG_CHECKING([for fftw_init_threads in -lfftw3_threads])
+      AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
+      AC_MSG_RESULT([$ax_lib_fftw3_threads])
+      LIBS="$saved_LIBS"
+    fi
+
+    if test "x$ax_lib_fftw3_threads" = "xno"; then
+      LIBS="-lfftw3 -lpthread -lm $LIBS"
+      fftw3_threads_LIBS="-lfftw3_threads -lfftw3 -lpthread -lm"
+      AC_CHECK_LIB([fftw3_threads], [fftw_init_threads],[ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
+    fi
+
+    LIBS="$saved_LIBS"
+  fi
+
+  # Restore saved flags.
+  CPPFLAGS="$saved_CPPFLAGS"
+  LDFLAGS="$saved_LDFLAGS"
+
+  AC_SUBST(fftw3_LIBS)
+  AC_SUBST(fftw3_threads_LIBS)
+  AC_SUBST(fftw3_LDFLAGS)
+])
diff --git a/m4/ax_nfft_module.m4 b/m4/ax_nfft_module.m4
new file mode 100644
index 0000000..6779576
--- /dev/null
+++ b/m4/ax_nfft_module.m4
@@ -0,0 +1,14 @@
+AC_DEFUN([AX_NFFT_MODULE],
+[
+  AC_ARG_ENABLE($1, [AC_HELP_STRING([--enable-]$1,[build ]$2[ module (]$3[)])], 
+    ok=$enableval, ok=$nfft_module_default)
+  if m4_default($6,test "x$ok" = "xyes"); then
+    HAVE_$2="#define HAVE_$2 1"
+    $4
+  else
+    HAVE_$2="#undef HAVE_$2"
+    $5
+  fi
+  AM_CONDITIONAL(HAVE_$2, m4_default($6,test "x$ok" = "xyes"))
+  AC_SUBST(HAVE_$2)
+])
\ No newline at end of file
diff --git a/m4/ax_openmp.m4 b/m4/ax_openmp.m4
new file mode 100644
index 0000000..7ea794b
--- /dev/null
+++ b/m4/ax_openmp.m4
@@ -0,0 +1,99 @@
+# ===========================================================================
+#         http://www.gnu.org/software/autoconf-archive/ax_openmp.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro tries to find out how to compile programs that use OpenMP a
+#   standard API and set of compiler directives for parallel programming
+#   (see http://www-unix.mcs/)
+#
+#   On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS
+#   output variable to the flag (e.g. -omp) used both to compile *and* link
+#   OpenMP programs in the current language.
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well.
+#
+#   If you want to compile everything with OpenMP, you should set:
+#
+#     CFLAGS="$CFLAGS $OPENMP_CFLAGS"
+#     #OR#  CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
+#     #OR#  FFLAGS="$FFLAGS $OPENMP_FFLAGS"
+#
+#   (depending on the selected language).
+#
+#   The user can override the default choice by setting the corresponding
+#   environment variable (e.g. OPENMP_CFLAGS).
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is
+#   found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
+#   not found. If ACTION-IF-FOUND is not specified, the default action will
+#   define HAVE_OPENMP.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program 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 GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 8
+
+AC_DEFUN([AX_OPENMP], [
+AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
+
+AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown
+# Flags to try:  -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
+#                -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
+ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
+if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then
+  ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags"
+fi
+for ax_openmp_flag in $ax_openmp_flags; do
+  case $ax_openmp_flag in
+    none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;;
+    *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;;
+  esac
+  AC_TRY_LINK_FUNC(omp_set_num_threads,
+	[ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break])
+done
+[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS
+])
+if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then
+  m4_default([$2],:)
+else
+  if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then
+    OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp
+  fi
+  m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])])
+fi
+])dnl AX_OPENMP
diff --git a/m4/ax_prog_matlab.m4 b/m4/ax_prog_matlab.m4
new file mode 100644
index 0000000..2d35a7a
--- /dev/null
+++ b/m4/ax_prog_matlab.m4
@@ -0,0 +1,318 @@
+# $Id: ax_prog_matlab.m4 3892 2012-09-28 18:52:59Z keiner $
+# 
+# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program 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 GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# @synopsis AX_PROG_MATLAB
+# @summary set up compiler and linker flags for Matlab mex file compilation.
+# @category C
+#
+# @version 2008-12-07
+# @license GPLWithACException
+# @author Jens Keiner <jens at nfft.org>
+
+AC_DEFUN([AX_PROG_MATLAB],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AX_LIB_FFTW3])
+
+  # option to enable mex file compilation
+  AC_ARG_WITH(matlab,
+    [AC_HELP_STRING([--with-matlab=DIR],
+      [the directory where Matlab is installed])],
+    matlab_dir=${withval},matlab_dir="no")
+
+  AC_ARG_WITH(matlab-arch,
+    [AC_HELP_STRING([--with-matlab-arch=DIR],
+      [Matlab architecture acronym])],
+    matlab_arch=${withval},matlab_arch="yes")
+
+  AC_ARG_ENABLE(matlab-argchecks,
+    [AC_HELP_STRING([--enable-matlab-argchecks],
+      [Compile Matlab interface with argument checks [default=yes]])],
+      [ok="$enableval"],
+      [ok="yes"])
+
+  if test "x$ok" = "xyes"; then
+    AC_DEFINE(MATLAB_ARGCHECKS,1,[Define to enable Matlab argument checks.])
+  fi
+
+  AC_ARG_WITH(matlab-fftw3-libdir, [AC_HELP_STRING([--with-matlab-fftw3-libdir=DIR],
+  [compile Matlab interface with fftw3 library directory DIR])], matlab_fftw3_lib_dir=$withval, 
+    matlab_fftw3_lib_dir="yes")
+
+  AC_ARG_ENABLE(matlab-threads,
+    [AC_HELP_STRING([--enable-matlab-threads],
+      [Compile Matlab interface with thread support [default same as --enable-openmp]])],
+      [matlab_threads="$enableval"],
+      [matlab_threads="$enable_threads"])
+
+  AC_MSG_CHECKING([whether to check for Matlab])
+
+  if test "x${matlab_dir}" = "xno"; then
+    AC_MSG_RESULT([no])
+    ax_prog_matlab="no"
+  else
+    AC_MSG_RESULT([yes])
+
+    # Matlab root
+    AX_CHECK_DIR([${matlab_dir}],[],
+      [AC_MSG_ERROR([Please supply a valid path to a Matlab root directory or run configure without the option --with-matlab.])])
+
+    # subdirectories
+    matlab_bin_dir="${matlab_dir}/bin"
+    matlab_src_dir="${matlab_dir}/extern/src"
+    matlab_include_dir="${matlab_dir}/extern/include"
+    AX_CHECK_DIR([${matlab_bin_dir}],[],
+      [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+    # More recent versions of Matlab do no longer have the src directory.
+    # AX_CHECK_DIR([${matlab_src_dir}],[],
+    #   [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+    AX_CHECK_DIR([${matlab_include_dir}],[],
+      [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+
+    # architecture and mex file extension
+    if test ! "x${matlab_arch}" = "xyes"; then
+      AC_MSG_CHECKING([for Matlab architecture])
+      AC_MSG_RESULT([${matlab_arch}])
+      # mex file extension for architecture
+      AC_MSG_CHECKING([for mex file extension])
+      case $matlab_arch in
+        glnx86) matlab_mexext="mexglx";;
+        glnxa64) matlab_mexext="mexa64";;
+        mac) matlab_mexext="mexmac";;
+        maci) matlab_mexext="mexmaci";;
+        maci64) matlab_mexext="mexmaci64";;
+        sol64) matlab_mexext="mexs64";;
+        win32) matlab_mexext="mexw32";;
+        win64) matlab_mexext="mexw64";;
+        *) AC_MSG_ERROR([Unsupported or invalid architecture ${matlab_arch}.]);;
+      esac
+      AC_MSG_RESULT([${matlab_mexext}])
+    else 
+      matlab_mexext="unknown"
+      matlab_arch="unknown"
+
+      # mex file extension, maybe
+      for matlab_check_prog_mexext in mexext mexext.sh mexext.bat; do
+        unset ac_cv_path_matlab_prog_mexext
+        AC_PATH_PROG([matlab_prog_mexext],[$matlab_check_prog_mexext],[no],
+          [$matlab_bin_dir$PATH_SEPARATOR$PATH$PATH_SEPARATOR$matlab_bin_dir])
+        if test ! "x${matlab_prog_mexext}" = "xno"; then
+          AC_MSG_CHECKING([for mex file extension])
+          if test "x${host_os}" = "xmingw32"; then
+            matlab_mexext=mexw32
+          else
+            matlab_mexext=`${matlab_prog_mexext}`
+            matlab_mexext=`echo ${matlab_mexext} | tr -d '\r\n'`
+          fi  
+          AC_MSG_RESULT([${matlab_mexext}])
+          break
+        fi
+      done
+
+      # architecture, maybe
+      if test "x${matlab_mexext}" = "xunknown"; then
+        # Try guessing the architecture based on host
+        case $host in
+          *86_64*linux*) matlab_arch_test="glnxa64";;
+          *86*linux*) matlab_arch_test="glnx86";;
+          *powerpc*darwin*) matlab_arch_test="mac mac64";;
+          *86*darwin*) matlab_arch_test="maci maci64";; 
+          *solaris*) matlab_arch_test="sol sol64";;
+          *cygwin*) matlab_arch_test="win32 win64";;
+          *mingw*) matlab_arch_test="win32 win64";;
+          *) AC_MSG_ERROR([Cannot guess Matlab architecture based on host type.]);;
+        esac
+        AC_MSG_CHECKING([for architecture])
+        for matlab_arch in "$matlab_arch_test"; do
+          if test -d "${matlab_bin_dir}/${matlab_arch}" -a -f "${matlab_bin_dir}/${matlab_arch}/MATLAB"; then
+            AC_MSG_RESULT([${matlab_arch}])
+            break
+          fi
+          matlab_arch="unkown"
+          AC_MSG_RESULT([unknown])
+        done
+      fi
+       
+      # mex file extension or architecture found
+      if test "x${matlab_mexext}" = "xunknown" -a "x${matlab_arch}" = "xunknown"; then
+        AC_MSG_ERROR([Could not determine mex file extension nor Matlab architecture. Please supply a valid architecture flag using the option --with-matlab-arch])
+      fi
+
+      if test "x${matlab_arch}" = "xunknown"; then
+        # architecture for mex file extension 
+        AC_MSG_CHECKING([for architecture])
+        case ${matlab_mexext} in
+          mexglx) matlab_arch="glnx86";;
+          mexa64) matlab_arch="glnxa64";;
+          mexmac) matlab_arch="mac";;
+          mexmaci) matlab_arch="maci";;
+          mexmaci64) matlab_arch="maci64";;
+          mexs64) matlab_arch="sol64";;
+          mexw32) matlab_arch="win32";;
+          mexw64) matlab_arch="win64";;
+          *) AC_MSG_ERROR([Unsupported mex file extension ${matlab_mexext}.]);;
+        esac
+        AC_MSG_RESULT([${matlab_arch}])
+      elif test "x${matlab_mexext}" = "xunknown"; then
+        AC_MSG_CHECKING([for mex file extension])
+        case $matlab_arch in
+          glnx86) matlab_mexext="mexglx";;
+          glnxa64) matlab_mexext="mexa64";;
+          mac) matlab_mexext="mexmac";;
+          maci) matlab_mexext="mexmaci";;
+          maci64) matlab_mexext="mexmaci64";;
+          sol64) matlab_mexext="mexs64";;
+          win32) matlab_mexext="mexw32";;
+          win64) matlab_mexext="mexw64";;
+          *) AC_MSG_ERROR([Unsupported or invalid architecture ${matlab_arch}.]);;
+        esac
+        AC_MSG_RESULT([${matlab_mexext}])
+      fi
+    fi
+
+    # add "." to mex file extension
+    matlab_mexext=".$matlab_mexext"
+
+    # arch bin dir
+    matlab_arch_bin_dir="${matlab_bin_dir}/${matlab_arch}"
+    AX_CHECK_DIR([${matlab_arch_bin_dir}],[],
+      [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+
+    # dynamic library extension for architecture
+    case $matlab_arch in
+      glnx86|glnxa64|sol|sol64) matlab_libext=".so";;
+      mac|mac64|maci|maci64) matlab_libext=".dylib";;
+      win32|win64) matlab_libext=".dll";;
+      *) AC_MSG_ERROR([Unsupported or invalid architecture ${matlab_arch}.]);;
+    esac
+
+    # libraries
+    matlab_LDFLAGS="-L${matlab_arch_bin_dir}"
+    saved_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS ${matlab_LDFLAGS}"
+    matlab_LIBS=""
+    matlab_fftw3_LIBS=""
+    matlab_fftw3_LDFLAGS=""
+    AC_CHECK_LIB([mx],[mxMalloc],[matlab_LIBS="$matlab_LIBS -lmx"],
+      [AC_CHECK_FILE([${matlab_arch_bin_dir}/libmx${matlab_libext}],
+      [matlab_LIBS="$matlab_LIBS -lmx"],
+      [AC_MSG_ERROR([Needed Matlab library mx not usable.])])],[])
+    AC_CHECK_LIB([mex],[mexCallMATLAB],[matlab_LIBS="$matlab_LIBS -lmex"],
+      [AC_CHECK_FILE([${matlab_arch_bin_dir}/libmex${matlab_libext}],
+      [matlab_LIBS="$matlab_LIBS -lmex"],
+      [AC_MSG_ERROR([Needed Matlab library mex not usable.])])],[])
+    AC_CHECK_LIB([mat],[matGetVariable],[matlab_LIBS="$matlab_LIBS -lmat"],
+      [AC_CHECK_FILE([${matlab_arch_bin_dir}/libmat${matlab_libext}],
+      [matlab_LIBS="$matlab_LIBS -lmat"],
+      [AC_MSG_ERROR([Needed Matlab library mat not usable.])])],[])
+
+    LDFLAGS="$saved_LDFLAGS"
+
+    matlab_CPPFLAGS="-I${matlab_include_dir}"
+
+    # mexversion.c
+    AC_CHECK_FILE([${matlab_src_dir}/mexversion.c],[matlab_CPPFLAGS="${matlab_CPPFLAGS} -I${matlab_src_dir}"; AC_DEFINE([HAVE_MEXVERSION_C],[1],[Define to have the file mexversion.c])],[AC_MSG_WARN([File ]${matlab_src_dir}[/mexversion.c not found])])
+
+    ax_prog_matlab="yes"
+
+    # Only overwrite Matlab fftw3 lib dir when not explicitly set
+    if test "x${matlab_fftw3_lib_dir}" = "xyes"; then
+      matlab_fftw3_lib_dir="${matlab_bin_dir}/${matlab_arch}"
+    else
+      AX_CHECK_DIR([${matlab_fftw3_lib_dir}],[],
+      [AC_MSG_ERROR([The directory ${matlab_fftw3_lib_dir} does not seem to be a valid fftw3 library directory.])])
+      matlab_fftw3_LDFLAGS="-L$matlab_fftw3_lib_dir"
+    fi
+
+    saved_LIBS="$LIBS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    matlab_fftw3_LIBS="-lfftw3"
+    LIBS="-lfftw3 $LIBS"
+    LDFLAGS="-L$matlab_fftw3_lib_dir ${matlab_LDFLAGS} $LDFLAGS"
+    AC_MSG_CHECKING([for Matlab fftw3 library])
+    AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_execute])], [ax_matlab_lib_fftw3=yes],[ax_matlab_lib_fftw3=no])
+    AC_MSG_RESULT([$ax_matlab_lib_fftw3])
+
+    if test "x$ax_matlab_lib_fftw3" = "xno"; then
+      matlab_fftw3_LIBS="-lfftw3 -lm"
+      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+      AC_MSG_CHECKING([for Matlab fftw3 library (-lm set)])
+      AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_execute])], [ax_matlab_lib_fftw3=yes],[ax_matlab_lib_fftw3=no])
+      AC_MSG_RESULT([$ax_matlab_lib_fftw3])
+    fi
+
+    if test "x$ax_matlab_lib_fftw3" = "xno"; then
+      matlab_fftw3_LIBS="-lfftw3 -pthread -lm"
+      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+      AC_MSG_CHECKING([for Matlab fftw3 library (-lpthread -lm set)])
+      AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_execute])], [ax_matlab_lib_fftw3=yes],[ax_matlab_lib_fftw3=no])
+      AC_MSG_RESULT([$ax_matlab_lib_fftw3])
+    fi
+
+    if test "x$ax_matlab_lib_fftw3" = "xno"; then
+      AC_MSG_ERROR([You don't seem to have installed installed the FFTW 3 libray for the NFFT Matlab interface.])
+    fi
+
+    if test "x$matlab_threads" = "xyes"; then
+      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+      AC_MSG_CHECKING([for Matlab combined fftw3 library with thread support])
+      AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_matlab_lib_fftw3_threads=yes],[ax_matlab_lib_fftw3_threads=no])
+      AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        ax_matlab_lib_fftw3_threads="yes"
+        LIBS="$matlab_fftw3_LIBS -lpthread -lm $saved_LIBS"
+        AC_MSG_CHECKING([for Matlab combined fftw3 library with thread support (-lpthread -lm set)])
+        AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [matlab_fftw3_LIBS="$matlab_fftw3_LIBS -lpthread -lm"],[ax_matlab_lib_fftw3_threads=no])
+        AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+      fi
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        ax_matlab_lib_fftw3_threads="yes"
+        LIBS="-lfftw3_threads $matlab_fftw3_LIBS $saved_LIBS"
+        AC_MSG_CHECKING([for Matlab fftw3 library with thread support])
+        AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [matlab_fftw3_LIBS="-lfftw3_threads $matlab_fftw3_LIBS"],[ax_matlab_lib_fftw3_threads=no])
+        AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+      fi
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        ax_matlab_lib_fftw3_threads="yes"
+        LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS $saved_LIBS"
+        AC_MSG_CHECKING([for Matlab fftw3 library with thread support (-lpthread set)])
+        AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [matlab_fftw3_LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS"],[ax_matlab_lib_fftw3_threads=no])
+        AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+      fi
+
+      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+        AC_MSG_ERROR([You don't seem to have installed the FFTW 3 libray for the NFFT Matlab interface.])
+      fi
+    fi
+
+    LIBS="$saved_LIBS"
+    LDFLAGS="$saved_LDFLAGS"
+  fi
+  AM_CONDITIONAL(HAVE_MATLAB, test "x$ax_prog_matlab" = "xyes" )
+  AM_CONDITIONAL(HAVE_MATLAB_THREADS, test "x$matlab_threads" = "xyes")
+  AC_SUBST(matlab_CPPFLAGS)
+  AC_SUBST(matlab_LIBS)
+  AC_SUBST(matlab_LDFLAGS)
+  AC_SUBST(matlab_mexext)
+  AC_SUBST(matlab_fftw3_LIBS)
+  AC_SUBST(matlab_fftw3_LDFLAGS)
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..44e0ecf
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7982 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_REPLACE_SHELLFNS
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
+
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[23]].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t at _DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX([$1])
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX([$1])
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
+
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
+
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..5d9acd8
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,384 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..07a8602
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..c573da9
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/matlab/Makefile.am b/matlab/Makefile.am
new file mode 100644
index 0000000..3aa1ac6
--- /dev/null
+++ b/matlab/Makefile.am
@@ -0,0 +1,23 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+if HAVE_NFSFT
+  DIR_NFSFT=nfsft
+else
+  DIR_NFSFT=
+endif
+
+DIR_NFFT=nfft
+
+SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT)
+
+AM_CPPFLAGS = -I$(top_srcdir)/include $(matlab_CPPFLAGS)
+
+noinst_LTLIBRARIES = libmatlab.la
+
+libmatlab_la_SOURCES = args.c malloc.c imex.h
+
+if HAVE_MATLAB_THREADS
+  libmatlab_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+EXTRA_DIST = README
diff --git a/matlab/Makefile.in b/matlab/Makefile.in
new file mode 100644
index 0000000..a0b6aa6
--- /dev/null
+++ b/matlab/Makefile.in
@@ -0,0 +1,733 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmatlab_la_LIBADD =
+am_libmatlab_la_OBJECTS = libmatlab_la-args.lo libmatlab_la-malloc.lo
+libmatlab_la_OBJECTS = $(am_libmatlab_la_OBJECTS)
+libmatlab_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libmatlab_la_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libmatlab_la_SOURCES)
+DIST_SOURCES = $(libmatlab_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = . nfft nfsft
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFSFT_FALSE@DIR_NFSFT = 
+ at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
+DIR_NFFT = nfft
+SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT)
+AM_CPPFLAGS = -I$(top_srcdir)/include $(matlab_CPPFLAGS)
+noinst_LTLIBRARIES = libmatlab.la
+libmatlab_la_SOURCES = args.c malloc.c imex.h
+ at HAVE_MATLAB_THREADS_TRUE@libmatlab_la_CFLAGS = $(OPENMP_CFLAGS)
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu matlab/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libmatlab.la: $(libmatlab_la_OBJECTS) $(libmatlab_la_DEPENDENCIES) $(EXTRA_libmatlab_la_DEPENDENCIES) 
+	$(libmatlab_la_LINK)  $(libmatlab_la_OBJECTS) $(libmatlab_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmatlab_la-args.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmatlab_la-malloc.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libmatlab_la-args.lo: args.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -MT libmatlab_la-args.lo -MD -MP -MF $(DEPDIR)/libmatlab_la-args.Tpo -c -o libmatlab_la-args.lo `test -f 'args.c' || echo '$(srcdir)/'`args.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libmatlab_la-args.Tpo $(DEPDIR)/libmatlab_la-args.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='args.c' object='libmatlab_la-args.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -c -o libmatlab_la-args.lo `test -f 'args.c' || echo '$(srcdir)/'`args.c
+
+libmatlab_la-malloc.lo: malloc.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -MT libmatlab_la-malloc.lo -MD -MP -MF $(DEPDIR)/libmatlab_la-malloc.Tpo -c -o libmatlab_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libmatlab_la-malloc.Tpo $(DEPDIR)/libmatlab_la-malloc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='malloc.c' object='libmatlab_la-malloc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -c -o libmatlab_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
+	ctags-recursive distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/README b/matlab/README
new file mode 100644
index 0000000..79623c8
--- /dev/null
+++ b/matlab/README
@@ -0,0 +1 @@
+This directory contains Matlab interfaces to the NFFT library.
diff --git a/matlab/args.c b/matlab/args.c
new file mode 100644
index 0000000..5c65257
--- /dev/null
+++ b/matlab/args.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: args.c 3967 2013-04-23 08:59:35Z tovo $ */
+
+#include "config.h"
+#include "imex.h"
+
+int nfft_mex_get_int(const mxArray *p, const char *errmsg)
+{
+  DM(if (!mxIsDouble(p) || mxIsComplex(p) || mxGetM(p) != 1 || mxGetN(p) != 1)
+    mexErrMsgTxt(errmsg);)
+  return mxGetScalar(p);
+}
+
+double nfft_mex_get_double(const mxArray *p, const char *errmsg)
+{
+  DM(if (!mxIsDouble(p) || mxIsComplex(p) || mxGetM(p) != 1 || mxGetN(p) != 1)
+    mexErrMsgTxt(errmsg);)
+  return mxGetScalar(p);
+}
diff --git a/matlab/imex.h b/matlab/imex.h
new file mode 100644
index 0000000..2e79169
--- /dev/null
+++ b/matlab/imex.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: imex.h 3967 2013-04-23 08:59:35Z tovo $ */
+
+/* NFFT mex internal header file */
+#ifndef MEXUTIL_H
+#define MEXUTIL_H
+
+#include <math.h>
+
+#ifdef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
+  #undef __STDC_UTF_16__
+#endif
+
+#include <mex.h>
+#include <matrix.h>
+
+#ifdef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
+  #define __STDC_UTF_16__
+#endif
+
+/*----------------------------------------------------------------------------*/
+/* Replacements for nfft_malloc and nfft_free plus install routine */
+extern void *nfft_mex_malloc(size_t n);
+extern void nfft_mex_free(void *p);
+extern void nfft_mex_install_mem_hooks(void);
+
+int nfft_mex_get_int(const mxArray *p, const char *errmsg);
+double nfft_mex_get_double(const mxArray *p, const char *errmsg);
+
+#ifdef MATLAB_ARGCHECKS
+#define DM(Y) Y
+#else
+#define DM(Y)
+#endif
+
+/*----------------------------------------------------------------------------*/
+/* Checks if argument is a scalar. */
+#define ARG_CHECK_SCALAR(x,y) \
+if (mxGetM(prhs[x]) != 1 || mxGetN(prhs[x]) != 1 || mxIsDouble(prhs[x]) != 1) \
+  mexErrMsgTxt(#y " argument must be a scalar.");
+
+/* Gets and stores pointer to argument data. */
+#define ARG_GET_PTR(x,y) \
+y = mxGetPr(prhs[x]);
+
+/* Checks and get argument as nonnegative integer. */
+#define ARG_GET_NONNEG_INT(x,y,z) \
+ARG_CHECK_SCALAR(x,y) \
+ARG_GET_PTR(x,z) \
+if (z[0] != round(z[0]) || z[0] < 0) \
+  mexErrMsgTxt(#y " argument must be a nonnegative integer.");
+
+/* Checks and get argument as positive integer. */
+#define ARG_GET_POS_INT(x,y,z) \
+ARG_CHECK_SCALAR(x,y) \
+ARG_GET_PTR(x,z) \
+if (z[0] != round(z[0]) || z[0] < 1) \
+  mexErrMsgTxt(#y " argument must be a nonnegative integer.");
+
+/* Checks and get argument as nonnegative double. */
+#define ARG_GET_NONNEG_DOUBLE(x,y,z) \
+ARG_CHECK_SCALAR(x,y) \
+ARG_GET_PTR(x,z) \
+if (z[0] < 0) \
+  mexErrMsgTxt(#y " argument must be a nonnegative number.");
+
+#endif
diff --git a/matlab/malloc.c b/matlab/malloc.c
new file mode 100644
index 0000000..acc59d6
--- /dev/null
+++ b/matlab/malloc.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: malloc.c 3967 2013-04-23 08:59:35Z tovo $ */
+
+#include "config.h"
+#include "imex.h"
+#include "nfft3.h"
+
+/** Replacement for fftw_malloc in mex files */
+void *nfft_mex_malloc(size_t n)
+{
+  void *p;
+
+ #pragma omp critical (nfft_omp_matlab)
+ {
+  p = mxMalloc(n);
+
+  /* Should never be reached if mxMalloc fails (in a mex file) but in Matlab
+   * you never know... */
+  if (!p)
+    mexErrMsgTxt("Not enough memory.");
+
+  mexMakeMemoryPersistent(p);
+ }
+  return p;
+}
+
+/** Replacement for fftw_free in mex files */
+void nfft_mex_free(void *p)
+{
+ #pragma omp critical (nfft_omp_matlab)
+ {
+  if (p)
+    mxFree(p);
+ }
+}
+
+/** install hooks. */
+void nfft_mex_install_mem_hooks(void)
+{
+  nfft_malloc_hook = nfft_mex_malloc;
+  nfft_free_hook = nfft_mex_free;
+}
diff --git a/matlab/nfft/Contents.m b/matlab/nfft/Contents.m
new file mode 100644
index 0000000..07134e6
--- /dev/null
+++ b/matlab/nfft/Contents.m
@@ -0,0 +1,30 @@
+% NFFT
+%
+% Files
+%   FFT_OUT_OF_PLACE    - FFT flag
+%   FFTW_ESTIMATE       - FFT flag
+%   FFTW_MEASURE        - FFT flag
+%   FG_PSI              - Precompuation flag
+%   ndft_adjoint        - Adjoint nonequispaced discrete Fourier transform (direct algorithm)
+%   ndft_trafo          - Nonequispaced discrete Fourier transformation (direct algorithm)
+%   nfft_adjoint        - Adjoint nonequispaced fast Fourier transform
+%   nfft_finalize       - Finalize plan
+%   nfft_get_f          - Get function values from plan
+%   nfft_get_f_hat      - Get Fourier coefficients from plan
+%   nfft_get_x          - Get nodes from plan
+%   nfft_init_1d        - Initialise plans
+%   nfft_init_2d        - Initialise plans
+%   nfft_init_3d        - Initialise plans
+%   nfft_init_guru      - Initialise plans, no error handling
+%   nfft_precompute_psi - Precompute psi, dependent on nodes x
+%   nfft_set_f          - Set function values in plan
+%   nfft_set_f_hat      - Set Fourier coefficients in plan
+%   nfft_set_x          - Set nodes in plan
+%   nfft_trafo          - nonequispaced fast Fourier transformat
+%   nfftmex             - Gateway function to NFFT module from NFFT3
+%   PRE_FG_PSI          - Precomputation flag
+%   PRE_FULL_PSI        - Precomputation flag
+%   PRE_LIN_PSI         - Precomputation flag
+%   PRE_PHI_HUT         - Precomputation flag
+%   PRE_PSI             - Precomputation flag
+%   simple_test         - Example program: Basic usage principles
diff --git a/matlab/nfft/FFTW_ESTIMATE.m b/matlab/nfft/FFTW_ESTIMATE.m
new file mode 100644
index 0000000..9f59800
--- /dev/null
+++ b/matlab/nfft/FFTW_ESTIMATE.m
@@ -0,0 +1,25 @@
+% FFTW_ESTIMATE FFT flag
+%   Valid for FFTW3
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FFTW_ESTIMATE.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FFTW_ESTIMATE()
+
+f = bitshift(1, 6);
diff --git a/matlab/nfft/FFTW_MEASURE.m b/matlab/nfft/FFTW_MEASURE.m
new file mode 100644
index 0000000..fd13945
--- /dev/null
+++ b/matlab/nfft/FFTW_MEASURE.m
@@ -0,0 +1,25 @@
+%FFTW_MEASURE FFT flag
+%   Valid for FFTW3
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FFTW_MEASURE.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FFTW_MEASURE()
+
+f = 0;
diff --git a/matlab/nfft/FFT_OUT_OF_PLACE.m b/matlab/nfft/FFT_OUT_OF_PLACE.m
new file mode 100644
index 0000000..1a4e656
--- /dev/null
+++ b/matlab/nfft/FFT_OUT_OF_PLACE.m
@@ -0,0 +1,25 @@
+%FFT_OUT_OF_PLACE FFT flag
+%   If this flag is set, FFTW uses disjoint input/output vectors.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FFT_OUT_OF_PLACE.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FFT_OUT_OF_PLACE()
+
+f = bitshift(1, 9);
diff --git a/matlab/nfft/FG_PSI.m b/matlab/nfft/FG_PSI.m
new file mode 100644
index 0000000..638864b
--- /dev/null
+++ b/matlab/nfft/FG_PSI.m
@@ -0,0 +1,27 @@
+%FG_PSI Precompuation flag
+%   If this flag is set, the convolution step (the multiplication with the
+%   sparse matrix B) uses particular properties of the Gaussian window function
+%   to trade multiplications for direct calls to exponential function.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FG_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FG_PSI()
+
+f = bitshift(1, 1);
diff --git a/matlab/nfft/Makefile.am b/matlab/nfft/Makefile.am
new file mode 100644
index 0000000..5980fbb
--- /dev/null
+++ b/matlab/nfft/Makefile.am
@@ -0,0 +1,44 @@
+# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfftmatlabdir = $(datadir)/nfft/matlab/nfft
+
+# library
+lib_LTLIBRARIES = libnfft.la
+libnfft_la_SOURCES = nfftmex.c
+
+libnfft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+
+libnfft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+
+if HAVE_MATLAB_THREADS
+libnfft_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+
+dist_nfftmatlab_DATA = FFT_OUT_OF_PLACE.m FFTW_ESTIMATE.m FFTW_MEASURE.m FG_PSI.m Contents.m ndft_adjoint.m ndft_trafo.m \
+	nfft_adjoint.m nfft_finalize.m nfft_get_f.m nfft_get_f_hat.m nfft_get_x.m nfft_init_1d.m nfft_init_2d.m \
+        nfft_init_3d.m nfft_init_guru.m nfft_precompute_psi.m nfft_set_f.m nfft_set_f_hat.m nfft_set_x.m nfft_trafo.m \
+        PRE_FG_PSI.m PRE_FULL_PSI.m PRE_LIN_PSI.m PRE_PHI_HUT.m PRE_PSI.m simple_test.m \
+	nfft_get_num_threads.m nfft.m test_nfft1d.m test_nfft2d.m test_nfft3d.m
+
+# target all-am builds .libs/libnfft at matlab_mexext@
+nfftmex at matlab_mexext@: all-am
+	rm -f ./nfftmex at matlab_mexext@
+	$(LN_S) .libs/libnfft at matlab_mexext@ ./nfftmex at matlab_mexext@
+
+all: all-am nfftmex at matlab_mexext@
+
+clean: clean-am
+	rm -f ./nfftmex at matlab_mexext@
+
+install-exec-hook:
+	rm -f $(libdir)/nfftmex at matlab_mexext@
+	$(LN_S) $(libdir)/libnfft at matlab_mexext@ $(libdir)/nfftmex at matlab_mexext@
+
+uninstall-hook:
+	rm -f $(libdir)/nfftmex at matlab_mexext@
+
diff --git a/matlab/nfft/Makefile.in b/matlab/nfft/Makefile.in
new file mode 100644
index 0000000..0c3dfa4
--- /dev/null
+++ b/matlab/nfft/Makefile.in
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab/nfft
+DIST_COMMON = $(dist_nfftmatlab_DATA) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfftmatlabdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libnfft_la_DEPENDENCIES = $(top_builddir)/libnfft3_matlab.la \
+	$(top_builddir)/matlab/libmatlab.la $(am__DEPENDENCIES_1)
+am_libnfft_la_OBJECTS = libnfft_la-nfftmex.lo
+libnfft_la_OBJECTS = $(am_libnfft_la_OBJECTS)
+libnfft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnfft_la_CFLAGS) \
+	$(CFLAGS) $(libnfft_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfft_la_SOURCES)
+DIST_SOURCES = $(libnfft_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DATA = $(dist_nfftmatlab_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfftmatlabdir = $(datadir)/nfft/matlab/nfft
+
+# library
+lib_LTLIBRARIES = libnfft.la
+libnfft_la_SOURCES = nfftmex.c
+libnfft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+ at HAVE_MATLAB_THREADS_TRUE@libnfft_la_CFLAGS = $(OPENMP_CFLAGS)
+dist_nfftmatlab_DATA = FFT_OUT_OF_PLACE.m FFTW_ESTIMATE.m FFTW_MEASURE.m FG_PSI.m Contents.m ndft_adjoint.m ndft_trafo.m \
+	nfft_adjoint.m nfft_finalize.m nfft_get_f.m nfft_get_f_hat.m nfft_get_x.m nfft_init_1d.m nfft_init_2d.m \
+        nfft_init_3d.m nfft_init_guru.m nfft_precompute_psi.m nfft_set_f.m nfft_set_f_hat.m nfft_set_x.m nfft_trafo.m \
+        PRE_FG_PSI.m PRE_FULL_PSI.m PRE_LIN_PSI.m PRE_PHI_HUT.m PRE_PSI.m simple_test.m \
+	nfft_get_num_threads.m nfft.m test_nfft1d.m test_nfft2d.m test_nfft3d.m
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu matlab/nfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfft.la: $(libnfft_la_OBJECTS) $(libnfft_la_DEPENDENCIES) $(EXTRA_libnfft_la_DEPENDENCIES) 
+	$(libnfft_la_LINK) -rpath $(libdir) $(libnfft_la_OBJECTS) $(libnfft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfft_la-nfftmex.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libnfft_la-nfftmex.lo: nfftmex.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_la_CFLAGS) $(CFLAGS) -MT libnfft_la-nfftmex.lo -MD -MP -MF $(DEPDIR)/libnfft_la-nfftmex.Tpo -c -o libnfft_la-nfftmex.lo `test -f 'nfftmex.c' || echo '$(srcdir)/'`nfftmex.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfft_la-nfftmex.Tpo $(DEPDIR)/libnfft_la-nfftmex.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfftmex.c' object='libnfft_la-nfftmex.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_la_CFLAGS) $(CFLAGS) -c -o libnfft_la-nfftmex.lo `test -f 'nfftmex.c' || echo '$(srcdir)/'`nfftmex.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-dist_nfftmatlabDATA: $(dist_nfftmatlab_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_nfftmatlab_DATA)'; test -n "$(nfftmatlabdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(nfftmatlabdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(nfftmatlabdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfftmatlabdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(nfftmatlabdir)" || exit $$?; \
+	done
+
+uninstall-dist_nfftmatlabDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_nfftmatlab_DATA)'; test -n "$(nfftmatlabdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(nfftmatlabdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfftmatlabdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_nfftmatlabDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_nfftmatlabDATA uninstall-libLTLIBRARIES
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-exec-am install-strip uninstall-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-dist_nfftmatlabDATA install-dvi install-dvi-am \
+	install-exec install-exec-am install-exec-hook install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-dist_nfftmatlabDATA \
+	uninstall-hook uninstall-libLTLIBRARIES
+
+
+# target all-am builds .libs/libnfft at matlab_mexext@
+nfftmex at matlab_mexext@: all-am
+	rm -f ./nfftmex at matlab_mexext@
+	$(LN_S) .libs/libnfft at matlab_mexext@ ./nfftmex at matlab_mexext@
+
+all: all-am nfftmex at matlab_mexext@
+
+clean: clean-am
+	rm -f ./nfftmex at matlab_mexext@
+
+install-exec-hook:
+	rm -f $(libdir)/nfftmex at matlab_mexext@
+	$(LN_S) $(libdir)/libnfft at matlab_mexext@ $(libdir)/nfftmex at matlab_mexext@
+
+uninstall-hook:
+	rm -f $(libdir)/nfftmex at matlab_mexext@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/nfft/PRE_FG_PSI.m b/matlab/nfft/PRE_FG_PSI.m
new file mode 100644
index 0000000..8324451
--- /dev/null
+++ b/matlab/nfft/PRE_FG_PSI.m
@@ -0,0 +1,28 @@
+%PRE_FG_PSI Precomputation flag
+%   If this flag is set, the convolution step (the multiplication with the sparse
+%   matrix B) uses particular properties of the Gaussian window function to trade
+%   multiplications for direct calls to exponential function (the remaining 2dM
+%   direct calls are precomputed).
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_FG_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_FG_PSI()
+
+f = bitshift(1, 3);
diff --git a/matlab/nfft/PRE_FULL_PSI.m b/matlab/nfft/PRE_FULL_PSI.m
new file mode 100644
index 0000000..6eec515
--- /dev/null
+++ b/matlab/nfft/PRE_FULL_PSI.m
@@ -0,0 +1,27 @@
+%PRE_FULL_PSI Precomputation flag
+%   If this flag is set, the convolution step (the multiplication with the sparse
+%   matrix B) uses (2m+2)^dM precomputed values of the window function, in
+%   addition indices of source and target vectors are stored.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_FULL_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_FULL_PSI()
+
+f = bitshift(1, 5);
diff --git a/matlab/nfft/PRE_LIN_PSI.m b/matlab/nfft/PRE_LIN_PSI.m
new file mode 100644
index 0000000..bfed81c
--- /dev/null
+++ b/matlab/nfft/PRE_LIN_PSI.m
@@ -0,0 +1,27 @@
+%PRE_LIN_PSI Precomputation flag
+%   If this flag is set, the convolution step (the multiplication with the sparse
+%   matrix B) uses linear interpolation from a lookup table of equispaced samples
+%   of the window function instead of exact values of the window function.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_LIN_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_LIN_PSI()
+
+f = bitshift(1, 2);
diff --git a/matlab/nfft/PRE_PHI_HUT.m b/matlab/nfft/PRE_PHI_HUT.m
new file mode 100644
index 0000000..ea8f2bc
--- /dev/null
+++ b/matlab/nfft/PRE_PHI_HUT.m
@@ -0,0 +1,27 @@
+%PRE_PHI_HUT Precomputation flag
+%   If this flag is set, the deconvolution step (the multiplication with the
+%   diagonal matrix D) uses precomputed values of the Fourier transformed window
+%   function.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_PHI_HUT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_PHI_HUT()
+
+f = bitshift(1, 0);
diff --git a/matlab/nfft/PRE_PSI.m b/matlab/nfft/PRE_PSI.m
new file mode 100644
index 0000000..b49b799
--- /dev/null
+++ b/matlab/nfft/PRE_PSI.m
@@ -0,0 +1,25 @@
+%PRE_PSI Precomputation flag
+%   If this flag is set, the convolution step (the multiplication with the sparse
+%   matrix B uses (2m+2)dM precomputed values of the window function.
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_PSI()
+
+f = bitshift(1, 4);
diff --git a/matlab/nfft/ndft_adjoint.m b/matlab/nfft/ndft_adjoint.m
new file mode 100644
index 0000000..ec8328f
--- /dev/null
+++ b/matlab/nfft/ndft_adjoint.m
@@ -0,0 +1,23 @@
+%NDFT_ADJOINT Adjoint nonequispaced discrete Fourier transform (direct algorithm)
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function ndft_adjoint(p)
+
+nfftmex('adjoint_direct',p)
diff --git a/matlab/nfft/ndft_trafo.m b/matlab/nfft/ndft_trafo.m
new file mode 100644
index 0000000..895933c
--- /dev/null
+++ b/matlab/nfft/ndft_trafo.m
@@ -0,0 +1,23 @@
+%NDFT_TRAFO  Nonequispaced discrete Fourier transformation (direct algorithm)
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function ndft_trafo(p)
+
+nfftmex('trafo_direct',p)
diff --git a/matlab/nfft/nfft.m b/matlab/nfft/nfft.m
new file mode 100644
index 0000000..5d018e5
--- /dev/null
+++ b/matlab/nfft/nfft.m
@@ -0,0 +1,387 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% This class provides robust a Matlab interface to the NFFT library.
+%
+% Examples
+%   See Matlab scripts test_nfft*d.m.
+classdef nfft < handle
+
+properties(Dependent=true)
+	x;     % nodes (real Mxd matrix)
+	fhat;  % fourier coefficients (complex column vector of length N1, N1*N2 or N1*N2*N3, for d=2 columnwise linearisation of N1xN2 matrix and for d=3 columnwise linearisation of N1xN2xN3 array)
+	f;     % samples (complex column vector of length M)
+end %properties
+
+properties(Dependent=true,SetAccess='private');
+	N;
+end %properties
+
+properties(SetAccess='private')
+	d=[];   % spatial dimension (d=1, d=2 or d=3)
+	M=[];   % number of sampling points (positive integer)
+end %properties
+
+properties(Hidden=true,SetAccess='private',GetAccess='private');
+	plan=[];
+	N1=[];  % number of nodes in first direction (positive even integer)
+	N2=[];  % number of nodes in second direction (positive even integer)
+	N3=[];  % number of nodes in third direction (positive even integer)
+
+	x_is_set=false;             % flag if x is set
+	fhat_is_set=false;          % flag if fhat is set
+	f_is_set=false;             % flag if f is set
+	plan_is_set=false;          % flag if plan was created
+	precomputations_done=false; % flag if precomputations were done
+end %properties
+
+methods
+
+% Constructer and destructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h=nfft(d,N,M,varargin)
+% Constructor
+%
+% h=nfft(1,N,M) for spatial dimension d=1
+% h=nfft(2,N,M) for spatial dimension d=2
+% h=nfft(3,N,M) for spatial dimension d=3
+%
+% h=nfft(d,N,M,varargin) for use of nfft_init_guru
+% For example
+% h=nfft(1,N,M,n,7,'PRE_PHI_HUT','FFTW_MEASURE')     for d=1
+% h=nfft(2,N,M,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE')   for d=2
+% h=nfft(3,N,M,n,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE') for d=3
+% with n=2^(ceil(log(max(N))/log(2))+1)
+% Be careful: There is no error handling with using nfft_init_guru.
+% Incorrect inputs can cause a Matlab crash!
+%
+% INPUT
+%   d         spatial dimension (d=1, d=2 or d=3)
+%   N         numbers of nodes in each direction (column vector of length d with positive even integers)
+%   M         number of sampling points (positive integer)
+%   varargin  parameters for use of nfft_init_guru (see documentation of NFFT for more details)
+%
+% OUTPUT
+%   h   object of class type nfft
+
+	h.d=d;
+
+	if( isempty(N) || size(N,1)~=d || size(N,2)~=1)
+		error('The numbers of nodes N have to be an integer column vector of length %u for spatial dimension d=%u',d,d);
+	else
+		h.N=N;
+	end %if
+
+	h.M=M;
+
+	if( 3>nargin )
+		error('Wrong number of inputs.');
+	elseif( 3==nargin )
+		switch d
+		case 1
+			h.plan=nfftmex('init_1d',N,M);
+			h.plan_is_set=true;
+		case 2
+			h.plan=nfftmex('init_2d',N(1),N(2),M);
+			h.plan_is_set=true;
+		case 3
+			h.plan=nfftmex('init_3d',N(1),N(2),N(3),M);
+			h.plan_is_set=true;
+		otherwise
+			error('Invalid spatial dimension d.');
+		end %switch
+	else % nfft_init_guru
+		%disp('You are using nfft_init_guru. This is on your own risk. There will be no error handling. Incorrect inputs can cause a Matlab crash.');
+		switch d
+		case 1
+			args=[{d,N(1),M},varargin];
+		case 2
+			args=[{d,N(1),N(2),M},varargin];
+		case 3
+			args=[{d,N(1),N(2),N(3),M},varargin];
+		otherwise
+			error('Unknown error.');
+		end %switch
+		h.plan=nfftmex('init_guru',args);
+		h.plan_is_set=true;
+	end %if
+end %function
+
+function delete(h)
+% Destructor
+	if(h.plan_is_set)
+		nfftmex('finalize',h.plan);
+	end %if
+end %function
+
+% Set functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set.d(h,d)
+	if( isempty(d) || (d~=1 && d~=2 && d~=3) )
+		error('The spatial dimension d has to be d=1, d=2 or d=3.');
+	else
+		h.d=d;
+	end %if
+end %function
+
+function set.N(h,N)
+	switch length(N)
+	case 1
+		h.N1=N;
+	case 2
+		h.N1=N(1);
+		h.N2=N(2);
+	case 3
+		h.N1=N(1);
+		h.N2=N(2);
+		h.N3=N(3);
+	otherwise
+		error('Unknown error');
+	end %switch
+end %function
+
+function set.N1(h,N)
+	if( isempty(N) || ~isnumeric(N) || ~isreal(N) || (mod(N,2)~=0) || ~(N>0))
+		error('The number of the nodes N1 has to be an even positive integer.');
+	else
+		h.N1=N;
+	end %if
+end %function
+
+function set.N2(h,N)
+	if( isempty(N) || ~isnumeric(N) || ~isreal(N) || (mod(N,2)~=0) || ~(N>0))
+		error('The number of the nodes N2 has to be an even positive integer.');
+	else
+		h.N2=N;
+	end %if
+end %function
+
+function set.N3(h,N)
+	if( isempty(N) || ~isnumeric(N) || ~isreal(N) || (mod(N,2)~=0) || ~(N>0))
+		error('The number of the nodes N2 has to be an even positive integer.');
+	else
+		h.N3=N;
+	end %if
+end %function
+
+function set.M(h,M)
+	if( isempty(M) || ~isnumeric(M) || ~isreal(M) || mod(M,1)~=0 || ~(M>0) )
+		error('The number of sampling pints M has to be an positive integer.');
+	else
+		h.M=M;
+	end %if
+end %function
+
+function set.x(h,x)
+	if( isempty(x) )
+		error('The sampling points x have to be real numbers.');
+	elseif( ~isnumeric(x) || ~isreal(x) )
+		error('The sampling points x have to be real numbers.');
+	elseif( min(x(:))<-1/2 || ~(max(x(:))<1/2) )
+		error('The sampling points x have to be in the two dimensional Torus [-0.5,0.5)^2');
+	elseif( size(x,1)~=h.M || size(x,2)~=h.d )
+		error('The sampling points have to be a %ux%u matrix',h.M,h.d);
+	else
+		nfftmex('set_x',h.plan,x.');
+		h.x_is_set=true;
+		h.precomputations_done=false;
+	end %if
+end %function
+
+function set.fhat(h,fhat)
+	switch h.d
+	case 1
+		n=h.N1;
+	case 2
+		n=h.N1*h.N2;
+	case 3
+		n=h.N1*h.N2*h.N3;
+	otherwise
+		error('Unknown error.');
+	end % switch
+
+	if( isempty(fhat) || ~isnumeric(fhat))
+		error('The Fourier coefficients fhat have to be complex numbers.');
+	elseif( size(fhat,1)~=(n) || size(fhat,2)~=1 )
+		error('The Fourier coefficients fhat have to be a column vector of length %u.',n);
+	else
+		switch h.d
+		case 1
+			% Do nothing.
+		case 2
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N1,h.N2).';
+			fhat=fhat(:);
+		case 3
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N1,h.N2,h.N3);
+			fhat=permute(fhat,[3,2,1]);
+			fhat=fhat(:);
+		otherwise
+			error('Unknown error.');
+		end %switch
+
+		nfftmex('set_f_hat',h.plan,fhat);
+		h.fhat_is_set=true;
+	end %if
+end %function
+
+function set.f(h,f)
+	if(isempty(f) || ~isnumeric(f))
+		error('The samples f have to be complex numbers.');
+	elseif( size(f,1)~=h.M || size(f,2)~=1 )
+		error('The samples f have to be an column vector of length M=%u',h.M);
+	else
+		nfftmex('set_f',h.plan,f);
+		h.f_is_set=true;
+	end %if
+end %function
+
+% Get functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function x=get.x(h)
+	if(h.x_is_set)
+		x=nfftmex('get_x',h.plan).';
+	else
+		x=[];
+	end %if
+end %function
+
+function fhat=get.fhat(h)
+	if(h.fhat_is_set)
+		fhat=nfftmex('get_f_hat',h.plan);
+
+		switch h.d
+		case 1
+			% Do nothing.
+		case 2
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N2,h.N1).';
+			fhat=fhat(:);
+		case 3
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N3,h.N2,h.N1);
+			fhat=permute(fhat,[3,2,1]);
+			fhat=fhat(:);
+		otherwise
+			error('Unknown error.');
+		end %switch
+	else
+		fhat=[];
+	end %if
+end %funcition
+
+function f=get.f(h)
+	if(h.f_is_set)
+		f=nfftmex('get_f',h.plan);
+	else
+		f=[];
+	end %if
+end %function
+
+function N=get.N(h)
+	N=[h.N1;h.N2;h.N3];
+end %function
+
+% User methods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function nfft_precompute_psi(h)
+% Precomputations for NFFT.
+	if(~h.x_is_set)
+		error('Before doing precomputations you have to set nodes in x.');
+	else
+		nfftmex('precompute_psi',h.plan)
+		h.precomputations_done=true;
+	end %if
+end %function
+
+function ndft_trafo(h)
+% NDFT.
+%
+% ndft_trafo(h)
+%
+% INPUT
+%   h  object of class type nfft
+
+	if(~h.precomputations_done)
+		error('Before doing a NFFT transform you have to do precomputations.');
+	elseif(~h.fhat_is_set)
+		error('Before doing a NFFT transform you have to set Fourier coefficients in fhat.');
+	else
+		nfftmex('trafo_direct',h.plan);
+		h.f_is_set=true;
+	end %if
+end %function
+
+function nfft_trafo(h)
+% NFFT.
+%
+% nfft_trafo(h)
+%
+% INPUT
+%   h  object of class type nfft
+
+	if(~h.precomputations_done)
+		error('Before doing a NFFT transform you have to do precomputations.');
+	elseif(~h.fhat_is_set)
+		error('Before doing a NFFT transform you have to set Fourier coefficients in fhat.');
+	else
+		nfftmex('trafo',h.plan);
+		h.f_is_set=true;
+	end %if
+end %function
+
+function ndft_adjoint(h)
+% Adjoint NDFT.
+%
+% ndft_adjoint(h)
+%
+% INPUT
+%   h  object of class type nfft
+
+	if(~h.precomputations_done)
+		error('Before doing a adjoint NFFT transform you have to do precomputations.');
+	elseif(~h.f_is_set)
+		error('Before doing a adjoint NFFT transform you have to set samples in f.');
+	else
+		nfftmex('adjoint_direct',h.plan);
+		h.fhat_is_set=true;
+	end %if
+end %function
+
+function nfft_adjoint(h)
+% Adjoint NFFT
+%
+% nfft_adjoint(h)
+%
+% INPUT
+%   h  object of class type nfft
+
+	if(~h.precomputations_done)
+		error('Before doing a adjoint NFFT transform you have to do precomputations.');
+	elseif(~h.f_is_set)
+		error('Before doing a adjoint NFFT transform you have to set samples in f.');
+	else
+		nfftmex('adjoint',h.plan);
+		h.fhat_is_set=true;
+	end %if
+end %function
+
+end %methods
+
+end %classdef
+
diff --git a/matlab/nfft/nfft_adjoint.m b/matlab/nfft/nfft_adjoint.m
new file mode 100644
index 0000000..a37e591
--- /dev/null
+++ b/matlab/nfft/nfft_adjoint.m
@@ -0,0 +1,23 @@
+%NFFT_ADJOINT Adjoint nonequispaced fast Fourier transform
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_adjoint(p)
+
+nfftmex('adjoint',p)
diff --git a/matlab/nfft/nfft_finalize.m b/matlab/nfft/nfft_finalize.m
new file mode 100644
index 0000000..c9d06bc
--- /dev/null
+++ b/matlab/nfft/nfft_finalize.m
@@ -0,0 +1,23 @@
+%NFFT_FINALIZE Finalize plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_finalize(p)
+
+nfftmex('finalize',p)
diff --git a/matlab/nfft/nfft_get_f.m b/matlab/nfft/nfft_get_f.m
new file mode 100644
index 0000000..dc08478
--- /dev/null
+++ b/matlab/nfft/nfft_get_f.m
@@ -0,0 +1,23 @@
+%NFFT_GET_F Get function values from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
+function f = nfft_get_f(p)
+
+f = nfftmex('get_f',p);
diff --git a/matlab/nfft/nfft_get_f_hat.m b/matlab/nfft/nfft_get_f_hat.m
new file mode 100644
index 0000000..0b18968
--- /dev/null
+++ b/matlab/nfft/nfft_get_f_hat.m
@@ -0,0 +1,23 @@
+%NFFT_GET_F_HAT Get Fourier coefficients from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function f_hat = nfft_get_f_hat(p)
+
+f_hat = nfftmex('get_f_hat',p);
diff --git a/matlab/nfft/nfft_get_num_threads.m b/matlab/nfft/nfft_get_num_threads.m
new file mode 100644
index 0000000..8d6882c
--- /dev/null
+++ b/matlab/nfft/nfft_get_num_threads.m
@@ -0,0 +1,23 @@
+%NFFT_GET_NUM_THREADS Get number of threads (at most) used for computation
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_x.m 3124 2009-03-18 13:44:27Z kunis $
+function nthreads = nfft_get_num_threads()
+
+nthreads = nfftmex('get_num_threads');
diff --git a/matlab/nfft/nfft_get_x.m b/matlab/nfft/nfft_get_x.m
new file mode 100644
index 0000000..d7aba9f
--- /dev/null
+++ b/matlab/nfft/nfft_get_x.m
@@ -0,0 +1,23 @@
+%NFFT_GET_X Get nodes from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
+function x = nfft_get_x(p)
+
+x = nfftmex('get_x',p);
diff --git a/matlab/nfft/nfft_init_1d.m b/matlab/nfft/nfft_init_1d.m
new file mode 100644
index 0000000..00c3075
--- /dev/null
+++ b/matlab/nfft/nfft_init_1d.m
@@ -0,0 +1,23 @@
+%NFFT_INIT_1D Initialise plans
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_1d.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_1d(N,M)
+
+p = nfftmex('init_1d',N,M);
diff --git a/matlab/nfft/nfft_init_2d.m b/matlab/nfft/nfft_init_2d.m
new file mode 100644
index 0000000..890bf26
--- /dev/null
+++ b/matlab/nfft/nfft_init_2d.m
@@ -0,0 +1,23 @@
+%NFFT_INIT_2D Initialise plans
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_2d.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_2d(N1,N2,M)
+
+p = nfftmex('init_2d',N1,N2,M);
diff --git a/matlab/nfft/nfft_init_3d.m b/matlab/nfft/nfft_init_3d.m
new file mode 100644
index 0000000..48396ae
--- /dev/null
+++ b/matlab/nfft/nfft_init_3d.m
@@ -0,0 +1,23 @@
+%NFFT_INIT_3D Initialise plans
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_3d.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_3d(N1,N2,N3,M)
+
+p = nfftmex('init_3d',N1,N2,N3,M);
diff --git a/matlab/nfft/nfft_init_guru.m b/matlab/nfft/nfft_init_guru.m
new file mode 100644
index 0000000..f84dfe9
--- /dev/null
+++ b/matlab/nfft/nfft_init_guru.m
@@ -0,0 +1,36 @@
+%NFFT_INIT_GURU Initialise plans, no error handling
+%   Matlab might run into a segmentation violation for wrong parameters
+%
+%   nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,nfft_flags,fftw_flags)
+%
+%   d            spatial dimension
+%   N1,...,Nd    bandwidths
+%   M            number of nodes
+%   n1,...,nd    fft lengths
+%   m            cut-off parameter
+%   nfft_flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
+%	             PRE_FULL_PSI} | FFT_OUT_OF_PLACE
+%   fftw_flags   {FFTW_ESTIMATE, FFTW_MEASURE}
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_guru(varargin)
+
+p = nfftmex('init_guru',varargin);
diff --git a/matlab/nfft/nfft_precompute_psi.m b/matlab/nfft/nfft_precompute_psi.m
new file mode 100644
index 0000000..148241e
--- /dev/null
+++ b/matlab/nfft/nfft_precompute_psi.m
@@ -0,0 +1,23 @@
+%NFFT_PRECOMPUTE_PSI Precompute psi, dependent on nodes x
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_precompute_psi.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_precompute_psi(p)
+
+nfftmex('precompute_psi',p)
diff --git a/matlab/nfft/nfft_set_f.m b/matlab/nfft/nfft_set_f.m
new file mode 100644
index 0000000..971ac25
--- /dev/null
+++ b/matlab/nfft/nfft_set_f.m
@@ -0,0 +1,23 @@
+%NFFT_SET_F Set function values in plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_set_f(p,f)
+
+nfftmex('set_f',p,f)
diff --git a/matlab/nfft/nfft_set_f_hat.m b/matlab/nfft/nfft_set_f_hat.m
new file mode 100644
index 0000000..f081cc5
--- /dev/null
+++ b/matlab/nfft/nfft_set_f_hat.m
@@ -0,0 +1,23 @@
+%NFFT_SET_F_HAT Set Fourier coefficients in plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_set_f_hat(p,f_hat)
+
+nfftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nfft/nfft_set_x.m
new file mode 100644
index 0000000..a0b810d
--- /dev/null
+++ b/matlab/nfft/nfft_set_x.m
@@ -0,0 +1,23 @@
+%NFFT_SET_X Set nodes in plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_set_x(p,x)
+
+nfftmex('set_x',p,x)
diff --git a/matlab/nfft/nfft_trafo.m b/matlab/nfft/nfft_trafo.m
new file mode 100644
index 0000000..02d4cc1
--- /dev/null
+++ b/matlab/nfft/nfft_trafo.m
@@ -0,0 +1,23 @@
+%NFFT_TRAFO nonequispaced fast Fourier transformat
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_trafo(p)
+
+nfftmex('trafo',p)
diff --git a/matlab/nfft/nfftmex.c b/matlab/nfft/nfftmex.c
new file mode 100644
index 0000000..722e490
--- /dev/null
+++ b/matlab/nfft/nfftmex.c
@@ -0,0 +1,479 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "nfft3.h"
+#include "infft.h"
+#include "nfft3util.h"
+#include "imex.h"
+
+#ifdef HAVE_MEXVERSION_C
+  #include "mexversion.c"
+#endif
+
+#define PLANS_MAX 100 /* maximum number of plans */
+#define CMD_LEN_MAX 20 /* maximum length of command argument */
+
+/* global flags */
+#define NFFT_MEX_FIRST_CALL (1U << 0)
+unsigned short gflags = NFFT_MEX_FIRST_CALL;
+
+nfft_plan* plans[PLANS_MAX]; /* plans */
+char cmd[CMD_LEN_MAX];
+
+static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+{
+  int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N must be a scalar.");
+  DM(if ((t < 0) || (t%2!=0))
+    mexErrMsgTxt("nfft: Input argument N must be non-negative and multiple of two.");)
+  *n = t;
+  t = nfft_mex_get_int(prhs[2],"nfft: Input argument M must be a scalar.");
+  DM(if (t < 1)
+    mexErrMsgTxt("nfft: Input argument M must be positive.");)
+  *m = t;
+}
+
+static inline void get_n1n2m(const mxArray *prhs[], int *n1, int *n2, int *m)
+{
+  int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N1 must be a scalar.");
+  DM(if ((t < 0) || (t%2!=0))
+    mexErrMsgTxt("nfft: Input argument N1 must be non-negative and even.");)
+  *n1 = t;
+
+  t = nfft_mex_get_int(prhs[2],"nfft: Input argument N2 must be a scalar.");
+  DM(if ((t < 0) || (t%2!=0))
+    mexErrMsgTxt("nfft: Input argument N2 must be non-negative and even.");)
+  *n2 = t;
+
+  t = nfft_mex_get_int(prhs[3],"nfft: Input argument M must be a scalar.");
+  DM(if (t < 1)
+    mexErrMsgTxt("nfft: Input argument M must be positive.");)
+  *m = t;
+}
+
+static inline void get_n1n2n3m(const mxArray *prhs[], int *n1, int *n2, int *n3, int *m)
+{
+  int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N1 must be a scalar.");
+  DM(if ((t < 0) || (t%2!=0))
+    mexErrMsgTxt("nfft: Input argument N1 must be non-negative and even.");)
+  *n1 = t;
+
+  t = nfft_mex_get_int(prhs[2],"nfft: Input argument N2 must be a scalar.");
+  DM(if ((t < 0) || (t%2!=0))
+    mexErrMsgTxt("nfft: Input argument N2 must be non-negative and even.");)
+  *n2 = t;
+
+  t = nfft_mex_get_int(prhs[3],"nfft: Input argument N3 must be a scalar.");
+  DM(if ((t < 0) || (t%2!=0))
+    mexErrMsgTxt("nfft: Input argument N3 must be non-negative and even.");)
+  *n3 = t;
+
+  t = nfft_mex_get_int(prhs[4],"nfft: Input argument M must be a scalar.");
+  DM(if (t < 1)
+    mexErrMsgTxt("nfft: Input argument M must be positive.");)
+  *m = t;
+}
+
+static inline void get_guru(const mxArray *prhs[], int d, int *N, int *M, int *n, int *m, unsigned int *f1, unsigned int *f2)
+{
+  /** NO ERROR HANDLING !!*/
+  int k;
+
+  for(k=0;k<d;k++)
+    N[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(1+k)));
+
+  *M = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+1)));
+
+  for(k=0;k<d;k++)
+    n[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+2+k)));
+
+  *m = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+2)));
+
+  *f1 = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+3)));
+
+  *f2 = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+4)));
+}
+
+static inline void check_nargs(const int nrhs, const int n, const char* errmsg)
+{
+  DM(if (nrhs != n)
+    mexErrMsgTxt(errmsg);)
+}
+
+static inline void check_plan(int i)
+{
+  DM(if (i < 0 || i >= PLANS_MAX)
+    mexErrMsgTxt("Invalid plan");)
+  DM(if (plans[i] == 0)
+    mexErrMsgTxt("Plan was not initialized or has already been finalized");)
+}
+
+static inline int mkplan(void)
+{
+  mexLock();
+  int i = 0;
+  while (i < PLANS_MAX && plans[i] != 0) i++;
+  if (i == PLANS_MAX)
+    mexErrMsgTxt("nfft: Too many plans already allocated.");
+  plans[i] = nfft_malloc(sizeof(nfft_plan));
+  return i;
+}
+
+/* cleanup on mex function unload */
+static void cleanup(void)
+{
+  int i;
+
+  mexUnlock();
+
+  if (!(gflags & NFFT_MEX_FIRST_CALL))
+  {
+    for (i = 0; i < PLANS_MAX; i++)
+      if (plans[i])
+      {
+        nfft_finalize(plans[i]);
+        plans[i] = 0;
+      }
+    gflags |= NFFT_MEX_FIRST_CALL;
+  }
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+  if (gflags & NFFT_MEX_FIRST_CALL)
+  {
+    /* Force Matlab to load libfftw3. There is at least one version of Matlab
+     * which otherwise crashes upon invocation of this mex function. */
+    mexEvalString("fft([1,2,3,4]);");
+
+    nfft_mex_install_mem_hooks();
+
+    /* plan pointers to zeros */
+    {
+      int i;
+      for (i = 0; i < PLANS_MAX; i++)
+        plans[i] = 0;
+    }
+
+    mexAtExit(cleanup);
+    gflags &= ~NFFT_MEX_FIRST_CALL;
+  }
+
+  /* command string */
+  DM(if (nrhs == 0)
+    mexErrMsgTxt("At least one input required.");)
+
+  DM(if (!mxIsChar(prhs[0]))
+    mexErrMsgTxt("First argument must be a string.");)
+
+  if (mxGetString(prhs[0], cmd, CMD_LEN_MAX))
+    mexErrMsgTxt("Could not get command string.");
+
+  if (strcmp(cmd,"init_1d") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for init.");
+    {
+      int i;
+      int n, m;
+      get_nm(prhs,&n,&m);
+      i = mkplan();
+      nfft_init_1d(plans[i],n,m);
+      plhs[0] = mxCreateDoubleScalar((double)i);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"init_2d") == 0)
+  {
+    check_nargs(nrhs,4,"Wrong number of arguments for init.");
+    {
+      int i;
+      int n1, n2, m;
+      get_n1n2m(prhs,&n1,&n2,&m);
+      i = mkplan();
+      nfft_init_2d(plans[i],n1,n2,m);
+      plhs[0] = mxCreateDoubleScalar((double)i);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"init_3d") == 0)
+  {
+    check_nargs(nrhs,5,"Wrong number of arguments for init.");
+    {
+      int i;
+      int n1, n2, n3, m;
+      get_n1n2n3m(prhs,&n1,&n2,&n3,&m);
+      i = mkplan();
+      nfft_init_3d(plans[i],n1,n2,n3,m);
+      plhs[0] = mxCreateDoubleScalar((double)i);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"init_guru") == 0)
+  {
+    /** NO ERROR HANDLING !!*/
+    int i;
+    const int d = mxGetScalar(mxGetCell(prhs[1], 0));
+
+    int N[d],n[d],m,M;
+    unsigned int f1,f2;
+
+    DM(if ((d < 1) || (d>4)) 
+	 mexErrMsgTxt("nfft: Input argument d must be positive and smaller than 5.");)
+
+    get_guru(prhs,d,N,&M,n,&m,&f1,&f2);
+    i = mkplan();
+    nfft_init_guru(plans[i],d,N,M,n,m,
+		   f1 | MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT,
+		   f2);
+
+    plhs[0] = mxCreateDoubleScalar((double)i);
+
+    return;
+  }
+  else if (strcmp(cmd,"precompute_psi") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for precompute_one_psi.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      check_plan(i);
+      nfft_precompute_one_psi(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"trafo") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for trafo.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      check_plan(i);
+      nfft_trafo(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"adjoint") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for adjoint.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      check_plan(i);
+      nfft_adjoint(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"finalize") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for finalize.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      check_plan(i);
+      nfft_finalize(plans[i]);
+      nfft_free(plans[i]);
+      plans[i] = 0;
+    }
+    return;
+  }
+  else if (strcmp(cmd,"trafo_direct") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for trafo direct.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      check_plan(i);
+      nfft_trafo_direct(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"adjoint_direct") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for adjoint direct.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      check_plan(i);
+      nfft_adjoint_direct(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_x") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_x.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int m, d;
+      check_plan(i);
+      m = plans[i]->M_total;
+      d = plans[i]->d;
+      plhs[0] = mxCreateDoubleMatrix((unsigned int)d, (unsigned int)m, mxREAL);
+      {
+        double *x = mxGetPr(plhs[0]);
+        int j,t;
+        for (j = 0; j < m; j++)
+	  for (t = 0; t < d; t++)
+	    x[d*j+t] = plans[i]->x[d*j+t];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_f") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_f.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int m;
+      check_plan(i);
+      m = plans[i]->M_total;
+      plhs[0] = mxCreateDoubleMatrix((unsigned int)m, 1, mxCOMPLEX);
+      {
+        double *fr = mxGetPr(plhs[0]), *fi = mxGetPi(plhs[0]);
+        int j;
+        for (j = 0; j < m; j++)
+        {
+          fr[j] = creal(plans[i]->f[j]);
+          fi[j] = cimag(plans[i]->f[j]);
+        }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_f_hat") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int n;
+      check_plan(i);
+      n = plans[i]->N_total;
+      plhs[0] = mxCreateDoubleMatrix((unsigned int)n, 1, mxCOMPLEX);
+      {
+        double *f_hatr = mxGetPr(plhs[0]), *f_hati = mxGetPi(plhs[0]);
+        int k;
+        for (k = 0; k < n; k++)
+        {
+          f_hatr[k] = creal(plans[i]->f_hat[k]);
+          f_hati[k] = cimag(plans[i]->f_hat[k]);
+        }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_x") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_x.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int m, d;
+      check_plan(i);
+      m = plans[i]->M_total;
+      d = plans[i]->d;
+      DM(if (!mxIsDouble(prhs[2]) || mxGetNumberOfDimensions(prhs[2]) > 2)
+        mexErrMsgTxt("Input argument x must be a d x M double array");)
+      DM(if (mxGetM(prhs[2]) != (unsigned int)d || mxGetN(prhs[2]) != (unsigned int)m)
+        mexErrMsgTxt("Input argument x must have correct size (d x M).");)
+      {
+        double *x = mxGetPr(prhs[2]);
+        int j,t;
+        for (j = 0; j < m; j++)
+	  for (t = 0; t < d; t++)
+	    plans[i]->x[d*j+t] = x[d*j+t];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_f") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_f.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int m;
+      check_plan(i);
+      m = plans[i]->M_total;
+      DM(if (mxGetM(prhs[2]) * mxGetN(prhs[2]) != (unsigned int)m)
+        mexErrMsgTxt("Input argument f must have correct size.");)
+      {
+        double *fr = mxGetPr(prhs[2]), *fi = mxGetPi(prhs[2]);
+        int j;
+        if (fi)
+          for (j = 0; j < m; j++)
+            plans[i]->f[j] = fr[j] + _Complex_I*fi[j];
+        else
+          for (j = 0; j < m; j++)
+            plans[i]->f[j] = fr[j];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_f_hat") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int n;
+      check_plan(i);
+      n = plans[i]->N_total;
+      DM(if (!mxIsDouble(prhs[2]))
+        mexErrMsgTxt("Input argument f must be a double array");)
+      DM(if (   mxGetM(prhs[2]) != (unsigned int)n || mxGetN(prhs[2]) != 1)
+        mexErrMsgTxt("Input argument f must have correct size.");)
+      {
+        double *f_hatr = mxGetPr(prhs[2]), *f_hati = mxGetPi(prhs[2]);
+        int k;
+        if (f_hati)
+          for (k = 0; k < n; k++)
+            plans[i]->f_hat[k] = f_hatr[k] + _Complex_I*f_hati[k];
+        else
+          for (k = 0; k < n; k++)
+            plans[i]->f_hat[k] = f_hatr[k];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"display") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for set_f_hat_linear.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      mexPrintf("Plan %d\n",i);
+      check_plan(i);
+      mexPrintf("  pointer: %p\n",plans[i]);
+      mexPrintf("        d: %d\n",plans[i]->d);
+      mexPrintf("  N_total: %d\n",plans[i]->N_total);
+      mexPrintf("  M_total: %d\n",plans[i]->M_total);
+      mexPrintf("        x: %p\n",plans[i]->x);
+      mexPrintf("        f: %p\n",plans[i]->f);
+      mexPrintf("    f_hat: %p\n",plans[i]->f_hat);
+      mexPrintf("    flags: %d\n",plans[i]->nfft_flags);
+    }
+    return;
+  }
+  else if(strcmp(cmd,"get_num_threads") == 0)
+  {
+    int32_t nthreads = nfft_get_num_threads();
+    plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
+    *((int32_t *)mxGetData(plhs[0])) = nthreads;
+
+    return;
+  }
+  else
+    mexErrMsgTxt("nfft: Unknown command.\n");
+}
diff --git a/matlab/nfft/simple_test.m b/matlab/nfft/simple_test.m
new file mode 100644
index 0000000..acaa665
--- /dev/null
+++ b/matlab/nfft/simple_test.m
@@ -0,0 +1,128 @@
+%SIMPLE_TEST Example program: Basic usage principles
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+
+disp(sprintf('Number of threads: %d\n', nfft_get_num_threads()));
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp('A simple one dimensional example');
+
+% maximum degree (bandwidth)
+N = 10;
+
+% number of nodes
+M = 3;
+
+% nodes
+x=rand(1,M)-0.5;
+
+% Create plan.
+plan = nfft_init_1d(N,M);
+
+% Set nodes.
+nfft_set_x(plan,x);
+
+% node-dependent precomputation
+nfft_precompute_psi(plan);
+
+% Fourier coefficients
+f_hat = rand(N,1)+i*rand(N,1);
+
+% Set Fourier coefficients.
+nfft_set_f_hat(plan,double(f_hat));
+
+% transform
+nfft_trafo(plan);
+
+% function values
+f = nfft_get_f(plan)
+
+% finalize plan
+nfft_finalize(plan);
+
+A=exp(-2*pi*i*x'*(-N/2:N/2-1));
+f2=A*f_hat
+
+error_vector=f-f2
+error_linfl1=norm(f-f2,inf)/norm(f_hat,1)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp(sprintf('\nA two dimensional example'));
+d=2;
+for logN=3:10
+  N=2^logN;
+  M=N^2;
+  x=rand(2,M)-0.5;
+  plan = nfft_init_guru(d,N,N,M,2*N,2*N,2,bitor(PRE_PHI_HUT,PRE_PSI),FFTW_MEASURE);
+  nfft_set_x(plan,x);
+  nfft_precompute_psi(plan);
+  f_hat = rand(N,N)+i*rand(N,N);
+  nfft_set_f_hat(plan,double(f_hat(:)));
+  tic
+  nfft_trafo(plan);
+  t1=toc;
+  f = nfft_get_f(plan);
+
+  if(N<=64)
+    tic
+    ndft_trafo(plan);
+    t2=toc;
+    f2 = nfft_get_f(plan);
+    e=norm(f-f2,inf)/norm(f_hat(:),1);
+  else
+    t2=inf;
+    e=nan;
+  end;
+  nfft_finalize(plan);
+  disp(sprintf('t1=%1.2e, t2=%1.2e, e=%1.2e',t1,t2,e));
+end;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp(sprintf('\nAn asymmetric three dimensional example'));
+d=3;
+for logN=3:10
+  N1=2^logN;   n1=2*N1;
+  N2=10;       n2=32;
+  N3=18;       n3=32;
+  M=N1*N2*N3;
+  x=rand(3,M)-0.5;
+  plan = nfft_init_guru(d,N1,N2,N3,M,n1,n2,n3,2,bitor(PRE_PHI_HUT,PRE_PSI),FFTW_MEASURE);
+  nfft_set_x(plan,x);
+  nfft_precompute_psi(plan);
+  f_hat = rand(N1,N2,N3)+i*rand(N1,N2,N3);
+  nfft_set_f_hat(plan,double(f_hat(:)));
+  tic
+  nfft_trafo(plan);
+  t1=toc;
+  f = nfft_get_f(plan);
+
+  if(N1<=32)
+    tic
+    ndft_trafo(plan);
+    t2=toc;
+    f2 = nfft_get_f(plan);
+    e=norm(f-f2,inf)/norm(f_hat(:),1);
+  else
+    t2=inf;
+    e=nan;
+  end;
+  nfft_finalize(plan);
+  disp(sprintf('t1=%1.2e, t2=%1.2e, e=%1.2e',t1,t2,e));
+end;
diff --git a/matlab/nfft/test_nfft1d.m b/matlab/nfft/test_nfft1d.m
new file mode 100644
index 0000000..a7f04d0
--- /dev/null
+++ b/matlab/nfft/test_nfft1d.m
@@ -0,0 +1,70 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% Test script of class nfft for spatial dimension d=1.
+clear all;
+
+M=16; % number of nodes
+N=24; % number of Fourier coefficients in first direction
+
+x=rand(M,1)-0.5; %nodes
+
+% Initialisation
+plan=nfft(1,N,M); % create plan of class type nfft
+%n=2^(ceil(log(N)/log(2))+1);
+%plan=nfft(1,N,M,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+
+plan.x=x; % set nodes in plan
+nfft_precompute_psi(plan); % precomputations
+
+% NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fhat=rand(N,1); % Fourier coefficients
+fhatv=fhat(:);
+
+% Compute samples with NFFT
+plan.fhat=fhatv; % set Fourier coefficients
+nfft_trafo(plan); % compute nonequispaced Fourier transform
+f1=plan.f; % get samples
+
+% Compute samples direct
+k1=(-N/2:N/2-1).';
+f2=zeros(M,1);
+for j=1:M
+	x1j=x(j,1);
+	f2(j)=sum( fhatv.*exp(-2*pi*1i*k1*x1j) );
+end %for
+
+% Compare results
+max(abs(f1-f2))
+
+% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Computation with NFFT
+nfft_adjoint(plan);
+fhat1=plan.fhat;
+
+% Direct computation
+fhat2=zeros(N,1);
+for j=1:N
+	k1j=k1(j);
+	fhat2(j)=sum( plan.f.*exp(2*pi*1i*k1j*x(:,1)) );
+end %for
+
+% Compare results
+max(abs(fhat1-fhat2))
+
diff --git a/matlab/nfft/test_nfft2d.m b/matlab/nfft/test_nfft2d.m
new file mode 100644
index 0000000..0fa752b
--- /dev/null
+++ b/matlab/nfft/test_nfft2d.m
@@ -0,0 +1,78 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% Test script of class nfft for spatial dimension d=2.
+clear all;
+
+M=16; % number of nodes
+N1=24; % number of Fourier coefficients in first direction
+N2=32; % number of Fourier coefficients in second direction
+N=[N1;N2];
+
+x=rand(M,2)-0.5; %nodes
+
+% Initialisation
+plan=nfft(2,N,M); % create plan of class type nfft
+%n=2^(ceil(log(max(N))/log(2))+1);
+%plan=nfft(2,N,M,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+
+plan.x=x; % set nodes in plan
+nfft_precompute_psi(plan); % precomputations
+
+% NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fhat=rand(N1,N2); % Fourier coefficients
+fhatv=fhat(:);
+
+% Compute samples with NFFT
+plan.fhat=fhatv; % set Fourier coefficients
+nfft_trafo(plan); % compute nonequispaced Fourier transform
+f1=plan.f; % get samples
+
+% Compute samples direct
+k1=-N1/2:N1/2-1;
+k2=-N2/2:N2/2-1;
+[K1,K2]=ndgrid(k1,k2);
+k1=K1(:); clear K1;
+k2=K2(:); clear K2;
+f2=zeros(M,1);
+for j=1:M
+	x1j=x(j,1);
+	x2j=x(j,2);
+	f2(j)=sum( fhatv.*exp(-2*pi*1i*(k1*x1j+k2*x2j)) );
+end %for
+
+% Compare results
+max(abs(f1-f2))
+
+% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Computation with NFFT
+nfft_adjoint(plan);
+fhat1=plan.fhat;
+
+% Direct computation
+fhat2=zeros(N1*N2,1);
+for j=1:N1*N2
+	k1j=k1(j);
+	k2j=k2(j);
+	fhat2(j)=sum( plan.f.*exp(2*pi*1i*(k1j*x(:,1)+k2j*x(:,2))) );
+end %for
+
+% Compare results
+max(abs(fhat1-fhat2))
+
diff --git a/matlab/nfft/test_nfft3d.m b/matlab/nfft/test_nfft3d.m
new file mode 100644
index 0000000..27ffecb
--- /dev/null
+++ b/matlab/nfft/test_nfft3d.m
@@ -0,0 +1,83 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% Test script of class nfft for spatial dimension d=3.
+clear all;
+
+M=16; % number of nodes
+N1=24; % number of Fourier coefficients in first direction
+N2=32; % number of Fourier coefficients in second direction
+N3=30; % number of Fourier coefficients in third direction
+N=[N1;N2;N3];
+
+x=rand(M,3)-0.5; %nodes
+
+% Initialisation
+plan=nfft(3,N,M); % create plan of class type nfft
+%n=2^(ceil(log(max(N))/log(2))+1);
+%plan=nfft(3,N,M,n,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+
+plan.x=x; % set nodes in plan
+nfft_precompute_psi(plan); % precomputations
+
+% NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fhat=rand(N1,N2,N3); % Fourier coefficients
+fhatv=fhat(:);
+
+% Compute samples with NFFT
+plan.fhat=fhatv; % set Fourier coefficients
+nfft_trafo(plan); % compute nonequispaced Fourier transform
+f1=plan.f; % get samples
+
+% Compute samples direct
+k1=-N1/2:N1/2-1;
+k2=-N2/2:N2/2-1;
+k3=-N3/2:N3/2-1;
+[K1,K2,K3]=ndgrid(k1,k2,k3);
+k1=K1(:); clear K1;
+k2=K2(:); clear K2;
+k3=K3(:); clear K3;
+f2=zeros(M,1);
+for j=1:M
+	x1j=x(j,1);
+	x2j=x(j,2);
+	x3j=x(j,3);
+	f2(j)=sum( fhatv.*exp(-2*pi*1i*(k1*x1j+k2*x2j+k3*x3j)) );
+end %for
+
+% Compare results
+max(abs(f1-f2))
+
+% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Computation with NFFT
+nfft_adjoint(plan);
+fhat1=plan.fhat;
+
+% Direct computation
+fhat2=zeros(N1*N2*N3,1);
+for j=1:N1*N2*N3
+	k1j=k1(j);
+	k2j=k2(j);
+	k3j=k3(j);
+	fhat2(j)=sum( plan.f.*exp(2*pi*1i*(k1j*x(:,1)+k2j*x(:,2)+k3j*x(:,3))) );
+end %for
+
+% Compare results
+max(abs(fhat1-fhat2))
+
diff --git a/matlab/nfsft/@f_hat/Makefile.am b/matlab/nfsft/@f_hat/Makefile.am
new file mode 100644
index 0000000..1de3dbb
--- /dev/null
+++ b/matlab/nfsft/@f_hat/Makefile.am
@@ -0,0 +1,5 @@
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft/@f_hat
+
+dist_nfsftmatlab_DATA = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
+
+# EXTRA_DIST = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
diff --git a/matlab/nfsft/@f_hat/Makefile.in b/matlab/nfsft/@f_hat/Makefile.in
new file mode 100644
index 0000000..4db9166
--- /dev/null
+++ b/matlab/nfsft/@f_hat/Makefile.in
@@ -0,0 +1,480 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab/nfsft/@f_hat
+DIST_COMMON = $(dist_nfsftmatlab_DATA) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(nfsftmatlabdir)"
+DATA = $(dist_nfsftmatlab_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft/@f_hat
+dist_nfsftmatlab_DATA = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfsft/@f_hat/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu matlab/nfsft/@f_hat/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-dist_nfsftmatlabDATA: $(dist_nfsftmatlab_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(nfsftmatlabdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(nfsftmatlabdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfsftmatlabdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(nfsftmatlabdir)" || exit $$?; \
+	done
+
+uninstall-dist_nfsftmatlabDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(nfsftmatlabdir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(nfsftmatlabdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_nfsftmatlabDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_nfsftmatlabDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dist_nfsftmatlabDATA \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am uninstall uninstall-am uninstall-dist_nfsftmatlabDATA
+
+
+# EXTRA_DIST = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/nfsft/@f_hat/char.m b/matlab/nfsft/@f_hat/char.m
new file mode 100644
index 0000000..8858f4b
--- /dev/null
+++ b/matlab/nfsft/@f_hat/char.m
@@ -0,0 +1,27 @@
+%CHAR Conversion to string for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: char.m 3776 2012-06-03 13:29:25Z keiner $
+function s = char(p)
+
+if (p.N == -1)
+  s = 'empty f_hat object';
+else
+  s = ['eegree ',num2str(p.N),' f_hat object'];
+end
diff --git a/matlab/nfsft/@f_hat/display.m b/matlab/nfsft/@f_hat/display.m
new file mode 100644
index 0000000..5bb0e86
--- /dev/null
+++ b/matlab/nfsft/@f_hat/display.m
@@ -0,0 +1,34 @@
+%DISPLAY Display function for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: display.m 3776 2012-06-03 13:29:25Z keiner $
+function display(p)
+
+if (p.N == -1)
+  disp([inputname(1) ' = empty']);
+else
+  f_hat_m = zeros(2*p.N+1,p.N+1);
+  o = 1;
+  for k = 0:p.N
+    f_hat_m(k*(2*p.N+1)+p.N+1-k:k*(2*p.N+1)+p.N+1+k) = p.f_hat(o:o+2*k);
+    o = o + 2*k+1;
+  end
+  disp([inputname(1) ' =']);
+  disp(f_hat_m);
+end
diff --git a/matlab/nfsft/@f_hat/double.m b/matlab/nfsft/@f_hat/double.m
new file mode 100644
index 0000000..f28b6b8
--- /dev/null
+++ b/matlab/nfsft/@f_hat/double.m
@@ -0,0 +1,28 @@
+%DOUBLE Double conversion for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: double.m 3776 2012-06-03 13:29:25Z keiner $
+function d = double(p)
+
+d = zeros(2*p.N+1,p.N+1);
+o = 1;
+for k = 0:p.N
+  d(k*(2*p.N+1)+p.N+1-k:k*(2*p.N+1)+p.N+1+k) = p.f_hat(o:o+2*k);
+  o = o + 2*k+1;
+end
diff --git a/matlab/nfsft/@f_hat/f_hat.m b/matlab/nfsft/@f_hat/f_hat.m
new file mode 100644
index 0000000..485d1c8
--- /dev/null
+++ b/matlab/nfsft/@f_hat/f_hat.m
@@ -0,0 +1,49 @@
+%F_HAT Constructor for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function p = f_hat(a)
+
+if (nargin == 0)
+  p.N = -1;
+  p.f_hat = [];
+  p = class(p,'f_hat');
+elseif (isa(a,'f_hat'))
+  p = a;
+elseif (isnumeric(a) && isscalar(a) && a >= 0)
+  p.N = a;
+  p.f_hat = zeros((p.N+1)^2,1);
+  p = class(p,'f_hat');
+elseif (isnumeric(a) && ndims(a) == 2 && (size(a,1)-1)/2+1 == size(a,2))
+  p.N = (size(a,1)-1)/2;
+  p.f_hat = zeros((p.N+1)^2,1);
+  o = 1;
+  for k = 0:p.N
+    p.f_hat(o:o+2*k) = a(k*(2*p.N+1)+p.N+1-k:k*(2*p.N+1)+p.N+1+k);
+    o = o + 2*k+1;
+  end
+  p = class(p,'f_hat');
+elseif (isnumeric(a) && ndims(a) == 2 && length(a) == 0 || ...
+        round(sqrt(length(a(:)))-1) == sqrt(length(a(:)))-1)
+  p.N = sqrt(length(a(:)))-1;
+  p.f_hat = a(:);
+  p = class(p,'f_hat');
+else
+  error('Invalid argument for f_hat constructor.')
+end
diff --git a/matlab/nfsft/@f_hat/minus.m b/matlab/nfsft/@f_hat/minus.m
new file mode 100644
index 0000000..2b39770
--- /dev/null
+++ b/matlab/nfsft/@f_hat/minus.m
@@ -0,0 +1,28 @@
+%MINUS Minus for f_hat
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: minus.m 3776 2012-06-03 13:29:25Z keiner $
+function r = minus(p,q)
+p = f_hat(p);
+q = f_hat(q);
+if (p.N ~= q.N)
+  error('Dimensions must agree.')
+end
+r = f_hat(p.f_hat - q.f_hat);
diff --git a/matlab/nfsft/@f_hat/mtimes.m b/matlab/nfsft/@f_hat/mtimes.m
new file mode 100644
index 0000000..ff899be
--- /dev/null
+++ b/matlab/nfsft/@f_hat/mtimes.m
@@ -0,0 +1,28 @@
+%MTIMES Multiply for f_hat
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mtimes.m 3776 2012-06-03 13:29:25Z keiner $
+function r = mtimes(p,q)
+
+p = f_hat(p);
+q = f_hat(q);
+if (p.N ~= q.N)
+  error('Dimensions must agree.')
+end
+r = f_hat(p.f_hat .* q.f_hat);
diff --git a/matlab/nfsft/@f_hat/mtimesr.m b/matlab/nfsft/@f_hat/mtimesr.m
new file mode 100644
index 0000000..606dee8
--- /dev/null
+++ b/matlab/nfsft/@f_hat/mtimesr.m
@@ -0,0 +1,33 @@
+%MTIMESR Multiply for f_hat
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mtimesr.m 3776 2012-06-03 13:29:25Z keiner $
+function r = mtimesr(p,q)
+if (isa(p,'f_hat') && isnumeric(q))
+  p = f_hat(p);
+  if (p.N ~= length(q(:))-1)
+    error('Dimensions must agree.')
+  end
+  r = f_hat(p);
+  for k = 0:r.N
+    r.f_hat(k^2+1:k^2+1+2*k) = q(k+1)*r.f_hat(k^2+1:k^2+1+2*k);
+  end
+else
+  error('Wrong argument types');
+end
diff --git a/matlab/nfsft/@f_hat/norm.m b/matlab/nfsft/@f_hat/norm.m
new file mode 100644
index 0000000..915c865
--- /dev/null
+++ b/matlab/nfsft/@f_hat/norm.m
@@ -0,0 +1,24 @@
+%NORM Norm for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: norm.m 3776 2012-06-03 13:29:25Z keiner $
+function y = norm(p,n)
+% Norm for f_hat class
+p = f_hat(p);
+y = norm(p.f_hat);
diff --git a/matlab/nfsft/@f_hat/plus.m b/matlab/nfsft/@f_hat/plus.m
new file mode 100644
index 0000000..b1831a0
--- /dev/null
+++ b/matlab/nfsft/@f_hat/plus.m
@@ -0,0 +1,27 @@
+%PLUS Plus for f_hat
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: plus.m 3776 2012-06-03 13:29:25Z keiner $
+function r = plus(p,q)
+p = f_hat(p);
+q = f_hat(q);
+if (p.N ~= q.N)
+  error('Dimensions must agree.')
+end
+r = f_hat(p.f_hat + q.f_hat);
diff --git a/matlab/nfsft/@f_hat/subsasgn.m b/matlab/nfsft/@f_hat/subsasgn.m
new file mode 100644
index 0000000..8eec894
--- /dev/null
+++ b/matlab/nfsft/@f_hat/subsasgn.m
@@ -0,0 +1,57 @@
+%SUBSASGN Index assignment function for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: subsasgn.m 3776 2012-06-03 13:29:25Z keiner $
+function p = subsasgn(p,s,v)
+switch s.type
+case '()'
+  if (length(s.subs) > 2)
+    error('Index must consist of two elements.');
+  end
+
+  ind1 = s.subs{1};
+  ind2 = s.subs{2};
+
+  if (any(round(ind1) ~= ind1) || min(ind1) < 0 || max(ind1) > p.N)
+    error('Invalid index in first component');
+  end
+
+  if (any(round(ind2) ~= ind2) || min(ind2) < -p.N || max(ind2) > p.N)
+    error('Invalid index in second component');
+  end
+
+  if (length(ind1) == 1 && min(ind2) >= -ind1 && max(ind2) <= ind1)
+    if (ind1 == 0)
+      o = 0;
+    else
+      o = ind1^2;
+    end
+    p.f_hat(o+ind1+1+ind2) = v;
+  elseif (length(ind2) == 1 && min(ind1) >= abs(ind2))
+    ind = zeros(size(ind1));
+    for k = 1:length(ind1)
+      ind(k) = ind1(k)^2+ind1(k)+1+ind2;
+    end
+    p.f_hat(ind) = v;
+  else
+    error('Invalid subindex');
+  end
+otherwise
+  error('Wrong subindex format');
+end
diff --git a/matlab/nfsft/@f_hat/subsref.m b/matlab/nfsft/@f_hat/subsref.m
new file mode 100644
index 0000000..e514c8f
--- /dev/null
+++ b/matlab/nfsft/@f_hat/subsref.m
@@ -0,0 +1,56 @@
+%SUBSREF Indexing funcction for f_hat class
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: subsref.m 3776 2012-06-03 13:29:25Z keiner $
+function b = subsref(p,s)
+switch s.type
+case '()'
+  if (length(s.subs) > 2)
+    error('Index must consist of two elements.');
+  end
+
+  ind1 = s.subs{1};
+  ind2 = s.subs{2};
+
+  if (any(round(ind1) ~= ind1) || min(ind1) < 0 || max(ind1) > p.N)
+    error('Invalid index in first component');
+  end
+
+  if (any(round(ind2) ~= ind2) || min(ind2) < -p.N || max(ind2) > p.N)
+    error('Invalid index in second component');
+  end
+
+  if (length(ind1) == 1 && min(ind2) >= -ind1 && max(ind2) <= ind1)
+    if (ind1 == 0)
+      o = 0;
+    else
+      o = ind1^2;
+    end
+    b = p.f_hat(o+ind1+1+ind2);
+  elseif (length(ind2) == 1 && min(ind1) >= abs(ind2))
+    b = zeros(size(ind1));
+    for k = 1:length(ind1)
+      b(k) = p.f_hat(ind1(k)^2+ind1(k)+1+ind2);
+    end
+  else
+    error('Invalid subindex');
+  end
+otherwise
+  error('Wrong subindex format');
+end
diff --git a/matlab/nfsft/Contents.m b/matlab/nfsft/Contents.m
new file mode 100644
index 0000000..90129fd
--- /dev/null
+++ b/matlab/nfsft/Contents.m
@@ -0,0 +1,33 @@
+%
+% Files
+%   f_hat_index               - Return indices of Fourier coefficients
+%   ndsft_adjoint             - Adjoint discrete spherical Fourier transform (direct alg.)
+%   ndsft_trafo               - Discrete spherical Fourier transform (direct algorithm)
+%   nfsft_adjoint             - Adjoint fast spherical Fourier transform
+%   nfsft_finalize            - Finalize plan
+%   nfsft_forget              - Forget precomputed data
+%   nfsft_get_f               - Get function values from plan
+%   nfsft_get_f_hat           - Get Fourier coefficients in a matrix from plan
+%   nfsft_get_x               - Get nodes from plan
+%   nfsft_init                - Plan initialization
+%   nfsft_init_advanced       - Advanced plan initialization routine
+%   nfsft_init_guru           - Guru plan initialization
+%   nfsft_precompute          - Node-independent precomputation (for FPT)
+%   nfsft_precompute_x        - Node-dependent precomputation (for NFFT)
+%   nfsft_set_f               - Set function values in plan
+%   nfsft_set_f_hat           - Set Fourier coefficients in plan from a matrix
+%   nfsft_set_x               - Set nodes in plan
+%   nfsft_trafo               - Fast spherical Fourier transform
+%   NFSFT_NORMALIZED          - Flag for using L^2-normalized Spherical harmonics
+%   NFSFT_NO_DIRECT_ALGORITHM - Flag for not precomputing for the direct algorithm
+%   NFSFT_NO_FAST_ALGORITHM   - Flag for not precomputing for the fast algorithm
+%   NFSFT_PRESERVE_F_HAT      - Flag for NFSFT not destroying input in f_hat
+%   NFSFT_USE_DPT             - Flag for using the DPT algorithm internally
+%   NFSFT_USE_NDFT            - Flag for using the NDFT algorithm internally
+%   cc                        - Clenshaw-Curtis interpolatory quadrature rule
+%   gl                        - Gauss-Legendre interpolatory quadrature rule
+%   nfsft_get_f_hat_linear    - Get Fourier coefficients in a linear vector from plan
+%   nfsft_set_f_hat_linear    - Set Fourier coefficients in plan from a linear vector
+%   projection                - Example program: Project a function onto spherical harmonics.
+%   simple_test               - Example program: Basic usage principles
+%   nfsftmex                  - Gateway routine to the NFSFT module
diff --git a/matlab/nfsft/Makefile.am b/matlab/nfsft/Makefile.am
new file mode 100644
index 0000000..f3b295d
--- /dev/null
+++ b/matlab/nfsft/Makefile.am
@@ -0,0 +1,48 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+SUBDIRS = @f_hat
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft
+
+# library
+lib_LTLIBRARIES = libnfsft.la
+libnfsft_la_SOURCES = nfsftmex.c
+libnfsft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfsft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+
+if HAVE_MATLAB_THREADS
+libnfsft_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+
+dist_nfsftmatlab_DATA = cc.m Contents.m f_hat_index.m ndsft_adjoint.m ndsft_trafo.m \
+        nfsft_adjoint.m nfsft_finalize.m nfsft_forget.m nfsft_get_f_hat.m \
+        nfsft_get_f.m nfsft_get_x.m nfsft_init_advanced.m nfsft_init_guru.m \
+        nfsft_init.m NFSFT_NO_DIRECT_ALGORITHM.m NFSFT_NO_FAST_ALGORITHM.m \
+        NFSFT_NORMALIZED.m nfsft_precompute_x.m nfsft_precompute.m \
+        NFSFT_PRESERVE_F_HAT.m nfsft_set_f_hat.m nfsft_set_f.m nfsft_set_x.m \
+        nfsft_trafo.m NFSFT_USE_DPT.m NFSFT_USE_NDFT.m gl.m simple_test.m \
+        nfsft_get_f_hat_linear.m nfsft_set_f_hat_linear.m projection.m \
+	nfsft_get_num_threads.m
+
+# target all-am builds .libs/libnfsft at matlab_mexext@
+nfsftmex at matlab_mexext@: all-am 
+	rm -f ./nfsftmex at matlab_mexext@
+	$(LN_S) .libs/libnfsft at matlab_mexext@ ./nfsftmex at matlab_mexext@
+
+all: all-am nfsftmex at matlab_mexext@
+
+clean: clean-am
+	rm -f ./nfsftmex at matlab_mexext@
+
+install-exec-hook:
+	rm -f $(libdir)/nfsftmex at matlab_mexext@
+	$(LN_S) $(libdir)/libnfsft at matlab_mexext@ $(libdir)/nfsftmex at matlab_mexext@
+
+uninstall-hook:
+	rm -f $(libdir)/nfsftmex at matlab_mexext@
+
diff --git a/matlab/nfsft/Makefile.in b/matlab/nfsft/Makefile.in
new file mode 100644
index 0000000..f3ef809
--- /dev/null
+++ b/matlab/nfsft/Makefile.in
@@ -0,0 +1,840 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab/nfsft
+DIST_COMMON = $(dist_nfsftmatlab_DATA) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfsftmatlabdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libnfsft_la_DEPENDENCIES = $(top_builddir)/libnfft3_matlab.la \
+	$(top_builddir)/matlab/libmatlab.la $(am__DEPENDENCIES_1)
+am_libnfsft_la_OBJECTS = libnfsft_la-nfsftmex.lo
+libnfsft_la_OBJECTS = $(am_libnfsft_la_OBJECTS)
+libnfsft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnfsft_la_CFLAGS) \
+	$(CFLAGS) $(libnfsft_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libnfsft_la_SOURCES)
+DIST_SOURCES = $(libnfsft_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DATA = $(dist_nfsftmatlab_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = @f_hat
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft
+
+# library
+lib_LTLIBRARIES = libnfsft.la
+libnfsft_la_SOURCES = nfsftmex.c
+libnfsft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfsft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+ at HAVE_MATLAB_THREADS_TRUE@libnfsft_la_CFLAGS = $(OPENMP_CFLAGS)
+dist_nfsftmatlab_DATA = cc.m Contents.m f_hat_index.m ndsft_adjoint.m ndsft_trafo.m \
+        nfsft_adjoint.m nfsft_finalize.m nfsft_forget.m nfsft_get_f_hat.m \
+        nfsft_get_f.m nfsft_get_x.m nfsft_init_advanced.m nfsft_init_guru.m \
+        nfsft_init.m NFSFT_NO_DIRECT_ALGORITHM.m NFSFT_NO_FAST_ALGORITHM.m \
+        NFSFT_NORMALIZED.m nfsft_precompute_x.m nfsft_precompute.m \
+        NFSFT_PRESERVE_F_HAT.m nfsft_set_f_hat.m nfsft_set_f.m nfsft_set_x.m \
+        nfsft_trafo.m NFSFT_USE_DPT.m NFSFT_USE_NDFT.m gl.m simple_test.m \
+        nfsft_get_f_hat_linear.m nfsft_set_f_hat_linear.m projection.m \
+	nfsft_get_num_threads.m
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfsft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu matlab/nfsft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libnfsft.la: $(libnfsft_la_OBJECTS) $(libnfsft_la_DEPENDENCIES) $(EXTRA_libnfsft_la_DEPENDENCIES) 
+	$(libnfsft_la_LINK) -rpath $(libdir) $(libnfsft_la_OBJECTS) $(libnfsft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_la-nfsftmex.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libnfsft_la-nfsftmex.lo: nfsftmex.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_la_CFLAGS) $(CFLAGS) -MT libnfsft_la-nfsftmex.lo -MD -MP -MF $(DEPDIR)/libnfsft_la-nfsftmex.Tpo -c -o libnfsft_la-nfsftmex.lo `test -f 'nfsftmex.c' || echo '$(srcdir)/'`nfsftmex.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfsft_la-nfsftmex.Tpo $(DEPDIR)/libnfsft_la-nfsftmex.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsftmex.c' object='libnfsft_la-nfsftmex.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_la_CFLAGS) $(CFLAGS) -c -o libnfsft_la-nfsftmex.lo `test -f 'nfsftmex.c' || echo '$(srcdir)/'`nfsftmex.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-dist_nfsftmatlabDATA: $(dist_nfsftmatlab_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(nfsftmatlabdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(nfsftmatlabdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfsftmatlabdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(nfsftmatlabdir)" || exit $$?; \
+	done
+
+uninstall-dist_nfsftmatlabDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(nfsftmatlabdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfsftmatlabdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-dist_nfsftmatlabDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_nfsftmatlabDATA uninstall-libLTLIBRARIES
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am \
+	install-exec-am install-strip tags-recursive uninstall-am
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist \
+	cscopelist-recursive ctags ctags-recursive distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-dist_nfsftmatlabDATA install-dvi install-dvi-am \
+	install-exec install-exec-am install-exec-hook install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am \
+	uninstall-dist_nfsftmatlabDATA uninstall-hook \
+	uninstall-libLTLIBRARIES
+
+
+# target all-am builds .libs/libnfsft at matlab_mexext@
+nfsftmex at matlab_mexext@: all-am 
+	rm -f ./nfsftmex at matlab_mexext@
+	$(LN_S) .libs/libnfsft at matlab_mexext@ ./nfsftmex at matlab_mexext@
+
+all: all-am nfsftmex at matlab_mexext@
+
+clean: clean-am
+	rm -f ./nfsftmex at matlab_mexext@
+
+install-exec-hook:
+	rm -f $(libdir)/nfsftmex at matlab_mexext@
+	$(LN_S) $(libdir)/libnfsft at matlab_mexext@ $(libdir)/nfsftmex at matlab_mexext@
+
+uninstall-hook:
+	rm -f $(libdir)/nfsftmex at matlab_mexext@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/nfsft/NFSFT_NORMALIZED.m b/matlab/nfsft/NFSFT_NORMALIZED.m
new file mode 100644
index 0000000..1d6ed49
--- /dev/null
+++ b/matlab/nfsft/NFSFT_NORMALIZED.m
@@ -0,0 +1,22 @@
+%NFSFT_NORMALIZED Flag for using L^2-normalized Spherical harmonics
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_NORMALIZED.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_NORMALIZED()
+f = 1;
diff --git a/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m b/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
new file mode 100644
index 0000000..2b69944
--- /dev/null
+++ b/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
@@ -0,0 +1,22 @@
+%NFSFT_NO_DIRECT_ALGORITHM Flag for not precomputing for the direct algorithm
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_NO_DIRECT_ALGORITHM.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_NO_DIRECT_ALGORITHM()
+f = 8192;
diff --git a/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m b/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
new file mode 100644
index 0000000..abc1dfa
--- /dev/null
+++ b/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
@@ -0,0 +1,22 @@
+%NFSFT_NO_FAST_ALGORITHM Flag for not precomputing for the fast algorithm
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_NO_FAST_ALGORITHM.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_NO_FAST_ALGORITHM()
+f = 16384;
diff --git a/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m b/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
new file mode 100644
index 0000000..fc1f1da
--- /dev/null
+++ b/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
@@ -0,0 +1,22 @@
+%NFSFT_PRESERVE_F_HAT Flag for NFSFT not destroying input in f_hat
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_PRESERVE_F_HAT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_PRESERVE_F_HAT()
+f = 128;
diff --git a/matlab/nfsft/NFSFT_USE_DPT.m b/matlab/nfsft/NFSFT_USE_DPT.m
new file mode 100644
index 0000000..5a0f78c
--- /dev/null
+++ b/matlab/nfsft/NFSFT_USE_DPT.m
@@ -0,0 +1,23 @@
+%NFSFT_USE_DPT Flag for using the DPT algorithm internally
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_USE_DPT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_USE_DPT()
+
+f = 4;
diff --git a/matlab/nfsft/NFSFT_USE_NDFT.m b/matlab/nfsft/NFSFT_USE_NDFT.m
new file mode 100644
index 0000000..5f915c0
--- /dev/null
+++ b/matlab/nfsft/NFSFT_USE_NDFT.m
@@ -0,0 +1,22 @@
+%NFSFT_USE_NDFT Flag for using the NDFT algorithm internally
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_USE_NDFT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_USE_NDFT()
+f = 2;
diff --git a/matlab/nfsft/cc.m b/matlab/nfsft/cc.m
new file mode 100755
index 0000000..4b7beca
--- /dev/null
+++ b/matlab/nfsft/cc.m
@@ -0,0 +1,95 @@
+%CC Clenshaw-Curtis interpolatory quadrature rule
+%   X = CC(N) generates the (2N+2)*(2*N-1)+2 Clenshaw-Curtis nodes and returns a
+%   2x[(2N+2)*(2*N-1)+2] matrix X containing their spherical coordinates. The
+%   first row contains the longitudes in [0,2pi] and the second row the
+%   colatitudes in [0,pi].
+%
+%   [X,W] = CC(N) in addition generates the quadrature weights W. The resulting
+%   quadrature rule is exact up to polynomial degree 2*N.
+%
+%   For the special case N = 0, the number of nodes is 2.
+%
+%   Nota bene: In latitudinal direction, the nodes are based on Chebyshev zeros
+%   in (-1,1). Similar quadrature rules based on Chebyshev extrema in [-1,1]
+%   are also often denoted Clenshaw-Curtis quadrature rules. See the references.
+%
+%   Example:
+%   [X,W] = CC(1) gives
+%
+%   X =
+%        0         0    1.5708    3.1416    4.7124         0
+%        0    1.5708    1.5708    1.5708    1.5708    3.1416
+%
+%   W =
+%   2.0944    2.0944    2.0944    2.0944    2.0944    2.0944
+%
+%   See also gl, healpix, equidist
+%
+%   References
+%   TODO Add references.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: cc.m 3776 2012-06-03 13:29:25Z keiner $
+function [x,w] = cc(n)
+
+% correctness conditions
+if (nargin ~= 1)
+  error('cc: Exactly one input argument required.');
+end
+if (~isscalar(n) || n < 0)
+  error('cc: Input argument must be a non-negative number.');
+end
+if (nargout > 2)
+  error('cc: No more than two output arguments allowed.');
+end
+
+% Gauss-Legendre nodes and weights (maybe) on [-1,1]
+if (nargout == 2)
+  [theta,w] = fclencurt(2*n+1,-1,1);
+else
+  theta = fclencurt(2*n+1,-1,1);
+end
+% coordinate transformation to [0,pi] for colatitude
+theta = acos(theta);
+% equispaced nodes for longitude
+phi = 2*pi*(0:2*n+1)/(2*n+2);
+% tensor product
+[x,y] = meshgrid(theta(2:end-1),phi);
+% linearisation to 2x((2*n+2)(2*n-1))+2 matrix
+x = [y(:),x(:)]';
+x = [[0;0],x,[0;pi]];
+if (nargout == 2)
+  % weights
+  w0 = 2*pi*w(1);
+  w = repmat((pi/(n+1))*w(2:end-1),1,2*n+2)';
+  w = w(:)';
+  w = [w0,w,w0];
+end
+
+% The following function is based on code by Greg von Winckel, 02/12/2005
+% See: ...
+function [x,w] = fclencurt(n1,a,b)
+n = n1-1; bma = b - a;
+c = zeros(n1,2);
+c(1:2:n1,1) = (2./[1 1-(2:2:n).^2 ])'; c(2,2)=1;
+f = real(ifft([c(1:n1,:);c(n:-1:2,:)]));
+w = bma*([f(1,1); 2*f(2:n,1); f(n1,1)])/2;
+x = 0.5*((b+a)+n*bma*f(1:n1,2));
+
diff --git a/matlab/nfsft/f_hat_index.m b/matlab/nfsft/f_hat_index.m
new file mode 100644
index 0000000..74db6ce
--- /dev/null
+++ b/matlab/nfsft/f_hat_index.m
@@ -0,0 +1,38 @@
+%F_HAT_INDEX Return indices of Fourier coefficients
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: f_hat_index.m 3776 2012-06-03 13:29:25Z keiner $
+function ind = f_hat_index(f_hat,j,k)
+[m,n] = size(f_hat);
+N = (m-1)/2;
+
+if (mod(m,2) ~= 1 || N+1 ~= n)
+  error('This is not a valid f_hat variable')
+end
+
+if (exist('k','var') == 0 || exist('n','var') == 0)
+  ind = zeros(1,(N+1)*(N+1));
+  j = 1;
+  for k = 0:N
+    ind(j:j+2*k) = k*(2*N+1) + N + 1 + (-k:k);
+    j = j + 2*k+1;
+  end
+else
+  ind = (2*N+1)*j + k + N + 1;
+end
diff --git a/matlab/nfsft/gl.m b/matlab/nfsft/gl.m
new file mode 100644
index 0000000..21f0aa2
--- /dev/null
+++ b/matlab/nfsft/gl.m
@@ -0,0 +1,106 @@
+%GL Gauss-Legendre interpolatory quadrature rule
+%   X = GL(N) generates the (2N+2)*(N+1) Gauss-Legendre nodes and returns a
+%   2x[(2N+2)*(N+1)] matrix X containing their spherical coordinates. The first
+%   row contains the longitudes in [0,2pi] and the second row the colatitudes in
+%   [0,pi].
+%
+%   [X,W] = GL(N) in addition generates the quadrature weights W. The resulting
+%   quadrature rule is exact up to polynomial degree 2*N.
+%
+%   Example:
+%   [X,W] = GL(1) gives
+%
+%   X =
+%        0    1.5708    3.1416    4.7124         0    1.5708    3.1416    4.7124
+%   0.9553    0.9553    0.9553    0.9553    2.1863    2.1863    2.1863    2.1863
+%
+%   W =
+%   1.5708    1.5708    1.5708    1.5708    1.5708    1.5708    1.5708    1.5708
+%
+%   See also cc, healpix, equidist
+%
+%   References
+%   TODO Add references.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: gl.m 3776 2012-06-03 13:29:25Z keiner $
+function [x,w] = gl(n)
+
+% correctness conditions
+if (nargin ~= 1)
+  error('gl: Exactly one input argument required.');
+end
+if (~isscalar(n) || n < 0)
+  error('gl: Input argument must be a non-negative number.');
+end
+if (nargout > 2)
+  error('gl: No more than two output arguments allowed.');
+end
+
+% Gauss-Legendre nodes and weights (maybe) on [-1,1]
+if (nargout == 2)
+  [theta,w] = lgwt(n+1,-1,1);
+else
+  theta = lgwt(n+1,-1,1);
+end
+% coordinate transformation to [0,pi] for colatitude
+theta = acos(theta);
+% equispaced nodes for longitude
+phi = 2*pi*(0:2*n+1)/(2*n+2);
+% tensor product
+[x,y] = meshgrid(theta,phi);
+% linearisation to 2x((2*n+2)(n+1)) matrix
+x = [y(:),x(:)]';
+if (nargout == 2)
+  % weights
+  w = repmat((pi/(n+1))*w,1,2*n+2)';
+  w = w(:)';
+end
+
+% The following function is based on code by Greg von Winckel, 02/25/2004
+% See: TODO Add references.
+function [x,w] = lgwt(n,a,b)
+
+n = n-1; n1= n + 1; n2 = n + 2;
+% n1 uniform nodes in [-1,1]
+xu = linspace(-1,1,n1)';
+% initial guess for nodes
+y=cos((2*(0:n)'+1)*pi/(2*n+2)) + (0.27/n1)*sin(pi*xu*n/n2);
+% Gauss-Legendre Vandermonde matrix
+L=zeros(n1,n2);
+% derivative of that
+Lp=zeros(n1,n2);
+% We compute the zeros of the n1th Legendre polynomial using the recursion
+% relation and the Newton-Raphson method.
+y0=2;
+% Iterate until new points are uniformly within epsilon of old points.
+while (max(abs(y - y0)) > eps)
+  L(:,1) = 1; Lp(:,1) = 0; L(:,2) = y; Lp(:,2) = 1;
+  for k = 2:n1
+    L(:,k+1) = ((2*k-1)*y.*L(:,k)-(k-1)*L(:,k-1))/k;
+  end
+  Lp = n2 * (L(:,n1) - y.*L(:,n2))./(1-y.^2); y0 = y; y = y0 - L(:,n2)./Lp;
+end
+% linear map from[-1,1] to [a,b]
+x = (a*(1-y)+b*(1+y))/2;
+if (nargout == 2)
+  % weights
+  w = (b-a)./((1-y.^2).*Lp.^2)*(n2/n1)^2;
+end
diff --git a/matlab/nfsft/ndsft_adjoint.m b/matlab/nfsft/ndsft_adjoint.m
new file mode 100644
index 0000000..fb84628
--- /dev/null
+++ b/matlab/nfsft/ndsft_adjoint.m
@@ -0,0 +1,22 @@
+%NDSFT_ADJOINT Adjoint discrete spherical Fourier transform (direct alg.)
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndsft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function ndsft_adjoint(p)
+nfsftmex('adjoint_direct',p)
diff --git a/matlab/nfsft/ndsft_trafo.m b/matlab/nfsft/ndsft_trafo.m
new file mode 100644
index 0000000..ccb7db7
--- /dev/null
+++ b/matlab/nfsft/ndsft_trafo.m
@@ -0,0 +1,22 @@
+%NDSFT_TRAFO Discrete spherical Fourier transform (direct algorithm)
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndsft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function ndsft_trafo(p)
+nfsftmex('trafo_direct',p)
diff --git a/matlab/nfsft/nfsft_adjoint.m b/matlab/nfsft/nfsft_adjoint.m
new file mode 100644
index 0000000..f7913a3
--- /dev/null
+++ b/matlab/nfsft/nfsft_adjoint.m
@@ -0,0 +1,22 @@
+%NFSFT_ADJOINT Adjoint fast spherical Fourier transform
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_adjoint(p)
+nfsftmex('adjoint',p)
diff --git a/matlab/nfsft/nfsft_finalize.m b/matlab/nfsft/nfsft_finalize.m
new file mode 100644
index 0000000..6a1eed6
--- /dev/null
+++ b/matlab/nfsft/nfsft_finalize.m
@@ -0,0 +1,22 @@
+%NFSFT_FINALIZE Finalize plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_finalize(p)
+nfsftmex('finalize',p)
diff --git a/matlab/nfsft/nfsft_forget.m b/matlab/nfsft/nfsft_forget.m
new file mode 100644
index 0000000..f9e06ff
--- /dev/null
+++ b/matlab/nfsft/nfsft_forget.m
@@ -0,0 +1,22 @@
+%NFSFT_FORGET Forget precomputed data
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_forget.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_forget
+nfsftmex('forget');
diff --git a/matlab/nfsft/nfsft_get_f.m b/matlab/nfsft/nfsft_get_f.m
new file mode 100644
index 0000000..e6c3f12
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_f.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_F Get function values from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
+function f = nfsft_get_f(p)
+f = nfsftmex('get_f',p);
diff --git a/matlab/nfsft/nfsft_get_f_hat.m b/matlab/nfsft/nfsft_get_f_hat.m
new file mode 100644
index 0000000..28c33e1
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_f_hat.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_F_HAT Get Fourier coefficients in a matrix from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function f_hat = nfsft_get_f_hat(p)
+f_hat = nfsftmex('get_f_hat',p);
diff --git a/matlab/nfsft/nfsft_get_f_hat_linear.m b/matlab/nfsft/nfsft_get_f_hat_linear.m
new file mode 100644
index 0000000..8edf27c
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_f_hat_linear.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_F_HAT_LINEAR Get Fourier coefficients in a linear vector from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_f_hat_linear.m 3776 2012-06-03 13:29:25Z keiner $
+function f_hat = nfsft_get_f_hat_linear(p)
+f_hat = nfsftmex('get_f_hat_linear',p);
diff --git a/matlab/nfsft/nfsft_get_num_threads.m b/matlab/nfsft/nfsft_get_num_threads.m
new file mode 100644
index 0000000..c48e8f3
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_num_threads.m
@@ -0,0 +1,23 @@
+%NFSFT_GET_NUM_THREADS Get number of threads (at most) used for computation
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_x.m 3124 2009-03-18 13:44:27Z kunis $
+function nthreads = nfsft_get_num_threads()
+
+nthreads = nfsftmex('get_num_threads');
diff --git a/matlab/nfsft/nfsft_get_x.m b/matlab/nfsft/nfsft_get_x.m
new file mode 100644
index 0000000..0c01151
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_x.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_X Get nodes from plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
+function x = nfsft_get_x(p)
+x = nfsftmex('get_x',p);
diff --git a/matlab/nfsft/nfsft_init.m b/matlab/nfsft/nfsft_init.m
new file mode 100644
index 0000000..4dd2c80
--- /dev/null
+++ b/matlab/nfsft/nfsft_init.m
@@ -0,0 +1,22 @@
+%NFSFT_INIT Plan initialization
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_init.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfsft_init(N,M)
+p = nfsftmex('init',N,M);
diff --git a/matlab/nfsft/nfsft_init_advanced.m b/matlab/nfsft/nfsft_init_advanced.m
new file mode 100644
index 0000000..0ecb48c
--- /dev/null
+++ b/matlab/nfsft/nfsft_init_advanced.m
@@ -0,0 +1,22 @@
+%NFSFT_INIT_ADVANCED Advanced plan initialization routine
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_init_advanced.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfsft_init_advanced(N,M,flags)
+p = nfsftmex('init_advanced',N,M,flags);
diff --git a/matlab/nfsft/nfsft_init_guru.m b/matlab/nfsft/nfsft_init_guru.m
new file mode 100644
index 0000000..71571ca
--- /dev/null
+++ b/matlab/nfsft/nfsft_init_guru.m
@@ -0,0 +1,22 @@
+%NFSFT_INIT_GURU Guru plan initialization
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfsft_init_guru(N,M,flags,nfft_flags,nfft_cutoff)
+p = nfsftmex('init_guru',N,M,flags,nfft_flags,nfft_cutoff);
diff --git a/matlab/nfsft/nfsft_precompute.m b/matlab/nfsft/nfsft_precompute.m
new file mode 100644
index 0000000..c4e7e4a
--- /dev/null
+++ b/matlab/nfsft/nfsft_precompute.m
@@ -0,0 +1,30 @@
+%NFSFT_PRECOMPUTE Node-independent precomputation (for FPT)
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_precompute.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_precompute(N,kappa,nfsft_flags,fpt_flags)
+if ~exist('nfsft_flags','var')
+  nfsft_flags = 0;
+end
+
+if ~exist('fpt_flags','var')
+  fpt_flags = 0;
+end
+
+nfsftmex('precompute',N,kappa,nfsft_flags,fpt_flags)
diff --git a/matlab/nfsft/nfsft_precompute_x.m b/matlab/nfsft/nfsft_precompute_x.m
new file mode 100644
index 0000000..1975945
--- /dev/null
+++ b/matlab/nfsft/nfsft_precompute_x.m
@@ -0,0 +1,22 @@
+%NFSFT_PRECOMPUTE_X Node-dependent precomputation (for NFFT)
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_precompute_x.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_precompute_x(p)
+nfsftmex('precompute_x',p)
diff --git a/matlab/nfsft/nfsft_set_f.m b/matlab/nfsft/nfsft_set_f.m
new file mode 100644
index 0000000..93dfebd
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_f.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_F Set function values in plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_f(p,f)
+nfsftmex('set_f',p,f)
diff --git a/matlab/nfsft/nfsft_set_f_hat.m b/matlab/nfsft/nfsft_set_f_hat.m
new file mode 100644
index 0000000..2db341a
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_f_hat.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_F_HAT Set Fourier coefficients in plan from a matrix
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_f_hat(p,f_hat)
+nfsftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfsft/nfsft_set_f_hat_linear.m b/matlab/nfsft/nfsft_set_f_hat_linear.m
new file mode 100644
index 0000000..ce3e869
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_f_hat_linear.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_F_HAT_LINEAR Set Fourier coefficients in plan from a linear vector
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_f_hat_linear.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_f_hat_linear(p,f_hat)
+nfsftmex('set_f_hat_linear',p,f_hat)
diff --git a/matlab/nfsft/nfsft_set_x.m b/matlab/nfsft/nfsft_set_x.m
new file mode 100644
index 0000000..886ed00
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_x.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_X Set nodes in plan
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_x(p,x)
+nfsftmex('set_x',p,x)
diff --git a/matlab/nfsft/nfsft_trafo.m b/matlab/nfsft/nfsft_trafo.m
new file mode 100644
index 0000000..2d43759
--- /dev/null
+++ b/matlab/nfsft/nfsft_trafo.m
@@ -0,0 +1,22 @@
+%NFSFT_TRAFO Fast spherical Fourier transform
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_trafo(p)
+nfsftmex('trafo',p)
diff --git a/matlab/nfsft/nfsftmex.c b/matlab/nfsft/nfsftmex.c
new file mode 100644
index 0000000..8a2060f
--- /dev/null
+++ b/matlab/nfsft/nfsftmex.c
@@ -0,0 +1,482 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfsftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "nfft3.h"
+#include "infft.h"
+#include "nfft3util.h"
+#include "imex.h"
+
+#ifdef HAVE_MEXVERSION_C
+  #include "mexversion.c"
+#endif
+
+#define PLANS_MAX 100 /* maximum number of plans */
+#define CMD_LEN_MAX 20 /* maximum length of command argument */
+
+/* global flags */
+#define NFSFT_MEX_FIRST_CALL (1U << 0)
+#define NFSFT_MEX_PRECOMPUTED (1U << 1)
+unsigned short gflags = NFSFT_MEX_FIRST_CALL;
+
+nfsft_plan* plans[PLANS_MAX]; /* plans */
+int n_max = -1; /* maximum degree precomputed */
+char cmd[CMD_LEN_MAX];
+
+static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+{
+  int t = nfft_mex_get_int(prhs[1],"nfsft: Input argument N must be a scalar.");
+  DM(if (t < 0)
+    mexErrMsgTxt("nfsft: Input argument N must be non-negative.");)
+  *n = t;
+  t = nfft_mex_get_int(prhs[2],"nfsft: Input argument M must be a scalar.");
+  DM(if (t < 1)
+    mexErrMsgTxt("nfsft: Input argument M must be positive.");)
+  *m = t;
+}
+
+static inline void get_nmf(const mxArray *prhs[], int *n, int *m,
+  unsigned int *f)
+{
+  get_nm(prhs,n,m);
+  *f = nfft_mex_get_int(prhs[3],"nfsft: Input argument flags must be a scalar.");
+}
+
+static inline void get_nmffc(const mxArray *prhs[], int *n, int *m,
+  unsigned int *f, unsigned int *f2, int *c)
+{
+  get_nmf(prhs,n,m,f);
+  *f2 = nfft_mex_get_int(prhs[4],"nfsft: Input argument flags2 must be a scalar.");
+  {
+    int t = nfft_mex_get_int(prhs[5],"nfsft: Input argument c must be a scalar.");
+    DM(if (t < 1)
+      mexErrMsgTxt("nfsft: Input argument c must be positive.");)
+    *c = t;
+  }
+}
+
+static inline void check_nargs(const int nrhs, const int n, const char* errmsg)
+{
+  DM(if (nrhs != n)
+    mexErrMsgTxt(errmsg);)
+}
+
+static inline int mkplan()
+{
+  int i = 0;
+  while (i < PLANS_MAX && plans[i] != 0) i++;
+  if (i == PLANS_MAX)
+    mexErrMsgTxt("nfsft: Too many plans already allocated.");
+  plans[i] = nfft_malloc(sizeof(nfsft_plan));
+  return i;
+}
+
+/* cleanup on mex function unload */
+static void cleanup(void)
+{
+  int i;
+
+  if (!(gflags & NFSFT_MEX_FIRST_CALL))
+  {
+    for (i = 0; i < PLANS_MAX; i++)
+      if (plans[i])
+      {
+        nfsft_finalize(plans[i]);
+        nfft_free(plans[i]);
+        plans[i] = 0;
+      }
+    nfsft_forget();
+    gflags |= NFSFT_MEX_FIRST_CALL;
+    gflags &= ~NFSFT_MEX_PRECOMPUTED;
+    n_max = -1;
+  }
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+  if (gflags & NFSFT_MEX_FIRST_CALL)
+  {
+    /* Force Matlab to load libfftw3. There is at least one version of Matlab
+     * which otherwise crashes upon invocation of this mex function. */
+    mexEvalString("fft([1,2,3,4]);");
+
+    nfft_mex_install_mem_hooks();
+
+    /* plan pointers to zeros */
+    {
+      int i;
+      for (i = 0; i < PLANS_MAX; i++)
+        plans[i] = 0;
+    }
+
+    mexAtExit(cleanup);
+    gflags &= ~NFSFT_MEX_FIRST_CALL;
+  }
+
+  /* command string */
+  DM(if (nrhs == 0)
+    mexErrMsgTxt("At least one input required.");)
+
+  DM(if (!mxIsChar(prhs[0]))
+    mexErrMsgTxt("First argument must be a string.");)
+
+  if (mxGetString(prhs[0], cmd, CMD_LEN_MAX))
+    mexErrMsgTxt("Could not get command string.");
+
+  if (strcmp(cmd,"init") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for init.");
+    {
+      int i; 
+      int n, m;
+      get_nm(prhs,&n,&m);
+      i = mkplan();
+      nfsft_init(plans[i],n,m);
+      plhs[0] = mxCreateDoubleScalar((double)i);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"init_advanced") == 0)
+  {
+    check_nargs(nrhs,4,"Wrong number of arguments for init_advanced.");
+    {
+      int i;
+      int n, m;
+      unsigned int f;
+      get_nmf(prhs,&n,&m,&f);
+      i = mkplan();
+      nfsft_init_advanced(plans[i],n,m,f | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+        NFSFT_MALLOC_F_HAT);
+      plhs[0] = mxCreateDoubleScalar((double)i);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"init_guru") == 0)
+  {
+    check_nargs(nrhs,6,"Wrong number of arguments for init_guru.");
+    {
+      int i;
+      int n, m, c;
+      unsigned int f, f2;
+      get_nmffc(prhs,&n,&m,&f,&f2,&c);
+      i = mkplan();
+      nfsft_init_guru(plans[i],n,m,f | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+        NFSFT_MALLOC_F_HAT, PRE_PHI_HUT | PRE_PSI | FFTW_INIT
+        | FFT_OUT_OF_PLACE, c);
+      plhs[0] = mxCreateDoubleScalar((double)i);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"precompute") == 0)
+  {
+    check_nargs(nrhs,5,"Wrong number of arguments for precompute.");
+    {
+      int n = nfft_mex_get_int(prhs[1],"nfsft: Input argument n must be a scalar.");
+      double k = nfft_mex_get_double(prhs[2],"nfsft: Input argument kappa must be a scalar.");
+      unsigned int f = nfft_mex_get_int(prhs[3],"nfsft: Input argument flags must be a scalar.");
+      unsigned int f2 = nfft_mex_get_int(prhs[4],"nfsft: Input argument flags2 must be a scalar.");
+      if (n_max < n)
+      {
+        if (gflags & NFSFT_MEX_PRECOMPUTED)
+          nfsft_forget();
+
+        nfsft_precompute(n,k,f,f2);
+        n_max = n;
+        gflags |= NFSFT_MEX_PRECOMPUTED;
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"forget") == 0)
+  {
+    check_nargs(nrhs,1,"Wrong number of arguments for forget.");
+    nfsft_forget();
+    n_max = -1;
+    gflags &= ~NFSFT_MEX_PRECOMPUTED;
+    return;
+  }
+  else if (strcmp(cmd,"trafo") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for trafo.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      nfsft_trafo(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"adjoint") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for adjoint.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      nfsft_adjoint(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"finalize") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for finalize.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      nfsft_finalize(plans[i]);
+      nfft_free(plans[i]);
+      plans[i] = 0;
+    }
+    return;
+  }
+  else if (strcmp(cmd,"precompute_x") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for precompute_x.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      nfsft_precompute_x(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"trafo_direct") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for trafo direct.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      nfsft_trafo_direct(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"adjoint_direct") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for adjoint direct.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      nfsft_adjoint_direct(plans[i]);
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_x") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_x.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int m = plans[i]->M_total;
+      plhs[0] = mxCreateDoubleMatrix(2, (unsigned)m, mxREAL);
+      {
+        double *x = mxGetPr(plhs[0]);
+        int j;
+        for (j = 0; j < m; j++)
+        {
+          x[2*j] = PI2*plans[i]->x[2*j];
+          if (x[2*j] < 0.0)
+            x[2*j] += PI2;
+          x[2*j+1] = PI2*plans[i]->x[2*j+1];
+        }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_f") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_f.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int m = plans[i]->M_total;
+      plhs[0] = mxCreateDoubleMatrix((unsigned)m, 1, mxCOMPLEX);
+      {
+        double *fr = mxGetPr(plhs[0]), *fi = mxGetPi(plhs[0]);
+        int j;
+        for (j = 0; j < m; j++)
+        {
+          fr[j] = creal(plans[i]->f[j]);
+          fi[j] = cimag(plans[i]->f[j]);
+        }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_f_hat") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int n = plans[i]->N;
+      plhs[0] = mxCreateDoubleMatrix((unsigned)(2*n+1), (unsigned)(n+1), mxCOMPLEX);
+      {
+        double *f_hatr = mxGetPr(plhs[0]), *f_hati = mxGetPi(plhs[0]);
+        int k,j;
+        for (k = 0; k <= n; k++)
+          for (j = -k; j <= k; j++)
+          {
+            f_hatr[k*(2*n+1)+n+j] = creal(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+            f_hati[k*(2*n+1)+n+j] = cimag(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+          }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"get_f_hat_linear") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat_linear.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int n = plans[i]->N;
+      plhs[0] = mxCreateDoubleMatrix((unsigned)((n+1)*(n+1)), 1, mxCOMPLEX);
+      {
+        double *f_hatr = mxGetPr(plhs[0]), *f_hati = mxGetPi(plhs[0]);
+        int j,k,idx = 0;
+        for (k = 0; k <= n; k++)
+          for (j = -k; j <= k; j++, idx++)
+          {
+            f_hatr[idx] = creal(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+            f_hati[idx] = cimag(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+          }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_x") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_x.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int m = plans[i]->M_total;
+      DM(if (!mxIsDouble(prhs[2]) || mxGetNumberOfDimensions(prhs[2]) > 2)
+        mexErrMsgTxt("Input argument x must be a 2 x M double array");)
+      DM(if (mxGetM(prhs[2]) != 2 || mxGetN(prhs[2]) != (unsigned)m)
+        mexErrMsgTxt("Input argument x must have correct size.");)
+      {
+        double *x = mxGetPr(prhs[2]);
+        int j;
+        for (j = 0; j < m; j++)
+        {
+          plans[i]->x[2*j] = ((x[2*j] > PI)?(x[2*j] - PI2):(x[2*j]))/PI2;
+          plans[i]->x[2*j+1] = x[2*j+1]/PI2;
+        }
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_f") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_f.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int m = plans[i]->M_total;
+      DM(if (mxGetM(prhs[2]) * mxGetN(prhs[2]) != (unsigned)m)
+        mexErrMsgTxt("Input argument f must have correct size.");)
+      {
+        double *fr = mxGetPr(prhs[2]), *fi = mxGetPi(prhs[2]);
+        int j;
+        if (fi)
+          for (j = 0; j < m; j++)
+            plans[i]->f[j] = fr[j] + _Complex_I*fi[j];
+        else
+          for (j = 0; j < m; j++)
+            plans[i]->f[j] = fr[j];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_f_hat") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int n = plans[i]->N;
+      DM(if (!mxIsDouble(prhs[2]))
+        mexErrMsgTxt("Input argument f must be a double array");)
+      DM(if (   mxGetM(prhs[2]) != (unsigned)(2*n+1)
+          || mxGetN(prhs[2]) != (unsigned)(n+1))
+        mexErrMsgTxt("Input argument f must have correct size.");)
+      {
+        double *f_hatr = mxGetPr(prhs[2]), *f_hati = mxGetPi(prhs[2]);
+        int j,k;
+        if (f_hati)
+          for (k = 0; k <= n; k++)
+            for (j = -k; j <= k; j++)
+              plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+                f_hatr[k*(2*n+1)+n+j] + _Complex_I*f_hati[k*(2*n+1)+n+j];
+        else
+          for (k = 0; k <= n; k++)
+            for (j = -k; j <= k; j++)
+              plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+                f_hatr[k*(2*n+1)+n+j];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"set_f_hat_linear") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat_linear.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      const int n = plans[i]->N;
+      DM(if (!mxIsDouble(prhs[2]))
+        mexErrMsgTxt("Input argument f_hat must be a double array");)
+      DM(if (mxGetM(prhs[2]) != (unsigned)((n+1)*(n+1)) || mxGetN(prhs[2]) != 1)
+        mexErrMsgTxt("Input argument f_hat must have correct size.");)
+      {
+        double *f_hatr = mxGetPr(prhs[2]), *f_hati = mxGetPi(prhs[2]);
+        int j, k, idx = 0;
+        if (f_hati)
+          for (k = 0; k <= n; k++)
+            for (j = -k; j <= k; j++, idx++)
+              plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+                f_hatr[idx] + _Complex_I*f_hati[idx];
+        else
+          for (k = 0; k <= n; k++)
+            for (j = -k; j <= k; j++, idx++)
+              plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+                f_hatr[idx];
+      }
+    }
+    return;
+  }
+  else if (strcmp(cmd,"display") == 0)
+  {
+    check_nargs(nrhs,2,"Wrong number of arguments for set_f_hat_linear.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+      mexPrintf("Plan %d\n",i);
+      mexPrintf("  pointer: %p\n",plans[i]);
+      mexPrintf("        N: %d\n",plans[i]->N);
+      mexPrintf("  N_total: %d\n",plans[i]->N_total);
+      mexPrintf("  M_total: %d\n",plans[i]->M_total);
+      mexPrintf("        x: %p\n",plans[i]->x);
+      mexPrintf("        f: %p\n",plans[i]->f);
+      mexPrintf("    f_hat: %p\n",plans[i]->f_hat);
+      mexPrintf("    flags: %d\n",plans[i]->flags);
+    }
+    return;
+  }
+  else if(strcmp(cmd,"get_num_threads") == 0)
+  {
+    int32_t nthreads = nfft_get_num_threads();
+    plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
+    *((int32_t *)mxGetData(plhs[0])) = nthreads;
+
+    return;
+  }
+  else
+    mexErrMsgTxt("nfsft: Unknown command.\n");
+}
diff --git a/matlab/nfsft/projection.m b/matlab/nfsft/projection.m
new file mode 100644
index 0000000..2ee592e
--- /dev/null
+++ b/matlab/nfsft/projection.m
@@ -0,0 +1,78 @@
+%PROJECTION Example program: Project a function onto spherical harmonics.
+%
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: projection.m 3776 2012-06-03 13:29:25Z keiner $
+function err = projection()
+disp(sprintf('Number of threads: %d\n', nfsft_get_num_threads()));
+% threshold
+kappa = 1000;
+% polynomial degrees
+emin = 0; emax = 9; Nv = 2.^(emin:emax);
+% saves errors
+err = [Nv',zeros(length(Nv),1)];
+% uniform random nodes
+Me = 1000; xe = [2*pi*rand(1,Me);acos(2*rand(1,Me)-1)]; fe = ff(xe);
+% precomputation
+nfsft_precompute(max(Nv),kappa);
+
+% loop over polynomial degrees
+j = 1;
+for N = Nv
+  % projection using Gauss-Legendre points
+  [x,w] = gl(N);
+  M = size(x,2);
+  plan = nfsft_init_advanced(N,M,NFSFT_NORMALIZED);
+  nfsft_set_x(plan,x);
+  nfsft_precompute_x(plan);
+  f = ff(x).*w;
+  nfsft_set_f(plan,f);
+  nfsft_adjoint(plan);
+  fh = f_hat(nfsft_get_f_hat(plan));
+  nfsft_finalize(plan);
+
+  % evaluation at random nodes
+  plan = nfsft_init_advanced(N,Me,NFSFT_NORMALIZED);
+  nfsft_set_x(plan,xe);
+  nfsft_precompute_x(plan);
+  nfsft_set_f_hat(plan,double(fh));
+  nfsft_trafo(plan);
+  fa = nfsft_get_f(plan)';
+  err(j,2) = norm(fe-fa)/norm(fe);
+  j = j + 1;
+  nfsft_finalize(plan);
+end
+
+% delete precomputed data
+nfsft_forget();
+
+% error plot
+figure;
+loglog(Nv,err(:,2));
+
+end
+
+% the function f
+function y = ff(x)
+n = size(x,2);
+y = ones(1,n);
+j = x(2,:) > pi/2;
+y(j) = 1./sqrt(1 + 3*cos(x(2,j)).^2);
+end
+
diff --git a/matlab/nfsft/simple_test.m b/matlab/nfsft/simple_test.m
new file mode 100644
index 0000000..4a8c1ea
--- /dev/null
+++ b/matlab/nfsft/simple_test.m
@@ -0,0 +1,69 @@
+%SIMPLE_TEST Example program: Basic usage principles
+%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program 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 GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+
+disp(sprintf('Number of threads: %d\n', nfsft_get_num_threads()));
+
+% maximum degree (bandwidth) of spherical harmonics expansions
+N = 2;
+
+% threshold (affects accuracy, 1000 is the default)
+kappa = 1000;
+
+% precomputation
+nfsft_precompute(N,kappa);
+
+% Gau�-Legendre interpolatory quadrature nodes for N. See gl.m
+[X,W] = gl(N);
+
+% number of nodes
+M = size(X,2);
+
+% Create plan.
+plan = nfsft_init_advanced(N,M,NFSFT_NORMALIZED);
+
+% Set nodes.
+nfsft_set_x(plan,X);
+
+% node-dependent precomputation
+nfsft_precompute_x(plan);
+
+% Fourier coefficients
+fh = f_hat(rand((N+1)*(N+1),1));
+display(fh);
+
+% Set Fourier coefficients.
+nfsft_set_f_hat(plan,double(fh));
+
+% transform
+nfsft_trafo(plan);
+
+% function values
+f = nfsft_get_f(plan);
+display(f);
+
+% adjoint transform, using quadrature weights tor ecover Fourier coefficients
+nfsft_set_f(plan,f.*W');
+nfsft_adjoint(plan);
+
+fh2 = f_hat(nfsft_get_f_hat(plan));
+display(fh2);
+
+nfsft_finalize(plan);
diff --git a/nfft3.pc.in b/nfft3.pc.in
new file mode 100644
index 0000000..3fc7bfe
--- /dev/null
+++ b/nfft3.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: NFFT
+Description: Nonuniform fast Fourier transform library
+Version: @VERSION@
+Requires: fftw3
+Libs: -L${libdir} -lnfft3
+Cflags: -I${includedir}
diff --git a/support/Makefile.am b/support/Makefile.am
new file mode 100644
index 0000000..9a76401
--- /dev/null
+++ b/support/Makefile.am
@@ -0,0 +1,3 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+EXTRA_DIST = rem.sed toc.sed
\ No newline at end of file
diff --git a/support/Makefile.in b/support/Makefile.in
new file mode 100644
index 0000000..ec175a3
--- /dev/null
+++ b/support/Makefile.in
@@ -0,0 +1,423 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = support
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = rem.sed toc.sed
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu support/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu support/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/support/rem.sed b/support/rem.sed
new file mode 100755
index 0000000..537c823
--- /dev/null
+++ b/support/rem.sed
@@ -0,0 +1,3 @@
+#!/usr/bin/sed -f
+s/<h1><\/h1>//
+s/<h3>[1-9].[1-9].[1-9] <\/h3>//
diff --git a/support/toc.sed b/support/toc.sed
new file mode 100755
index 0000000..d3afb3e
--- /dev/null
+++ b/support/toc.sed
@@ -0,0 +1,5 @@
+#!/usr/bin/sed -f
+s/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/w "${srcdir}"/doc/api/html/toc.txt
+s/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/w "${srcdir}"/doc/api/html/toc.txt
+s/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/w "${srcdir}"/doc/api/html/toc.txt
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..ce1da08
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,31 @@
+# $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_NFSFT
+  CHECK_NFSFT=
+#TODO implements nfsft check
+#  CHECK_NFSFT=check_nfsft
+#  check_nfsft_SOURCES = check_nfsft.c
+#  check_nfsft_LDADD = $(top_builddir)/libnfft3.la
+else
+  CHECK_NFSFT=
+endif
+
+check_LTLIBRARIES = libcheck_nfft.la
+
+libcheck_nfft_la_SOURCES = check_nfft.c check_nfft.h
+
+check_PROGRAMS = check_nfft_1d
+#check_bessel_i0 check_nfft_1d check_nfft_2d $(CHECK_NFSFT) 
+
+TESTS = #$(check_PROGRAMS)
+
+#check_bessel_i0_SOURCES = check_bessel_i0.c
+#check_bessel_i0_LDADD = $(top_builddir)/libnfft3.la
+
+check_nfft_1d_SOURCES = check_nfft_1d.c
+check_nfft_1d_LDADD = libcheck_nfft.la $(top_builddir)/libnfft3.la
+
+#check_nfft_2d_SOURCES = check_nfft_2d.c
+#check_nfft_2d_LDADD = $(top_builddir)/libnfft3.la
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..0e015b5
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,685 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = check_nfft_1d$(EXEEXT)
+TESTS =
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+libcheck_nfft_la_LIBADD =
+am_libcheck_nfft_la_OBJECTS = check_nfft.lo
+libcheck_nfft_la_OBJECTS = $(am_libcheck_nfft_la_OBJECTS)
+am_check_nfft_1d_OBJECTS = check_nfft_1d.$(OBJEXT)
+check_nfft_1d_OBJECTS = $(am_check_nfft_1d_OBJECTS)
+check_nfft_1d_DEPENDENCIES = libcheck_nfft.la \
+	$(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libcheck_nfft_la_SOURCES) $(check_nfft_1d_SOURCES)
+DIST_SOURCES = $(libcheck_nfft_la_SOURCES) $(check_nfft_1d_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = $(am__tty_colors_dummy)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+#TODO implements nfsft check
+#  CHECK_NFSFT=check_nfsft
+#  check_nfsft_SOURCES = check_nfsft.c
+#  check_nfsft_LDADD = $(top_builddir)/libnfft3.la
+ at HAVE_NFSFT_FALSE@CHECK_NFSFT = 
+ at HAVE_NFSFT_TRUE@CHECK_NFSFT = 
+check_LTLIBRARIES = libcheck_nfft.la
+libcheck_nfft_la_SOURCES = check_nfft.c check_nfft.h
+
+#check_bessel_i0_SOURCES = check_bessel_i0.c
+#check_bessel_i0_LDADD = $(top_builddir)/libnfft3.la
+check_nfft_1d_SOURCES = check_nfft_1d.c
+check_nfft_1d_LDADD = libcheck_nfft.la $(top_builddir)/libnfft3.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkLTLIBRARIES:
+	-test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+	@list='$(check_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libcheck_nfft.la: $(libcheck_nfft_la_OBJECTS) $(libcheck_nfft_la_DEPENDENCIES) $(EXTRA_libcheck_nfft_la_DEPENDENCIES) 
+	$(LINK)  $(libcheck_nfft_la_OBJECTS) $(libcheck_nfft_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+check_nfft_1d$(EXEEXT): $(check_nfft_1d_OBJECTS) $(check_nfft_1d_DEPENDENCIES) $(EXTRA_check_nfft_1d_DEPENDENCIES) 
+	@rm -f check_nfft_1d$(EXEEXT)
+	$(LINK) $(check_nfft_1d_OBJECTS) $(check_nfft_1d_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_nfft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_nfft_1d.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list=' $(TESTS) '; \
+	$(am__tty_colors); \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=XPASS; \
+	      ;; \
+	      *) \
+		col=$$grn; res=PASS; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xfail=`expr $$xfail + 1`; \
+		col=$$lgn; res=XFAIL; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=FAIL; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      col=$$blu; res=SKIP; \
+	    fi; \
+	    echo "$${col}$$res$${std}: $$tst"; \
+	  done; \
+	  if test "$$all" -eq 1; then \
+	    tests="test"; \
+	    All=""; \
+	  else \
+	    tests="tests"; \
+	    All="All "; \
+	  fi; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="$$All$$all $$tests passed"; \
+	    else \
+	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all $$tests failed"; \
+	    else \
+	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    if test "$$skip" -eq 1; then \
+	      skipped="($$skip test was not run)"; \
+	    else \
+	      skipped="($$skip tests were not run)"; \
+	    fi; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  if test "$$failed" -eq 0; then \
+	    col="$$grn"; \
+	  else \
+	    col="$$red"; \
+	  fi; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+	clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+	clean-libtool cscopelist ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+#check_nfft_2d_SOURCES = check_nfft_2d.c
+#check_nfft_2d_LDADD = $(top_builddir)/libnfft3.la
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/check_nfft.c b/tests/check_nfft.c
new file mode 100644
index 0000000..f67ca7c
--- /dev/null
+++ b/tests/check_nfft.c
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "cycle.h"
+#include "check_nfft.h"
+
+static double trafo_direct_cost_factor = 1.0E-6;
+
+double X(trafo_direct_cost)(X(plan) *p)
+{
+  if (trafo_direct_cost_factor == 0.0)
+  {
+    int M, d, Nd, x = 0;
+    for (d = 1; d <= 4; d++)
+    {
+      for (Nd = 4; Nd < 128; Nd *= 2)
+      {
+        for (M = 4; M <= 128; M *= 2)
+        {
+          X(plan) p;
+          int *N = malloc(d*sizeof(int)), i;
+          for (i = 0; i < d; i++)
+          {
+            N[i] = Nd;
+          }
+          X(init)(&p, d, N, M);
+          for (i = 0; i < M; i++)
+            p.x[i] = K(0.0);
+          if(p.nfft_flags & PRE_ONE_PSI)
+            X(precompute_one_psi)(&p);
+          for (i = 0; i < d*Nd; i++)
+          {
+            p.f_hat[i] = K(0.0) + K(0.0) * I;
+          }
+          {
+            double r;
+            ticks t0, t1;
+            t0 = getticks();
+            X(trafo_direct)(&p);
+            t1 = getticks();
+            r = X(elapsed_seconds)(t1, t0)/M;
+            for (i = 0; i < d; i++)
+              r = r / Nd;
+            trafo_direct_cost_factor += r;
+            printf("%E\n", r);
+            x += 1;
+          }
+          X(finalize)(&p);
+          free(N);
+        }
+      }
+    }
+    trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
+    printf("--> %E\n", trafo_direct_cost_factor);
+  }
+
+  {
+    int c = p->M_total, i;
+
+    for (i = 0; i < p->d; i++)
+      c *= p->N[i];
+
+    return trafo_direct_cost_factor * c;
+  }
+}
+
+R X(err_trafo_direct)(X(plan) *p)
+{
+  return K(30.0) * EPSILON;
+}
+
+R X(err_trafo)(X(plan) *p)
+{
+  R m = ((R)p->m), s = K(0.0), K = ((R)p->K);
+  int i;
+  for (i = 0; i < p->d; i++)
+    s = FMAX(s, ((R)p->sigma[i]));
+#if defined(GAUSSIAN)
+  R err = K(4.0) * EXP(-m*KPI*(K(1.0)-K(1.0)/(K(2.0)*s-K(1.0))));
+#elif defined(B_SPLINE)
+  R err = K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m);
+#elif defined(SINC_POWER)
+  R err = (K(1.0)/(m-K(1.0))) * ((K(2.0)/(POW(s,K(2.0)*m))) + POW(s/(K(2.0)*s-K(1.0)),K(2.0)*m));
+#elif defined(KAISER_BESSEL)
+  R err;
+  if (p->nfft_flags | PRE_LIN_PSI)
+    err = EXP(K2PI * m)/(K(8.0) * K * K);
+  else
+    err = K(4.0) * KPI * (SQRT(m) + m) * SQRT(SQRT(K(1.0) - K(1.0)/s)) * EXP(-K2PI*m*SQRT(K(1.0)-K(1.0)/s));
+#else
+  #error Unsupported window function.
+#endif
+
+  return FMAX(K(30.0) * EPSILON, err);
+}
+
+#define MAX_SECONDS 0.1
+
+int X(check_single)(const testcase_delegate_t *testcase, init_delegate_t *init_delegate, trafo_delegate_t *trafo_delegate)
+{
+  int result = EXIT_FAILURE;
+  X(plan) p;
+  int d, j, *N, NN, M;
+  R *x;
+  C *f_hat, *f;
+
+  testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
+
+  /* Init plan. */
+  init_delegate->init(init_delegate, &p, d, N, M);
+
+  /* Nodes. */
+  for (j = 0; j < M*d; j++)
+  {
+    p.x[j] = x[j];
+  }
+
+  /* Pre-compute Psi, maybe. */
+  if(p.nfft_flags & PRE_ONE_PSI)
+    X(precompute_one_psi)(&p);
+
+  /* Fourier coefficients. */
+  for (j = 0; j < NN; j++)
+  {
+    p.f_hat[j] = f_hat[j];
+  }
+
+  if (trafo_delegate->check)
+  {
+    const char* check = trafo_delegate->check(&p);
+    if (check != 0)
+    {
+      printf(" -> %-4s (","OK");
+      printf("%s", check);
+      printf(")\n");
+      result = EXIT_SUCCESS;
+      goto cleanup;
+    }
+  }
+  else if (trafo_delegate->cost)
+  {
+    const double cost = trafo_delegate->cost(&p);
+    if (cost > MAX_SECONDS)
+    {
+      printf(" -> %-4s (cost too high)\n","OK");
+      result = EXIT_SUCCESS;
+      goto cleanup;
+    }
+  }
+
+  trafo_delegate->trafo(&p);
+
+  /* debug */
+  /*for (j = 0; j < M; j++)
+    fprintf(stderr, "f[%2d] = " FE_ " + " FE_ "I, f[%2d] = " FE_ " + " FE_ "I, err = " FE_ "\n", j,
+      CREAL(f[j]), CIMAG(f[j]), j, CREAL(p.f[j]), CIMAG(p.f[j]), CABS(f[j] - p.f[j]) / CABS(f[j]));*/
+
+  /* Standard NFFT error measure. */
+  {
+    R numerator = K(0.0), denominator = K(0.0);
+    for (j = 0; j < M; j++)
+      numerator = MAX(numerator, CABS(f[j] - p.f[j]));
+    for (j = 0; j < NN; j++)
+      denominator += CABS(p.f_hat[j]);
+    {
+      R err = numerator/denominator;
+      R bound = trafo_delegate->acc(&p);
+      result = IF(err < trafo_delegate->acc(&p), EXIT_SUCCESS, EXIT_FAILURE);
+      printf(" -> %-4s " FE_ " (" FE_ ")\n", IF(result == EXIT_FAILURE, "FAIL", "OK"), err, bound);
+    }
+  }
+
+cleanup:
+  testcase->destroy(testcase, x, f_hat, f);
+  X(finalize)(&p);
+  return result;
+}
+
+int X(check_many)(const int nf, const int ni, const int nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  trafo_delegate_t **trafos)
+{
+  int i, j, k, result = EXIT_SUCCESS, r;
+  for (i = 0; i < nf; i++)
+    for (j = 0; j < ni; j++)
+      for (k = 0; k < nt; k++)
+      {
+         r = X(check_single)(testcases[i], initializers[j], trafos[k]);
+         result = IF(r == EXIT_FAILURE, EXIT_FAILURE, result);
+      }
+  return result;
+}
+
+void X(setup_file)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f)
+{
+  testcase_delegate_file_t *ego = (testcase_delegate_file_t*)ego_;
+  int j;
+  FILE *file = fopen(ego->filename, "r");
+
+  printf("%-25s", ego->filename);
+
+  /* Dimensions. */
+  fscanf(file, "%d", d);
+  /* Bandwidths. */
+  *N = malloc(*d * sizeof(int));
+  for (j = 0; j < *d; j++)
+    fscanf(file, "%d", &((*N)[j]));
+  /* Number of nodes. */
+  fscanf(file, "%d", M);
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-4d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+  }
+  printf("],");
+  printf(" M = %-4d,", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= (*N)[j];
+
+  /* Nodes. */
+  *x = malloc(M[0]*d[0]*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    fscanf(file, FFI, &((*x)[j]));
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = malloc(NN[0]*sizeof(C));
+  for (j = 0; j < NN[0]; j++)
+  {
+    R re, im;
+    fscanf(file, FFI " " FFI, &re, &im);
+    (*f_hat)[j] = re + im * I;
+  }
+
+  /* Reference function values. */
+  *f = malloc(M[0] * sizeof(C));
+  for (j = 0; j < M[0]; j++)
+  {
+    R re, im;
+    fscanf(file, FFI " " FFI, &re, &im);
+    (*f)[j] = re + im * I;
+  }
+
+  fclose(file);
+}
+
+void X(destroy_file)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f)
+{
+  free(x);
+  free(f_hat);
+  free(f);
+}
diff --git a/tests/check_nfft.h b/tests/check_nfft.h
new file mode 100644
index 0000000..15f22ab
--- /dev/null
+++ b/tests/check_nfft.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <complex.h>
+#include "nfft3.h"
+#include "infft.h"
+
+/* Testcase delegate. */
+typedef struct testcase_delegate_s testcase_delegate_t;
+
+typedef void (*setup_t)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+typedef void (*destroy_t)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+struct testcase_delegate_s
+{
+  setup_t setup;
+  destroy_t destroy;
+};
+
+typedef struct testcase_delegate_file_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const char *filename;
+} testcase_delegate_file_t;
+
+void X(setup_file)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+void X(destroy_file)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+/* Init delegate. */
+typedef struct init_delegate_s init_delegate_t;
+typedef void (*init_t)(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+struct init_delegate_s
+{
+  const char *name;
+  init_t init;
+  const int m;
+  const unsigned nfft_flags;
+  const unsigned fftw_flags;
+};
+
+/* Trafo delegate. */
+typedef void (*trafo_t)(X(plan) *p);
+typedef double (*cost_t)(X(plan) *p);
+typedef const char* (*check_t)(X(plan) *p);
+typedef R (*acc_t)(X(plan) *p);
+
+typedef struct trafo_delegate_s
+{
+  const char *name;
+  trafo_t trafo;
+  check_t check;
+  cost_t cost;
+  acc_t acc;
+
+} trafo_delegate_t;
+
+double X(trafo_direct_cost)(X(plan) *p);
+
+R X(err_trafo)(X(plan) *p);
+R X(err_trafo_direct)(X(plan) *p);
+
+/* Check single test case.*/
+int X(check_single)(const testcase_delegate_t *testcase,
+    init_delegate_t *init_delegate, trafo_delegate_t *trafo_delegate);
+
+/* Check multiple test cases.*/
+int X(check_many)(const int nf, const int ni, const int nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  trafo_delegate_t **trafos);
+
+/* Size of array. */
+#define SIZE(x) sizeof(x)/sizeof(x[0])
diff --git a/tests/check_nfft_1d.c b/tests/check_nfft_1d.c
new file mode 100644
index 0000000..bc1ab5e
--- /dev/null
+++ b/tests/check_nfft_1d.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+#include "check_nfft.h"
+#include "infft.h"
+
+static const char* filenames[] =
+{
+  "data/nfft_1d_1_1.txt",
+  /*"data/nfft_1d_1_10.txt",
+  "data/nfft_1d_1_20.txt",
+  "data/nfft_1d_1_50.txt",
+  "data/nfft_1d_2_1.txt",
+  "data/nfft_1d_2_10.txt",
+  "data/nfft_1d_2_20.txt",
+  "data/nfft_1d_2_50.txt",
+  "data/nfft_1d_4_1.txt",
+  "data/nfft_1d_4_10.txt",
+  "data/nfft_1d_4_20.txt",
+  "data/nfft_1d_4_50.txt",
+  "data/nfft_1d_10_1.txt",
+  "data/nfft_1d_10_10.txt",
+  "data/nfft_1d_10_20.txt",
+  "data/nfft_1d_10_50.txt",
+  "data/nfft_1d_20_1.txt",
+  "data/nfft_1d_20_10.txt",
+  "data/nfft_1d_20_20.txt",
+  "data/nfft_1d_20_50.txt",
+  "data/nfft_1d_50_1.txt",
+  "data/nfft_1d_50_10.txt",
+  "data/nfft_1d_50_20.txt",
+  "data/nfft_1d_50_50.txt",*/
+};
+
+static const testcase_delegate_file_t nfft_1d_1_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_1.txt"};
+static const testcase_delegate_file_t nfft_1d_1_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_10.txt"};
+static const testcase_delegate_file_t nfft_1d_1_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_20.txt"};
+static const testcase_delegate_file_t nfft_1d_1_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_50.txt"};
+static const testcase_delegate_file_t nfft_1d_2_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_1.txt"};
+static const testcase_delegate_file_t nfft_1d_2_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_10.txt"};
+static const testcase_delegate_file_t nfft_1d_2_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_20.txt"};
+static const testcase_delegate_file_t nfft_1d_2_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_50.txt"};
+static const testcase_delegate_file_t nfft_1d_4_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_1.txt"};
+static const testcase_delegate_file_t nfft_1d_4_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_10.txt"};
+static const testcase_delegate_file_t nfft_1d_4_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_20.txt"};
+static const testcase_delegate_file_t nfft_1d_4_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_50.txt"};
+static const testcase_delegate_file_t nfft_1d_10_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_1.txt"};
+static const testcase_delegate_file_t nfft_1d_10_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_10.txt"};
+static const testcase_delegate_file_t nfft_1d_10_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_20.txt"};
+static const testcase_delegate_file_t nfft_1d_10_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_50.txt"};
+static const testcase_delegate_file_t nfft_1d_20_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_1.txt"};
+static const testcase_delegate_file_t nfft_1d_20_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_10.txt"};
+static const testcase_delegate_file_t nfft_1d_20_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_20.txt"};
+static const testcase_delegate_file_t nfft_1d_20_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_50.txt"};
+static const testcase_delegate_file_t nfft_1d_50_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_1.txt"};
+static const testcase_delegate_file_t nfft_1d_50_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_10.txt"};
+static const testcase_delegate_file_t nfft_1d_50_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_20.txt"};
+static const testcase_delegate_file_t nfft_1d_50_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_50.txt"};
+static const testcase_delegate_file_t *testcases[] = {
+  &nfft_1d_1_1, &nfft_1d_1_10, &nfft_1d_1_20, &nfft_1d_1_50,
+  &nfft_1d_2_1, &nfft_1d_2_10, &nfft_1d_2_20, &nfft_1d_2_50,
+  &nfft_1d_4_1, &nfft_1d_4_10, &nfft_1d_4_20, &nfft_1d_4_50,
+  &nfft_1d_10_1, &nfft_1d_10_10, &nfft_1d_10_20, &nfft_1d_10_50,
+  &nfft_1d_20_1, &nfft_1d_20_10, &nfft_1d_20_20, &nfft_1d_20_50,
+  &nfft_1d_50_1, &nfft_1d_50_10, &nfft_1d_50_20, &nfft_1d_50_50,
+};
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  X(init_1d)(p, N[0], M);
+}
+
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  X(init)(p, d, N, M);
+}
+
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  int *n = malloc(d*sizeof(int));
+  int i;
+  for (i = 0; i < d; i++)
+    n[i] = 2*X(next_power_of_2)(N[i]);
+  X(init_guru)(p, d, N, M, n, ego->m, ego->nfft_flags, ego->fftw_flags);
+  free(n);
+}
+
+/*static void init_advanced_pre_full_psi_(X(plan) *p, const int d, const int *N, const int M)
+{
+  X(init_guru)(p, d, N, M, PRE_PHI_HUT | PRE_FULL_PSI | MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE, 0U);
+}*/
+
+#define DEFAULT_NFFT_FLAGS MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE
+#define DEFAULT_FFTW_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+static init_delegate_t init_1d = {"init_1d", init_1d_};
+static init_delegate_t init = {"init", init_};
+static init_delegate_t init_advanced_pre_psi = {"init_guru (PRE PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_full_psi = {"init_guru (PRE FULL PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_FULL_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_lin_psi = {"init_guru (PRE LIN PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi = {"init_guru (PRE FG PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | FG_PSI | PRE_FG_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#endif
+/* Transformations. */
+static double trafo_direct_cost_factor = 1.0E-6;
+
+static double trafo_direct_cost(X(plan) *p)
+{
+  if (trafo_direct_cost_factor == 0.0)
+  {
+    int M, d, Nd, x = 0;
+    for (d = 1; d <= 4; d++)
+    {
+      for (Nd = 4; Nd < 128; Nd *= 2)
+      {
+        for (M = 4; M <= 128; M *= 2)
+        {
+          X(plan) p;
+          int *N = malloc(d*sizeof(int)), i;
+          for (i = 0; i < d; i++)
+          {
+            N[i] = Nd;
+          }
+          X(init)(&p, d, N, M);
+          for (i = 0; i < M; i++)
+            p.x[i] = K(0.0);
+          if(p.nfft_flags & PRE_ONE_PSI)
+            X(precompute_one_psi)(&p);
+          for (i = 0; i < d*Nd; i++)
+          {
+            p.f_hat[i] = K(0.0) + K(0.0) * I;
+          }
+          {
+            double r;
+            ticks t0, t1;
+            t0 = getticks();
+            X(trafo_direct)(&p);
+            t1 = getticks();
+            r = X(elapsed_seconds)(t1, t0)/M;
+            for (i = 0; i < d; i++)
+              r = r / Nd;
+            trafo_direct_cost_factor += r;
+            printf("%E\n", r);
+            x += 1;
+          }
+          X(finalize)(&p);
+          free(N);
+        }
+      }
+    }
+    trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
+    printf("--> %E\n", trafo_direct_cost_factor);
+  }
+
+  {
+    int c = p->M_total, i;
+
+    for (i = 0; i < p->d; i++)
+      c *= p->N[i];
+
+    return trafo_direct_cost_factor * c;
+  }
+}
+
+static trafo_delegate_t trafo_direct = {"trafo_direct", X(trafo_direct), 0, X(trafo_direct_cost), X(err_trafo_direct)};
+static trafo_delegate_t trafo = {"trafo", X(trafo), X(check), 0, X(err_trafo)};
+
+/* Delegates. */
+static const init_delegate_t* initializers[] = {
+    &init_1d,
+    &init,
+    &init_advanced_pre_psi,
+    &init_advanced_pre_full_psi,
+    &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+    &init_advanced_pre_fg_psi,
+#endif
+};
+static const trafo_delegate_t* trafos[] = {&trafo_direct, &trafo};
+
+int main(void)
+{
+  return X(check_many)(SIZE(testcases), SIZE(initializers), SIZE(trafos),
+    testcases, initializers, trafos);
+}
diff --git a/util/Makefile.am b/util/Makefile.am
new file mode 100644
index 0000000..c92f3d5
--- /dev/null
+++ b/util/Makefile.am
@@ -0,0 +1,21 @@
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
+
+if HAVE_THREADS
+  LIBUTIL_THREADS_LA = libutil_threads.la
+else
+  LIBUTIL_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
+
+libutil_la_SOURCES = util.c
+
+if HAVE_THREADS
+  libutil_threads_la_SOURCES = util.c
+if HAVE_OPENMP
+  libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/util/Makefile.in b/util/Makefile.in
new file mode 100644
index 0000000..4fd1750
--- /dev/null
+++ b/util/Makefile.in
@@ -0,0 +1,580 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = util
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
+	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+	$(top_srcdir)/m4/ax_check_dir.m4 \
+	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
+	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
+	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
+	$(top_srcdir)/m4/ax_nfft_module.m4 \
+	$(top_srcdir)/m4/ax_openmp.m4 \
+	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libutil_la_LIBADD =
+am_libutil_la_OBJECTS = util.lo
+libutil_la_OBJECTS = $(am_libutil_la_OBJECTS)
+libutil_threads_la_LIBADD =
+am__libutil_threads_la_SOURCES_DIST = util.c
+ at HAVE_THREADS_TRUE@am_libutil_threads_la_OBJECTS =  \
+ at HAVE_THREADS_TRUE@	libutil_threads_la-util.lo
+libutil_threads_la_OBJECTS = $(am_libutil_threads_la_OBJECTS)
+libutil_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libutil_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libutil_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libutil_la_SOURCES) $(libutil_threads_la_SOURCES)
+DIST_SOURCES = $(libutil_la_SOURCES) \
+	$(am__libutil_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
+ at HAVE_THREADS_FALSE@LIBUTIL_THREADS_LA = 
+ at HAVE_THREADS_TRUE@LIBUTIL_THREADS_LA = libutil_threads.la
+noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
+libutil_la_SOURCES = util.c
+ at HAVE_THREADS_TRUE@libutil_threads_la_SOURCES = util.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES) 
+	$(LINK)  $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS)
+libutil_threads.la: $(libutil_threads_la_OBJECTS) $(libutil_threads_la_DEPENDENCIES) $(EXTRA_libutil_threads_la_DEPENDENCIES) 
+	$(libutil_threads_la_LINK) $(am_libutil_threads_la_rpath) $(libutil_threads_la_OBJECTS) $(libutil_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libutil_threads_la-util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/util.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libutil_threads_la-util.lo: util.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_threads_la_CFLAGS) $(CFLAGS) -MT libutil_threads_la-util.lo -MD -MP -MF $(DEPDIR)/libutil_threads_la-util.Tpo -c -o libutil_threads_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libutil_threads_la-util.Tpo $(DEPDIR)/libutil_threads_la-util.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='util.c' object='libutil_threads_la-util.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_threads_la_CFLAGS) $(CFLAGS) -c -o libutil_threads_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/util/util.c b/util/util.c
new file mode 100644
index 0000000..e517788
--- /dev/null
+++ b/util/util.c
@@ -0,0 +1,1488 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program 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 GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/** Sources for utilities.
+ *  functions for vectors, window functions, ...
+ *  (c) if not stated otherwise: Daniel Potts, Stefan Kunis
+ */
+#include "config.h"
+
+#include "infft.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <float.h>
+#include <sys/time.h>
+#include "cstripack.h"
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+double nfft_elapsed_seconds(ticks t1, ticks t0)
+{
+  UNUSED(t1);
+  UNUSED(t0);
+  return elapsed(t1,t0) / TICKS_PER_SECOND;
+}
+
+/** Computes integer /f$\prod_{t=0}^{d-1} v_t/f$.
+ */
+int nfft_prod_int(int *vec, int d)
+{
+  int t, prod;
+
+  prod=1;
+  for(t=0; t<d; t++)
+    prod *= vec[t];
+
+  return prod;
+}
+
+/** Computes integer /f$\prod_{t=0}^{d-1} v_t-a/f$.
+ */
+int nfst_prod_minus_a_int(int *vec, int a, int d)
+{
+  int t, prod;
+
+  prod=1;
+  for(t=0; t<d; t++)
+    prod *= vec[t]-a;
+
+  return prod;
+}
+
+/** Computes /f$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}/f$.
+ */
+int nfft_plain_loop(int *idx,int *N,int d)
+{
+  int t,sum;
+
+  sum = idx[0];
+  for (t = 1; t < d; t++)
+    sum = sum * N[t] + idx[t];
+
+  return sum;
+}
+
+/** Computes double /f$\prod_{t=0}^{d-1} v_t/f$.
+ */
+double nfft_prod_real(double *vec,int d)
+{
+  int t;
+  double prod;
+
+  prod=1.0;
+  for(t=0; t<d; t++)
+    prod*=vec[t];
+
+  return prod;
+}
+
+static void bspline_help(int k, double x, double *scratch, int j, int ug,
+  int og, int r)
+{
+  int i; /* row index of the de Boor scheme */
+  int idx; /* index in scratch */
+  double a; /* alpha of the de Boor scheme */
+
+  /* computation of one column */
+  for (i = og + r - k + 1, idx = og; idx >= ug; i--, idx--)
+  {
+    a = ((R)(x - i)) / ((R)(k - j));
+    scratch[idx] = (1 - a) * scratch[idx-1] + a * scratch[idx];
+  }
+} /* bspline_help */
+
+/** Computes \f$M_{k,0}\left(x\right)\f$
+ *  scratch is used for de Boor's scheme
+ */
+double nfft_bspline(int k, double x, double *scratch)
+{
+  double result_value;                  /**< M_{k,0}\left(x\right)            */
+  int r;                                /**< \f$x \in {\rm supp}(M_{0,r}) \f$ */
+  int g1,g2;                            /**< boundaries                       */
+  int j,idx,ug,og;                    /**< indices                          */
+  double a;                             /**< alpha of the de Boor scheme      */
+
+  result_value=0.0;
+  if(0<x && x<k)
+    {
+      /* using symmetry around k/2 */
+      if((k-x)<x) x=k-x;
+
+      r=(int)(ceil(x)-1.0);
+
+      for(idx=0; idx<k; idx++)
+  scratch[idx]=0.0;
+
+      scratch[k-r-1]=1.0;
+
+      /* bounds of the algorithm */
+      g1 = r;
+      g2 = k - 1 - r;
+      ug = g2;
+
+      /* g1<=g2 holds */
+
+      for(j=1, og=g2+1; j<=g1; j++, og++)
+  {
+    a = (x - r + k - 1 - og)/(k - j);
+    scratch[og] = (1 - a) * scratch[og-1];
+    bspline_help(k,x,scratch,j,ug+1,og-1,r);
+    a = (x - r + k - 1 - ug)/(k - j);
+    scratch[ug] = a * scratch[ug];
+  }
+      for(og-- ; j<=g2; j++)
+  {
+    bspline_help(k,x,scratch,j,ug+1,og,r);
+    a = (x - r + k - 1 - ug)/(k - j);
+    scratch[ug] = a * scratch[ug];
+  }
+      for( ; j<k; j++)
+  {
+    ug++;
+    bspline_help(k,x,scratch,j,ug,og,r);
+  }
+      result_value = scratch[k-1];
+    }
+  return(result_value);
+} /* bspline */
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_complex(double _Complex *x, int n)
+{
+  int k;
+  double dot;
+
+  for(k=0,dot=0; k<n; k++)
+    dot+=conj(x[k])*x[k];
+
+  return dot;
+}
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_double(double *x, int n)
+{
+  int k;
+  double dot;
+
+  for(k=0,dot=0; k<n; k++)
+    dot+=x[k]*x[k];
+
+  return dot;
+}
+
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_complex(double _Complex *x, double *w, int n)
+{
+  int k;
+  double dot;
+
+  for(k=0,dot=0.0; k<n; k++)
+    dot+=w[k]*conj(x[k])*x[k];
+
+  return dot;
+}
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_double(double *x, double *w, int n)
+{
+  int k;
+  double dot;
+
+  for(k=0,dot=0.0; k<n; k++)
+    dot+=w[k]*x[k]*x[k];
+
+  return dot;
+}
+
+
+/** Computes the weighted inner/dot product
+    \f$x^H (w\odot w2\odot w2 \odot x)\f$.
+ */
+double nfft_dot_w_w2_complex(double _Complex *x, double *w, double *w2, int n)
+{
+  int k;
+  double dot;
+
+  for(k=0,dot=0.0; k<n; k++)
+    dot+=w[k]*w2[k]*w2[k]*conj(x[k])*x[k];
+
+  return dot;
+}
+
+/** Computes the weighted inner/dot product
+    \f$x^H (w2\odot w2 \odot x)\f$.
+ */
+double nfft_dot_w2_complex(double _Complex *x, double *w2, int n)
+{
+  int k;
+  double dot;
+
+  for(k=0,dot=0.0; k<n; k++)
+    dot+=w2[k]*w2[k]*conj(x[k])*x[k];
+
+  return dot;
+}
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_complex(double _Complex *x, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=y[k];
+}
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_double(double *x, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=y[k];
+}
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_complex(double _Complex *x, double a, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*y[k];
+}
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_double(double *x, double a, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*y[k];
+}
+
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_complex(double _Complex *x, double *w, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=w[k]*y[k];
+}
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_double(double *x, double *w, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=w[k]*y[k];
+}
+
+
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_complex(double _Complex *x, double a, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*x[k]+y[k];
+}
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_double(double *x, double a, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*x[k]+y[k];
+}
+
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_complex(double _Complex *x, double a, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]+=a*y[k];
+}
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_double(double *x, double a, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]+=a*y[k];
+}
+
+
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_complex(double _Complex *x, double a, double _Complex *y, double b, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*x[k]+b*y[k];
+}
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_double(double *x, double a, double *y, double b, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*x[k]+b*y[k];
+}
+
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_complex(double _Complex *x, double a, double *w, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]+=a*w[k]*y[k];
+}
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_double(double *x, double a, double *w, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]+=a*w[k]*y[k];
+}
+
+
+
+/** Updates \f$x \leftarrow a x +  w\odot y\f$.
+ */
+void nfft_upd_axpwy_complex(double _Complex *x, double a, double *w, double _Complex *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*x[k]+w[k]*y[k];
+}
+
+/** Updates \f$x \leftarrow a x +  w\odot y\f$.
+ */
+void nfft_upd_axpwy_double(double *x, double a, double *w, double *y, int n)
+{
+  int k;
+
+  for(k=0;k<n;k++)
+    x[k]=a*x[k]+w[k]*y[k];
+}
+
+
+void nfft_fftshift_complex(double _Complex *x, int d, int* N)
+{
+  int d_pre, d_act, d_post;
+  int N_pre, N_act, N_post;
+  int k_pre, k_act, k_post;
+  int k,k_swap;
+
+  double _Complex x_swap;
+
+  for(d_act=0;d_act<d;d_act++)
+    {
+      for(d_pre=0, N_pre=1;d_pre<d_act;d_pre++)
+  N_pre*=N[d_pre];
+
+      N_act=N[d_act];
+
+      for(d_post=d_act+1, N_post=1;d_post<d;d_post++)
+  N_post*=N[d_post];
+
+      for(k_pre=0;k_pre<N_pre;k_pre++)
+  for(k_act=0;k_act<N_act/2;k_act++)
+    for(k_post=0;k_post<N_post;k_post++)
+      {
+        k=(k_pre*N_act+k_act)*N_post+k_post;
+        k_swap=(k_pre*N_act+k_act+N_act/2)*N_post+k_post;
+
+        x_swap=x[k];
+        x[k]=x[k_swap];
+        x[k_swap]=x_swap;
+      }
+    }
+}
+
+/** vector print
+ */
+void nfft_vpr_int(int *x, int n, char *text)
+{
+  int k;
+
+  if(text!=NULL)
+  {
+      printf ("\n %s, adr=%p\n", text, (void*)x);
+      for (k=0; k<n; k++)
+      {
+    if (k%8==0)
+        printf("%6d.\t", k);
+    printf("%d,", x[k]);
+    if (k%8==7)
+        printf("\n");
+      }
+      if (n%8!=0)
+        printf("\n");
+  }
+  else
+      for (k=0; k<n; k++)
+    printf("%d,\n", x[k]);
+  fflush(stdout);
+}
+
+/** Print real vector to standard output. */
+void X(vpr_double)(R *x, const int n, const char *text)
+{
+  int k;
+
+  if (x == NULL)
+  {
+    printf("null pointer\n");
+    fflush(stdout);
+    exit(-1);
+  }
+
+  if (text != NULL)
+  {
+    printf ("\n %s, adr=%p\n", text, (void*)x);
+
+    for (k = 0; k < n; k++)
+    {
+      if (k%8 == 0)
+        printf("%6d.\t", k);
+
+      printf("%+.1" FE ",", x[k]);
+
+      if (k%8 == 7)
+        printf("\n");
+    }
+
+    if (n%8 != 0)
+      printf("\n");
+  }
+  else
+    for (k = 0; k < n; k++)
+      printf("%+" FE ",\n", x[k]);
+
+  fflush(stdout);
+}
+
+/** Print complex vector to standard output. */
+void X(vpr_complex)(C *x, const int n, const char *text)
+{
+  int k;
+
+  if(text != NULL)
+  {
+    printf("\n %s, adr=%p\n", text, (void*)x);
+    for (k = 0; k < n; k++)
+    {
+      if (k%4 == 0)
+        printf("%6d.\t", k);
+
+      printf("%+.1" FE "%+.1" FE "i,", CREAL(x[k]), CIMAG(x[k]));
+
+      if (k%4==3)
+        printf("\n");
+    }
+    if (n%4!=0)
+      printf("\n");
+  }
+  else
+    for (k = 0; k < n; k++)
+      printf("%+" FE "%+" FE "i,\n", CREAL(x[k]), CIMAG(x[k]));
+
+  fflush(stdout);
+}
+
+void X(vrand_unit_complex)(C *x, const int n)
+{
+  int k;
+
+  for (k = 0; k < n; k++)
+    x[k] = nfft_drand48() + II*nfft_drand48();
+}
+
+void X(vrand_shifted_unit_double)(R *x, const int n)
+{
+  int k;
+
+  for (k = 0; k < n; k++)
+    x[k] = nfft_drand48() - K(0.5);
+}
+
+/** Compute non periodic voronoi weights for ordered nodes x_j */
+void X(voronoi_weights_1d)(R *w, R *x, const int M)
+{
+  int j;
+
+  w[0] = (x[1]-x[0])/K(2.0);
+
+  for(j = 1; j < M-1; j++)
+    w[j] = (x[j+1]-x[j-1])/K(2.0);
+
+  w[M-1] = (x[M-1]-x[M-2])/K(2.0);
+}
+
+void nfft_voronoi_weights_S2(double *w, double *xi, int M)
+{
+  double *x;
+  double *y;
+  double *z;
+  int j;
+  int k;
+  int el;
+  int Mlocal = M;
+  int lnew;
+  int ier;
+  int *list;
+  int *lptr;
+  int *lend;
+  int *near;
+  int *next;
+  double  *dist;
+  int *ltri;
+  int *listc;
+  int nb;
+  double *xc;
+  double *yc;
+  double *zc;
+  double *rc;
+  double *vr;
+  int lp;
+  int lpl;
+  int kv;
+  double a;
+
+  /* Allocate memory for auxilliary arrays. */
+  x = (double*)nfft_malloc(M * sizeof(double));
+  y = (double*)nfft_malloc(M * sizeof(double));
+  z = (double*)nfft_malloc(M * sizeof(double));
+
+  list = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
+  lptr = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
+  lend = (int*)nfft_malloc((M+1)*sizeof(int));
+  near = (int*)nfft_malloc((M+1)*sizeof(int));
+  next = (int*)nfft_malloc((M+1)*sizeof(int));
+  dist = (double*)nfft_malloc((M+1)*sizeof(double));
+  ltri = (int*)nfft_malloc((6*M+1)*sizeof(int));
+  listc = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
+  xc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+  yc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+  zc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+  rc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+  vr = (double*)nfft_malloc(3*(2*M-4+1)*sizeof(double));
+
+  /* Convert from spherical Coordinates in [0,1/2]x[-1/2,1/2) to Cartesian
+   * coordinates. */
+  for (k = 0; k < M; k++)
+  {
+    x[k] = sin(2.0*PI*xi[2*k+1])*cos(2.0*PI*xi[2*k]);
+    y[k] = sin(2.0*PI*xi[2*k+1])*sin(2.0*PI*xi[2*k]);
+    z[k] = cos(2.0*PI*xi[2*k+1]);
+  }
+
+  /* Generate Delaunay triangulation. */
+  trmesh_(&Mlocal, x, y, z, list, lptr, lend, &lnew, near, next, dist, &ier);
+
+  /* Check error flag. */
+  if (ier == 0)
+  {
+    /* Get Voronoi vertices. */
+    crlist_(&Mlocal, &Mlocal, x, y, z, list, lend, lptr, &lnew, ltri, listc, &nb, xc,
+      yc, zc, rc, &ier);
+
+    if (ier == 0)
+    {
+      /* Calcuate sizes of Voronoi regions. */
+      for (k = 0; k < M; k++)
+      {
+        /* Get last neighbour index. */
+        lpl = lend[k];
+        lp = lpl;
+
+        j = 0;
+        vr[3*j] = x[k];
+        vr[3*j+1] = y[k];
+        vr[3*j+2] = z[k];
+
+        do
+        {
+          j++;
+          /* Get next neighbour. */
+          lp = lptr[lp-1];
+          kv = listc[lp-1];
+          vr[3*j] = xc[kv-1];
+          vr[3*j+1] = yc[kv-1];
+          vr[3*j+2] = zc[kv-1];
+          /* fprintf(stderr, "lp = %ld\t", lp); */
+        } while (lp != lpl);
+
+        a = 0;
+        for (el = 0; el < j; el++)
+        {
+          a += areas_(vr, &vr[3*(el+1)],&vr[3*(((el+1)%j)+1)]);
+        }
+
+        w[k] = a;
+      }
+    }
+  }
+
+  /* Deallocate memory. */
+  nfft_free(x);
+  nfft_free(y);
+  nfft_free(z);
+
+  nfft_free(list);
+  nfft_free(lptr);
+  nfft_free(lend);
+  nfft_free(near);
+  nfft_free(next);
+  nfft_free(dist);
+  nfft_free(ltri);
+  nfft_free(listc);
+  nfft_free(xc);
+  nfft_free(yc);
+  nfft_free(zc);
+  nfft_free(rc);
+  nfft_free(vr);
+}
+
+/**
+ * Compute damping factor for modified Fejer kernel:
+ * /f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)/f$
+ */
+R X(modified_fejer)(const int N, const int kk)
+{
+  return (K(2.0)/((R)(N*N))*(K(1.0)-FABS(K(2.0)*kk+K(1.0))/((R)N)));
+}
+
+/** Compute damping factor for modified Jackson kernel. */
+R X(modified_jackson2)(const int N, const int kk)
+{
+  int kj;
+  const R n=(N/K(2.0)+K(1.0))/K(2.0);
+  R result, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
+  {
+    k = ABS(kj);
+
+    if(k/n < K(1.0))
+      result += K(1.0) - (K(3.0)*k + K(6.0)*n*POW(k,K(2.0))
+        - K(3.0)*POW(k,K(3.0)))/(K(2.0)*n*(K(2.0)*POW(n,K(2.0))+K(1.0)));
+    else
+      result+= (K(2.0)*n-k)*(POW(2*n-k,K(2.0))-K(1.0))/(K(2.0)
+        *n*(K(2.0)*POW(n,K(2.0))+K(1.0)));
+  }
+
+  return result;
+}
+
+/** Compute damping factor for modified generalised Jackson kernel. */
+R X(modified_jackson4)(const int N, const int kk)
+{
+  int kj;
+  const R n = (N/K(2.0)+K(3.0))/K(4.0), normalisation = (K(2416.0)*POW(n,K(7.0))
+    + K(1120.0)*POW(n,K(5.0)) + K(784.0)*POW(n,K(3.0)) + K(720.0)*n);
+  R result, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
+  {
+    k = ABS(kj);
+
+    if (k/n < K(1.0))
+      result += K(1.0) - (K(1260.0)*k + (K(1680.0)*POW(n, K(5.0))
+        + K(2240.0)*POW(n, K(3.0)) + K(2940.0)*n)*POW(k, K(2.0))
+        - K(1715.0)*POW(k, K(3.0)) - (K(560.0)*POW(n, K(3.0))
+        + K(1400.0)*n)*POW(k, K(4.0)) + K(490.0)*POW(k, K(5.0))
+        + K(140.0)*n*POW(k, K(6.0)) - K(35.0)*POW(k,K(7.0)))/normalisation;
+
+    if ((K(1.0) <= k/n) && (k/n < K(2.0)))
+      result += ((K(2472.0)*POW(n, K(7.0)) + K(336.0)*POW(n, K(5.0))
+        + K(3528.0)*POW(n, K(3.0)) - K(1296.0)*n) - (K(392.0)*POW(n, K(6.0))
+        - K(3920.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(756.0))*k
+        - (K(504.0)*POW(n, K(5.0)) + K(10080.0)*POW(n, K(3.0))
+        - K(5292.0)*n)*POW(k, K(2.0)) - (K(1960.0)*POW(n, K(4.0))
+        - K(7840.0)*POW(n, K(2.0)) + K(1029.0))*POW(k, K(3.0))
+        + (K(2520.0)*POW(n, K(3.0)) - K(2520.0)*n) * POW(k, K(4.0))
+        - (K(1176.0)*POW(n, K(2.0)) - K(294.0)) * POW(k, K(5.0))
+        + K(252.0)*n*POW(k, K(6.0)) - K(21.0)*POW(k, K(7.0)))/normalisation;
+
+    if ((K(2.0) <= k/n) && (k/n < K(3.0)))
+      result += (-(K(1112.0)*POW(n, K(7.0)) - K(12880.0)*POW(n, K(5.0))
+        + K(7448.0)*POW(n, K(3.0)) - K(720.0)*n) + (K(12152.0)*POW(n, K(6.0))
+        - K(27440.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(252.0))*k
+        - (K(19320.0)*POW(n, K(5.0)) - K(21280.0)*POW(n, K(3.0))
+        + K(2940.0)*n)*POW(k, K(2.0)) + (K(13720.0)*POW(n, K(4.0))
+        - K(7840.0)*POW(n, K(2.0)) + K(343.0))*POW(k, K(3.0))
+        - (K(5320.0)*POW(n, K(3.0)) - K(1400.0)*n)*POW(k, K(4.0))
+        + (K(1176.0)*POW(n, K(2.0)) - K(98.0))*POW(k, K(5.0))
+        - K(140.0)*n*POW(k, K(6.0)) + K(7.0) * POW(k, K(7.0)))/normalisation;
+
+    if ((K(3.0) <= k/n) && (k/n < K(4.0)))
+      result += ((4*n-k)*(POW(4*n-k, K(2.0)) - K(1.0))*(POW(4*n-k, K(2.0))
+        - K(4.0))*(POW(4*n-k, K(2.0)) - K(9.0)))/normalisation;
+  }
+
+  return result;
+}
+
+/** Compute damping factor for modified Sobolev kernel. */
+R X(modified_sobolev)(const R mu, const int kk)
+{
+  R result;
+  int kj, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
+  {
+    k = ABS(kj);
+    if (k == 0)
+      result += K(1.0);
+    else
+      result += POW((double)k,-K(2.0)*mu);
+  }
+
+  return result;
+}
+
+/** Comput damping factor for modified multiquadric kernel. */
+R X(modified_multiquadric)(const R mu, const R c, const int kk)
+{
+  R result;
+  int kj, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
+    {
+      k = ABS(kj);
+      result += POW((double)(k*k + c*c), -mu);
+    }
+
+  return result;
+}
+
+static inline int scaled_modified_bessel_i_series(const R x, const R alpha,
+  const int nb, const int ize, R *b)
+{
+  const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
+  R tempa = K(1.0), empal = K(1.0) + alpha, halfx = K(0.0), tempb = K(0.0);
+  int n, ncalc = nb;
+
+  if (enmten < x)
+    halfx = x/K(2.0);
+
+  if (alpha != K(0.0))
+    tempa = POW(halfx, alpha)/TGAMMA(empal);
+
+  if (ize == 2)
+    tempa *= EXP(-x);
+
+  if (K(1.0) < x + K(1.0))
+    tempb = halfx*halfx;
+
+  b[0] = tempa + tempa*tempb/empal;
+
+  if (x != K(0.0) && b[0] == K(0.0))
+    ncalc = 0;
+
+  if (nb == 1)
+    return ncalc;
+
+  if (K(0.0) < x)
+  {
+    R tempc = halfx, tover = (enmten + enmten)/x;
+
+    if (tempb != K(0.0))
+      tover = enmten/tempb;
+
+    for (n = 1; n < nb; n++)
+    {
+      tempa /= empal;
+      empal += K(1.0);
+      tempa *= tempc;
+
+      if (tempa <= tover*empal)
+        tempa = K(0.0);
+
+      b[n] = tempa + tempa*tempb/empal;
+
+      if (b[n] == K(0.0) && n < ncalc)
+        ncalc = n;
+    }
+  }
+  else
+    for (n = 1; n < nb; n++)
+      b[n] = K(0.0);
+
+  return ncalc;
+}
+
+static inline void scaled_modified_bessel_i_normalize(const R x,
+  const R alpha, const int nb, const int ize, R *b, const R sum_)
+{
+  const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
+  R sum = sum_, tempa;
+  int n;
+
+  /* Normalize, i.e., divide all b[n] by sum */
+  if (alpha != K(0.0))
+    sum = sum * TGAMMA(K(1.0) + alpha) * POW(x/K(2.0), -alpha);
+
+  if (ize == 1)
+    sum *= EXP(-x);
+
+  tempa = enmten;
+
+  if (K(1.0) < sum)
+    tempa *= sum;
+
+  for (n = 1; n <= nb; n++)
+  {
+    if (b[n-1] < tempa)
+      b[n-1] = K(0.0);
+
+    b[n-1] /= sum;
+  }
+}
+
+/**
+ * Calculates the modified bessel function \f$I_{n+\alpha}(x)\f$, possibly
+ * scaled by \f$\mathrm{e}^{-x}\f$, for real non-negative \f$x,alpha\f$ with
+ * \f$0 \le \alpha < 1\f$, and \f$n=0,1,\ldots,nb-1\f$.
+ *
+ * \arg[in] \c x non-negative real number in \f$I_{n+\alpha}(x)\f$
+ * \arg[in] \c alpha non-negative real number with \f$0 \le \alpha < 1\f$ in
+ *   \f$I_{n+\alpha}(x)\f$
+ * \arg[in] \c nb number of functions to be calculated
+ * \arg[in] \c ize switch between no scaling (\c ize = 1) and exponential
+ *   scaling (\c ize = 2)
+ * \arg[out] \c b real output vector to contain \f$I_{n+\alpha}(x)\f$,
+ *   \f$n=0,1,\ldots,nb-1\f$
+ * \return error indicator. Only if this value is identical to \c nb, then all
+ *   values in \c b have been calculated to full accuracy. If not, errors are
+ *   indicated using the following scheme:
+ *   - ncalc < 0: At least one of the arguments was out of range (e.g. nb <= 0,
+ *     ize neither equals 1 nor 2, \f$|x| \ge exparg\f$). In this case, the
+ *     output vector b is not calculated and \c ncalc is set to
+ *     \f$\min(nb,0)-1\f$.
+ *   - 0 < ncalc < nb: Not all requested functions could be calculated to full
+ *     accuracy. This can occur when nb is much larger than |x|. in this case,
+ *     the values \f$I_{n+\alpha}(x)\f$ are calculated to full accuracy for
+ *     \f$n=0,1,\ldots,ncalc\f$. The rest of the values up to
+ *     \f$n=0,1,\ldots,nb-1\f$ is calculated to a lower accuracy.
+ *
+ * \acknowledgement
+ *
+ * This program is based on a program written by David J. Sookne [2] that
+ * computes values of the Bessel functions \f$J_{\nu}(x)\f$ or \f$I_{\nu}(x)\f$
+ * for real argument \f$x\f$ and integer order \f$\nu\f$. modifications include
+ * the restriction of the computation to the Bessel function \f$I_{\nu}(x)\f$
+ * for non-negative real argument, the extension of the computation to arbitrary
+ * non-negative orders \f$\nu\f$, and the elimination of most underflow.
+ *
+ * References:
+ * [1] F. W. J. Olver and D. J. Sookne, A note on backward recurrence
+ *   algorithms", Math. Comput. (26), 1972, pp 125 -- 132.
+ * [2] D. J. Sookne, "Bessel functions of real argument and int order", NBS
+ *   Jour. of Res. B. (77B), 1973, pp. 125 -- 132.
+ *
+ * Modified by W. J. Cody, Applied Mathematics Division, Argonne National
+ *   Laboratory, Argonne, IL, 60439, USA
+ *
+ * Modified by Jens Keiner, Institute of Mathematics, University of Lübeck,
+ *   23560 Lübeck, Germany
+ */
+int nfft_smbi(const R x, const R alpha, const int nb, const int ize, R *b)
+{
+  /* machine dependent parameters */
+  /* NSIG   - DECIMAL SIGNIFICANCE DESIRED.  SHOULD BE SET TO */
+  /*          IFIX(ALOG10(2)*NBIT+1), WHERE NBIT IS THE NUMBER OF */
+  /*          BITS IN THE MANTISSA OF A WORKING PRECISION VARIABLE. */
+  /*          SETTING NSIG LOWER WILL RESULT IN DECREASED ACCURACY */
+  /*          WHILE SETTING NSIG HIGHER WILL INCREASE CPU TIME */
+  /*          WITHOUT INCREASING ACCURACY.  THE TRUNCATION ERROR */
+  /*          IS LIMITED TO A RELATIVE ERROR OF T=.5*10**(-NSIG). */
+  /* ENTEN  - 10.0 ** K, WHERE K IS THE LARGEST int SUCH THAT */
+  /*          ENTEN IS MACHINE-REPRESENTABLE IN WORKING PRECISION. */
+  /* ENSIG  - 10.0 ** NSIG. */
+  /* RTNSIG - 10.0 ** (-K) FOR THE SMALLEST int K SUCH THAT */
+  /*          K .GE. NSIG/4. */
+  /* ENMTEN - THE SMALLEST ABS(X) SUCH THAT X/4 DOES NOT UNDERFLOW. */
+  /* XLARGE - UPPER LIMIT ON THE MAGNITUDE OF X WHEN IZE=2.  BEAR */
+  /*          IN MIND THAT IF ABS(X)=N, THEN AT LEAST N ITERATIONS */
+  /*          OF THE BACKWARD RECURSION WILL BE EXECUTED. */
+  /* EXPARG - LARGEST WORKING PRECISION ARGUMENT THAT THE LIBRARY */
+  /*          EXP ROUTINE CAN HANDLE AND UPPER LIMIT ON THE */
+  /*          MAGNITUDE OF X WHEN IZE=1. */
+  const int nsig = MANT_DIG + 2;
+  const R enten = nfft_float_property(NFFT_R_MAX);
+  const R ensig = POW(K(10.0),(R)nsig);
+  const R rtnsig = POW(K(10.0),-CEIL((R)nsig/K(4.0)));
+  const R xlarge = K(1E4);
+  const R exparg = FLOOR(LOG(POW(K(R_RADIX),K(DBL_MAX_EXP-1))));
+
+  /* System generated locals */
+  int l, n, nend, magx, nbmx, ncalc, nstart;
+  R p, em, en, sum, pold, test, empal, tempa, tempb, tempc, psave, plast, tover,
+    emp2al, psavel;
+
+  magx = LRINT(FLOOR(x));
+
+  /* return if x, nb, or ize out of range */
+  if (   nb <= 0 || x < K(0.0) || alpha < K(0.0) || K(1.0) <= alpha
+      || ((ize != 1 || exparg < x) && (ize != 2 || xlarge < x)))
+    return (MIN(nb,0) - 1);
+
+  /* 2-term ascending series for small x */
+  if (x < rtnsig)
+    return scaled_modified_bessel_i_series(x,alpha,nb,ize,b);
+
+  ncalc = nb;
+  /* forward sweep, Olver's p-sequence */
+
+  nbmx = nb - magx;
+  n = magx + 1;
+
+  en = (R) (n+n) + (alpha+alpha);
+  plast = K(1.0);
+  p = en/x;
+
+  /* significance test */
+  test = ensig + ensig;
+
+  if ((5*nsig) < (magx << 1))
+    test = SQRT(test*p);
+  else
+    test /= POW(K(1.585),(R)magx);
+
+  if (3 <= nbmx)
+  {
+    /* calculate p-sequence until n = nb-1 */
+    tover = enten/ensig;
+    nstart = magx+2;
+    nend = nb - 1;
+
+    for (n = nstart; n <= nend; n++)
+    {
+      en += K(2.0);
+      pold = plast;
+      plast = p;
+      p = en*plast/x + pold;
+      if (p > tover)
+      {
+        /* divide p-sequence by tover to avoid overflow. Calculate p-sequence
+         * until 1 <= |p| */
+        tover = enten;
+        p /= tover;
+        plast /= tover;
+        psave = p;
+        psavel = plast;
+        nstart = n + 1;
+
+        do
+        {
+          n++;
+          en += K(2.0);
+          pold = plast;
+          plast = p;
+          p = en*plast/x + pold;
+        } while (p <= K(1.0));
+
+        tempb = en/x;
+
+        /* Backward test. Find ncalc as the largest n such that test is passed. */
+        test = pold*plast*(K(0.5) - K(0.5)/(tempb * tempb))/ensig;
+        p = plast*tover;
+        n--;
+        en -= K(2.0);
+        nend = MIN(nb,n);
+
+        for (ncalc = nstart; ncalc <= nend; ncalc++)
+        {
+          pold = psavel;
+          psavel = psave;
+          psave = en*psavel/x + pold;
+          if (test < psave * psavel)
+            break;
+        }
+
+        ncalc--;
+        goto L80;
+      }
+    }
+
+    n = nend;
+    en = (R) (n+n) + (alpha+alpha);
+
+    /* special significance test for 2 <= nbmx */
+    test = FMAX(test,SQRT(plast*ensig)*SQRT(p+p));
+  }
+
+  /* calculate p-sequence until significance test is passed */
+  do
+  {
+    n++;
+    en += K(2.0);
+    pold = plast;
+    plast = p;
+    p = en*plast/x + pold;
+  } while (p < test);
+
+  /* Initialize backward recursion and normalization sum. */
+L80:
+  n++;
+  en += K(2.0);
+  tempb = K(0.0);
+  tempa = K(1.0)/p;
+  em = (R)(n-1);
+  empal = em + alpha;
+  emp2al = em - K(1.0) + (alpha+alpha);
+  sum = tempa*empal*emp2al/em;
+  nend = n-nb;
+
+  if (nend < 0)
+  {
+    /* We have n <= nb. So store b[n] and set higher orders to zero */
+    b[n-1] = tempa;
+    nend = -nend;
+    for (l = 1; l <= nend; ++l)
+      b[n-1 + l] = K(0.0);
+  }
+  else
+  {
+    if (nend != 0)
+    {
+      /* recur backward via difference equation, calculating b[n] until n = nb */
+      for (l = 1; l <= nend; ++l)
+      {
+        n--;
+        en -= K(2.0);
+        tempc = tempb;
+        tempb = tempa;
+        tempa = en*tempb/x + tempc;
+        em -= K(1.0);
+        emp2al -= K(1.0);
+
+        if (n == 1)
+          break;
+
+        if (n == 2)
+          emp2al = K(1.0);
+
+        empal -= K(1.0);
+        sum = (sum + tempa*empal)*emp2al/em;
+      }
+    }
+
+    /* store b[nb] */
+    b[n-1] = tempa;
+
+    if (nb <= 1)
+    {
+      sum = sum + sum + tempa;
+      scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+      return ncalc;
+    }
+
+    /* calculate and store b[nb-1] */
+    n--;
+    en -= 2.0;
+    b[n-1] = en*tempa/x + tempb;
+
+    if (n == 1)
+    {
+      sum = sum + sum + b[0];
+      scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+      return ncalc;
+    }
+
+    em -= K(1.0);
+    emp2al -= K(1.0);
+
+    if (n == 2)
+      emp2al = K(1.0);
+
+    empal -= K(1.0);
+    sum = (sum + b[n-1]*empal)*emp2al/em;
+  }
+
+  nend = n - 2;
+
+  if (nend != 0)
+  {
+    /* Calculate and store b[n] until n = 2. */
+    for (l = 1; l <= nend; ++l)
+    {
+      n--;
+      en -= K(2.0);
+      b[n-1] = en*b[n]/x + b[n+1];
+      em -= K(1.0);
+      emp2al -= K(1.0);
+
+      if (n == 2)
+        emp2al = K(1.0);
+
+      empal -= K(1.0);
+      sum = (sum + b[n-1]*empal)*emp2al/em;
+    }
+  }
+
+  /* calculate b[1] */
+  b[0] = K(2.0)*empal*b[1]/x + b[2];
+  sum = sum + sum + b[0];
+
+  scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+  return ncalc;
+}
+
+/**
+ * Prints an error message for a failed assertion together with filename and the
+ * line where the assertion failed.
+ */
+void nfft_assertion_failed(const char *s, int line, const char *file)
+{
+  fflush(stdout);
+  fprintf(stderr, "nfft: %s:%d: assertion failed: %s\n", file, line, s);
+#ifdef HAVE_ABORT
+  /* Use abort function. */
+  abort();
+#else
+  /* Use exit function. */
+  exit(EXIT_FAILURE);
+#endif
+}
+
+/* We declare drand48() and srand48() ourselves, if they are is not declared in
+ * math.h (e.g. on SuSE 9.3), grrr. */
+#include "config.h"
+#if HAVE_DECL_DRAND48 == 0
+  extern double drand48(void);
+#endif
+#if HAVE_DECL_SRAND48 == 0
+  extern void srand48(long int);
+#endif
+
+double nfft_drand48(void)
+{
+#ifdef HAVE_DRAND48
+  return drand48();
+#else
+  return ((R)rand())/((R)RAND_MAX);
+#endif
+}
+
+void nfft_srand48(long int seed)
+{
+#ifdef HAVE_SRAND48
+  srand48(seed);
+#else
+  srand((unsigned int)seed);
+#endif
+}
+
+
+#define z_swap(_a_, _b_, _t_)     do { (_t_) = (_a_); (_a_) = (_b_); (_b_) = (_t_); } while (0)
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static void nfft_sort_node_indices_sort_bubble(int n, int *keys)
+{
+  int i, j, ti;
+
+  for (i = 0; i < n; ++i)
+  {
+    j = i;
+    while (j > 0 && keys[2 * j + 0] < keys[2 * (j - 1) + 0])
+    {
+      z_swap(keys[2 * j + 0], keys[2 * (j - 1) + 0], ti);
+      z_swap(keys[2 * j + 1], keys[2 * (j - 1) + 1], ti);
+      --j;
+    }
+  }
+}
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static void nfft_sort_node_indices_radix_count(int n, int *keys, int shift, int mask, int *counts)
+{
+  int i, k;
+
+  for (i = 0; i < n; ++i)
+  {
+    k = (keys[2 * i + 0] >> shift) & mask;
+    ++counts[k];
+  }
+}
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static void nfft_sort_node_indices_radix_rearrange(int n, int *keys_in, int *keys_out, int shift, int mask, int *displs)
+{
+  int i, k;
+
+  for (i = 0; i < n; ++i)
+  {
+    k = (keys_in[2 * i + 0] >> shift) & mask;
+    keys_out[2 * displs[k] + 0] = keys_in[2 * i + 0];
+    keys_out[2 * displs[k] + 1] = keys_in[2 * i + 1];
+    ++displs[k];
+  }
+}
+
+/**
+ * Radix sort for node indices with OpenMP support.
+ *
+ * \author Michael Hofmann
+ */
+void nfft_sort_node_indices_radix_lsdf(int n, int *keys0, int *keys1, int rhigh)
+{
+  const int rwidth = 9;
+  const int radix_n = 1 << rwidth;
+  const int radix_mask = radix_n - 1;
+  const int rhigh_in = rhigh;
+
+  const int tmax =
+#ifdef _OPENMP
+    omp_get_max_threads();
+#else
+    1;
+#endif
+
+  int *from, *to, *tmp;
+
+  int i, k, l, h;
+  int lcounts[tmax * radix_n];
+
+  int tid = 0, tnum = 1;
+
+
+  from = keys0;
+  to = keys1;
+
+  while (rhigh >= 0)
+  {
+#ifdef _OPENMP
+    #pragma omp parallel private(tid, tnum, i, l, h)
+    {
+      tid = omp_get_thread_num();
+      tnum = omp_get_num_threads();
+#endif
+
+      for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
+
+      l = (tid * n) / tnum;
+      h = ((tid + 1) * n) / tnum;
+
+      nfft_sort_node_indices_radix_count(h - l, from + (2 * l), rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+    }
+#endif
+
+    k = 0;
+    for (i = 0; i < radix_n; ++i)
+    {
+      for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
+    }
+
+#ifdef _OPENMP
+    #pragma omp parallel private(tid, tnum, i, l, h)
+    {
+      tid = omp_get_thread_num();
+      tnum = omp_get_num_threads();
+#endif
+
+      l = (tid * n) / tnum;
+      h = ((tid + 1) * n) / tnum;
+
+      nfft_sort_node_indices_radix_rearrange(h - l, from + (2 * l), to, rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+    }
+#endif
+
+/*    print_keys(n, to);*/
+
+    tmp = from;
+    from = to;
+    to = tmp;
+
+    rhigh -= rwidth;
+  }
+
+  if (to == keys0) memcpy(to, from, n * 2 * sizeof(int));
+}
+
+/**
+ * Radix sort for node indices with OpenMP support.
+ *
+ * \author Michael Hofmann
+ */
+void nfft_sort_node_indices_radix_msdf(int n, int *keys0, int *keys1, int rhigh)
+{
+  const int rwidth = 9;
+  const int radix_n = 1 << rwidth;
+  const int radix_mask = radix_n - 1;
+
+  const int tmax =
+#ifdef _OPENMP
+    omp_get_max_threads();
+#else
+    1;
+#endif
+
+  int i, k, l, h;
+  int lcounts[tmax * radix_n];
+
+  int counts[radix_n], displs[radix_n];
+
+  int tid = 0, tnum = 1;
+
+
+  rhigh -= rwidth;
+
+#ifdef _OPENMP
+  #pragma omp parallel private(tid, tnum, i, l, h)
+  {
+    tid = omp_get_thread_num();
+    tnum = omp_get_num_threads();
+#endif
+
+    for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
+
+    l = (tid * n) / tnum;
+    h = ((tid + 1) * n) / tnum;
+
+    nfft_sort_node_indices_radix_count(h - l, keys0 + (2 * l), rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+  }
+#endif
+
+  k = 0;
+  for (i = 0; i < radix_n; ++i)
+  {
+    for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
+
+    displs[i] = lcounts[0 * radix_n + i];
+    if (i > 0) counts[i - 1] = displs[i] - displs[i - 1];
+  }
+  counts[radix_n - 1] = n - displs[radix_n - 1];
+
+#ifdef _OPENMP
+  #pragma omp parallel private(tid, tnum, i, l, h)
+  {
+    tid = omp_get_thread_num();
+    tnum = omp_get_num_threads();
+#endif
+
+    l = (tid * n) / tnum;
+    h = ((tid + 1) * n) / tnum;
+
+    nfft_sort_node_indices_radix_rearrange(h - l, keys0 + (2 * l), keys1, rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+  }
+#endif
+
+  memcpy(keys0, keys1, n * 2 * sizeof(int));
+
+  if (rhigh >= 0)
+  {
+    for (i = 0; i < radix_n; ++i)
+    {
+      if (counts[i] > 1)
+      {
+        if (counts[i] > 256)
+          nfft_sort_node_indices_radix_msdf(counts[i], keys0 + 2 * displs[i], keys1 + 2 * displs[i], rhigh);
+        else
+          nfft_sort_node_indices_sort_bubble(counts[i], keys0 + 2 * displs[i]);
+      }
+    }
+  }
+}
+
+int nfft_get_num_threads(void)
+{
+#ifdef _OPENMP
+  return nfft_get_omp_num_threads();
+#else
+  return 1;
+#endif
+}
+
+#ifdef _OPENMP
+int nfft_get_omp_num_threads(void)
+{
+  int nthreads;
+  #pragma omp parallel default(shared)
+  {
+    int n = omp_get_num_threads();
+    #pragma omp master
+    {
+      nthreads = n;
+    }
+  }
+  return nthreads;
+}
+#endif

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



More information about the debian-science-commits mailing list